diff --git a/.eslintrc.js b/.eslintrc.js index e6d6392bd2..1729051305 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -31,7 +31,7 @@ module.exports = { extends: [ 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', - 'plugin:vue/strongly-recommended', + 'plugin:vue/vue3-strongly-recommended', 'airbnb-base', ], rules: { diff --git a/README.md b/README.md index 49896d4bad..9b3a8c0903 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# tiptap +# Tiptap A headless, framework-agnostic and extendable rich text editor, based on [ProseMirror](https://github.com/ProseMirror/prosemirror). [![Build Status](https://github.com/ueberdosis/tiptap/workflows/build/badge.svg)](https://github.com/ueberdosis/tiptap/actions) diff --git a/demos/package.json b/demos/package.json index c0eb787597..1ecf5bfa27 100644 --- a/demos/package.json +++ b/demos/package.json @@ -16,7 +16,7 @@ "y-indexeddb": "^9.0.6", "y-webrtc": "^10.2.0", "y-websocket": "^1.3.17", - "yjs": "^13.5.13" + "yjs": "^13.5.16" }, "devDependencies": { "@types/uuid": "^8.3.1", @@ -24,14 +24,14 @@ "@vitejs/plugin-vue": "^1.9.3", "autoprefixer": "^10.3.7", "iframe-resizer": "^4.3.2", - "postcss": "^8.3.9", + "postcss": "^8.3.11", "react": "^17.0.2", "react-dom": "^17.0.2", - "sass": "^1.43.2", + "sass": "^1.43.3", "tailwindcss": "^2.2.17", "typescript": "^4.4.4", "uuid": "^8.3.2", - "vite": "^2.6.7", + "vite": "^2.6.10", "vite-plugin-checker": "^0.3.4", "vue": "^3.0.5", "vue-router": "^4.0.11" diff --git a/demos/setup/style.scss b/demos/setup/style.scss index 0da52a244f..66062a5fc4 100644 --- a/demos/setup/style.scss +++ b/demos/setup/style.scss @@ -56,9 +56,17 @@ body { } button, -input { +input, +select { font-size: inherit; font-family: inherit; + color: black; + margin: 0.1rem; + border: 1px solid black; + border-radius: 0.3rem; + padding: 0.1rem 0.4rem; + background: white; + accent-color: black; } .ProseMirror:focus { diff --git a/demos/src/Examples/CollaborativeEditing/React/index.jsx b/demos/src/Examples/CollaborativeEditing/React/index.jsx index fa541c0ec9..23aa99046e 100644 --- a/demos/src/Examples/CollaborativeEditing/React/index.jsx +++ b/demos/src/Examples/CollaborativeEditing/React/index.jsx @@ -16,7 +16,7 @@ import MenuBar from './MenuBar' import './styles.scss' const colors = ['#958DF1', '#F98181', '#FBBC88', '#FAF594', '#70CFF8', '#94FADB', '#B9F18D'] -const rooms = ['rooms.7', 'rooms.8', 'rooms.9'] +const rooms = ['rooms.10', 'rooms.11', 'rooms.12'] const names = [ 'Lea Thompson', 'Cyndi Lauper', diff --git a/demos/src/Examples/CollaborativeEditing/Vue/index.vue b/demos/src/Examples/CollaborativeEditing/Vue/index.vue index f254ca2e74..9bb26298c9 100644 --- a/demos/src/Examples/CollaborativeEditing/Vue/index.vue +++ b/demos/src/Examples/CollaborativeEditing/Vue/index.vue @@ -40,9 +40,9 @@ const getRandomElement = list => { const getRandomRoom = () => { return getRandomElement([ - 'rooms.7', - 'rooms.8', - 'rooms.9', + 'rooms.10', + 'rooms.11', + 'rooms.12', ]) } diff --git a/demos/src/Examples/Community/React/MentionList.scss b/demos/src/Examples/Community/React/MentionList.scss index 89d6e650b4..e4637c5a94 100644 --- a/demos/src/Examples/Community/React/MentionList.scss +++ b/demos/src/Examples/Community/React/MentionList.scss @@ -14,6 +14,7 @@ .item { display: block; + margin: 0; width: 100%; text-align: left; background: transparent; diff --git a/demos/src/Examples/Community/React/suggestion.js b/demos/src/Examples/Community/React/suggestion.js index ba9ad3aee1..5f803ac99c 100644 --- a/demos/src/Examples/Community/React/suggestion.js +++ b/demos/src/Examples/Community/React/suggestion.js @@ -3,7 +3,7 @@ import tippy from 'tippy.js' import { MentionList } from './MentionList' export default { - items: query => { + items: ({ query }) => { return [ 'Lea Thompson', 'Cyndi Lauper', 'Tom Cruise', 'Madonna', 'Jerry Hall', 'Joan Collins', 'Winona Ryder', 'Christina Applegate', 'Alyssa Milano', 'Molly Ringwald', 'Ally Sheedy', 'Debbie Harry', 'Olivia Newton-John', 'Elton John', 'Michael J. Fox', 'Axl Rose', 'Emilio Estevez', 'Ralph Macchio', 'Rob Lowe', 'Jennifer Grey', 'Mickey Rourke', 'John Cusack', 'Matthew Broderick', 'Justine Bateman', 'Lisa Bonet', ].filter(item => item.toLowerCase().startsWith(query.toLowerCase())).slice(0, 5) diff --git a/demos/src/Examples/Community/Vue/MentionList.vue b/demos/src/Examples/Community/Vue/MentionList.vue index 0dedfc3b95..086baf7d7c 100644 --- a/demos/src/Examples/Community/Vue/MentionList.vue +++ b/demos/src/Examples/Community/Vue/MentionList.vue @@ -98,6 +98,7 @@ export default { .item { display: block; + margin: 0; width: 100%; text-align: left; background: transparent; diff --git a/demos/src/Examples/Community/Vue/suggestion.js b/demos/src/Examples/Community/Vue/suggestion.js index d1478598c9..3745660dec 100644 --- a/demos/src/Examples/Community/Vue/suggestion.js +++ b/demos/src/Examples/Community/Vue/suggestion.js @@ -3,7 +3,7 @@ import tippy from 'tippy.js' import MentionList from './MentionList.vue' export default { - items: query => { + items: ({ query }) => { return [ 'Lea Thompson', 'Cyndi Lauper', 'Tom Cruise', 'Madonna', 'Jerry Hall', 'Joan Collins', 'Winona Ryder', 'Christina Applegate', 'Alyssa Milano', 'Molly Ringwald', 'Ally Sheedy', 'Debbie Harry', 'Olivia Newton-John', 'Elton John', 'Michael J. Fox', 'Axl Rose', 'Emilio Estevez', 'Ralph Macchio', 'Rob Lowe', 'Jennifer Grey', 'Mickey Rourke', 'John Cusack', 'Matthew Broderick', 'Justine Bateman', 'Lisa Bonet', ].filter(item => item.toLowerCase().startsWith(query.toLowerCase())).slice(0, 5) diff --git a/demos/src/Examples/Menus/React/index.spec.js b/demos/src/Examples/Menus/React/index.spec.js index 9022fab666..ee2f3b0395 100644 --- a/demos/src/Examples/Menus/React/index.spec.js +++ b/demos/src/Examples/Menus/React/index.spec.js @@ -1,7 +1,57 @@ -context('/src/Examples/BubbleMenu/React/', () => { +context('/src/Examples/Menus/React/', () => { before(() => { - cy.visit('/src/Examples/BubbleMenu/React/') + cy.visit('/src/Examples/Menus/React/') }) - // TODO: Write tests + beforeEach(() => { + cy.get('.ProseMirror').then(([{ editor }]) => { + editor.chain().focus().clearContent().run() + }) + }) + + // TODO: fix test + // it('should show menu when the editor is empty', () => { + // cy.get('#app') + // .find('[data-tippy-root]') + // }) + + it('should show menu when text is selected', () => { + cy.get('.ProseMirror') + .type('Test') + .type('{selectall}') + + cy.get('#app') + .find('[data-tippy-root]') + }) + + const marks = [ + { + button: 'Bold', + tag: 'strong', + }, + { + button: 'Italic', + tag: 'em', + }, + { + button: 'Strike', + tag: 's', + }, + ] + + marks.forEach(mark => { + it(`should apply ${mark.button} correctly`, () => { + cy.get('.ProseMirror') + .type('Test') + .type('{selectall}') + + cy.get('#app') + .find('[data-tippy-root]') + .contains(mark.button) + .click() + + cy.get('.ProseMirror') + .find(`p ${mark.tag}`) + }) + }) }) diff --git a/demos/src/Examples/Menus/Vue/index.spec.js b/demos/src/Examples/Menus/Vue/index.spec.js index 965e3411e2..c67018118d 100644 --- a/demos/src/Examples/Menus/Vue/index.spec.js +++ b/demos/src/Examples/Menus/Vue/index.spec.js @@ -1,7 +1,56 @@ -context('/src/Examples/BubbleMenu/Vue/', () => { +context('/src/Examples/Menus/Vue/', () => { before(() => { - cy.visit('/src/Examples/BubbleMenu/Vue/') + cy.visit('/src/Examples/Menus/Vue/') }) - // TODO: Write tests + beforeEach(() => { + cy.get('.ProseMirror').then(([{ editor }]) => { + editor.chain().focus().clearContent().run() + }) + }) + + it('should show menu when the editor is empty', () => { + cy.get('#app') + .find('[data-tippy-root]') + }) + + it('should show menu when text is selected', () => { + cy.get('.ProseMirror') + .type('Test') + .type('{selectall}') + + cy.get('#app') + .find('[data-tippy-root]') + }) + + const marks = [ + { + button: 'Bold', + tag: 'strong', + }, + { + button: 'Italic', + tag: 'em', + }, + { + button: 'Strike', + tag: 's', + }, + ] + + marks.forEach(mark => { + it(`should apply ${mark.button} correctly`, () => { + cy.get('.ProseMirror') + .type('Test') + .type('{selectall}') + + cy.get('#app div') + .find('[data-tippy-root]') + .contains(mark.button) + .click() + + cy.get('.ProseMirror') + .find(`p ${mark.tag}`) + }) + }) }) diff --git a/demos/src/Examples/Minimal/Vue/index.spec.js b/demos/src/Examples/Minimal/Vue/index.spec.js index 2b6eeee01b..3227502670 100644 --- a/demos/src/Examples/Minimal/Vue/index.spec.js +++ b/demos/src/Examples/Minimal/Vue/index.spec.js @@ -3,5 +3,45 @@ context('/src/Examples/Minimal/Vue/', () => { cy.visit('/src/Examples/Minimal/Vue/') }) - // TODO: Write tests + beforeEach(() => { + cy.get('.ProseMirror').then(([{ editor }]) => { + editor.commands.clearContent() + }) + }) + + it('text should be wrapped in a paragraph by default', () => { + cy.get('.ProseMirror') + .type('Example Text') + .find('p') + .should('contain', 'Example Text') + }) + + it('should parse paragraphs correctly', () => { + cy.get('.ProseMirror').then(([{ editor }]) => { + editor.commands.setContent('

Example Text

') + expect(editor.getHTML()).to.eq('

Example Text

') + + editor.commands.setContent('

Example Text

') + expect(editor.getHTML()).to.eq('

Example Text

') + }) + }) + + it('enter should make a new paragraph', () => { + cy.get('.ProseMirror') + .type('First Paragraph{enter}Second Paragraph') + .find('p') + .should('have.length', 2) + }) + + it('backspace should remove the last paragraph', () => { + cy.get('.ProseMirror') + .type('{enter}') + .find('p') + .should('have.length', 2) + + cy.get('.ProseMirror') + .type('{backspace}') + .find('p') + .should('have.length', 1) + }) }) diff --git a/demos/src/Examples/Savvy/Vue/index.spec.js b/demos/src/Examples/Savvy/Vue/index.spec.js index e1975a51c1..8f1b4d67bc 100644 --- a/demos/src/Examples/Savvy/Vue/index.spec.js +++ b/demos/src/Examples/Savvy/Vue/index.spec.js @@ -3,5 +3,36 @@ context('/src/Examples/Savvy/Vue/', () => { cy.visit('/src/Examples/Savvy/Vue/') }) - // TODO: Write tests + beforeEach(() => { + cy.get('.ProseMirror').then(([{ editor }]) => { + editor.commands.clearContent() + }) + }) + + const tests = [ + ['(c)', '©'], + ['->', '→'], + ['>>', '»'], + ['1/2', '½'], + ['!=', '≠'], + ['--', '—'], + ['1x1', '1×1'], + [':-) ', '🙂'], + ['<3 ', '❤️'], + ['>:P ', '😜'], + ] + + tests.forEach(test => { + it(`should parse ${test[0]} correctly`, () => { + cy.get('.ProseMirror') + .type(test[0]) + .should('contain', test[1]) + }) + }) + + it('should parse hex colors correctly', () => { + cy.get('.ProseMirror') + .type('#FD9170') + .find('.color') + }) }) diff --git a/demos/src/Experiments/Commands/Vue/CommandsList.vue b/demos/src/Experiments/Commands/Vue/CommandsList.vue index e9989c43b5..0082b085b9 100644 --- a/demos/src/Experiments/Commands/Vue/CommandsList.vue +++ b/demos/src/Experiments/Commands/Vue/CommandsList.vue @@ -98,6 +98,7 @@ export default { .item { display: block; + margin: 0; width: 100%; text-align: left; background: transparent; diff --git a/demos/src/Experiments/Commands/Vue/suggestion.js b/demos/src/Experiments/Commands/Vue/suggestion.js index 388256d7de..9680693abc 100644 --- a/demos/src/Experiments/Commands/Vue/suggestion.js +++ b/demos/src/Experiments/Commands/Vue/suggestion.js @@ -3,7 +3,7 @@ import { VueRenderer } from '@tiptap/vue-3' import CommandsList from './CommandsList.vue' export default { - items: query => { + items: ({ query }) => { return [ { title: 'H1', diff --git a/demos/src/Experiments/ExtensionStorage/React/CustomExtension.ts b/demos/src/Experiments/ExtensionStorage/React/CustomExtension.ts new file mode 100644 index 0000000000..de407ad7e0 --- /dev/null +++ b/demos/src/Experiments/ExtensionStorage/React/CustomExtension.ts @@ -0,0 +1,19 @@ +import { Extension } from '@tiptap/core' + +type CustomStorage = { + foo: number, +} + +export const CustomExtension = Extension.create<{}, CustomStorage>({ + name: 'custom', + + addStorage() { + return { + foo: 123, + } + }, + + onUpdate() { + this.storage.foo += 1 + }, +}) diff --git a/demos/src/Experiments/ExtensionStorage/React/index.html b/demos/src/Experiments/ExtensionStorage/React/index.html new file mode 100644 index 0000000000..538363687b --- /dev/null +++ b/demos/src/Experiments/ExtensionStorage/React/index.html @@ -0,0 +1,15 @@ + + + + + + + +
+ + + diff --git a/demos/src/Experiments/ExtensionStorage/React/index.jsx b/demos/src/Experiments/ExtensionStorage/React/index.jsx new file mode 100644 index 0000000000..3f75a1da2b --- /dev/null +++ b/demos/src/Experiments/ExtensionStorage/React/index.jsx @@ -0,0 +1,33 @@ +import React from 'react' +import { useEditor, EditorContent } from '@tiptap/react' +import Document from '@tiptap/extension-document' +import Paragraph from '@tiptap/extension-paragraph' +import Text from '@tiptap/extension-text' +import { CustomExtension } from './CustomExtension' +import './styles.scss' + +export default () => { + const editor = useEditor({ + extensions: [ + Document, + Paragraph, + Text, + CustomExtension, + ], + content: ` +

+ This is a radically reduced version of tiptap. It has support for a document, with paragraphs and text. That’s it. It’s probably too much for real minimalists though. +

+

+ The paragraph extension is not really required, but you need at least one node. Sure, that node can be something different. +

+ `, + }) + + return ( + <> + reactive storage: {editor?.storage.custom.foo} + + + ) +} diff --git a/demos/src/Experiments/ExtensionStorage/React/styles.scss b/demos/src/Experiments/ExtensionStorage/React/styles.scss new file mode 100644 index 0000000000..46b51a4e14 --- /dev/null +++ b/demos/src/Experiments/ExtensionStorage/React/styles.scss @@ -0,0 +1,6 @@ +/* Basic editor styles */ +.ProseMirror { + > * + * { + margin-top: 0.75em; + } +} diff --git a/demos/src/Experiments/ExtensionStorage/Vue/CustomExtension.ts b/demos/src/Experiments/ExtensionStorage/Vue/CustomExtension.ts new file mode 100644 index 0000000000..de407ad7e0 --- /dev/null +++ b/demos/src/Experiments/ExtensionStorage/Vue/CustomExtension.ts @@ -0,0 +1,19 @@ +import { Extension } from '@tiptap/core' + +type CustomStorage = { + foo: number, +} + +export const CustomExtension = Extension.create<{}, CustomStorage>({ + name: 'custom', + + addStorage() { + return { + foo: 123, + } + }, + + onUpdate() { + this.storage.foo += 1 + }, +}) diff --git a/demos/src/Experiments/ExtensionStorage/Vue/index.html b/demos/src/Experiments/ExtensionStorage/Vue/index.html new file mode 100644 index 0000000000..f0485cddc3 --- /dev/null +++ b/demos/src/Experiments/ExtensionStorage/Vue/index.html @@ -0,0 +1,15 @@ + + + + + + + +
+ + + diff --git a/demos/src/Experiments/ExtensionStorage/Vue/index.vue b/demos/src/Experiments/ExtensionStorage/Vue/index.vue new file mode 100644 index 0000000000..a09406c4f7 --- /dev/null +++ b/demos/src/Experiments/ExtensionStorage/Vue/index.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/demos/src/Nodes/Mention/Vue/MentionList.vue b/demos/src/Nodes/Mention/Vue/MentionList.vue index 0dedfc3b95..086baf7d7c 100644 --- a/demos/src/Nodes/Mention/Vue/MentionList.vue +++ b/demos/src/Nodes/Mention/Vue/MentionList.vue @@ -98,6 +98,7 @@ export default { .item { display: block; + margin: 0; width: 100%; text-align: left; background: transparent; diff --git a/demos/src/Nodes/Mention/Vue/suggestion.js b/demos/src/Nodes/Mention/Vue/suggestion.js index d1478598c9..3745660dec 100644 --- a/demos/src/Nodes/Mention/Vue/suggestion.js +++ b/demos/src/Nodes/Mention/Vue/suggestion.js @@ -3,7 +3,7 @@ import tippy from 'tippy.js' import MentionList from './MentionList.vue' export default { - items: query => { + items: ({ query }) => { return [ 'Lea Thompson', 'Cyndi Lauper', 'Tom Cruise', 'Madonna', 'Jerry Hall', 'Joan Collins', 'Winona Ryder', 'Christina Applegate', 'Alyssa Milano', 'Molly Ringwald', 'Ally Sheedy', 'Debbie Harry', 'Olivia Newton-John', 'Elton John', 'Michael J. Fox', 'Axl Rose', 'Emilio Estevez', 'Ralph Macchio', 'Rob Lowe', 'Jennifer Grey', 'Mickey Rourke', 'John Cusack', 'Matthew Broderick', 'Justine Bateman', 'Lisa Bonet', ].filter(item => item.toLowerCase().startsWith(query.toLowerCase())).slice(0, 5) diff --git a/docs/api/nodes/mention.md b/docs/api/nodes/mention.md index 8d52ce3d49..eee7169a04 100644 --- a/docs/api/nodes/mention.md +++ b/docs/api/nodes/mention.md @@ -31,51 +31,41 @@ npm install tippy.js yarn add tippy.js ``` -## Rendering -Currently, we’re supporting custom Vue.js components only. To get the required `VueRenderer` install our Vue.js package: +## Settings -```bash -# with npm -npm install @tiptap/vue-2 +### HTMLAttributes +Custom HTML attributes that should be added to the rendered HTML tag. -# with Yarn -yarn add @tiptap/vue-2 -``` -If you are using `vue-3` then the `VueRenderer` requires different input: ```js -new VueRenderer(MentionList, { - props: props, - editor: this.editor, +Mention.configure({ + HTMLAttributes: { + class: 'my-custom-class', + }, }) ``` -and not + +### renderLabel +Define how a mention label should be rendered. + ```js -new VueRenderer(MentionList, { - parent: this, - propsData: props, +Mention.configure({ + renderLabel({ options, node }) { + return `${options.suggestion.char}${node.attrs.label ?? node.attrs.id}` + } }) ``` -And yes, we plan to support React, too. Meanwhile, you can roll your own `ReactRenderer`, but don’t forget to share it with the community. - -It’s also possible to use Vanilla JavaScript, but that is probably a lot more work. - -## Settings - -### HTMLAttributes -Custom HTML attributes that should be added to the rendered HTML tag. +### suggestion +[Read more](/api/utilities/suggestion) ```js Mention.configure({ - HTMLAttributes: { - class: 'my-custom-class', + suggestion: { + // … }, }) ``` -| renderLabel | `String` | `({ options, node }) => …` | Define how a mention label should be rendered. | -| suggestion | `Object` | `{ … }` | [Read more](/api/utilities/suggestion) | - ## Source code [packages/extension-mention/](https://github.com/ueberdosis/tiptap/blob/main/packages/extension-mention/) diff --git a/docs/api/utilities/suggestion.md b/docs/api/utilities/suggestion.md index 92a16fa937..3e0cac1bea 100644 --- a/docs/api/utilities/suggestion.md +++ b/docs/api/utilities/suggestion.md @@ -44,7 +44,7 @@ Default: `() => {}'` ### items Pass an array of filtered suggestions, can be async. -Default: `() => {}` +Default: `({ editor, query }) => []` ### render A render function for the autocomplete popup. diff --git a/docs/guide/custom-extensions.md b/docs/guide/custom-extensions.md index e5e0a8fba7..eeb2e2102e 100644 --- a/docs/guide/custom-extensions.md +++ b/docs/guide/custom-extensions.md @@ -78,6 +78,39 @@ const CustomHeading = Heading.extend({ }) ``` +### Storage +At some point you probably want to save some data within your extension instance. This data is mutable. You can access it within the extension under `this.storage`. + +```js +import { Extension } from '@tiptap/core' + +const CustomExtension = Extension.create({ + name: 'customExtension', + + addStorage() { + return { + awesomeness: 100, + } + }, + + onUpdate() { + this.storage.awesomeness += 1 + }, +}) +``` + +Outside the extension you have access via `editor.storage`. Make sure that each extension has a unique name. + +```js +const editor = new Editor({ + extensions: [ + CustomExtension, + ], +}) + +const awesomeness = editor.storage.customExtension.awesomeness +``` + ### Schema tiptap works with a strict schema, which configures how the content can be structured, nested, how it behaves and many more things. You [can change all aspects of the schema](/api/schema) for existing extensions. Let’s walk through a few common use cases. diff --git a/docs/guide/typescript.md b/docs/guide/typescript.md index 5eb9c6aa48..c329a35448 100644 --- a/docs/guide/typescript.md +++ b/docs/guide/typescript.md @@ -32,6 +32,25 @@ const CustomExtension = Extension.create({ }) ``` +### Storage types +To add types for your extension storage, you’ll have to pass that as a second type parameter. + +```ts +import { Extension } from '@tiptap/core' + +export interface CustomExtensionStorage { + awesomeness: number, +} + +const CustomExtension = Extension.create<{}, CustomExtensionStorage>({ + addStorage() { + return { + awesomeness: 100, + } + }, +}) +``` + ### Command type The core package also exports a `Command` type, which needs to be added to all commands that you specify in your code. Here is an example: diff --git a/package.json b/package.json index 3d62af83a3..608c13d536 100644 --- a/package.json +++ b/package.json @@ -34,26 +34,26 @@ "@lerna/filter-packages": "^4.0.0", "@lerna/project": "^4.0.0", "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.0", - "@rollup/plugin-node-resolve": "^13.0.5", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "babel-loader": "^8.2.2", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.0.6", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "babel-loader": "^8.2.3", "cypress": "^8.6.0", - "eslint": "^8.0.1", + "eslint": "^8.1.0", "eslint-config-airbnb-base": "^14.2.0", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-html": "^6.2.0", "eslint-plugin-import": "^2.25.2", - "eslint-plugin-vue": "^7.19.1", + "eslint-plugin-vue": "^7.20.0", "lerna": "^4.0.0", "minimist": "^1.2.5", - "rollup": "^2.58.0", + "rollup": "^2.58.1", "rollup-plugin-auto-external": "^2.0.0", "rollup-plugin-sourcemaps": "^0.6.3", "rollup-plugin-typescript2": "^0.30.0", "ts-loader": "^9.2.6", "typescript": "^4.4.4", - "webpack": "^5.58.2" + "webpack": "^5.59.1" } } diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 5d12285820..17dfa55431 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,45 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.128](https://github.com/ueberdosis/tiptap/compare/@tiptap/core@2.0.0-beta.127...@tiptap/core@2.0.0-beta.128) (2021-10-25) + + +### Bug Fixes + +* fix storage context when using configure ([ef254ce](https://github.com/ueberdosis/tiptap/commit/ef254cead7b9be052ec0211849fb78ae577095dd)) + + + + + +# [2.0.0-beta.127](https://github.com/ueberdosis/tiptap/compare/@tiptap/core@2.0.0-beta.126...@tiptap/core@2.0.0-beta.127) (2021-10-22) + + +### Bug Fixes + +* improve default styling for .ProseMirror-separator ([0e94afe](https://github.com/ueberdosis/tiptap/commit/0e94afe42a5c15a47698152b3bc88e6bc4f8c01f)) +* Separate drags from drops in stopEvent ([#2070](https://github.com/ueberdosis/tiptap/issues/2070)) ([bebaa40](https://github.com/ueberdosis/tiptap/commit/bebaa4045e6be2e59d1b9c2e1f61f088a47fdf1b)) + + + + + +# [2.0.0-beta.126](https://github.com/ueberdosis/tiptap/compare/@tiptap/core@2.0.0-beta.125...@tiptap/core@2.0.0-beta.126) (2021-10-22) + + +### Bug Fixes + +* fix a bug where paste rules doesn’t worked at the start of the document, see [#1225](https://github.com/ueberdosis/tiptap/issues/1225) ([ff67ee1](https://github.com/ueberdosis/tiptap/commit/ff67ee1da380d8308e85fa4b0386ea6947ec7ff1)) + + +### Features + +* Add extension storage ([#2069](https://github.com/ueberdosis/tiptap/issues/2069)) ([7ffabf2](https://github.com/ueberdosis/tiptap/commit/7ffabf251c408a652eec1931cc78a8bd43cccb67)) + + + + + # [2.0.0-beta.125](https://github.com/ueberdosis/tiptap/compare/@tiptap/core@2.0.0-beta.124...@tiptap/core@2.0.0-beta.125) (2021-10-14) diff --git a/packages/core/package.json b/packages/core/package.json index 81326f568c..82ba69e299 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/core", "description": "headless rich text editor", - "version": "2.0.0-beta.125", + "version": "2.0.0-beta.128", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", @@ -33,7 +33,7 @@ "@types/prosemirror-view": "^1.19.1", "prosemirror-commands": "^1.1.11", "prosemirror-keymap": "^1.1.3", - "prosemirror-model": "^1.14.3", + "prosemirror-model": "^1.15.0", "prosemirror-schema-list": "^1.1.6", "prosemirror-state": "^1.3.4", "prosemirror-transform": "^1.3.3", diff --git a/packages/core/src/Editor.ts b/packages/core/src/Editor.ts index 8ad0bf6998..4788471b2f 100644 --- a/packages/core/src/Editor.ts +++ b/packages/core/src/Editor.ts @@ -50,6 +50,8 @@ export class Editor extends EventEmitter { public isFocused = false + public extensionStorage: Record = {} + public options: EditorOptions = { element: document.createElement('div'), content: '', @@ -100,6 +102,13 @@ export class Editor extends EventEmitter { }, 0) } + /** + * Returns the editor storage. + */ + public get storage(): Record { + return this.extensionStorage + } + /** * An object of all registered commands. */ diff --git a/packages/core/src/Extension.ts b/packages/core/src/Extension.ts index 55ce6f21bc..51199d029a 100644 --- a/packages/core/src/Extension.ts +++ b/packages/core/src/Extension.ts @@ -5,7 +5,10 @@ import { Editor } from './Editor' import { Node } from './Node' import { Mark } from './Mark' import mergeDeep from './utilities/mergeDeep' +import callOrReturn from './utilities/callOrReturn' +import getExtensionField from './helpers/getExtensionField' import { + AnyConfig, Extensions, GlobalAttributes, RawCommands, @@ -15,7 +18,7 @@ import { import { ExtensionConfig } from '.' declare module '@tiptap/core' { - interface ExtensionConfig { + interface ExtensionConfig { [key: string]: any; /** @@ -33,13 +36,23 @@ declare module '@tiptap/core' { */ defaultOptions?: Options, + /** + * Default Storage + */ + addStorage?: (this: { + name: string, + options: Options, + parent: ParentConfig>['addGlobalAttributes'], + }) => Storage, + /** * Global attributes */ addGlobalAttributes?: (this: { name: string, options: Options, - parent: ParentConfig>['addGlobalAttributes'], + storage: Storage, + parent: ParentConfig>['addGlobalAttributes'], }) => GlobalAttributes | {}, /** @@ -48,8 +61,9 @@ declare module '@tiptap/core' { addCommands?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['addCommands'], + parent: ParentConfig>['addCommands'], }) => Partial, /** @@ -58,8 +72,9 @@ declare module '@tiptap/core' { addKeyboardShortcuts?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['addKeyboardShortcuts'], + parent: ParentConfig>['addKeyboardShortcuts'], }) => { [key: string]: KeyboardShortcutCommand, }, @@ -70,8 +85,9 @@ declare module '@tiptap/core' { addInputRules?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['addInputRules'], + parent: ParentConfig>['addInputRules'], }) => InputRule[], /** @@ -80,8 +96,9 @@ declare module '@tiptap/core' { addPasteRules?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['addPasteRules'], + parent: ParentConfig>['addPasteRules'], }) => PasteRule[], /** @@ -90,8 +107,9 @@ declare module '@tiptap/core' { addProseMirrorPlugins?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['addProseMirrorPlugins'], + parent: ParentConfig>['addProseMirrorPlugins'], }) => Plugin[], /** @@ -100,7 +118,8 @@ declare module '@tiptap/core' { addExtensions?: (this: { name: string, options: Options, - parent: ParentConfig>['addExtensions'], + storage: Storage, + parent: ParentConfig>['addExtensions'], }) => Extensions, /** @@ -110,7 +129,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['extendNodeSchema'], + storage: Storage, + parent: ParentConfig>['extendNodeSchema'], }, extension: Node, ) => Record) | null, @@ -122,7 +142,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['extendMarkSchema'], + storage: Storage, + parent: ParentConfig>['extendMarkSchema'], }, extension: Mark, ) => Record) | null, @@ -133,8 +154,9 @@ declare module '@tiptap/core' { onBeforeCreate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['onBeforeCreate'], + parent: ParentConfig>['onBeforeCreate'], }) => void) | null, /** @@ -143,8 +165,9 @@ declare module '@tiptap/core' { onCreate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['onCreate'], + parent: ParentConfig>['onCreate'], }) => void) | null, /** @@ -153,8 +176,9 @@ declare module '@tiptap/core' { onUpdate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['onUpdate'], + parent: ParentConfig>['onUpdate'], }) => void) | null, /** @@ -163,8 +187,9 @@ declare module '@tiptap/core' { onSelectionUpdate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['onSelectionUpdate'], + parent: ParentConfig>['onSelectionUpdate'], }) => void) | null, /** @@ -174,8 +199,9 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['onTransaction'], + parent: ParentConfig>['onTransaction'], }, props: { transaction: Transaction, @@ -189,8 +215,9 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['onFocus'], + parent: ParentConfig>['onFocus'], }, props: { event: FocusEvent, @@ -204,8 +231,9 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['onBlur'], + parent: ParentConfig>['onBlur'], }, props: { event: FocusEvent, @@ -218,13 +246,14 @@ declare module '@tiptap/core' { onDestroy?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, - parent: ParentConfig>['onDestroy'], + parent: ParentConfig>['onDestroy'], }) => void) | null, } } -export class Extension { +export class Extension { type = 'extension' name = 'extension' @@ -235,12 +264,14 @@ export class Extension { options: Options + storage: Storage + config: ExtensionConfig = { name: this.name, defaultOptions: {}, } - constructor(config: Partial> = {}) { + constructor(config: Partial> = {}) { this.config = { ...this.config, ...config, @@ -248,10 +279,18 @@ export class Extension { this.name = this.config.name this.options = this.config.defaultOptions + this.storage = callOrReturn(getExtensionField( + this, + 'addStorage', + { + name: this.name, + options: this.options, + }, + )) } - static create(config: Partial> = {}) { - return new Extension(config) + static create(config: Partial> = {}) { + return new Extension(config) } configure(options: Partial = {}) { @@ -261,11 +300,20 @@ export class Extension { extension.options = mergeDeep(this.options, options) as Options + extension.storage = callOrReturn(getExtensionField( + extension, + 'addStorage', + { + name: extension.name, + options: extension.options, + }, + )) + return extension } - extend(extendedConfig: Partial> = {}) { - const extension = new Extension(extendedConfig) + extend(extendedConfig: Partial> = {}) { + const extension = new Extension(extendedConfig) extension.parent = this @@ -279,6 +327,15 @@ export class Extension { ? extendedConfig.defaultOptions : extension.parent.options + extension.storage = callOrReturn(getExtensionField( + extension, + 'addStorage', + { + name: extension.name, + options: extension.options, + }, + )) + return extension } } diff --git a/packages/core/src/ExtensionManager.ts b/packages/core/src/ExtensionManager.ts index 0056179d86..afd5c0a7ad 100644 --- a/packages/core/src/ExtensionManager.ts +++ b/packages/core/src/ExtensionManager.ts @@ -14,6 +14,7 @@ import splitExtensions from './helpers/splitExtensions' import getAttributesFromExtensions from './helpers/getAttributesFromExtensions' import getRenderedAttributes from './helpers/getRenderedAttributes' import callOrReturn from './utilities/callOrReturn' +import findDuplicates from './utilities/findDuplicates' import { NodeConfig } from '.' export default class ExtensionManager { @@ -32,9 +33,13 @@ export default class ExtensionManager { this.schema = getSchemaByResolvedExtensions(this.extensions) this.extensions.forEach(extension => { + // store extension storage in editor + this.editor.extensionStorage[extension.name] = extension.storage + const context = { name: extension.name, options: extension.options, + storage: extension.storage, editor: this.editor, type: getSchemaTypeByName(extension.name, this.schema), } @@ -130,7 +135,14 @@ export default class ExtensionManager { } static resolve(extensions: Extensions): Extensions { - return ExtensionManager.sort(ExtensionManager.flatten(extensions)) + const resolvedExtensions = ExtensionManager.sort(ExtensionManager.flatten(extensions)) + const duplicatedNames = findDuplicates(resolvedExtensions.map(extension => extension.name)) + + if (duplicatedNames.length) { + console.warn(`[tiptap warn]: Duplicate extension names found: [${duplicatedNames.map(item => `'${item}'`).join(', ')}]. This can lead to issues.`) + } + + return resolvedExtensions } static flatten(extensions: Extensions): Extensions { @@ -139,6 +151,7 @@ export default class ExtensionManager { const context = { name: extension.name, options: extension.options, + storage: extension.storage, } const addExtensions = getExtensionField( @@ -184,6 +197,7 @@ export default class ExtensionManager { const context = { name: extension.name, options: extension.options, + storage: extension.storage, editor: this.editor, type: getSchemaTypeByName(extension.name, this.schema), } @@ -223,6 +237,7 @@ export default class ExtensionManager { const context = { name: extension.name, options: extension.options, + storage: extension.storage, editor, type: getSchemaTypeByName(extension.name, this.schema), } @@ -313,6 +328,7 @@ export default class ExtensionManager { const context = { name: extension.name, options: extension.options, + storage: extension.storage, editor, type: getNodeType(extension.name, this.schema), } diff --git a/packages/core/src/Mark.ts b/packages/core/src/Mark.ts index 8c8a2cbf7f..0947f69f08 100644 --- a/packages/core/src/Mark.ts +++ b/packages/core/src/Mark.ts @@ -8,7 +8,10 @@ import { Plugin, Transaction } from 'prosemirror-state' import { InputRule } from './InputRule' import { PasteRule } from './PasteRule' import mergeDeep from './utilities/mergeDeep' +import callOrReturn from './utilities/callOrReturn' +import getExtensionField from './helpers/getExtensionField' import { + AnyConfig, Extensions, Attributes, RawCommands, @@ -21,7 +24,7 @@ import { MarkConfig } from '.' import { Editor } from './Editor' declare module '@tiptap/core' { - export interface MarkConfig { + export interface MarkConfig { [key: string]: any; /** @@ -39,13 +42,23 @@ declare module '@tiptap/core' { */ defaultOptions?: Options, + /** + * Default Storage + */ + addStorage?: (this: { + name: string, + options: Options, + parent: ParentConfig>['addGlobalAttributes'], + }) => Storage, + /** * Global attributes */ addGlobalAttributes?: (this: { name: string, options: Options, - parent: ParentConfig>['addGlobalAttributes'], + storage: Storage, + parent: ParentConfig>['addGlobalAttributes'], }) => GlobalAttributes | {}, /** @@ -54,9 +67,10 @@ declare module '@tiptap/core' { addCommands?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['addCommands'], + parent: ParentConfig>['addCommands'], }) => Partial, /** @@ -65,9 +79,10 @@ declare module '@tiptap/core' { addKeyboardShortcuts?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['addKeyboardShortcuts'], + parent: ParentConfig>['addKeyboardShortcuts'], }) => { [key: string]: KeyboardShortcutCommand, }, @@ -78,9 +93,10 @@ declare module '@tiptap/core' { addInputRules?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['addInputRules'], + parent: ParentConfig>['addInputRules'], }) => InputRule[], /** @@ -89,9 +105,10 @@ declare module '@tiptap/core' { addPasteRules?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['addPasteRules'], + parent: ParentConfig>['addPasteRules'], }) => PasteRule[], /** @@ -100,9 +117,10 @@ declare module '@tiptap/core' { addProseMirrorPlugins?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['addProseMirrorPlugins'], + parent: ParentConfig>['addProseMirrorPlugins'], }) => Plugin[], /** @@ -111,7 +129,8 @@ declare module '@tiptap/core' { addExtensions?: (this: { name: string, options: Options, - parent: ParentConfig>['addExtensions'], + storage: Storage, + parent: ParentConfig>['addExtensions'], }) => Extensions, /** @@ -121,7 +140,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['extendNodeSchema'], + storage: Storage, + parent: ParentConfig>['extendNodeSchema'], }, extension: Node, ) => Record) | null, @@ -133,7 +153,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['extendMarkSchema'], + storage: Storage, + parent: ParentConfig>['extendMarkSchema'], }, extension: Mark, ) => Record) | null, @@ -144,9 +165,10 @@ declare module '@tiptap/core' { onBeforeCreate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['onBeforeCreate'], + parent: ParentConfig>['onBeforeCreate'], }) => void) | null, /** @@ -155,9 +177,10 @@ declare module '@tiptap/core' { onCreate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['onCreate'], + parent: ParentConfig>['onCreate'], }) => void) | null, /** @@ -166,9 +189,10 @@ declare module '@tiptap/core' { onUpdate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['onUpdate'], + parent: ParentConfig>['onUpdate'], }) => void) | null, /** @@ -177,9 +201,10 @@ declare module '@tiptap/core' { onSelectionUpdate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['onSelectionUpdate'], + parent: ParentConfig>['onSelectionUpdate'], }) => void) | null, /** @@ -189,9 +214,10 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['onTransaction'], + parent: ParentConfig>['onTransaction'], }, props: { transaction: Transaction, @@ -205,9 +231,10 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['onFocus'], + parent: ParentConfig>['onFocus'], }, props: { event: FocusEvent, @@ -221,9 +248,10 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['onBlur'], + parent: ParentConfig>['onBlur'], }, props: { event: FocusEvent, @@ -236,9 +264,10 @@ declare module '@tiptap/core' { onDestroy?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: MarkType, - parent: ParentConfig>['onDestroy'], + parent: ParentConfig>['onDestroy'], }) => void) | null, /** @@ -252,7 +281,8 @@ declare module '@tiptap/core' { inclusive?: MarkSpec['inclusive'] | ((this: { name: string, options: Options, - parent: ParentConfig>['inclusive'], + storage: Storage, + parent: ParentConfig>['inclusive'], }) => MarkSpec['inclusive']), /** @@ -261,7 +291,8 @@ declare module '@tiptap/core' { excludes?: MarkSpec['excludes'] | ((this: { name: string, options: Options, - parent: ParentConfig>['excludes'], + storage: Storage, + parent: ParentConfig>['excludes'], }) => MarkSpec['excludes']), /** @@ -270,7 +301,8 @@ declare module '@tiptap/core' { group?: MarkSpec['group'] | ((this: { name: string, options: Options, - parent: ParentConfig>['group'], + storage: Storage, + parent: ParentConfig>['group'], }) => MarkSpec['group']), /** @@ -279,7 +311,8 @@ declare module '@tiptap/core' { spanning?: MarkSpec['spanning'] | ((this: { name: string, options: Options, - parent: ParentConfig>['spanning'], + storage: Storage, + parent: ParentConfig>['spanning'], }) => MarkSpec['spanning']), /** @@ -288,7 +321,8 @@ declare module '@tiptap/core' { code?: boolean | ((this: { name: string, options: Options, - parent: ParentConfig>['code'], + storage: Storage, + parent: ParentConfig>['code'], }) => boolean), /** @@ -298,7 +332,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['parseHTML'], + storage: Storage, + parent: ParentConfig>['parseHTML'], }, ) => MarkSpec['parseDOM'], @@ -309,7 +344,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['renderHTML'], + storage: Storage, + parent: ParentConfig>['renderHTML'], }, props: { mark: ProseMirrorMark, @@ -324,13 +360,14 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['addAttributes'], + storage: Storage, + parent: ParentConfig>['addAttributes'], }, ) => Attributes | {}, } } -export class Mark { +export class Mark { type = 'mark' name = 'mark' @@ -341,12 +378,14 @@ export class Mark { options: Options + storage: Storage + config: MarkConfig = { name: this.name, defaultOptions: {}, } - constructor(config: Partial> = {}) { + constructor(config: Partial> = {}) { this.config = { ...this.config, ...config, @@ -354,10 +393,18 @@ export class Mark { this.name = this.config.name this.options = this.config.defaultOptions + this.storage = callOrReturn(getExtensionField( + this, + 'addStorage', + { + name: this.name, + options: this.options, + }, + )) } - static create(config: Partial> = {}) { - return new Mark(config) + static create(config: Partial> = {}) { + return new Mark(config) } configure(options: Partial = {}) { @@ -367,11 +414,20 @@ export class Mark { extension.options = mergeDeep(this.options, options) as Options + extension.storage = callOrReturn(getExtensionField( + extension, + 'addStorage', + { + name: extension.name, + options: extension.options, + }, + )) + return extension } - extend(extendedConfig: Partial> = {}) { - const extension = new Mark(extendedConfig) + extend(extendedConfig: Partial> = {}) { + const extension = new Mark(extendedConfig) extension.parent = this @@ -385,6 +441,15 @@ export class Mark { ? extendedConfig.defaultOptions : extension.parent.options + extension.storage = callOrReturn(getExtensionField( + extension, + 'addStorage', + { + name: extension.name, + options: extension.options, + }, + )) + return extension } } diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index ec0cfd8aaf..14e28117bf 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -8,7 +8,10 @@ import { Plugin, Transaction } from 'prosemirror-state' import { InputRule } from './InputRule' import { PasteRule } from './PasteRule' import mergeDeep from './utilities/mergeDeep' +import callOrReturn from './utilities/callOrReturn' +import getExtensionField from './helpers/getExtensionField' import { + AnyConfig, Extensions, Attributes, NodeViewRenderer, @@ -21,7 +24,7 @@ import { NodeConfig } from '.' import { Editor } from './Editor' declare module '@tiptap/core' { - interface NodeConfig { + interface NodeConfig { [key: string]: any; /** @@ -39,13 +42,23 @@ declare module '@tiptap/core' { */ defaultOptions?: Options, + /** + * Default Storage + */ + addStorage?: (this: { + name: string, + options: Options, + parent: ParentConfig>['addGlobalAttributes'], + }) => Storage, + /** * Global attributes */ addGlobalAttributes?: (this: { name: string, options: Options, - parent: ParentConfig>['addGlobalAttributes'], + storage: Storage, + parent: ParentConfig>['addGlobalAttributes'], }) => GlobalAttributes | {}, /** @@ -54,9 +67,10 @@ declare module '@tiptap/core' { addCommands?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['addCommands'], + parent: ParentConfig>['addCommands'], }) => Partial, /** @@ -65,9 +79,10 @@ declare module '@tiptap/core' { addKeyboardShortcuts?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['addKeyboardShortcuts'], + parent: ParentConfig>['addKeyboardShortcuts'], }) => { [key: string]: KeyboardShortcutCommand, }, @@ -78,9 +93,10 @@ declare module '@tiptap/core' { addInputRules?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['addInputRules'], + parent: ParentConfig>['addInputRules'], }) => InputRule[], /** @@ -89,9 +105,10 @@ declare module '@tiptap/core' { addPasteRules?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['addPasteRules'], + parent: ParentConfig>['addPasteRules'], }) => PasteRule[], /** @@ -100,9 +117,10 @@ declare module '@tiptap/core' { addProseMirrorPlugins?: (this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['addProseMirrorPlugins'], + parent: ParentConfig>['addProseMirrorPlugins'], }) => Plugin[], /** @@ -111,7 +129,8 @@ declare module '@tiptap/core' { addExtensions?: (this: { name: string, options: Options, - parent: ParentConfig>['addExtensions'], + storage: Storage, + parent: ParentConfig>['addExtensions'], }) => Extensions, /** @@ -121,7 +140,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['extendNodeSchema'], + storage: Storage, + parent: ParentConfig>['extendNodeSchema'], }, extension: Node, ) => Record) | null, @@ -133,7 +153,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['extendMarkSchema'], + storage: Storage, + parent: ParentConfig>['extendMarkSchema'], }, extension: Node, ) => Record) | null, @@ -144,9 +165,10 @@ declare module '@tiptap/core' { onBeforeCreate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['onBeforeCreate'], + parent: ParentConfig>['onBeforeCreate'], }) => void) | null, /** @@ -155,9 +177,10 @@ declare module '@tiptap/core' { onCreate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['onCreate'], + parent: ParentConfig>['onCreate'], }) => void) | null, /** @@ -166,9 +189,10 @@ declare module '@tiptap/core' { onUpdate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['onUpdate'], + parent: ParentConfig>['onUpdate'], }) => void) | null, /** @@ -177,9 +201,10 @@ declare module '@tiptap/core' { onSelectionUpdate?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['onSelectionUpdate'], + parent: ParentConfig>['onSelectionUpdate'], }) => void) | null, /** @@ -189,9 +214,10 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['onTransaction'], + parent: ParentConfig>['onTransaction'], }, props: { transaction: Transaction, @@ -205,9 +231,10 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['onFocus'], + parent: ParentConfig>['onFocus'], }, props: { event: FocusEvent, @@ -221,9 +248,10 @@ declare module '@tiptap/core' { this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['onBlur'], + parent: ParentConfig>['onBlur'], }, props: { event: FocusEvent, @@ -236,9 +264,10 @@ declare module '@tiptap/core' { onDestroy?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['onDestroy'], + parent: ParentConfig>['onDestroy'], }) => void) | null, /** @@ -247,9 +276,10 @@ declare module '@tiptap/core' { addNodeView?: ((this: { name: string, options: Options, + storage: Storage, editor: Editor, type: NodeType, - parent: ParentConfig>['addNodeView'], + parent: ParentConfig>['addNodeView'], }) => NodeViewRenderer) | null, /** @@ -263,7 +293,8 @@ declare module '@tiptap/core' { content?: NodeSpec['content'] | ((this: { name: string, options: Options, - parent: ParentConfig>['content'], + storage: Storage, + parent: ParentConfig>['content'], }) => NodeSpec['content']), /** @@ -272,7 +303,8 @@ declare module '@tiptap/core' { marks?: NodeSpec['marks'] | ((this: { name: string, options: Options, - parent: ParentConfig>['marks'], + storage: Storage, + parent: ParentConfig>['marks'], }) => NodeSpec['marks']), /** @@ -281,7 +313,8 @@ declare module '@tiptap/core' { group?: NodeSpec['group'] | ((this: { name: string, options: Options, - parent: ParentConfig>['group'], + storage: Storage, + parent: ParentConfig>['group'], }) => NodeSpec['group']), /** @@ -290,7 +323,8 @@ declare module '@tiptap/core' { inline?: NodeSpec['inline'] | ((this: { name: string, options: Options, - parent: ParentConfig>['inline'], + storage: Storage, + parent: ParentConfig>['inline'], }) => NodeSpec['inline']), /** @@ -299,7 +333,8 @@ declare module '@tiptap/core' { atom?: NodeSpec['atom'] | ((this: { name: string, options: Options, - parent: ParentConfig>['atom'], + storage: Storage, + parent: ParentConfig>['atom'], }) => NodeSpec['atom']), /** @@ -308,7 +343,8 @@ declare module '@tiptap/core' { selectable?: NodeSpec['selectable'] | ((this: { name: string, options: Options, - parent: ParentConfig>['selectable'], + storage: Storage, + parent: ParentConfig>['selectable'], }) => NodeSpec['selectable']), /** @@ -317,7 +353,8 @@ declare module '@tiptap/core' { draggable?: NodeSpec['draggable'] | ((this: { name: string, options: Options, - parent: ParentConfig>['draggable'], + storage: Storage, + parent: ParentConfig>['draggable'], }) => NodeSpec['draggable']), /** @@ -326,7 +363,8 @@ declare module '@tiptap/core' { code?: NodeSpec['code'] | ((this: { name: string, options: Options, - parent: ParentConfig>['code'], + storage: Storage, + parent: ParentConfig>['code'], }) => NodeSpec['code']), /** @@ -335,7 +373,8 @@ declare module '@tiptap/core' { defining?: NodeSpec['defining'] | ((this: { name: string, options: Options, - parent: ParentConfig>['defining'], + storage: Storage, + parent: ParentConfig>['defining'], }) => NodeSpec['defining']), /** @@ -344,7 +383,8 @@ declare module '@tiptap/core' { isolating?: NodeSpec['isolating'] | ((this: { name: string, options: Options, - parent: ParentConfig>['isolating'], + storage: Storage, + parent: ParentConfig>['isolating'], }) => NodeSpec['isolating']), /** @@ -354,7 +394,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['parseHTML'], + storage: Storage, + parent: ParentConfig>['parseHTML'], }, ) => NodeSpec['parseDOM'], @@ -365,7 +406,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['renderHTML'], + storage: Storage, + parent: ParentConfig>['renderHTML'], }, props: { node: ProseMirrorNode, @@ -380,7 +422,8 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['renderText'], + storage: Storage, + parent: ParentConfig>['renderText'], }, props: { node: ProseMirrorNode, @@ -397,13 +440,14 @@ declare module '@tiptap/core' { this: { name: string, options: Options, - parent: ParentConfig>['addAttributes'], + storage: Storage, + parent: ParentConfig>['addAttributes'], }, ) => Attributes | {}, } } -export class Node { +export class Node { type = 'node' name = 'node' @@ -414,12 +458,14 @@ export class Node { options: Options + storage: Storage + config: NodeConfig = { name: this.name, defaultOptions: {}, } - constructor(config: Partial> = {}) { + constructor(config: Partial> = {}) { this.config = { ...this.config, ...config, @@ -427,10 +473,18 @@ export class Node { this.name = this.config.name this.options = this.config.defaultOptions + this.storage = callOrReturn(getExtensionField( + this, + 'addStorage', + { + name: this.name, + options: this.options, + }, + )) } - static create(config: Partial> = {}) { - return new Node(config) + static create(config: Partial> = {}) { + return new Node(config) } configure(options: Partial = {}) { @@ -440,11 +494,20 @@ export class Node { extension.options = mergeDeep(this.options, options) as Options + extension.storage = callOrReturn(getExtensionField( + extension, + 'addStorage', + { + name: extension.name, + options: extension.options, + }, + )) + return extension } - extend(extendedConfig: Partial> = {}) { - const extension = new Node(extendedConfig) + extend(extendedConfig: Partial> = {}) { + const extension = new Node(extendedConfig) extension.parent = this @@ -458,6 +521,15 @@ export class Node { ? extendedConfig.defaultOptions : extension.parent.options + extension.storage = callOrReturn(getExtensionField( + extension, + 'addStorage', + { + name: extension.name, + options: extension.options, + }, + )) + return extension } } diff --git a/packages/core/src/NodeView.ts b/packages/core/src/NodeView.ts index 020582f536..16f9afc894 100644 --- a/packages/core/src/NodeView.ts +++ b/packages/core/src/NodeView.ts @@ -113,11 +113,12 @@ export class NodeView< return false } + const isDropEvent = event.type === 'drop' const isInput = ['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(target.tagName) || target.isContentEditable // any input event within node views should be ignored by ProseMirror - if (isInput) { + if (isInput && !isDropEvent) { return true } @@ -129,7 +130,7 @@ export class NodeView< const isPasteEvent = event.type === 'paste' const isCutEvent = event.type === 'cut' const isClickEvent = event.type === 'mousedown' - const isDragEvent = event.type.startsWith('drag') || event.type === 'drop' + const isDragEvent = event.type.startsWith('drag') // ProseMirror tries to drag selectable nodes // even if `draggable` is set to `false` @@ -165,6 +166,7 @@ export class NodeView< // these events are handled by prosemirror if ( isDragging + || isDropEvent || isCopyEvent || isPasteEvent || isCutEvent diff --git a/packages/core/src/PasteRule.ts b/packages/core/src/PasteRule.ts index 7d4e9c9677..3a03ce7c76 100644 --- a/packages/core/src/PasteRule.ts +++ b/packages/core/src/PasteRule.ts @@ -3,6 +3,7 @@ import { Editor } from './Editor' import CommandManager from './CommandManager' import createChainableState from './helpers/createChainableState' import isRegExp from './utilities/isRegExp' +import isNumber from './utilities/isNumber' import { Range, ExtendedRegExpMatchArray, @@ -177,7 +178,7 @@ export function pasteRulesPlugin(props: { editor: Editor, rules: PasteRule[] }): const from = before.content.findDiffStart(doc.content) const to = before.content.findDiffEnd(doc.content) - if (!from || !to || from === to.b) { + if (!isNumber(from) || !to || from === to.b) { return } diff --git a/packages/core/src/helpers/getAttributesFromExtensions.ts b/packages/core/src/helpers/getAttributesFromExtensions.ts index 1a81bf5f9d..d76a6a2dc0 100644 --- a/packages/core/src/helpers/getAttributesFromExtensions.ts +++ b/packages/core/src/helpers/getAttributesFromExtensions.ts @@ -30,6 +30,7 @@ export default function getAttributesFromExtensions(extensions: Extensions): Ext const context = { name: extension.name, options: extension.options, + storage: extension.storage, } const addGlobalAttributes = getExtensionField( @@ -67,6 +68,7 @@ export default function getAttributesFromExtensions(extensions: Extensions): Ext const context = { name: extension.name, options: extension.options, + storage: extension.storage, } const addAttributes = getExtensionField( diff --git a/packages/core/src/helpers/getExtensionField.ts b/packages/core/src/helpers/getExtensionField.ts index cfe03c75b7..90df54ff2e 100644 --- a/packages/core/src/helpers/getExtensionField.ts +++ b/packages/core/src/helpers/getExtensionField.ts @@ -1,9 +1,9 @@ -import { AnyExtension, RemoveThis } from '../types' +import { AnyExtension, RemoveThis, MaybeThisParameterType } from '../types' export default function getExtensionField( extension: AnyExtension, field: string, - context: Record = {}, + context?: Omit, 'parent'>, ): RemoveThis { if (extension.config[field] === undefined && extension.parent) { diff --git a/packages/core/src/helpers/getSchemaByResolvedExtensions.ts b/packages/core/src/helpers/getSchemaByResolvedExtensions.ts index 2ef0063964..bf899c0135 100644 --- a/packages/core/src/helpers/getSchemaByResolvedExtensions.ts +++ b/packages/core/src/helpers/getSchemaByResolvedExtensions.ts @@ -29,6 +29,7 @@ export default function getSchemaByResolvedExtensions(extensions: Extensions): S const context = { name: extension.name, options: extension.options, + storage: extension.storage, } const extraNodeFields = extensions.reduce((fields, e) => { @@ -91,6 +92,7 @@ export default function getSchemaByResolvedExtensions(extensions: Extensions): S const context = { name: extension.name, options: extension.options, + storage: extension.storage, } const extraMarkFields = extensions.reduce((fields, e) => { diff --git a/packages/core/src/helpers/isList.ts b/packages/core/src/helpers/isList.ts index 424890b8e1..1705458d7f 100644 --- a/packages/core/src/helpers/isList.ts +++ b/packages/core/src/helpers/isList.ts @@ -15,6 +15,7 @@ export default function isList(name: string, extensions: Extensions): boolean { const context = { name: extension.name, options: extension.options, + storage: extension.storage, } const group = callOrReturn(getExtensionField(extension, 'group', context)) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 241ceff092..8c622edce4 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -56,10 +56,10 @@ export { default as posToDOMRect } from './helpers/posToDOMRect' export interface Commands {} // eslint-disable-next-line -export interface ExtensionConfig {} +export interface ExtensionConfig {} // eslint-disable-next-line -export interface NodeConfig {} +export interface NodeConfig {} // eslint-disable-next-line -export interface MarkConfig {} +export interface MarkConfig {} diff --git a/packages/core/src/style.ts b/packages/core/src/style.ts index 7a2563e889..ef5a0a291d 100644 --- a/packages/core/src/style.ts +++ b/packages/core/src/style.ts @@ -27,6 +27,8 @@ img.ProseMirror-separator { display: inline !important; border: none !important; margin: 0 !important; + width: 1px !important; + height: 1px !important; } .ProseMirror-gapcursor { diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index deeb3a9723..9691c014a3 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -31,6 +31,15 @@ export type ParentConfig = Partial<{ : T[P] }> +export type Primitive = + | null + | undefined + | string + | number + | boolean + | symbol + | bigint + export type RemoveThis = T extends (...args: any) => any ? (...args: Parameters) => ReturnType : T @@ -39,6 +48,10 @@ export type MaybeReturnType = T extends (...args: any) => any ? ReturnType : T +export type MaybeThisParameterType = Exclude extends (...args: any) => any + ? ThisParameterType> + : any + export interface EditorEvents { beforeCreate: { editor: Editor }, create: { editor: Editor }, diff --git a/packages/core/src/utilities/findDuplicates.ts b/packages/core/src/utilities/findDuplicates.ts new file mode 100644 index 0000000000..541c062fce --- /dev/null +++ b/packages/core/src/utilities/findDuplicates.ts @@ -0,0 +1,5 @@ +export default function findDuplicates(items: any[]): any[] { + const filtered = items.filter((el, index) => items.indexOf(el) !== index) + + return [...new Set(filtered)] +} diff --git a/packages/core/src/utilities/isNumber.ts b/packages/core/src/utilities/isNumber.ts new file mode 100644 index 0000000000..952c2febb9 --- /dev/null +++ b/packages/core/src/utilities/isNumber.ts @@ -0,0 +1,3 @@ +export default function isNumber(value: any): value is number { + return typeof value === 'number' +} diff --git a/packages/extension-code-block-lowlight/CHANGELOG.md b/packages/extension-code-block-lowlight/CHANGELOG.md index 5d1cc64670..d873c9dd0f 100644 --- a/packages/extension-code-block-lowlight/CHANGELOG.md +++ b/packages/extension-code-block-lowlight/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.48](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-code-block-lowlight@2.0.0-beta.47...@tiptap/extension-code-block-lowlight@2.0.0-beta.48) (2021-10-25) + +**Note:** Version bump only for package @tiptap/extension-code-block-lowlight + + + + + # [2.0.0-beta.47](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-code-block-lowlight@2.0.0-beta.46...@tiptap/extension-code-block-lowlight@2.0.0-beta.47) (2021-10-14) **Note:** Version bump only for package @tiptap/extension-code-block-lowlight diff --git a/packages/extension-code-block-lowlight/package.json b/packages/extension-code-block-lowlight/package.json index a97dcaadab..47bda4c809 100644 --- a/packages/extension-code-block-lowlight/package.json +++ b/packages/extension-code-block-lowlight/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/extension-code-block-lowlight", "description": "code block extension for tiptap", - "version": "2.0.0-beta.47", + "version": "2.0.0-beta.48", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", @@ -27,7 +27,7 @@ "@tiptap/extension-code-block": "^2.0.0-beta.24", "@types/lowlight": "^0.0.3", "lowlight": "^1.20.0", - "prosemirror-model": "^1.14.3", + "prosemirror-model": "^1.15.0", "prosemirror-state": "^1.3.4", "prosemirror-view": "^1.20.3" }, diff --git a/packages/extension-gapcursor/CHANGELOG.md b/packages/extension-gapcursor/CHANGELOG.md index 03ec1aa61e..ec90382ec6 100644 --- a/packages/extension-gapcursor/CHANGELOG.md +++ b/packages/extension-gapcursor/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.28](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-gapcursor@2.0.0-beta.27...@tiptap/extension-gapcursor@2.0.0-beta.28) (2021-10-22) + + +### Features + +* Add extension storage ([#2069](https://github.com/ueberdosis/tiptap/issues/2069)) ([7ffabf2](https://github.com/ueberdosis/tiptap/commit/7ffabf251c408a652eec1931cc78a8bd43cccb67)) + + + + + # [2.0.0-beta.27](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-gapcursor@2.0.0-beta.26...@tiptap/extension-gapcursor@2.0.0-beta.27) (2021-10-14) **Note:** Version bump only for package @tiptap/extension-gapcursor diff --git a/packages/extension-gapcursor/package.json b/packages/extension-gapcursor/package.json index 978f2645ed..73a501baa5 100644 --- a/packages/extension-gapcursor/package.json +++ b/packages/extension-gapcursor/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/extension-gapcursor", "description": "gapcursor extension for tiptap", - "version": "2.0.0-beta.27", + "version": "2.0.0-beta.28", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", diff --git a/packages/extension-gapcursor/src/gapcursor.ts b/packages/extension-gapcursor/src/gapcursor.ts index 214445b80e..686b3302cf 100644 --- a/packages/extension-gapcursor/src/gapcursor.ts +++ b/packages/extension-gapcursor/src/gapcursor.ts @@ -7,7 +7,7 @@ import { import { gapCursor } from 'prosemirror-gapcursor' declare module '@tiptap/core' { - interface NodeConfig { + interface NodeConfig { /** * Allow gap cursor */ @@ -17,6 +17,7 @@ declare module '@tiptap/core' { | ((this: { name: string, options: Options, + storage: Storage, parent: ParentConfig>['allowGapCursor'], }) => boolean | null), } @@ -35,6 +36,7 @@ export const Gapcursor = Extension.create({ const context = { name: extension.name, options: extension.options, + storage: extension.storage, } return { diff --git a/packages/extension-mention/CHANGELOG.md b/packages/extension-mention/CHANGELOG.md index da3994cbca..6786239ff6 100644 --- a/packages/extension-mention/CHANGELOG.md +++ b/packages/extension-mention/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.79](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-mention@2.0.0-beta.78...@tiptap/extension-mention@2.0.0-beta.79) (2021-10-25) + +**Note:** Version bump only for package @tiptap/extension-mention + + + + + +# [2.0.0-beta.78](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-mention@2.0.0-beta.77...@tiptap/extension-mention@2.0.0-beta.78) (2021-10-22) + + +### Bug Fixes + +* fix check for showing mention suggestion ([5e652c9](https://github.com/ueberdosis/tiptap/commit/5e652c94a7d72e480003449b2dd6050a55df9cc7)) + + + + + # [2.0.0-beta.77](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-mention@2.0.0-beta.76...@tiptap/extension-mention@2.0.0-beta.77) (2021-10-14) **Note:** Version bump only for package @tiptap/extension-mention diff --git a/packages/extension-mention/package.json b/packages/extension-mention/package.json index bf93bd275d..14526307a5 100644 --- a/packages/extension-mention/package.json +++ b/packages/extension-mention/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/extension-mention", "description": "mention extension for tiptap", - "version": "2.0.0-beta.77", + "version": "2.0.0-beta.79", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", @@ -24,8 +24,8 @@ "@tiptap/core": "^2.0.0-beta.1" }, "dependencies": { - "@tiptap/suggestion": "^2.0.0-beta.74", - "prosemirror-model": "^1.14.3", + "@tiptap/suggestion": "^2.0.0-beta.75", + "prosemirror-model": "^1.15.0", "prosemirror-state": "^1.3.4" }, "repository": { diff --git a/packages/extension-mention/src/mention.ts b/packages/extension-mention/src/mention.ts index 69f925d778..41c768a447 100644 --- a/packages/extension-mention/src/mention.ts +++ b/packages/extension-mention/src/mention.ts @@ -51,7 +51,11 @@ export const Mention = Node.create({ .run() }, allow: ({ editor, range }) => { - return editor.can().insertContentAt(range, { type: 'mention' }) + const $from = editor.state.doc.resolve(range.from) + const type = editor.schema.nodes.mention + const allow = !!$from.parent.type.contentMatch.matchType(type) + + return allow }, }, }, diff --git a/packages/extension-placeholder/CHANGELOG.md b/packages/extension-placeholder/CHANGELOG.md index b5a44dfc77..9f71b53212 100644 --- a/packages/extension-placeholder/CHANGELOG.md +++ b/packages/extension-placeholder/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.36](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-placeholder@2.0.0-beta.35...@tiptap/extension-placeholder@2.0.0-beta.36) (2021-10-25) + +**Note:** Version bump only for package @tiptap/extension-placeholder + + + + + # [2.0.0-beta.35](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-placeholder@2.0.0-beta.34...@tiptap/extension-placeholder@2.0.0-beta.35) (2021-10-14) **Note:** Version bump only for package @tiptap/extension-placeholder diff --git a/packages/extension-placeholder/package.json b/packages/extension-placeholder/package.json index 869dee3ac2..a07cf60b1a 100644 --- a/packages/extension-placeholder/package.json +++ b/packages/extension-placeholder/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/extension-placeholder", "description": "placeholder extension for tiptap", - "version": "2.0.0-beta.35", + "version": "2.0.0-beta.36", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", @@ -24,7 +24,7 @@ "@tiptap/core": "^2.0.0-beta.1" }, "dependencies": { - "prosemirror-model": "^1.14.3", + "prosemirror-model": "^1.15.0", "prosemirror-state": "^1.3.4", "prosemirror-view": "^1.20.3" }, diff --git a/packages/extension-table/CHANGELOG.md b/packages/extension-table/CHANGELOG.md index 7d16fadba5..4ef2cad2c7 100644 --- a/packages/extension-table/CHANGELOG.md +++ b/packages/extension-table/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.35](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-table@2.0.0-beta.34...@tiptap/extension-table@2.0.0-beta.35) (2021-10-22) + + +### Features + +* Add extension storage ([#2069](https://github.com/ueberdosis/tiptap/issues/2069)) ([7ffabf2](https://github.com/ueberdosis/tiptap/commit/7ffabf251c408a652eec1931cc78a8bd43cccb67)) + + + + + # [2.0.0-beta.34](https://github.com/ueberdosis/tiptap/compare/@tiptap/extension-table@2.0.0-beta.33...@tiptap/extension-table@2.0.0-beta.34) (2021-10-14) **Note:** Version bump only for package @tiptap/extension-table diff --git a/packages/extension-table/package.json b/packages/extension-table/package.json index 171d15c1ab..6c11c6d366 100644 --- a/packages/extension-table/package.json +++ b/packages/extension-table/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/extension-table", "description": "table extension for tiptap", - "version": "2.0.0-beta.34", + "version": "2.0.0-beta.35", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", diff --git a/packages/extension-table/src/table.ts b/packages/extension-table/src/table.ts index 0c464f8c55..9df7be4285 100644 --- a/packages/extension-table/src/table.ts +++ b/packages/extension-table/src/table.ts @@ -66,13 +66,14 @@ declare module '@tiptap/core' { } } - interface NodeConfig { + interface NodeConfig { /** * Table Role */ tableRole?: string | ((this: { name: string, options: Options, + storage: Storage, parent: ParentConfig>['tableRole'], }) => string), } @@ -245,6 +246,7 @@ export const Table = Node.create({ const context = { name: extension.name, options: extension.options, + storage: extension.storage, } return { diff --git a/packages/html/CHANGELOG.md b/packages/html/CHANGELOG.md index 83603011a9..e76d7b9466 100644 --- a/packages/html/CHANGELOG.md +++ b/packages/html/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.127](https://github.com/ueberdosis/tiptap/compare/@tiptap/html@2.0.0-beta.126...@tiptap/html@2.0.0-beta.127) (2021-10-25) + +**Note:** Version bump only for package @tiptap/html + + + + + +# [2.0.0-beta.126](https://github.com/ueberdosis/tiptap/compare/@tiptap/html@2.0.0-beta.125...@tiptap/html@2.0.0-beta.126) (2021-10-22) + +**Note:** Version bump only for package @tiptap/html + + + + + +# [2.0.0-beta.125](https://github.com/ueberdosis/tiptap/compare/@tiptap/html@2.0.0-beta.124...@tiptap/html@2.0.0-beta.125) (2021-10-22) + +**Note:** Version bump only for package @tiptap/html + + + + + # [2.0.0-beta.124](https://github.com/ueberdosis/tiptap/compare/@tiptap/html@2.0.0-beta.123...@tiptap/html@2.0.0-beta.124) (2021-10-14) **Note:** Version bump only for package @tiptap/html diff --git a/packages/html/package.json b/packages/html/package.json index be790ef339..608b9ca289 100644 --- a/packages/html/package.json +++ b/packages/html/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/html", "description": "utility package to render tiptap JSON as HTML", - "version": "2.0.0-beta.124", + "version": "2.0.0-beta.127", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", @@ -21,9 +21,9 @@ "dist" ], "dependencies": { - "@tiptap/core": "^2.0.0-beta.125", + "@tiptap/core": "^2.0.0-beta.128", "hostic-dom": "^0.8.7", - "prosemirror-model": "^1.14.3" + "prosemirror-model": "^1.15.0" }, "repository": { "type": "git", diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 73ad3cd37c..ea0213d430 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.85](https://github.com/ueberdosis/tiptap/compare/@tiptap/react@2.0.0-beta.84...@tiptap/react@2.0.0-beta.85) (2021-10-25) + + +### Bug Fixes + +* Check node type above custom update function for node views ([#2081](https://github.com/ueberdosis/tiptap/issues/2081)) ([ddc9ca8](https://github.com/ueberdosis/tiptap/commit/ddc9ca8d4f347566f83513a386922afe52f26da1)) + + + + + +# [2.0.0-beta.84](https://github.com/ueberdosis/tiptap/compare/@tiptap/react@2.0.0-beta.83...@tiptap/react@2.0.0-beta.84) (2021-10-22) + + +### Features + +* Add extension storage ([#2069](https://github.com/ueberdosis/tiptap/issues/2069)) ([7ffabf2](https://github.com/ueberdosis/tiptap/commit/7ffabf251c408a652eec1931cc78a8bd43cccb67)) + + + + + # [2.0.0-beta.83](https://github.com/ueberdosis/tiptap/compare/@tiptap/react@2.0.0-beta.82...@tiptap/react@2.0.0-beta.83) (2021-10-14) **Note:** Version bump only for package @tiptap/react diff --git a/packages/react/package.json b/packages/react/package.json index 8aa9f175ec..1b9599f351 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/react", "description": "React components for tiptap", - "version": "2.0.0-beta.83", + "version": "2.0.0-beta.85", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", @@ -21,8 +21,8 @@ "dist" ], "devDependencies": { - "@types/react": "^17.0.29", - "@types/react-dom": "^17.0.7", + "@types/react": "^17.0.32", + "@types/react-dom": "^17.0.10", "react": "^17.0.0", "react-dom": "^17.0.0" }, diff --git a/packages/react/src/ReactNodeViewRenderer.tsx b/packages/react/src/ReactNodeViewRenderer.tsx index e13945f290..6d21e02c80 100644 --- a/packages/react/src/ReactNodeViewRenderer.tsx +++ b/packages/react/src/ReactNodeViewRenderer.tsx @@ -114,6 +114,10 @@ class ReactNodeView extends NodeView = {}, deps: Dependency setEditor(instance) - instance.on('transaction', forceUpdate) + instance.on('transaction', () => { + requestAnimationFrame(() => { + requestAnimationFrame(() => { + forceUpdate() + }) + }) + }) return () => { instance.destroy() diff --git a/packages/starter-kit/CHANGELOG.md b/packages/starter-kit/CHANGELOG.md index bc83e43be1..a5d10f3255 100644 --- a/packages/starter-kit/CHANGELOG.md +++ b/packages/starter-kit/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.130](https://github.com/ueberdosis/tiptap/compare/@tiptap/starter-kit@2.0.0-beta.129...@tiptap/starter-kit@2.0.0-beta.130) (2021-10-25) + +**Note:** Version bump only for package @tiptap/starter-kit + + + + + +# [2.0.0-beta.129](https://github.com/ueberdosis/tiptap/compare/@tiptap/starter-kit@2.0.0-beta.128...@tiptap/starter-kit@2.0.0-beta.129) (2021-10-22) + +**Note:** Version bump only for package @tiptap/starter-kit + + + + + +# [2.0.0-beta.128](https://github.com/ueberdosis/tiptap/compare/@tiptap/starter-kit@2.0.0-beta.127...@tiptap/starter-kit@2.0.0-beta.128) (2021-10-22) + +**Note:** Version bump only for package @tiptap/starter-kit + + + + + # [2.0.0-beta.127](https://github.com/ueberdosis/tiptap/compare/@tiptap/starter-kit@2.0.0-beta.126...@tiptap/starter-kit@2.0.0-beta.127) (2021-10-14) **Note:** Version bump only for package @tiptap/starter-kit diff --git a/packages/starter-kit/package.json b/packages/starter-kit/package.json index 6cff7f1a61..c871301bf0 100644 --- a/packages/starter-kit/package.json +++ b/packages/starter-kit/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/starter-kit", "description": "starter kit for tiptap", - "version": "2.0.0-beta.127", + "version": "2.0.0-beta.130", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", @@ -21,7 +21,7 @@ "dist" ], "dependencies": { - "@tiptap/core": "^2.0.0-beta.125", + "@tiptap/core": "^2.0.0-beta.128", "@tiptap/extension-blockquote": "^2.0.0-beta.19", "@tiptap/extension-bold": "^2.0.0-beta.19", "@tiptap/extension-bullet-list": "^2.0.0-beta.18", @@ -29,7 +29,7 @@ "@tiptap/extension-code-block": "^2.0.0-beta.24", "@tiptap/extension-document": "^2.0.0-beta.13", "@tiptap/extension-dropcursor": "^2.0.0-beta.19", - "@tiptap/extension-gapcursor": "^2.0.0-beta.27", + "@tiptap/extension-gapcursor": "^2.0.0-beta.28", "@tiptap/extension-hard-break": "^2.0.0-beta.24", "@tiptap/extension-heading": "^2.0.0-beta.18", "@tiptap/extension-history": "^2.0.0-beta.16", diff --git a/packages/suggestion/CHANGELOG.md b/packages/suggestion/CHANGELOG.md index 4181d6e499..3e4f6e61c7 100644 --- a/packages/suggestion/CHANGELOG.md +++ b/packages/suggestion/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.75](https://github.com/ueberdosis/tiptap/compare/@tiptap/suggestion@2.0.0-beta.74...@tiptap/suggestion@2.0.0-beta.75) (2021-10-25) + +**Note:** Version bump only for package @tiptap/suggestion + + + + + # [2.0.0-beta.74](https://github.com/ueberdosis/tiptap/compare/@tiptap/suggestion@2.0.0-beta.73...@tiptap/suggestion@2.0.0-beta.74) (2021-10-14) **Note:** Version bump only for package @tiptap/suggestion diff --git a/packages/suggestion/package.json b/packages/suggestion/package.json index 934737db58..8c39cf50dc 100644 --- a/packages/suggestion/package.json +++ b/packages/suggestion/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/suggestion", "description": "suggestion plugin for tiptap", - "version": "2.0.0-beta.74", + "version": "2.0.0-beta.75", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", @@ -24,7 +24,7 @@ "@tiptap/core": "^2.0.0-beta.1" }, "dependencies": { - "prosemirror-model": "^1.14.3", + "prosemirror-model": "^1.15.0", "prosemirror-state": "^1.3.4", "prosemirror-view": "^1.20.3" }, diff --git a/packages/suggestion/src/suggestion.ts b/packages/suggestion/src/suggestion.ts index a5d780b807..b174b5d868 100644 --- a/packages/suggestion/src/suggestion.ts +++ b/packages/suggestion/src/suggestion.ts @@ -17,7 +17,10 @@ export interface SuggestionOptions { range: Range, props: any, }) => void, - items?: (query: string) => any[] | Promise, + items?: (props: { + query: string, + editor: Editor, + }) => any[] | Promise, render?: () => { onStart?: (props: SuggestionProps) => void, onUpdate?: (props: SuggestionProps) => void, @@ -99,7 +102,10 @@ export function Suggestion({ query: state.query, text: state.text, items: (handleChange || handleStart) - ? await items(state.query) + ? await items({ + editor, + query: state.query, + }) : [], command: commandProps => { command({ diff --git a/packages/vue-3/CHANGELOG.md b/packages/vue-3/CHANGELOG.md index a4029bc673..6bbfbc555c 100644 --- a/packages/vue-3/CHANGELOG.md +++ b/packages/vue-3/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0-beta.72](https://github.com/ueberdosis/tiptap/compare/@tiptap/vue-3@2.0.0-beta.71...@tiptap/vue-3@2.0.0-beta.72) (2021-10-22) + + +### Bug Fixes + +* fix a bug when using drag handles ([8f8b83a](https://github.com/ueberdosis/tiptap/commit/8f8b83afe47085a86caef00b48ad64c87a64af89)) + + + + + +# [2.0.0-beta.71](https://github.com/ueberdosis/tiptap/compare/@tiptap/vue-3@2.0.0-beta.70...@tiptap/vue-3@2.0.0-beta.71) (2021-10-22) + + +### Features + +* Add extension storage ([#2069](https://github.com/ueberdosis/tiptap/issues/2069)) ([7ffabf2](https://github.com/ueberdosis/tiptap/commit/7ffabf251c408a652eec1931cc78a8bd43cccb67)) + + + + + # [2.0.0-beta.70](https://github.com/ueberdosis/tiptap/compare/@tiptap/vue-3@2.0.0-beta.69...@tiptap/vue-3@2.0.0-beta.70) (2021-10-14) **Note:** Version bump only for package @tiptap/vue-3 diff --git a/packages/vue-3/package.json b/packages/vue-3/package.json index 32c014d5f6..637bc85e8c 100644 --- a/packages/vue-3/package.json +++ b/packages/vue-3/package.json @@ -1,7 +1,7 @@ { "name": "@tiptap/vue-3", "description": "Vue components for tiptap", - "version": "2.0.0-beta.70", + "version": "2.0.0-beta.72", "homepage": "https://tiptap.dev", "keywords": [ "tiptap", diff --git a/packages/vue-3/src/Editor.ts b/packages/vue-3/src/Editor.ts index 5c61c6c8d3..68b69f671c 100644 --- a/packages/vue-3/src/Editor.ts +++ b/packages/vue-3/src/Editor.ts @@ -39,6 +39,8 @@ export type ContentComponent = ComponentInternalInstance & { export class Editor extends CoreEditor { private reactiveState: Ref + private reactiveExtensionStorage: Ref> + public vueRenderers = reactive>(new Map()) public contentComponent: ContentComponent | null = null @@ -47,9 +49,11 @@ export class Editor extends CoreEditor { super(options) this.reactiveState = useDebouncedRef(this.view.state) + this.reactiveExtensionStorage = useDebouncedRef(this.extensionStorage) this.on('transaction', () => { this.reactiveState.value = this.view.state + this.reactiveExtensionStorage.value = this.extensionStorage }) return markRaw(this) @@ -61,6 +65,12 @@ export class Editor extends CoreEditor { : this.view.state } + get storage() { + return this.reactiveExtensionStorage + ? this.reactiveExtensionStorage.value + : super.storage + } + /** * Register a ProseMirror plugin. */ diff --git a/packages/vue-3/src/NodeViewWrapper.ts b/packages/vue-3/src/NodeViewWrapper.ts index 04d0b54745..17e6ddbdf3 100644 --- a/packages/vue-3/src/NodeViewWrapper.ts +++ b/packages/vue-3/src/NodeViewWrapper.ts @@ -20,7 +20,7 @@ export const NodeViewWrapper = defineComponent({ }, 'data-node-view-wrapper': '', // @ts-ignore (https://github.com/vuejs/vue-next/issues/3031) - onDragStart: this.onDragStart, + onDragstart: this.onDragStart, }, this.$slots.default?.(), ) diff --git a/yarn.lock b/yarn.lock index 2d71f29b03..4c9a9d9157 100644 --- a/yarn.lock +++ b/yarn.lock @@ -882,9 +882,9 @@ semver "^6.3.0" "@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1933,10 +1933,10 @@ "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" -"@rollup/plugin-commonjs@^21.0.0": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.0.tgz#b9e4342855ea20b5528f4587b9a90f642196a502" - integrity sha512-XDQimjHl0kNotAV5lLo34XoygaI0teqiKGJ100B3iCU8+15YscJPeqk2KqkqD3NIe1H8ZTUo5lYjUFZyEgASTw== +"@rollup/plugin-commonjs@^21.0.1": + version "21.0.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz#1e57c81ae1518e4df0954d681c642e7d94588fee" + integrity sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg== dependencies: "@rollup/pluginutils" "^3.1.0" commondir "^1.0.1" @@ -1946,10 +1946,10 @@ magic-string "^0.25.7" resolve "^1.17.0" -"@rollup/plugin-node-resolve@^13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.5.tgz#016abe58796a4ff544d6beac7818921e3d3777fc" - integrity sha512-mVaw6uxtvuGx/XCI4qBQXsDZJUfyx5vp39iE0J/7Hd6wDhEbjHr6aES7Nr9yWbuE0BY+oKp6N7Bq6jX5NCGNmQ== +"@rollup/plugin-node-resolve@^13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz#29629070bb767567be8157f575cfa8f2b8e9ef77" + integrity sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA== dependencies: "@rollup/pluginutils" "^3.1.0" "@types/resolve" "1.17.1" @@ -1989,9 +1989,9 @@ "@types/estree" "*" "@types/eslint@*": - version "7.28.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.1.tgz#50b07747f1f84c2ba8cd394cf0fe0ba07afce320" - integrity sha512-XhZKznR3i/W5dXqUhgU9fFdJekufbeBd5DALmkuXoeFcjbQcPk+2cL+WLHf6Q81HWAnM2vrslIHpGVyCAviRwg== + version "7.28.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.2.tgz#0ff2947cdd305897c52d5372294e8c76f351db68" + integrity sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2006,7 +2006,7 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== @@ -2032,14 +2032,14 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": - version "16.10.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.9.tgz#8f1cdd517972f76a3b928298f4c0747cd6fef25a" - integrity sha512-H9ReOt+yqIJPCutkTYjFjlyK6WEMQYT9hLZMlWtOjFQY2ItppsWZ6RJf8Aw+jz5qTYceuHvFgPIaKOHtLAEWBw== + version "16.11.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.4.tgz#90771124822d6663814f7c1c9b45a6654d8fd964" + integrity sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ== "@types/node@^14.14.31": - version "14.17.26" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.26.tgz#47a53c7e7804490155a4646d60c8e194816d073c" - integrity sha512-eSTNkK/nfmnC7IKpOJZixDgG0W2/eHz1qyFN7o/rwwwIHsVRp+G9nbh4BrQ77kbQ2zPu286AQRxkuRLPcR3gXw== + version "14.17.29" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.29.tgz#44a774fa2858efa4d039dd9051b51160e8295c70" + integrity sha512-sd4CHI9eTJXTH2vF3RGtGkqvWRwhsSSUFsXD4oG38GZzSZ0tNPbWikd2AbOAcKxCXhOg57fL8FPxjpfSzb2pIQ== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2144,17 +2144,17 @@ "@types/prosemirror-state" "*" "@types/prosemirror-transform" "*" -"@types/react-dom@^17.0.7": - version "17.0.9" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.9.tgz#441a981da9d7be117042e1a6fd3dac4b30f55add" - integrity sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg== +"@types/react-dom@^17.0.10": + version "17.0.10" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.10.tgz#d6972ec018d23cf22b99597f1289343d99ea9d9d" + integrity sha512-8oz3NAUId2z/zQdFI09IMhQPNgIbiP8Lslhv39DIDamr846/0spjZK0vnrMak0iB8EKb9QFTTIdg2Wj2zH5a3g== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17.0.29": - version "17.0.29" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.29.tgz#9535f3fc01a4981ce9cadcf0daa2593c0c2f2251" - integrity sha512-HSenIfBEBZ70BLrrVhtEtHpqaP79waauPtA8XKlczTxL3hXrW/ElGNLTpD1TmqkykgGlOAK55+D3SmUHEirpFw== +"@types/react@*", "@types/react@^17.0.32": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.32.tgz#89a161286bbe2325d4d516420a27364a324909f4" + integrity sha512-hAm1pmwA3oZWbkB985RFwNvBRMG0F3KWSiC4/hNmanigKZMiKQoH5Q6etNw8HIDztTGfvXyOjPvdNnvBUCuaPg== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2194,74 +2194,74 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.0.0.tgz#ecc7cc69d1e6f342beb6ea9cf9fbc02c97a212ac" - integrity sha512-T6V6fCD2U0YesOedvydTnrNtsC8E+c2QzpawIpDdlaObX0OX5dLo7tLU5c64FhTZvA1Xrdim+cXDI7NPsVx8Cg== +"@typescript-eslint/eslint-plugin@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.1.0.tgz#381c188dfab12f7a2c7b6a8ba2402d6273eadeaa" + integrity sha512-bekODL3Tqf36Yz8u+ilha4zGxL9mdB6LIsIoMAvvC5FAuWo4NpZYXtCbv7B2CeR1LhI/lLtLk+q4tbtxuoVuCg== dependencies: - "@typescript-eslint/experimental-utils" "5.0.0" - "@typescript-eslint/scope-manager" "5.0.0" - debug "^4.3.1" + "@typescript-eslint/experimental-utils" "5.1.0" + "@typescript-eslint/scope-manager" "5.1.0" + debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" - regexpp "^3.1.0" + regexpp "^3.2.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.0.0.tgz#c7d7e67443dfb9fd93a5d060fb72c9e9b5638bbc" - integrity sha512-Dnp4dFIsZcPawD6CT1p5NibNUQyGSEz80sULJZkyhyna8AEqArmfwMwJPbmKzWVo4PabqNVzHYlzmcdLQWk+pg== +"@typescript-eslint/experimental-utils@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.1.0.tgz#918a1a3d30404cc1f8edcfdf0df200804ef90d31" + integrity sha512-ovE9qUiZMOMgxQAESZsdBT+EXIfx/YUYAbwGUI6V03amFdOOxI9c6kitkgRvLkJaLusgMZ2xBhss+tQ0Y1HWxA== dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "5.0.0" - "@typescript-eslint/types" "5.0.0" - "@typescript-eslint/typescript-estree" "5.0.0" + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.1.0" + "@typescript-eslint/types" "5.1.0" + "@typescript-eslint/typescript-estree" "5.1.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.0.0.tgz#50d1be2e0def82d73e863cceba74aeeac9973592" - integrity sha512-B6D5rmmQ14I1fdzs71eL3DAuvnPHTY/t7rQABrL9BLnx/H51Un8ox1xqYAchs0/V2trcoyxB1lMJLlrwrJCDgw== +"@typescript-eslint/parser@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.1.0.tgz#6c7f837d210d2bc0a811e7ea742af414f4e00908" + integrity sha512-vx1P+mhCtYw3+bRHmbalq/VKP2Y3gnzNgxGxfEWc6OFpuEL7iQdAeq11Ke3Rhy8NjgB+AHsIWEwni3e+Y7djKA== dependencies: - "@typescript-eslint/scope-manager" "5.0.0" - "@typescript-eslint/types" "5.0.0" - "@typescript-eslint/typescript-estree" "5.0.0" - debug "^4.3.1" + "@typescript-eslint/scope-manager" "5.1.0" + "@typescript-eslint/types" "5.1.0" + "@typescript-eslint/typescript-estree" "5.1.0" + debug "^4.3.2" -"@typescript-eslint/scope-manager@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.0.0.tgz#aea0fb0e2480c1169a02e89d9005ac3f2835713f" - integrity sha512-5RFjdA/ain/MDUHYXdF173btOKncIrLuBmA9s6FJhzDrRAyVSA+70BHg0/MW6TE+UiKVyRtX91XpVS0gVNwVDQ== +"@typescript-eslint/scope-manager@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.1.0.tgz#6f1f26ad66a8f71bbb33b635e74fec43f76b44df" + integrity sha512-yYlyVjvn5lvwCL37i4hPsa1s0ORsjkauhTqbb8MnpvUs7xykmcjGqwlNZ2Q5QpoqkJ1odlM2bqHqJwa28qV6Tw== dependencies: - "@typescript-eslint/types" "5.0.0" - "@typescript-eslint/visitor-keys" "5.0.0" + "@typescript-eslint/types" "5.1.0" + "@typescript-eslint/visitor-keys" "5.1.0" -"@typescript-eslint/types@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.0.0.tgz#25d93f6d269b2d25fdc51a0407eb81ccba60eb0f" - integrity sha512-dU/pKBUpehdEqYuvkojmlv0FtHuZnLXFBn16zsDmlFF3LXkOpkAQ2vrKc3BidIIve9EMH2zfTlxqw9XM0fFN5w== +"@typescript-eslint/types@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.1.0.tgz#a8a75ddfc611660de6be17d3ad950302385607a9" + integrity sha512-sEwNINVxcB4ZgC6Fe6rUyMlvsB2jvVdgxjZEjQUQVlaSPMNamDOwO6/TB98kFt4sYYfNhdhTPBEQqNQZjMMswA== -"@typescript-eslint/typescript-estree@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.0.0.tgz#bc20f413c6e572c7309dbe5fa3be027984952af3" - integrity sha512-V/6w+PPQMhinWKSn+fCiX5jwvd1vRBm7AX7SJQXEGQtwtBvjMPjaU3YTQ1ik2UF1u96X7tsB96HMnulG3eLi9Q== +"@typescript-eslint/typescript-estree@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.1.0.tgz#132aea34372df09decda961cb42457433aa6e83d" + integrity sha512-SSz+l9YrIIsW4s0ZqaEfnjl156XQ4VRmJsbA0ZE1XkXrD3cRpzuZSVCyqeCMR3EBjF27IisWakbBDGhGNIOvfQ== dependencies: - "@typescript-eslint/types" "5.0.0" - "@typescript-eslint/visitor-keys" "5.0.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" + "@typescript-eslint/types" "5.1.0" + "@typescript-eslint/visitor-keys" "5.1.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.0.0.tgz#b789f7cd105e59bee5c0983a353942a5a48f56df" - integrity sha512-yRyd2++o/IrJdyHuYMxyFyBhU762MRHQ/bAGQeTnN3pGikfh+nEmM61XTqaDH1XDp53afZ+waXrk0ZvenoZ6xw== +"@typescript-eslint/visitor-keys@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.1.0.tgz#e01a01b27eb173092705ae983aa1451bd1842630" + integrity sha512-uqNXepKBg81JVwjuqAxYrXa1Ql/YDzM+8g/pS+TCPxba0wZttl8m5DkrasbfnmJGHs4lQ2jTbcZ5azGhI7kK+w== dependencies: - "@typescript-eslint/types" "5.0.0" + "@typescript-eslint/types" "5.1.0" eslint-visitor-keys "^3.0.0" "@vitejs/plugin-react-refresh@^1.3.6": @@ -2322,7 +2322,7 @@ "@vue/compiler-dom" "3.2.20" "@vue/shared" "3.2.20" -"@vue/devtools-api@^6.0.0-beta.14": +"@vue/devtools-api@^6.0.0-beta.18": version "6.0.0-beta.19" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.19.tgz#f8e88059daa424515992426a0c7ea5cde07e99bf" integrity sha512-ObzQhgkoVeoyKv+e8+tB/jQBL2smtk/NmC9OmFK8UqdDpoOdv/Kf9pyDWL+IFyM7qLD2C75rszJujvGSPSpGlw== @@ -2636,11 +2636,6 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2822,10 +2817,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-loader@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== +babel-loader@^8.2.3: + version "8.2.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" + integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== dependencies: find-cache-dir "^3.3.1" loader-utils "^1.4.0" @@ -2927,15 +2922,15 @@ brotli-size@^4.0.0: dependencies: duplexer "0.1.1" -browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.3: - version "4.17.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.4.tgz#72e2508af2a403aec0a49847ef31bd823c57ead4" - integrity sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ== +browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.3, browserslist@^4.17.5: + version "4.17.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz#c827bbe172a4c22b123f5e337533ceebadfdd559" + integrity sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA== dependencies: - caniuse-lite "^1.0.30001265" - electron-to-chromium "^1.3.867" + caniuse-lite "^1.0.30001271" + electron-to-chromium "^1.3.878" escalade "^3.1.1" - node-releases "^2.0.0" + node-releases "^2.0.1" picocolors "^1.0.0" buffer-crc32@~0.2.3: @@ -3057,10 +3052,10 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001264, caniuse-lite@^1.0.30001265: - version "1.0.30001267" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz#b1cf2937175afc0570e4615fc2d2f9069fa0ed30" - integrity sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg== +caniuse-lite@^1.0.30001264, caniuse-lite@^1.0.30001271: + version "1.0.30001271" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz#0dda0c9bcae2cf5407cd34cac304186616cc83e8" + integrity sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA== caseless@~0.12.0: version "0.12.0" @@ -3244,10 +3239,10 @@ color@^4.0.1: color-convert "^2.0.1" color-string "^1.6.0" -colorette@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +colorette@^2.0.16: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== colors@^1.1.2: version "1.4.0" @@ -3290,9 +3285,9 @@ commander@^6.0.0: integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== commander@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.2.0.tgz#37fe2bde301d87d47a53adeff8b5915db1381ca8" - integrity sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA== + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== common-tags@^1.8.0: version "1.8.0" @@ -3402,9 +3397,9 @@ conventional-commits-filter@^2.0.7: modify-values "^1.0.0" conventional-commits-parser@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.2.tgz#190fb9900c6e02be0c0bca9b03d57e24982639fd" - integrity sha512-Jr9KAKgqAkwXMRHjxDwO/zOCDKod1XdAESHAGuJX38iZ7ZzVti/tvVoysO0suMsdAObp9NQ2rHSsSbnAqZ5f5g== + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" + integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" @@ -3435,11 +3430,11 @@ convert-source-map@^1.7.0: safe-buffer "~5.1.1" core-js-compat@^3.16.0, core-js-compat@^3.16.2: - version "3.18.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.3.tgz#e0e7e87abc55efb547e7fa19169e45fa9df27a67" - integrity sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw== + version "3.19.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.0.tgz#b3b93f93c8721b3ed52b91f12f964cc410967f8b" + integrity sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw== dependencies: - browserslist "^4.17.3" + browserslist "^4.17.5" semver "7.0.0" core-util-is@1.0.2: @@ -4049,10 +4044,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.867: - version "1.3.868" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.868.tgz#ed835023b57ecf0ba63dfe7d50e16b53758ab1da" - integrity sha512-kZYCHqwJ1ctGrYDlOcWQH+/AftAm/KD4lEnLDNwS0kKwx1x6dU4zv+GuDjsPPOGn/2TjnKBaZjDyjXaoix0q/A== +electron-to-chromium@^1.3.878: + version "1.3.878" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz#baa9fb5c24b9b580f08fb245cbb52a22f8fc8fa8" + integrity sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA== emoji-regex@^8.0.0: version "8.0.0" @@ -4187,113 +4182,113 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild-android-arm64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.6.tgz#a109b4e5203e9ec144cadccdf18a5daf021423e5" - integrity sha512-uEwrMRzqNzXxzIi0K/CtHn3/SPoRso4Dd/aJCpf9KuX+kCs9Tlhz29cKbZieznYAekdo36fDUrZyuugAwSdI+A== - -esbuild-darwin-64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.6.tgz#1a00ef4d2b3b1fe9de28a5cf195df113d6461155" - integrity sha512-oJdWZn2QV5LTM24/vVWaUFlMVlRhpG9zZIA6Xd+xbCULOURwYnYRQWIzRpXNtTfuAr3+em9PqKUaGtYqvO/DYg== - -esbuild-darwin-arm64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.6.tgz#f48954d441059e2d06c1675ddcc25af00b164935" - integrity sha512-+f8Yn5doTEpCWtBaGxciDTikxESdGCNZpLYtXzMJLTWFHr8zqfAf4TAYGvg6T5T6N7OMC8HHy3GM+BijFXDXMg== - -esbuild-freebsd-64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.6.tgz#b3bfea7e21f0d80796220927118fc76170cac06f" - integrity sha512-Yb/DgZUX0C6i4vnOymthLzoWAJBYWbn3Y2F4wKEufsx2veGN/wlwO/yz7IWGVVzb2zMUqbt30hCLF61sUFe7gA== - -esbuild-freebsd-arm64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.6.tgz#e6f5777a85012457ada049fc6b1e3e2c36161514" - integrity sha512-UKYlEb7mwprSJ9VW9+q3/Mgxest45I6rGMB/hrKY1T6lqoBVhWS4BTbL4EGetWdk05Tw4njFAO9+nmxgl7jMlA== - -esbuild-linux-32@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.6.tgz#8b04058312a76faec6964b954f1f02ab32ce43fe" - integrity sha512-hQCZfSLBYtn8f1afFT6Dh9KeLsW12xLqrqssbhpi/xfN9c/bbCh/QQZaR9ZOEnmBHHRPb7rbSo3jQqlCWYb7LQ== - -esbuild-linux-64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.6.tgz#554d8edfe3f791f8b26978eb173b2e13643442c0" - integrity sha512-bRQwsD+xJoajonfyeq5JpiNRogH4mYFYbYsGhwrtQ4pMGk93V/4KuKQiKEisRZO0hYhZL4MtxufwF195zKlCAw== - -esbuild-linux-arm64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.6.tgz#2142fadbdbc0ebd52a166f956f0ecb1f6602112a" - integrity sha512-sRc1lt9ma1xBvInCwpS77ywR6KVdcJNsErsrDkDXx3mVe8DLLEn05TG0nIX9I+s8ouHEepikdKCfe1DZdILRjQ== - -esbuild-linux-arm@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.6.tgz#ced8e35a94e0adbf134e5fa4e2b661f897e14b27" - integrity sha512-qQUrpL7QoPqujXEFSpeu6QZ43z0+OdDPHDkLO0GPbpV/jebP7J+0FreMqoq7ZxWG4rPigwcRdEyqzHh8Bh4Faw== - -esbuild-linux-mips64le@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.6.tgz#e5cbc050f5d44f8ecc0f79b1641bbad3919a2b3a" - integrity sha512-1lsHZaIsHlFkHn1QRa/EONPGVHwzdIrkKn6r2m9cYUIn2J+rKtJg0e+WkNG3MaIrxozaGKaiSPGvaG1toCbZjw== - -esbuild-linux-ppc64le@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.6.tgz#57868a7eb762c1d19fa6d367b09a4610f0cbf7ca" - integrity sha512-x223JNC8XeLDf05zLaKfxqCEWVct4frp8ft8Qc13cha33TMrqMFaSPq6cgpgT2VYuUsXtwoocoWChKfvy+AUQg== - -esbuild-netbsd-64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.6.tgz#1c5daa62571f1065e4a1100a1db5e488ef259024" - integrity sha512-TonKf530kT25+zi1Da6esITmuBJe13QiN+QGVch6YE8t720IvIelDGwkOQN3Td7A0JjbSbK3u+Fo6YaL151VxQ== - -esbuild-openbsd-64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.6.tgz#315fd85970365835f6a1eb7b6e9335d59f772564" - integrity sha512-WFa5J0IuyER0UJbCGw87gvGWXGfhxeNppYcvQjp0pWYuH4FS+YqphyjV0RJlybzzDpAXkyZ9RzkMFtSAp+6AUA== - -esbuild-sunos-64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.6.tgz#8422eeb9f3712daa4befd19e5da6d7c9af9fc744" - integrity sha512-duCL8Ewri+zjKxuN/61maniDxcd8fHwSuubdAPofll0y0E6WcL/R/e/mQzhHIuoguFm5RJkKun1qua54javh7g== - -esbuild-windows-32@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.6.tgz#694eb4768ee72219d3bc6415b1d3a0f843aea9ec" - integrity sha512-U8RkpT4f0/dygA5ytFyHNZ/fRECU9LWBMrqWflNhM31iTi6RhU0QTuOzFYkmpYnwl358ZZhVoBeEOm313d4u4A== - -esbuild-windows-64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.6.tgz#1adbf5367b08e735262f57098d19c07d0a2fec1c" - integrity sha512-A23VyUeyBfSWUYNL0jtrJi5M/2yR/RR8zfpGQ0wU0fldqV2vxnvmBYOBwRxexFYCDRpRWh4cPFsoYoXRCFa8Dg== - -esbuild-windows-arm64@0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.6.tgz#9279083740ec90a2d638485c97b1d003771d685a" - integrity sha512-K/pFqK/s5C6wXYcFKO9iPY4yU3DI0/Gbl1W2+OhaPHoXu13VGBmqbCiQ5lohHGE72FFQl76naOjEayEiI+gDMQ== +esbuild-android-arm64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.9.tgz#6cc4a0c623332c0830a311ddd8242b1f496ff940" + integrity sha512-Ty0hKldtjJVLHwUwbKR4GFPiXBo5iQ3aE1OLBar9lh3myaRkUGEb+Ypl74LEKa0+t/9lS3Ev1N5+5P2Sq6UvNQ== + +esbuild-darwin-64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.9.tgz#df44297c2438032cda2b21548a82bb007e2105cc" + integrity sha512-Ay0/b98v0oYp3ApXNQ7QPbaSkCT9WjBU6h8bMB1SYrQ/PmHgwph91fb9V0pfOLKK1rYWypfrNbI0MyT2tWN+rQ== + +esbuild-darwin-arm64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.9.tgz#704ef404a6a38eda190d40ed354e7f2c1c839081" + integrity sha512-nJB8chaJdWathCe6EyIiMIqfyEzbuXPyNsPlL3bYRB1zFCF8feXT874D4IHbJ/w8B6BpY3sM1Clr/I/DK8E4ow== + +esbuild-freebsd-64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.9.tgz#fbbf22c99e15f27d0f8a1a040d7961a86f0d3a4e" + integrity sha512-ktaBujf12XLkVXLGx7WjFcmh1tt34tm7gP4pHkhvbzbHrq+BbXwcl4EsW+5JT9VNKl7slOGf4Qnua/VW7ZcnIw== + +esbuild-freebsd-arm64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.9.tgz#809fff4c43653dbbf071ffce9f80a030b278098e" + integrity sha512-vVa5zps4dmwpXwv/amxVpIWvFJuUPWQkpV+PYtZUW9lqjXsQ3LBHP51Q1cXZZBIrqwszLsEyJPa5GuDOY15hzQ== + +esbuild-linux-32@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.9.tgz#f9fd3423481e51674e9817d5eea25689889a5f5a" + integrity sha512-HxoW9QNqhO8VW1l7aBiYQH4lobeHq85+blZ4nlZ7sg5CNhGRRwnMlV6S08VYKz6V0YKnHb5OqJxx2HZuTZ7tgQ== + +esbuild-linux-64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.9.tgz#9d7f66866dae1abaff7cbc3749f2847d5fb72fd5" + integrity sha512-L+eAR8o1lAUr9g64RXnBLuWZjAItAOWSUpvkchpa6QvSnXFA/nG6PgGsOBEqhDXl9qYEpGI0ReDrFkf8ByapvQ== + +esbuild-linux-arm64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.9.tgz#669202e71b9ced4d285bfd1d69de948e013ac28f" + integrity sha512-IjbhZpW5VQYK4nVI4dj/mLvH5oXAIf57OI8BYVkCqrdVXJwR8nVrSqux3zJSY+ElrkOK3DtG9iTPpmqvBXaU0g== + +esbuild-linux-arm@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.9.tgz#c3ceb56ec0e3dbd1a3a89dca6cb7fc0ca360bcc8" + integrity sha512-DT0S+ufCVXatPZHjkCaBgZSFIV8FzY4GEHz/BlkitTWzUvT1dIUXjPIRPnqBUVa+0AyS1bZSfHzv9hTT4LHz7A== + +esbuild-linux-mips64le@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.9.tgz#bf4bd389ee14b67c5c77669952f2de6b2cc8a003" + integrity sha512-ec9RgAM4r+fe1ZmG16qeMwEHdcIvqeW8tpnpkfSQu9T4487KtQF6lg3TQasTarrLLEe7Qpy+E+r4VwC8eeZySQ== + +esbuild-linux-ppc64le@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.9.tgz#465b7bdc70577da606b3b5d463028292b6d834ad" + integrity sha512-7b2/wg8T1n/L1BgCWlMSez0aXfGkNjFuOqMBQdnTti3LRuUwzGJcrhRf/FdZGJ5/evML9mqu60vLRuXW1TdXCg== + +esbuild-netbsd-64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.9.tgz#94f2dabe83520066cc1e1fae3ecff78695a8ebb1" + integrity sha512-PiZu3h4+Szj0iZPgvuD2Y0isOXnlNetmF6jMcOwW54BScwynW24/baE+z7PfDyNFgjV04Ga2THdcpbKBDhgWQw== + +esbuild-openbsd-64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.9.tgz#b47f6a641ca37358aeedb2b7c4bb73dd0682c6d5" + integrity sha512-SJKN4Ez+ilY7mu+1gAdGQ9N6dktBfbEkiOAvw+hT7xHrNnTnrTGH0FT4qx9dazB9HX6D04L4PXmVOyynqi+oEQ== + +esbuild-sunos-64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.9.tgz#b0df4a316b7c98eb490f4bd0db381cf2c391ae73" + integrity sha512-9N0RjZ7cElE8ifrS0nBrLQgBMQNPiIIKO2GzLXy7Ms8AM3KjfLiV2G2+9O0B9paXjRAHchIwazTeOyeWb1vyWA== + +esbuild-windows-32@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.9.tgz#e229563e134e634f9748cc8315c691e2013259ef" + integrity sha512-awxWs1kns+RfjhqBbTbdlePjqZrAE2XMaAQJNg9dtu+C7ghC3QKsqXbu0C26OuF5YeAdJcq9q+IdG6WPLjvj9w== + +esbuild-windows-64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.9.tgz#103ad3f13e1a0e44934b91f358e81dd201b86b34" + integrity sha512-VmA9GQMCzOr8rFfD72Dum1+AWhJui7ZO6sYwp6rBHYu4vLmWITTSUsd/zgXXmZuHBPkkvxLJLF8XsKFCRKflJA== + +esbuild-windows-arm64@0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.9.tgz#545bb58848008258b339b1b00fcfe92c85bc7251" + integrity sha512-P/jPY2JwmTpgEPh9BkXpCe690tcDSSo0K9BHTniSeEAEz26kPpqldVa4XDm0R+hNnFA7ecEgNskr4QAxE1ry0w== esbuild@^0.13.2: - version "0.13.6" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.6.tgz#b9be288108d47e814a6c8729e495dce0fddbf441" - integrity sha512-zkMkYwC9ohVe6qxXykKf/4jfbtM/09CL8UEEnwuhO7Xq8NOTN2yAwCrmKKvHlGrEej6Y8e/tAmHB7wMMg7O0ew== + version "0.13.9" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.9.tgz#aafc4b3375ac443ae7b223c26c4e58d10d2d535b" + integrity sha512-8bYcckmisXjGvBMeylp1PRtu21uOoCDFAgXGGF2BR241zYQDN6ZLNvcmQlnQ7olG0p6PRWmJI8WVH3ca8viPuw== optionalDependencies: - esbuild-android-arm64 "0.13.6" - esbuild-darwin-64 "0.13.6" - esbuild-darwin-arm64 "0.13.6" - esbuild-freebsd-64 "0.13.6" - esbuild-freebsd-arm64 "0.13.6" - esbuild-linux-32 "0.13.6" - esbuild-linux-64 "0.13.6" - esbuild-linux-arm "0.13.6" - esbuild-linux-arm64 "0.13.6" - esbuild-linux-mips64le "0.13.6" - esbuild-linux-ppc64le "0.13.6" - esbuild-netbsd-64 "0.13.6" - esbuild-openbsd-64 "0.13.6" - esbuild-sunos-64 "0.13.6" - esbuild-windows-32 "0.13.6" - esbuild-windows-64 "0.13.6" - esbuild-windows-arm64 "0.13.6" + esbuild-android-arm64 "0.13.9" + esbuild-darwin-64 "0.13.9" + esbuild-darwin-arm64 "0.13.9" + esbuild-freebsd-64 "0.13.9" + esbuild-freebsd-arm64 "0.13.9" + esbuild-linux-32 "0.13.9" + esbuild-linux-64 "0.13.9" + esbuild-linux-arm "0.13.9" + esbuild-linux-arm64 "0.13.9" + esbuild-linux-mips64le "0.13.9" + esbuild-linux-ppc64le "0.13.9" + esbuild-netbsd-64 "0.13.9" + esbuild-openbsd-64 "0.13.9" + esbuild-sunos-64 "0.13.9" + esbuild-windows-32 "0.13.9" + esbuild-windows-64 "0.13.9" + esbuild-windows-arm64 "0.13.9" escalade@^3.1.1: version "3.1.1" @@ -4369,10 +4364,10 @@ eslint-plugin-import@^2.25.2: resolve "^1.20.0" tsconfig-paths "^3.11.0" -eslint-plugin-vue@^7.19.1: - version "7.19.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.19.1.tgz#435fb2ce712842a9530b28eacb883680e8eaa4f3" - integrity sha512-e2pD7nW2sTY04ThH+66BgToNwC4n6dqfNhKE+ypdJFtZgn3Zn+nP8ZEIFPG0PGqCKQ3qxy8dJk1bzUsuQd3ANA== +eslint-plugin-vue@^7.20.0: + version "7.20.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz#98c21885a6bfdf0713c3a92957a5afeaaeed9253" + integrity sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw== dependencies: eslint-utils "^2.1.0" natural-compare "^1.4.0" @@ -4424,10 +4419,10 @@ eslint-visitor-keys@^3.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== -eslint@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.0.1.tgz#3610e7fe4a05c2154669515ca60835a76a19f700" - integrity sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA== +eslint@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.1.0.tgz#00f1f7dbf4134f26588e6c9f2efe970760f64664" + integrity sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw== dependencies: "@eslint/eslintrc" "^1.0.3" "@humanwhocodes/config-array" "^0.6.0" @@ -4999,7 +4994,7 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" -globby@^11.0.2, globby@^11.0.3: +globby@^11.0.2, globby@^11.0.4: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== @@ -5430,9 +5425,9 @@ is-color-stop@^1.1.0: rgba-regex "^1.0.0" is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" - integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" @@ -5455,11 +5450,6 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -5635,9 +5625,9 @@ isstream@~0.1.2: integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= jest-worker@^27.0.6: - version "27.2.5" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.5.tgz#ed42865661959488aa020e8a325df010597c36d4" - integrity sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw== + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.3.1.tgz#0def7feae5b8042be38479799aeb7b5facac24b2" + integrity sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -5882,7 +5872,7 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lib0@^0.2.31, lib0@^0.2.34, lib0@^0.2.35, lib0@^0.2.41, lib0@^0.2.42: +lib0@^0.2.31, lib0@^0.2.34, lib0@^0.2.35, lib0@^0.2.42: version "0.2.42" resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.42.tgz#6d8bf1fb8205dec37a953c521c5ee403fd8769b0" integrity sha512-8BNM4MiokEKzMvSxTOC3gnCBisJH+jL67CnSnqzHv3jli3pUvGC8wz+0DQ2YvGr4wVQdb2R2uNNPw9LEpVvJ4Q== @@ -5926,12 +5916,12 @@ linkifyjs@^3.0.3: integrity sha512-ba5opS5wRHSbDC8VaiDdN14nPGm6LqyRsIPQZGG4qXV4scFdrPneT/uoZOaq9QAPBf6W9I9D/6tNSzWH//815Q== listr2@^3.8.3: - version "3.12.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.12.2.tgz#2d55cc627111603ad4768a9e87c9c7bb9b49997e" - integrity sha512-64xC2CJ/As/xgVI3wbhlPWVPx0wfTqbUAkpb7bjDi0thSWMqrf07UFhrfsGoo8YSXmF049Rp9C0cjLC8rZxK9A== + version "3.13.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.1.tgz#816e8c1728d50f223795f530d72d248c7fa14602" + integrity sha512-pk4YBDA2cxtpM8iLHbz6oEsfZieJKHf6Pt19NlKaHZZVpqHyVs/Wqr7RfBBCeAFCJchGO7WQHVkUPZTvJMHk8w== dependencies: cli-truncate "^2.1.0" - colorette "^1.4.0" + colorette "^2.0.16" log-update "^4.0.0" p-map "^4.0.0" rxjs "^6.6.7" @@ -6386,7 +6376,7 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanoid@^3.1.28: +nanoid@^3.1.30: version "3.1.30" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== @@ -6463,10 +6453,10 @@ node-gyp@^7.1.0: tar "^6.0.2" which "^2.0.2" -node-releases@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.0.tgz#67dc74903100a7deb044037b8a2e5f453bb05400" - integrity sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA== +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== nopt@^4.0.1: version "4.0.3" @@ -7063,13 +7053,13 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.1.10, postcss@^8.1.6, postcss@^8.2.1, postcss@^8.3.8, postcss@^8.3.9: - version "8.3.9" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.9.tgz#98754caa06c4ee9eb59cc48bd073bb6bd3437c31" - integrity sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw== +postcss@^8.1.10, postcss@^8.1.6, postcss@^8.2.1, postcss@^8.3.11, postcss@^8.3.8: + version "8.3.11" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.11.tgz#c3beca7ea811cd5e1c4a3ec6d2e7599ef1f8f858" + integrity sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA== dependencies: - nanoid "^3.1.28" - picocolors "^0.2.1" + nanoid "^3.1.30" + picocolors "^1.0.0" source-map-js "^0.6.2" prelude-ls@^1.2.1: @@ -7162,10 +7152,10 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.1.3: prosemirror-state "^1.0.0" w3c-keyname "^2.2.0" -prosemirror-model@^1.0.0, prosemirror-model@^1.14.3, prosemirror-model@^1.8.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.14.3.tgz#a9c250d3c4023ddf10ecb41a0a7a130e9741d37e" - integrity sha512-yzZlBaSxfUPIIP6U5Edh5zKxJPZ5f7bwZRhiCuH3UYkWhj+P3d8swHsbuAMOu/iDatDc5J/Qs5Mb3++mZf+CvQ== +prosemirror-model@^1.0.0, prosemirror-model@^1.14.3, prosemirror-model@^1.15.0, prosemirror-model@^1.8.1: + version "1.15.0" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.15.0.tgz#23bc09098daa7c309dba90a76a1b989ce6f61405" + integrity sha512-hQJv7SnIhlAy9ga3lhPPgaufhvCbQB9tHwscJ9E1H1pPHmN8w5V/lURueoYv9Kc3/bpNWoyHa8r3g//m7N0ChQ== dependencies: orderedmap "^1.1.0" @@ -7520,7 +7510,7 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regexpp@^3.1.0, regexpp@^3.2.0: +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -7693,10 +7683,10 @@ rollup-plugin-typescript2@^0.30.0: resolve "1.20.0" tslib "2.1.0" -rollup@^2.57.0, rollup@^2.58.0: - version "2.58.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.0.tgz#a643983365e7bf7f5b7c62a8331b983b7c4c67fb" - integrity sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw== +rollup@^2.57.0, rollup@^2.58.1: + version "2.58.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.1.tgz#b9a0f9e601129d9a4686b7ec3159095f7a73825f" + integrity sha512-dNhchlN/3k3EKtyPXWdEEI7wiPQ07WInzsklWFm/6dUZspF63nj0O1A9PTsMxbmtQziwnOOl5oR+BgWNjTEYLA== optionalDependencies: fsevents "~2.3.2" @@ -7749,10 +7739,10 @@ safe-resolve@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@^1.43.2: - version "1.43.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.43.2.tgz#c02501520c624ad6622529a8b3724eb08da82d65" - integrity sha512-DncYhjl3wBaPMMJR0kIUaH3sF536rVrOcqqVGmTZHQRRzj7LQlyGV7Mb8aCKFyILMr5VsPHwRYtyKpnKYlmQSQ== +sass@^1.43.3: + version "1.43.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.43.3.tgz#aa16a69131b84f0cd23189a242571e8905f1ce43" + integrity sha512-BJnLngqWpMeS65UvlYYEuCb3/fLxDxhHtOB/gWPxs6NKrslTxGt3ZxwIvOe/0Jm4tWwM/+tIpE3wj4dLEhPDeQ== dependencies: chokidar ">=3.0.0 <4.0.0" @@ -8088,15 +8078,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.1.0, string-width@^4.2.0: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8142,13 +8124,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -8693,10 +8668,10 @@ vite-plugin-checker@^0.3.4: vscode-languageserver-textdocument "^1.0.1" vscode-uri "^3.0.2" -vite@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.7.tgz#e15c1d8327950720b5d7c4ec3fb36a5a58ccf7cb" - integrity sha512-ewk//jve9k6vlU8PfJmWUHN8k0YYdw4VaKOMvoQ3nT2Pb6k5OSMKQi4jPOzVH/TlUqMsCrq7IJ80xcuDDVyigg== +vite@^2.6.10: + version "2.6.10" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.10.tgz#7a4f420c6e2c7d9062c7f9ce4578a817c72b3842" + integrity sha512-XbevwpDJMs3lKiGEj0UQScsOCpwHIjFgfzPnFVkPgnxsF9oPv1uGyckLg58XkXv6LnO46KN9yZqJzINFmAxtUg== dependencies: esbuild "^0.13.2" postcss "^8.3.8" @@ -8768,11 +8743,11 @@ vue-eslint-parser@^7.10.0: semver "^6.3.0" vue-router@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.11.tgz#cd649a0941c635281763a20965b599643ddc68ed" - integrity sha512-sha6I8fx9HWtvTrFZfxZkiQQBpqSeT+UCwauYjkdOQYRvwsGwimlQQE2ayqUwuuXGzquFpCPoXzYKWlzL4OuXg== + version "4.0.12" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.12.tgz#8dc792cddf5bb1abcc3908f9064136de7e13c460" + integrity sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg== dependencies: - "@vue/devtools-api" "^6.0.0-beta.14" + "@vue/devtools-api" "^6.0.0-beta.18" vue@^2.6.0: version "2.6.14" @@ -8825,10 +8800,10 @@ webpack-sources@^3.2.0: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.1.tgz#251a7d9720d75ada1469ca07dbb62f3641a05b6d" integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA== -webpack@^5.58.2: - version "5.58.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.58.2.tgz#6b4af12fc9bd5cbedc00dc0a2fc2b9592db16b44" - integrity sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw== +webpack@^5.59.1: + version "5.59.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.59.1.tgz#60c77e9aad796252153d4d7ab6b2d4c11f0e548c" + integrity sha512-I01IQV9K96FlpXX3V0L4nvd7gb0r7thfuu1IfT2P4uOHOA77nKARAKDYGe/tScSHKnffNIyQhLC8kRXzY4KEHQ== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -8898,11 +8873,11 @@ which@^2.0.1, which@^2.0.2: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" + string-width "^1.0.2 || 2 || 3 || 4" word-wrap@^1.2.3: version "1.2.3" @@ -9109,12 +9084,12 @@ yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" -yjs@^13.5.13: - version "13.5.13" - resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.13.tgz#0bf4d415938fd57212805ba942a5d18ec77fb537" - integrity sha512-5vDcT2ZY8USY6jfwGU1xWcyLz4UwOZH9ue5Ri/G9qv3u4rD7bhKeZhtQM+92/7ft6T2fnZf6roVhDvCx7ixf7g== +yjs@^13.5.16: + version "13.5.16" + resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.16.tgz#ff64e7faf017c13d35654316c5671b0c66484aab" + integrity sha512-T+sNq9cC4Tq46RKNVEoArHEr2o2vJo/94T0Mgrug70NRmUKf8iwmA4LiWi/bHHEepUAVxzhmt+qsgbbWbKtraw== dependencies: - lib0 "^0.2.41" + lib0 "^0.2.42" yocto-queue@^0.1.0: version "0.1.0"