From f745a2355f6da49788989727d64284d9e1d1d9e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 25 May 2021 10:34:15 +0100 Subject: [PATCH 01/25] Basic Prosemirror editor with Markdown --- markdown-editor/javascript/.gitignore | 18 + markdown-editor/javascript/.mocharc.json | 6 + markdown-editor/javascript/.rsync | 3 + markdown-editor/javascript/.storybook/main.js | 20 + .../javascript/.storybook/preview.js | 3 + markdown-editor/javascript/LICENSE | 21 + markdown-editor/javascript/Makefile | 28 + markdown-editor/javascript/README.md | 109 ++ markdown-editor/javascript/default.mk | 88 + markdown-editor/javascript/package.json | 70 + .../javascript/src/MarkdownEditor.tsx | 25 + markdown-editor/javascript/src/index.ts | 5 + .../src/stories/MarkdownEditor.stories.tsx | 42 + markdown-editor/javascript/src/styles.css | 56 + .../javascript/tsconfig.build.json | 15 + markdown-editor/javascript/tsconfig.json | 3 + package-lock.json | 1595 ++++++++++++----- package.json | 1 + tsconfig.build.json | 3 + tsconfig.json | 3 +- 20 files changed, 1661 insertions(+), 453 deletions(-) create mode 100644 markdown-editor/javascript/.gitignore create mode 100644 markdown-editor/javascript/.mocharc.json create mode 100644 markdown-editor/javascript/.rsync create mode 100644 markdown-editor/javascript/.storybook/main.js create mode 100644 markdown-editor/javascript/.storybook/preview.js create mode 100644 markdown-editor/javascript/LICENSE create mode 100644 markdown-editor/javascript/Makefile create mode 100644 markdown-editor/javascript/README.md create mode 100644 markdown-editor/javascript/default.mk create mode 100644 markdown-editor/javascript/package.json create mode 100644 markdown-editor/javascript/src/MarkdownEditor.tsx create mode 100644 markdown-editor/javascript/src/index.ts create mode 100644 markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx create mode 100644 markdown-editor/javascript/src/styles.css create mode 100644 markdown-editor/javascript/tsconfig.build.json create mode 100644 markdown-editor/javascript/tsconfig.json diff --git a/markdown-editor/javascript/.gitignore b/markdown-editor/javascript/.gitignore new file mode 100644 index 00000000000..fb59ec14c4e --- /dev/null +++ b/markdown-editor/javascript/.gitignore @@ -0,0 +1,18 @@ +dist/ +.idea/ +.nyc_output/ +coverage/ +node_modules/ +yarn.lock +package-lock.json +*.log +.deps +.tested* +.linted +.built* +.compared +.codegen +acceptance/ +storybook-static +*-go +*.iml diff --git a/markdown-editor/javascript/.mocharc.json b/markdown-editor/javascript/.mocharc.json new file mode 100644 index 00000000000..d5055eb10d0 --- /dev/null +++ b/markdown-editor/javascript/.mocharc.json @@ -0,0 +1,6 @@ +{ + "require": ["tsconfig-paths/register", "ts-node/register", "source-map-support/register"], + "extension": ["ts", "tsx"], + "recursive": true, + "timeout": 10000 +} diff --git a/markdown-editor/javascript/.rsync b/markdown-editor/javascript/.rsync new file mode 100644 index 00000000000..2672e9f3f58 --- /dev/null +++ b/markdown-editor/javascript/.rsync @@ -0,0 +1,3 @@ +../../LICENSE LICENSE +../../.templates/github/ .github/ +../../.templates/javascript/ . diff --git a/markdown-editor/javascript/.storybook/main.js b/markdown-editor/javascript/.storybook/main.js new file mode 100644 index 00000000000..55433835eea --- /dev/null +++ b/markdown-editor/javascript/.storybook/main.js @@ -0,0 +1,20 @@ +module.exports = { + "stories": [ + "../src/stories/**/*.stories.mdx", + "../src/stories/**/*.stories.@(js|jsx|ts|tsx)" + ], + "addons": [ + "@storybook/addon-links" + ], + webpackFinal: async (config, { configType }) => { + config.resolve.fallback = { "assert": false } + config.module.rules.push({ + test: /\.scss$/, + use: ['style-loader', 'css-loader', 'sass-loader'], + }) + return config + }, + core: { + builder: "webpack5", + }, +} diff --git a/markdown-editor/javascript/.storybook/preview.js b/markdown-editor/javascript/.storybook/preview.js new file mode 100644 index 00000000000..30ca00c2d57 --- /dev/null +++ b/markdown-editor/javascript/.storybook/preview.js @@ -0,0 +1,3 @@ +export const parameters = { + actions: { argTypesRegex: "^on[A-Z].*" }, +} \ No newline at end of file diff --git a/markdown-editor/javascript/LICENSE b/markdown-editor/javascript/LICENSE new file mode 100644 index 00000000000..725ba9f4ac7 --- /dev/null +++ b/markdown-editor/javascript/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Cucumber Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/markdown-editor/javascript/Makefile b/markdown-editor/javascript/Makefile new file mode 100644 index 00000000000..4b403b48659 --- /dev/null +++ b/markdown-editor/javascript/Makefile @@ -0,0 +1,28 @@ +include default.mk + +FEATURE_FILES = $(sort $(wildcard ../../compatibility-kit/javascript/features/**/*.ndjson)) +TS_MESSAGE_FILES = $(patsubst ../../compatibility-kit/javascript/features/%.ndjson,acceptance/%.ts,$(FEATURE_FILES)) + +.codegen: $(TS_MESSAGE_FILES) dist/src/styles/cucumber-react.css + +dist/src/styles/cucumber-react.css: src/styles/styles.scss src/styles/react-accessible-accordion.css + mkdir -p $(@D) + npx -y sass $< > $@ + cat src/styles/react-accessible-accordion.css >> $@ + +# Convert an .ndjson file to a .ts file with Envelope objects that can be imported +acceptance/%.ts: ../../compatibility-kit/javascript/features/%.ndjson Makefile + mkdir -p $(@D) + echo "// Generated file. Do not edit." > $@ + echo "export default [" >> $@ + cat $< | sed "s/$$/,/" >> $@ + echo "]" >> $@ + +.tested: .tested-storybook + +.tested-storybook: $(TYPESCRIPT_SOURCE_FILES) + npm run build-storybook + touch $@ + +clean: + rm -f $(GHERKIN_DOCUMENT_NDJSON_FILES) diff --git a/markdown-editor/javascript/README.md b/markdown-editor/javascript/README.md new file mode 100644 index 00000000000..3d9c8092450 --- /dev/null +++ b/markdown-editor/javascript/README.md @@ -0,0 +1,109 @@ +# Cucumber-React + +Cucumber-React is a set of React components for rendering Gherkin documents and Cucumber results. + +## Screenshot + +![Examples Tables](screenshots/examples-tables.png) + +## Usage + +The source code for screenshots above is: + +```jsx + + + +``` + +The [``](src/components/app/GherkinDocumentList.tsx) React component, +is an accordion of [``](src/components/gherkin/GherkinDocument.tsx). + +The `` React component and any component nested within it (such as [``](src/components/gherkin/Scenario.tsx)) can be rendered standalone. + +## `` features + +The `` React component is instantiated with a single `gherkinDocument` prop. +The value must be a [GherkinDocument](../../cucumber-messages/messages.md#io.cucumber.messages.GherkinDocument) object. +You can use the [Gherkin](../../gherkin) parser to generate a `GherkinDocument` object. + +By default the `` component will not display any coloured results, as the `GherkinDocument` +message object does not contain results, only the [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree) of the document. +This is fine for simple use cases where results are not important. + +To render a `` with results and highlighted [Cucumber Expression parameters](https://cucumber.io/docs/cucumber/cucumber-expressions/) parameters it must be nested inside a +[``](src/components/app/Wrapper.tsx) component. + +## Build / hack + +Install dependencies + + npm install + +Run tests + + npm test + +Interactive development + + npm run storybook + +## Ideas + +### `ScenarioList` component + +A component that renders a list of scenarios (possibly from multiple files, filtered by e.g. tag). + +This component could be used to render relevant scenarios in 3rd-party tools, such as +JIRA, Confluence and various issue trackers that support plugins. + +### Link to JIRA + +Configure with a regexp and url function, and tags will be rendered as JIRA issue links + +### Search + +Search by tag, but also by text. Could use http://elasticlunr.com/ +or https://lunrjs.com/ - or it could simply perform filtering on an array of `GherkinDocument` messages. + +### Search results + +Each scenario displayed underneath each other, grouped by feature file. The feature description is "collapsed", +(unless it contains the search term) but can be opened. + +### Filtering / sorting + +* by tag +* by duration (find slow ones) +* by status +* by recency (update timestamp) - exclude old ones +* by flickeriness + +### Tag search + +* Render a tag cloud for all tags + * Size: count + * Color: pass/fail/undefined + +### On-demand data + +For large reports (especially with screenshots) it may be too heavy to store it all in the browser. +The GUI should request data for the current document on demand. The GUI should also be able to filter +what kind of events it wants. For example, to render the initial screen. + +### Server / App + +It should be easy to use. Just run the app (Electron). It will create a named pipe where +it will listen. What's written here gets written straight to the React app (no websocket, +it's in the same process). This app can be fairly small. + +### Rerun tests + +Add a message to represent a config+cwd+env for a run, so the GUI can rerun it. +The config is essentially command line options. They can be modified in the gui. +Rerun on file change can also be set up. This just makes the whole DX simple. + +### Alerts + +The app could use the OS to send screen messages (autotest like) + diff --git a/markdown-editor/javascript/default.mk b/markdown-editor/javascript/default.mk new file mode 100644 index 00000000000..4d01f082b4d --- /dev/null +++ b/markdown-editor/javascript/default.mk @@ -0,0 +1,88 @@ +SHELL := /usr/bin/env bash +# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make +rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) +TYPESCRIPT_SOURCE_FILES = $(sort $(call rwildcard,src test,*.ts *.tsx)) +PRIVATE = $(shell node -e "console.log(require('./package.json').private)") +IS_TESTDATA = $(findstring -testdata,${CURDIR}) +NPM_MODULE = $(shell cat package.json | jq .name --raw-output) + +default: .tested +.PHONY: default + +../../node_modules ../../package-lock.json: package.json + cd ../.. && npm install + +.codegen: + touch $@ + +.tested: .tested-npm .built + +.built: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen + pushd ../.. && \ + npm run build && \ + popd && \ + touch $@ + +.tested-npm: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen + npm run test + touch $@ + +pre-release: clean update-version update-dependencies default +.PHONY: pre-release + +update-dependencies: + ../../node_modules/.bin/npm-check-updates --upgrade +.PHONY: update-dependencies + +update-version: +ifeq ($(IS_TESTDATA),-testdata) + # no-op +else +ifdef NEW_VERSION + npm --no-git-tag-version --allow-same-version version "$(NEW_VERSION)" + # Update all npm packages that depend on us + pushd ../.. && \ + ./scripts/npm-each update_npm_dependency_if_exists package.json "$(NPM_MODULE)" "$(NEW_VERSION)" + # npm install +else + @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" + exit 1 +endif +endif +.PHONY: update-version + +publish: .codegen +ifeq ($(IS_TESTDATA),-testdata) + # no-op +else +ifneq (true,$(PRIVATE)) + npm publish --access public +else + @echo "Not publishing private npm module" +endif +endif +.PHONY: publish + +post-release: +.PHONY: post-release + +clean: clean-javascript +.PHONY: clean + +clean-javascript: + rm -rf .deps .codegen .tested* coverage dist acceptance +.PHONY: clean-javascript + +clobber: clean + rm -rf node_modules ../../node_modules +.PHONY: clobber + +### COMMON stuff for all platforms + +BERP_VERSION = 1.3.0 +BERP_GRAMMAR = gherkin.berp + +define berp-generate-parser = +-! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin +berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM +endef diff --git a/markdown-editor/javascript/package.json b/markdown-editor/javascript/package.json new file mode 100644 index 00000000000..6fa888a9b2e --- /dev/null +++ b/markdown-editor/javascript/package.json @@ -0,0 +1,70 @@ +{ + "name": "@cucumber/markdown-editor", + "version": "14.0.0", + "description": "Markdown editor for Cucumber", + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", + "repository": { + "type": "git", + "url": "git+https://github.com/cucumber/cucumber.git" + }, + "author": "Aslak Hellesøy", + "license": "MIT", + "scripts": { + "test": "mocha", + "storybook": "start-storybook -p 6006", + "build-storybook": "build-storybook" + }, + "dependencies": { + "@types/prosemirror-commands": "1.0.4", + "@types/prosemirror-history": "1.0.2", + "@types/prosemirror-markdown": "1.5.1", + "@types/prosemirror-keymap": "1.0.4", + "@types/prosemirror-schema-basic": "1.0.2", + "@types/prosemirror-view": "1.17.1", + "prosemirror-commands": "1.1.8", + "prosemirror-example-setup": "1.1.2", + "prosemirror-history": "1.1.3", + "prosemirror-keymap": "1.1.4", + "prosemirror-markdown": "1.5.1", + "prosemirror-menu": "1.1.4", + "prosemirror-model": "1.14.1", + "prosemirror-schema-basic": "1.1.2", + "prosemirror-state": "1.3.4", + "prosemirror-view": "1.18.7", + "use-prosemirror": "1.2.1" + }, + "peerDependencies": { + "react": "~17", + "react-dom": "~17" + }, + "devDependencies": { + "@babel/core": "7.14.3", + "@storybook/addon-actions": "6.2.9", + "@storybook/addon-links": "6.2.9", + "@storybook/builder-webpack5": "6.2.9", + "@storybook/react": "6.2.9", + "@types/mocha": "8.2.2", + "@types/node": "15.3.1", + "@types/react": "17.0.6", + "@types/react-dom": "17.0.5", + "babel-loader": "8.2.2", + "core-js": "3.12.1", + "mocha": "8.4.0", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-is": "17.0.2", + "source-map-support": "0.5.19", + "style-loader": "2.0.0", + "ts-node": "10.0.0", + "typescript": "4.2.4" + }, + "bugs": { + "url": "https://github.com/cucumber/cucumber/issues" + }, + "homepage": "https://github.com/cucumber/cucumber#readme", + "directories": { + "test": "test" + }, + "keywords": [] +} diff --git a/markdown-editor/javascript/src/MarkdownEditor.tsx b/markdown-editor/javascript/src/MarkdownEditor.tsx new file mode 100644 index 00000000000..8e45b38f665 --- /dev/null +++ b/markdown-editor/javascript/src/MarkdownEditor.tsx @@ -0,0 +1,25 @@ +import "prosemirror-view/style/prosemirror.css"; +import "prosemirror-example-setup/style/style.css"; +import "prosemirror-menu/style/menu.css"; + +import React from "react"; +import {ProseMirror, useProseMirror} from "use-prosemirror"; +import {defaultMarkdownParser, schema} from "prosemirror-markdown" +// @ts-ignore +import {exampleSetup} from "prosemirror-example-setup" + +const MarkdownEditor: React.FunctionComponent<{ content: string }> = ({content}) => { + const [state, setState] = useProseMirror({ + doc: defaultMarkdownParser.parse(content), + plugins: exampleSetup({schema}) + }); + return ( + + ); +} + +export default MarkdownEditor \ No newline at end of file diff --git a/markdown-editor/javascript/src/index.ts b/markdown-editor/javascript/src/index.ts new file mode 100644 index 00000000000..f5128435fe3 --- /dev/null +++ b/markdown-editor/javascript/src/index.ts @@ -0,0 +1,5 @@ +import MarkdownEditor from "./MarkdownEditor"; + +export { + MarkdownEditor +} diff --git a/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx b/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx new file mode 100644 index 00000000000..06cf36249bf --- /dev/null +++ b/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx @@ -0,0 +1,42 @@ +import React from 'react' +import {Meta, Story} from '@storybook/react' +import MarkdownEditor from "../MarkdownEditor"; + +export default { + title: 'MarkdownEditor', + component: MarkdownEditor, +} as Meta + +type TemplateArgs = { content: string } + +const Template: Story = ({content}) => { + return ( + + ) +} + +export const MDG = Template.bind({}) +MDG.args = { + content: `# Feature: Staying alive + +This is about actually staying alive, +not the [Bee Gees song](https://www.youtube.com/watch?v=I_izvAbhExY). + +## Rule: If you don't eat you die + +![xkcd](https://imgs.xkcd.com/comics/lunch_2x.png) + +### Scenario Outline: eating + +* Given there are cucumbers +* When I eat cucumbers +* Then I should have cucumbers + +#### Examples: + +| start | eat | left | +| ----- | --- | ---- | +| 12 | 5 | 7 | +| 20 | 5 | 15 | +` +} diff --git a/markdown-editor/javascript/src/styles.css b/markdown-editor/javascript/src/styles.css new file mode 100644 index 00000000000..4667115938a --- /dev/null +++ b/markdown-editor/javascript/src/styles.css @@ -0,0 +1,56 @@ +.App { + font-family: sans-serif; +} + +.ProseMirrorContainer { + padding: 16px; + border: 1px solid #ccc; + transition: 0.1s; + border-radius: 5px; + background-color: #fff; +} + +.ProseMirrorContainer:focus-within { + box-shadow: 0 0 0 3px #a6c3ff; + border-color: blue; +} + +.ProseMirror { + min-height: 200px; + outline: none; + padding: 0; + font-size: 18px; +} + +.Menu { + display: flex; + margin-bottom: 7px; + padding-left: 2px; +} + +button { + font-size: 14px; + cursor: pointer; + width: 36px; + height: 36px; + margin-right: 5px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 5px; + box-shadow: none; + border: 1px solid #ccc; +} + +button.bold { + font-weight: 700; +} + +button.italic { + font-style: italic; +} + +p { + margin: 0; + line-height: 1.3; +} diff --git a/markdown-editor/javascript/tsconfig.build.json b/markdown-editor/javascript/tsconfig.build.json new file mode 100644 index 00000000000..8d5ea2ee8ff --- /dev/null +++ b/markdown-editor/javascript/tsconfig.build.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "dist" + }, + "include": [ + "src", + "test", + "acceptance" + ], + "exclude": [ + "src/stories" + ] +} diff --git a/markdown-editor/javascript/tsconfig.json b/markdown-editor/javascript/tsconfig.json new file mode 100644 index 00000000000..4082f16a5d9 --- /dev/null +++ b/markdown-editor/javascript/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/package-lock.json b/package-lock.json index 4ef2788fc07..853889704b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "compatibility-kit/javascript", "json-formatter/javascript-testdata", "react/javascript", + "markdown-editor/javascript", "html-formatter/javascript", "json-to-messages/javascript", "json-to-messages/javascript-testdata" @@ -91,15 +92,13 @@ }, "cucumber-expressions/javascript/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "cucumber-expressions/javascript/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -142,8 +141,7 @@ }, "fake-cucumber/javascript/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } @@ -172,8 +170,7 @@ }, "gherkin-streams/javascript/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } @@ -218,9 +215,8 @@ }, "gherkin/javascript/node_modules/@types/node": { "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", - "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==", - "dev": true + "dev": true, + "license": "MIT" }, "html-formatter/javascript": { "name": "@cucumber/html-formatter", @@ -259,8 +255,7 @@ }, "html-formatter/javascript/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } @@ -313,12 +308,65 @@ }, "json-to-messages/javascript/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } }, + "markdown-editor/javascript": { + "name": "@cucumber/markdown-editor", + "version": "14.0.0", + "license": "MIT", + "dependencies": { + "@types/prosemirror-commands": "1.0.4", + "@types/prosemirror-history": "1.0.2", + "@types/prosemirror-keymap": "1.0.4", + "@types/prosemirror-markdown": "1.5.1", + "@types/prosemirror-schema-basic": "1.0.2", + "@types/prosemirror-view": "1.17.1", + "prosemirror-commands": "1.1.8", + "prosemirror-example-setup": "1.1.2", + "prosemirror-history": "1.1.3", + "prosemirror-keymap": "1.1.4", + "prosemirror-markdown": "1.5.1", + "prosemirror-menu": "1.1.4", + "prosemirror-model": "1.14.1", + "prosemirror-schema-basic": "1.1.2", + "prosemirror-state": "1.3.4", + "prosemirror-view": "1.18.7", + "use-prosemirror": "1.2.1" + }, + "devDependencies": { + "@babel/core": "7.14.3", + "@storybook/addon-actions": "6.2.9", + "@storybook/addon-links": "6.2.9", + "@storybook/builder-webpack5": "6.2.9", + "@storybook/react": "6.2.9", + "@types/mocha": "8.2.2", + "@types/node": "15.3.1", + "@types/react": "17.0.6", + "@types/react-dom": "17.0.5", + "babel-loader": "8.2.2", + "core-js": "3.12.1", + "mocha": "8.4.0", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-is": "17.0.2", + "source-map-support": "0.5.19", + "style-loader": "2.0.0", + "ts-node": "10.0.0", + "typescript": "4.2.4" + }, + "peerDependencies": { + "react": "~17", + "react-dom": "~17" + } + }, + "markdown-editor/javascript/node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, "message-streams/javascript": { "name": "@cucumber/message-streams", "version": "2.0.0", @@ -354,14 +402,12 @@ }, "messages/javascript/node_modules/@types/node": { "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", - "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==", - "dev": true + "dev": true, + "license": "MIT" }, "messages/javascript/node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -484,16 +530,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.2.tgz", - "integrity": "sha512-6YctwVsmlkchxfGUogvVrrhzyD3grFJyluj5JgDlQrwfMLJSt5tdAzFZfPf4H2Xoi5YLcQ6BxfJlaOBHuctyIw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", + "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-replace-supers": "^7.14.3", "@babel/helper-split-export-declaration": "^7.12.13" }, "peerDependencies": { @@ -501,9 +547,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", @@ -514,9 +560,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.1.tgz", + "integrity": "sha512-x3AUTVZNPunaw1opRTa5OwVA5N0YxGlIad9xQ5QflK1uIS7PnAGGU5O2Dj/G183fR//N8AzTq+Q8+oiu9m0VFg==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", @@ -641,15 +687,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-simple-access": { @@ -766,6 +812,15 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -841,11 +896,12 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", - "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", "dev": true, "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.3", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-class-static-block": "^7.12.13" }, @@ -1606,16 +1662,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.3.tgz", + "integrity": "sha512-uuxuoUNVhdgYzERiHHFkE4dWoJx+UFVyuAl0aqN8P2/AKFHwqgUC5w2+4/PjpKXJsFgBlYAFXlUmDQ3k3DUkXw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-module-imports": "^7.13.12", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1732,12 +1788,12 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.3.tgz", + "integrity": "sha512-G5Bb5pY6tJRTC4ag1visSgiDoGgJ1u1fMUgmc2ijLkcIdzP83Q1qyZX4ggFQ/SkR+PNOatkaYC+nKcTlpsX4ag==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-create-class-features-plugin": "^7.14.3", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-typescript": "^7.12.13" }, @@ -1855,12 +1911,12 @@ } }, "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.1.tgz", + "integrity": "sha512-WZCqF3DLUhdTD/P381MDJfuP18hdCZ+iqJ+wHtzhWENpsiof284JJ1tMQg1CE+hfCWyG48F7e5gDMk2c3Laz7w==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0", + "@babel/helper-define-polyfill-provider": "^0.2.1", "core-js-compat": "^3.9.1" }, "peerDependencies": { @@ -2112,6 +2168,10 @@ "resolved": "json-to-messages/javascript", "link": true }, + "node_modules/@cucumber/markdown-editor": { + "resolved": "markdown-editor/javascript", + "link": true + }, "node_modules/@cucumber/message-streams": { "resolved": "message-streams/javascript", "link": true @@ -2970,9 +3030,9 @@ } }, "node_modules/@storybook/builder-webpack4/node_modules/@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/ast": { @@ -3331,6 +3391,15 @@ "node": ">=4.3.0 <5.0.0 || >=5.10" } }, + "node_modules/@storybook/builder-webpack4/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -3605,15 +3674,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/@storybook/builder-webpack4/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -4297,9 +4357,9 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "node_modules/@storybook/channel-postmessage": { @@ -4572,9 +4632,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "node_modules/@storybook/core-common/node_modules/@webassemblyjs/ast": { @@ -5300,9 +5360,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "node_modules/@storybook/core-server/node_modules/@webassemblyjs/ast": { @@ -5880,15 +5940,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/@storybook/core-server/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@storybook/core-server/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -7657,12 +7708,6 @@ "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", "dev": true }, - "node_modules/@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true - }, "node_modules/@types/braces": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz", @@ -7710,9 +7755,9 @@ "integrity": "sha512-FOS+tbeQKVIq8HAQ5WkWXMPIEeLFJViIMnWfLsxtRKX0jtWSM+emZe43+sKZgwny7EIfVdbbqdtr+RL2h18ykw==" }, "node_modules/@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "version": "7.2.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.11.tgz", + "integrity": "sha512-WYhv//5K8kQtsSc9F1Kn2vHzhYor6KpwPbARH7hwYe3C3ETD0EVx/3P5qQybUoaBEuUa9f/02JjBiXFWalYUmw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -7759,6 +7804,11 @@ "@types/unist": "*" } }, + "node_modules/@types/highlight.js": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", + "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==" + }, "node_modules/@types/html-minifier-terser": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", @@ -7806,6 +7856,21 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "node_modules/@types/linkify-it": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.1.tgz", + "integrity": "sha512-pQv3Sygwxxh6jYQzXaiyWDAHevJqWtqDUv6t11Sa9CPGiXny66II7Pl6PR8QO5OVysD6HYOkHMeBgIjLnk9SkQ==" + }, + "node_modules/@types/markdown-it": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.1.tgz", + "integrity": "sha512-mHfT8j/XkPb1uLEfs0/C3se6nd+webC2kcqcy8tgcVr0GDEONv/xaQzAN+aQvkxQXk/jC0Q6mPS+0xhFwRF35g==", + "dependencies": { + "@types/highlight.js": "^9.7.0", + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, "node_modules/@types/markdown-to-jsx": { "version": "6.11.3", "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz", @@ -7823,6 +7888,11 @@ "@types/unist": "*" } }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "node_modules/@types/micromatch": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", @@ -7886,6 +7956,11 @@ "integrity": "sha512-4QQmOF5KlwfxJ5IGXFIudkeLCdMABz03RcUXu+LCb24zmln8QW6aDjuGl4d4XPVLf2j+FnjelHTP7dvceAFbhA==", "dev": true }, + "node_modules/@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, "node_modules/@types/overlayscrollbars": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz", @@ -7916,6 +7991,89 @@ "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", "dev": true }, + "node_modules/@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-history": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.2.tgz", + "integrity": "sha512-AcfpWo+HkIuvq/H2zYjIMi2jxa2GWfYaTNiFTB2sigjkpWNM93CIlb7Cimy/4vNH8lVPp0GwLBjYIMRX6zOUyA==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "dependencies": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-markdown/-/prosemirror-markdown-1.5.1.tgz", + "integrity": "sha512-AqHCy80J9HUF+9FHveOB9fbKZwOf+1Ds2Vm1pPN6bfZ/Y6vdgXDry/hoz74+K7fQZZ8+f1J4x16llFj3PAohVg==", + "dependencies": { + "@types/markdown-it": "*", + "@types/prosemirror-model": "*" + } + }, + "node_modules/@types/prosemirror-model": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.13.0.tgz", + "integrity": "sha512-EIUr2R38Zh9n1eA8BQ1C3NX/XLV9U44DhNVk8x3Sth2RW+wa7jNA82XHMPOoapsOTfmpnh32xaHBOzREiBqdPQ==", + "dependencies": { + "@types/orderedmap": "*" + } + }, + "node_modules/@types/prosemirror-schema-basic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-basic/-/prosemirror-schema-basic-1.0.2.tgz", + "integrity": "sha512-dzT/6t+dq8/On1be0yarcOIu8wROjhK8QB5wslpLbtTIr5wb0iQv/esJm/KAHcD/PBXR9nSV4TL5AtQmBrcRnw==", + "dependencies": { + "@types/prosemirror-model": "*" + } + }, + "node_modules/@types/prosemirror-state": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.6.tgz", + "integrity": "sha512-tJo0wC+/cQvbrPDVx01Fnng9Fs41bAMVxgJY1KLOyIsUPN0otUN1KdoQurLMmHNHTvIna9ZXxjZD//xJKLYfJw==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-transform": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.3.tgz", + "integrity": "sha512-qtnd4jMoBgUAF2Vy2uRCVY4/LN3d069PP9XTIKrfk7mwWPYKonBYv1NsaBGTpK26sOPu0p7eJNZwaiNYmbfIwA==", + "dependencies": { + "@types/prosemirror-model": "*" + } + }, + "node_modules/@types/prosemirror-view": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.17.1.tgz", + "integrity": "sha512-PNiGGc6BffxHQzMR09UUilsBR8xFPDsKiPIXb4K/g56voPIvqq1pqySnWFfSR50Vo4ZL0tss3VBLWiiiKzVahQ==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, "node_modules/@types/qs": { "version": "6.9.6", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", @@ -8058,16 +8216,16 @@ "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" }, "node_modules/@types/webpack": { - "version": "4.41.28", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.28.tgz", - "integrity": "sha512-Nn84RAiJjKRfPFFCVR8LC4ueTtTdfWAMZ03THIzZWRJB+rX24BD3LqPSFnbMscWauEsT4segAsylPDIaZyZyLQ==", + "version": "4.41.29", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.29.tgz", + "integrity": "sha512-6pLaORaVNZxiB3FSHbyBiWM7QdazAWda1zvAq4SbZObZqHSDbWLi62iFdblVea6SK9eyBIVp5yHhKt/yNQdR7Q==", "dev": true, "dependencies": { - "@types/anymatch": "*", "@types/node": "*", "@types/tapable": "^1", "@types/uglify-js": "*", "@types/webpack-sources": "*", + "anymatch": "^3.0.0", "source-map": "^0.6.0" } }, @@ -8896,15 +9054,6 @@ "node": ">= 8" } }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/app-root-dir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", @@ -8955,7 +9104,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -9484,6 +9632,15 @@ "node": ">=8" } }, + "node_modules/babel-plugin-emotion/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/babel-plugin-emotion/node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -9527,13 +9684,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.1.tgz", + "integrity": "sha512-hXGSPbr6IbjeMyGew+3uGIAkRjBFSOJ9FLDZNOfHuyJZCcoia4nd/72J0bSgvfytcVfUcP/dxEVcUhVJuQRtSw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", + "@babel/helper-define-polyfill-provider": "^0.2.1", "semver": "^6.1.1" }, "peerDependencies": { @@ -9591,12 +9748,12 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.1.tgz", + "integrity": "sha512-T3bYyL3Sll2EtC94v3f+fA8M28q7YPTOZdB++SRHjvYZTvtd+WorMUq3tDTD4Q7Kjk1LG0gGromslKjcO5p2TA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "@babel/helper-define-polyfill-provider": "^0.2.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -10233,9 +10390,9 @@ } }, "node_modules/cacache": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.6.tgz", - "integrity": "sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.1.0.tgz", + "integrity": "sha512-mfx0C+mCfWjD1PnwQ9yaOrwG1ou9FkKnx0SvzUHWdFt7r7GaRtzT+9M8HAvLu62zIHtnpQ/1m93nWNDCckJGXQ==", "dev": true, "dependencies": { "@npmcli/move-file": "^1.0.1", @@ -10489,15 +10646,6 @@ "fsevents": "~2.3.1" } }, - "node_modules/chokidar/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -11607,6 +11755,11 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/crelt": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", + "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -11653,15 +11806,14 @@ } }, "node_modules/css-loader": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", - "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", + "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", "dev": true, "dependencies": { - "camelcase": "^6.2.0", "icss-utils": "^5.1.0", "loader-utils": "^2.0.0", - "postcss": "^8.2.10", + "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", @@ -11708,14 +11860,14 @@ } }, "node_modules/css-loader/node_modules/postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "dev": true, "dependencies": { "colorette": "^1.2.2", "nanoid": "^3.1.23", - "source-map": "^0.6.1" + "source-map-js": "^0.6.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -11743,15 +11895,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/css-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/css-select": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", @@ -12540,9 +12683,9 @@ "integrity": "sha1-ZVQbswnd3Qz5Ty0ciGGyvmUbsNU=" }, "node_modules/electron-to-chromium": { - "version": "1.3.728", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.728.tgz", - "integrity": "sha512-SHv4ziXruBpb1Nz4aTuqEHBYi/9GNCJMYIJgDEXrp/2V01nFXMNFUTli5Z85f5ivSkioLilQatqBYFB44wNJrA==", + "version": "1.3.736", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz", + "integrity": "sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==", "dev": true }, "node_modules/element-resize-detector": { @@ -12901,11 +13044,15 @@ "dev": true }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -13367,18 +13514,6 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", @@ -13963,6 +14098,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -14339,9 +14482,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.9.tgz", - "integrity": "sha512-D/KSb/2VeiOy3odDerrC16WiZ1t5TLwiFfZmuDeTXcf3Km79M+f8nTCIdKkokxybybrgMcStbx0QpGaseePxnA==", + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.10.tgz", + "integrity": "sha512-HveFCHWSH2WlYU1tU3PkrupvW8lNFMTfH3Jk0TfC2mtktE9ibHGcifhCsCFvj+kqlDfNIlwmNLiNqR9jnSA7OQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.8.3", @@ -15768,9 +15911,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "optional": true, "dependencies": { @@ -17246,6 +17389,14 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "node_modules/linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -17540,13 +17691,33 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + }, "node_modules/markdown-to-jsx": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.2.tgz", - "integrity": "sha512-O8DMCl32V34RrD+ZHxcAPc2+kYytuDIoQYjY36RVdsLK7uHjgNVvFec4yv0X6LgB4YEZgSvK5QtFi5YVqEpoMA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz", + "integrity": "sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w==", "dev": true, "engines": { - "node": ">= 4" + "node": ">= 10" }, "peerDependencies": { "react": ">= 0.14.0" @@ -18212,18 +18383,6 @@ "node": ">=0.3.1" } }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -18735,6 +18894,15 @@ "node": ">=0.10.0" } }, + "node_modules/node-sass/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/node-sass/node_modules/get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -18854,14 +19022,10 @@ } }, "node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, "engines": { "node": ">=0.10.0" } @@ -18876,9 +19040,9 @@ } }, "node_modules/normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true, "engines": { "node": ">=8" @@ -19068,9 +19232,9 @@ } }, "node_modules/npm-registry-fetch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-10.1.1.tgz", - "integrity": "sha512-F6a3l+ffCQ7hvvN16YG5bpm1rPZntCg66PLHDQ1apWJPOCUVHoKnL2w5fqEaTVhp42dmossTyXeR7hTGirfXrg==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-10.1.2.tgz", + "integrity": "sha512-KsM/TdPmntqgBFlfsbkOLkkE9ovZo7VpVcd+/eTdYszCrgy5zFl5JzWm+OxavFaEWlbkirpkou+ZYI00RmOBFA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0", @@ -19723,6 +19887,11 @@ "node": ">= 0.8.0" } }, + "node_modules/orderedmap": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.1.tgz", + "integrity": "sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ==" + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -20188,9 +20357,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, "engines": { "node": ">=8.6" @@ -20512,6 +20681,15 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "node_modules/postcss/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/postcss/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -20853,6 +21031,153 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/prosemirror-commands": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.1.8.tgz", + "integrity": "sha512-EIj/WAlrK2rVugxNxsFG6pI4430RL63ka2QKB9dO7vvStsLO//nq/oMjmd3VXp08+QNrmmLE23utqBUZwbS9Jg==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.5.tgz", + "integrity": "sha512-tNUwcF2lPAkwKBZPZRtbxpwljnODRNZ3eiYloN1DSUqDjMT1nBZm0nejaEMS1TvNQ+3amibUSAiV4hX+jpASFA==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-example-setup": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-example-setup/-/prosemirror-example-setup-1.1.2.tgz", + "integrity": "sha512-MTpIMyqk08jFnzxeRMCinCEMtVSTUtxKgQBGxfCbVe9C6zIOqp9qZZJz5Ojaad1GETySyuj8+OIHHvQsIaaaGQ==", + "dependencies": { + "prosemirror-commands": "^1.0.0", + "prosemirror-dropcursor": "^1.0.0", + "prosemirror-gapcursor": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-inputrules": "^1.0.0", + "prosemirror-keymap": "^1.0.0", + "prosemirror-menu": "^1.0.0", + "prosemirror-schema-list": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.1.5.tgz", + "integrity": "sha512-SjbUZq5pgsBDuV3hu8GqgIpZR5eZvGLM+gPQTqjVVYSMUCfKW3EGXTEYaLHEl1bGduwqNC95O3bZflgtAb4L6w==", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.1.3.tgz", + "integrity": "sha512-zGDotijea+vnfnyyUGyiy1wfOQhf0B/b6zYcCouBV8yo6JmrE9X23M5q7Nf/nATywEZbgRLG70R4DmfSTC+gfg==", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.1.3.tgz", + "integrity": "sha512-ZaHCLyBtvbyIHv0f5p6boQTIJjlD6o2NPZiEaZWT2DA+j591zS29QQEMT4lBqwcLW3qRSf7ZvoKNbf05YrsStw==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.4.tgz", + "integrity": "sha512-Al8cVUOnDFL4gcI5IDlG6xbZ0aOD/i3B17VT+1JbHWDguCgt/lBHVTHUBcKvvbSg6+q/W4Nj1Fu6bwZSca3xjg==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.5.1.tgz", + "integrity": "sha512-QvucPHx+gKOQW1SETKUysrful9VBjKqpCFmPotgLfVZ3BdQEGy/NEIFhaXXo3TcuW316MMnKfA90K7GE5I7z8A==", + "dependencies": { + "markdown-it": "^10.0.0", + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-menu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.1.4.tgz", + "integrity": "sha512-2ROsji/X9ciDnVSRvSTqFygI34GEdHfQSsK4zBKjPxSEroeiHHcdRMS1ofNIf2zM0Vpp5/YqfpxynElymQkqzg==", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.14.1.tgz", + "integrity": "sha512-vZcbI+24VloFefKZkDnMaEpipL/vSKKPdFiik4KOnTzq3e6AO7+CAOixZ2G/SsfRaYC965XvnOIEbhIQdgki7w==", + "dependencies": { + "orderedmap": "^1.1.0" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.1.2.tgz", + "integrity": "sha512-G4q8WflNsR1Q33QAV4MQO0xWrHLOJ+BQcKswGXMy626wlQj6c/1n1v4eC9ns+h2y1r/fJHZEgSZnsNhm9lbrDw==", + "dependencies": { + "prosemirror-model": "^1.2.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.4.tgz", + "integrity": "sha512-pNTuZflacFOBlxrTcWSdWhjoB8BaucwfJVp/gJNxztOwaN3wQiC65axclXyplf6TKgXD/EkWfS/QAov3/Znadw==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.3.2.tgz", + "integrity": "sha512-/G6d/u9Mf6Bv3H1XR8VxhpjmUO75LYmnvj+s3ZfZpakU1hnQbsvCEybml1B3f2IWUAAQRFkbO1PnsbFhLZsYsw==", + "dependencies": { + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.18.7.tgz", + "integrity": "sha512-pUCxoyuWnbVfJ/ukhQ+7+bfDMArG3wu6hHnnTFi61C7Teb5OILUhkkhEhF2/RsppBFWrkwsNcf8rQm8SSoSKRg==", + "dependencies": { + "prosemirror-model": "^1.1.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -22689,6 +23014,11 @@ "inherits": "^2.0.1" } }, + "node_modules/rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -23695,6 +24025,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", @@ -23793,9 +24132,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, "node_modules/split-string": { @@ -23813,8 +24152,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "node_modules/sshpk": { "version": "1.16.1", @@ -24395,9 +24733,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", - "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -24520,9 +24858,9 @@ } }, "node_modules/telejson": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.2.0.tgz", - "integrity": "sha512-5ALKeIIpOyu0qoKJVsCXufWwh40HrxLasi75xK8KhMDzUHLzD7Cb9epdLjnncE+el0NENIN8sHLaRVOvjbN6ug==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz", + "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==", "dev": true, "dependencies": { "@types/is-function": "^1.0.0", @@ -24901,9 +25239,9 @@ } }, "node_modules/tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { "punycode": "^2.1.1" @@ -25042,9 +25380,9 @@ } }, "node_modules/ts-sinon/node_modules/@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "node_modules/ts-sinon/node_modules/sinon": { @@ -25213,6 +25551,11 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -25719,6 +26062,18 @@ } } }, + "node_modules/use-prosemirror": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-prosemirror/-/use-prosemirror-1.2.1.tgz", + "integrity": "sha512-PxWgYd1vTgtJaGGyvuAC+VcECchUlI62sK5x59ELzVMBG2Uxjz895XhjChybr05EuunSyKm1ff/5EScTGtMokA==", + "peerDependencies": { + "prosemirror-model": "^1.11.0", + "prosemirror-state": "^1.3.3", + "prosemirror-view": "^1.15.5", + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, "node_modules/util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -25907,6 +26262,11 @@ "browser-process-hrtime": "^1.0.0" } }, + "node_modules/w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", @@ -25929,9 +26289,9 @@ } }, "node_modules/watchpack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", - "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -25962,6 +26322,19 @@ "normalize-path": "^2.1.1" } }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -26031,16 +26404,6 @@ "fsevents": "^1.2.7" } }, - "node_modules/watchpack-chokidar2/node_modules/chokidar/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/watchpack-chokidar2/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -26385,9 +26748,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.2.0.tgz", - "integrity": "sha512-HVVpHw+5H4lfGasUKjpIkOy9TB27OyKiL13c+dhzVG1w77OQ87b408fp0qKDKQQkNGgShbStDzVJ8sK46JajXg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", "dev": true, "dependencies": { "colorette": "^1.2.2", @@ -27096,8 +27459,7 @@ }, "react/javascript/node_modules/hast-util-sanitize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-4.0.0.tgz", - "integrity": "sha512-pw56+69jq+QSr/coADNvWTmBPDy+XsmwaF5KnUys4/wM1jt/fZdl7GPxhXXXYdXnz3Gj3qMkbUCH2uKjvX0MgQ==", + "license": "MIT", "dependencies": { "@types/hast": "^2.0.0" }, @@ -27108,9 +27470,8 @@ }, "react/javascript/node_modules/react-is": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "license": "MIT" }, "tag-expressions/javascript": { "name": "@cucumber/tag-expressions", @@ -27232,23 +27593,23 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.2.tgz", - "integrity": "sha512-6YctwVsmlkchxfGUogvVrrhzyD3grFJyluj5JgDlQrwfMLJSt5tdAzFZfPf4H2Xoi5YLcQ6BxfJlaOBHuctyIw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", + "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-replace-supers": "^7.14.3", "@babel/helper-split-export-declaration": "^7.12.13" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", @@ -27256,9 +27617,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.1.tgz", + "integrity": "sha512-x3AUTVZNPunaw1opRTa5OwVA5N0YxGlIad9xQ5QflK1uIS7PnAGGU5O2Dj/G183fR//N8AzTq+Q8+oiu9m0VFg==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", @@ -27379,15 +27740,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "@babel/helper-simple-access": { @@ -27498,6 +27859,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -27554,11 +27921,12 @@ } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", - "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", "dev": true, "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.3", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-class-static-block": "^7.12.13" } @@ -28138,16 +28506,16 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.3.tgz", + "integrity": "sha512-uuxuoUNVhdgYzERiHHFkE4dWoJx+UFVyuAl0aqN8P2/AKFHwqgUC5w2+4/PjpKXJsFgBlYAFXlUmDQ3k3DUkXw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-module-imports": "^7.13.12", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.2" } }, "@babel/plugin-transform-react-jsx-development": { @@ -28234,12 +28602,12 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.3.tgz", + "integrity": "sha512-G5Bb5pY6tJRTC4ag1visSgiDoGgJ1u1fMUgmc2ijLkcIdzP83Q1qyZX4ggFQ/SkR+PNOatkaYC+nKcTlpsX4ag==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-create-class-features-plugin": "^7.14.3", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-typescript": "^7.12.13" } @@ -28345,12 +28713,12 @@ }, "dependencies": { "babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.1.tgz", + "integrity": "sha512-WZCqF3DLUhdTD/P381MDJfuP18hdCZ+iqJ+wHtzhWENpsiof284JJ1tMQg1CE+hfCWyG48F7e5gDMk2c3Laz7w==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0", + "@babel/helper-define-polyfill-provider": "^0.2.1", "core-js-compat": "^3.9.1" } }, @@ -28574,14 +28942,10 @@ "dependencies": { "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -28616,9 +28980,7 @@ }, "dependencies": { "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "version": "7.2.0" } } }, @@ -28637,8 +28999,6 @@ "dependencies": { "@types/node": { "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", - "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==", "dev": true } } @@ -28659,9 +29019,7 @@ }, "dependencies": { "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "version": "7.2.0" } } }, @@ -28711,9 +29069,7 @@ }, "dependencies": { "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "version": "7.2.0" } } }, @@ -28748,9 +29104,54 @@ }, "dependencies": { "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "version": "7.2.0" + } + } + }, + "@cucumber/markdown-editor": { + "version": "file:markdown-editor/javascript", + "requires": { + "@babel/core": "7.14.3", + "@storybook/addon-actions": "6.2.9", + "@storybook/addon-links": "6.2.9", + "@storybook/builder-webpack5": "6.2.9", + "@storybook/react": "6.2.9", + "@types/mocha": "8.2.2", + "@types/node": "15.3.1", + "@types/prosemirror-commands": "1.0.4", + "@types/prosemirror-history": "1.0.2", + "@types/prosemirror-keymap": "1.0.4", + "@types/prosemirror-markdown": "1.5.1", + "@types/prosemirror-schema-basic": "1.0.2", + "@types/prosemirror-view": "1.17.1", + "@types/react": "17.0.6", + "@types/react-dom": "17.0.5", + "babel-loader": "8.2.2", + "core-js": "3.12.1", + "mocha": "8.4.0", + "prosemirror-commands": "1.1.8", + "prosemirror-example-setup": "1.1.2", + "prosemirror-history": "1.1.3", + "prosemirror-keymap": "1.1.4", + "prosemirror-markdown": "1.5.1", + "prosemirror-menu": "1.1.4", + "prosemirror-model": "1.14.1", + "prosemirror-schema-basic": "1.1.2", + "prosemirror-state": "1.3.4", + "prosemirror-view": "1.18.7", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-is": "17.0.2", + "source-map-support": "0.5.19", + "style-loader": "2.0.0", + "ts-node": "10.0.0", + "typescript": "4.2.4", + "use-prosemirror": "1.2.1" + }, + "dependencies": { + "react-is": { + "version": "17.0.2", + "dev": true } } }, @@ -28781,14 +29182,10 @@ "dependencies": { "@types/node": { "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", - "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==", "dev": true }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "version": "8.3.2" } } }, @@ -28867,16 +29264,13 @@ }, "dependencies": { "hast-util-sanitize": { - "version": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-4.0.0.tgz", - "integrity": "sha512-pw56+69jq+QSr/coADNvWTmBPDy+XsmwaF5KnUys4/wM1jt/fZdl7GPxhXXXYdXnz3Gj3qMkbUCH2uKjvX0MgQ==", + "version": "4.0.0", "requires": { "@types/hast": "^2.0.0" } }, "react-is": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true } } @@ -29545,9 +29939,9 @@ }, "dependencies": { "@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "@webassemblyjs/ast": { @@ -29864,6 +30258,12 @@ } } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -30071,12 +30471,6 @@ "minimist": "^1.2.5" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -30602,9 +30996,9 @@ }, "dependencies": { "@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true } } @@ -30827,9 +31221,9 @@ }, "dependencies": { "@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "@webassemblyjs/ast": { @@ -31435,9 +31829,9 @@ }, "dependencies": { "@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "@webassemblyjs/ast": { @@ -31913,12 +32307,6 @@ "minimist": "^1.2.5" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -33308,12 +33696,6 @@ "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", "dev": true }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true - }, "@types/braces": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz", @@ -33361,9 +33743,9 @@ "integrity": "sha512-FOS+tbeQKVIq8HAQ5WkWXMPIEeLFJViIMnWfLsxtRKX0jtWSM+emZe43+sKZgwny7EIfVdbbqdtr+RL2h18ykw==" }, "@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "version": "7.2.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.11.tgz", + "integrity": "sha512-WYhv//5K8kQtsSc9F1Kn2vHzhYor6KpwPbARH7hwYe3C3ETD0EVx/3P5qQybUoaBEuUa9f/02JjBiXFWalYUmw==", "dev": true, "requires": { "@types/estree": "*", @@ -33410,6 +33792,11 @@ "@types/unist": "*" } }, + "@types/highlight.js": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", + "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==" + }, "@types/html-minifier-terser": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", @@ -33457,6 +33844,21 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/linkify-it": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.1.tgz", + "integrity": "sha512-pQv3Sygwxxh6jYQzXaiyWDAHevJqWtqDUv6t11Sa9CPGiXny66II7Pl6PR8QO5OVysD6HYOkHMeBgIjLnk9SkQ==" + }, + "@types/markdown-it": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.1.tgz", + "integrity": "sha512-mHfT8j/XkPb1uLEfs0/C3se6nd+webC2kcqcy8tgcVr0GDEONv/xaQzAN+aQvkxQXk/jC0Q6mPS+0xhFwRF35g==", + "requires": { + "@types/highlight.js": "^9.7.0", + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, "@types/markdown-to-jsx": { "version": "6.11.3", "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz", @@ -33474,6 +33876,11 @@ "@types/unist": "*" } }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "@types/micromatch": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", @@ -33536,6 +33943,11 @@ "integrity": "sha512-4QQmOF5KlwfxJ5IGXFIudkeLCdMABz03RcUXu+LCb24zmln8QW6aDjuGl4d4XPVLf2j+FnjelHTP7dvceAFbhA==", "dev": true }, + "@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, "@types/overlayscrollbars": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz", @@ -33566,6 +33978,89 @@ "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", "dev": true }, + "@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-history": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.2.tgz", + "integrity": "sha512-AcfpWo+HkIuvq/H2zYjIMi2jxa2GWfYaTNiFTB2sigjkpWNM93CIlb7Cimy/4vNH8lVPp0GwLBjYIMRX6zOUyA==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "requires": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-markdown/-/prosemirror-markdown-1.5.1.tgz", + "integrity": "sha512-AqHCy80J9HUF+9FHveOB9fbKZwOf+1Ds2Vm1pPN6bfZ/Y6vdgXDry/hoz74+K7fQZZ8+f1J4x16llFj3PAohVg==", + "requires": { + "@types/markdown-it": "*", + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-model": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.13.0.tgz", + "integrity": "sha512-EIUr2R38Zh9n1eA8BQ1C3NX/XLV9U44DhNVk8x3Sth2RW+wa7jNA82XHMPOoapsOTfmpnh32xaHBOzREiBqdPQ==", + "requires": { + "@types/orderedmap": "*" + } + }, + "@types/prosemirror-schema-basic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-basic/-/prosemirror-schema-basic-1.0.2.tgz", + "integrity": "sha512-dzT/6t+dq8/On1be0yarcOIu8wROjhK8QB5wslpLbtTIr5wb0iQv/esJm/KAHcD/PBXR9nSV4TL5AtQmBrcRnw==", + "requires": { + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-state": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.6.tgz", + "integrity": "sha512-tJo0wC+/cQvbrPDVx01Fnng9Fs41bAMVxgJY1KLOyIsUPN0otUN1KdoQurLMmHNHTvIna9ZXxjZD//xJKLYfJw==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-transform": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.3.tgz", + "integrity": "sha512-qtnd4jMoBgUAF2Vy2uRCVY4/LN3d069PP9XTIKrfk7mwWPYKonBYv1NsaBGTpK26sOPu0p7eJNZwaiNYmbfIwA==", + "requires": { + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-view": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.17.1.tgz", + "integrity": "sha512-PNiGGc6BffxHQzMR09UUilsBR8xFPDsKiPIXb4K/g56voPIvqq1pqySnWFfSR50Vo4ZL0tss3VBLWiiiKzVahQ==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, "@types/qs": { "version": "6.9.6", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", @@ -33709,16 +34204,16 @@ "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" }, "@types/webpack": { - "version": "4.41.28", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.28.tgz", - "integrity": "sha512-Nn84RAiJjKRfPFFCVR8LC4ueTtTdfWAMZ03THIzZWRJB+rX24BD3LqPSFnbMscWauEsT4segAsylPDIaZyZyLQ==", + "version": "4.41.29", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.29.tgz", + "integrity": "sha512-6pLaORaVNZxiB3FSHbyBiWM7QdazAWda1zvAq4SbZObZqHSDbWLi62iFdblVea6SK9eyBIVp5yHhKt/yNQdR7Q==", "dev": true, "requires": { - "@types/anymatch": "*", "@types/node": "*", "@types/tapable": "^1", "@types/uglify-js": "*", "@types/webpack-sources": "*", + "anymatch": "^3.0.0", "source-map": "^0.6.0" }, "dependencies": { @@ -34383,14 +34878,6 @@ "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } } }, "app-root-dir": { @@ -34440,7 +34927,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -34852,6 +35338,12 @@ "yaml": "^1.7.2" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -34884,13 +35376,13 @@ "dev": true }, "babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.1.tgz", + "integrity": "sha512-hXGSPbr6IbjeMyGew+3uGIAkRjBFSOJ9FLDZNOfHuyJZCcoia4nd/72J0bSgvfytcVfUcP/dxEVcUhVJuQRtSw==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", + "@babel/helper-define-polyfill-provider": "^0.2.1", "semver": "^6.1.1" }, "dependencies": { @@ -34937,12 +35429,12 @@ } }, "babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.1.tgz", + "integrity": "sha512-T3bYyL3Sll2EtC94v3f+fA8M28q7YPTOZdB++SRHjvYZTvtd+WorMUq3tDTD4Q7Kjk1LG0gGromslKjcO5p2TA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "@babel/helper-define-polyfill-provider": "^0.2.1" } }, "babel-plugin-react-docgen": { @@ -35445,9 +35937,9 @@ } }, "cacache": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.6.tgz", - "integrity": "sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.1.0.tgz", + "integrity": "sha512-mfx0C+mCfWjD1PnwQ9yaOrwG1ou9FkKnx0SvzUHWdFt7r7GaRtzT+9M8HAvLu62zIHtnpQ/1m93nWNDCckJGXQ==", "dev": true, "requires": { "@npmcli/move-file": "^1.0.1", @@ -35642,14 +36134,6 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.5.0" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } } }, "chownr": { @@ -36575,6 +37059,11 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "crelt": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", + "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -36612,15 +37101,14 @@ "dev": true }, "css-loader": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", - "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", + "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", "dev": true, "requires": { - "camelcase": "^6.2.0", "icss-utils": "^5.1.0", "loader-utils": "^2.0.0", - "postcss": "^8.2.10", + "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", @@ -36648,14 +37136,14 @@ "dev": true }, "postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "dev": true, "requires": { "colorette": "^1.2.2", "nanoid": "^3.1.23", - "source-map": "^0.6.1" + "source-map-js": "^0.6.2" } }, "schema-utils": { @@ -36668,12 +37156,6 @@ "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true } } }, @@ -37339,9 +37821,9 @@ "integrity": "sha1-ZVQbswnd3Qz5Ty0ciGGyvmUbsNU=" }, "electron-to-chromium": { - "version": "1.3.728", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.728.tgz", - "integrity": "sha512-SHv4ziXruBpb1Nz4aTuqEHBYi/9GNCJMYIJgDEXrp/2V01nFXMNFUTli5Z85f5ivSkioLilQatqBYFB44wNJrA==", + "version": "1.3.736", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz", + "integrity": "sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==", "dev": true }, "element-resize-detector": { @@ -37648,9 +38130,10 @@ "dev": true }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "escodegen": { "version": "2.0.0", @@ -37764,14 +38247,6 @@ "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } } }, "eslint-config-prettier": { @@ -38489,6 +38964,13 @@ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, "file-entry-cache": { @@ -38789,9 +39271,9 @@ "dev": true }, "fork-ts-checker-webpack-plugin": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.9.tgz", - "integrity": "sha512-D/KSb/2VeiOy3odDerrC16WiZ1t5TLwiFfZmuDeTXcf3Km79M+f8nTCIdKkokxybybrgMcStbx0QpGaseePxnA==", + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.10.tgz", + "integrity": "sha512-HveFCHWSH2WlYU1tU3PkrupvW8lNFMTfH3Jk0TfC2mtktE9ibHGcifhCsCFvj+kqlDfNIlwmNLiNqR9jnSA7OQ==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", @@ -39889,9 +40371,9 @@ } }, "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "optional": true, "requires": { @@ -40983,6 +41465,14 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -41225,10 +41715,29 @@ "object-visit": "^1.0.0" } }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + } + } + }, "markdown-to-jsx": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.2.tgz", - "integrity": "sha512-O8DMCl32V34RrD+ZHxcAPc2+kYytuDIoQYjY36RVdsLK7uHjgNVvFec4yv0X6LgB4YEZgSvK5QtFi5YVqEpoMA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz", + "integrity": "sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w==", "dev": true }, "md5.js": { @@ -41742,12 +42251,6 @@ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -42169,6 +42672,12 @@ "supports-color": "^2.0.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -42273,14 +42782,10 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -42289,9 +42794,9 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, "npm-bundled": { @@ -42434,9 +42939,9 @@ } }, "npm-registry-fetch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-10.1.1.tgz", - "integrity": "sha512-F6a3l+ffCQ7hvvN16YG5bpm1rPZntCg66PLHDQ1apWJPOCUVHoKnL2w5fqEaTVhp42dmossTyXeR7hTGirfXrg==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-10.1.2.tgz", + "integrity": "sha512-KsM/TdPmntqgBFlfsbkOLkkE9ovZo7VpVcd+/eTdYszCrgy5zFl5JzWm+OxavFaEWlbkirpkou+ZYI00RmOBFA==", "dev": true, "requires": { "lru-cache": "^6.0.0", @@ -42941,6 +43446,11 @@ "word-wrap": "^1.2.3" } }, + "orderedmap": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.1.tgz", + "integrity": "sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ==" + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -43316,9 +43826,9 @@ "dev": true }, "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { @@ -43450,6 +43960,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -43798,6 +44314,153 @@ "xtend": "^4.0.0" } }, + "prosemirror-commands": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.1.8.tgz", + "integrity": "sha512-EIj/WAlrK2rVugxNxsFG6pI4430RL63ka2QKB9dO7vvStsLO//nq/oMjmd3VXp08+QNrmmLE23utqBUZwbS9Jg==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-dropcursor": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.5.tgz", + "integrity": "sha512-tNUwcF2lPAkwKBZPZRtbxpwljnODRNZ3eiYloN1DSUqDjMT1nBZm0nejaEMS1TvNQ+3amibUSAiV4hX+jpASFA==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "prosemirror-example-setup": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-example-setup/-/prosemirror-example-setup-1.1.2.tgz", + "integrity": "sha512-MTpIMyqk08jFnzxeRMCinCEMtVSTUtxKgQBGxfCbVe9C6zIOqp9qZZJz5Ojaad1GETySyuj8+OIHHvQsIaaaGQ==", + "requires": { + "prosemirror-commands": "^1.0.0", + "prosemirror-dropcursor": "^1.0.0", + "prosemirror-gapcursor": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-inputrules": "^1.0.0", + "prosemirror-keymap": "^1.0.0", + "prosemirror-menu": "^1.0.0", + "prosemirror-schema-list": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "prosemirror-gapcursor": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.1.5.tgz", + "integrity": "sha512-SjbUZq5pgsBDuV3hu8GqgIpZR5eZvGLM+gPQTqjVVYSMUCfKW3EGXTEYaLHEl1bGduwqNC95O3bZflgtAb4L6w==", + "requires": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "prosemirror-history": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.1.3.tgz", + "integrity": "sha512-zGDotijea+vnfnyyUGyiy1wfOQhf0B/b6zYcCouBV8yo6JmrE9X23M5q7Nf/nATywEZbgRLG70R4DmfSTC+gfg==", + "requires": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "prosemirror-inputrules": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.1.3.tgz", + "integrity": "sha512-ZaHCLyBtvbyIHv0f5p6boQTIJjlD6o2NPZiEaZWT2DA+j591zS29QQEMT4lBqwcLW3qRSf7ZvoKNbf05YrsStw==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-keymap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.4.tgz", + "integrity": "sha512-Al8cVUOnDFL4gcI5IDlG6xbZ0aOD/i3B17VT+1JbHWDguCgt/lBHVTHUBcKvvbSg6+q/W4Nj1Fu6bwZSca3xjg==", + "requires": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "prosemirror-markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.5.1.tgz", + "integrity": "sha512-QvucPHx+gKOQW1SETKUysrful9VBjKqpCFmPotgLfVZ3BdQEGy/NEIFhaXXo3TcuW316MMnKfA90K7GE5I7z8A==", + "requires": { + "markdown-it": "^10.0.0", + "prosemirror-model": "^1.0.0" + } + }, + "prosemirror-menu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.1.4.tgz", + "integrity": "sha512-2ROsji/X9ciDnVSRvSTqFygI34GEdHfQSsK4zBKjPxSEroeiHHcdRMS1ofNIf2zM0Vpp5/YqfpxynElymQkqzg==", + "requires": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "prosemirror-model": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.14.1.tgz", + "integrity": "sha512-vZcbI+24VloFefKZkDnMaEpipL/vSKKPdFiik4KOnTzq3e6AO7+CAOixZ2G/SsfRaYC965XvnOIEbhIQdgki7w==", + "requires": { + "orderedmap": "^1.1.0" + } + }, + "prosemirror-schema-basic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.1.2.tgz", + "integrity": "sha512-G4q8WflNsR1Q33QAV4MQO0xWrHLOJ+BQcKswGXMy626wlQj6c/1n1v4eC9ns+h2y1r/fJHZEgSZnsNhm9lbrDw==", + "requires": { + "prosemirror-model": "^1.2.0" + } + }, + "prosemirror-schema-list": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.4.tgz", + "integrity": "sha512-pNTuZflacFOBlxrTcWSdWhjoB8BaucwfJVp/gJNxztOwaN3wQiC65axclXyplf6TKgXD/EkWfS/QAov3/Znadw==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-transform": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.3.2.tgz", + "integrity": "sha512-/G6d/u9Mf6Bv3H1XR8VxhpjmUO75LYmnvj+s3ZfZpakU1hnQbsvCEybml1B3f2IWUAAQRFkbO1PnsbFhLZsYsw==", + "requires": { + "prosemirror-model": "^1.0.0" + } + }, + "prosemirror-view": { + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.18.7.tgz", + "integrity": "sha512-pUCxoyuWnbVfJ/ukhQ+7+bfDMArG3wu6hHnnTFi61C7Teb5OILUhkkhEhF2/RsppBFWrkwsNcf8rQm8SSoSKRg==", + "requires": { + "prosemirror-model": "^1.1.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -45245,6 +45908,11 @@ "inherits": "^2.0.1" } }, + "rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -46059,6 +46727,12 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", @@ -46146,9 +46820,9 @@ } }, "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, "split-string": { @@ -46163,8 +46837,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.16.1", @@ -46626,9 +47299,9 @@ }, "dependencies": { "ajv": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", - "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -46735,9 +47408,9 @@ } }, "telejson": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.2.0.tgz", - "integrity": "sha512-5ALKeIIpOyu0qoKJVsCXufWwh40HrxLasi75xK8KhMDzUHLzD7Cb9epdLjnncE+el0NENIN8sHLaRVOvjbN6ug==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz", + "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==", "dev": true, "requires": { "@types/is-function": "^1.0.0", @@ -47039,9 +47712,9 @@ } }, "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { "punycode": "^2.1.1" @@ -47128,9 +47801,9 @@ }, "dependencies": { "@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==", + "version": "14.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.0.tgz", + "integrity": "sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA==", "dev": true }, "sinon": { @@ -47265,6 +47938,11 @@ "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -47639,6 +48317,11 @@ "use-isomorphic-layout-effect": "^1.0.0" } }, + "use-prosemirror": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-prosemirror/-/use-prosemirror-1.2.1.tgz", + "integrity": "sha512-PxWgYd1vTgtJaGGyvuAC+VcECchUlI62sK5x59ELzVMBG2Uxjz895XhjChybr05EuunSyKm1ff/5EScTGtMokA==" + }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -47801,6 +48484,11 @@ "browser-process-hrtime": "^1.0.0" } }, + "w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, "w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", @@ -47820,9 +48508,9 @@ } }, "watchpack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", - "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -47848,6 +48536,18 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "binary-extensions": { @@ -47907,15 +48607,6 @@ "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", "upath": "^1.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true - } } }, "fill-range": { @@ -48196,9 +48887,9 @@ } }, "webpack-dev-middleware": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.2.0.tgz", - "integrity": "sha512-HVVpHw+5H4lfGasUKjpIkOy9TB27OyKiL13c+dhzVG1w77OQ87b408fp0qKDKQQkNGgShbStDzVJ8sK46JajXg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", "dev": true, "requires": { "colorette": "^1.2.2", diff --git a/package.json b/package.json index 70e63b87967..6be9f87d243 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "compatibility-kit/javascript", "json-formatter/javascript-testdata", "react/javascript", + "markdown-editor/javascript", "html-formatter/javascript", "json-to-messages/javascript", "json-to-messages/javascript-testdata" diff --git a/tsconfig.build.json b/tsconfig.build.json index 342a74679f7..8c0be123a88 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -46,6 +46,9 @@ { "path": "./react/javascript/tsconfig.build.json" }, + { + "path": "./markdown-editor/javascript/tsconfig.build.json" + }, { "path": "./html-formatter/javascript/tsconfig.build.json" }, diff --git a/tsconfig.json b/tsconfig.json index 57003cce1d7..7f572b32fb5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,8 @@ "@cucumber/fake-cucumber": ["fake-cucumber/javascript/src/index.ts"], "@cucumber/query": ["query/javascript/src/index.ts"], "@cucumber/compatibility-kit": ["compatibility-kit/javascript/src/index.ts"], - "@cucumber/react": ["react/javascript/src/index.ts"] + "@cucumber/react": ["react/javascript/src/index.ts"], + "@cucumber/markdown-editor": ["markdown-editor/javascript/src/index.ts"] }, "noEmit": true } From ca25620c3ddf9b4eee0f16bf072ef601a4cd9667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Wed, 26 May 2021 11:13:46 +0100 Subject: [PATCH 02/25] Start implementing GFM table support --- markdown-editor/javascript/.mocharc.json | 2 +- markdown-editor/javascript/package.json | 8 +- .../javascript/src/MarkdownEditor.tsx | 93 +++++++++--- .../javascript/src/cucumberMarkdown.ts | 140 ++++++++++++++++++ markdown-editor/javascript/src/index.ts | 6 +- .../src/stories/MarkdownEditor.stories.tsx | 45 ++---- .../javascript/test/fromMarkdownTest.ts | 19 +++ .../javascript/test/toMarkdownTest.ts | 23 +++ 8 files changed, 281 insertions(+), 55 deletions(-) create mode 100644 markdown-editor/javascript/src/cucumberMarkdown.ts create mode 100644 markdown-editor/javascript/test/fromMarkdownTest.ts create mode 100644 markdown-editor/javascript/test/toMarkdownTest.ts diff --git a/markdown-editor/javascript/.mocharc.json b/markdown-editor/javascript/.mocharc.json index d5055eb10d0..b0833b9c329 100644 --- a/markdown-editor/javascript/.mocharc.json +++ b/markdown-editor/javascript/.mocharc.json @@ -1,5 +1,5 @@ { - "require": ["tsconfig-paths/register", "ts-node/register", "source-map-support/register"], + "require": ["ts-node/register", "source-map-support/register"], "extension": ["ts", "tsx"], "recursive": true, "timeout": 10000 diff --git a/markdown-editor/javascript/package.json b/markdown-editor/javascript/package.json index 6fa888a9b2e..8ace7e638ba 100644 --- a/markdown-editor/javascript/package.json +++ b/markdown-editor/javascript/package.json @@ -18,10 +18,13 @@ "dependencies": { "@types/prosemirror-commands": "1.0.4", "@types/prosemirror-history": "1.0.2", - "@types/prosemirror-markdown": "1.5.1", "@types/prosemirror-keymap": "1.0.4", + "@types/prosemirror-markdown": "1.5.1", + "@types/prosemirror-menu": "1.0.3", "@types/prosemirror-schema-basic": "1.0.2", + "@types/prosemirror-tables": "0.9.1", "@types/prosemirror-view": "1.17.1", + "markdown-it": "12.0.6", "prosemirror-commands": "1.1.8", "prosemirror-example-setup": "1.1.2", "prosemirror-history": "1.1.3", @@ -31,6 +34,7 @@ "prosemirror-model": "1.14.1", "prosemirror-schema-basic": "1.1.2", "prosemirror-state": "1.3.4", + "prosemirror-tables": "1.1.1", "prosemirror-view": "1.18.7", "use-prosemirror": "1.2.1" }, @@ -44,12 +48,14 @@ "@storybook/addon-links": "6.2.9", "@storybook/builder-webpack5": "6.2.9", "@storybook/react": "6.2.9", + "@types/jsdom": "16.2.10", "@types/mocha": "8.2.2", "@types/node": "15.3.1", "@types/react": "17.0.6", "@types/react-dom": "17.0.5", "babel-loader": "8.2.2", "core-js": "3.12.1", + "jsdom": "16.6.0", "mocha": "8.4.0", "react": "17.0.2", "react-dom": "17.0.2", diff --git a/markdown-editor/javascript/src/MarkdownEditor.tsx b/markdown-editor/javascript/src/MarkdownEditor.tsx index 8e45b38f665..4ab0dffe4a7 100644 --- a/markdown-editor/javascript/src/MarkdownEditor.tsx +++ b/markdown-editor/javascript/src/MarkdownEditor.tsx @@ -1,25 +1,80 @@ -import "prosemirror-view/style/prosemirror.css"; -import "prosemirror-example-setup/style/style.css"; -import "prosemirror-menu/style/menu.css"; +import 'prosemirror-view/style/prosemirror.css' +import 'prosemirror-example-setup/style/style.css' +import 'prosemirror-menu/style/menu.css' +import 'prosemirror-tables/style/tables.css' -import React from "react"; -import {ProseMirror, useProseMirror} from "use-prosemirror"; -import {defaultMarkdownParser, schema} from "prosemirror-markdown" +import React from 'react' +import { ProseMirror, useProseMirror } from 'use-prosemirror' // @ts-ignore -import {exampleSetup} from "prosemirror-example-setup" +import { buildMenuItems, exampleSetup } from 'prosemirror-example-setup' +import { + addColumnAfter, + addColumnBefore, + addRowAfter, + addRowBefore, + columnResizing, + deleteColumn, + deleteRow, + deleteTable, + goToNextCell, + mergeCells, + setCellAttr, + splitCell, + tableEditing, + toggleHeaderCell, + toggleHeaderColumn, + toggleHeaderRow, +} from 'prosemirror-tables' +import { keymap } from 'prosemirror-keymap' +import { Dropdown, MenuItem } from 'prosemirror-menu' +import { cucumberMarkdownParser, schema } from './cucumberMarkdown' -const MarkdownEditor: React.FunctionComponent<{ content: string }> = ({content}) => { +const menu = buildMenuItems(schema).fullMenu + +function item(label: string, cmd: any) { + return new MenuItem({ label, select: cmd, run: cmd }) +} + +const tableMenu = [ + item('Insert column before', addColumnBefore), + item('Insert column after', addColumnAfter), + item('Delete column', deleteColumn), + item('Insert row before', addRowBefore), + item('Insert row after', addRowAfter), + item('Delete row', deleteRow), + item('Delete table', deleteTable), + item('Merge cells', mergeCells), + item('Split cell', splitCell), + item('Toggle header column', toggleHeaderColumn), + item('Toggle header row', toggleHeaderRow), + item('Toggle header cells', toggleHeaderCell), + item('Make cell green', setCellAttr('background', '#dfd')), + item('Make cell not-green', setCellAttr('background', null)), +] + +function addTable() { + console.log('ADDED TABLE') + return true +} + +menu.splice(2, 0, [ + new MenuItem({ label: 'ADD TABLE', select: addTable, run: addTable }), + new Dropdown(tableMenu, { label: 'Table' }), +]) + +const MarkdownEditor: React.FunctionComponent<{ content: string }> = ({ content }) => { const [state, setState] = useProseMirror({ - doc: defaultMarkdownParser.parse(content), - plugins: exampleSetup({schema}) - }); - return ( - - ); + doc: cucumberMarkdownParser.parse(content), + plugins: [ + columnResizing({}), + tableEditing(), + keymap({ + Tab: goToNextCell(1), + 'Shift-Tab': goToNextCell(-1), + }), + ].concat(exampleSetup({ schema, menuContent: menu })), + }) + return setState(newState)} /> } -export default MarkdownEditor \ No newline at end of file +export default MarkdownEditor diff --git a/markdown-editor/javascript/src/cucumberMarkdown.ts b/markdown-editor/javascript/src/cucumberMarkdown.ts new file mode 100644 index 00000000000..d212349b01c --- /dev/null +++ b/markdown-editor/javascript/src/cucumberMarkdown.ts @@ -0,0 +1,140 @@ +import MarkdownIt from 'markdown-it' +import { + defaultMarkdownSerializer, + MarkdownParser, + schema as markdownSchema, +} from 'prosemirror-markdown' +import { Schema } from 'prosemirror-model' +import { tableNodes } from 'prosemirror-tables' + +export const schema = new Schema({ + // @ts-ignore + nodes: markdownSchema.spec.nodes.append( + tableNodes({ + tableGroup: 'block', + // Examples suggest block+ but we want to be more restrictive - ideally just text + cellContent: 'paragraph', + cellAttributes: { + background: { + default: null, + getFromDOM(dom) { + // @ts-ignore + return dom.style.backgroundColor || null + }, + setDOMAttr(value, attrs) { + if (value) attrs.style = (attrs.style || '') + `background-color: ${value};` + }, + }, + }, + }) + ), + marks: markdownSchema.spec.marks, +}) + +function listIsTight(tokens: any[], i: number) { + while (++i < tokens.length) if (tokens[i].type != 'list_item_open') return tokens[i].hidden + return false +} + +// TODO: Simplify when/if this is released: https://github.com/ProseMirror/prosemirror-markdown/pull/54 +export const cucumberMarkdownParser = new MarkdownParser(schema, new MarkdownIt(), { + blockquote: { block: 'blockquote' }, + paragraph: { block: 'paragraph' }, + list_item: { block: 'list_item' }, + bullet_list: { + block: 'bullet_list', + // @ts-ignore + getAttrs: (_: any, tokens: any[], i: number) => ({ tight: listIsTight(tokens, i) }), + }, + ordered_list: { + // @ts-ignore + block: 'ordered_list', + getAttrs: (tok, tokens, i) => ({ + order: +tok.attrGet('start') || 1, + tight: listIsTight(tokens, i), + }), + }, + heading: { block: 'heading', getAttrs: (tok) => ({ level: +tok.tag.slice(1) }) }, + code_block: { block: 'code_block', noCloseToken: true }, + fence: { + block: 'code_block', + getAttrs: (tok) => ({ params: tok.info || '' }), + noCloseToken: true, + }, + hr: { node: 'horizontal_rule' }, + image: { + node: 'image', + getAttrs: (tok) => ({ + src: tok.attrGet('src'), + title: tok.attrGet('title') || null, + alt: (tok.children[0] && tok.children[0].content) || null, + }), + }, + hardbreak: { node: 'hard_break' }, + + em: { mark: 'em' }, + strong: { mark: 'strong' }, + link: { + mark: 'link', + getAttrs: (tok) => ({ + href: tok.attrGet('href'), + title: tok.attrGet('title') || null, + }), + }, + code_inline: { mark: 'code', noCloseToken: true }, + // GFM Table support: + table: { block: 'table' }, + // THEAD and TBODY don't exist in the prosemirror-tables schema + thead: { ignore: true }, + tbody: { ignore: true }, + tr: { block: 'table_row' }, +}) + +// @ts-ignore +cucumberMarkdownParser.tokenHandlers['th_open'] = function (state) { + // @ts-ignore + state.openNode(schema.nodeType('table_cell')) + // @ts-ignore + state.openNode(schema.nodeType('paragraph')) +} + +// @ts-ignore +cucumberMarkdownParser.tokenHandlers['th_close'] = function (state) { + state.closeNode() + state.closeNode() +} + +// @ts-ignore +cucumberMarkdownParser.tokenHandlers['td_open'] = function (state) { + // @ts-ignore + state.openNode(schema.nodeType('table_cell')) + // @ts-ignore + state.openNode(schema.nodeType('paragraph')) +} + +// @ts-ignore +cucumberMarkdownParser.tokenHandlers['td_close'] = function (state) { + state.closeNode() + state.closeNode() +} + +export const cucumberMarkdownSerializer = defaultMarkdownSerializer +cucumberMarkdownSerializer.nodes['table'] = (state, tableNode) => { + state.renderContent(tableNode) +} +cucumberMarkdownSerializer.nodes['table_row'] = (state, cell) => { + state.renderContent(cell) + state.text(' | \n') +} +cucumberMarkdownSerializer.nodes['table_header'] = (state, node) => { + state.text(' | ') + node.forEach((n) => { + state.renderContent(n) + }) +} +cucumberMarkdownSerializer.nodes['table_cell'] = (state, node) => { + state.text(' | ') + node.forEach((n) => { + state.renderContent(n) + }) +} diff --git a/markdown-editor/javascript/src/index.ts b/markdown-editor/javascript/src/index.ts index f5128435fe3..6d7245f37aa 100644 --- a/markdown-editor/javascript/src/index.ts +++ b/markdown-editor/javascript/src/index.ts @@ -1,5 +1,3 @@ -import MarkdownEditor from "./MarkdownEditor"; +import MarkdownEditor from './MarkdownEditor' -export { - MarkdownEditor -} +export { MarkdownEditor } diff --git a/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx b/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx index 06cf36249bf..4da2e75f976 100644 --- a/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx +++ b/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx @@ -1,6 +1,6 @@ import React from 'react' -import {Meta, Story} from '@storybook/react' -import MarkdownEditor from "../MarkdownEditor"; +import { Meta, Story } from '@storybook/react' +import MarkdownEditor from '../MarkdownEditor' export default { title: 'MarkdownEditor', @@ -9,34 +9,19 @@ export default { type TemplateArgs = { content: string } -const Template: Story = ({content}) => { - return ( - - ) +const Template: Story = ({ content }) => { + return } -export const MDG = Template.bind({}) -MDG.args = { - content: `# Feature: Staying alive - -This is about actually staying alive, -not the [Bee Gees song](https://www.youtube.com/watch?v=I_izvAbhExY). - -## Rule: If you don't eat you die - -![xkcd](https://imgs.xkcd.com/comics/lunch_2x.png) - -### Scenario Outline: eating - -* Given there are cucumbers -* When I eat cucumbers -* Then I should have cucumbers - -#### Examples: - -| start | eat | left | -| ----- | --- | ---- | -| 12 | 5 | 7 | -| 20 | 5 | 15 | -` +export const Tables = Template.bind({}) +Tables.args = { + content: `# Welcome +Bla bla + +| COL1 | COL2 | +| ---- | ---- | +| One | Two | +| Un | Deux | +| En | To | +`, } diff --git a/markdown-editor/javascript/test/fromMarkdownTest.ts b/markdown-editor/javascript/test/fromMarkdownTest.ts new file mode 100644 index 00000000000..a3d35ad2358 --- /dev/null +++ b/markdown-editor/javascript/test/fromMarkdownTest.ts @@ -0,0 +1,19 @@ +import { cucumberMarkdownParser, cucumberMarkdownSerializer } from '../src/cucumberMarkdown' + +describe('fromMarkdown', () => { + it('parses markdown table', () => { + const markdown = `# Hello + +| COL1 | COL2 | +| ---- | ---- | +| One | Two | +| Un | Deux | +| En | To | +` + const doc = cucumberMarkdownParser.parse(markdown) + const newMarkdown = cucumberMarkdownSerializer.serialize(doc) + console.log(newMarkdown) + + // console.log(JSON.stringify(doc.toJSON(), null, 2)) + }) +}) diff --git a/markdown-editor/javascript/test/toMarkdownTest.ts b/markdown-editor/javascript/test/toMarkdownTest.ts new file mode 100644 index 00000000000..b36463da3c9 --- /dev/null +++ b/markdown-editor/javascript/test/toMarkdownTest.ts @@ -0,0 +1,23 @@ +import { cucumberMarkdownSerializer, schema } from '../src/cucumberMarkdown' +import { DOMParser } from 'prosemirror-model' +import { JSDOM } from 'jsdom' + +describe('toMarkdown', () => { + it('writes markdown table', () => { + const documentElement = new JSDOM( + ` + + + + +
COL1COL2
OneTwo
UnDeux
EnTo
` + ).window.document.documentElement + const parser = DOMParser.fromSchema(schema) + const doc = parser.parse(documentElement) + console.log(JSON.stringify(doc.toJSON(), null, 2)) + + const markdown = cucumberMarkdownSerializer.serialize(doc) + + console.log(markdown) + }) +}) From 8add80e7fe855807df3a4c79f53a17f8088f3932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Thu, 27 May 2021 12:15:04 +0100 Subject: [PATCH 03/25] Link to code for inserting table --- markdown-editor/javascript/src/MarkdownEditor.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/markdown-editor/javascript/src/MarkdownEditor.tsx b/markdown-editor/javascript/src/MarkdownEditor.tsx index 4ab0dffe4a7..5914cf514ba 100644 --- a/markdown-editor/javascript/src/MarkdownEditor.tsx +++ b/markdown-editor/javascript/src/MarkdownEditor.tsx @@ -52,6 +52,9 @@ const tableMenu = [ item('Make cell not-green', setCellAttr('background', null)), ] +// TODO: Adapt one of these: +// https://gitlab.coko.foundation/wax/wax-prosemirror/-/blob/master/wax-prosemirror-components/src/ui/tables/InsertTableTool.js +// https://github.com/chanzuckerberg/czi-prosemirror/blob/master/src/ui/TableGridSizeEditor.js function addTable() { console.log('ADDED TABLE') return true From 458b932dc0cb6574a2cc52506bd1b619f6f84478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Thu, 27 May 2021 16:15:34 +0100 Subject: [PATCH 04/25] Fix table serialization --- .../javascript/src/cucumberMarkdown.ts | 95 ++++++------------- .../javascript/test/fromMarkdownTest.ts | 19 ---- markdown-editor/javascript/test/tableTest.ts | 44 +++++++++ .../javascript/test/toMarkdownTest.ts | 23 ----- 4 files changed, 75 insertions(+), 106 deletions(-) delete mode 100644 markdown-editor/javascript/test/fromMarkdownTest.ts create mode 100644 markdown-editor/javascript/test/tableTest.ts delete mode 100644 markdown-editor/javascript/test/toMarkdownTest.ts diff --git a/markdown-editor/javascript/src/cucumberMarkdown.ts b/markdown-editor/javascript/src/cucumberMarkdown.ts index d212349b01c..ca754aa9892 100644 --- a/markdown-editor/javascript/src/cucumberMarkdown.ts +++ b/markdown-editor/javascript/src/cucumberMarkdown.ts @@ -1,11 +1,13 @@ import MarkdownIt from 'markdown-it' import { + defaultMarkdownParser, defaultMarkdownSerializer, MarkdownParser, schema as markdownSchema, } from 'prosemirror-markdown' import { Schema } from 'prosemirror-model' import { tableNodes } from 'prosemirror-tables' +import { Node } from 'prosemirror-model' export const schema = new Schema({ // @ts-ignore @@ -31,69 +33,20 @@ export const schema = new Schema({ marks: markdownSchema.spec.marks, }) -function listIsTight(tokens: any[], i: number) { - while (++i < tokens.length) if (tokens[i].type != 'list_item_open') return tokens[i].hidden - return false -} - // TODO: Simplify when/if this is released: https://github.com/ProseMirror/prosemirror-markdown/pull/54 -export const cucumberMarkdownParser = new MarkdownParser(schema, new MarkdownIt(), { - blockquote: { block: 'blockquote' }, - paragraph: { block: 'paragraph' }, - list_item: { block: 'list_item' }, - bullet_list: { - block: 'bullet_list', - // @ts-ignore - getAttrs: (_: any, tokens: any[], i: number) => ({ tight: listIsTight(tokens, i) }), - }, - ordered_list: { - // @ts-ignore - block: 'ordered_list', - getAttrs: (tok, tokens, i) => ({ - order: +tok.attrGet('start') || 1, - tight: listIsTight(tokens, i), - }), - }, - heading: { block: 'heading', getAttrs: (tok) => ({ level: +tok.tag.slice(1) }) }, - code_block: { block: 'code_block', noCloseToken: true }, - fence: { - block: 'code_block', - getAttrs: (tok) => ({ params: tok.info || '' }), - noCloseToken: true, - }, - hr: { node: 'horizontal_rule' }, - image: { - node: 'image', - getAttrs: (tok) => ({ - src: tok.attrGet('src'), - title: tok.attrGet('title') || null, - alt: (tok.children[0] && tok.children[0].content) || null, - }), - }, - hardbreak: { node: 'hard_break' }, - - em: { mark: 'em' }, - strong: { mark: 'strong' }, - link: { - mark: 'link', - getAttrs: (tok) => ({ - href: tok.attrGet('href'), - title: tok.attrGet('title') || null, - }), - }, - code_inline: { mark: 'code', noCloseToken: true }, - // GFM Table support: +const tokens = {...defaultMarkdownParser.tokens, ...{ table: { block: 'table' }, // THEAD and TBODY don't exist in the prosemirror-tables schema thead: { ignore: true }, tbody: { ignore: true }, tr: { block: 'table_row' }, -}) +}} +export const cucumberMarkdownParser = new MarkdownParser(schema, new MarkdownIt(), tokens) // @ts-ignore cucumberMarkdownParser.tokenHandlers['th_open'] = function (state) { // @ts-ignore - state.openNode(schema.nodeType('table_cell')) + state.openNode(schema.nodeType('table_header')) // @ts-ignore state.openNode(schema.nodeType('paragraph')) } @@ -119,22 +72,36 @@ cucumberMarkdownParser.tokenHandlers['td_close'] = function (state) { } export const cucumberMarkdownSerializer = defaultMarkdownSerializer + +let rowIndex: number cucumberMarkdownSerializer.nodes['table'] = (state, tableNode) => { + rowIndex = 0 state.renderContent(tableNode) } -cucumberMarkdownSerializer.nodes['table_row'] = (state, cell) => { - state.renderContent(cell) - state.text(' | \n') +cucumberMarkdownSerializer.nodes['table_row'] = (state, node) => { + state.renderContent(node) + state.text('|\n') + if(rowIndex === 0) { + const json = node.toJSON() + json.content.forEach((tableHeader: Node) => { + tableHeader.content.forEach((paragraph: Node) => { + // @ts-ignore + paragraph.content[0].text = '----' + }) + }) + const separatorNode = Node.fromJSON(schema, json) + state.renderContent(separatorNode) + state.text('|\n') + } + rowIndex++ } cucumberMarkdownSerializer.nodes['table_header'] = (state, node) => { - state.text(' | ') - node.forEach((n) => { - state.renderContent(n) - }) + state.text('| ') + node.forEach((childNode) => state.renderContent(childNode)) + state.text(' ') } cucumberMarkdownSerializer.nodes['table_cell'] = (state, node) => { - state.text(' | ') - node.forEach((n) => { - state.renderContent(n) - }) + state.text('| ') + node.forEach((childNode) => state.renderContent(childNode)) + state.text(' ') } diff --git a/markdown-editor/javascript/test/fromMarkdownTest.ts b/markdown-editor/javascript/test/fromMarkdownTest.ts deleted file mode 100644 index a3d35ad2358..00000000000 --- a/markdown-editor/javascript/test/fromMarkdownTest.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { cucumberMarkdownParser, cucumberMarkdownSerializer } from '../src/cucumberMarkdown' - -describe('fromMarkdown', () => { - it('parses markdown table', () => { - const markdown = `# Hello - -| COL1 | COL2 | -| ---- | ---- | -| One | Two | -| Un | Deux | -| En | To | -` - const doc = cucumberMarkdownParser.parse(markdown) - const newMarkdown = cucumberMarkdownSerializer.serialize(doc) - console.log(newMarkdown) - - // console.log(JSON.stringify(doc.toJSON(), null, 2)) - }) -}) diff --git a/markdown-editor/javascript/test/tableTest.ts b/markdown-editor/javascript/test/tableTest.ts new file mode 100644 index 00000000000..81b7a4832d5 --- /dev/null +++ b/markdown-editor/javascript/test/tableTest.ts @@ -0,0 +1,44 @@ +import assert from 'assert' +import { JSDOM } from 'jsdom' +import {cucumberMarkdownParser, cucumberMarkdownSerializer, schema} from '../src/cucumberMarkdown' +import {DOMParser} from 'prosemirror-model' + +describe('fromMarkdown', () => { + it('roundtrips markdown table', () => { + const markdown = `# Hello + +| COL1 | COL2 | +| ---- | ---- | +| One | Two | +| Un | Deux | +| En | To | +` + const doc = cucumberMarkdownParser.parse(markdown) + const newMarkdown = cucumberMarkdownSerializer.serialize(doc) + assert.strictEqual(newMarkdown, markdown) + }) + + it('serializes markdown table', () => { + const documentElement = new JSDOM( + ` + + + + +
COL1COL2
OneTwo
UnDeux
EnTo
` + ).window.document.documentElement + const parser = DOMParser.fromSchema(schema) + const doc = parser.parse(documentElement) + + const markdown = cucumberMarkdownSerializer.serialize(doc) + + const expectedMarkdown = `| COL1 | COL2 | +| ---- | ---- | +| One | Two | +| Un | Deux | +| En | To | +` + assert.strictEqual(markdown, expectedMarkdown) + + }) +}) diff --git a/markdown-editor/javascript/test/toMarkdownTest.ts b/markdown-editor/javascript/test/toMarkdownTest.ts deleted file mode 100644 index b36463da3c9..00000000000 --- a/markdown-editor/javascript/test/toMarkdownTest.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { cucumberMarkdownSerializer, schema } from '../src/cucumberMarkdown' -import { DOMParser } from 'prosemirror-model' -import { JSDOM } from 'jsdom' - -describe('toMarkdown', () => { - it('writes markdown table', () => { - const documentElement = new JSDOM( - ` - - - - -
COL1COL2
OneTwo
UnDeux
EnTo
` - ).window.document.documentElement - const parser = DOMParser.fromSchema(schema) - const doc = parser.parse(documentElement) - console.log(JSON.stringify(doc.toJSON(), null, 2)) - - const markdown = cucumberMarkdownSerializer.serialize(doc) - - console.log(markdown) - }) -}) From 382d0941e38d87cedd46170e3e50eea556b9710c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Thu, 27 May 2021 16:41:28 +0100 Subject: [PATCH 05/25] Add styles --- .../javascript/src/MarkdownEditor.tsx | 1 + .../javascript/src/cucumberMarkdown.ts | 5 +- markdown-editor/javascript/src/styles.css | 66 +++++-------------- 3 files changed, 20 insertions(+), 52 deletions(-) diff --git a/markdown-editor/javascript/src/MarkdownEditor.tsx b/markdown-editor/javascript/src/MarkdownEditor.tsx index 5914cf514ba..1591e071fce 100644 --- a/markdown-editor/javascript/src/MarkdownEditor.tsx +++ b/markdown-editor/javascript/src/MarkdownEditor.tsx @@ -2,6 +2,7 @@ import 'prosemirror-view/style/prosemirror.css' import 'prosemirror-example-setup/style/style.css' import 'prosemirror-menu/style/menu.css' import 'prosemirror-tables/style/tables.css' +import './styles.css' import React from 'react' import { ProseMirror, useProseMirror } from 'use-prosemirror' diff --git a/markdown-editor/javascript/src/cucumberMarkdown.ts b/markdown-editor/javascript/src/cucumberMarkdown.ts index ca754aa9892..42593087d0b 100644 --- a/markdown-editor/javascript/src/cucumberMarkdown.ts +++ b/markdown-editor/javascript/src/cucumberMarkdown.ts @@ -14,14 +14,15 @@ export const schema = new Schema({ nodes: markdownSchema.spec.nodes.append( tableNodes({ tableGroup: 'block', - // Examples suggest block+ but we want to be more restrictive - ideally just text + // Examples suggest block+ but we want to restrict to a single paragraph (single line) + // TODO: Investigate if we can restrict to a span, if such a thing exists in prosemirror cellContent: 'paragraph', cellAttributes: { background: { default: null, getFromDOM(dom) { // @ts-ignore - return dom.style.backgroundColor || null + return (dom.style && dom.style.backgroundColor) || null; }, setDOMAttr(value, attrs) { if (value) attrs.style = (attrs.style || '') + `background-color: ${value};` diff --git a/markdown-editor/javascript/src/styles.css b/markdown-editor/javascript/src/styles.css index 4667115938a..f64bebeffaa 100644 --- a/markdown-editor/javascript/src/styles.css +++ b/markdown-editor/javascript/src/styles.css @@ -1,56 +1,22 @@ -.App { - font-family: sans-serif; -} - -.ProseMirrorContainer { - padding: 16px; - border: 1px solid #ccc; - transition: 0.1s; - border-radius: 5px; - background-color: #fff; -} - -.ProseMirrorContainer:focus-within { - box-shadow: 0 0 0 3px #a6c3ff; - border-color: blue; -} - -.ProseMirror { - min-height: 200px; +.ProseMirror-menubar-wrapper { + border: 1px solid silver; outline: none; - padding: 0; - font-size: 18px; } - -.Menu { - display: flex; - margin-bottom: 7px; - padding-left: 2px; -} - -button { - font-size: 14px; - cursor: pointer; - width: 36px; - height: 36px; - margin-right: 5px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 5px; - box-shadow: none; - border: 1px solid #ccc; +.ProseMirror { + padding: 5px 15px; } - -button.bold { - font-weight: 700; +.ProseMirror table { + margin: 0; } - -button.italic { - font-style: italic; +.ProseMirror th, .ProseMirror td { + min-width: 1em; + border: 1px solid #ddd; + padding: 3px 5px; } - -p { - margin: 0; - line-height: 1.3; +.ProseMirror .tableWrapper { + margin: 1em 0; } +.ProseMirror th { + font-weight: bold; + text-align: left; +} \ No newline at end of file From 5586667faf9c5bb0fe7cf8493bf5e2d3c9eb1c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Sun, 30 May 2021 21:49:32 +0100 Subject: [PATCH 06/25] WIP: insert table --- .../javascript/src/MarkdownEditor.tsx | 47 +- package-lock.json | 969 +++++++++++++++++- 2 files changed, 1005 insertions(+), 11 deletions(-) diff --git a/markdown-editor/javascript/src/MarkdownEditor.tsx b/markdown-editor/javascript/src/MarkdownEditor.tsx index 1591e071fce..325a9b5fcb5 100644 --- a/markdown-editor/javascript/src/MarkdownEditor.tsx +++ b/markdown-editor/javascript/src/MarkdownEditor.tsx @@ -29,6 +29,8 @@ import { import { keymap } from 'prosemirror-keymap' import { Dropdown, MenuItem } from 'prosemirror-menu' import { cucumberMarkdownParser, schema } from './cucumberMarkdown' +import { EditorState, TextSelection, Transaction } from 'prosemirror-state' +import { Fragment, Node } from 'prosemirror-model' const menu = buildMenuItems(schema).fullMenu @@ -56,13 +58,48 @@ const tableMenu = [ // TODO: Adapt one of these: // https://gitlab.coko.foundation/wax/wax-prosemirror/-/blob/master/wax-prosemirror-components/src/ui/tables/InsertTableTool.js // https://github.com/chanzuckerberg/czi-prosemirror/blob/master/src/ui/TableGridSizeEditor.js -function addTable() { - console.log('ADDED TABLE') - return true -} +// https://discuss.prosemirror.net/t/how-co-create-table/3510/3 +function insertTable() { + return ( + state: EditorState, + dispatch: (tr: Transaction) => void + ): boolean => { + const offset: number = state.tr.selection.anchor + 1; + const transaction: Transaction = state.tr; + const cell: Node = state.schema.nodes.table_cell.createAndFill(); + const node: Node = state.schema.nodes.table.create( + null, + Fragment.fromArray([ + state.schema.nodes.table_row.create( + null, + Fragment.fromArray([cell, cell, cell]) + ), + state.schema.nodes.table_row.create( + null, + Fragment.fromArray([cell, cell, cell]) + ) + ]) + ); + + if (dispatch) { + dispatch( + transaction + .replaceSelectionWith(node) + .scrollIntoView() + .setSelection( + TextSelection.near( + transaction.doc.resolve(offset) + ) + ) + ); + } + + return true; + }; +} menu.splice(2, 0, [ - new MenuItem({ label: 'ADD TABLE', select: addTable, run: addTable }), + new MenuItem({ label: 'Add table', title: 'Insert table', class: 'ProseMirror-icon', run: insertTable }), new Dropdown(tableMenu, { label: 'Table' }), ]) diff --git a/package-lock.json b/package-lock.json index 56427209dbe..8eb7f84c7a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "compatibility-kit/javascript", "json-formatter/javascript-testdata", "react/javascript", + "markdown-editor/javascript", "html-formatter/javascript", "json-to-messages/javascript", "json-to-messages/javascript-testdata" @@ -334,6 +335,107 @@ "node": ">= 10" } }, + "markdown-editor/javascript": { + "version": "14.0.0", + "license": "MIT", + "dependencies": { + "@types/prosemirror-commands": "1.0.4", + "@types/prosemirror-history": "1.0.2", + "@types/prosemirror-keymap": "1.0.4", + "@types/prosemirror-markdown": "1.5.1", + "@types/prosemirror-menu": "1.0.3", + "@types/prosemirror-schema-basic": "1.0.2", + "@types/prosemirror-tables": "0.9.1", + "@types/prosemirror-view": "1.17.1", + "markdown-it": "12.0.6", + "prosemirror-commands": "1.1.8", + "prosemirror-example-setup": "1.1.2", + "prosemirror-history": "1.1.3", + "prosemirror-keymap": "1.1.4", + "prosemirror-markdown": "1.5.1", + "prosemirror-menu": "1.1.4", + "prosemirror-model": "1.14.1", + "prosemirror-schema-basic": "1.1.2", + "prosemirror-state": "1.3.4", + "prosemirror-tables": "1.1.1", + "prosemirror-view": "1.18.7", + "use-prosemirror": "1.2.1" + }, + "devDependencies": { + "@babel/core": "7.14.3", + "@storybook/addon-actions": "6.2.9", + "@storybook/addon-links": "6.2.9", + "@storybook/builder-webpack5": "6.2.9", + "@storybook/react": "6.2.9", + "@types/jsdom": "16.2.10", + "@types/mocha": "8.2.2", + "@types/node": "15.3.1", + "@types/react": "17.0.6", + "@types/react-dom": "17.0.5", + "babel-loader": "8.2.2", + "core-js": "3.12.1", + "jsdom": "16.6.0", + "mocha": "8.4.0", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-is": "17.0.2", + "source-map-support": "0.5.19", + "style-loader": "2.0.0", + "ts-node": "10.0.0", + "typescript": "4.2.4" + }, + "peerDependencies": { + "react": "~17", + "react-dom": "~17" + } + }, + "markdown-editor/javascript/node_modules/@types/react": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.6.tgz", + "integrity": "sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "markdown-editor/javascript/node_modules/core-js": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.1.tgz", + "integrity": "sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "markdown-editor/javascript/node_modules/csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", + "dev": true + }, + "markdown-editor/javascript/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "markdown-editor/javascript/node_modules/typescript": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "message-streams/javascript": { "name": "@cucumber/message-streams", "version": "2.0.0", @@ -2137,6 +2239,10 @@ "resolved": "json-to-messages/javascript", "link": true }, + "node_modules/@cucumber/markdown-editor": { + "resolved": "markdown-editor/javascript", + "link": true + }, "node_modules/@cucumber/message-streams": { "resolved": "message-streams/javascript", "link": true @@ -7723,6 +7829,11 @@ "@types/unist": "*" } }, + "node_modules/@types/highlight.js": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", + "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==" + }, "node_modules/@types/html-minifier-terser": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", @@ -7770,6 +7881,21 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "node_modules/@types/linkify-it": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.1.tgz", + "integrity": "sha512-pQv3Sygwxxh6jYQzXaiyWDAHevJqWtqDUv6t11Sa9CPGiXny66II7Pl6PR8QO5OVysD6HYOkHMeBgIjLnk9SkQ==" + }, + "node_modules/@types/markdown-it": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.1.tgz", + "integrity": "sha512-mHfT8j/XkPb1uLEfs0/C3se6nd+webC2kcqcy8tgcVr0GDEONv/xaQzAN+aQvkxQXk/jC0Q6mPS+0xhFwRF35g==", + "dependencies": { + "@types/highlight.js": "^9.7.0", + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, "node_modules/@types/markdown-to-jsx": { "version": "6.11.3", "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz", @@ -7787,6 +7913,11 @@ "@types/unist": "*" } }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "node_modules/@types/micromatch": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", @@ -7856,6 +7987,11 @@ "integrity": "sha512-4QQmOF5KlwfxJ5IGXFIudkeLCdMABz03RcUXu+LCb24zmln8QW6aDjuGl4d4XPVLf2j+FnjelHTP7dvceAFbhA==", "dev": true }, + "node_modules/@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, "node_modules/@types/overlayscrollbars": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz", @@ -7886,6 +8022,108 @@ "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", "dev": true }, + "node_modules/@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-history": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.2.tgz", + "integrity": "sha512-AcfpWo+HkIuvq/H2zYjIMi2jxa2GWfYaTNiFTB2sigjkpWNM93CIlb7Cimy/4vNH8lVPp0GwLBjYIMRX6zOUyA==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "dependencies": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-markdown/-/prosemirror-markdown-1.5.1.tgz", + "integrity": "sha512-AqHCy80J9HUF+9FHveOB9fbKZwOf+1Ds2Vm1pPN6bfZ/Y6vdgXDry/hoz74+K7fQZZ8+f1J4x16llFj3PAohVg==", + "dependencies": { + "@types/markdown-it": "*", + "@types/prosemirror-model": "*" + } + }, + "node_modules/@types/prosemirror-menu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-menu/-/prosemirror-menu-1.0.3.tgz", + "integrity": "sha512-lEFq2kyvKLkhNVyTQb8j7cqhv/u+OppEtCD2GSTzW2UFrfqUix0YzEzzBHizQ7LfiALurpsAO3M/jHW2Zm2/8Q==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-model": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.13.0.tgz", + "integrity": "sha512-EIUr2R38Zh9n1eA8BQ1C3NX/XLV9U44DhNVk8x3Sth2RW+wa7jNA82XHMPOoapsOTfmpnh32xaHBOzREiBqdPQ==", + "dependencies": { + "@types/orderedmap": "*" + } + }, + "node_modules/@types/prosemirror-schema-basic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-basic/-/prosemirror-schema-basic-1.0.2.tgz", + "integrity": "sha512-dzT/6t+dq8/On1be0yarcOIu8wROjhK8QB5wslpLbtTIr5wb0iQv/esJm/KAHcD/PBXR9nSV4TL5AtQmBrcRnw==", + "dependencies": { + "@types/prosemirror-model": "*" + } + }, + "node_modules/@types/prosemirror-state": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.6.tgz", + "integrity": "sha512-tJo0wC+/cQvbrPDVx01Fnng9Fs41bAMVxgJY1KLOyIsUPN0otUN1KdoQurLMmHNHTvIna9ZXxjZD//xJKLYfJw==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-tables": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-tables/-/prosemirror-tables-0.9.1.tgz", + "integrity": "sha512-zoY1qcAC6kG4UjnaQQXuoyYQdDJMQmY9uzRKdyUppP8rWRR5/kXBHOd84CD9ZvrYUBo3uDmS20qQnc3knr2j9A==", + "deprecated": "This is a stub types definition. prosemirror-tables provides its own type definitions, so you do not need this installed.", + "dependencies": { + "prosemirror-tables": "*" + } + }, + "node_modules/@types/prosemirror-transform": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.3.tgz", + "integrity": "sha512-qtnd4jMoBgUAF2Vy2uRCVY4/LN3d069PP9XTIKrfk7mwWPYKonBYv1NsaBGTpK26sOPu0p7eJNZwaiNYmbfIwA==", + "dependencies": { + "@types/prosemirror-model": "*" + } + }, + "node_modules/@types/prosemirror-view": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.17.1.tgz", + "integrity": "sha512-PNiGGc6BffxHQzMR09UUilsBR8xFPDsKiPIXb4K/g56voPIvqq1pqySnWFfSR50Vo4ZL0tss3VBLWiiiKzVahQ==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, "node_modules/@types/qs": { "version": "6.9.6", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", @@ -8907,7 +9145,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -11573,6 +11810,11 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/crelt": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", + "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -17391,6 +17633,14 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "node_modules/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -17684,6 +17934,34 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-it": { + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.6.tgz", + "integrity": "sha512-qv3sVLl4lMT96LLtR7xeRJX11OUFjsaD5oVat2/SNBIb21bJXwal2+SklcRbTwGwqWpWH/HRtYavOoJE+seL8w==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/markdown-table": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", @@ -20029,6 +20307,11 @@ "node": ">= 0.8.0" } }, + "node_modules/orderedmap": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.1.tgz", + "integrity": "sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ==" + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -21267,6 +21550,193 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/prosemirror-commands": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.1.8.tgz", + "integrity": "sha512-EIj/WAlrK2rVugxNxsFG6pI4430RL63ka2QKB9dO7vvStsLO//nq/oMjmd3VXp08+QNrmmLE23utqBUZwbS9Jg==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.5.tgz", + "integrity": "sha512-tNUwcF2lPAkwKBZPZRtbxpwljnODRNZ3eiYloN1DSUqDjMT1nBZm0nejaEMS1TvNQ+3amibUSAiV4hX+jpASFA==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-example-setup": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-example-setup/-/prosemirror-example-setup-1.1.2.tgz", + "integrity": "sha512-MTpIMyqk08jFnzxeRMCinCEMtVSTUtxKgQBGxfCbVe9C6zIOqp9qZZJz5Ojaad1GETySyuj8+OIHHvQsIaaaGQ==", + "dependencies": { + "prosemirror-commands": "^1.0.0", + "prosemirror-dropcursor": "^1.0.0", + "prosemirror-gapcursor": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-inputrules": "^1.0.0", + "prosemirror-keymap": "^1.0.0", + "prosemirror-menu": "^1.0.0", + "prosemirror-schema-list": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.1.5.tgz", + "integrity": "sha512-SjbUZq5pgsBDuV3hu8GqgIpZR5eZvGLM+gPQTqjVVYSMUCfKW3EGXTEYaLHEl1bGduwqNC95O3bZflgtAb4L6w==", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.1.3.tgz", + "integrity": "sha512-zGDotijea+vnfnyyUGyiy1wfOQhf0B/b6zYcCouBV8yo6JmrE9X23M5q7Nf/nATywEZbgRLG70R4DmfSTC+gfg==", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.1.3.tgz", + "integrity": "sha512-ZaHCLyBtvbyIHv0f5p6boQTIJjlD6o2NPZiEaZWT2DA+j591zS29QQEMT4lBqwcLW3qRSf7ZvoKNbf05YrsStw==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.4.tgz", + "integrity": "sha512-Al8cVUOnDFL4gcI5IDlG6xbZ0aOD/i3B17VT+1JbHWDguCgt/lBHVTHUBcKvvbSg6+q/W4Nj1Fu6bwZSca3xjg==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.5.1.tgz", + "integrity": "sha512-QvucPHx+gKOQW1SETKUysrful9VBjKqpCFmPotgLfVZ3BdQEGy/NEIFhaXXo3TcuW316MMnKfA90K7GE5I7z8A==", + "dependencies": { + "markdown-it": "^10.0.0", + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-markdown/node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + }, + "node_modules/prosemirror-markdown/node_modules/linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/prosemirror-markdown/node_modules/markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/prosemirror-menu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.1.4.tgz", + "integrity": "sha512-2ROsji/X9ciDnVSRvSTqFygI34GEdHfQSsK4zBKjPxSEroeiHHcdRMS1ofNIf2zM0Vpp5/YqfpxynElymQkqzg==", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.14.1.tgz", + "integrity": "sha512-vZcbI+24VloFefKZkDnMaEpipL/vSKKPdFiik4KOnTzq3e6AO7+CAOixZ2G/SsfRaYC965XvnOIEbhIQdgki7w==", + "dependencies": { + "orderedmap": "^1.1.0" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.1.2.tgz", + "integrity": "sha512-G4q8WflNsR1Q33QAV4MQO0xWrHLOJ+BQcKswGXMy626wlQj6c/1n1v4eC9ns+h2y1r/fJHZEgSZnsNhm9lbrDw==", + "dependencies": { + "prosemirror-model": "^1.2.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.4.tgz", + "integrity": "sha512-pNTuZflacFOBlxrTcWSdWhjoB8BaucwfJVp/gJNxztOwaN3wQiC65axclXyplf6TKgXD/EkWfS/QAov3/Znadw==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.1.1.tgz", + "integrity": "sha512-LmCz4jrlqQZRsYRDzCRYf/pQ5CUcSOyqZlAj5kv67ZWBH1SVLP2U9WJEvQfimWgeRlIz0y0PQVqO1arRm1+woA==", + "dependencies": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.3.2.tgz", + "integrity": "sha512-/G6d/u9Mf6Bv3H1XR8VxhpjmUO75LYmnvj+s3ZfZpakU1hnQbsvCEybml1B3f2IWUAAQRFkbO1PnsbFhLZsYsw==", + "dependencies": { + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.18.7.tgz", + "integrity": "sha512-pUCxoyuWnbVfJ/ukhQ+7+bfDMArG3wu6hHnnTFi61C7Teb5OILUhkkhEhF2/RsppBFWrkwsNcf8rQm8SSoSKRg==", + "dependencies": { + "prosemirror-model": "^1.1.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -23077,6 +23547,11 @@ "inherits": "^2.0.1" } }, + "node_modules/rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -23991,8 +24466,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "node_modules/sshpk": { "version": "1.16.1", @@ -25422,6 +25896,11 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -25936,6 +26415,18 @@ } } }, + "node_modules/use-prosemirror": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-prosemirror/-/use-prosemirror-1.2.1.tgz", + "integrity": "sha512-PxWgYd1vTgtJaGGyvuAC+VcECchUlI62sK5x59ELzVMBG2Uxjz895XhjChybr05EuunSyKm1ff/5EScTGtMokA==", + "peerDependencies": { + "prosemirror-model": "^1.11.0", + "prosemirror-state": "^1.3.3", + "prosemirror-view": "^1.15.5", + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, "node_modules/util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -26124,6 +26615,11 @@ "browser-process-hrtime": "^1.0.0" } }, + "node_modules/w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", @@ -29056,6 +29552,90 @@ } } }, + "@cucumber/markdown-editor": { + "version": "file:markdown-editor/javascript", + "requires": { + "@babel/core": "7.14.3", + "@storybook/addon-actions": "6.2.9", + "@storybook/addon-links": "6.2.9", + "@storybook/builder-webpack5": "6.2.9", + "@storybook/react": "6.2.9", + "@types/jsdom": "16.2.10", + "@types/mocha": "8.2.2", + "@types/node": "15.3.1", + "@types/prosemirror-commands": "1.0.4", + "@types/prosemirror-history": "1.0.2", + "@types/prosemirror-keymap": "1.0.4", + "@types/prosemirror-markdown": "1.5.1", + "@types/prosemirror-menu": "1.0.3", + "@types/prosemirror-schema-basic": "1.0.2", + "@types/prosemirror-tables": "0.9.1", + "@types/prosemirror-view": "1.17.1", + "@types/react": "17.0.6", + "@types/react-dom": "17.0.5", + "babel-loader": "8.2.2", + "core-js": "3.12.1", + "jsdom": "16.6.0", + "markdown-it": "12.0.6", + "mocha": "8.4.0", + "prosemirror-commands": "1.1.8", + "prosemirror-example-setup": "1.1.2", + "prosemirror-history": "1.1.3", + "prosemirror-keymap": "1.1.4", + "prosemirror-markdown": "1.5.1", + "prosemirror-menu": "1.1.4", + "prosemirror-model": "1.14.1", + "prosemirror-schema-basic": "1.1.2", + "prosemirror-state": "1.3.4", + "prosemirror-tables": "1.1.1", + "prosemirror-view": "1.18.7", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-is": "17.0.2", + "source-map-support": "0.5.19", + "style-loader": "2.0.0", + "ts-node": "10.0.0", + "typescript": "4.2.4", + "use-prosemirror": "1.2.1" + }, + "dependencies": { + "@types/react": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.6.tgz", + "integrity": "sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "core-js": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.1.tgz", + "integrity": "sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==", + "dev": true + }, + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "typescript": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "dev": true + } + } + }, "@cucumber/message-streams": { "version": "file:message-streams/javascript", "requires": { @@ -33653,6 +34233,11 @@ "@types/unist": "*" } }, + "@types/highlight.js": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", + "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==" + }, "@types/html-minifier-terser": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", @@ -33700,6 +34285,21 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/linkify-it": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.1.tgz", + "integrity": "sha512-pQv3Sygwxxh6jYQzXaiyWDAHevJqWtqDUv6t11Sa9CPGiXny66II7Pl6PR8QO5OVysD6HYOkHMeBgIjLnk9SkQ==" + }, + "@types/markdown-it": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.1.tgz", + "integrity": "sha512-mHfT8j/XkPb1uLEfs0/C3se6nd+webC2kcqcy8tgcVr0GDEONv/xaQzAN+aQvkxQXk/jC0Q6mPS+0xhFwRF35g==", + "requires": { + "@types/highlight.js": "^9.7.0", + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, "@types/markdown-to-jsx": { "version": "6.11.3", "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz", @@ -33717,6 +34317,11 @@ "@types/unist": "*" } }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "@types/micromatch": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", @@ -33785,6 +34390,11 @@ "integrity": "sha512-4QQmOF5KlwfxJ5IGXFIudkeLCdMABz03RcUXu+LCb24zmln8QW6aDjuGl4d4XPVLf2j+FnjelHTP7dvceAFbhA==", "dev": true }, + "@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, "@types/overlayscrollbars": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz", @@ -33815,6 +34425,107 @@ "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", "dev": true }, + "@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-history": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.2.tgz", + "integrity": "sha512-AcfpWo+HkIuvq/H2zYjIMi2jxa2GWfYaTNiFTB2sigjkpWNM93CIlb7Cimy/4vNH8lVPp0GwLBjYIMRX6zOUyA==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "requires": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-markdown/-/prosemirror-markdown-1.5.1.tgz", + "integrity": "sha512-AqHCy80J9HUF+9FHveOB9fbKZwOf+1Ds2Vm1pPN6bfZ/Y6vdgXDry/hoz74+K7fQZZ8+f1J4x16llFj3PAohVg==", + "requires": { + "@types/markdown-it": "*", + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-menu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-menu/-/prosemirror-menu-1.0.3.tgz", + "integrity": "sha512-lEFq2kyvKLkhNVyTQb8j7cqhv/u+OppEtCD2GSTzW2UFrfqUix0YzEzzBHizQ7LfiALurpsAO3M/jHW2Zm2/8Q==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-model": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.13.0.tgz", + "integrity": "sha512-EIUr2R38Zh9n1eA8BQ1C3NX/XLV9U44DhNVk8x3Sth2RW+wa7jNA82XHMPOoapsOTfmpnh32xaHBOzREiBqdPQ==", + "requires": { + "@types/orderedmap": "*" + } + }, + "@types/prosemirror-schema-basic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-basic/-/prosemirror-schema-basic-1.0.2.tgz", + "integrity": "sha512-dzT/6t+dq8/On1be0yarcOIu8wROjhK8QB5wslpLbtTIr5wb0iQv/esJm/KAHcD/PBXR9nSV4TL5AtQmBrcRnw==", + "requires": { + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-state": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.6.tgz", + "integrity": "sha512-tJo0wC+/cQvbrPDVx01Fnng9Fs41bAMVxgJY1KLOyIsUPN0otUN1KdoQurLMmHNHTvIna9ZXxjZD//xJKLYfJw==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-tables": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-tables/-/prosemirror-tables-0.9.1.tgz", + "integrity": "sha512-zoY1qcAC6kG4UjnaQQXuoyYQdDJMQmY9uzRKdyUppP8rWRR5/kXBHOd84CD9ZvrYUBo3uDmS20qQnc3knr2j9A==", + "requires": { + "prosemirror-tables": "*" + } + }, + "@types/prosemirror-transform": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.3.tgz", + "integrity": "sha512-qtnd4jMoBgUAF2Vy2uRCVY4/LN3d069PP9XTIKrfk7mwWPYKonBYv1NsaBGTpK26sOPu0p7eJNZwaiNYmbfIwA==", + "requires": { + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-view": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.17.1.tgz", + "integrity": "sha512-PNiGGc6BffxHQzMR09UUilsBR8xFPDsKiPIXb4K/g56voPIvqq1pqySnWFfSR50Vo4ZL0tss3VBLWiiiKzVahQ==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, "@types/qs": { "version": "6.9.6", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", @@ -34675,7 +35386,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -36812,6 +37522,11 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "crelt": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", + "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -41385,6 +42100,14 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", + "requires": { + "uc.micro": "^1.0.1" + } + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -41622,6 +42345,30 @@ "object-visit": "^1.0.0" } }, + "markdown-it": { + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.6.tgz", + "integrity": "sha512-qv3sVLl4lMT96LLtR7xeRJX11OUFjsaD5oVat2/SNBIb21bJXwal2+SklcRbTwGwqWpWH/HRtYavOoJE+seL8w==", + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + } + } + }, "markdown-table": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", @@ -43437,6 +44184,11 @@ "word-wrap": "^1.2.3" } }, + "orderedmap": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.1.tgz", + "integrity": "sha512-3Ux8um0zXbVacKUkcytc0u3HgC0b0bBLT+I60r2J/En72cI0nZffqrA7Xtf2Hqs27j1g82llR5Mhbd0Z1XW4AQ==" + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -44380,6 +45132,192 @@ "xtend": "^4.0.0" } }, + "prosemirror-commands": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.1.8.tgz", + "integrity": "sha512-EIj/WAlrK2rVugxNxsFG6pI4430RL63ka2QKB9dO7vvStsLO//nq/oMjmd3VXp08+QNrmmLE23utqBUZwbS9Jg==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-dropcursor": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.5.tgz", + "integrity": "sha512-tNUwcF2lPAkwKBZPZRtbxpwljnODRNZ3eiYloN1DSUqDjMT1nBZm0nejaEMS1TvNQ+3amibUSAiV4hX+jpASFA==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "prosemirror-example-setup": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-example-setup/-/prosemirror-example-setup-1.1.2.tgz", + "integrity": "sha512-MTpIMyqk08jFnzxeRMCinCEMtVSTUtxKgQBGxfCbVe9C6zIOqp9qZZJz5Ojaad1GETySyuj8+OIHHvQsIaaaGQ==", + "requires": { + "prosemirror-commands": "^1.0.0", + "prosemirror-dropcursor": "^1.0.0", + "prosemirror-gapcursor": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-inputrules": "^1.0.0", + "prosemirror-keymap": "^1.0.0", + "prosemirror-menu": "^1.0.0", + "prosemirror-schema-list": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "prosemirror-gapcursor": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.1.5.tgz", + "integrity": "sha512-SjbUZq5pgsBDuV3hu8GqgIpZR5eZvGLM+gPQTqjVVYSMUCfKW3EGXTEYaLHEl1bGduwqNC95O3bZflgtAb4L6w==", + "requires": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "prosemirror-history": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.1.3.tgz", + "integrity": "sha512-zGDotijea+vnfnyyUGyiy1wfOQhf0B/b6zYcCouBV8yo6JmrE9X23M5q7Nf/nATywEZbgRLG70R4DmfSTC+gfg==", + "requires": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "prosemirror-inputrules": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.1.3.tgz", + "integrity": "sha512-ZaHCLyBtvbyIHv0f5p6boQTIJjlD6o2NPZiEaZWT2DA+j591zS29QQEMT4lBqwcLW3qRSf7ZvoKNbf05YrsStw==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-keymap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.4.tgz", + "integrity": "sha512-Al8cVUOnDFL4gcI5IDlG6xbZ0aOD/i3B17VT+1JbHWDguCgt/lBHVTHUBcKvvbSg6+q/W4Nj1Fu6bwZSca3xjg==", + "requires": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "prosemirror-markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.5.1.tgz", + "integrity": "sha512-QvucPHx+gKOQW1SETKUysrful9VBjKqpCFmPotgLfVZ3BdQEGy/NEIFhaXXo3TcuW316MMnKfA90K7GE5I7z8A==", + "requires": { + "markdown-it": "^10.0.0", + "prosemirror-model": "^1.0.0" + }, + "dependencies": { + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + } + } + }, + "prosemirror-menu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.1.4.tgz", + "integrity": "sha512-2ROsji/X9ciDnVSRvSTqFygI34GEdHfQSsK4zBKjPxSEroeiHHcdRMS1ofNIf2zM0Vpp5/YqfpxynElymQkqzg==", + "requires": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "prosemirror-model": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.14.1.tgz", + "integrity": "sha512-vZcbI+24VloFefKZkDnMaEpipL/vSKKPdFiik4KOnTzq3e6AO7+CAOixZ2G/SsfRaYC965XvnOIEbhIQdgki7w==", + "requires": { + "orderedmap": "^1.1.0" + } + }, + "prosemirror-schema-basic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.1.2.tgz", + "integrity": "sha512-G4q8WflNsR1Q33QAV4MQO0xWrHLOJ+BQcKswGXMy626wlQj6c/1n1v4eC9ns+h2y1r/fJHZEgSZnsNhm9lbrDw==", + "requires": { + "prosemirror-model": "^1.2.0" + } + }, + "prosemirror-schema-list": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.4.tgz", + "integrity": "sha512-pNTuZflacFOBlxrTcWSdWhjoB8BaucwfJVp/gJNxztOwaN3wQiC65axclXyplf6TKgXD/EkWfS/QAov3/Znadw==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-tables": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.1.1.tgz", + "integrity": "sha512-LmCz4jrlqQZRsYRDzCRYf/pQ5CUcSOyqZlAj5kv67ZWBH1SVLP2U9WJEvQfimWgeRlIz0y0PQVqO1arRm1+woA==", + "requires": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" + } + }, + "prosemirror-transform": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.3.2.tgz", + "integrity": "sha512-/G6d/u9Mf6Bv3H1XR8VxhpjmUO75LYmnvj+s3ZfZpakU1hnQbsvCEybml1B3f2IWUAAQRFkbO1PnsbFhLZsYsw==", + "requires": { + "prosemirror-model": "^1.0.0" + } + }, + "prosemirror-view": { + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.18.7.tgz", + "integrity": "sha512-pUCxoyuWnbVfJ/ukhQ+7+bfDMArG3wu6hHnnTFi61C7Teb5OILUhkkhEhF2/RsppBFWrkwsNcf8rQm8SSoSKRg==", + "requires": { + "prosemirror-model": "^1.1.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -45807,6 +46745,11 @@ "inherits": "^2.0.1" } }, + "rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -46549,8 +47492,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.16.1", @@ -47682,6 +48624,11 @@ "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -48063,6 +49010,11 @@ "use-isomorphic-layout-effect": "^1.0.0" } }, + "use-prosemirror": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-prosemirror/-/use-prosemirror-1.2.1.tgz", + "integrity": "sha512-PxWgYd1vTgtJaGGyvuAC+VcECchUlI62sK5x59ELzVMBG2Uxjz895XhjChybr05EuunSyKm1ff/5EScTGtMokA==" + }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -48225,6 +49177,11 @@ "browser-process-hrtime": "^1.0.0" } }, + "w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, "w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", From fd4114d7f8bb905abcd808900e9a73ab05c54ee4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 8 Jun 2021 12:21:21 +0100 Subject: [PATCH 07/25] Less table margin --- .../src/stories/MarkdownEditor.stories.tsx | 21 +++++++++++-------- markdown-editor/javascript/src/styles.css | 6 +++++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx b/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx index 4da2e75f976..6d870325560 100644 --- a/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx +++ b/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx @@ -13,15 +13,18 @@ const Template: Story = ({ content }) => { return } -export const Tables = Template.bind({}) -Tables.args = { - content: `# Welcome -Bla bla +export const DataTables = Template.bind({}) +DataTables.args = { + content: `# Feature: Welcome +Let's use some tables -| COL1 | COL2 | -| ---- | ---- | -| One | Two | -| Un | Deux | -| En | To | +## Scenario: some tables + +* Given the following people + | Name | Age | + | ---- | ---- | + | Jill | 1 | + | Bob | 10 | + | Sally | 100 | `, } diff --git a/markdown-editor/javascript/src/styles.css b/markdown-editor/javascript/src/styles.css index f64bebeffaa..e783a4052fc 100644 --- a/markdown-editor/javascript/src/styles.css +++ b/markdown-editor/javascript/src/styles.css @@ -19,4 +19,8 @@ .ProseMirror th { font-weight: bold; text-align: left; -} \ No newline at end of file +} + +.ProseMirror th p, .ProseMirror td p { + margin: 1px; +} From 77be679209a9a61bd27a6ff4500f70bf6beb53b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 8 Jun 2021 12:45:26 +0100 Subject: [PATCH 08/25] Insert table works --- .../javascript/src/MarkdownEditor.tsx | 64 +++++++++---------- .../javascript/src/cucumberMarkdown.ts | 22 ++++--- markdown-editor/javascript/test/tableTest.ts | 5 +- 3 files changed, 44 insertions(+), 47 deletions(-) diff --git a/markdown-editor/javascript/src/MarkdownEditor.tsx b/markdown-editor/javascript/src/MarkdownEditor.tsx index 325a9b5fcb5..417249756be 100644 --- a/markdown-editor/javascript/src/MarkdownEditor.tsx +++ b/markdown-editor/javascript/src/MarkdownEditor.tsx @@ -30,7 +30,7 @@ import { keymap } from 'prosemirror-keymap' import { Dropdown, MenuItem } from 'prosemirror-menu' import { cucumberMarkdownParser, schema } from './cucumberMarkdown' import { EditorState, TextSelection, Transaction } from 'prosemirror-state' -import { Fragment, Node } from 'prosemirror-model' +import { Fragment, Node, Schema } from 'prosemirror-model' const menu = buildMenuItems(schema).fullMenu @@ -58,48 +58,44 @@ const tableMenu = [ // TODO: Adapt one of these: // https://gitlab.coko.foundation/wax/wax-prosemirror/-/blob/master/wax-prosemirror-components/src/ui/tables/InsertTableTool.js // https://github.com/chanzuckerberg/czi-prosemirror/blob/master/src/ui/TableGridSizeEditor.js - // https://discuss.prosemirror.net/t/how-co-create-table/3510/3 -function insertTable() { - return ( - state: EditorState, - dispatch: (tr: Transaction) => void - ): boolean => { - const offset: number = state.tr.selection.anchor + 1; - const transaction: Transaction = state.tr; - const cell: Node = state.schema.nodes.table_cell.createAndFill(); + +function insertTable( + state: EditorState, + dispatch?: (tr: Transaction) => void +): boolean { + if (dispatch) { + const offset: number = state.tr.selection.anchor + 1 + const header: Node = state.schema.nodes.table_header.createAndFill() + const cell: Node = state.schema.nodes.table_cell.createAndFill() const node: Node = state.schema.nodes.table.create( null, Fragment.fromArray([ - state.schema.nodes.table_row.create( - null, - Fragment.fromArray([cell, cell, cell]) - ), - state.schema.nodes.table_row.create( - null, - Fragment.fromArray([cell, cell, cell]) - ) + state.schema.nodes.table_row.create(null, Fragment.fromArray([header, header, header])), + state.schema.nodes.table_row.create(null, Fragment.fromArray([cell, cell, cell])), + state.schema.nodes.table_row.create(null, Fragment.fromArray([cell, cell, cell])), ]) - ); + ) - if (dispatch) { - dispatch( - transaction - .replaceSelectionWith(node) - .scrollIntoView() - .setSelection( - TextSelection.near( - transaction.doc.resolve(offset) - ) - ) - ); - } + const transaction: Transaction = state.tr + dispatch( + transaction + .replaceSelectionWith(node) + .scrollIntoView() + .setSelection(TextSelection.near(transaction.doc.resolve(offset))) + ) + } - return true; - }; + return true } + menu.splice(2, 0, [ - new MenuItem({ label: 'Add table', title: 'Insert table', class: 'ProseMirror-icon', run: insertTable }), + new MenuItem({ + label: 'Add table', + title: 'Insert table', + class: 'ProseMirror-icon', + run: insertTable, + }), new Dropdown(tableMenu, { label: 'Table' }), ]) diff --git a/markdown-editor/javascript/src/cucumberMarkdown.ts b/markdown-editor/javascript/src/cucumberMarkdown.ts index 42593087d0b..b6b54433d85 100644 --- a/markdown-editor/javascript/src/cucumberMarkdown.ts +++ b/markdown-editor/javascript/src/cucumberMarkdown.ts @@ -22,7 +22,7 @@ export const schema = new Schema({ default: null, getFromDOM(dom) { // @ts-ignore - return (dom.style && dom.style.backgroundColor) || null; + return (dom.style && dom.style.backgroundColor) || null }, setDOMAttr(value, attrs) { if (value) attrs.style = (attrs.style || '') + `background-color: ${value};` @@ -34,14 +34,16 @@ export const schema = new Schema({ marks: markdownSchema.spec.marks, }) -// TODO: Simplify when/if this is released: https://github.com/ProseMirror/prosemirror-markdown/pull/54 -const tokens = {...defaultMarkdownParser.tokens, ...{ - table: { block: 'table' }, - // THEAD and TBODY don't exist in the prosemirror-tables schema - thead: { ignore: true }, - tbody: { ignore: true }, - tr: { block: 'table_row' }, -}} +const tokens = { + ...defaultMarkdownParser.tokens, + ...{ + table: { block: 'table' }, + // THEAD and TBODY don't exist in the prosemirror-tables schema + thead: { ignore: true }, + tbody: { ignore: true }, + tr: { block: 'table_row' }, + }, +} export const cucumberMarkdownParser = new MarkdownParser(schema, new MarkdownIt(), tokens) // @ts-ignore @@ -82,7 +84,7 @@ cucumberMarkdownSerializer.nodes['table'] = (state, tableNode) => { cucumberMarkdownSerializer.nodes['table_row'] = (state, node) => { state.renderContent(node) state.text('|\n') - if(rowIndex === 0) { + if (rowIndex === 0) { const json = node.toJSON() json.content.forEach((tableHeader: Node) => { tableHeader.content.forEach((paragraph: Node) => { diff --git a/markdown-editor/javascript/test/tableTest.ts b/markdown-editor/javascript/test/tableTest.ts index 81b7a4832d5..48817569a32 100644 --- a/markdown-editor/javascript/test/tableTest.ts +++ b/markdown-editor/javascript/test/tableTest.ts @@ -1,7 +1,7 @@ import assert from 'assert' import { JSDOM } from 'jsdom' -import {cucumberMarkdownParser, cucumberMarkdownSerializer, schema} from '../src/cucumberMarkdown' -import {DOMParser} from 'prosemirror-model' +import { cucumberMarkdownParser, cucumberMarkdownSerializer, schema } from '../src/cucumberMarkdown' +import { DOMParser } from 'prosemirror-model' describe('fromMarkdown', () => { it('roundtrips markdown table', () => { @@ -39,6 +39,5 @@ describe('fromMarkdown', () => { | En | To | ` assert.strictEqual(markdown, expectedMarkdown) - }) }) From 94407e9c0b4ec2c62b58498b2a455bbe6777fd25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Thu, 17 Jun 2021 15:00:20 +0100 Subject: [PATCH 09/25] console.log the markdown --- markdown-editor/javascript/src/MarkdownEditor.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/markdown-editor/javascript/src/MarkdownEditor.tsx b/markdown-editor/javascript/src/MarkdownEditor.tsx index 417249756be..9fa823b524c 100644 --- a/markdown-editor/javascript/src/MarkdownEditor.tsx +++ b/markdown-editor/javascript/src/MarkdownEditor.tsx @@ -28,7 +28,7 @@ import { } from 'prosemirror-tables' import { keymap } from 'prosemirror-keymap' import { Dropdown, MenuItem } from 'prosemirror-menu' -import { cucumberMarkdownParser, schema } from './cucumberMarkdown' +import { cucumberMarkdownParser, schema, cucumberMarkdownSerializer } from './cucumberMarkdown' import { EditorState, TextSelection, Transaction } from 'prosemirror-state' import { Fragment, Node, Schema } from 'prosemirror-model' @@ -111,7 +111,12 @@ const MarkdownEditor: React.FunctionComponent<{ content: string }> = ({ content }), ].concat(exampleSetup({ schema, menuContent: menu })), }) - return setState(newState)} /> + return { + const markdown = cucumberMarkdownSerializer.serialize(newState.doc) + console.log('---------') + console.log(markdown) + setState(newState) + }} /> } export default MarkdownEditor From e600325903b3ab694856d8e82d745bcc5f44d9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Thu, 17 Jun 2021 15:09:46 +0100 Subject: [PATCH 10/25] Add screenshot --- markdown-editor/javascript/README.md | 1 + .../javascript/images/markdown-editor.png | Bin 0 -> 286425 bytes 2 files changed, 1 insertion(+) create mode 100644 markdown-editor/javascript/images/markdown-editor.png diff --git a/markdown-editor/javascript/README.md b/markdown-editor/javascript/README.md index 49e1eeeb3bf..a73dd3d0946 100644 --- a/markdown-editor/javascript/README.md +++ b/markdown-editor/javascript/README.md @@ -10,3 +10,4 @@ The editor is based on [ProseMirror](https://prosemirror.net/) ## Screenshot +![Markdown Editor](images/markdown-editor.png) diff --git a/markdown-editor/javascript/images/markdown-editor.png b/markdown-editor/javascript/images/markdown-editor.png new file mode 100644 index 0000000000000000000000000000000000000000..8633341097ad1d3b667a9db310ff08b8eeeff384 GIT binary patch literal 286425 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%0A@Xb%sM_6IL8hDJun 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

I#f$-Z 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 Ks;GJ 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�X} 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 deni(qc+cHOS~KR_eyp+$)A2{{w@5f>;0m literal 0 HcmV?d00001 From c99b4c444a3c502e87e246d24f8ef77073210c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Thu, 17 Jun 2021 22:42:07 +0100 Subject: [PATCH 11/25] run rsync --- markdown-editor/javascript/.github/ISSUE_TEMPLATE.md | 5 +++++ markdown-editor/javascript/.github/PULL_REQUEST_TEMPLATE.md | 5 +++++ markdown-editor/javascript/.mocharc.json | 2 +- markdown-editor/javascript/default.mk | 2 +- markdown-editor/javascript/package.json | 1 - 5 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 markdown-editor/javascript/.github/ISSUE_TEMPLATE.md create mode 100644 markdown-editor/javascript/.github/PULL_REQUEST_TEMPLATE.md diff --git a/markdown-editor/javascript/.github/ISSUE_TEMPLATE.md b/markdown-editor/javascript/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000000..fac96198160 --- /dev/null +++ b/markdown-editor/javascript/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,5 @@ +PLEASE DO NOT CREATE ISSUES IN THIS REPO. +THIS REPO IS A READ-ONLY MIRROR. + +Create your issue in the Cucumber monorepo instead: +https://github.com/cucumber/cucumber/issues diff --git a/markdown-editor/javascript/.github/PULL_REQUEST_TEMPLATE.md b/markdown-editor/javascript/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..2c0c878d976 --- /dev/null +++ b/markdown-editor/javascript/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,5 @@ +PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. +THIS REPO IS A READ-ONLY MIRROR. + +Create your pull request in the Cucumber monorepo instead: +https://github.com/cucumber/cucumber/pulls diff --git a/markdown-editor/javascript/.mocharc.json b/markdown-editor/javascript/.mocharc.json index b0833b9c329..d5055eb10d0 100644 --- a/markdown-editor/javascript/.mocharc.json +++ b/markdown-editor/javascript/.mocharc.json @@ -1,5 +1,5 @@ { - "require": ["ts-node/register", "source-map-support/register"], + "require": ["tsconfig-paths/register", "ts-node/register", "source-map-support/register"], "extension": ["ts", "tsx"], "recursive": true, "timeout": 10000 diff --git a/markdown-editor/javascript/default.mk b/markdown-editor/javascript/default.mk index 4d01f082b4d..d3482d63797 100644 --- a/markdown-editor/javascript/default.mk +++ b/markdown-editor/javascript/default.mk @@ -31,7 +31,7 @@ pre-release: clean update-version update-dependencies default .PHONY: pre-release update-dependencies: - ../../node_modules/.bin/npm-check-updates --upgrade + ../../node_modules/.bin/npm-check-updates --upgrade --reject hast-util-sanitize .PHONY: update-dependencies update-version: diff --git a/markdown-editor/javascript/package.json b/markdown-editor/javascript/package.json index 8ace7e638ba..10c0be72200 100644 --- a/markdown-editor/javascript/package.json +++ b/markdown-editor/javascript/package.json @@ -22,7 +22,6 @@ "@types/prosemirror-markdown": "1.5.1", "@types/prosemirror-menu": "1.0.3", "@types/prosemirror-schema-basic": "1.0.2", - "@types/prosemirror-tables": "0.9.1", "@types/prosemirror-view": "1.17.1", "markdown-it": "12.0.6", "prosemirror-commands": "1.1.8", From 404dd82bee2ce90e9a5a8ef54f5a123d79771bba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Fri, 18 Jun 2021 00:08:40 +0100 Subject: [PATCH 12/25] Added a MarkdownSimpleCodeEditor to storybook for rich<->text editing --- markdown-editor/javascript/package.json | 2 + .../src/CucumberMarkdownProseMirror.tsx | 34 +++++++++++++++ .../src/MarkdownSimpleCodeEditor.tsx | 39 +++++++++++++++++ markdown-editor/javascript/src/index.ts | 4 +- markdown-editor/javascript/src/makeConfig.ts | 9 ++++ .../src/{MarkdownEditor.tsx => plugins.ts} | 43 ++++++------------- .../CucumberMarkdownProseMirror.stories.tsx | 43 +++++++++++++++++++ .../src/stories/MarkdownEditor.stories.tsx | 30 ------------- package-lock.json | 39 +++++++++-------- 9 files changed, 161 insertions(+), 82 deletions(-) create mode 100644 markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx create mode 100644 markdown-editor/javascript/src/MarkdownSimpleCodeEditor.tsx create mode 100644 markdown-editor/javascript/src/makeConfig.ts rename markdown-editor/javascript/src/{MarkdownEditor.tsx => plugins.ts} (73%) create mode 100644 markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx delete mode 100644 markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx diff --git a/markdown-editor/javascript/package.json b/markdown-editor/javascript/package.json index 10c0be72200..cbdc58bd83a 100644 --- a/markdown-editor/javascript/package.json +++ b/markdown-editor/javascript/package.json @@ -56,9 +56,11 @@ "core-js": "3.12.1", "jsdom": "16.6.0", "mocha": "8.4.0", + "prismjs": "1.23.0", "react": "17.0.2", "react-dom": "17.0.2", "react-is": "17.0.2", + "react-simple-code-editor": "0.11.0", "source-map-support": "0.5.19", "style-loader": "2.0.0", "ts-node": "10.0.0", diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx new file mode 100644 index 00000000000..0bcd46fb703 --- /dev/null +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -0,0 +1,34 @@ +import 'prosemirror-view/style/prosemirror.css' +import 'prosemirror-example-setup/style/style.css' +import 'prosemirror-menu/style/menu.css' +import 'prosemirror-tables/style/tables.css' +import './styles.css' + +import React, { Dispatch, SetStateAction } from 'react' +import { ProseMirror } from 'use-prosemirror' +import { cucumberMarkdownSerializer } from './cucumberMarkdown' +import { EditorState } from 'prosemirror-state' + +type Props = { + state: EditorState + setState: Dispatch> + setMarkdown: Dispatch> +} + +const CucumberMarkdownProseMirror: React.FunctionComponent = ({ + setMarkdown, + state, + setState, +}) => { + return ( + { + setMarkdown(cucumberMarkdownSerializer.serialize(newState.doc)) + setState(newState) + }} + /> + ) +} + +export default CucumberMarkdownProseMirror diff --git a/markdown-editor/javascript/src/MarkdownSimpleCodeEditor.tsx b/markdown-editor/javascript/src/MarkdownSimpleCodeEditor.tsx new file mode 100644 index 00000000000..a1c32bf5c59 --- /dev/null +++ b/markdown-editor/javascript/src/MarkdownSimpleCodeEditor.tsx @@ -0,0 +1,39 @@ +import React, { Dispatch, SetStateAction } from 'react' +import Editor from 'react-simple-code-editor' +// @ts-ignore +import { highlight, languages } from 'prismjs/components/prism-core' +import 'prismjs/components/prism-markup' +import 'prismjs/components/prism-markdown' +import 'prismjs/themes/prism.css' + +import { EditorState } from 'prosemirror-state' +import makeConfig from './makeConfig' + +type Props = { + markdown: string + setMarkdown: Dispatch> + setState: Dispatch> +} + +const MarkdownSimpleCodeEditor: React.FunctionComponent = ({ + markdown, + setMarkdown, + setState, +}) => ( + { + const state = EditorState.create(makeConfig(markdown)) + setState(state) + setMarkdown(markdown) + }} + highlight={(markdown) => highlight(markdown, languages.markdown)} + padding={10} + style={{ + fontFamily: '"Fira code", "Fira Mono", monospace', + fontSize: 12, + }} + /> +) + +export default MarkdownSimpleCodeEditor diff --git a/markdown-editor/javascript/src/index.ts b/markdown-editor/javascript/src/index.ts index 6d7245f37aa..f4416ad68ee 100644 --- a/markdown-editor/javascript/src/index.ts +++ b/markdown-editor/javascript/src/index.ts @@ -1,3 +1,3 @@ -import MarkdownEditor from './MarkdownEditor' +import CucumberMarkdownProseMirror from './CucumberMarkdownProseMirror' -export { MarkdownEditor } +export { CucumberMarkdownProseMirror } diff --git a/markdown-editor/javascript/src/makeConfig.ts b/markdown-editor/javascript/src/makeConfig.ts new file mode 100644 index 00000000000..f003accb009 --- /dev/null +++ b/markdown-editor/javascript/src/makeConfig.ts @@ -0,0 +1,9 @@ +import { cucumberMarkdownParser } from './cucumberMarkdown' +import plugins from './plugins' + +export default function makeConfig(markdown: string) { + return { + doc: cucumberMarkdownParser.parse(markdown), + plugins, + } +} diff --git a/markdown-editor/javascript/src/MarkdownEditor.tsx b/markdown-editor/javascript/src/plugins.ts similarity index 73% rename from markdown-editor/javascript/src/MarkdownEditor.tsx rename to markdown-editor/javascript/src/plugins.ts index 9fa823b524c..aa6ec44da0a 100644 --- a/markdown-editor/javascript/src/MarkdownEditor.tsx +++ b/markdown-editor/javascript/src/plugins.ts @@ -1,13 +1,3 @@ -import 'prosemirror-view/style/prosemirror.css' -import 'prosemirror-example-setup/style/style.css' -import 'prosemirror-menu/style/menu.css' -import 'prosemirror-tables/style/tables.css' -import './styles.css' - -import React from 'react' -import { ProseMirror, useProseMirror } from 'use-prosemirror' -// @ts-ignore -import { buildMenuItems, exampleSetup } from 'prosemirror-example-setup' import { addColumnAfter, addColumnBefore, @@ -28,9 +18,11 @@ import { } from 'prosemirror-tables' import { keymap } from 'prosemirror-keymap' import { Dropdown, MenuItem } from 'prosemirror-menu' -import { cucumberMarkdownParser, schema, cucumberMarkdownSerializer } from './cucumberMarkdown' +import { schema } from './cucumberMarkdown' import { EditorState, TextSelection, Transaction } from 'prosemirror-state' import { Fragment, Node, Schema } from 'prosemirror-model' +// @ts-ignore +import { buildMenuItems, exampleSetup } from 'prosemirror-example-setup' const menu = buildMenuItems(schema).fullMenu @@ -99,24 +91,13 @@ menu.splice(2, 0, [ new Dropdown(tableMenu, { label: 'Table' }), ]) -const MarkdownEditor: React.FunctionComponent<{ content: string }> = ({ content }) => { - const [state, setState] = useProseMirror({ - doc: cucumberMarkdownParser.parse(content), - plugins: [ - columnResizing({}), - tableEditing(), - keymap({ - Tab: goToNextCell(1), - 'Shift-Tab': goToNextCell(-1), - }), - ].concat(exampleSetup({ schema, menuContent: menu })), - }) - return { - const markdown = cucumberMarkdownSerializer.serialize(newState.doc) - console.log('---------') - console.log(markdown) - setState(newState) - }} /> -} +const plugins = [ + columnResizing({}), + tableEditing(), + keymap({ + Tab: goToNextCell(1), + 'Shift-Tab': goToNextCell(-1), + }), +].concat(exampleSetup({ schema, menuContent: menu })) -export default MarkdownEditor +export default plugins diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx new file mode 100644 index 00000000000..353a76dc53b --- /dev/null +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -0,0 +1,43 @@ +import React, { useState } from 'react' +import { Meta, Story } from '@storybook/react' +import CucumberMarkdownProseMirror from '../CucumberMarkdownProseMirror' +import { useProseMirror } from 'use-prosemirror' +import makeConfig from '../makeConfig' +import MarkdownSimpleCodeEditor from '../MarkdownSimpleCodeEditor' + +export default { + title: 'MarkdownEditor', + component: CucumberMarkdownProseMirror, +} as Meta + +type TemplateArgs = { initialMarkdown: string } + +const Template: Story = ({ initialMarkdown }) => { + const [markdown, setMarkdown] = useState(initialMarkdown) + const [state, setState] = useProseMirror(makeConfig(markdown)) + + return ( +

+ ) +} + +export const DataTables = Template.bind({}) +DataTables.args = { + initialMarkdown: `# Feature: Welcome + +Let's use some tables + +## Scenario: some tables + +* Given the following people + + | Name | Age | + | ----- | ---- | + | Jill | 1 | + | Bob | 10 | + | Sally | 100 | +`, +} diff --git a/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx b/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx deleted file mode 100644 index 6d870325560..00000000000 --- a/markdown-editor/javascript/src/stories/MarkdownEditor.stories.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import { Meta, Story } from '@storybook/react' -import MarkdownEditor from '../MarkdownEditor' - -export default { - title: 'MarkdownEditor', - component: MarkdownEditor, -} as Meta - -type TemplateArgs = { content: string } - -const Template: Story = ({ content }) => { - return -} - -export const DataTables = Template.bind({}) -DataTables.args = { - content: `# Feature: Welcome -Let's use some tables - -## Scenario: some tables - -* Given the following people - | Name | Age | - | ---- | ---- | - | Jill | 1 | - | Bob | 10 | - | Sally | 100 | -`, -} diff --git a/package-lock.json b/package-lock.json index 9ce0288ea8c..55ea54926f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -339,7 +339,6 @@ "@types/prosemirror-markdown": "1.5.1", "@types/prosemirror-menu": "1.0.3", "@types/prosemirror-schema-basic": "1.0.2", - "@types/prosemirror-tables": "0.9.1", "@types/prosemirror-view": "1.17.1", "markdown-it": "12.0.6", "prosemirror-commands": "1.1.8", @@ -370,9 +369,11 @@ "core-js": "3.12.1", "jsdom": "16.6.0", "mocha": "8.4.0", + "prismjs": "1.23.0", "react": "17.0.2", "react-dom": "17.0.2", "react-is": "17.0.2", + "react-simple-code-editor": "0.11.0", "source-map-support": "0.5.19", "style-loader": "2.0.0", "ts-node": "10.0.0", @@ -8671,15 +8672,6 @@ "@types/prosemirror-view": "*" } }, - "node_modules/@types/prosemirror-tables": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/prosemirror-tables/-/prosemirror-tables-0.9.1.tgz", - "integrity": "sha512-zoY1qcAC6kG4UjnaQQXuoyYQdDJMQmY9uzRKdyUppP8rWRR5/kXBHOd84CD9ZvrYUBo3uDmS20qQnc3knr2j9A==", - "deprecated": "This is a stub types definition. prosemirror-tables provides its own type definitions, so you do not need this installed.", - "dependencies": { - "prosemirror-tables": "*" - } - }, "node_modules/@types/prosemirror-transform": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.3.tgz", @@ -23916,6 +23908,16 @@ "node": ">=0.10.0" } }, + "node_modules/react-simple-code-editor": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.11.0.tgz", + "integrity": "sha512-xGfX7wAzspl113ocfKQAR8lWPhavGWHL3xSzNLeseDRHysT+jzRBi/ExdUqevSMos+7ZtdfeuBOXtgk9HTwsrw==", + "dev": true, + "peerDependencies": { + "react": "^16.0.0", + "react-dom": "^16.0.0" + } + }, "node_modules/react-sizeme": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.1.tgz", @@ -30701,7 +30703,6 @@ "@types/prosemirror-markdown": "1.5.1", "@types/prosemirror-menu": "1.0.3", "@types/prosemirror-schema-basic": "1.0.2", - "@types/prosemirror-tables": "0.9.1", "@types/prosemirror-view": "1.17.1", "@types/react": "17.0.6", "@types/react-dom": "17.0.5", @@ -30710,6 +30711,7 @@ "jsdom": "16.6.0", "markdown-it": "12.0.6", "mocha": "8.4.0", + "prismjs": "1.23.0", "prosemirror-commands": "1.1.8", "prosemirror-example-setup": "1.1.2", "prosemirror-history": "1.1.3", @@ -30724,6 +30726,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "react-is": "17.0.2", + "react-simple-code-editor": "0.11.0", "source-map-support": "0.5.19", "style-loader": "2.0.0", "ts-node": "10.0.0", @@ -35875,14 +35878,6 @@ "@types/prosemirror-view": "*" } }, - "@types/prosemirror-tables": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/prosemirror-tables/-/prosemirror-tables-0.9.1.tgz", - "integrity": "sha512-zoY1qcAC6kG4UjnaQQXuoyYQdDJMQmY9uzRKdyUppP8rWRR5/kXBHOd84CD9ZvrYUBo3uDmS20qQnc3knr2j9A==", - "requires": { - "prosemirror-tables": "*" - } - }, "@types/prosemirror-transform": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.3.tgz", @@ -47925,6 +47920,12 @@ "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", "dev": true }, + "react-simple-code-editor": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.11.0.tgz", + "integrity": "sha512-xGfX7wAzspl113ocfKQAR8lWPhavGWHL3xSzNLeseDRHysT+jzRBi/ExdUqevSMos+7ZtdfeuBOXtgk9HTwsrw==", + "dev": true + }, "react-sizeme": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.1.tgz", From 64c4f07d475261576ea9f98702ccbe4782df8a49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Fri, 18 Jun 2021 22:41:36 +0100 Subject: [PATCH 13/25] Fix table insertion and serialization --- .../javascript/src/createTableNode.ts | 27 ++++++ .../javascript/src/cucumberMarkdown.ts | 44 +++------ markdown-editor/javascript/src/plugins.ts | 35 +++----- markdown-editor/javascript/src/prettyFork.ts | 90 +++++++++++++++++++ .../CucumberMarkdownProseMirror.stories.tsx | 15 ++-- .../javascript/test/createTableNode.test.ts | 20 +++++ ...ableTest.ts => tableSerialization.test.ts} | 50 ++++++----- 7 files changed, 196 insertions(+), 85 deletions(-) create mode 100644 markdown-editor/javascript/src/createTableNode.ts create mode 100644 markdown-editor/javascript/src/prettyFork.ts create mode 100644 markdown-editor/javascript/test/createTableNode.test.ts rename markdown-editor/javascript/test/{tableTest.ts => tableSerialization.test.ts} (62%) diff --git a/markdown-editor/javascript/src/createTableNode.ts b/markdown-editor/javascript/src/createTableNode.ts new file mode 100644 index 00000000000..0699d8ffea1 --- /dev/null +++ b/markdown-editor/javascript/src/createTableNode.ts @@ -0,0 +1,27 @@ +import {Fragment, Schema, Node } from "prosemirror-model"; +import { EditorState } from "prosemirror-state"; + +export default function createTableNode(state: EditorState): Node { + const tableHeader: Node = state.schema.nodes.table_header.create( + null, + state.schema.nodes.paragraph.create( + null, + state.schema.text('h') + ) + ) + const tableCell: Node = state.schema.nodes.table_cell.create( + null, + state.schema.nodes.paragraph.create( + null, + state.schema.text('c') + ) + ) + return state.schema.nodes.table.create( + null, + Fragment.fromArray([ + state.schema.nodes.table_row.create(null, Fragment.fromArray([tableHeader, tableHeader, tableHeader])), + state.schema.nodes.table_row.create(null, Fragment.fromArray([tableCell, tableCell, tableCell])), + state.schema.nodes.table_row.create(null, Fragment.fromArray([tableCell, tableCell, tableCell])), + ]) + ); +} diff --git a/markdown-editor/javascript/src/cucumberMarkdown.ts b/markdown-editor/javascript/src/cucumberMarkdown.ts index b6b54433d85..ee32a20111d 100644 --- a/markdown-editor/javascript/src/cucumberMarkdown.ts +++ b/markdown-editor/javascript/src/cucumberMarkdown.ts @@ -5,9 +5,9 @@ import { MarkdownParser, schema as markdownSchema, } from 'prosemirror-markdown' -import { Schema } from 'prosemirror-model' -import { tableNodes } from 'prosemirror-tables' -import { Node } from 'prosemirror-model' +import {Schema} from 'prosemirror-model' +import {tableNodes} from 'prosemirror-tables' +import {prettyTable, Table} from "./prettyFork"; export const schema = new Schema({ // @ts-ignore @@ -75,36 +75,12 @@ cucumberMarkdownParser.tokenHandlers['td_close'] = function (state) { } export const cucumberMarkdownSerializer = defaultMarkdownSerializer - -let rowIndex: number -cucumberMarkdownSerializer.nodes['table'] = (state, tableNode) => { - rowIndex = 0 - state.renderContent(tableNode) -} -cucumberMarkdownSerializer.nodes['table_row'] = (state, node) => { - state.renderContent(node) - state.text('|\n') - if (rowIndex === 0) { - const json = node.toJSON() - json.content.forEach((tableHeader: Node) => { - tableHeader.content.forEach((paragraph: Node) => { - // @ts-ignore - paragraph.content[0].text = '----' - }) +cucumberMarkdownSerializer.nodes['table'] = (state, node) => { + const table: Table = node.toJSON().content.map((row: any) => { + return row.content.map((row: any) => { + return row.content[0].content[0].text }) - const separatorNode = Node.fromJSON(schema, json) - state.renderContent(separatorNode) - state.text('|\n') - } - rowIndex++ -} -cucumberMarkdownSerializer.nodes['table_header'] = (state, node) => { - state.text('| ') - node.forEach((childNode) => state.renderContent(childNode)) - state.text(' ') -} -cucumberMarkdownSerializer.nodes['table_cell'] = (state, node) => { - state.text('| ') - node.forEach((childNode) => state.renderContent(childNode)) - state.text(' ') + }) + const markdownTable = prettyTable(table, 0, 'markdown') + state.text(markdownTable) } diff --git a/markdown-editor/javascript/src/plugins.ts b/markdown-editor/javascript/src/plugins.ts index aa6ec44da0a..a78412f7656 100644 --- a/markdown-editor/javascript/src/plugins.ts +++ b/markdown-editor/javascript/src/plugins.ts @@ -16,18 +16,19 @@ import { toggleHeaderColumn, toggleHeaderRow, } from 'prosemirror-tables' -import { keymap } from 'prosemirror-keymap' -import { Dropdown, MenuItem } from 'prosemirror-menu' -import { schema } from './cucumberMarkdown' -import { EditorState, TextSelection, Transaction } from 'prosemirror-state' -import { Fragment, Node, Schema } from 'prosemirror-model' +import {keymap} from 'prosemirror-keymap' +import {Dropdown, MenuItem} from 'prosemirror-menu' +import {schema} from './cucumberMarkdown' +import {EditorState, TextSelection, Transaction} from 'prosemirror-state' +import {Schema} from 'prosemirror-model' // @ts-ignore -import { buildMenuItems, exampleSetup } from 'prosemirror-example-setup' +import {buildMenuItems, exampleSetup} from 'prosemirror-example-setup' +import createTableNode from "./createTableNode"; const menu = buildMenuItems(schema).fullMenu function item(label: string, cmd: any) { - return new MenuItem({ label, select: cmd, run: cmd }) + return new MenuItem({label, select: cmd, run: cmd}) } const tableMenu = [ @@ -51,28 +52,16 @@ const tableMenu = [ // https://gitlab.coko.foundation/wax/wax-prosemirror/-/blob/master/wax-prosemirror-components/src/ui/tables/InsertTableTool.js // https://github.com/chanzuckerberg/czi-prosemirror/blob/master/src/ui/TableGridSizeEditor.js // https://discuss.prosemirror.net/t/how-co-create-table/3510/3 - function insertTable( state: EditorState, dispatch?: (tr: Transaction) => void ): boolean { if (dispatch) { - const offset: number = state.tr.selection.anchor + 1 - const header: Node = state.schema.nodes.table_header.createAndFill() - const cell: Node = state.schema.nodes.table_cell.createAndFill() - const node: Node = state.schema.nodes.table.create( - null, - Fragment.fromArray([ - state.schema.nodes.table_row.create(null, Fragment.fromArray([header, header, header])), - state.schema.nodes.table_row.create(null, Fragment.fromArray([cell, cell, cell])), - state.schema.nodes.table_row.create(null, Fragment.fromArray([cell, cell, cell])), - ]) - ) - const transaction: Transaction = state.tr + const offset: number = state.tr.selection.anchor + 1 dispatch( transaction - .replaceSelectionWith(node) + .replaceSelectionWith(createTableNode(state)) .scrollIntoView() .setSelection(TextSelection.near(transaction.doc.resolve(offset))) ) @@ -88,7 +77,7 @@ menu.splice(2, 0, [ class: 'ProseMirror-icon', run: insertTable, }), - new Dropdown(tableMenu, { label: 'Table' }), + new Dropdown(tableMenu, {label: 'Table'}), ]) const plugins = [ @@ -98,6 +87,6 @@ const plugins = [ Tab: goToNextCell(1), 'Shift-Tab': goToNextCell(-1), }), -].concat(exampleSetup({ schema, menuContent: menu })) +].concat(exampleSetup({schema, menuContent: menu})) export default plugins diff --git a/markdown-editor/javascript/src/prettyFork.ts b/markdown-editor/javascript/src/prettyFork.ts new file mode 100644 index 00000000000..9fbb28edcf6 --- /dev/null +++ b/markdown-editor/javascript/src/prettyFork.ts @@ -0,0 +1,90 @@ +// Fork of https://github.com/cucumber/common/pull/1555/files +// This will be added back to the code in that PR + +export type Syntax = 'markdown' | 'gherkin' + +export type Table = readonly Row[] +type Row = readonly Cell[] +type Cell = string +type Widths = readonly number[] + +export function computeCellWidths(tableRows: Table): Widths { + const widths: number[] = new Array(tableRows[0].length).fill(0) + tableRows.forEach((tableRow) => { + tableRow.forEach((tableCell, j) => { + widths[j] = Math.max(widths[j], escapeCell(tableCell).length) + }) + }) + return widths +} + +export function markdownSeparatorRow(row: Row, widths: Widths): Row { + return row.map((cell, j) => ( + new Array(widths[j] + 1).join('-')) + ) +} + +export function prettyTable( + table: Table, + level: number, + syntax: Syntax +) { + const widths = computeCellWidths(table) + + let n = 0 + let s = '' + for (const row of table) { + s += prettyTableRow(row, level, widths, syntax) + if (n === 0 && syntax === 'markdown') { + const separatorRow = markdownSeparatorRow(row, widths) + s += prettyTableRow(separatorRow, level, widths, syntax) + } + n++ + } + return s +} + +export function prettyTableRow( + row: Row, + level: number, + widths: Widths, + syntax: Syntax +): string { + return `${spaces(level)}| ${row + .map((cell, j) => { + const escapedCellValue = escapeCell(cell) + const spaceCount = widths[j] - escapedCellValue.length + const spaces = new Array(spaceCount + 1).join(' ') + return isNumeric(escapedCellValue) ? spaces + escapedCellValue : escapedCellValue + spaces + }) + .join(' | ')} |\n` +} + +export function escapeCell(s: string) { + let e = '' + const characters = s.split('') + for (const c of characters) { + switch (c) { + case '\\': + e += '\\\\' + break + case '\n': + e += '\\n' + break + case '|': + e += '\\|' + break + default: + e += c + } + } + return e +} + +function isNumeric(s: string) { + return !isNaN(parseFloat(s)) +} + +function spaces(level: number): string { + return new Array(level + 1).join(' ') +} diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 353a76dc53b..9bc988a65f7 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -24,6 +24,11 @@ const Template: Story = ({ initialMarkdown }) => { ) } +export const EmptyDocument = Template.bind({}) +EmptyDocument.args = { + initialMarkdown: ``, +} + export const DataTables = Template.bind({}) DataTables.args = { initialMarkdown: `# Feature: Welcome @@ -34,10 +39,10 @@ Let's use some tables * Given the following people - | Name | Age | - | ----- | ---- | - | Jill | 1 | - | Bob | 10 | - | Sally | 100 | + | Name | Age | + | ----- | --- | + | Jill | 1 | + | Bob | 10 | + | Sally | 100 | `, } diff --git a/markdown-editor/javascript/test/createTableNode.test.ts b/markdown-editor/javascript/test/createTableNode.test.ts new file mode 100644 index 00000000000..0371153f506 --- /dev/null +++ b/markdown-editor/javascript/test/createTableNode.test.ts @@ -0,0 +1,20 @@ +import { EditorState, Transaction } from "prosemirror-state"; +import createTableNode from "../src/createTableNode"; +import makeConfig from "../src/makeConfig"; +import {cucumberMarkdownSerializer} from "../src/cucumberMarkdown"; +import assert from "assert"; + +describe('createTableNode', () => { + it('creates a table node that can be turned into markdown', () => { + const state = EditorState.create(makeConfig('')) + const transaction: Transaction = state.tr + transaction.replaceSelectionWith(createTableNode(state)) + + const markdown = cucumberMarkdownSerializer.serialize(transaction.doc) + assert.strictEqual(markdown, `| h | h | h | +| - | - | - | +| c | c | c | +| c | c | c | +`) + }) +}) diff --git a/markdown-editor/javascript/test/tableTest.ts b/markdown-editor/javascript/test/tableSerialization.test.ts similarity index 62% rename from markdown-editor/javascript/test/tableTest.ts rename to markdown-editor/javascript/test/tableSerialization.test.ts index 48817569a32..bf1b2003913 100644 --- a/markdown-editor/javascript/test/tableTest.ts +++ b/markdown-editor/javascript/test/tableSerialization.test.ts @@ -1,30 +1,20 @@ import assert from 'assert' import { JSDOM } from 'jsdom' -import { cucumberMarkdownParser, cucumberMarkdownSerializer, schema } from '../src/cucumberMarkdown' +import { + cucumberMarkdownParser, + cucumberMarkdownSerializer, + schema +} from '../src/cucumberMarkdown' import { DOMParser } from 'prosemirror-model' -describe('fromMarkdown', () => { - it('roundtrips markdown table', () => { - const markdown = `# Hello - -| COL1 | COL2 | -| ---- | ---- | -| One | Two | -| Un | Deux | -| En | To | -` - const doc = cucumberMarkdownParser.parse(markdown) - const newMarkdown = cucumberMarkdownSerializer.serialize(doc) - assert.strictEqual(newMarkdown, markdown) - }) - - it('serializes markdown table', () => { +describe('table serialization', () => { + it('can serialize a table', () => { const documentElement = new JSDOM( ` - - - + + +
COL1COL2
OneTwo
UnDeux
EnTo
Un1
Dix10
Cent100
` ).window.document.documentElement const parser = DOMParser.fromSchema(schema) @@ -34,10 +24,24 @@ describe('fromMarkdown', () => { const expectedMarkdown = `| COL1 | COL2 | | ---- | ---- | -| One | Two | -| Un | Deux | -| En | To | +| Un | 1 | +| Dix | 10 | +| Cent | 100 | ` assert.strictEqual(markdown, expectedMarkdown) }) + + it('can parse a markdown table and serialize it back to the original', () => { + const markdown = `# Hello + +| COL1 | COL2 | +| ---- | ---- | +| One | Two | +| Un | Deux | +| En | To | +` + const doc = cucumberMarkdownParser.parse(markdown) + const newMarkdown = cucumberMarkdownSerializer.serialize(doc) + assert.strictEqual(newMarkdown, markdown) + }) }) From a6b198a48fe76c0f034665ef979970ae1a7b7fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Fri, 18 Jun 2021 22:52:13 +0100 Subject: [PATCH 14/25] Add animated gif to showcase Markdown generation --- markdown-editor/javascript/README.md | 2 +- .../javascript/images/markdown-editor.gif | Bin 0 -> 122281 bytes .../javascript/images/markdown-editor.png | Bin 286425 -> 0 bytes .../CucumberMarkdownProseMirror.stories.tsx | 10 +++++----- 4 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 markdown-editor/javascript/images/markdown-editor.gif delete mode 100644 markdown-editor/javascript/images/markdown-editor.png diff --git a/markdown-editor/javascript/README.md b/markdown-editor/javascript/README.md index a73dd3d0946..e3d993aaeaf 100644 --- a/markdown-editor/javascript/README.md +++ b/markdown-editor/javascript/README.md @@ -10,4 +10,4 @@ The editor is based on [ProseMirror](https://prosemirror.net/) ## Screenshot -![Markdown Editor](images/markdown-editor.png) +![Markdown Editor](images/markdown-editor.gif) diff --git a/markdown-editor/javascript/images/markdown-editor.gif b/markdown-editor/javascript/images/markdown-editor.gif new file mode 100644 index 0000000000000000000000000000000000000000..4fef8f57e33046ad3474e3ca8128bcdba3447f24 GIT binary patch literal 122281 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 j@hleawR?XJbi}ninMt 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
M7Q0nF37uE0)_BNO%5 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 literal 0 HcmV?d00001 diff --git a/markdown-editor/javascript/images/markdown-editor.png b/markdown-editor/javascript/images/markdown-editor.png deleted file mode 100644 index 8633341097ad1d3b667a9db310ff08b8eeeff384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286425 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%0A@Xb%sM_6IL8hDJun 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 ) diff --git a/markdown-editor/javascript/src/useGherkinDocument.ts b/markdown-editor/javascript/src/useGherkinDocument.ts new file mode 100644 index 00000000000..a08a2409faf --- /dev/null +++ b/markdown-editor/javascript/src/useGherkinDocument.ts @@ -0,0 +1,18 @@ +import {AstBuilder, Parser, GherkinInMarkdownTokenMatcher } from '@cucumber/gherkin' +import {IdGenerator, GherkinDocument } from '@cucumber/messages' + +type Result = { + gherkinDocument?: GherkinDocument + error?: Error +} + +export default function useGherkinDocument(markdown: string): Result { + const parser = new Parser(new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher()) + let gherkinDocument: GherkinDocument + try { + gherkinDocument = parser.parse(markdown) + return {gherkinDocument} + } catch(error) { + return {error} + } +} diff --git a/markdown-editor/javascript/test/createTableNode.test.ts b/markdown-editor/javascript/test/createTableNode.test.ts index 0371153f506..7da10cb2764 100644 --- a/markdown-editor/javascript/test/createTableNode.test.ts +++ b/markdown-editor/javascript/test/createTableNode.test.ts @@ -1,8 +1,8 @@ -import { EditorState, Transaction } from "prosemirror-state"; +import {EditorState, Transaction} from "prosemirror-state"; import createTableNode from "../src/createTableNode"; import makeConfig from "../src/makeConfig"; -import {cucumberMarkdownSerializer} from "../src/cucumberMarkdown"; import assert from "assert"; +import {cucumberMarkdownSerializer} from "../src/markdownSerializer"; describe('createTableNode', () => { it('creates a table node that can be turned into markdown', () => { diff --git a/markdown-editor/javascript/test/tableSerialization.test.ts b/markdown-editor/javascript/test/tableSerialization.test.ts index bf1b2003913..5d178538c2b 100644 --- a/markdown-editor/javascript/test/tableSerialization.test.ts +++ b/markdown-editor/javascript/test/tableSerialization.test.ts @@ -1,11 +1,9 @@ import assert from 'assert' -import { JSDOM } from 'jsdom' -import { - cucumberMarkdownParser, - cucumberMarkdownSerializer, - schema -} from '../src/cucumberMarkdown' -import { DOMParser } from 'prosemirror-model' +import {JSDOM} from 'jsdom' +import schema from '../src/schema' +import {DOMParser} from 'prosemirror-model' +import makeMarkdownParser from "../src/makeMarkdownParser"; +import {cucumberMarkdownSerializer} from "../src/markdownSerializer"; describe('table serialization', () => { it('can serialize a table', () => { @@ -40,7 +38,8 @@ describe('table serialization', () => { | Un | Deux | | En | To | ` - const doc = cucumberMarkdownParser.parse(markdown) + const parser = makeMarkdownParser(); + const doc = parser.parse(markdown) const newMarkdown = cucumberMarkdownSerializer.serialize(doc) assert.strictEqual(newMarkdown, markdown) }) diff --git a/package-lock.json b/package-lock.json index 55ea54926f4..06a4511cc24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -333,6 +333,8 @@ "version": "14.0.0", "license": "MIT", "dependencies": { + "@cucumber/gherkin": "19.0.3", + "@cucumber/messages": "16.0.1", "@types/prosemirror-commands": "1.0.4", "@types/prosemirror-history": "1.0.2", "@types/prosemirror-keymap": "1.0.4", @@ -30690,6 +30692,8 @@ "version": "file:markdown-editor/javascript", "requires": { "@babel/core": "7.14.3", + "@cucumber/gherkin": "19.0.3", + "@cucumber/messages": "16.0.1", "@storybook/addon-actions": "6.2.9", "@storybook/addon-links": "6.2.9", "@storybook/builder-webpack5": "6.2.9", From 38b3e52f257ffcf3b01a4af76656524c355bef00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Sat, 19 Jun 2021 13:31:39 +0100 Subject: [PATCH 16/25] Start styling Gherkin documents --- .../src/CucumberMarkdownProseMirror.tsx | 1 - .../javascript/src/makeMarkdownParser.ts | 16 ++++++++++++---- markdown-editor/javascript/src/schema.ts | 15 +++++++++++++++ markdown-editor/javascript/src/styles.css | 11 ++++++++++- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index c69611be4fa..6b94230e7f7 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -6,7 +6,6 @@ import './styles.css' import React, { Dispatch, SetStateAction } from 'react' import { ProseMirror } from 'use-prosemirror' -import schema from './schema' import { EditorState } from 'prosemirror-state' import {GherkinDocument } from '@cucumber/messages' import {cucumberMarkdownSerializer} from "./markdownSerializer"; diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts index a9efb6058e5..4658409005a 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -7,6 +7,14 @@ export default function makeMarkdownParser() { const tokens = { ...defaultMarkdownParser.tokens, ...{ + heading: {block: "heading", getAttrs: (tok: any) => { + const gherkinKeyword = tok.map[0] == 4 + return { + level: +tok.tag.slice(1), + gherkinKeyword + } + }}, + table: {block: 'table'}, // THEAD and TBODY don't exist in the prosemirror-tables schema thead: {ignore: true}, @@ -17,7 +25,7 @@ export default function makeMarkdownParser() { const parser = new MarkdownParser(schema, new MarkdownIt(), tokens) -// @ts-ignore + // @ts-ignore parser.tokenHandlers['th_open'] = function (state) { // @ts-ignore state.openNode(schema.nodeType('table_header')) @@ -25,13 +33,13 @@ export default function makeMarkdownParser() { state.openNode(schema.nodeType('paragraph')) } -// @ts-ignore + // @ts-ignore parser.tokenHandlers['th_close'] = function (state) { state.closeNode() state.closeNode() } -// @ts-ignore + // @ts-ignore parser.tokenHandlers['td_open'] = function (state) { // @ts-ignore state.openNode(schema.nodeType('table_cell')) @@ -39,7 +47,7 @@ export default function makeMarkdownParser() { state.openNode(schema.nodeType('paragraph')) } -// @ts-ignore + // @ts-ignore parser.tokenHandlers['td_close'] = function (state) { state.closeNode() state.closeNode() diff --git a/markdown-editor/javascript/src/schema.ts b/markdown-editor/javascript/src/schema.ts index 32d6c71382b..7aa9a2d54a0 100644 --- a/markdown-editor/javascript/src/schema.ts +++ b/markdown-editor/javascript/src/schema.ts @@ -2,6 +2,20 @@ import {schema as markdownSchema,} from 'prosemirror-markdown' import {Schema} from 'prosemirror-model' import {tableNodes} from 'prosemirror-tables' +// @ts-ignore +const heading = markdownSchema.spec.nodes.get('heading') +heading.attrs = { + level: {default: 1}, + gherkinKeyword: {default: false} +} + +// @ts-ignore +heading.toDOM = (node) => { + const attrs = node.attrs.gherkinKeyword ? {class: 'gherkinKeyword'} : {} + return ['h1', attrs, 0] +} + + export default new Schema({ // @ts-ignore nodes: markdownSchema.spec.nodes.append( @@ -19,6 +33,7 @@ export default new Schema({ return (dom.style && dom.style.backgroundColor) || null }, setDOMAttr(value, attrs) { + // console.log('setDOMAttr', value, attrs) if (value) attrs.style = (attrs.style || '') + `background-color: ${value};` }, }, diff --git a/markdown-editor/javascript/src/styles.css b/markdown-editor/javascript/src/styles.css index e783a4052fc..d8b4a81263b 100644 --- a/markdown-editor/javascript/src/styles.css +++ b/markdown-editor/javascript/src/styles.css @@ -2,25 +2,34 @@ border: 1px solid silver; outline: none; } + .ProseMirror { padding: 5px 15px; } + .ProseMirror table { margin: 0; } + .ProseMirror th, .ProseMirror td { min-width: 1em; border: 1px solid #ddd; padding: 3px 5px; } + .ProseMirror .tableWrapper { margin: 1em 0; } + .ProseMirror th { font-weight: bold; text-align: left; } .ProseMirror th p, .ProseMirror td p { - margin: 1px; + margin: 1px; +} + +.ProseMirror .gherkinKeyword { + color: darkorchid; } From 8e0818c1949d01bf5fb147e4bc5fcb974cf643ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Sat, 19 Jun 2021 22:20:24 +0100 Subject: [PATCH 17/25] Find keyword lines --- .../src/CucumberMarkdownProseMirror.tsx | 1 - markdown-editor/javascript/src/makeConfig.ts | 22 ++++++++++++++-- .../javascript/src/makeMarkdownParser.ts | 17 ++++++------ markdown-editor/javascript/src/schema.ts | 2 ++ .../CucumberMarkdownProseMirror.stories.tsx | 26 ++++++++++++++++--- .../javascript/src/useGherkinDocument.ts | 18 ------------- .../test/tableSerialization.test.ts | 2 +- 7 files changed, 54 insertions(+), 34 deletions(-) delete mode 100644 markdown-editor/javascript/src/useGherkinDocument.ts diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index 6b94230e7f7..18b8f148f05 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -14,7 +14,6 @@ type Props = { state: EditorState setState: Dispatch> setMarkdown: Dispatch> - gherkinDocument: GherkinDocument } const CucumberMarkdownProseMirror: React.FunctionComponent = ({ diff --git a/markdown-editor/javascript/src/makeConfig.ts b/markdown-editor/javascript/src/makeConfig.ts index 336cdc0802d..631896f6cbe 100644 --- a/markdown-editor/javascript/src/makeConfig.ts +++ b/markdown-editor/javascript/src/makeConfig.ts @@ -1,9 +1,27 @@ import plugins from './plugins' import makeMarkdownParser from "./makeMarkdownParser"; +import {AstBuilder, GherkinInMarkdownTokenMatcher, Parser} from '@cucumber/gherkin'; +import {IdGenerator} from '@cucumber/messages'; + +const gherkinParser = new Parser(new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher()) export default function makeConfig(markdown: string) { - const parser = makeMarkdownParser(); - const doc = parser.parse(markdown); + const gherkinKeywordLines: number[] = [] + try { + const gherkinDocument = gherkinParser.parse(markdown) + if(gherkinDocument) { + for (const featureChild of gherkinDocument.feature.children) { + if(featureChild.scenario) { + gherkinKeywordLines.push(featureChild.scenario.location.line) + } + } + } + } catch (parseError) { + // ignore + } + + const markdownParser = makeMarkdownParser(gherkinKeywordLines); + const doc = markdownParser.parse(markdown); return { doc, plugins, diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts index 4658409005a..de480a66756 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -2,18 +2,19 @@ import MarkdownIt from 'markdown-it' import schema from "./schema"; import {defaultMarkdownParser, MarkdownParser,} from 'prosemirror-markdown' -export default function makeMarkdownParser() { - +export default function makeMarkdownParser(gherkinKeywordLines: readonly number[]) { const tokens = { ...defaultMarkdownParser.tokens, ...{ - heading: {block: "heading", getAttrs: (tok: any) => { - const gherkinKeyword = tok.map[0] == 4 - return { - level: +tok.tag.slice(1), - gherkinKeyword + heading: { + block: "heading", getAttrs: (tok: any) => { + const gherkinKeyword = gherkinKeywordLines.includes(tok.map[1]) + return { + level: +tok.tag.slice(1), + gherkinKeyword + } } - }}, + }, table: {block: 'table'}, // THEAD and TBODY don't exist in the prosemirror-tables schema diff --git a/markdown-editor/javascript/src/schema.ts b/markdown-editor/javascript/src/schema.ts index 7aa9a2d54a0..73ccd902ce3 100644 --- a/markdown-editor/javascript/src/schema.ts +++ b/markdown-editor/javascript/src/schema.ts @@ -2,6 +2,8 @@ import {schema as markdownSchema,} from 'prosemirror-markdown' import {Schema} from 'prosemirror-model' import {tableNodes} from 'prosemirror-tables' +// https://github.com/b-kelly/prosemirror-highlightjs/blob/master/src/sample-schema.ts + // @ts-ignore const heading = markdownSchema.spec.nodes.get('heading') heading.attrs = { diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 62ae407aaa7..578572b6f95 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -4,7 +4,6 @@ import CucumberMarkdownProseMirror from '../CucumberMarkdownProseMirror' import { useProseMirror } from 'use-prosemirror' import makeConfig from '../makeConfig' import MarkdownSimpleCodeEditor from '../MarkdownSimpleCodeEditor' -import useGherkinDocument from "../useGherkinDocument"; export default { title: 'MarkdownEditor', @@ -15,12 +14,11 @@ type TemplateArgs = { initialMarkdown: string } const Template: Story = ({ initialMarkdown }) => { const [markdown, setMarkdown] = useState(initialMarkdown) - const {gherkinDocument, error} = useGherkinDocument(markdown) - const [state, setState] = useProseMirror(makeConfig(markdown)) + const [state, setState] = useProseMirror(makeConfig(markdown || '')) return (
- +
) @@ -31,6 +29,26 @@ EmptyDocument.args = { initialMarkdown: ``, } +export const MultipleScenarios = Template.bind({}) +MultipleScenarios.args = { + initialMarkdown: `# Feature: Multiple +bla bla +bla bla + +# Scenario: One + +bla + +# ScenariX: Other header + +lorem ipsum + +# Scenario: Two + +hi +`, +} + export const DataTables = Template.bind({}) DataTables.args = { initialMarkdown: `# Feature: Welcome diff --git a/markdown-editor/javascript/src/useGherkinDocument.ts b/markdown-editor/javascript/src/useGherkinDocument.ts deleted file mode 100644 index a08a2409faf..00000000000 --- a/markdown-editor/javascript/src/useGherkinDocument.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {AstBuilder, Parser, GherkinInMarkdownTokenMatcher } from '@cucumber/gherkin' -import {IdGenerator, GherkinDocument } from '@cucumber/messages' - -type Result = { - gherkinDocument?: GherkinDocument - error?: Error -} - -export default function useGherkinDocument(markdown: string): Result { - const parser = new Parser(new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher()) - let gherkinDocument: GherkinDocument - try { - gherkinDocument = parser.parse(markdown) - return {gherkinDocument} - } catch(error) { - return {error} - } -} diff --git a/markdown-editor/javascript/test/tableSerialization.test.ts b/markdown-editor/javascript/test/tableSerialization.test.ts index 5d178538c2b..4b66bed8a21 100644 --- a/markdown-editor/javascript/test/tableSerialization.test.ts +++ b/markdown-editor/javascript/test/tableSerialization.test.ts @@ -38,7 +38,7 @@ describe('table serialization', () => { | Un | Deux | | En | To | ` - const parser = makeMarkdownParser(); + const parser = makeMarkdownParser([]); const doc = parser.parse(markdown) const newMarkdown = cucumberMarkdownSerializer.serialize(doc) assert.strictEqual(newMarkdown, markdown) From bc1260510d06a4b6fe205378ab1106613c7b6709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Sun, 20 Jun 2021 23:01:41 +0100 Subject: [PATCH 18/25] Basic syntax highlighting --- markdown-editor/javascript/README.md | 27 +++++++++++++++++++ .../src/CucumberMarkdownProseMirror.tsx | 22 +++++++++++---- markdown-editor/javascript/src/makeConfig.ts | 12 +++++---- .../javascript/src/makeMarkdownParser.ts | 18 ++++++------- markdown-editor/javascript/src/schema.ts | 12 +-------- .../CucumberMarkdownProseMirror.stories.tsx | 2 +- markdown-editor/javascript/src/styles.css | 3 ++- 7 files changed, 64 insertions(+), 32 deletions(-) diff --git a/markdown-editor/javascript/README.md b/markdown-editor/javascript/README.md index e3d993aaeaf..ae0f61835cd 100644 --- a/markdown-editor/javascript/README.md +++ b/markdown-editor/javascript/README.md @@ -11,3 +11,30 @@ The editor is based on [ProseMirror](https://prosemirror.net/) ## Screenshot ![Markdown Editor](images/markdown-editor.gif) + +## TODO + +### Basic syntax highlighting + +Users must be able to visually distinguish the parts of the Markdown document that contains +Gherkin contents from "regular" Markdown contents. They also need to know if there are any +Gherkin parser syntax errors so they can fix them. + +This can be done with basic syntax highlighting, for example highlighting Gherkin contents in +a light blue colour, and highlighting lines with parse errors in a light red colour. + +High level overview of how this is currently done: + +* For every edit, serialize the ProseMirror document to Markdown with `markdownSerializer` +* Parse the Markdown into a GherkinDocument using Gherkin and a `GherkinInMarkdownTokenMatcher` +* Walk the GherkinDocument and build a list of line numbers (`gherkinLines`) that should be highlighted +* Parse the Markdown into a new ProseMirror document using `makeMarkdownParser` + * This will set a `gherkin` attribute on document nodes that are derived from Markdown nodes + that have a line number in the `gherkinLines` list. +* Use [decorations](https://prosemirror.net/docs/ref/#view.Decorations) to add a `gherkin` class to DOM + nodes corresponding to ProseMirror nodes with a `gherkin` attribute. + +This works fine for the initial rendering. However, when the user edits the document, the `gherkin` classes +are not updated. For example, changing a non-Gherkin heading from `ScenariX` to `Scenario` does not +add the `gherkin` class. + diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index 18b8f148f05..b9cdf1011b0 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -4,11 +4,11 @@ import 'prosemirror-menu/style/menu.css' import 'prosemirror-tables/style/tables.css' import './styles.css' -import React, { Dispatch, SetStateAction } from 'react' -import { ProseMirror } from 'use-prosemirror' -import { EditorState } from 'prosemirror-state' -import {GherkinDocument } from '@cucumber/messages' +import React, {Dispatch, SetStateAction} from 'react' +import {ProseMirror} from 'use-prosemirror' +import {EditorState} from 'prosemirror-state' import {cucumberMarkdownSerializer} from "./markdownSerializer"; +import {Decoration, DecorationSet} from 'prosemirror-view' type Props = { state: EditorState @@ -24,8 +24,20 @@ const CucumberMarkdownProseMirror: React.FunctionComponent = ({ return ( { + const decorations: Decoration[] = [] + // console.log('---decorations ---') + state.doc.forEach((node, offset) => { + if(node.attrs.gherkin) { + decorations.push(Decoration.node(offset, offset + node.nodeSize, {class: 'gherkin'})); + } + }) + // console.log('decorations:', decorations.length) + return DecorationSet.create(state.doc, decorations); + }} onChange={(newState) => { - setMarkdown(cucumberMarkdownSerializer.serialize(newState.doc)) + const markdown = cucumberMarkdownSerializer.serialize(newState.doc); + setMarkdown(markdown) setState(newState) }} /> diff --git a/markdown-editor/javascript/src/makeConfig.ts b/markdown-editor/javascript/src/makeConfig.ts index 631896f6cbe..352bdcb7884 100644 --- a/markdown-editor/javascript/src/makeConfig.ts +++ b/markdown-editor/javascript/src/makeConfig.ts @@ -3,24 +3,26 @@ import makeMarkdownParser from "./makeMarkdownParser"; import {AstBuilder, GherkinInMarkdownTokenMatcher, Parser} from '@cucumber/gherkin'; import {IdGenerator} from '@cucumber/messages'; -const gherkinParser = new Parser(new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher()) - export default function makeConfig(markdown: string) { - const gherkinKeywordLines: number[] = [] + const gherkinParser = new Parser(new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher()) + const gherkinLines: number[] = [] try { const gherkinDocument = gherkinParser.parse(markdown) if(gherkinDocument) { for (const featureChild of gherkinDocument.feature.children) { if(featureChild.scenario) { - gherkinKeywordLines.push(featureChild.scenario.location.line) + gherkinLines.push(featureChild.scenario.location.line) } } } } catch (parseError) { + console.log(parseError.message) + console.log('---') + console.log(markdown) // ignore } - const markdownParser = makeMarkdownParser(gherkinKeywordLines); + const markdownParser = makeMarkdownParser(gherkinLines) const doc = markdownParser.parse(markdown); return { doc, diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts index de480a66756..82897b20fe0 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -2,16 +2,16 @@ import MarkdownIt from 'markdown-it' import schema from "./schema"; import {defaultMarkdownParser, MarkdownParser,} from 'prosemirror-markdown' -export default function makeMarkdownParser(gherkinKeywordLines: readonly number[]) { +export default function makeMarkdownParser(gherkinLines: readonly number[]) { const tokens = { ...defaultMarkdownParser.tokens, ...{ heading: { block: "heading", getAttrs: (tok: any) => { - const gherkinKeyword = gherkinKeywordLines.includes(tok.map[1]) + const gherkin = gherkinLines.includes(tok.map[1]) return { level: +tok.tag.slice(1), - gherkinKeyword + gherkin } } }, @@ -24,10 +24,10 @@ export default function makeMarkdownParser(gherkinKeywordLines: readonly number[ }, } - const parser = new MarkdownParser(schema, new MarkdownIt(), tokens) + const markdownParser = new MarkdownParser(schema, new MarkdownIt(), tokens) // @ts-ignore - parser.tokenHandlers['th_open'] = function (state) { + markdownParser.tokenHandlers['th_open'] = function (state) { // @ts-ignore state.openNode(schema.nodeType('table_header')) // @ts-ignore @@ -35,13 +35,13 @@ export default function makeMarkdownParser(gherkinKeywordLines: readonly number[ } // @ts-ignore - parser.tokenHandlers['th_close'] = function (state) { + markdownParser.tokenHandlers['th_close'] = function (state) { state.closeNode() state.closeNode() } // @ts-ignore - parser.tokenHandlers['td_open'] = function (state) { + markdownParser.tokenHandlers['td_open'] = function (state) { // @ts-ignore state.openNode(schema.nodeType('table_cell')) // @ts-ignore @@ -49,10 +49,10 @@ export default function makeMarkdownParser(gherkinKeywordLines: readonly number[ } // @ts-ignore - parser.tokenHandlers['td_close'] = function (state) { + markdownParser.tokenHandlers['td_close'] = function (state) { state.closeNode() state.closeNode() } - return parser + return markdownParser } diff --git a/markdown-editor/javascript/src/schema.ts b/markdown-editor/javascript/src/schema.ts index 73ccd902ce3..a87c2a5af7d 100644 --- a/markdown-editor/javascript/src/schema.ts +++ b/markdown-editor/javascript/src/schema.ts @@ -1,23 +1,13 @@ import {schema as markdownSchema,} from 'prosemirror-markdown' import {Schema} from 'prosemirror-model' import {tableNodes} from 'prosemirror-tables' - -// https://github.com/b-kelly/prosemirror-highlightjs/blob/master/src/sample-schema.ts - // @ts-ignore const heading = markdownSchema.spec.nodes.get('heading') heading.attrs = { level: {default: 1}, - gherkinKeyword: {default: false} -} - -// @ts-ignore -heading.toDOM = (node) => { - const attrs = node.attrs.gherkinKeyword ? {class: 'gherkinKeyword'} : {} - return ['h1', attrs, 0] + gherkin: {default: false}, } - export default new Schema({ // @ts-ignore nodes: markdownSchema.spec.nodes.append( diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 578572b6f95..8e9083c6658 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -6,7 +6,7 @@ import makeConfig from '../makeConfig' import MarkdownSimpleCodeEditor from '../MarkdownSimpleCodeEditor' export default { - title: 'MarkdownEditor', + title: 'CucumberMarkdownProseMirror', component: CucumberMarkdownProseMirror, } as Meta diff --git a/markdown-editor/javascript/src/styles.css b/markdown-editor/javascript/src/styles.css index d8b4a81263b..b82bf0f4101 100644 --- a/markdown-editor/javascript/src/styles.css +++ b/markdown-editor/javascript/src/styles.css @@ -30,6 +30,7 @@ margin: 1px; } -.ProseMirror .gherkinKeyword { +/* DOM nodes derived from a GherkinDocument have this class */ +.ProseMirror .gherkin { color: darkorchid; } From 055fa9edb2993d6b1eaf70e1703470651ad259ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Mon, 21 Jun 2021 13:57:16 +0100 Subject: [PATCH 19/25] Highlight more keywords --- markdown-editor/javascript/README.md | 2 + .../src/CucumberMarkdownProseMirror.tsx | 32 +++++++-- markdown-editor/javascript/src/makeConfig.ts | 21 +----- .../javascript/src/makeGherkinLines.ts | 66 +++++++++++++++++++ .../javascript/src/makeMarkdownParser.ts | 35 ++++++---- markdown-editor/javascript/src/schema.ts | 15 ++++- .../CucumberMarkdownProseMirror.stories.tsx | 14 ++-- 7 files changed, 136 insertions(+), 49 deletions(-) create mode 100644 markdown-editor/javascript/src/makeGherkinLines.ts diff --git a/markdown-editor/javascript/README.md b/markdown-editor/javascript/README.md index ae0f61835cd..5fd687553b9 100644 --- a/markdown-editor/javascript/README.md +++ b/markdown-editor/javascript/README.md @@ -38,3 +38,5 @@ This works fine for the initial rendering. However, when the user edits the docu are not updated. For example, changing a non-Gherkin heading from `ScenariX` to `Scenario` does not add the `gherkin` class. +Editing a heading doesn't seem to create a new node, so the `gherkin` attribute isn't updated on the node. +Or something like that... diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index b9cdf1011b0..81479c5b4b4 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -9,6 +9,8 @@ import {ProseMirror} from 'use-prosemirror' import {EditorState} from 'prosemirror-state' import {cucumberMarkdownSerializer} from "./markdownSerializer"; import {Decoration, DecorationSet} from 'prosemirror-view' +import makeMarkdownParser from "./makeMarkdownParser"; +import makeGherkinLines from "./makeGherkinLines"; type Props = { state: EditorState @@ -26,19 +28,37 @@ const CucumberMarkdownProseMirror: React.FunctionComponent = ({ state={state} decorations={(state) => { const decorations: Decoration[] = [] - // console.log('---decorations ---') state.doc.forEach((node, offset) => { if(node.attrs.gherkin) { - decorations.push(Decoration.node(offset, offset + node.nodeSize, {class: 'gherkin'})); + console.log('gherkin node', node.textContent, offset, node.nodeSize) + decorations.push(Decoration.node(offset, offset + node.nodeSize, {class: 'gherkin'})) + } else { + console.log('non-gherkin node', node.textContent, node.attrs) } }) - // console.log('decorations:', decorations.length) - return DecorationSet.create(state.doc, decorations); + return DecorationSet.create(state.doc, decorations) }} onChange={(newState) => { - const markdown = cucumberMarkdownSerializer.serialize(newState.doc); - setMarkdown(markdown) + const markdown = cucumberMarkdownSerializer.serialize(newState.doc) + const gherkinLines = makeGherkinLines(markdown) + const markdownParser = makeMarkdownParser(gherkinLines) + const newDoc = markdownParser.parse(markdown) + + // Cannot do `newState.doc = doc` here because it messes up editing. + // Instead we iterate over both docs and modify the existing doc node if the nodes are "similar" + newState.doc.forEach((newStateNode) => { + newStateNode.attrs.gherkin = false + newDoc.forEach((newDocNode) => { + if(newDocNode.attrs.gherkin) { + if(newStateNode.textContent === newDocNode.textContent) { + newStateNode.attrs.gherkin = true + } + } + }) + }) + setState(newState) + setMarkdown(markdown) }} /> ) diff --git a/markdown-editor/javascript/src/makeConfig.ts b/markdown-editor/javascript/src/makeConfig.ts index 352bdcb7884..c5c37741688 100644 --- a/markdown-editor/javascript/src/makeConfig.ts +++ b/markdown-editor/javascript/src/makeConfig.ts @@ -1,26 +1,9 @@ import plugins from './plugins' import makeMarkdownParser from "./makeMarkdownParser"; -import {AstBuilder, GherkinInMarkdownTokenMatcher, Parser} from '@cucumber/gherkin'; -import {IdGenerator} from '@cucumber/messages'; +import makeGherkinLines from "./makeGherkinLines"; export default function makeConfig(markdown: string) { - const gherkinParser = new Parser(new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher()) - const gherkinLines: number[] = [] - try { - const gherkinDocument = gherkinParser.parse(markdown) - if(gherkinDocument) { - for (const featureChild of gherkinDocument.feature.children) { - if(featureChild.scenario) { - gherkinLines.push(featureChild.scenario.location.line) - } - } - } - } catch (parseError) { - console.log(parseError.message) - console.log('---') - console.log(markdown) - // ignore - } + const gherkinLines = makeGherkinLines(markdown) const markdownParser = makeMarkdownParser(gherkinLines) const doc = markdownParser.parse(markdown); diff --git a/markdown-editor/javascript/src/makeGherkinLines.ts b/markdown-editor/javascript/src/makeGherkinLines.ts new file mode 100644 index 00000000000..a1c9c281b9b --- /dev/null +++ b/markdown-editor/javascript/src/makeGherkinLines.ts @@ -0,0 +1,66 @@ +import {AstBuilder, GherkinInMarkdownTokenMatcher, Parser} from '@cucumber/gherkin'; +import {Background, Examples, Feature, IdGenerator, Rule, Scenario, Step} from '@cucumber/messages'; + +export default function makeGherkinLines(markdown: string): readonly number[] { + const gherkinParser = new Parser(new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher()) + const gherkinLines: number[] = [] + try { + const gherkinDocument = gherkinParser.parse(markdown) + if (gherkinDocument.feature) { + walkFeature(gherkinDocument.feature, gherkinLines) + } + } catch (parseError) { + console.log(parseError.message) + console.log('---') + console.log(markdown) + // ignore + } + return gherkinLines +} + +function walkFeature(feature: Feature, gherkinLines: number[]) { + gherkinLines.push(feature.location.line) + for (const featureChild of feature.children) { + if (featureChild.background) { + walkBackground(featureChild.background, gherkinLines) + } else if (featureChild.scenario) { + walkScenario(featureChild.scenario, gherkinLines) + } else if (featureChild.rule) { + walkRule(featureChild.rule, gherkinLines) + } + } +} + +function walkBackground(background: Background, gherkinLines: number[]) { + gherkinLines.push(background.location.line) + walkSteps(background.steps, gherkinLines) +} + +function walkScenario(scenario: Scenario, gherkinLines: number[]) { + gherkinLines.push(scenario.location.line) + walkSteps(scenario.steps, gherkinLines) + for (const examples of scenario.examples) { + walkExamples(examples, gherkinLines) + } +} + +function walkExamples(examples: Examples, gherkinLines: number[]) { + gherkinLines.push(examples.location.line) +} + +function walkRule(rule: Rule, gherkinLines: number[]) { + gherkinLines.push(rule.location.line) + for (const ruleChild of rule.children) { + if (ruleChild.background) { + walkBackground(ruleChild.background, gherkinLines) + } else if (ruleChild.scenario) { + walkScenario(ruleChild.scenario, gherkinLines) + } + } +} + +function walkSteps(steps: readonly Step[], gherkinLines: number[]) { + for (const step of steps) { + gherkinLines.push(step.location.line) + } +} diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts index 82897b20fe0..2d58624156b 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -1,21 +1,12 @@ import MarkdownIt from 'markdown-it' import schema from "./schema"; -import {defaultMarkdownParser, MarkdownParser,} from 'prosemirror-markdown' +import {defaultMarkdownParser, MarkdownParser, TokenConfig,} from 'prosemirror-markdown' +import Token from 'markdown-it/lib/token'; export default function makeMarkdownParser(gherkinLines: readonly number[]) { - const tokens = { + const tokens: Record = { ...defaultMarkdownParser.tokens, ...{ - heading: { - block: "heading", getAttrs: (tok: any) => { - const gherkin = gherkinLines.includes(tok.map[1]) - return { - level: +tok.tag.slice(1), - gherkin - } - } - }, - table: {block: 'table'}, // THEAD and TBODY don't exist in the prosemirror-tables schema thead: {ignore: true}, @@ -24,6 +15,19 @@ export default function makeMarkdownParser(gherkinLines: readonly number[]) { }, } + // Add gherkin property to attrs + for(const tokenName of ['heading', 'list_item']) { + const token = tokens[tokenName] + const getAttrs = token.getAttrs + token.getAttrs = (token: Token) => { + const attrs = getAttrs ? getAttrs(token) : {} + const lineNumber = token.map[0] + 1 + attrs.gherkin = gherkinLines.includes(lineNumber) + return attrs + } + } + + // @ts-ignore const markdownParser = new MarkdownParser(schema, new MarkdownIt(), tokens) // @ts-ignore @@ -56,3 +60,10 @@ export default function makeMarkdownParser(gherkinLines: readonly number[]) { return markdownParser } + +// @ts-ignore +function listIsTight(tokens, i) { + while (++i < tokens.length) + if (tokens[i].type != "list_item_open") return tokens[i].hidden + return false +} diff --git a/markdown-editor/javascript/src/schema.ts b/markdown-editor/javascript/src/schema.ts index a87c2a5af7d..05cec6a09c8 100644 --- a/markdown-editor/javascript/src/schema.ts +++ b/markdown-editor/javascript/src/schema.ts @@ -1,12 +1,23 @@ import {schema as markdownSchema,} from 'prosemirror-markdown' import {Schema} from 'prosemirror-model' import {tableNodes} from 'prosemirror-tables' + // @ts-ignore -const heading = markdownSchema.spec.nodes.get('heading') -heading.attrs = { +markdownSchema.spec.nodes.get('heading').attrs = { level: {default: 1}, gherkin: {default: false}, } +// @ts-ignore +const listItem = markdownSchema.spec.nodes.get('list_item'); +listItem.attrs = { + gherkin: {default: false}, +} +// @ts-ignore +// listItem.toDOM = (node) => { +// const attrs = node.attrs.gherkin ? {class: 'gherkin'} : {} +// console.log('new li', attrs) +// return ["li", attrs, 0] +// } export default new Schema({ // @ts-ignore diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 8e9083c6658..4c608889c58 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -32,20 +32,14 @@ EmptyDocument.args = { export const MultipleScenarios = Template.bind({}) MultipleScenarios.args = { initialMarkdown: `# Feature: Multiple -bla bla -bla bla -# Scenario: One - -bla +* NOPE -# ScenariX: Other header - -lorem ipsum +# Scenario: One -# Scenario: Two +* Given YES -hi +## Examples: hello `, } From 6f09143e607054d5331a62f7947078cbc299b49d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Mon, 21 Jun 2021 15:24:27 +0100 Subject: [PATCH 20/25] Simplify --- .../src/CucumberMarkdownProseMirror.tsx | 2 +- .../javascript/src/makeMarkdownParser.ts | 7 ++- markdown-editor/javascript/src/schema.ts | 49 +++++-------------- .../CucumberMarkdownProseMirror.stories.tsx | 6 +-- 4 files changed, 18 insertions(+), 46 deletions(-) diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index 81479c5b4b4..e42d38c2518 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -33,7 +33,7 @@ const CucumberMarkdownProseMirror: React.FunctionComponent = ({ console.log('gherkin node', node.textContent, offset, node.nodeSize) decorations.push(Decoration.node(offset, offset + node.nodeSize, {class: 'gherkin'})) } else { - console.log('non-gherkin node', node.textContent, node.attrs) + // console.log('non-gherkin node', node.textContent, node.attrs) } }) return DecorationSet.create(state.doc, decorations) diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts index 2d58624156b..e725877e399 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -16,14 +16,13 @@ export default function makeMarkdownParser(gherkinLines: readonly number[]) { } // Add gherkin property to attrs - for(const tokenName of ['heading', 'list_item']) { + for(const tokenName of ['heading', 'list_item', 'table']) { const token = tokens[tokenName] const getAttrs = token.getAttrs token.getAttrs = (token: Token) => { - const attrs = getAttrs ? getAttrs(token) : {} const lineNumber = token.map[0] + 1 - attrs.gherkin = gherkinLines.includes(lineNumber) - return attrs + const attrs = getAttrs ? getAttrs(token) : {} + return { ...attrs, gherkin: gherkinLines.includes(lineNumber) } } } diff --git a/markdown-editor/javascript/src/schema.ts b/markdown-editor/javascript/src/schema.ts index 05cec6a09c8..db2682fe037 100644 --- a/markdown-editor/javascript/src/schema.ts +++ b/markdown-editor/javascript/src/schema.ts @@ -3,46 +3,21 @@ import {Schema} from 'prosemirror-model' import {tableNodes} from 'prosemirror-tables' // @ts-ignore -markdownSchema.spec.nodes.get('heading').attrs = { - level: {default: 1}, - gherkin: {default: false}, -} -// @ts-ignore -const listItem = markdownSchema.spec.nodes.get('list_item'); -listItem.attrs = { - gherkin: {default: false}, +const nodes = markdownSchema.spec.nodes.append( + tableNodes({ + tableGroup: 'block', + cellContent: 'paragraph', + cellAttributes: {}, + }) +) + +// Update node specs to include a gherkin attribute which defaults to false +for(const nodeName of ['heading', 'list_item']) { + nodes.get(nodeName).attrs = { ...nodes.get(nodeName).attrs, gherkin: { default: false } } } -// @ts-ignore -// listItem.toDOM = (node) => { -// const attrs = node.attrs.gherkin ? {class: 'gherkin'} : {} -// console.log('new li', attrs) -// return ["li", attrs, 0] -// } export default new Schema({ - // @ts-ignore - nodes: markdownSchema.spec.nodes.append( - tableNodes({ - tableGroup: 'block', - // Examples suggest block+ but we want to restrict to a single paragraph (single line) - // TODO: Investigate if we can restrict to a span, if such a thing exists in prosemirror. - // We don't want users to add bold, italic etc (I think) to cells - cellContent: 'paragraph', - cellAttributes: { - background: { - default: null, - getFromDOM(dom) { - // @ts-ignore - return (dom.style && dom.style.backgroundColor) || null - }, - setDOMAttr(value, attrs) { - // console.log('setDOMAttr', value, attrs) - if (value) attrs.style = (attrs.style || '') + `background-color: ${value};` - }, - }, - }, - }) - ), + nodes, marks: markdownSchema.spec.marks, }) diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 4c608889c58..11ccac5b4c9 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -29,8 +29,8 @@ EmptyDocument.args = { initialMarkdown: ``, } -export const MultipleScenarios = Template.bind({}) -MultipleScenarios.args = { +export const Bullets = Template.bind({}) +Bullets.args = { initialMarkdown: `# Feature: Multiple * NOPE @@ -38,8 +38,6 @@ MultipleScenarios.args = { # Scenario: One * Given YES - -## Examples: hello `, } From 450c61e48dff7206a9b45c2cf6763c6e0a17a8fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Mon, 21 Jun 2021 17:50:15 +0100 Subject: [PATCH 21/25] Cleanup --- .../javascript/src/CucumberMarkdownProseMirror.tsx | 9 +++------ markdown-editor/javascript/src/makeConfig.ts | 3 ++- markdown-editor/javascript/src/makeMarkdownParser.ts | 12 +++--------- .../stories/CucumberMarkdownProseMirror.stories.tsx | 2 ++ 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index e42d38c2518..1c0999b8494 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -28,12 +28,9 @@ const CucumberMarkdownProseMirror: React.FunctionComponent = ({ state={state} decorations={(state) => { const decorations: Decoration[] = [] - state.doc.forEach((node, offset) => { - if(node.attrs.gherkin) { - console.log('gherkin node', node.textContent, offset, node.nodeSize) - decorations.push(Decoration.node(offset, offset + node.nodeSize, {class: 'gherkin'})) - } else { - // console.log('non-gherkin node', node.textContent, node.attrs) + state.doc.nodesBetween(0, state.doc.nodeSize - 2, (node, pos) => { + if (node.attrs.gherkin) { + decorations.push(Decoration.node(pos, pos + node.nodeSize, {class: 'gherkin'})) } }) return DecorationSet.create(state.doc, decorations) diff --git a/markdown-editor/javascript/src/makeConfig.ts b/markdown-editor/javascript/src/makeConfig.ts index c5c37741688..db442818cf1 100644 --- a/markdown-editor/javascript/src/makeConfig.ts +++ b/markdown-editor/javascript/src/makeConfig.ts @@ -6,7 +6,8 @@ export default function makeConfig(markdown: string) { const gherkinLines = makeGherkinLines(markdown) const markdownParser = makeMarkdownParser(gherkinLines) - const doc = markdownParser.parse(markdown); + const doc = markdownParser.parse(markdown) + return { doc, plugins, diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts index e725877e399..8711eb2f73c 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -16,13 +16,14 @@ export default function makeMarkdownParser(gherkinLines: readonly number[]) { } // Add gherkin property to attrs - for(const tokenName of ['heading', 'list_item', 'table']) { + for(const tokenName of ['heading', 'list_item']) { const token = tokens[tokenName] const getAttrs = token.getAttrs token.getAttrs = (token: Token) => { const lineNumber = token.map[0] + 1 const attrs = getAttrs ? getAttrs(token) : {} - return { ...attrs, gherkin: gherkinLines.includes(lineNumber) } + const gherkin = gherkinLines.includes(lineNumber) + return { ...attrs, gherkin } } } @@ -59,10 +60,3 @@ export default function makeMarkdownParser(gherkinLines: readonly number[]) { return markdownParser } - -// @ts-ignore -function listIsTight(tokens, i) { - while (++i < tokens.length) - if (tokens[i].type != "list_item_open") return tokens[i].hidden - return false -} diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 11ccac5b4c9..49964e3b033 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -34,10 +34,12 @@ Bullets.args = { initialMarkdown: `# Feature: Multiple * NOPE +* NAY # Scenario: One * Given YES +* When HEY `, } From 3e6c3d8b69f572af9d070b646bb50eda7fdf314b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Mon, 21 Jun 2021 21:58:26 +0100 Subject: [PATCH 22/25] Extract highlight plugin --- .../src/CucumberMarkdownProseMirror.tsx | 31 +-------- .../javascript/src/makeMarkdownParser.ts | 2 +- markdown-editor/javascript/src/plugins.ts | 2 + .../src/plugins/gherkinHighlighting.ts | 68 +++++++++++++++++++ 4 files changed, 72 insertions(+), 31 deletions(-) create mode 100644 markdown-editor/javascript/src/plugins/gherkinHighlighting.ts diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index 1c0999b8494..a692528f2aa 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -7,10 +7,7 @@ import './styles.css' import React, {Dispatch, SetStateAction} from 'react' import {ProseMirror} from 'use-prosemirror' import {EditorState} from 'prosemirror-state' -import {cucumberMarkdownSerializer} from "./markdownSerializer"; -import {Decoration, DecorationSet} from 'prosemirror-view' -import makeMarkdownParser from "./makeMarkdownParser"; -import makeGherkinLines from "./makeGherkinLines"; +import {cucumberMarkdownSerializer} from "./markdownSerializer" type Props = { state: EditorState @@ -26,34 +23,8 @@ const CucumberMarkdownProseMirror: React.FunctionComponent = ({ return ( { - const decorations: Decoration[] = [] - state.doc.nodesBetween(0, state.doc.nodeSize - 2, (node, pos) => { - if (node.attrs.gherkin) { - decorations.push(Decoration.node(pos, pos + node.nodeSize, {class: 'gherkin'})) - } - }) - return DecorationSet.create(state.doc, decorations) - }} onChange={(newState) => { const markdown = cucumberMarkdownSerializer.serialize(newState.doc) - const gherkinLines = makeGherkinLines(markdown) - const markdownParser = makeMarkdownParser(gherkinLines) - const newDoc = markdownParser.parse(markdown) - - // Cannot do `newState.doc = doc` here because it messes up editing. - // Instead we iterate over both docs and modify the existing doc node if the nodes are "similar" - newState.doc.forEach((newStateNode) => { - newStateNode.attrs.gherkin = false - newDoc.forEach((newDocNode) => { - if(newDocNode.attrs.gherkin) { - if(newStateNode.textContent === newDocNode.textContent) { - newStateNode.attrs.gherkin = true - } - } - }) - }) - setState(newState) setMarkdown(markdown) }} diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts index 8711eb2f73c..c4e2a2579a7 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -3,7 +3,7 @@ import schema from "./schema"; import {defaultMarkdownParser, MarkdownParser, TokenConfig,} from 'prosemirror-markdown' import Token from 'markdown-it/lib/token'; -export default function makeMarkdownParser(gherkinLines: readonly number[]) { +export default function makeMarkdownParser(gherkinLines: readonly number[]): MarkdownParser { const tokens: Record = { ...defaultMarkdownParser.tokens, ...{ diff --git a/markdown-editor/javascript/src/plugins.ts b/markdown-editor/javascript/src/plugins.ts index fc43b0c91ef..2ae7fe70f78 100644 --- a/markdown-editor/javascript/src/plugins.ts +++ b/markdown-editor/javascript/src/plugins.ts @@ -24,6 +24,7 @@ import {Schema} from 'prosemirror-model' // @ts-ignore import {buildMenuItems, exampleSetup} from 'prosemirror-example-setup' import createTableNode from "./createTableNode"; +import gherkinHighlighting from "./plugins/gherkinHighlighting"; const menu = buildMenuItems(schema).fullMenu @@ -87,6 +88,7 @@ const plugins = [ Tab: goToNextCell(1), 'Shift-Tab': goToNextCell(-1), }), + gherkinHighlighting() ].concat(exampleSetup({schema, menuContent: menu})) export default plugins diff --git a/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts b/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts new file mode 100644 index 00000000000..9abd9f78698 --- /dev/null +++ b/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts @@ -0,0 +1,68 @@ +import {Node as ProseMirrorNode} from "prosemirror-model"; +import {Plugin, PluginKey} from "prosemirror-state"; +import {Decoration, DecorationSet} from "prosemirror-view"; +import makeGherkinLines from "../makeGherkinLines"; +import makeMarkdownParser from "../makeMarkdownParser"; +import {cucumberMarkdownSerializer} from "../markdownSerializer"; + +interface State { + decorations: DecorationSet +} + +export default function gherkinHighlighting(): Plugin { + const key = new PluginKey(); + + return new Plugin({ + key, + + state: { + init(_, instance) { + return { + decorations: DecorationSet.create(instance.doc, makeDecorations(instance.doc,)) + }; + }, + + apply(tr, data) { + if (!tr.docChanged) { + return { + decorations: data.decorations.map(tr.mapping, tr.doc), + }; + } + + return { + decorations: DecorationSet.create(tr.doc, makeDecorations(tr.doc)), + }; + }, + }, + + props: { + decorations(state) { + return this.getState(state).decorations; + }, + } + }) +} + +function makeDecorations( + doc: ProseMirrorNode, +): Decoration[] { + if (!doc || !doc.nodeSize) { + return []; + } + const markdown = cucumberMarkdownSerializer.serialize(doc) + const gherkinLines = makeGherkinLines(markdown) + const markdownParser = makeMarkdownParser(gherkinLines) + const newDoc = markdownParser.parse(markdown) + + const decorations: Decoration[] = []; + + newDoc.descendants((node, pos) => { + if (node.attrs.gherkin) { + decorations.push(Decoration.node(pos, pos + node.nodeSize, {class: 'gherkin'})) + } + }) + + console.log('DECS', decorations.length) + + return decorations +} From d76e18939024d976d4ce5fca01911f4a6c2786d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Mon, 21 Jun 2021 22:03:13 +0100 Subject: [PATCH 23/25] eslint --- .../src/CucumberMarkdownProseMirror.tsx | 8 ++-- .../javascript/src/createTableNode.ts | 31 +++++++------- markdown-editor/javascript/src/makeConfig.ts | 4 +- .../javascript/src/makeGherkinLines.ts | 17 ++++++-- .../javascript/src/makeMarkdownParser.ts | 18 ++++---- .../javascript/src/markdownSerializer.ts | 4 +- markdown-editor/javascript/src/plugins.ts | 22 +++++----- .../src/plugins/gherkinHighlighting.ts | 42 +++++++++---------- markdown-editor/javascript/src/prettyFork.ts | 21 +++------- markdown-editor/javascript/src/schema.ts | 9 ++-- .../javascript/test/createTableNode.test.ts | 17 ++++---- .../test/tableSerialization.test.ts | 10 ++--- 12 files changed, 102 insertions(+), 101 deletions(-) diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index a692528f2aa..89b7b193f67 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -4,10 +4,10 @@ import 'prosemirror-menu/style/menu.css' import 'prosemirror-tables/style/tables.css' import './styles.css' -import React, {Dispatch, SetStateAction} from 'react' -import {ProseMirror} from 'use-prosemirror' -import {EditorState} from 'prosemirror-state' -import {cucumberMarkdownSerializer} from "./markdownSerializer" +import React, { Dispatch, SetStateAction } from 'react' +import { ProseMirror } from 'use-prosemirror' +import { EditorState } from 'prosemirror-state' +import { cucumberMarkdownSerializer } from './markdownSerializer' type Props = { state: EditorState diff --git a/markdown-editor/javascript/src/createTableNode.ts b/markdown-editor/javascript/src/createTableNode.ts index 0699d8ffea1..56709429b88 100644 --- a/markdown-editor/javascript/src/createTableNode.ts +++ b/markdown-editor/javascript/src/createTableNode.ts @@ -1,27 +1,30 @@ -import {Fragment, Schema, Node } from "prosemirror-model"; -import { EditorState } from "prosemirror-state"; +import { Fragment, Schema, Node } from 'prosemirror-model' +import { EditorState } from 'prosemirror-state' export default function createTableNode(state: EditorState): Node { const tableHeader: Node = state.schema.nodes.table_header.create( null, - state.schema.nodes.paragraph.create( - null, - state.schema.text('h') - ) + state.schema.nodes.paragraph.create(null, state.schema.text('h')) ) const tableCell: Node = state.schema.nodes.table_cell.create( null, - state.schema.nodes.paragraph.create( - null, - state.schema.text('c') - ) + state.schema.nodes.paragraph.create(null, state.schema.text('c')) ) return state.schema.nodes.table.create( null, Fragment.fromArray([ - state.schema.nodes.table_row.create(null, Fragment.fromArray([tableHeader, tableHeader, tableHeader])), - state.schema.nodes.table_row.create(null, Fragment.fromArray([tableCell, tableCell, tableCell])), - state.schema.nodes.table_row.create(null, Fragment.fromArray([tableCell, tableCell, tableCell])), + state.schema.nodes.table_row.create( + null, + Fragment.fromArray([tableHeader, tableHeader, tableHeader]) + ), + state.schema.nodes.table_row.create( + null, + Fragment.fromArray([tableCell, tableCell, tableCell]) + ), + state.schema.nodes.table_row.create( + null, + Fragment.fromArray([tableCell, tableCell, tableCell]) + ), ]) - ); + ) } diff --git a/markdown-editor/javascript/src/makeConfig.ts b/markdown-editor/javascript/src/makeConfig.ts index db442818cf1..5e61b96dd97 100644 --- a/markdown-editor/javascript/src/makeConfig.ts +++ b/markdown-editor/javascript/src/makeConfig.ts @@ -1,6 +1,6 @@ import plugins from './plugins' -import makeMarkdownParser from "./makeMarkdownParser"; -import makeGherkinLines from "./makeGherkinLines"; +import makeMarkdownParser from './makeMarkdownParser' +import makeGherkinLines from './makeGherkinLines' export default function makeConfig(markdown: string) { const gherkinLines = makeGherkinLines(markdown) diff --git a/markdown-editor/javascript/src/makeGherkinLines.ts b/markdown-editor/javascript/src/makeGherkinLines.ts index a1c9c281b9b..9c29603597a 100644 --- a/markdown-editor/javascript/src/makeGherkinLines.ts +++ b/markdown-editor/javascript/src/makeGherkinLines.ts @@ -1,8 +1,19 @@ -import {AstBuilder, GherkinInMarkdownTokenMatcher, Parser} from '@cucumber/gherkin'; -import {Background, Examples, Feature, IdGenerator, Rule, Scenario, Step} from '@cucumber/messages'; +import { AstBuilder, GherkinInMarkdownTokenMatcher, Parser } from '@cucumber/gherkin' +import { + Background, + Examples, + Feature, + IdGenerator, + Rule, + Scenario, + Step, +} from '@cucumber/messages' export default function makeGherkinLines(markdown: string): readonly number[] { - const gherkinParser = new Parser(new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher()) + const gherkinParser = new Parser( + new AstBuilder(IdGenerator.uuid()), + new GherkinInMarkdownTokenMatcher() + ) const gherkinLines: number[] = [] try { const gherkinDocument = gherkinParser.parse(markdown) diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts index c4e2a2579a7..2d6c61ad91b 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -1,22 +1,22 @@ import MarkdownIt from 'markdown-it' -import schema from "./schema"; -import {defaultMarkdownParser, MarkdownParser, TokenConfig,} from 'prosemirror-markdown' -import Token from 'markdown-it/lib/token'; +import schema from './schema' +import { defaultMarkdownParser, MarkdownParser, TokenConfig } from 'prosemirror-markdown' +import Token from 'markdown-it/lib/token' export default function makeMarkdownParser(gherkinLines: readonly number[]): MarkdownParser { - const tokens: Record = { + const tokens: Record = { ...defaultMarkdownParser.tokens, ...{ - table: {block: 'table'}, + table: { block: 'table' }, // THEAD and TBODY don't exist in the prosemirror-tables schema - thead: {ignore: true}, - tbody: {ignore: true}, - tr: {block: 'table_row'}, + thead: { ignore: true }, + tbody: { ignore: true }, + tr: { block: 'table_row' }, }, } // Add gherkin property to attrs - for(const tokenName of ['heading', 'list_item']) { + for (const tokenName of ['heading', 'list_item']) { const token = tokens[tokenName] const getAttrs = token.getAttrs token.getAttrs = (token: Token) => { diff --git a/markdown-editor/javascript/src/markdownSerializer.ts b/markdown-editor/javascript/src/markdownSerializer.ts index abb48eb598e..c48200b312d 100644 --- a/markdown-editor/javascript/src/markdownSerializer.ts +++ b/markdown-editor/javascript/src/markdownSerializer.ts @@ -1,5 +1,5 @@ -import {prettyTable, Table} from "./prettyFork"; -import {defaultMarkdownSerializer,} from 'prosemirror-markdown' +import { prettyTable, Table } from './prettyFork' +import { defaultMarkdownSerializer } from 'prosemirror-markdown' export const cucumberMarkdownSerializer = defaultMarkdownSerializer cucumberMarkdownSerializer.nodes['table'] = (state, node) => { diff --git a/markdown-editor/javascript/src/plugins.ts b/markdown-editor/javascript/src/plugins.ts index 2ae7fe70f78..752d40a0130 100644 --- a/markdown-editor/javascript/src/plugins.ts +++ b/markdown-editor/javascript/src/plugins.ts @@ -16,20 +16,20 @@ import { toggleHeaderColumn, toggleHeaderRow, } from 'prosemirror-tables' -import {keymap} from 'prosemirror-keymap' -import {Dropdown, MenuItem} from 'prosemirror-menu' +import { keymap } from 'prosemirror-keymap' +import { Dropdown, MenuItem } from 'prosemirror-menu' import schema from './schema' -import {EditorState, TextSelection, Transaction} from 'prosemirror-state' -import {Schema} from 'prosemirror-model' +import { EditorState, TextSelection, Transaction } from 'prosemirror-state' +import { Schema } from 'prosemirror-model' // @ts-ignore -import {buildMenuItems, exampleSetup} from 'prosemirror-example-setup' -import createTableNode from "./createTableNode"; -import gherkinHighlighting from "./plugins/gherkinHighlighting"; +import { buildMenuItems, exampleSetup } from 'prosemirror-example-setup' +import createTableNode from './createTableNode' +import gherkinHighlighting from './plugins/gherkinHighlighting' const menu = buildMenuItems(schema).fullMenu function item(label: string, cmd: any) { - return new MenuItem({label, select: cmd, run: cmd}) + return new MenuItem({ label, select: cmd, run: cmd }) } const tableMenu = [ @@ -78,7 +78,7 @@ menu.splice(2, 0, [ class: 'ProseMirror-icon', run: insertTable, }), - new Dropdown(tableMenu, {label: 'Table'}), + new Dropdown(tableMenu, { label: 'Table' }), ]) const plugins = [ @@ -88,7 +88,7 @@ const plugins = [ Tab: goToNextCell(1), 'Shift-Tab': goToNextCell(-1), }), - gherkinHighlighting() -].concat(exampleSetup({schema, menuContent: menu})) + gherkinHighlighting(), +].concat(exampleSetup({ schema, menuContent: menu })) export default plugins diff --git a/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts b/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts index 9abd9f78698..d3e016fd67f 100644 --- a/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts +++ b/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts @@ -1,16 +1,16 @@ -import {Node as ProseMirrorNode} from "prosemirror-model"; -import {Plugin, PluginKey} from "prosemirror-state"; -import {Decoration, DecorationSet} from "prosemirror-view"; -import makeGherkinLines from "../makeGherkinLines"; -import makeMarkdownParser from "../makeMarkdownParser"; -import {cucumberMarkdownSerializer} from "../markdownSerializer"; +import { Node as ProseMirrorNode } from 'prosemirror-model' +import { Plugin, PluginKey } from 'prosemirror-state' +import { Decoration, DecorationSet } from 'prosemirror-view' +import makeGherkinLines from '../makeGherkinLines' +import makeMarkdownParser from '../makeMarkdownParser' +import { cucumberMarkdownSerializer } from '../markdownSerializer' interface State { decorations: DecorationSet } export default function gherkinHighlighting(): Plugin { - const key = new PluginKey(); + const key = new PluginKey() return new Plugin({ key, @@ -18,51 +18,47 @@ export default function gherkinHighlighting(): Plugin { state: { init(_, instance) { return { - decorations: DecorationSet.create(instance.doc, makeDecorations(instance.doc,)) - }; + decorations: DecorationSet.create(instance.doc, makeDecorations(instance.doc)), + } }, apply(tr, data) { if (!tr.docChanged) { return { decorations: data.decorations.map(tr.mapping, tr.doc), - }; + } } return { decorations: DecorationSet.create(tr.doc, makeDecorations(tr.doc)), - }; + } }, }, props: { decorations(state) { - return this.getState(state).decorations; + return this.getState(state).decorations }, - } + }, }) } -function makeDecorations( - doc: ProseMirrorNode, -): Decoration[] { +function makeDecorations(doc: ProseMirrorNode): Decoration[] { if (!doc || !doc.nodeSize) { - return []; + return [] } const markdown = cucumberMarkdownSerializer.serialize(doc) const gherkinLines = makeGherkinLines(markdown) const markdownParser = makeMarkdownParser(gherkinLines) - const newDoc = markdownParser.parse(markdown) + const parsedDoc = markdownParser.parse(markdown) - const decorations: Decoration[] = []; + const decorations: Decoration[] = [] - newDoc.descendants((node, pos) => { + parsedDoc.descendants((node, pos) => { if (node.attrs.gherkin) { - decorations.push(Decoration.node(pos, pos + node.nodeSize, {class: 'gherkin'})) + decorations.push(Decoration.node(pos, pos + node.nodeSize, { class: 'gherkin' })) } }) - console.log('DECS', decorations.length) - return decorations } diff --git a/markdown-editor/javascript/src/prettyFork.ts b/markdown-editor/javascript/src/prettyFork.ts index 9fbb28edcf6..a9686df9db6 100644 --- a/markdown-editor/javascript/src/prettyFork.ts +++ b/markdown-editor/javascript/src/prettyFork.ts @@ -19,37 +19,26 @@ export function computeCellWidths(tableRows: Table): Widths { } export function markdownSeparatorRow(row: Row, widths: Widths): Row { - return row.map((cell, j) => ( - new Array(widths[j] + 1).join('-')) - ) + return row.map((cell, j) => new Array(widths[j] + 1).join('-')) } -export function prettyTable( - table: Table, - level: number, - syntax: Syntax -) { +export function prettyTable(table: Table, level: number, syntax: Syntax) { const widths = computeCellWidths(table) let n = 0 let s = '' for (const row of table) { - s += prettyTableRow(row, level, widths, syntax) + s += prettyTableRow(row, level, widths) if (n === 0 && syntax === 'markdown') { const separatorRow = markdownSeparatorRow(row, widths) - s += prettyTableRow(separatorRow, level, widths, syntax) + s += prettyTableRow(separatorRow, level, widths) } n++ } return s } -export function prettyTableRow( - row: Row, - level: number, - widths: Widths, - syntax: Syntax -): string { +export function prettyTableRow(row: Row, level: number, widths: Widths): string { return `${spaces(level)}| ${row .map((cell, j) => { const escapedCellValue = escapeCell(cell) diff --git a/markdown-editor/javascript/src/schema.ts b/markdown-editor/javascript/src/schema.ts index db2682fe037..364f591d716 100644 --- a/markdown-editor/javascript/src/schema.ts +++ b/markdown-editor/javascript/src/schema.ts @@ -1,6 +1,6 @@ -import {schema as markdownSchema,} from 'prosemirror-markdown' -import {Schema} from 'prosemirror-model' -import {tableNodes} from 'prosemirror-tables' +import { schema as markdownSchema } from 'prosemirror-markdown' +import { Schema } from 'prosemirror-model' +import { tableNodes } from 'prosemirror-tables' // @ts-ignore const nodes = markdownSchema.spec.nodes.append( @@ -12,7 +12,7 @@ const nodes = markdownSchema.spec.nodes.append( ) // Update node specs to include a gherkin attribute which defaults to false -for(const nodeName of ['heading', 'list_item']) { +for (const nodeName of ['heading', 'list_item']) { nodes.get(nodeName).attrs = { ...nodes.get(nodeName).attrs, gherkin: { default: false } } } @@ -20,4 +20,3 @@ export default new Schema({ nodes, marks: markdownSchema.spec.marks, }) - diff --git a/markdown-editor/javascript/test/createTableNode.test.ts b/markdown-editor/javascript/test/createTableNode.test.ts index 7da10cb2764..2a4244954b7 100644 --- a/markdown-editor/javascript/test/createTableNode.test.ts +++ b/markdown-editor/javascript/test/createTableNode.test.ts @@ -1,8 +1,8 @@ -import {EditorState, Transaction} from "prosemirror-state"; -import createTableNode from "../src/createTableNode"; -import makeConfig from "../src/makeConfig"; -import assert from "assert"; -import {cucumberMarkdownSerializer} from "../src/markdownSerializer"; +import { EditorState, Transaction } from 'prosemirror-state' +import createTableNode from '../src/createTableNode' +import makeConfig from '../src/makeConfig' +import assert from 'assert' +import { cucumberMarkdownSerializer } from '../src/markdownSerializer' describe('createTableNode', () => { it('creates a table node that can be turned into markdown', () => { @@ -11,10 +11,13 @@ describe('createTableNode', () => { transaction.replaceSelectionWith(createTableNode(state)) const markdown = cucumberMarkdownSerializer.serialize(transaction.doc) - assert.strictEqual(markdown, `| h | h | h | + assert.strictEqual( + markdown, + `| h | h | h | | - | - | - | | c | c | c | | c | c | c | -`) +` + ) }) }) diff --git a/markdown-editor/javascript/test/tableSerialization.test.ts b/markdown-editor/javascript/test/tableSerialization.test.ts index 4b66bed8a21..04b4956473c 100644 --- a/markdown-editor/javascript/test/tableSerialization.test.ts +++ b/markdown-editor/javascript/test/tableSerialization.test.ts @@ -1,9 +1,9 @@ import assert from 'assert' -import {JSDOM} from 'jsdom' +import { JSDOM } from 'jsdom' import schema from '../src/schema' -import {DOMParser} from 'prosemirror-model' -import makeMarkdownParser from "../src/makeMarkdownParser"; -import {cucumberMarkdownSerializer} from "../src/markdownSerializer"; +import { DOMParser } from 'prosemirror-model' +import makeMarkdownParser from '../src/makeMarkdownParser' +import { cucumberMarkdownSerializer } from '../src/markdownSerializer' describe('table serialization', () => { it('can serialize a table', () => { @@ -38,7 +38,7 @@ describe('table serialization', () => { | Un | Deux | | En | To | ` - const parser = makeMarkdownParser([]); + const parser = makeMarkdownParser([]) const doc = parser.parse(markdown) const newMarkdown = cucumberMarkdownSerializer.serialize(doc) assert.strictEqual(newMarkdown, markdown) From c84864d1a1f4e0666ed3a03f5aae292536a0f61a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Mon, 21 Jun 2021 23:11:35 +0100 Subject: [PATCH 24/25] Cleanup --- .../CucumberMarkdownProseMirror.tsx | 0 .../MarkdownSimpleCodeEditor.tsx | 0 .../src/{ => markdown}/makeGherkinLines.ts | 25 ++++++++++++++++--- .../src/{ => markdown}/makeMarkdownParser.ts | 3 ++- .../src/{ => markdown}/markdownSerializer.ts | 0 .../javascript/src/markdown/parseMarkdown.ts | 16 ++++++++++++ .../src/{ => markdown}/prettyFork.ts | 0 .../src/{ => table}/createTableNode.ts | 8 +++--- 8 files changed, 44 insertions(+), 8 deletions(-) rename markdown-editor/javascript/src/{ => components}/CucumberMarkdownProseMirror.tsx (100%) rename markdown-editor/javascript/src/{ => components}/MarkdownSimpleCodeEditor.tsx (100%) rename markdown-editor/javascript/src/{ => markdown}/makeGherkinLines.ts (83%) rename markdown-editor/javascript/src/{ => markdown}/makeMarkdownParser.ts (90%) rename markdown-editor/javascript/src/{ => markdown}/markdownSerializer.ts (100%) create mode 100644 markdown-editor/javascript/src/markdown/parseMarkdown.ts rename markdown-editor/javascript/src/{ => markdown}/prettyFork.ts (100%) rename markdown-editor/javascript/src/{ => table}/createTableNode.ts (73%) diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/components/CucumberMarkdownProseMirror.tsx similarity index 100% rename from markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx rename to markdown-editor/javascript/src/components/CucumberMarkdownProseMirror.tsx diff --git a/markdown-editor/javascript/src/MarkdownSimpleCodeEditor.tsx b/markdown-editor/javascript/src/components/MarkdownSimpleCodeEditor.tsx similarity index 100% rename from markdown-editor/javascript/src/MarkdownSimpleCodeEditor.tsx rename to markdown-editor/javascript/src/components/MarkdownSimpleCodeEditor.tsx diff --git a/markdown-editor/javascript/src/makeGherkinLines.ts b/markdown-editor/javascript/src/markdown/makeGherkinLines.ts similarity index 83% rename from markdown-editor/javascript/src/makeGherkinLines.ts rename to markdown-editor/javascript/src/markdown/makeGherkinLines.ts index 9c29603597a..016622fd3ef 100644 --- a/markdown-editor/javascript/src/makeGherkinLines.ts +++ b/markdown-editor/javascript/src/markdown/makeGherkinLines.ts @@ -9,7 +9,20 @@ import { Step, } from '@cucumber/messages' -export default function makeGherkinLines(markdown: string): readonly number[] { +export type Result = { + gherkinLines: GherkinLines + parseError?: ParseError +} + +export type GherkinLines = readonly number[] + +export type ParseError = { + line: number + message: string +} + + +export default function makeGherkinLines(markdown: string): Result { const gherkinParser = new Parser( new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher() @@ -20,13 +33,19 @@ export default function makeGherkinLines(markdown: string): readonly number[] { if (gherkinDocument.feature) { walkFeature(gherkinDocument.feature, gherkinLines) } + return { gherkinLines } } catch (parseError) { console.log(parseError.message) console.log('---') console.log(markdown) - // ignore + return { + gherkinLines: [], + parseError: { + line: 22, + message: parseError.message + } + } } - return gherkinLines } function walkFeature(feature: Feature, gherkinLines: number[]) { diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/markdown/makeMarkdownParser.ts similarity index 90% rename from markdown-editor/javascript/src/makeMarkdownParser.ts rename to markdown-editor/javascript/src/markdown/makeMarkdownParser.ts index 2d6c61ad91b..1e6fb0bd1da 100644 --- a/markdown-editor/javascript/src/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/markdown/makeMarkdownParser.ts @@ -2,8 +2,9 @@ import MarkdownIt from 'markdown-it' import schema from './schema' import { defaultMarkdownParser, MarkdownParser, TokenConfig } from 'prosemirror-markdown' import Token from 'markdown-it/lib/token' +import {GherkinLines, ParseError} from "./makeGherkinLines"; -export default function makeMarkdownParser(gherkinLines: readonly number[]): MarkdownParser { +export default function makeMarkdownParser(gherkinLines: GherkinLines, parseError: ParseError | undefined): MarkdownParser { const tokens: Record = { ...defaultMarkdownParser.tokens, ...{ diff --git a/markdown-editor/javascript/src/markdownSerializer.ts b/markdown-editor/javascript/src/markdown/markdownSerializer.ts similarity index 100% rename from markdown-editor/javascript/src/markdownSerializer.ts rename to markdown-editor/javascript/src/markdown/markdownSerializer.ts diff --git a/markdown-editor/javascript/src/markdown/parseMarkdown.ts b/markdown-editor/javascript/src/markdown/parseMarkdown.ts new file mode 100644 index 00000000000..0e8115f2a5c --- /dev/null +++ b/markdown-editor/javascript/src/markdown/parseMarkdown.ts @@ -0,0 +1,16 @@ +import {Node as ProseMirrorNode} from 'prosemirror-model' +import makeGherkinLines from "../makeGherkinLines"; +import makeMarkdownParser from "../makeMarkdownParser"; + +/** + * Parses a Gherkin Markdown string into a ProseMirror document, adding special + * node attributes to indicate gherkin content or parse error. These attributes + * are used by the gherkinHighlighting plugin. + * + * @param markdown + */ +export default function parseMarkdown(markdown: string): ProseMirrorNode { + const {gherkinLines, parseError} = makeGherkinLines(markdown) + const markdownParser = makeMarkdownParser(gherkinLines, parseError) + return markdownParser.parse(markdown); +} diff --git a/markdown-editor/javascript/src/prettyFork.ts b/markdown-editor/javascript/src/markdown/prettyFork.ts similarity index 100% rename from markdown-editor/javascript/src/prettyFork.ts rename to markdown-editor/javascript/src/markdown/prettyFork.ts diff --git a/markdown-editor/javascript/src/createTableNode.ts b/markdown-editor/javascript/src/table/createTableNode.ts similarity index 73% rename from markdown-editor/javascript/src/createTableNode.ts rename to markdown-editor/javascript/src/table/createTableNode.ts index 56709429b88..1f9fa517eba 100644 --- a/markdown-editor/javascript/src/createTableNode.ts +++ b/markdown-editor/javascript/src/table/createTableNode.ts @@ -1,12 +1,12 @@ -import { Fragment, Schema, Node } from 'prosemirror-model' +import { Fragment, Schema, Node as ProsemirrorNode } from 'prosemirror-model' import { EditorState } from 'prosemirror-state' -export default function createTableNode(state: EditorState): Node { - const tableHeader: Node = state.schema.nodes.table_header.create( +export default function createTableNode(state: EditorState): ProsemirrorNode { + const tableHeader: ProsemirrorNode = state.schema.nodes.table_header.create( null, state.schema.nodes.paragraph.create(null, state.schema.text('h')) ) - const tableCell: Node = state.schema.nodes.table_cell.create( + const tableCell: ProsemirrorNode = state.schema.nodes.table_cell.create( null, state.schema.nodes.paragraph.create(null, state.schema.text('c')) ) From f430d5199c70626c309589953519f542764708ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 22 Jun 2021 08:44:27 +0100 Subject: [PATCH 25/25] Formatting --- .../CucumberMarkdownProseMirror.tsx | 4 +-- .../components/MarkdownSimpleCodeEditor.tsx | 2 +- markdown-editor/javascript/src/index.ts | 2 +- markdown-editor/javascript/src/makeConfig.ts | 8 ++---- .../src/markdown/makeGherkinLines.ts | 26 ++++++++++++------- .../src/markdown/makeMarkdownParser.ts | 6 ++--- .../src/markdown/markdownSerializer.ts | 7 ++++- .../javascript/src/markdown/parseMarkdown.ts | 14 +++++----- .../javascript/src/markdown/prettyFork.ts | 12 ++++----- markdown-editor/javascript/src/plugins.ts | 2 +- .../src/plugins/gherkinHighlighting.ts | 15 ++++++----- markdown-editor/javascript/src/schema.ts | 10 ++++--- .../CucumberMarkdownProseMirror.stories.tsx | 4 +-- markdown-editor/javascript/src/styles.css | 5 ++++ .../javascript/test/createTableNode.test.ts | 4 +-- .../test/tableSerialization.test.ts | 4 +-- 16 files changed, 73 insertions(+), 52 deletions(-) diff --git a/markdown-editor/javascript/src/components/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/components/CucumberMarkdownProseMirror.tsx index 89b7b193f67..18054a3af16 100644 --- a/markdown-editor/javascript/src/components/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/components/CucumberMarkdownProseMirror.tsx @@ -2,12 +2,12 @@ import 'prosemirror-view/style/prosemirror.css' import 'prosemirror-example-setup/style/style.css' import 'prosemirror-menu/style/menu.css' import 'prosemirror-tables/style/tables.css' -import './styles.css' +import '../styles.css' import React, { Dispatch, SetStateAction } from 'react' import { ProseMirror } from 'use-prosemirror' import { EditorState } from 'prosemirror-state' -import { cucumberMarkdownSerializer } from './markdownSerializer' +import { cucumberMarkdownSerializer } from '../markdown/markdownSerializer' type Props = { state: EditorState diff --git a/markdown-editor/javascript/src/components/MarkdownSimpleCodeEditor.tsx b/markdown-editor/javascript/src/components/MarkdownSimpleCodeEditor.tsx index a1c32bf5c59..f01849481b4 100644 --- a/markdown-editor/javascript/src/components/MarkdownSimpleCodeEditor.tsx +++ b/markdown-editor/javascript/src/components/MarkdownSimpleCodeEditor.tsx @@ -7,7 +7,7 @@ import 'prismjs/components/prism-markdown' import 'prismjs/themes/prism.css' import { EditorState } from 'prosemirror-state' -import makeConfig from './makeConfig' +import makeConfig from '../makeConfig' type Props = { markdown: string diff --git a/markdown-editor/javascript/src/index.ts b/markdown-editor/javascript/src/index.ts index f4416ad68ee..8afdbd2d949 100644 --- a/markdown-editor/javascript/src/index.ts +++ b/markdown-editor/javascript/src/index.ts @@ -1,3 +1,3 @@ -import CucumberMarkdownProseMirror from './CucumberMarkdownProseMirror' +import CucumberMarkdownProseMirror from './components/CucumberMarkdownProseMirror' export { CucumberMarkdownProseMirror } diff --git a/markdown-editor/javascript/src/makeConfig.ts b/markdown-editor/javascript/src/makeConfig.ts index 5e61b96dd97..78046d665a2 100644 --- a/markdown-editor/javascript/src/makeConfig.ts +++ b/markdown-editor/javascript/src/makeConfig.ts @@ -1,12 +1,8 @@ import plugins from './plugins' -import makeMarkdownParser from './makeMarkdownParser' -import makeGherkinLines from './makeGherkinLines' +import parseMarkdown from './markdown/parseMarkdown' export default function makeConfig(markdown: string) { - const gherkinLines = makeGherkinLines(markdown) - - const markdownParser = makeMarkdownParser(gherkinLines) - const doc = markdownParser.parse(markdown) + const doc = parseMarkdown(markdown) return { doc, diff --git a/markdown-editor/javascript/src/markdown/makeGherkinLines.ts b/markdown-editor/javascript/src/markdown/makeGherkinLines.ts index 016622fd3ef..24bce230b6a 100644 --- a/markdown-editor/javascript/src/markdown/makeGherkinLines.ts +++ b/markdown-editor/javascript/src/markdown/makeGherkinLines.ts @@ -21,12 +21,13 @@ export type ParseError = { message: string } - export default function makeGherkinLines(markdown: string): Result { const gherkinParser = new Parser( new AstBuilder(IdGenerator.uuid()), new GherkinInMarkdownTokenMatcher() ) + gherkinParser.stopAtFirstError = true + const gherkinLines: number[] = [] try { const gherkinDocument = gherkinParser.parse(markdown) @@ -34,16 +35,23 @@ export default function makeGherkinLines(markdown: string): Result { walkFeature(gherkinDocument.feature, gherkinLines) } return { gherkinLines } - } catch (parseError) { - console.log(parseError.message) - console.log('---') - console.log(markdown) + } catch (error) { + const match = error.message.match(/^\(([\d]+):\d+\)/) + if (!match) { + throw new Error('Got a parse error we could not understand') + } + const line = +match[1] + + const parseError: ParseError = { + line, + message: error.message, + } + + console.error(parseError) + return { gherkinLines: [], - parseError: { - line: 22, - message: parseError.message - } + parseError, } } } diff --git a/markdown-editor/javascript/src/markdown/makeMarkdownParser.ts b/markdown-editor/javascript/src/markdown/makeMarkdownParser.ts index 1e6fb0bd1da..475be52403f 100644 --- a/markdown-editor/javascript/src/markdown/makeMarkdownParser.ts +++ b/markdown-editor/javascript/src/markdown/makeMarkdownParser.ts @@ -1,10 +1,10 @@ import MarkdownIt from 'markdown-it' -import schema from './schema' +import schema from '../schema' import { defaultMarkdownParser, MarkdownParser, TokenConfig } from 'prosemirror-markdown' import Token from 'markdown-it/lib/token' -import {GherkinLines, ParseError} from "./makeGherkinLines"; +import { GherkinLines } from './makeGherkinLines' -export default function makeMarkdownParser(gherkinLines: GherkinLines, parseError: ParseError | undefined): MarkdownParser { +export default function makeMarkdownParser(gherkinLines: GherkinLines): MarkdownParser { const tokens: Record = { ...defaultMarkdownParser.tokens, ...{ diff --git a/markdown-editor/javascript/src/markdown/markdownSerializer.ts b/markdown-editor/javascript/src/markdown/markdownSerializer.ts index c48200b312d..86ab99cbaab 100644 --- a/markdown-editor/javascript/src/markdown/markdownSerializer.ts +++ b/markdown-editor/javascript/src/markdown/markdownSerializer.ts @@ -5,7 +5,12 @@ export const cucumberMarkdownSerializer = defaultMarkdownSerializer cucumberMarkdownSerializer.nodes['table'] = (state, node) => { const table: Table = node.toJSON().content.map((row: any) => { return row.content.map((row: any) => { - return row.content[0].content[0].text + try { + return row.content[0].content[0].text + } catch { + // Lazy hack for empty cell contents + return '' + } }) }) const markdownTable = prettyTable(table, 0, 'markdown') diff --git a/markdown-editor/javascript/src/markdown/parseMarkdown.ts b/markdown-editor/javascript/src/markdown/parseMarkdown.ts index 0e8115f2a5c..8863b50a6bf 100644 --- a/markdown-editor/javascript/src/markdown/parseMarkdown.ts +++ b/markdown-editor/javascript/src/markdown/parseMarkdown.ts @@ -1,16 +1,16 @@ -import {Node as ProseMirrorNode} from 'prosemirror-model' -import makeGherkinLines from "../makeGherkinLines"; -import makeMarkdownParser from "../makeMarkdownParser"; +import { Node as ProseMirrorNode } from 'prosemirror-model' +import makeGherkinLines from './makeGherkinLines' +import makeMarkdownParser from './makeMarkdownParser' /** * Parses a Gherkin Markdown string into a ProseMirror document, adding special - * node attributes to indicate gherkin content or parse error. These attributes + * node attributes to indicate gherkin content. These attributes * are used by the gherkinHighlighting plugin. * * @param markdown */ export default function parseMarkdown(markdown: string): ProseMirrorNode { - const {gherkinLines, parseError} = makeGherkinLines(markdown) - const markdownParser = makeMarkdownParser(gherkinLines, parseError) - return markdownParser.parse(markdown); + const { gherkinLines } = makeGherkinLines(markdown) + const markdownParser = makeMarkdownParser(gherkinLines) + return markdownParser.parse(markdown) } diff --git a/markdown-editor/javascript/src/markdown/prettyFork.ts b/markdown-editor/javascript/src/markdown/prettyFork.ts index a9686df9db6..e001f5380a9 100644 --- a/markdown-editor/javascript/src/markdown/prettyFork.ts +++ b/markdown-editor/javascript/src/markdown/prettyFork.ts @@ -4,9 +4,9 @@ export type Syntax = 'markdown' | 'gherkin' export type Table = readonly Row[] -type Row = readonly Cell[] -type Cell = string -type Widths = readonly number[] +export type Row = readonly Cell[] +export type Cell = string +export type Widths = readonly number[] export function computeCellWidths(tableRows: Table): Widths { const widths: number[] = new Array(tableRows[0].length).fill(0) @@ -42,9 +42,9 @@ export function prettyTableRow(row: Row, level: number, widths: Widths): string return `${spaces(level)}| ${row .map((cell, j) => { const escapedCellValue = escapeCell(cell) - const spaceCount = widths[j] - escapedCellValue.length - const spaces = new Array(spaceCount + 1).join(' ') - return isNumeric(escapedCellValue) ? spaces + escapedCellValue : escapedCellValue + spaces + const paddingCount = widths[j] - escapedCellValue.length + const padding = new Array(paddingCount + 1).join(' ') + return isNumeric(escapedCellValue) ? padding + escapedCellValue : escapedCellValue + padding }) .join(' | ')} |\n` } diff --git a/markdown-editor/javascript/src/plugins.ts b/markdown-editor/javascript/src/plugins.ts index 752d40a0130..93c49530579 100644 --- a/markdown-editor/javascript/src/plugins.ts +++ b/markdown-editor/javascript/src/plugins.ts @@ -23,7 +23,7 @@ import { EditorState, TextSelection, Transaction } from 'prosemirror-state' import { Schema } from 'prosemirror-model' // @ts-ignore import { buildMenuItems, exampleSetup } from 'prosemirror-example-setup' -import createTableNode from './createTableNode' +import createTableNode from './table/createTableNode' import gherkinHighlighting from './plugins/gherkinHighlighting' const menu = buildMenuItems(schema).fullMenu diff --git a/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts b/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts index d3e016fd67f..c6b17a6b972 100644 --- a/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts +++ b/markdown-editor/javascript/src/plugins/gherkinHighlighting.ts @@ -1,14 +1,16 @@ import { Node as ProseMirrorNode } from 'prosemirror-model' import { Plugin, PluginKey } from 'prosemirror-state' import { Decoration, DecorationSet } from 'prosemirror-view' -import makeGherkinLines from '../makeGherkinLines' -import makeMarkdownParser from '../makeMarkdownParser' -import { cucumberMarkdownSerializer } from '../markdownSerializer' +import { cucumberMarkdownSerializer } from '../markdown/markdownSerializer' +import parseMarkdown from '../markdown/parseMarkdown' interface State { decorations: DecorationSet } +/** + * ProseMirror plugin that highlights Gherkin lines + */ export default function gherkinHighlighting(): Plugin { const key = new PluginKey() @@ -48,9 +50,7 @@ function makeDecorations(doc: ProseMirrorNode): Decoration[] { return [] } const markdown = cucumberMarkdownSerializer.serialize(doc) - const gherkinLines = makeGherkinLines(markdown) - const markdownParser = makeMarkdownParser(gherkinLines) - const parsedDoc = markdownParser.parse(markdown) + const parsedDoc = parseMarkdown(markdown) const decorations: Decoration[] = [] @@ -58,6 +58,9 @@ function makeDecorations(doc: ProseMirrorNode): Decoration[] { if (node.attrs.gherkin) { decorations.push(Decoration.node(pos, pos + node.nodeSize, { class: 'gherkin' })) } + if (node.attrs.error) { + decorations.push(Decoration.node(pos, pos + node.nodeSize, { class: 'error' })) + } }) return decorations diff --git a/markdown-editor/javascript/src/schema.ts b/markdown-editor/javascript/src/schema.ts index 364f591d716..fe4d54804f5 100644 --- a/markdown-editor/javascript/src/schema.ts +++ b/markdown-editor/javascript/src/schema.ts @@ -11,9 +11,13 @@ const nodes = markdownSchema.spec.nodes.append( }) ) -// Update node specs to include a gherkin attribute which defaults to false -for (const nodeName of ['heading', 'list_item']) { - nodes.get(nodeName).attrs = { ...nodes.get(nodeName).attrs, gherkin: { default: false } } +// Update node specs to include gherkin and error attributes which defaults to false +for (const nodeName of ['heading', 'list_item', 'table_row']) { + nodes.get(nodeName).attrs = { + ...nodes.get(nodeName).attrs, + gherkin: { default: false }, + error: { default: false }, + } } export default new Schema({ diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 49964e3b033..393d54dcbc0 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -1,9 +1,9 @@ import React, { useState } from 'react' import { Meta, Story } from '@storybook/react' -import CucumberMarkdownProseMirror from '../CucumberMarkdownProseMirror' +import CucumberMarkdownProseMirror from '../components/CucumberMarkdownProseMirror' import { useProseMirror } from 'use-prosemirror' import makeConfig from '../makeConfig' -import MarkdownSimpleCodeEditor from '../MarkdownSimpleCodeEditor' +import MarkdownSimpleCodeEditor from '../components/MarkdownSimpleCodeEditor' export default { title: 'CucumberMarkdownProseMirror', diff --git a/markdown-editor/javascript/src/styles.css b/markdown-editor/javascript/src/styles.css index b82bf0f4101..876bdff8a7d 100644 --- a/markdown-editor/javascript/src/styles.css +++ b/markdown-editor/javascript/src/styles.css @@ -34,3 +34,8 @@ .ProseMirror .gherkin { color: darkorchid; } + +/* DOM nodes derived from a GherkinDocument have this class */ +.ProseMirror .error { + color: crimson; +} diff --git a/markdown-editor/javascript/test/createTableNode.test.ts b/markdown-editor/javascript/test/createTableNode.test.ts index 2a4244954b7..9ab578aa276 100644 --- a/markdown-editor/javascript/test/createTableNode.test.ts +++ b/markdown-editor/javascript/test/createTableNode.test.ts @@ -1,8 +1,8 @@ import { EditorState, Transaction } from 'prosemirror-state' -import createTableNode from '../src/createTableNode' +import createTableNode from '../src/table/createTableNode' import makeConfig from '../src/makeConfig' import assert from 'assert' -import { cucumberMarkdownSerializer } from '../src/markdownSerializer' +import { cucumberMarkdownSerializer } from '../src/markdown/markdownSerializer' describe('createTableNode', () => { it('creates a table node that can be turned into markdown', () => { diff --git a/markdown-editor/javascript/test/tableSerialization.test.ts b/markdown-editor/javascript/test/tableSerialization.test.ts index 04b4956473c..0840533bc0a 100644 --- a/markdown-editor/javascript/test/tableSerialization.test.ts +++ b/markdown-editor/javascript/test/tableSerialization.test.ts @@ -2,8 +2,8 @@ import assert from 'assert' import { JSDOM } from 'jsdom' import schema from '../src/schema' import { DOMParser } from 'prosemirror-model' -import makeMarkdownParser from '../src/makeMarkdownParser' -import { cucumberMarkdownSerializer } from '../src/markdownSerializer' +import makeMarkdownParser from '../src/markdown/makeMarkdownParser' +import { cucumberMarkdownSerializer } from '../src/markdown/markdownSerializer' describe('table serialization', () => { it('can serialize a table', () => {

I#f$-Z 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 Ks;GJ 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�X} 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 deni(qc+cHOS~KR_eyp+$)A2{{w@5f>;0m diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 9bc988a65f7..120c3f7f275 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -39,10 +39,10 @@ Let's use some tables * Given the following people - | Name | Age | - | ----- | --- | - | Jill | 1 | - | Bob | 10 | - | Sally | 100 | + | Name | Number | + | ----- | ------ | + | Jill | 1 | + | Bob | 10 | + | Sally | 100 | `, } From 6a475cfd73f09bfcfc8624e4ec6d66b57af00f79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Sat, 19 Jun 2021 00:20:45 +0100 Subject: [PATCH 15/25] Add Gherkin, split things up --- markdown-editor/javascript/package.json | 2 + .../src/CucumberMarkdownProseMirror.tsx | 5 +- .../javascript/src/cucumberMarkdown.ts | 86 ------------------- markdown-editor/javascript/src/makeConfig.ts | 6 +- .../javascript/src/makeMarkdownParser.ts | 49 +++++++++++ .../javascript/src/markdownSerializer.ts | 13 +++ markdown-editor/javascript/src/plugins.ts | 2 +- markdown-editor/javascript/src/schema.ts | 30 +++++++ .../CucumberMarkdownProseMirror.stories.tsx | 4 +- .../javascript/src/useGherkinDocument.ts | 18 ++++ .../javascript/test/createTableNode.test.ts | 4 +- .../test/tableSerialization.test.ts | 15 ++-- package-lock.json | 4 + 13 files changed, 137 insertions(+), 101 deletions(-) delete mode 100644 markdown-editor/javascript/src/cucumberMarkdown.ts create mode 100644 markdown-editor/javascript/src/makeMarkdownParser.ts create mode 100644 markdown-editor/javascript/src/markdownSerializer.ts create mode 100644 markdown-editor/javascript/src/schema.ts create mode 100644 markdown-editor/javascript/src/useGherkinDocument.ts diff --git a/markdown-editor/javascript/package.json b/markdown-editor/javascript/package.json index cbdc58bd83a..5cc4a5cb446 100644 --- a/markdown-editor/javascript/package.json +++ b/markdown-editor/javascript/package.json @@ -16,6 +16,8 @@ "build-storybook": "build-storybook" }, "dependencies": { + "@cucumber/gherkin": "19.0.3", + "@cucumber/messages": "16.0.1", "@types/prosemirror-commands": "1.0.4", "@types/prosemirror-history": "1.0.2", "@types/prosemirror-keymap": "1.0.4", diff --git a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx index 0bcd46fb703..c69611be4fa 100644 --- a/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx +++ b/markdown-editor/javascript/src/CucumberMarkdownProseMirror.tsx @@ -6,13 +6,16 @@ import './styles.css' import React, { Dispatch, SetStateAction } from 'react' import { ProseMirror } from 'use-prosemirror' -import { cucumberMarkdownSerializer } from './cucumberMarkdown' +import schema from './schema' import { EditorState } from 'prosemirror-state' +import {GherkinDocument } from '@cucumber/messages' +import {cucumberMarkdownSerializer} from "./markdownSerializer"; type Props = { state: EditorState setState: Dispatch> setMarkdown: Dispatch> + gherkinDocument: GherkinDocument } const CucumberMarkdownProseMirror: React.FunctionComponent = ({ diff --git a/markdown-editor/javascript/src/cucumberMarkdown.ts b/markdown-editor/javascript/src/cucumberMarkdown.ts deleted file mode 100644 index ee32a20111d..00000000000 --- a/markdown-editor/javascript/src/cucumberMarkdown.ts +++ /dev/null @@ -1,86 +0,0 @@ -import MarkdownIt from 'markdown-it' -import { - defaultMarkdownParser, - defaultMarkdownSerializer, - MarkdownParser, - schema as markdownSchema, -} from 'prosemirror-markdown' -import {Schema} from 'prosemirror-model' -import {tableNodes} from 'prosemirror-tables' -import {prettyTable, Table} from "./prettyFork"; - -export const schema = new Schema({ - // @ts-ignore - nodes: markdownSchema.spec.nodes.append( - tableNodes({ - tableGroup: 'block', - // Examples suggest block+ but we want to restrict to a single paragraph (single line) - // TODO: Investigate if we can restrict to a span, if such a thing exists in prosemirror - cellContent: 'paragraph', - cellAttributes: { - background: { - default: null, - getFromDOM(dom) { - // @ts-ignore - return (dom.style && dom.style.backgroundColor) || null - }, - setDOMAttr(value, attrs) { - if (value) attrs.style = (attrs.style || '') + `background-color: ${value};` - }, - }, - }, - }) - ), - marks: markdownSchema.spec.marks, -}) - -const tokens = { - ...defaultMarkdownParser.tokens, - ...{ - table: { block: 'table' }, - // THEAD and TBODY don't exist in the prosemirror-tables schema - thead: { ignore: true }, - tbody: { ignore: true }, - tr: { block: 'table_row' }, - }, -} -export const cucumberMarkdownParser = new MarkdownParser(schema, new MarkdownIt(), tokens) - -// @ts-ignore -cucumberMarkdownParser.tokenHandlers['th_open'] = function (state) { - // @ts-ignore - state.openNode(schema.nodeType('table_header')) - // @ts-ignore - state.openNode(schema.nodeType('paragraph')) -} - -// @ts-ignore -cucumberMarkdownParser.tokenHandlers['th_close'] = function (state) { - state.closeNode() - state.closeNode() -} - -// @ts-ignore -cucumberMarkdownParser.tokenHandlers['td_open'] = function (state) { - // @ts-ignore - state.openNode(schema.nodeType('table_cell')) - // @ts-ignore - state.openNode(schema.nodeType('paragraph')) -} - -// @ts-ignore -cucumberMarkdownParser.tokenHandlers['td_close'] = function (state) { - state.closeNode() - state.closeNode() -} - -export const cucumberMarkdownSerializer = defaultMarkdownSerializer -cucumberMarkdownSerializer.nodes['table'] = (state, node) => { - const table: Table = node.toJSON().content.map((row: any) => { - return row.content.map((row: any) => { - return row.content[0].content[0].text - }) - }) - const markdownTable = prettyTable(table, 0, 'markdown') - state.text(markdownTable) -} diff --git a/markdown-editor/javascript/src/makeConfig.ts b/markdown-editor/javascript/src/makeConfig.ts index f003accb009..336cdc0802d 100644 --- a/markdown-editor/javascript/src/makeConfig.ts +++ b/markdown-editor/javascript/src/makeConfig.ts @@ -1,9 +1,11 @@ -import { cucumberMarkdownParser } from './cucumberMarkdown' import plugins from './plugins' +import makeMarkdownParser from "./makeMarkdownParser"; export default function makeConfig(markdown: string) { + const parser = makeMarkdownParser(); + const doc = parser.parse(markdown); return { - doc: cucumberMarkdownParser.parse(markdown), + doc, plugins, } } diff --git a/markdown-editor/javascript/src/makeMarkdownParser.ts b/markdown-editor/javascript/src/makeMarkdownParser.ts new file mode 100644 index 00000000000..a9efb6058e5 --- /dev/null +++ b/markdown-editor/javascript/src/makeMarkdownParser.ts @@ -0,0 +1,49 @@ +import MarkdownIt from 'markdown-it' +import schema from "./schema"; +import {defaultMarkdownParser, MarkdownParser,} from 'prosemirror-markdown' + +export default function makeMarkdownParser() { + + const tokens = { + ...defaultMarkdownParser.tokens, + ...{ + table: {block: 'table'}, + // THEAD and TBODY don't exist in the prosemirror-tables schema + thead: {ignore: true}, + tbody: {ignore: true}, + tr: {block: 'table_row'}, + }, + } + + const parser = new MarkdownParser(schema, new MarkdownIt(), tokens) + +// @ts-ignore + parser.tokenHandlers['th_open'] = function (state) { + // @ts-ignore + state.openNode(schema.nodeType('table_header')) + // @ts-ignore + state.openNode(schema.nodeType('paragraph')) + } + +// @ts-ignore + parser.tokenHandlers['th_close'] = function (state) { + state.closeNode() + state.closeNode() + } + +// @ts-ignore + parser.tokenHandlers['td_open'] = function (state) { + // @ts-ignore + state.openNode(schema.nodeType('table_cell')) + // @ts-ignore + state.openNode(schema.nodeType('paragraph')) + } + +// @ts-ignore + parser.tokenHandlers['td_close'] = function (state) { + state.closeNode() + state.closeNode() + } + + return parser +} diff --git a/markdown-editor/javascript/src/markdownSerializer.ts b/markdown-editor/javascript/src/markdownSerializer.ts new file mode 100644 index 00000000000..abb48eb598e --- /dev/null +++ b/markdown-editor/javascript/src/markdownSerializer.ts @@ -0,0 +1,13 @@ +import {prettyTable, Table} from "./prettyFork"; +import {defaultMarkdownSerializer,} from 'prosemirror-markdown' + +export const cucumberMarkdownSerializer = defaultMarkdownSerializer +cucumberMarkdownSerializer.nodes['table'] = (state, node) => { + const table: Table = node.toJSON().content.map((row: any) => { + return row.content.map((row: any) => { + return row.content[0].content[0].text + }) + }) + const markdownTable = prettyTable(table, 0, 'markdown') + state.text(markdownTable) +} diff --git a/markdown-editor/javascript/src/plugins.ts b/markdown-editor/javascript/src/plugins.ts index a78412f7656..fc43b0c91ef 100644 --- a/markdown-editor/javascript/src/plugins.ts +++ b/markdown-editor/javascript/src/plugins.ts @@ -18,7 +18,7 @@ import { } from 'prosemirror-tables' import {keymap} from 'prosemirror-keymap' import {Dropdown, MenuItem} from 'prosemirror-menu' -import {schema} from './cucumberMarkdown' +import schema from './schema' import {EditorState, TextSelection, Transaction} from 'prosemirror-state' import {Schema} from 'prosemirror-model' // @ts-ignore diff --git a/markdown-editor/javascript/src/schema.ts b/markdown-editor/javascript/src/schema.ts new file mode 100644 index 00000000000..32d6c71382b --- /dev/null +++ b/markdown-editor/javascript/src/schema.ts @@ -0,0 +1,30 @@ +import {schema as markdownSchema,} from 'prosemirror-markdown' +import {Schema} from 'prosemirror-model' +import {tableNodes} from 'prosemirror-tables' + +export default new Schema({ + // @ts-ignore + nodes: markdownSchema.spec.nodes.append( + tableNodes({ + tableGroup: 'block', + // Examples suggest block+ but we want to restrict to a single paragraph (single line) + // TODO: Investigate if we can restrict to a span, if such a thing exists in prosemirror. + // We don't want users to add bold, italic etc (I think) to cells + cellContent: 'paragraph', + cellAttributes: { + background: { + default: null, + getFromDOM(dom) { + // @ts-ignore + return (dom.style && dom.style.backgroundColor) || null + }, + setDOMAttr(value, attrs) { + if (value) attrs.style = (attrs.style || '') + `background-color: ${value};` + }, + }, + }, + }) + ), + marks: markdownSchema.spec.marks, +}) + diff --git a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx index 120c3f7f275..62ae407aaa7 100644 --- a/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx +++ b/markdown-editor/javascript/src/stories/CucumberMarkdownProseMirror.stories.tsx @@ -4,6 +4,7 @@ import CucumberMarkdownProseMirror from '../CucumberMarkdownProseMirror' import { useProseMirror } from 'use-prosemirror' import makeConfig from '../makeConfig' import MarkdownSimpleCodeEditor from '../MarkdownSimpleCodeEditor' +import useGherkinDocument from "../useGherkinDocument"; export default { title: 'MarkdownEditor', @@ -14,11 +15,12 @@ type TemplateArgs = { initialMarkdown: string } const Template: Story = ({ initialMarkdown }) => { const [markdown, setMarkdown] = useState(initialMarkdown) + const {gherkinDocument, error} = useGherkinDocument(markdown) const [state, setState] = useProseMirror(makeConfig(markdown)) return (