Merge branch 'main' of github.com:ueberdosis/tiptap

This commit is contained in:
Hans Pagel
2021-10-25 14:24:23 +02:00
77 changed files with 1330 additions and 492 deletions

View File

@@ -31,7 +31,7 @@ module.exports = {
extends: [ extends: [
'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended',
'plugin:vue/strongly-recommended', 'plugin:vue/vue3-strongly-recommended',
'airbnb-base', 'airbnb-base',
], ],
rules: { rules: {

View File

@@ -1,4 +1,4 @@
# tiptap # Tiptap
A headless, framework-agnostic and extendable rich text editor, based on [ProseMirror](https://github.com/ProseMirror/prosemirror). 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) [![Build Status](https://github.com/ueberdosis/tiptap/workflows/build/badge.svg)](https://github.com/ueberdosis/tiptap/actions)

View File

@@ -16,7 +16,7 @@
"y-indexeddb": "^9.0.6", "y-indexeddb": "^9.0.6",
"y-webrtc": "^10.2.0", "y-webrtc": "^10.2.0",
"y-websocket": "^1.3.17", "y-websocket": "^1.3.17",
"yjs": "^13.5.13" "yjs": "^13.5.16"
}, },
"devDependencies": { "devDependencies": {
"@types/uuid": "^8.3.1", "@types/uuid": "^8.3.1",
@@ -24,14 +24,14 @@
"@vitejs/plugin-vue": "^1.9.3", "@vitejs/plugin-vue": "^1.9.3",
"autoprefixer": "^10.3.7", "autoprefixer": "^10.3.7",
"iframe-resizer": "^4.3.2", "iframe-resizer": "^4.3.2",
"postcss": "^8.3.9", "postcss": "^8.3.11",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"sass": "^1.43.2", "sass": "^1.43.3",
"tailwindcss": "^2.2.17", "tailwindcss": "^2.2.17",
"typescript": "^4.4.4", "typescript": "^4.4.4",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"vite": "^2.6.7", "vite": "^2.6.10",
"vite-plugin-checker": "^0.3.4", "vite-plugin-checker": "^0.3.4",
"vue": "^3.0.5", "vue": "^3.0.5",
"vue-router": "^4.0.11" "vue-router": "^4.0.11"

View File

@@ -56,9 +56,17 @@ body {
} }
button, button,
input { input,
select {
font-size: inherit; font-size: inherit;
font-family: 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 { .ProseMirror:focus {

View File

@@ -16,7 +16,7 @@ import MenuBar from './MenuBar'
import './styles.scss' import './styles.scss'
const colors = ['#958DF1', '#F98181', '#FBBC88', '#FAF594', '#70CFF8', '#94FADB', '#B9F18D'] 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 = [ const names = [
'Lea Thompson', 'Lea Thompson',
'Cyndi Lauper', 'Cyndi Lauper',

View File

@@ -40,9 +40,9 @@ const getRandomElement = list => {
const getRandomRoom = () => { const getRandomRoom = () => {
return getRandomElement([ return getRandomElement([
'rooms.7', 'rooms.10',
'rooms.8', 'rooms.11',
'rooms.9', 'rooms.12',
]) ])
} }

View File

@@ -14,6 +14,7 @@
.item { .item {
display: block; display: block;
margin: 0;
width: 100%; width: 100%;
text-align: left; text-align: left;
background: transparent; background: transparent;

View File

@@ -3,7 +3,7 @@ import tippy from 'tippy.js'
import { MentionList } from './MentionList' import { MentionList } from './MentionList'
export default { export default {
items: query => { items: ({ query }) => {
return [ 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', '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) ].filter(item => item.toLowerCase().startsWith(query.toLowerCase())).slice(0, 5)

View File

@@ -98,6 +98,7 @@ export default {
.item { .item {
display: block; display: block;
margin: 0;
width: 100%; width: 100%;
text-align: left; text-align: left;
background: transparent; background: transparent;

View File

@@ -3,7 +3,7 @@ import tippy from 'tippy.js'
import MentionList from './MentionList.vue' import MentionList from './MentionList.vue'
export default { export default {
items: query => { items: ({ query }) => {
return [ 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', '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) ].filter(item => item.toLowerCase().startsWith(query.toLowerCase())).slice(0, 5)

View File

@@ -1,7 +1,57 @@
context('/src/Examples/BubbleMenu/React/', () => { context('/src/Examples/Menus/React/', () => {
before(() => { 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}`)
})
})
}) })

View File

@@ -1,7 +1,56 @@
context('/src/Examples/BubbleMenu/Vue/', () => { context('/src/Examples/Menus/Vue/', () => {
before(() => { 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}`)
})
})
}) })

View File

@@ -3,5 +3,45 @@ context('/src/Examples/Minimal/Vue/', () => {
cy.visit('/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('<p>Example Text</p>')
expect(editor.getHTML()).to.eq('<p>Example Text</p>')
editor.commands.setContent('<p style="color:DodgerBlue;">Example Text</p>')
expect(editor.getHTML()).to.eq('<p>Example Text</p>')
})
})
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)
})
}) })

View File

@@ -3,5 +3,36 @@ context('/src/Examples/Savvy/Vue/', () => {
cy.visit('/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')
})
}) })

View File

@@ -98,6 +98,7 @@ export default {
.item { .item {
display: block; display: block;
margin: 0;
width: 100%; width: 100%;
text-align: left; text-align: left;
background: transparent; background: transparent;

View File

@@ -3,7 +3,7 @@ import { VueRenderer } from '@tiptap/vue-3'
import CommandsList from './CommandsList.vue' import CommandsList from './CommandsList.vue'
export default { export default {
items: query => { items: ({ query }) => {
return [ return [
{ {
title: 'H1', title: 'H1',

View File

@@ -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
},
})

View File

@@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<div id="app"></div>
<script type="module">
import setup from '../../../../setup/react.ts'
import source from '@source'
setup('Experiments/ExtensionStorage', source)
</script>
</body>
</html>

View File

@@ -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: `
<p>
This is a radically reduced version of tiptap. It has support for a document, with paragraphs and text. Thats it. Its probably too much for real minimalists though.
</p>
<p>
The paragraph extension is not really required, but you need at least one node. Sure, that node can be something different.
</p>
`,
})
return (
<>
reactive storage: {editor?.storage.custom.foo}
<EditorContent editor={editor} />
</>
)
}

View File

@@ -0,0 +1,6 @@
/* Basic editor styles */
.ProseMirror {
> * + * {
margin-top: 0.75em;
}
}

View File

@@ -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
},
})

View File

@@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<div id="app"></div>
<script type="module">
import setup from '../../../../setup/vue.ts'
import source from '@source'
setup('Experiments/ExtensionStorage', source)
</script>
</body>
</html>

View File

@@ -0,0 +1,56 @@
<template>
reactive storage: {{ editor?.storage.custom.foo }}
<editor-content :editor="editor" />
</template>
<script>
import { Editor, EditorContent } from '@tiptap/vue-3'
import Document from '@tiptap/extension-document'
import Paragraph from '@tiptap/extension-paragraph'
import Text from '@tiptap/extension-text'
import { CustomExtension } from './CustomExtension'
export default {
components: {
EditorContent,
},
data() {
return {
editor: null,
}
},
mounted() {
this.editor = new Editor({
extensions: [
Document,
Paragraph,
Text,
CustomExtension,
],
content: `
<p>
This is a radically reduced version of tiptap. It has support for a document, with paragraphs and text. Thats it. Its probably too much for real minimalists though.
</p>
<p>
The paragraph extension is not really required, but you need at least one node. Sure, that node can be something different.
</p>
`,
})
},
beforeUnmount() {
this.editor.destroy()
},
}
</script>
<style lang="scss">
/* Basic editor styles */
.ProseMirror {
> * + * {
margin-top: 0.75em;
}
}
</style>

View File

@@ -98,6 +98,7 @@ export default {
.item { .item {
display: block; display: block;
margin: 0;
width: 100%; width: 100%;
text-align: left; text-align: left;
background: transparent; background: transparent;

View File

@@ -3,7 +3,7 @@ import tippy from 'tippy.js'
import MentionList from './MentionList.vue' import MentionList from './MentionList.vue'
export default { export default {
items: query => { items: ({ query }) => {
return [ 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', '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) ].filter(item => item.toLowerCase().startsWith(query.toLowerCase())).slice(0, 5)

View File

@@ -31,35 +31,6 @@ npm install tippy.js
yarn add tippy.js yarn add tippy.js
``` ```
## Rendering
Currently, were supporting custom Vue.js components only. To get the required `VueRenderer` install our Vue.js package:
```bash
# with npm
npm install @tiptap/vue-2
# 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,
})
```
and not
```js
new VueRenderer(MentionList, {
parent: this,
propsData: props,
})
```
And yes, we plan to support React, too. Meanwhile, you can roll your own `ReactRenderer`, but dont forget to share it with the community.
Its also possible to use Vanilla JavaScript, but that is probably a lot more work.
## Settings ## Settings
### HTMLAttributes ### HTMLAttributes
@@ -73,8 +44,27 @@ Mention.configure({
}) })
``` ```
| renderLabel | `String` | `({ options, node }) => …` | Define how a mention label should be rendered. | ### renderLabel
| suggestion | `Object` | `{ … }` | [Read more](/api/utilities/suggestion) | Define how a mention label should be rendered.
```js
Mention.configure({
renderLabel({ options, node }) {
return `${options.suggestion.char}${node.attrs.label ?? node.attrs.id}`
}
})
```
### suggestion
[Read more](/api/utilities/suggestion)
```js
Mention.configure({
suggestion: {
// …
},
})
```
## Source code ## Source code
[packages/extension-mention/](https://github.com/ueberdosis/tiptap/blob/main/packages/extension-mention/) [packages/extension-mention/](https://github.com/ueberdosis/tiptap/blob/main/packages/extension-mention/)

View File

@@ -44,7 +44,7 @@ Default: `() => {}'`
### items ### items
Pass an array of filtered suggestions, can be async. Pass an array of filtered suggestions, can be async.
Default: `() => {}` Default: `({ editor, query }) => []`
### render ### render
A render function for the autocomplete popup. A render function for the autocomplete popup.

View File

@@ -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 ### 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. Lets walk through a few common use cases. 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. Lets walk through a few common use cases.

View File

@@ -32,6 +32,25 @@ const CustomExtension = Extension.create<CustomExtensionOptions>({
}) })
``` ```
### Storage types
To add types for your extension storage, youll 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 ### 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: 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:

View File

@@ -34,26 +34,26 @@
"@lerna/filter-packages": "^4.0.0", "@lerna/filter-packages": "^4.0.0",
"@lerna/project": "^4.0.0", "@lerna/project": "^4.0.0",
"@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-babel": "^5.3.0",
"@rollup/plugin-commonjs": "^21.0.0", "@rollup/plugin-commonjs": "^21.0.1",
"@rollup/plugin-node-resolve": "^13.0.5", "@rollup/plugin-node-resolve": "^13.0.6",
"@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/eslint-plugin": "^5.1.0",
"@typescript-eslint/parser": "^5.0.0", "@typescript-eslint/parser": "^5.1.0",
"babel-loader": "^8.2.2", "babel-loader": "^8.2.3",
"cypress": "^8.6.0", "cypress": "^8.6.0",
"eslint": "^8.0.1", "eslint": "^8.1.0",
"eslint-config-airbnb-base": "^14.2.0", "eslint-config-airbnb-base": "^14.2.0",
"eslint-plugin-cypress": "^2.12.1", "eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-html": "^6.2.0", "eslint-plugin-html": "^6.2.0",
"eslint-plugin-import": "^2.25.2", "eslint-plugin-import": "^2.25.2",
"eslint-plugin-vue": "^7.19.1", "eslint-plugin-vue": "^7.20.0",
"lerna": "^4.0.0", "lerna": "^4.0.0",
"minimist": "^1.2.5", "minimist": "^1.2.5",
"rollup": "^2.58.0", "rollup": "^2.58.1",
"rollup-plugin-auto-external": "^2.0.0", "rollup-plugin-auto-external": "^2.0.0",
"rollup-plugin-sourcemaps": "^0.6.3", "rollup-plugin-sourcemaps": "^0.6.3",
"rollup-plugin-typescript2": "^0.30.0", "rollup-plugin-typescript2": "^0.30.0",
"ts-loader": "^9.2.6", "ts-loader": "^9.2.6",
"typescript": "^4.4.4", "typescript": "^4.4.4",
"webpack": "^5.58.2" "webpack": "^5.59.1"
} }
} }

View File

@@ -3,6 +3,45 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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 doesnt 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) # [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)

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/core", "name": "@tiptap/core",
"description": "headless rich text editor", "description": "headless rich text editor",
"version": "2.0.0-beta.125", "version": "2.0.0-beta.128",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",
@@ -33,7 +33,7 @@
"@types/prosemirror-view": "^1.19.1", "@types/prosemirror-view": "^1.19.1",
"prosemirror-commands": "^1.1.11", "prosemirror-commands": "^1.1.11",
"prosemirror-keymap": "^1.1.3", "prosemirror-keymap": "^1.1.3",
"prosemirror-model": "^1.14.3", "prosemirror-model": "^1.15.0",
"prosemirror-schema-list": "^1.1.6", "prosemirror-schema-list": "^1.1.6",
"prosemirror-state": "^1.3.4", "prosemirror-state": "^1.3.4",
"prosemirror-transform": "^1.3.3", "prosemirror-transform": "^1.3.3",

View File

@@ -50,6 +50,8 @@ export class Editor extends EventEmitter<EditorEvents> {
public isFocused = false public isFocused = false
public extensionStorage: Record<string, any> = {}
public options: EditorOptions = { public options: EditorOptions = {
element: document.createElement('div'), element: document.createElement('div'),
content: '', content: '',
@@ -100,6 +102,13 @@ export class Editor extends EventEmitter<EditorEvents> {
}, 0) }, 0)
} }
/**
* Returns the editor storage.
*/
public get storage(): Record<string, any> {
return this.extensionStorage
}
/** /**
* An object of all registered commands. * An object of all registered commands.
*/ */

View File

@@ -5,7 +5,10 @@ import { Editor } from './Editor'
import { Node } from './Node' import { Node } from './Node'
import { Mark } from './Mark' import { Mark } from './Mark'
import mergeDeep from './utilities/mergeDeep' import mergeDeep from './utilities/mergeDeep'
import callOrReturn from './utilities/callOrReturn'
import getExtensionField from './helpers/getExtensionField'
import { import {
AnyConfig,
Extensions, Extensions,
GlobalAttributes, GlobalAttributes,
RawCommands, RawCommands,
@@ -15,7 +18,7 @@ import {
import { ExtensionConfig } from '.' import { ExtensionConfig } from '.'
declare module '@tiptap/core' { declare module '@tiptap/core' {
interface ExtensionConfig<Options = any> { interface ExtensionConfig<Options = any, Storage = any> {
[key: string]: any; [key: string]: any;
/** /**
@@ -33,13 +36,23 @@ declare module '@tiptap/core' {
*/ */
defaultOptions?: Options, defaultOptions?: Options,
/**
* Default Storage
*/
addStorage?: (this: {
name: string,
options: Options,
parent: ParentConfig<ExtensionConfig<Options, Storage>>['addGlobalAttributes'],
}) => Storage,
/** /**
* Global attributes * Global attributes
*/ */
addGlobalAttributes?: (this: { addGlobalAttributes?: (this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<ExtensionConfig<Options>>['addGlobalAttributes'], storage: Storage,
parent: ParentConfig<ExtensionConfig<Options, Storage>>['addGlobalAttributes'],
}) => GlobalAttributes | {}, }) => GlobalAttributes | {},
/** /**
@@ -48,8 +61,9 @@ declare module '@tiptap/core' {
addCommands?: (this: { addCommands?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['addCommands'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['addCommands'],
}) => Partial<RawCommands>, }) => Partial<RawCommands>,
/** /**
@@ -58,8 +72,9 @@ declare module '@tiptap/core' {
addKeyboardShortcuts?: (this: { addKeyboardShortcuts?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['addKeyboardShortcuts'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['addKeyboardShortcuts'],
}) => { }) => {
[key: string]: KeyboardShortcutCommand, [key: string]: KeyboardShortcutCommand,
}, },
@@ -70,8 +85,9 @@ declare module '@tiptap/core' {
addInputRules?: (this: { addInputRules?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['addInputRules'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['addInputRules'],
}) => InputRule[], }) => InputRule[],
/** /**
@@ -80,8 +96,9 @@ declare module '@tiptap/core' {
addPasteRules?: (this: { addPasteRules?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['addPasteRules'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['addPasteRules'],
}) => PasteRule[], }) => PasteRule[],
/** /**
@@ -90,8 +107,9 @@ declare module '@tiptap/core' {
addProseMirrorPlugins?: (this: { addProseMirrorPlugins?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['addProseMirrorPlugins'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['addProseMirrorPlugins'],
}) => Plugin[], }) => Plugin[],
/** /**
@@ -100,7 +118,8 @@ declare module '@tiptap/core' {
addExtensions?: (this: { addExtensions?: (this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<ExtensionConfig<Options>>['addExtensions'], storage: Storage,
parent: ParentConfig<ExtensionConfig<Options, Storage>>['addExtensions'],
}) => Extensions, }) => Extensions,
/** /**
@@ -110,7 +129,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<ExtensionConfig<Options>>['extendNodeSchema'], storage: Storage,
parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendNodeSchema'],
}, },
extension: Node, extension: Node,
) => Record<string, any>) | null, ) => Record<string, any>) | null,
@@ -122,7 +142,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<ExtensionConfig<Options>>['extendMarkSchema'], storage: Storage,
parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendMarkSchema'],
}, },
extension: Mark, extension: Mark,
) => Record<string, any>) | null, ) => Record<string, any>) | null,
@@ -133,8 +154,9 @@ declare module '@tiptap/core' {
onBeforeCreate?: ((this: { onBeforeCreate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['onBeforeCreate'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBeforeCreate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -143,8 +165,9 @@ declare module '@tiptap/core' {
onCreate?: ((this: { onCreate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['onCreate'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['onCreate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -153,8 +176,9 @@ declare module '@tiptap/core' {
onUpdate?: ((this: { onUpdate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['onUpdate'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['onUpdate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -163,8 +187,9 @@ declare module '@tiptap/core' {
onSelectionUpdate?: ((this: { onSelectionUpdate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['onSelectionUpdate'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['onSelectionUpdate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -174,8 +199,9 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['onTransaction'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['onTransaction'],
}, },
props: { props: {
transaction: Transaction, transaction: Transaction,
@@ -189,8 +215,9 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['onFocus'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['onFocus'],
}, },
props: { props: {
event: FocusEvent, event: FocusEvent,
@@ -204,8 +231,9 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['onBlur'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBlur'],
}, },
props: { props: {
event: FocusEvent, event: FocusEvent,
@@ -218,13 +246,14 @@ declare module '@tiptap/core' {
onDestroy?: ((this: { onDestroy?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
parent: ParentConfig<ExtensionConfig<Options>>['onDestroy'], parent: ParentConfig<ExtensionConfig<Options, Storage>>['onDestroy'],
}) => void) | null, }) => void) | null,
} }
} }
export class Extension<Options = any> { export class Extension<Options = any, Storage = any> {
type = 'extension' type = 'extension'
name = 'extension' name = 'extension'
@@ -235,12 +264,14 @@ export class Extension<Options = any> {
options: Options options: Options
storage: Storage
config: ExtensionConfig = { config: ExtensionConfig = {
name: this.name, name: this.name,
defaultOptions: {}, defaultOptions: {},
} }
constructor(config: Partial<ExtensionConfig<Options>> = {}) { constructor(config: Partial<ExtensionConfig<Options, Storage>> = {}) {
this.config = { this.config = {
...this.config, ...this.config,
...config, ...config,
@@ -248,10 +279,18 @@ export class Extension<Options = any> {
this.name = this.config.name this.name = this.config.name
this.options = this.config.defaultOptions this.options = this.config.defaultOptions
this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
this,
'addStorage',
{
name: this.name,
options: this.options,
},
))
} }
static create<O>(config: Partial<ExtensionConfig<O>> = {}) { static create<O = any, S = any>(config: Partial<ExtensionConfig<O, S>> = {}) {
return new Extension<O>(config) return new Extension<O, S>(config)
} }
configure(options: Partial<Options> = {}) { configure(options: Partial<Options> = {}) {
@@ -261,11 +300,20 @@ export class Extension<Options = any> {
extension.options = mergeDeep(this.options, options) as Options extension.options = mergeDeep(this.options, options) as Options
extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
extension,
'addStorage',
{
name: extension.name,
options: extension.options,
},
))
return extension return extension
} }
extend<ExtendedOptions = Options>(extendedConfig: Partial<ExtensionConfig<ExtendedOptions>> = {}) { extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<ExtensionConfig<ExtendedOptions, ExtendedStorage>> = {}) {
const extension = new Extension<ExtendedOptions>(extendedConfig) const extension = new Extension<ExtendedOptions, ExtendedStorage>(extendedConfig)
extension.parent = this extension.parent = this
@@ -279,6 +327,15 @@ export class Extension<Options = any> {
? extendedConfig.defaultOptions ? extendedConfig.defaultOptions
: extension.parent.options : extension.parent.options
extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
extension,
'addStorage',
{
name: extension.name,
options: extension.options,
},
))
return extension return extension
} }
} }

View File

@@ -14,6 +14,7 @@ import splitExtensions from './helpers/splitExtensions'
import getAttributesFromExtensions from './helpers/getAttributesFromExtensions' import getAttributesFromExtensions from './helpers/getAttributesFromExtensions'
import getRenderedAttributes from './helpers/getRenderedAttributes' import getRenderedAttributes from './helpers/getRenderedAttributes'
import callOrReturn from './utilities/callOrReturn' import callOrReturn from './utilities/callOrReturn'
import findDuplicates from './utilities/findDuplicates'
import { NodeConfig } from '.' import { NodeConfig } from '.'
export default class ExtensionManager { export default class ExtensionManager {
@@ -32,9 +33,13 @@ export default class ExtensionManager {
this.schema = getSchemaByResolvedExtensions(this.extensions) this.schema = getSchemaByResolvedExtensions(this.extensions)
this.extensions.forEach(extension => { this.extensions.forEach(extension => {
// store extension storage in editor
this.editor.extensionStorage[extension.name] = extension.storage
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
editor: this.editor, editor: this.editor,
type: getSchemaTypeByName(extension.name, this.schema), type: getSchemaTypeByName(extension.name, this.schema),
} }
@@ -130,7 +135,14 @@ export default class ExtensionManager {
} }
static resolve(extensions: Extensions): Extensions { 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 { static flatten(extensions: Extensions): Extensions {
@@ -139,6 +151,7 @@ export default class ExtensionManager {
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
} }
const addExtensions = getExtensionField<AnyConfig['addExtensions']>( const addExtensions = getExtensionField<AnyConfig['addExtensions']>(
@@ -184,6 +197,7 @@ export default class ExtensionManager {
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
editor: this.editor, editor: this.editor,
type: getSchemaTypeByName(extension.name, this.schema), type: getSchemaTypeByName(extension.name, this.schema),
} }
@@ -223,6 +237,7 @@ export default class ExtensionManager {
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
editor, editor,
type: getSchemaTypeByName(extension.name, this.schema), type: getSchemaTypeByName(extension.name, this.schema),
} }
@@ -313,6 +328,7 @@ export default class ExtensionManager {
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
editor, editor,
type: getNodeType(extension.name, this.schema), type: getNodeType(extension.name, this.schema),
} }

View File

@@ -8,7 +8,10 @@ import { Plugin, Transaction } from 'prosemirror-state'
import { InputRule } from './InputRule' import { InputRule } from './InputRule'
import { PasteRule } from './PasteRule' import { PasteRule } from './PasteRule'
import mergeDeep from './utilities/mergeDeep' import mergeDeep from './utilities/mergeDeep'
import callOrReturn from './utilities/callOrReturn'
import getExtensionField from './helpers/getExtensionField'
import { import {
AnyConfig,
Extensions, Extensions,
Attributes, Attributes,
RawCommands, RawCommands,
@@ -21,7 +24,7 @@ import { MarkConfig } from '.'
import { Editor } from './Editor' import { Editor } from './Editor'
declare module '@tiptap/core' { declare module '@tiptap/core' {
export interface MarkConfig<Options = any> { export interface MarkConfig<Options = any, Storage = any> {
[key: string]: any; [key: string]: any;
/** /**
@@ -39,13 +42,23 @@ declare module '@tiptap/core' {
*/ */
defaultOptions?: Options, defaultOptions?: Options,
/**
* Default Storage
*/
addStorage?: (this: {
name: string,
options: Options,
parent: ParentConfig<MarkConfig<Options, Storage>>['addGlobalAttributes'],
}) => Storage,
/** /**
* Global attributes * Global attributes
*/ */
addGlobalAttributes?: (this: { addGlobalAttributes?: (this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['addGlobalAttributes'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['addGlobalAttributes'],
}) => GlobalAttributes | {}, }) => GlobalAttributes | {},
/** /**
@@ -54,9 +67,10 @@ declare module '@tiptap/core' {
addCommands?: (this: { addCommands?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['addCommands'], parent: ParentConfig<MarkConfig<Options, Storage>>['addCommands'],
}) => Partial<RawCommands>, }) => Partial<RawCommands>,
/** /**
@@ -65,9 +79,10 @@ declare module '@tiptap/core' {
addKeyboardShortcuts?: (this: { addKeyboardShortcuts?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['addKeyboardShortcuts'], parent: ParentConfig<MarkConfig<Options, Storage>>['addKeyboardShortcuts'],
}) => { }) => {
[key: string]: KeyboardShortcutCommand, [key: string]: KeyboardShortcutCommand,
}, },
@@ -78,9 +93,10 @@ declare module '@tiptap/core' {
addInputRules?: (this: { addInputRules?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['addInputRules'], parent: ParentConfig<MarkConfig<Options, Storage>>['addInputRules'],
}) => InputRule[], }) => InputRule[],
/** /**
@@ -89,9 +105,10 @@ declare module '@tiptap/core' {
addPasteRules?: (this: { addPasteRules?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['addPasteRules'], parent: ParentConfig<MarkConfig<Options, Storage>>['addPasteRules'],
}) => PasteRule[], }) => PasteRule[],
/** /**
@@ -100,9 +117,10 @@ declare module '@tiptap/core' {
addProseMirrorPlugins?: (this: { addProseMirrorPlugins?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['addProseMirrorPlugins'], parent: ParentConfig<MarkConfig<Options, Storage>>['addProseMirrorPlugins'],
}) => Plugin[], }) => Plugin[],
/** /**
@@ -111,7 +129,8 @@ declare module '@tiptap/core' {
addExtensions?: (this: { addExtensions?: (this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['addExtensions'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['addExtensions'],
}) => Extensions, }) => Extensions,
/** /**
@@ -121,7 +140,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['extendNodeSchema'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['extendNodeSchema'],
}, },
extension: Node, extension: Node,
) => Record<string, any>) | null, ) => Record<string, any>) | null,
@@ -133,7 +153,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['extendMarkSchema'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['extendMarkSchema'],
}, },
extension: Mark, extension: Mark,
) => Record<string, any>) | null, ) => Record<string, any>) | null,
@@ -144,9 +165,10 @@ declare module '@tiptap/core' {
onBeforeCreate?: ((this: { onBeforeCreate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['onBeforeCreate'], parent: ParentConfig<MarkConfig<Options, Storage>>['onBeforeCreate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -155,9 +177,10 @@ declare module '@tiptap/core' {
onCreate?: ((this: { onCreate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['onCreate'], parent: ParentConfig<MarkConfig<Options, Storage>>['onCreate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -166,9 +189,10 @@ declare module '@tiptap/core' {
onUpdate?: ((this: { onUpdate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['onUpdate'], parent: ParentConfig<MarkConfig<Options, Storage>>['onUpdate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -177,9 +201,10 @@ declare module '@tiptap/core' {
onSelectionUpdate?: ((this: { onSelectionUpdate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['onSelectionUpdate'], parent: ParentConfig<MarkConfig<Options, Storage>>['onSelectionUpdate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -189,9 +214,10 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['onTransaction'], parent: ParentConfig<MarkConfig<Options, Storage>>['onTransaction'],
}, },
props: { props: {
transaction: Transaction, transaction: Transaction,
@@ -205,9 +231,10 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['onFocus'], parent: ParentConfig<MarkConfig<Options, Storage>>['onFocus'],
}, },
props: { props: {
event: FocusEvent, event: FocusEvent,
@@ -221,9 +248,10 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['onBlur'], parent: ParentConfig<MarkConfig<Options, Storage>>['onBlur'],
}, },
props: { props: {
event: FocusEvent, event: FocusEvent,
@@ -236,9 +264,10 @@ declare module '@tiptap/core' {
onDestroy?: ((this: { onDestroy?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: MarkType, type: MarkType,
parent: ParentConfig<MarkConfig<Options>>['onDestroy'], parent: ParentConfig<MarkConfig<Options, Storage>>['onDestroy'],
}) => void) | null, }) => void) | null,
/** /**
@@ -252,7 +281,8 @@ declare module '@tiptap/core' {
inclusive?: MarkSpec['inclusive'] | ((this: { inclusive?: MarkSpec['inclusive'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['inclusive'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['inclusive'],
}) => MarkSpec['inclusive']), }) => MarkSpec['inclusive']),
/** /**
@@ -261,7 +291,8 @@ declare module '@tiptap/core' {
excludes?: MarkSpec['excludes'] | ((this: { excludes?: MarkSpec['excludes'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['excludes'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['excludes'],
}) => MarkSpec['excludes']), }) => MarkSpec['excludes']),
/** /**
@@ -270,7 +301,8 @@ declare module '@tiptap/core' {
group?: MarkSpec['group'] | ((this: { group?: MarkSpec['group'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['group'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['group'],
}) => MarkSpec['group']), }) => MarkSpec['group']),
/** /**
@@ -279,7 +311,8 @@ declare module '@tiptap/core' {
spanning?: MarkSpec['spanning'] | ((this: { spanning?: MarkSpec['spanning'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['spanning'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['spanning'],
}) => MarkSpec['spanning']), }) => MarkSpec['spanning']),
/** /**
@@ -288,7 +321,8 @@ declare module '@tiptap/core' {
code?: boolean | ((this: { code?: boolean | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['code'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['code'],
}) => boolean), }) => boolean),
/** /**
@@ -298,7 +332,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['parseHTML'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['parseHTML'],
}, },
) => MarkSpec['parseDOM'], ) => MarkSpec['parseDOM'],
@@ -309,7 +344,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['renderHTML'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['renderHTML'],
}, },
props: { props: {
mark: ProseMirrorMark, mark: ProseMirrorMark,
@@ -324,13 +360,14 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<MarkConfig<Options>>['addAttributes'], storage: Storage,
parent: ParentConfig<MarkConfig<Options, Storage>>['addAttributes'],
}, },
) => Attributes | {}, ) => Attributes | {},
} }
} }
export class Mark<Options = any> { export class Mark<Options = any, Storage = any> {
type = 'mark' type = 'mark'
name = 'mark' name = 'mark'
@@ -341,12 +378,14 @@ export class Mark<Options = any> {
options: Options options: Options
storage: Storage
config: MarkConfig = { config: MarkConfig = {
name: this.name, name: this.name,
defaultOptions: {}, defaultOptions: {},
} }
constructor(config: Partial<MarkConfig<Options>> = {}) { constructor(config: Partial<MarkConfig<Options, Storage>> = {}) {
this.config = { this.config = {
...this.config, ...this.config,
...config, ...config,
@@ -354,10 +393,18 @@ export class Mark<Options = any> {
this.name = this.config.name this.name = this.config.name
this.options = this.config.defaultOptions this.options = this.config.defaultOptions
this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
this,
'addStorage',
{
name: this.name,
options: this.options,
},
))
} }
static create<O>(config: Partial<MarkConfig<O>> = {}) { static create<O = any, S = any>(config: Partial<MarkConfig<O, S>> = {}) {
return new Mark<O>(config) return new Mark<O, S>(config)
} }
configure(options: Partial<Options> = {}) { configure(options: Partial<Options> = {}) {
@@ -367,11 +414,20 @@ export class Mark<Options = any> {
extension.options = mergeDeep(this.options, options) as Options extension.options = mergeDeep(this.options, options) as Options
extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
extension,
'addStorage',
{
name: extension.name,
options: extension.options,
},
))
return extension return extension
} }
extend<ExtendedOptions = Options>(extendedConfig: Partial<MarkConfig<ExtendedOptions>> = {}) { extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<MarkConfig<ExtendedOptions, ExtendedStorage>> = {}) {
const extension = new Mark<ExtendedOptions>(extendedConfig) const extension = new Mark<ExtendedOptions, ExtendedStorage>(extendedConfig)
extension.parent = this extension.parent = this
@@ -385,6 +441,15 @@ export class Mark<Options = any> {
? extendedConfig.defaultOptions ? extendedConfig.defaultOptions
: extension.parent.options : extension.parent.options
extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
extension,
'addStorage',
{
name: extension.name,
options: extension.options,
},
))
return extension return extension
} }
} }

View File

@@ -8,7 +8,10 @@ import { Plugin, Transaction } from 'prosemirror-state'
import { InputRule } from './InputRule' import { InputRule } from './InputRule'
import { PasteRule } from './PasteRule' import { PasteRule } from './PasteRule'
import mergeDeep from './utilities/mergeDeep' import mergeDeep from './utilities/mergeDeep'
import callOrReturn from './utilities/callOrReturn'
import getExtensionField from './helpers/getExtensionField'
import { import {
AnyConfig,
Extensions, Extensions,
Attributes, Attributes,
NodeViewRenderer, NodeViewRenderer,
@@ -21,7 +24,7 @@ import { NodeConfig } from '.'
import { Editor } from './Editor' import { Editor } from './Editor'
declare module '@tiptap/core' { declare module '@tiptap/core' {
interface NodeConfig<Options = any> { interface NodeConfig<Options = any, Storage = any> {
[key: string]: any; [key: string]: any;
/** /**
@@ -39,13 +42,23 @@ declare module '@tiptap/core' {
*/ */
defaultOptions?: Options, defaultOptions?: Options,
/**
* Default Storage
*/
addStorage?: (this: {
name: string,
options: Options,
parent: ParentConfig<NodeConfig<Options, Storage>>['addGlobalAttributes'],
}) => Storage,
/** /**
* Global attributes * Global attributes
*/ */
addGlobalAttributes?: (this: { addGlobalAttributes?: (this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['addGlobalAttributes'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['addGlobalAttributes'],
}) => GlobalAttributes | {}, }) => GlobalAttributes | {},
/** /**
@@ -54,9 +67,10 @@ declare module '@tiptap/core' {
addCommands?: (this: { addCommands?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['addCommands'], parent: ParentConfig<NodeConfig<Options, Storage>>['addCommands'],
}) => Partial<RawCommands>, }) => Partial<RawCommands>,
/** /**
@@ -65,9 +79,10 @@ declare module '@tiptap/core' {
addKeyboardShortcuts?: (this: { addKeyboardShortcuts?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['addKeyboardShortcuts'], parent: ParentConfig<NodeConfig<Options, Storage>>['addKeyboardShortcuts'],
}) => { }) => {
[key: string]: KeyboardShortcutCommand, [key: string]: KeyboardShortcutCommand,
}, },
@@ -78,9 +93,10 @@ declare module '@tiptap/core' {
addInputRules?: (this: { addInputRules?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['addInputRules'], parent: ParentConfig<NodeConfig<Options, Storage>>['addInputRules'],
}) => InputRule[], }) => InputRule[],
/** /**
@@ -89,9 +105,10 @@ declare module '@tiptap/core' {
addPasteRules?: (this: { addPasteRules?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['addPasteRules'], parent: ParentConfig<NodeConfig<Options, Storage>>['addPasteRules'],
}) => PasteRule[], }) => PasteRule[],
/** /**
@@ -100,9 +117,10 @@ declare module '@tiptap/core' {
addProseMirrorPlugins?: (this: { addProseMirrorPlugins?: (this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['addProseMirrorPlugins'], parent: ParentConfig<NodeConfig<Options, Storage>>['addProseMirrorPlugins'],
}) => Plugin[], }) => Plugin[],
/** /**
@@ -111,7 +129,8 @@ declare module '@tiptap/core' {
addExtensions?: (this: { addExtensions?: (this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['addExtensions'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['addExtensions'],
}) => Extensions, }) => Extensions,
/** /**
@@ -121,7 +140,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['extendNodeSchema'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['extendNodeSchema'],
}, },
extension: Node, extension: Node,
) => Record<string, any>) | null, ) => Record<string, any>) | null,
@@ -133,7 +153,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['extendMarkSchema'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['extendMarkSchema'],
}, },
extension: Node, extension: Node,
) => Record<string, any>) | null, ) => Record<string, any>) | null,
@@ -144,9 +165,10 @@ declare module '@tiptap/core' {
onBeforeCreate?: ((this: { onBeforeCreate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['onBeforeCreate'], parent: ParentConfig<NodeConfig<Options, Storage>>['onBeforeCreate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -155,9 +177,10 @@ declare module '@tiptap/core' {
onCreate?: ((this: { onCreate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['onCreate'], parent: ParentConfig<NodeConfig<Options, Storage>>['onCreate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -166,9 +189,10 @@ declare module '@tiptap/core' {
onUpdate?: ((this: { onUpdate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['onUpdate'], parent: ParentConfig<NodeConfig<Options, Storage>>['onUpdate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -177,9 +201,10 @@ declare module '@tiptap/core' {
onSelectionUpdate?: ((this: { onSelectionUpdate?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['onSelectionUpdate'], parent: ParentConfig<NodeConfig<Options, Storage>>['onSelectionUpdate'],
}) => void) | null, }) => void) | null,
/** /**
@@ -189,9 +214,10 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['onTransaction'], parent: ParentConfig<NodeConfig<Options, Storage>>['onTransaction'],
}, },
props: { props: {
transaction: Transaction, transaction: Transaction,
@@ -205,9 +231,10 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['onFocus'], parent: ParentConfig<NodeConfig<Options, Storage>>['onFocus'],
}, },
props: { props: {
event: FocusEvent, event: FocusEvent,
@@ -221,9 +248,10 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['onBlur'], parent: ParentConfig<NodeConfig<Options, Storage>>['onBlur'],
}, },
props: { props: {
event: FocusEvent, event: FocusEvent,
@@ -236,9 +264,10 @@ declare module '@tiptap/core' {
onDestroy?: ((this: { onDestroy?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['onDestroy'], parent: ParentConfig<NodeConfig<Options, Storage>>['onDestroy'],
}) => void) | null, }) => void) | null,
/** /**
@@ -247,9 +276,10 @@ declare module '@tiptap/core' {
addNodeView?: ((this: { addNodeView?: ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
editor: Editor, editor: Editor,
type: NodeType, type: NodeType,
parent: ParentConfig<NodeConfig<Options>>['addNodeView'], parent: ParentConfig<NodeConfig<Options, Storage>>['addNodeView'],
}) => NodeViewRenderer) | null, }) => NodeViewRenderer) | null,
/** /**
@@ -263,7 +293,8 @@ declare module '@tiptap/core' {
content?: NodeSpec['content'] | ((this: { content?: NodeSpec['content'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['content'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['content'],
}) => NodeSpec['content']), }) => NodeSpec['content']),
/** /**
@@ -272,7 +303,8 @@ declare module '@tiptap/core' {
marks?: NodeSpec['marks'] | ((this: { marks?: NodeSpec['marks'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['marks'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['marks'],
}) => NodeSpec['marks']), }) => NodeSpec['marks']),
/** /**
@@ -281,7 +313,8 @@ declare module '@tiptap/core' {
group?: NodeSpec['group'] | ((this: { group?: NodeSpec['group'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['group'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['group'],
}) => NodeSpec['group']), }) => NodeSpec['group']),
/** /**
@@ -290,7 +323,8 @@ declare module '@tiptap/core' {
inline?: NodeSpec['inline'] | ((this: { inline?: NodeSpec['inline'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['inline'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['inline'],
}) => NodeSpec['inline']), }) => NodeSpec['inline']),
/** /**
@@ -299,7 +333,8 @@ declare module '@tiptap/core' {
atom?: NodeSpec['atom'] | ((this: { atom?: NodeSpec['atom'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['atom'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['atom'],
}) => NodeSpec['atom']), }) => NodeSpec['atom']),
/** /**
@@ -308,7 +343,8 @@ declare module '@tiptap/core' {
selectable?: NodeSpec['selectable'] | ((this: { selectable?: NodeSpec['selectable'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['selectable'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['selectable'],
}) => NodeSpec['selectable']), }) => NodeSpec['selectable']),
/** /**
@@ -317,7 +353,8 @@ declare module '@tiptap/core' {
draggable?: NodeSpec['draggable'] | ((this: { draggable?: NodeSpec['draggable'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['draggable'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['draggable'],
}) => NodeSpec['draggable']), }) => NodeSpec['draggable']),
/** /**
@@ -326,7 +363,8 @@ declare module '@tiptap/core' {
code?: NodeSpec['code'] | ((this: { code?: NodeSpec['code'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['code'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['code'],
}) => NodeSpec['code']), }) => NodeSpec['code']),
/** /**
@@ -335,7 +373,8 @@ declare module '@tiptap/core' {
defining?: NodeSpec['defining'] | ((this: { defining?: NodeSpec['defining'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['defining'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['defining'],
}) => NodeSpec['defining']), }) => NodeSpec['defining']),
/** /**
@@ -344,7 +383,8 @@ declare module '@tiptap/core' {
isolating?: NodeSpec['isolating'] | ((this: { isolating?: NodeSpec['isolating'] | ((this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['isolating'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['isolating'],
}) => NodeSpec['isolating']), }) => NodeSpec['isolating']),
/** /**
@@ -354,7 +394,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['parseHTML'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['parseHTML'],
}, },
) => NodeSpec['parseDOM'], ) => NodeSpec['parseDOM'],
@@ -365,7 +406,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['renderHTML'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['renderHTML'],
}, },
props: { props: {
node: ProseMirrorNode, node: ProseMirrorNode,
@@ -380,7 +422,8 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['renderText'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['renderText'],
}, },
props: { props: {
node: ProseMirrorNode, node: ProseMirrorNode,
@@ -397,13 +440,14 @@ declare module '@tiptap/core' {
this: { this: {
name: string, name: string,
options: Options, options: Options,
parent: ParentConfig<NodeConfig<Options>>['addAttributes'], storage: Storage,
parent: ParentConfig<NodeConfig<Options, Storage>>['addAttributes'],
}, },
) => Attributes | {}, ) => Attributes | {},
} }
} }
export class Node<Options = any> { export class Node<Options = any, Storage = any> {
type = 'node' type = 'node'
name = 'node' name = 'node'
@@ -414,12 +458,14 @@ export class Node<Options = any> {
options: Options options: Options
storage: Storage
config: NodeConfig = { config: NodeConfig = {
name: this.name, name: this.name,
defaultOptions: {}, defaultOptions: {},
} }
constructor(config: Partial<NodeConfig<Options>> = {}) { constructor(config: Partial<NodeConfig<Options, Storage>> = {}) {
this.config = { this.config = {
...this.config, ...this.config,
...config, ...config,
@@ -427,10 +473,18 @@ export class Node<Options = any> {
this.name = this.config.name this.name = this.config.name
this.options = this.config.defaultOptions this.options = this.config.defaultOptions
this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
this,
'addStorage',
{
name: this.name,
options: this.options,
},
))
} }
static create<O>(config: Partial<NodeConfig<O>> = {}) { static create<O = any, S = any>(config: Partial<NodeConfig<O, S>> = {}) {
return new Node<O>(config) return new Node<O, S>(config)
} }
configure(options: Partial<Options> = {}) { configure(options: Partial<Options> = {}) {
@@ -440,11 +494,20 @@ export class Node<Options = any> {
extension.options = mergeDeep(this.options, options) as Options extension.options = mergeDeep(this.options, options) as Options
extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
extension,
'addStorage',
{
name: extension.name,
options: extension.options,
},
))
return extension return extension
} }
extend<ExtendedOptions = Options>(extendedConfig: Partial<NodeConfig<ExtendedOptions>> = {}) { extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<NodeConfig<ExtendedOptions, ExtendedStorage>> = {}) {
const extension = new Node<ExtendedOptions>(extendedConfig) const extension = new Node<ExtendedOptions, ExtendedStorage>(extendedConfig)
extension.parent = this extension.parent = this
@@ -458,6 +521,15 @@ export class Node<Options = any> {
? extendedConfig.defaultOptions ? extendedConfig.defaultOptions
: extension.parent.options : extension.parent.options
extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
extension,
'addStorage',
{
name: extension.name,
options: extension.options,
},
))
return extension return extension
} }
} }

View File

@@ -113,11 +113,12 @@ export class NodeView<
return false return false
} }
const isDropEvent = event.type === 'drop'
const isInput = ['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(target.tagName) const isInput = ['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(target.tagName)
|| target.isContentEditable || target.isContentEditable
// any input event within node views should be ignored by ProseMirror // any input event within node views should be ignored by ProseMirror
if (isInput) { if (isInput && !isDropEvent) {
return true return true
} }
@@ -129,7 +130,7 @@ export class NodeView<
const isPasteEvent = event.type === 'paste' const isPasteEvent = event.type === 'paste'
const isCutEvent = event.type === 'cut' const isCutEvent = event.type === 'cut'
const isClickEvent = event.type === 'mousedown' 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 // ProseMirror tries to drag selectable nodes
// even if `draggable` is set to `false` // even if `draggable` is set to `false`
@@ -165,6 +166,7 @@ export class NodeView<
// these events are handled by prosemirror // these events are handled by prosemirror
if ( if (
isDragging isDragging
|| isDropEvent
|| isCopyEvent || isCopyEvent
|| isPasteEvent || isPasteEvent
|| isCutEvent || isCutEvent

View File

@@ -3,6 +3,7 @@ import { Editor } from './Editor'
import CommandManager from './CommandManager' import CommandManager from './CommandManager'
import createChainableState from './helpers/createChainableState' import createChainableState from './helpers/createChainableState'
import isRegExp from './utilities/isRegExp' import isRegExp from './utilities/isRegExp'
import isNumber from './utilities/isNumber'
import { import {
Range, Range,
ExtendedRegExpMatchArray, ExtendedRegExpMatchArray,
@@ -177,7 +178,7 @@ export function pasteRulesPlugin(props: { editor: Editor, rules: PasteRule[] }):
const from = before.content.findDiffStart(doc.content) const from = before.content.findDiffStart(doc.content)
const to = before.content.findDiffEnd(doc.content) const to = before.content.findDiffEnd(doc.content)
if (!from || !to || from === to.b) { if (!isNumber(from) || !to || from === to.b) {
return return
} }

View File

@@ -30,6 +30,7 @@ export default function getAttributesFromExtensions(extensions: Extensions): Ext
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
} }
const addGlobalAttributes = getExtensionField<AnyConfig['addGlobalAttributes']>( const addGlobalAttributes = getExtensionField<AnyConfig['addGlobalAttributes']>(
@@ -67,6 +68,7 @@ export default function getAttributesFromExtensions(extensions: Extensions): Ext
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
} }
const addAttributes = getExtensionField<NodeConfig['addAttributes'] | MarkConfig['addAttributes']>( const addAttributes = getExtensionField<NodeConfig['addAttributes'] | MarkConfig['addAttributes']>(

View File

@@ -1,9 +1,9 @@
import { AnyExtension, RemoveThis } from '../types' import { AnyExtension, RemoveThis, MaybeThisParameterType } from '../types'
export default function getExtensionField<T = any>( export default function getExtensionField<T = any>(
extension: AnyExtension, extension: AnyExtension,
field: string, field: string,
context: Record<string, any> = {}, context?: Omit<MaybeThisParameterType<T>, 'parent'>,
): RemoveThis<T> { ): RemoveThis<T> {
if (extension.config[field] === undefined && extension.parent) { if (extension.config[field] === undefined && extension.parent) {

View File

@@ -29,6 +29,7 @@ export default function getSchemaByResolvedExtensions(extensions: Extensions): S
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
} }
const extraNodeFields = extensions.reduce((fields, e) => { const extraNodeFields = extensions.reduce((fields, e) => {
@@ -91,6 +92,7 @@ export default function getSchemaByResolvedExtensions(extensions: Extensions): S
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
} }
const extraMarkFields = extensions.reduce((fields, e) => { const extraMarkFields = extensions.reduce((fields, e) => {

View File

@@ -15,6 +15,7 @@ export default function isList(name: string, extensions: Extensions): boolean {
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
} }
const group = callOrReturn(getExtensionField<NodeConfig['group']>(extension, 'group', context)) const group = callOrReturn(getExtensionField<NodeConfig['group']>(extension, 'group', context))

View File

@@ -56,10 +56,10 @@ export { default as posToDOMRect } from './helpers/posToDOMRect'
export interface Commands<ReturnType = any> {} export interface Commands<ReturnType = any> {}
// eslint-disable-next-line // eslint-disable-next-line
export interface ExtensionConfig<Options = any> {} export interface ExtensionConfig<Options = any, Storage = any> {}
// eslint-disable-next-line // eslint-disable-next-line
export interface NodeConfig<Options = any> {} export interface NodeConfig<Options = any, Storage = any> {}
// eslint-disable-next-line // eslint-disable-next-line
export interface MarkConfig<Options = any> {} export interface MarkConfig<Options = any, Storage = any> {}

View File

@@ -27,6 +27,8 @@ img.ProseMirror-separator {
display: inline !important; display: inline !important;
border: none !important; border: none !important;
margin: 0 !important; margin: 0 !important;
width: 1px !important;
height: 1px !important;
} }
.ProseMirror-gapcursor { .ProseMirror-gapcursor {

View File

@@ -31,6 +31,15 @@ export type ParentConfig<T> = Partial<{
: T[P] : T[P]
}> }>
export type Primitive =
| null
| undefined
| string
| number
| boolean
| symbol
| bigint
export type RemoveThis<T> = T extends (...args: any) => any export type RemoveThis<T> = T extends (...args: any) => any
? (...args: Parameters<T>) => ReturnType<T> ? (...args: Parameters<T>) => ReturnType<T>
: T : T
@@ -39,6 +48,10 @@ export type MaybeReturnType<T> = T extends (...args: any) => any
? ReturnType<T> ? ReturnType<T>
: T : T
export type MaybeThisParameterType<T> = Exclude<T, Primitive> extends (...args: any) => any
? ThisParameterType<Exclude<T, Primitive>>
: any
export interface EditorEvents { export interface EditorEvents {
beforeCreate: { editor: Editor }, beforeCreate: { editor: Editor },
create: { editor: Editor }, create: { editor: Editor },

View File

@@ -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)]
}

View File

@@ -0,0 +1,3 @@
export default function isNumber(value: any): value is number {
return typeof value === 'number'
}

View File

@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/extension-code-block-lowlight

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/extension-code-block-lowlight", "name": "@tiptap/extension-code-block-lowlight",
"description": "code block extension for tiptap", "description": "code block extension for tiptap",
"version": "2.0.0-beta.47", "version": "2.0.0-beta.48",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",
@@ -27,7 +27,7 @@
"@tiptap/extension-code-block": "^2.0.0-beta.24", "@tiptap/extension-code-block": "^2.0.0-beta.24",
"@types/lowlight": "^0.0.3", "@types/lowlight": "^0.0.3",
"lowlight": "^1.20.0", "lowlight": "^1.20.0",
"prosemirror-model": "^1.14.3", "prosemirror-model": "^1.15.0",
"prosemirror-state": "^1.3.4", "prosemirror-state": "^1.3.4",
"prosemirror-view": "^1.20.3" "prosemirror-view": "^1.20.3"
}, },

View File

@@ -3,6 +3,17 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/extension-gapcursor

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/extension-gapcursor", "name": "@tiptap/extension-gapcursor",
"description": "gapcursor extension for tiptap", "description": "gapcursor extension for tiptap",
"version": "2.0.0-beta.27", "version": "2.0.0-beta.28",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",

View File

@@ -7,7 +7,7 @@ import {
import { gapCursor } from 'prosemirror-gapcursor' import { gapCursor } from 'prosemirror-gapcursor'
declare module '@tiptap/core' { declare module '@tiptap/core' {
interface NodeConfig<Options> { interface NodeConfig<Options, Storage> {
/** /**
* Allow gap cursor * Allow gap cursor
*/ */
@@ -17,6 +17,7 @@ declare module '@tiptap/core' {
| ((this: { | ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
parent: ParentConfig<NodeConfig<Options>>['allowGapCursor'], parent: ParentConfig<NodeConfig<Options>>['allowGapCursor'],
}) => boolean | null), }) => boolean | null),
} }
@@ -35,6 +36,7 @@ export const Gapcursor = Extension.create({
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
} }
return { return {

View File

@@ -3,6 +3,25 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/extension-mention

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/extension-mention", "name": "@tiptap/extension-mention",
"description": "mention extension for tiptap", "description": "mention extension for tiptap",
"version": "2.0.0-beta.77", "version": "2.0.0-beta.79",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",
@@ -24,8 +24,8 @@
"@tiptap/core": "^2.0.0-beta.1" "@tiptap/core": "^2.0.0-beta.1"
}, },
"dependencies": { "dependencies": {
"@tiptap/suggestion": "^2.0.0-beta.74", "@tiptap/suggestion": "^2.0.0-beta.75",
"prosemirror-model": "^1.14.3", "prosemirror-model": "^1.15.0",
"prosemirror-state": "^1.3.4" "prosemirror-state": "^1.3.4"
}, },
"repository": { "repository": {

View File

@@ -51,7 +51,11 @@ export const Mention = Node.create<MentionOptions>({
.run() .run()
}, },
allow: ({ editor, range }) => { 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
}, },
}, },
}, },

View File

@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/extension-placeholder

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/extension-placeholder", "name": "@tiptap/extension-placeholder",
"description": "placeholder extension for tiptap", "description": "placeholder extension for tiptap",
"version": "2.0.0-beta.35", "version": "2.0.0-beta.36",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",
@@ -24,7 +24,7 @@
"@tiptap/core": "^2.0.0-beta.1" "@tiptap/core": "^2.0.0-beta.1"
}, },
"dependencies": { "dependencies": {
"prosemirror-model": "^1.14.3", "prosemirror-model": "^1.15.0",
"prosemirror-state": "^1.3.4", "prosemirror-state": "^1.3.4",
"prosemirror-view": "^1.20.3" "prosemirror-view": "^1.20.3"
}, },

View File

@@ -3,6 +3,17 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/extension-table

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/extension-table", "name": "@tiptap/extension-table",
"description": "table extension for tiptap", "description": "table extension for tiptap",
"version": "2.0.0-beta.34", "version": "2.0.0-beta.35",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",

View File

@@ -66,13 +66,14 @@ declare module '@tiptap/core' {
} }
} }
interface NodeConfig<Options> { interface NodeConfig<Options, Storage> {
/** /**
* Table Role * Table Role
*/ */
tableRole?: string | ((this: { tableRole?: string | ((this: {
name: string, name: string,
options: Options, options: Options,
storage: Storage,
parent: ParentConfig<NodeConfig<Options>>['tableRole'], parent: ParentConfig<NodeConfig<Options>>['tableRole'],
}) => string), }) => string),
} }
@@ -245,6 +246,7 @@ export const Table = Node.create<TableOptions>({
const context = { const context = {
name: extension.name, name: extension.name,
options: extension.options, options: extension.options,
storage: extension.storage,
} }
return { return {

View File

@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/html

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/html", "name": "@tiptap/html",
"description": "utility package to render tiptap JSON as 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", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",
@@ -21,9 +21,9 @@
"dist" "dist"
], ],
"dependencies": { "dependencies": {
"@tiptap/core": "^2.0.0-beta.125", "@tiptap/core": "^2.0.0-beta.128",
"hostic-dom": "^0.8.7", "hostic-dom": "^0.8.7",
"prosemirror-model": "^1.14.3" "prosemirror-model": "^1.15.0"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@@ -3,6 +3,28 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/react

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/react", "name": "@tiptap/react",
"description": "React components for tiptap", "description": "React components for tiptap",
"version": "2.0.0-beta.83", "version": "2.0.0-beta.85",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",
@@ -21,8 +21,8 @@
"dist" "dist"
], ],
"devDependencies": { "devDependencies": {
"@types/react": "^17.0.29", "@types/react": "^17.0.32",
"@types/react-dom": "^17.0.7", "@types/react-dom": "^17.0.10",
"react": "^17.0.0", "react": "^17.0.0",
"react-dom": "^17.0.0" "react-dom": "^17.0.0"
}, },

View File

@@ -114,6 +114,10 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeV
this.renderer.updateProps(props) this.renderer.updateProps(props)
} }
if (node.type !== this.node.type) {
return false
}
if (typeof this.options.update === 'function') { if (typeof this.options.update === 'function') {
const oldNode = this.node const oldNode = this.node
const oldDecorations = this.decorations const oldDecorations = this.decorations
@@ -130,10 +134,6 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeV
}) })
} }
if (node.type !== this.node.type) {
return false
}
if (node === this.node && this.decorations === decorations) { if (node === this.node && this.decorations === decorations) {
return true return true
} }

View File

@@ -17,7 +17,13 @@ export const useEditor = (options: Partial<EditorOptions> = {}, deps: Dependency
setEditor(instance) setEditor(instance)
instance.on('transaction', forceUpdate) instance.on('transaction', () => {
requestAnimationFrame(() => {
requestAnimationFrame(() => {
forceUpdate()
})
})
})
return () => { return () => {
instance.destroy() instance.destroy()

View File

@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/starter-kit

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/starter-kit", "name": "@tiptap/starter-kit",
"description": "starter kit for tiptap", "description": "starter kit for tiptap",
"version": "2.0.0-beta.127", "version": "2.0.0-beta.130",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",
@@ -21,7 +21,7 @@
"dist" "dist"
], ],
"dependencies": { "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-blockquote": "^2.0.0-beta.19",
"@tiptap/extension-bold": "^2.0.0-beta.19", "@tiptap/extension-bold": "^2.0.0-beta.19",
"@tiptap/extension-bullet-list": "^2.0.0-beta.18", "@tiptap/extension-bullet-list": "^2.0.0-beta.18",
@@ -29,7 +29,7 @@
"@tiptap/extension-code-block": "^2.0.0-beta.24", "@tiptap/extension-code-block": "^2.0.0-beta.24",
"@tiptap/extension-document": "^2.0.0-beta.13", "@tiptap/extension-document": "^2.0.0-beta.13",
"@tiptap/extension-dropcursor": "^2.0.0-beta.19", "@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-hard-break": "^2.0.0-beta.24",
"@tiptap/extension-heading": "^2.0.0-beta.18", "@tiptap/extension-heading": "^2.0.0-beta.18",
"@tiptap/extension-history": "^2.0.0-beta.16", "@tiptap/extension-history": "^2.0.0-beta.16",

View File

@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/suggestion

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/suggestion", "name": "@tiptap/suggestion",
"description": "suggestion plugin for tiptap", "description": "suggestion plugin for tiptap",
"version": "2.0.0-beta.74", "version": "2.0.0-beta.75",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",
@@ -24,7 +24,7 @@
"@tiptap/core": "^2.0.0-beta.1" "@tiptap/core": "^2.0.0-beta.1"
}, },
"dependencies": { "dependencies": {
"prosemirror-model": "^1.14.3", "prosemirror-model": "^1.15.0",
"prosemirror-state": "^1.3.4", "prosemirror-state": "^1.3.4",
"prosemirror-view": "^1.20.3" "prosemirror-view": "^1.20.3"
}, },

View File

@@ -17,7 +17,10 @@ export interface SuggestionOptions {
range: Range, range: Range,
props: any, props: any,
}) => void, }) => void,
items?: (query: string) => any[] | Promise<any[]>, items?: (props: {
query: string,
editor: Editor,
}) => any[] | Promise<any[]>,
render?: () => { render?: () => {
onStart?: (props: SuggestionProps) => void, onStart?: (props: SuggestionProps) => void,
onUpdate?: (props: SuggestionProps) => void, onUpdate?: (props: SuggestionProps) => void,
@@ -99,7 +102,10 @@ export function Suggestion({
query: state.query, query: state.query,
text: state.text, text: state.text,
items: (handleChange || handleStart) items: (handleChange || handleStart)
? await items(state.query) ? await items({
editor,
query: state.query,
})
: [], : [],
command: commandProps => { command: commandProps => {
command({ command({

View File

@@ -3,6 +3,28 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 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) # [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 **Note:** Version bump only for package @tiptap/vue-3

View File

@@ -1,7 +1,7 @@
{ {
"name": "@tiptap/vue-3", "name": "@tiptap/vue-3",
"description": "Vue components for tiptap", "description": "Vue components for tiptap",
"version": "2.0.0-beta.70", "version": "2.0.0-beta.72",
"homepage": "https://tiptap.dev", "homepage": "https://tiptap.dev",
"keywords": [ "keywords": [
"tiptap", "tiptap",

View File

@@ -39,6 +39,8 @@ export type ContentComponent = ComponentInternalInstance & {
export class Editor extends CoreEditor { export class Editor extends CoreEditor {
private reactiveState: Ref<EditorState> private reactiveState: Ref<EditorState>
private reactiveExtensionStorage: Ref<Record<string, any>>
public vueRenderers = reactive<Map<string, VueRenderer>>(new Map()) public vueRenderers = reactive<Map<string, VueRenderer>>(new Map())
public contentComponent: ContentComponent | null = null public contentComponent: ContentComponent | null = null
@@ -47,9 +49,11 @@ export class Editor extends CoreEditor {
super(options) super(options)
this.reactiveState = useDebouncedRef(this.view.state) this.reactiveState = useDebouncedRef(this.view.state)
this.reactiveExtensionStorage = useDebouncedRef(this.extensionStorage)
this.on('transaction', () => { this.on('transaction', () => {
this.reactiveState.value = this.view.state this.reactiveState.value = this.view.state
this.reactiveExtensionStorage.value = this.extensionStorage
}) })
return markRaw(this) return markRaw(this)
@@ -61,6 +65,12 @@ export class Editor extends CoreEditor {
: this.view.state : this.view.state
} }
get storage() {
return this.reactiveExtensionStorage
? this.reactiveExtensionStorage.value
: super.storage
}
/** /**
* Register a ProseMirror plugin. * Register a ProseMirror plugin.
*/ */

View File

@@ -20,7 +20,7 @@ export const NodeViewWrapper = defineComponent({
}, },
'data-node-view-wrapper': '', 'data-node-view-wrapper': '',
// @ts-ignore (https://github.com/vuejs/vue-next/issues/3031) // @ts-ignore (https://github.com/vuejs/vue-next/issues/3031)
onDragStart: this.onDragStart, onDragstart: this.onDragStart,
}, },
this.$slots.default?.(), this.$slots.default?.(),
) )

555
yarn.lock
View File

@@ -882,9 +882,9 @@
semver "^6.3.0" semver "^6.3.0"
"@babel/preset-modules@^0.1.4": "@babel/preset-modules@^0.1.4":
version "0.1.4" version "0.1.5"
resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-proposal-unicode-property-regex" "^7.4.4" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
@@ -1933,10 +1933,10 @@
"@babel/helper-module-imports" "^7.10.4" "@babel/helper-module-imports" "^7.10.4"
"@rollup/pluginutils" "^3.1.0" "@rollup/pluginutils" "^3.1.0"
"@rollup/plugin-commonjs@^21.0.0": "@rollup/plugin-commonjs@^21.0.1":
version "21.0.0" version "21.0.1"
resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.0.tgz#b9e4342855ea20b5528f4587b9a90f642196a502" resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz#1e57c81ae1518e4df0954d681c642e7d94588fee"
integrity sha512-XDQimjHl0kNotAV5lLo34XoygaI0teqiKGJ100B3iCU8+15YscJPeqk2KqkqD3NIe1H8ZTUo5lYjUFZyEgASTw== integrity sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==
dependencies: dependencies:
"@rollup/pluginutils" "^3.1.0" "@rollup/pluginutils" "^3.1.0"
commondir "^1.0.1" commondir "^1.0.1"
@@ -1946,10 +1946,10 @@
magic-string "^0.25.7" magic-string "^0.25.7"
resolve "^1.17.0" resolve "^1.17.0"
"@rollup/plugin-node-resolve@^13.0.5": "@rollup/plugin-node-resolve@^13.0.6":
version "13.0.5" version "13.0.6"
resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.5.tgz#016abe58796a4ff544d6beac7818921e3d3777fc" resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz#29629070bb767567be8157f575cfa8f2b8e9ef77"
integrity sha512-mVaw6uxtvuGx/XCI4qBQXsDZJUfyx5vp39iE0J/7Hd6wDhEbjHr6aES7Nr9yWbuE0BY+oKp6N7Bq6jX5NCGNmQ== integrity sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==
dependencies: dependencies:
"@rollup/pluginutils" "^3.1.0" "@rollup/pluginutils" "^3.1.0"
"@types/resolve" "1.17.1" "@types/resolve" "1.17.1"
@@ -1989,9 +1989,9 @@
"@types/estree" "*" "@types/estree" "*"
"@types/eslint@*": "@types/eslint@*":
version "7.28.1" version "7.28.2"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.1.tgz#50b07747f1f84c2ba8cd394cf0fe0ba07afce320" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.2.tgz#0ff2947cdd305897c52d5372294e8c76f351db68"
integrity sha512-XhZKznR3i/W5dXqUhgU9fFdJekufbeBd5DALmkuXoeFcjbQcPk+2cL+WLHf6Q81HWAnM2vrslIHpGVyCAviRwg== integrity sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==
dependencies: dependencies:
"@types/estree" "*" "@types/estree" "*"
"@types/json-schema" "*" "@types/json-schema" "*"
@@ -2006,7 +2006,7 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 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" version "7.0.9"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
@@ -2032,14 +2032,14 @@
integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
"@types/node@*": "@types/node@*":
version "16.10.9" version "16.11.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.9.tgz#8f1cdd517972f76a3b928298f4c0747cd6fef25a" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.4.tgz#90771124822d6663814f7c1c9b45a6654d8fd964"
integrity sha512-H9ReOt+yqIJPCutkTYjFjlyK6WEMQYT9hLZMlWtOjFQY2ItppsWZ6RJf8Aw+jz5qTYceuHvFgPIaKOHtLAEWBw== integrity sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==
"@types/node@^14.14.31": "@types/node@^14.14.31":
version "14.17.26" version "14.17.29"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.26.tgz#47a53c7e7804490155a4646d60c8e194816d073c" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.29.tgz#44a774fa2858efa4d039dd9051b51160e8295c70"
integrity sha512-eSTNkK/nfmnC7IKpOJZixDgG0W2/eHz1qyFN7o/rwwwIHsVRp+G9nbh4BrQ77kbQ2zPu286AQRxkuRLPcR3gXw== integrity sha512-sd4CHI9eTJXTH2vF3RGtGkqvWRwhsSSUFsXD4oG38GZzSZ0tNPbWikd2AbOAcKxCXhOg57fL8FPxjpfSzb2pIQ==
"@types/normalize-package-data@^2.4.0": "@types/normalize-package-data@^2.4.0":
version "2.4.1" version "2.4.1"
@@ -2144,17 +2144,17 @@
"@types/prosemirror-state" "*" "@types/prosemirror-state" "*"
"@types/prosemirror-transform" "*" "@types/prosemirror-transform" "*"
"@types/react-dom@^17.0.7": "@types/react-dom@^17.0.10":
version "17.0.9" version "17.0.10"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.9.tgz#441a981da9d7be117042e1a6fd3dac4b30f55add" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.10.tgz#d6972ec018d23cf22b99597f1289343d99ea9d9d"
integrity sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg== integrity sha512-8oz3NAUId2z/zQdFI09IMhQPNgIbiP8Lslhv39DIDamr846/0spjZK0vnrMak0iB8EKb9QFTTIdg2Wj2zH5a3g==
dependencies: dependencies:
"@types/react" "*" "@types/react" "*"
"@types/react@*", "@types/react@^17.0.29": "@types/react@*", "@types/react@^17.0.32":
version "17.0.29" version "17.0.32"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.29.tgz#9535f3fc01a4981ce9cadcf0daa2593c0c2f2251" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.32.tgz#89a161286bbe2325d4d516420a27364a324909f4"
integrity sha512-HSenIfBEBZ70BLrrVhtEtHpqaP79waauPtA8XKlczTxL3hXrW/ElGNLTpD1TmqkykgGlOAK55+D3SmUHEirpFw== integrity sha512-hAm1pmwA3oZWbkB985RFwNvBRMG0F3KWSiC4/hNmanigKZMiKQoH5Q6etNw8HIDztTGfvXyOjPvdNnvBUCuaPg==
dependencies: dependencies:
"@types/prop-types" "*" "@types/prop-types" "*"
"@types/scheduler" "*" "@types/scheduler" "*"
@@ -2194,74 +2194,74 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@typescript-eslint/eslint-plugin@^5.0.0": "@typescript-eslint/eslint-plugin@^5.1.0":
version "5.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.0.0.tgz#ecc7cc69d1e6f342beb6ea9cf9fbc02c97a212ac" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.1.0.tgz#381c188dfab12f7a2c7b6a8ba2402d6273eadeaa"
integrity sha512-T6V6fCD2U0YesOedvydTnrNtsC8E+c2QzpawIpDdlaObX0OX5dLo7tLU5c64FhTZvA1Xrdim+cXDI7NPsVx8Cg== integrity sha512-bekODL3Tqf36Yz8u+ilha4zGxL9mdB6LIsIoMAvvC5FAuWo4NpZYXtCbv7B2CeR1LhI/lLtLk+q4tbtxuoVuCg==
dependencies: dependencies:
"@typescript-eslint/experimental-utils" "5.0.0" "@typescript-eslint/experimental-utils" "5.1.0"
"@typescript-eslint/scope-manager" "5.0.0" "@typescript-eslint/scope-manager" "5.1.0"
debug "^4.3.1" debug "^4.3.2"
functional-red-black-tree "^1.0.1" functional-red-black-tree "^1.0.1"
ignore "^5.1.8" ignore "^5.1.8"
regexpp "^3.1.0" regexpp "^3.2.0"
semver "^7.3.5" semver "^7.3.5"
tsutils "^3.21.0" tsutils "^3.21.0"
"@typescript-eslint/experimental-utils@5.0.0": "@typescript-eslint/experimental-utils@5.1.0":
version "5.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.0.0.tgz#c7d7e67443dfb9fd93a5d060fb72c9e9b5638bbc" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.1.0.tgz#918a1a3d30404cc1f8edcfdf0df200804ef90d31"
integrity sha512-Dnp4dFIsZcPawD6CT1p5NibNUQyGSEz80sULJZkyhyna8AEqArmfwMwJPbmKzWVo4PabqNVzHYlzmcdLQWk+pg== integrity sha512-ovE9qUiZMOMgxQAESZsdBT+EXIfx/YUYAbwGUI6V03amFdOOxI9c6kitkgRvLkJaLusgMZ2xBhss+tQ0Y1HWxA==
dependencies: dependencies:
"@types/json-schema" "^7.0.7" "@types/json-schema" "^7.0.9"
"@typescript-eslint/scope-manager" "5.0.0" "@typescript-eslint/scope-manager" "5.1.0"
"@typescript-eslint/types" "5.0.0" "@typescript-eslint/types" "5.1.0"
"@typescript-eslint/typescript-estree" "5.0.0" "@typescript-eslint/typescript-estree" "5.1.0"
eslint-scope "^5.1.1" eslint-scope "^5.1.1"
eslint-utils "^3.0.0" eslint-utils "^3.0.0"
"@typescript-eslint/parser@^5.0.0": "@typescript-eslint/parser@^5.1.0":
version "5.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.0.0.tgz#50d1be2e0def82d73e863cceba74aeeac9973592" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.1.0.tgz#6c7f837d210d2bc0a811e7ea742af414f4e00908"
integrity sha512-B6D5rmmQ14I1fdzs71eL3DAuvnPHTY/t7rQABrL9BLnx/H51Un8ox1xqYAchs0/V2trcoyxB1lMJLlrwrJCDgw== integrity sha512-vx1P+mhCtYw3+bRHmbalq/VKP2Y3gnzNgxGxfEWc6OFpuEL7iQdAeq11Ke3Rhy8NjgB+AHsIWEwni3e+Y7djKA==
dependencies: dependencies:
"@typescript-eslint/scope-manager" "5.0.0" "@typescript-eslint/scope-manager" "5.1.0"
"@typescript-eslint/types" "5.0.0" "@typescript-eslint/types" "5.1.0"
"@typescript-eslint/typescript-estree" "5.0.0" "@typescript-eslint/typescript-estree" "5.1.0"
debug "^4.3.1" debug "^4.3.2"
"@typescript-eslint/scope-manager@5.0.0": "@typescript-eslint/scope-manager@5.1.0":
version "5.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.0.0.tgz#aea0fb0e2480c1169a02e89d9005ac3f2835713f" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.1.0.tgz#6f1f26ad66a8f71bbb33b635e74fec43f76b44df"
integrity sha512-5RFjdA/ain/MDUHYXdF173btOKncIrLuBmA9s6FJhzDrRAyVSA+70BHg0/MW6TE+UiKVyRtX91XpVS0gVNwVDQ== integrity sha512-yYlyVjvn5lvwCL37i4hPsa1s0ORsjkauhTqbb8MnpvUs7xykmcjGqwlNZ2Q5QpoqkJ1odlM2bqHqJwa28qV6Tw==
dependencies: dependencies:
"@typescript-eslint/types" "5.0.0" "@typescript-eslint/types" "5.1.0"
"@typescript-eslint/visitor-keys" "5.0.0" "@typescript-eslint/visitor-keys" "5.1.0"
"@typescript-eslint/types@5.0.0": "@typescript-eslint/types@5.1.0":
version "5.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.0.0.tgz#25d93f6d269b2d25fdc51a0407eb81ccba60eb0f" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.1.0.tgz#a8a75ddfc611660de6be17d3ad950302385607a9"
integrity sha512-dU/pKBUpehdEqYuvkojmlv0FtHuZnLXFBn16zsDmlFF3LXkOpkAQ2vrKc3BidIIve9EMH2zfTlxqw9XM0fFN5w== integrity sha512-sEwNINVxcB4ZgC6Fe6rUyMlvsB2jvVdgxjZEjQUQVlaSPMNamDOwO6/TB98kFt4sYYfNhdhTPBEQqNQZjMMswA==
"@typescript-eslint/typescript-estree@5.0.0": "@typescript-eslint/typescript-estree@5.1.0":
version "5.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.0.0.tgz#bc20f413c6e572c7309dbe5fa3be027984952af3" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.1.0.tgz#132aea34372df09decda961cb42457433aa6e83d"
integrity sha512-V/6w+PPQMhinWKSn+fCiX5jwvd1vRBm7AX7SJQXEGQtwtBvjMPjaU3YTQ1ik2UF1u96X7tsB96HMnulG3eLi9Q== integrity sha512-SSz+l9YrIIsW4s0ZqaEfnjl156XQ4VRmJsbA0ZE1XkXrD3cRpzuZSVCyqeCMR3EBjF27IisWakbBDGhGNIOvfQ==
dependencies: dependencies:
"@typescript-eslint/types" "5.0.0" "@typescript-eslint/types" "5.1.0"
"@typescript-eslint/visitor-keys" "5.0.0" "@typescript-eslint/visitor-keys" "5.1.0"
debug "^4.3.1" debug "^4.3.2"
globby "^11.0.3" globby "^11.0.4"
is-glob "^4.0.1" is-glob "^4.0.3"
semver "^7.3.5" semver "^7.3.5"
tsutils "^3.21.0" tsutils "^3.21.0"
"@typescript-eslint/visitor-keys@5.0.0": "@typescript-eslint/visitor-keys@5.1.0":
version "5.0.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.0.0.tgz#b789f7cd105e59bee5c0983a353942a5a48f56df" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.1.0.tgz#e01a01b27eb173092705ae983aa1451bd1842630"
integrity sha512-yRyd2++o/IrJdyHuYMxyFyBhU762MRHQ/bAGQeTnN3pGikfh+nEmM61XTqaDH1XDp53afZ+waXrk0ZvenoZ6xw== integrity sha512-uqNXepKBg81JVwjuqAxYrXa1Ql/YDzM+8g/pS+TCPxba0wZttl8m5DkrasbfnmJGHs4lQ2jTbcZ5azGhI7kK+w==
dependencies: dependencies:
"@typescript-eslint/types" "5.0.0" "@typescript-eslint/types" "5.1.0"
eslint-visitor-keys "^3.0.0" eslint-visitor-keys "^3.0.0"
"@vitejs/plugin-react-refresh@^1.3.6": "@vitejs/plugin-react-refresh@^1.3.6":
@@ -2322,7 +2322,7 @@
"@vue/compiler-dom" "3.2.20" "@vue/compiler-dom" "3.2.20"
"@vue/shared" "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" version "6.0.0-beta.19"
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.19.tgz#f8e88059daa424515992426a0c7ea5cde07e99bf" 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== 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" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 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: ansi-regex@^5.0.1:
version "5.0.1" version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 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" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
babel-loader@^8.2.2: babel-loader@^8.2.3:
version "8.2.2" version "8.2.3"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d"
integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==
dependencies: dependencies:
find-cache-dir "^3.3.1" find-cache-dir "^3.3.1"
loader-utils "^1.4.0" loader-utils "^1.4.0"
@@ -2927,15 +2922,15 @@ brotli-size@^4.0.0:
dependencies: dependencies:
duplexer "0.1.1" duplexer "0.1.1"
browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.3: browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.3, browserslist@^4.17.5:
version "4.17.4" version "4.17.5"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.4.tgz#72e2508af2a403aec0a49847ef31bd823c57ead4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz#c827bbe172a4c22b123f5e337533ceebadfdd559"
integrity sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ== integrity sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==
dependencies: dependencies:
caniuse-lite "^1.0.30001265" caniuse-lite "^1.0.30001271"
electron-to-chromium "^1.3.867" electron-to-chromium "^1.3.878"
escalade "^3.1.1" escalade "^3.1.1"
node-releases "^2.0.0" node-releases "^2.0.1"
picocolors "^1.0.0" picocolors "^1.0.0"
buffer-crc32@~0.2.3: 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" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
caniuse-lite@^1.0.30001264, caniuse-lite@^1.0.30001265: caniuse-lite@^1.0.30001264, caniuse-lite@^1.0.30001271:
version "1.0.30001267" version "1.0.30001271"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz#b1cf2937175afc0570e4615fc2d2f9069fa0ed30" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz#0dda0c9bcae2cf5407cd34cac304186616cc83e8"
integrity sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg== integrity sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==
caseless@~0.12.0: caseless@~0.12.0:
version "0.12.0" version "0.12.0"
@@ -3244,10 +3239,10 @@ color@^4.0.1:
color-convert "^2.0.1" color-convert "^2.0.1"
color-string "^1.6.0" color-string "^1.6.0"
colorette@^1.4.0: colorette@^2.0.16:
version "1.4.0" version "2.0.16"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
colors@^1.1.2: colors@^1.1.2:
version "1.4.0" version "1.4.0"
@@ -3290,9 +3285,9 @@ commander@^6.0.0:
integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
commander@^8.0.0: commander@^8.0.0:
version "8.2.0" version "8.3.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-8.2.0.tgz#37fe2bde301d87d47a53adeff8b5915db1381ca8" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
integrity sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA== integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
common-tags@^1.8.0: common-tags@^1.8.0:
version "1.8.0" version "1.8.0"
@@ -3402,9 +3397,9 @@ conventional-commits-filter@^2.0.7:
modify-values "^1.0.0" modify-values "^1.0.0"
conventional-commits-parser@^3.2.0: conventional-commits-parser@^3.2.0:
version "3.2.2" version "3.2.3"
resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.2.tgz#190fb9900c6e02be0c0bca9b03d57e24982639fd" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e"
integrity sha512-Jr9KAKgqAkwXMRHjxDwO/zOCDKod1XdAESHAGuJX38iZ7ZzVti/tvVoysO0suMsdAObp9NQ2rHSsSbnAqZ5f5g== integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==
dependencies: dependencies:
JSONStream "^1.0.4" JSONStream "^1.0.4"
is-text-path "^1.0.1" is-text-path "^1.0.1"
@@ -3435,11 +3430,11 @@ convert-source-map@^1.7.0:
safe-buffer "~5.1.1" safe-buffer "~5.1.1"
core-js-compat@^3.16.0, core-js-compat@^3.16.2: core-js-compat@^3.16.0, core-js-compat@^3.16.2:
version "3.18.3" version "3.19.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.3.tgz#e0e7e87abc55efb547e7fa19169e45fa9df27a67" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.0.tgz#b3b93f93c8721b3ed52b91f12f964cc410967f8b"
integrity sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw== integrity sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw==
dependencies: dependencies:
browserslist "^4.17.3" browserslist "^4.17.5"
semver "7.0.0" semver "7.0.0"
core-util-is@1.0.2: core-util-is@1.0.2:
@@ -4049,10 +4044,10 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0" jsbn "~0.1.0"
safer-buffer "^2.1.0" safer-buffer "^2.1.0"
electron-to-chromium@^1.3.867: electron-to-chromium@^1.3.878:
version "1.3.868" version "1.3.878"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.868.tgz#ed835023b57ecf0ba63dfe7d50e16b53758ab1da" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz#baa9fb5c24b9b580f08fb245cbb52a22f8fc8fa8"
integrity sha512-kZYCHqwJ1ctGrYDlOcWQH+/AftAm/KD4lEnLDNwS0kKwx1x6dU4zv+GuDjsPPOGn/2TjnKBaZjDyjXaoix0q/A== integrity sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==
emoji-regex@^8.0.0: emoji-regex@^8.0.0:
version "8.0.0" version "8.0.0"
@@ -4187,113 +4182,113 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1" is-date-object "^1.0.1"
is-symbol "^1.0.2" is-symbol "^1.0.2"
esbuild-android-arm64@0.13.6: esbuild-android-arm64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.6.tgz#a109b4e5203e9ec144cadccdf18a5daf021423e5" resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.9.tgz#6cc4a0c623332c0830a311ddd8242b1f496ff940"
integrity sha512-uEwrMRzqNzXxzIi0K/CtHn3/SPoRso4Dd/aJCpf9KuX+kCs9Tlhz29cKbZieznYAekdo36fDUrZyuugAwSdI+A== integrity sha512-Ty0hKldtjJVLHwUwbKR4GFPiXBo5iQ3aE1OLBar9lh3myaRkUGEb+Ypl74LEKa0+t/9lS3Ev1N5+5P2Sq6UvNQ==
esbuild-darwin-64@0.13.6: esbuild-darwin-64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.6.tgz#1a00ef4d2b3b1fe9de28a5cf195df113d6461155" resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.9.tgz#df44297c2438032cda2b21548a82bb007e2105cc"
integrity sha512-oJdWZn2QV5LTM24/vVWaUFlMVlRhpG9zZIA6Xd+xbCULOURwYnYRQWIzRpXNtTfuAr3+em9PqKUaGtYqvO/DYg== integrity sha512-Ay0/b98v0oYp3ApXNQ7QPbaSkCT9WjBU6h8bMB1SYrQ/PmHgwph91fb9V0pfOLKK1rYWypfrNbI0MyT2tWN+rQ==
esbuild-darwin-arm64@0.13.6: esbuild-darwin-arm64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.6.tgz#f48954d441059e2d06c1675ddcc25af00b164935" resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.9.tgz#704ef404a6a38eda190d40ed354e7f2c1c839081"
integrity sha512-+f8Yn5doTEpCWtBaGxciDTikxESdGCNZpLYtXzMJLTWFHr8zqfAf4TAYGvg6T5T6N7OMC8HHy3GM+BijFXDXMg== integrity sha512-nJB8chaJdWathCe6EyIiMIqfyEzbuXPyNsPlL3bYRB1zFCF8feXT874D4IHbJ/w8B6BpY3sM1Clr/I/DK8E4ow==
esbuild-freebsd-64@0.13.6: esbuild-freebsd-64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.6.tgz#b3bfea7e21f0d80796220927118fc76170cac06f" resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.9.tgz#fbbf22c99e15f27d0f8a1a040d7961a86f0d3a4e"
integrity sha512-Yb/DgZUX0C6i4vnOymthLzoWAJBYWbn3Y2F4wKEufsx2veGN/wlwO/yz7IWGVVzb2zMUqbt30hCLF61sUFe7gA== integrity sha512-ktaBujf12XLkVXLGx7WjFcmh1tt34tm7gP4pHkhvbzbHrq+BbXwcl4EsW+5JT9VNKl7slOGf4Qnua/VW7ZcnIw==
esbuild-freebsd-arm64@0.13.6: esbuild-freebsd-arm64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.6.tgz#e6f5777a85012457ada049fc6b1e3e2c36161514" resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.9.tgz#809fff4c43653dbbf071ffce9f80a030b278098e"
integrity sha512-UKYlEb7mwprSJ9VW9+q3/Mgxest45I6rGMB/hrKY1T6lqoBVhWS4BTbL4EGetWdk05Tw4njFAO9+nmxgl7jMlA== integrity sha512-vVa5zps4dmwpXwv/amxVpIWvFJuUPWQkpV+PYtZUW9lqjXsQ3LBHP51Q1cXZZBIrqwszLsEyJPa5GuDOY15hzQ==
esbuild-linux-32@0.13.6: esbuild-linux-32@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.6.tgz#8b04058312a76faec6964b954f1f02ab32ce43fe" resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.9.tgz#f9fd3423481e51674e9817d5eea25689889a5f5a"
integrity sha512-hQCZfSLBYtn8f1afFT6Dh9KeLsW12xLqrqssbhpi/xfN9c/bbCh/QQZaR9ZOEnmBHHRPb7rbSo3jQqlCWYb7LQ== integrity sha512-HxoW9QNqhO8VW1l7aBiYQH4lobeHq85+blZ4nlZ7sg5CNhGRRwnMlV6S08VYKz6V0YKnHb5OqJxx2HZuTZ7tgQ==
esbuild-linux-64@0.13.6: esbuild-linux-64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.6.tgz#554d8edfe3f791f8b26978eb173b2e13643442c0" resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.9.tgz#9d7f66866dae1abaff7cbc3749f2847d5fb72fd5"
integrity sha512-bRQwsD+xJoajonfyeq5JpiNRogH4mYFYbYsGhwrtQ4pMGk93V/4KuKQiKEisRZO0hYhZL4MtxufwF195zKlCAw== integrity sha512-L+eAR8o1lAUr9g64RXnBLuWZjAItAOWSUpvkchpa6QvSnXFA/nG6PgGsOBEqhDXl9qYEpGI0ReDrFkf8ByapvQ==
esbuild-linux-arm64@0.13.6: esbuild-linux-arm64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.6.tgz#2142fadbdbc0ebd52a166f956f0ecb1f6602112a" resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.9.tgz#669202e71b9ced4d285bfd1d69de948e013ac28f"
integrity sha512-sRc1lt9ma1xBvInCwpS77ywR6KVdcJNsErsrDkDXx3mVe8DLLEn05TG0nIX9I+s8ouHEepikdKCfe1DZdILRjQ== integrity sha512-IjbhZpW5VQYK4nVI4dj/mLvH5oXAIf57OI8BYVkCqrdVXJwR8nVrSqux3zJSY+ElrkOK3DtG9iTPpmqvBXaU0g==
esbuild-linux-arm@0.13.6: esbuild-linux-arm@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.6.tgz#ced8e35a94e0adbf134e5fa4e2b661f897e14b27" resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.9.tgz#c3ceb56ec0e3dbd1a3a89dca6cb7fc0ca360bcc8"
integrity sha512-qQUrpL7QoPqujXEFSpeu6QZ43z0+OdDPHDkLO0GPbpV/jebP7J+0FreMqoq7ZxWG4rPigwcRdEyqzHh8Bh4Faw== integrity sha512-DT0S+ufCVXatPZHjkCaBgZSFIV8FzY4GEHz/BlkitTWzUvT1dIUXjPIRPnqBUVa+0AyS1bZSfHzv9hTT4LHz7A==
esbuild-linux-mips64le@0.13.6: esbuild-linux-mips64le@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.6.tgz#e5cbc050f5d44f8ecc0f79b1641bbad3919a2b3a" resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.9.tgz#bf4bd389ee14b67c5c77669952f2de6b2cc8a003"
integrity sha512-1lsHZaIsHlFkHn1QRa/EONPGVHwzdIrkKn6r2m9cYUIn2J+rKtJg0e+WkNG3MaIrxozaGKaiSPGvaG1toCbZjw== integrity sha512-ec9RgAM4r+fe1ZmG16qeMwEHdcIvqeW8tpnpkfSQu9T4487KtQF6lg3TQasTarrLLEe7Qpy+E+r4VwC8eeZySQ==
esbuild-linux-ppc64le@0.13.6: esbuild-linux-ppc64le@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.6.tgz#57868a7eb762c1d19fa6d367b09a4610f0cbf7ca" resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.9.tgz#465b7bdc70577da606b3b5d463028292b6d834ad"
integrity sha512-x223JNC8XeLDf05zLaKfxqCEWVct4frp8ft8Qc13cha33TMrqMFaSPq6cgpgT2VYuUsXtwoocoWChKfvy+AUQg== integrity sha512-7b2/wg8T1n/L1BgCWlMSez0aXfGkNjFuOqMBQdnTti3LRuUwzGJcrhRf/FdZGJ5/evML9mqu60vLRuXW1TdXCg==
esbuild-netbsd-64@0.13.6: esbuild-netbsd-64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.6.tgz#1c5daa62571f1065e4a1100a1db5e488ef259024" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.9.tgz#94f2dabe83520066cc1e1fae3ecff78695a8ebb1"
integrity sha512-TonKf530kT25+zi1Da6esITmuBJe13QiN+QGVch6YE8t720IvIelDGwkOQN3Td7A0JjbSbK3u+Fo6YaL151VxQ== integrity sha512-PiZu3h4+Szj0iZPgvuD2Y0isOXnlNetmF6jMcOwW54BScwynW24/baE+z7PfDyNFgjV04Ga2THdcpbKBDhgWQw==
esbuild-openbsd-64@0.13.6: esbuild-openbsd-64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.6.tgz#315fd85970365835f6a1eb7b6e9335d59f772564" resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.9.tgz#b47f6a641ca37358aeedb2b7c4bb73dd0682c6d5"
integrity sha512-WFa5J0IuyER0UJbCGw87gvGWXGfhxeNppYcvQjp0pWYuH4FS+YqphyjV0RJlybzzDpAXkyZ9RzkMFtSAp+6AUA== integrity sha512-SJKN4Ez+ilY7mu+1gAdGQ9N6dktBfbEkiOAvw+hT7xHrNnTnrTGH0FT4qx9dazB9HX6D04L4PXmVOyynqi+oEQ==
esbuild-sunos-64@0.13.6: esbuild-sunos-64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.6.tgz#8422eeb9f3712daa4befd19e5da6d7c9af9fc744" resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.9.tgz#b0df4a316b7c98eb490f4bd0db381cf2c391ae73"
integrity sha512-duCL8Ewri+zjKxuN/61maniDxcd8fHwSuubdAPofll0y0E6WcL/R/e/mQzhHIuoguFm5RJkKun1qua54javh7g== integrity sha512-9N0RjZ7cElE8ifrS0nBrLQgBMQNPiIIKO2GzLXy7Ms8AM3KjfLiV2G2+9O0B9paXjRAHchIwazTeOyeWb1vyWA==
esbuild-windows-32@0.13.6: esbuild-windows-32@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.6.tgz#694eb4768ee72219d3bc6415b1d3a0f843aea9ec" resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.9.tgz#e229563e134e634f9748cc8315c691e2013259ef"
integrity sha512-U8RkpT4f0/dygA5ytFyHNZ/fRECU9LWBMrqWflNhM31iTi6RhU0QTuOzFYkmpYnwl358ZZhVoBeEOm313d4u4A== integrity sha512-awxWs1kns+RfjhqBbTbdlePjqZrAE2XMaAQJNg9dtu+C7ghC3QKsqXbu0C26OuF5YeAdJcq9q+IdG6WPLjvj9w==
esbuild-windows-64@0.13.6: esbuild-windows-64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.6.tgz#1adbf5367b08e735262f57098d19c07d0a2fec1c" resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.9.tgz#103ad3f13e1a0e44934b91f358e81dd201b86b34"
integrity sha512-A23VyUeyBfSWUYNL0jtrJi5M/2yR/RR8zfpGQ0wU0fldqV2vxnvmBYOBwRxexFYCDRpRWh4cPFsoYoXRCFa8Dg== integrity sha512-VmA9GQMCzOr8rFfD72Dum1+AWhJui7ZO6sYwp6rBHYu4vLmWITTSUsd/zgXXmZuHBPkkvxLJLF8XsKFCRKflJA==
esbuild-windows-arm64@0.13.6: esbuild-windows-arm64@0.13.9:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.6.tgz#9279083740ec90a2d638485c97b1d003771d685a" resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.9.tgz#545bb58848008258b339b1b00fcfe92c85bc7251"
integrity sha512-K/pFqK/s5C6wXYcFKO9iPY4yU3DI0/Gbl1W2+OhaPHoXu13VGBmqbCiQ5lohHGE72FFQl76naOjEayEiI+gDMQ== integrity sha512-P/jPY2JwmTpgEPh9BkXpCe690tcDSSo0K9BHTniSeEAEz26kPpqldVa4XDm0R+hNnFA7ecEgNskr4QAxE1ry0w==
esbuild@^0.13.2: esbuild@^0.13.2:
version "0.13.6" version "0.13.9"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.6.tgz#b9be288108d47e814a6c8729e495dce0fddbf441" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.9.tgz#aafc4b3375ac443ae7b223c26c4e58d10d2d535b"
integrity sha512-zkMkYwC9ohVe6qxXykKf/4jfbtM/09CL8UEEnwuhO7Xq8NOTN2yAwCrmKKvHlGrEej6Y8e/tAmHB7wMMg7O0ew== integrity sha512-8bYcckmisXjGvBMeylp1PRtu21uOoCDFAgXGGF2BR241zYQDN6ZLNvcmQlnQ7olG0p6PRWmJI8WVH3ca8viPuw==
optionalDependencies: optionalDependencies:
esbuild-android-arm64 "0.13.6" esbuild-android-arm64 "0.13.9"
esbuild-darwin-64 "0.13.6" esbuild-darwin-64 "0.13.9"
esbuild-darwin-arm64 "0.13.6" esbuild-darwin-arm64 "0.13.9"
esbuild-freebsd-64 "0.13.6" esbuild-freebsd-64 "0.13.9"
esbuild-freebsd-arm64 "0.13.6" esbuild-freebsd-arm64 "0.13.9"
esbuild-linux-32 "0.13.6" esbuild-linux-32 "0.13.9"
esbuild-linux-64 "0.13.6" esbuild-linux-64 "0.13.9"
esbuild-linux-arm "0.13.6" esbuild-linux-arm "0.13.9"
esbuild-linux-arm64 "0.13.6" esbuild-linux-arm64 "0.13.9"
esbuild-linux-mips64le "0.13.6" esbuild-linux-mips64le "0.13.9"
esbuild-linux-ppc64le "0.13.6" esbuild-linux-ppc64le "0.13.9"
esbuild-netbsd-64 "0.13.6" esbuild-netbsd-64 "0.13.9"
esbuild-openbsd-64 "0.13.6" esbuild-openbsd-64 "0.13.9"
esbuild-sunos-64 "0.13.6" esbuild-sunos-64 "0.13.9"
esbuild-windows-32 "0.13.6" esbuild-windows-32 "0.13.9"
esbuild-windows-64 "0.13.6" esbuild-windows-64 "0.13.9"
esbuild-windows-arm64 "0.13.6" esbuild-windows-arm64 "0.13.9"
escalade@^3.1.1: escalade@^3.1.1:
version "3.1.1" version "3.1.1"
@@ -4369,10 +4364,10 @@ eslint-plugin-import@^2.25.2:
resolve "^1.20.0" resolve "^1.20.0"
tsconfig-paths "^3.11.0" tsconfig-paths "^3.11.0"
eslint-plugin-vue@^7.19.1: eslint-plugin-vue@^7.20.0:
version "7.19.1" version "7.20.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.19.1.tgz#435fb2ce712842a9530b28eacb883680e8eaa4f3" resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz#98c21885a6bfdf0713c3a92957a5afeaaeed9253"
integrity sha512-e2pD7nW2sTY04ThH+66BgToNwC4n6dqfNhKE+ypdJFtZgn3Zn+nP8ZEIFPG0PGqCKQ3qxy8dJk1bzUsuQd3ANA== integrity sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==
dependencies: dependencies:
eslint-utils "^2.1.0" eslint-utils "^2.1.0"
natural-compare "^1.4.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" 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== integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==
eslint@^8.0.1: eslint@^8.1.0:
version "8.0.1" version "8.1.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.0.1.tgz#3610e7fe4a05c2154669515ca60835a76a19f700" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.1.0.tgz#00f1f7dbf4134f26588e6c9f2efe970760f64664"
integrity sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA== integrity sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==
dependencies: dependencies:
"@eslint/eslintrc" "^1.0.3" "@eslint/eslintrc" "^1.0.3"
"@humanwhocodes/config-array" "^0.6.0" "@humanwhocodes/config-array" "^0.6.0"
@@ -4999,7 +4994,7 @@ globals@^13.6.0, globals@^13.9.0:
dependencies: dependencies:
type-fest "^0.20.2" 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" version "11.0.4"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"
integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==
@@ -5430,9 +5425,9 @@ is-color-stop@^1.1.0:
rgba-regex "^1.0.0" rgba-regex "^1.0.0"
is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.7.0: is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.7.0:
version "2.7.0" version "2.8.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548"
integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==
dependencies: dependencies:
has "^1.0.3" has "^1.0.3"
@@ -5455,11 +5450,6 @@ is-fullwidth-code-point@^1.0.0:
dependencies: dependencies:
number-is-nan "^1.0.0" 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: is-fullwidth-code-point@^3.0.0:
version "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" 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= integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
jest-worker@^27.0.6: jest-worker@^27.0.6:
version "27.2.5" version "27.3.1"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.5.tgz#ed42865661959488aa020e8a325df010597c36d4" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.3.1.tgz#0def7feae5b8042be38479799aeb7b5facac24b2"
integrity sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw== integrity sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
merge-stream "^2.0.0" merge-stream "^2.0.0"
@@ -5882,7 +5872,7 @@ levn@^0.4.1:
prelude-ls "^1.2.1" prelude-ls "^1.2.1"
type-check "~0.4.0" 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" version "0.2.42"
resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.42.tgz#6d8bf1fb8205dec37a953c521c5ee403fd8769b0" resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.42.tgz#6d8bf1fb8205dec37a953c521c5ee403fd8769b0"
integrity sha512-8BNM4MiokEKzMvSxTOC3gnCBisJH+jL67CnSnqzHv3jli3pUvGC8wz+0DQ2YvGr4wVQdb2R2uNNPw9LEpVvJ4Q== integrity sha512-8BNM4MiokEKzMvSxTOC3gnCBisJH+jL67CnSnqzHv3jli3pUvGC8wz+0DQ2YvGr4wVQdb2R2uNNPw9LEpVvJ4Q==
@@ -5926,12 +5916,12 @@ linkifyjs@^3.0.3:
integrity sha512-ba5opS5wRHSbDC8VaiDdN14nPGm6LqyRsIPQZGG4qXV4scFdrPneT/uoZOaq9QAPBf6W9I9D/6tNSzWH//815Q== integrity sha512-ba5opS5wRHSbDC8VaiDdN14nPGm6LqyRsIPQZGG4qXV4scFdrPneT/uoZOaq9QAPBf6W9I9D/6tNSzWH//815Q==
listr2@^3.8.3: listr2@^3.8.3:
version "3.12.2" version "3.13.1"
resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.12.2.tgz#2d55cc627111603ad4768a9e87c9c7bb9b49997e" resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.1.tgz#816e8c1728d50f223795f530d72d248c7fa14602"
integrity sha512-64xC2CJ/As/xgVI3wbhlPWVPx0wfTqbUAkpb7bjDi0thSWMqrf07UFhrfsGoo8YSXmF049Rp9C0cjLC8rZxK9A== integrity sha512-pk4YBDA2cxtpM8iLHbz6oEsfZieJKHf6Pt19NlKaHZZVpqHyVs/Wqr7RfBBCeAFCJchGO7WQHVkUPZTvJMHk8w==
dependencies: dependencies:
cli-truncate "^2.1.0" cli-truncate "^2.1.0"
colorette "^1.4.0" colorette "^2.0.16"
log-update "^4.0.0" log-update "^4.0.0"
p-map "^4.0.0" p-map "^4.0.0"
rxjs "^6.6.7" 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" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
nanoid@^3.1.28: nanoid@^3.1.30:
version "3.1.30" version "3.1.30"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362"
integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==
@@ -6463,10 +6453,10 @@ node-gyp@^7.1.0:
tar "^6.0.2" tar "^6.0.2"
which "^2.0.2" which "^2.0.2"
node-releases@^2.0.0: node-releases@^2.0.1:
version "2.0.0" version "2.0.1"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.0.tgz#67dc74903100a7deb044037b8a2e5f453bb05400" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
integrity sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA== integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
nopt@^4.0.1: nopt@^4.0.1:
version "4.0.3" 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" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss@^8.1.10, postcss@^8.1.6, postcss@^8.2.1, postcss@^8.3.8, postcss@^8.3.9: postcss@^8.1.10, postcss@^8.1.6, postcss@^8.2.1, postcss@^8.3.11, postcss@^8.3.8:
version "8.3.9" version "8.3.11"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.9.tgz#98754caa06c4ee9eb59cc48bd073bb6bd3437c31" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.11.tgz#c3beca7ea811cd5e1c4a3ec6d2e7599ef1f8f858"
integrity sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw== integrity sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==
dependencies: dependencies:
nanoid "^3.1.28" nanoid "^3.1.30"
picocolors "^0.2.1" picocolors "^1.0.0"
source-map-js "^0.6.2" source-map-js "^0.6.2"
prelude-ls@^1.2.1: 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" prosemirror-state "^1.0.0"
w3c-keyname "^2.2.0" w3c-keyname "^2.2.0"
prosemirror-model@^1.0.0, prosemirror-model@^1.14.3, prosemirror-model@^1.8.1: prosemirror-model@^1.0.0, prosemirror-model@^1.14.3, prosemirror-model@^1.15.0, prosemirror-model@^1.8.1:
version "1.14.3" version "1.15.0"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.14.3.tgz#a9c250d3c4023ddf10ecb41a0a7a130e9741d37e" resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.15.0.tgz#23bc09098daa7c309dba90a76a1b989ce6f61405"
integrity sha512-yzZlBaSxfUPIIP6U5Edh5zKxJPZ5f7bwZRhiCuH3UYkWhj+P3d8swHsbuAMOu/iDatDc5J/Qs5Mb3++mZf+CvQ== integrity sha512-hQJv7SnIhlAy9ga3lhPPgaufhvCbQB9tHwscJ9E1H1pPHmN8w5V/lURueoYv9Kc3/bpNWoyHa8r3g//m7N0ChQ==
dependencies: dependencies:
orderedmap "^1.1.0" orderedmap "^1.1.0"
@@ -7520,7 +7510,7 @@ regenerator-transform@^0.14.2:
dependencies: dependencies:
"@babel/runtime" "^7.8.4" "@babel/runtime" "^7.8.4"
regexpp@^3.1.0, regexpp@^3.2.0: regexpp@^3.2.0:
version "3.2.0" version "3.2.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
@@ -7693,10 +7683,10 @@ rollup-plugin-typescript2@^0.30.0:
resolve "1.20.0" resolve "1.20.0"
tslib "2.1.0" tslib "2.1.0"
rollup@^2.57.0, rollup@^2.58.0: rollup@^2.57.0, rollup@^2.58.1:
version "2.58.0" version "2.58.1"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.0.tgz#a643983365e7bf7f5b7c62a8331b983b7c4c67fb" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.1.tgz#b9a0f9e601129d9a4686b7ec3159095f7a73825f"
integrity sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw== integrity sha512-dNhchlN/3k3EKtyPXWdEEI7wiPQ07WInzsklWFm/6dUZspF63nj0O1A9PTsMxbmtQziwnOOl5oR+BgWNjTEYLA==
optionalDependencies: optionalDependencies:
fsevents "~2.3.2" 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" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass@^1.43.2: sass@^1.43.3:
version "1.43.2" version "1.43.3"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.43.2.tgz#c02501520c624ad6622529a8b3724eb08da82d65" resolved "https://registry.yarnpkg.com/sass/-/sass-1.43.3.tgz#aa16a69131b84f0cd23189a242571e8905f1ce43"
integrity sha512-DncYhjl3wBaPMMJR0kIUaH3sF536rVrOcqqVGmTZHQRRzj7LQlyGV7Mb8aCKFyILMr5VsPHwRYtyKpnKYlmQSQ== integrity sha512-BJnLngqWpMeS65UvlYYEuCb3/fLxDxhHtOB/gWPxs6NKrslTxGt3ZxwIvOe/0Jm4tWwM/+tIpE3wj4dLEhPDeQ==
dependencies: dependencies:
chokidar ">=3.0.0 <4.0.0" chokidar ">=3.0.0 <4.0.0"
@@ -8088,15 +8078,7 @@ string-width@^1.0.1:
is-fullwidth-code-point "^1.0.0" is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
"string-width@^1.0.2 || 2": "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0:
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:
version "4.2.3" version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -8142,13 +8124,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
dependencies: dependencies:
ansi-regex "^2.0.0" 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: strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1" version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 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-languageserver-textdocument "^1.0.1"
vscode-uri "^3.0.2" vscode-uri "^3.0.2"
vite@^2.6.7: vite@^2.6.10:
version "2.6.7" version "2.6.10"
resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.7.tgz#e15c1d8327950720b5d7c4ec3fb36a5a58ccf7cb" resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.10.tgz#7a4f420c6e2c7d9062c7f9ce4578a817c72b3842"
integrity sha512-ewk//jve9k6vlU8PfJmWUHN8k0YYdw4VaKOMvoQ3nT2Pb6k5OSMKQi4jPOzVH/TlUqMsCrq7IJ80xcuDDVyigg== integrity sha512-XbevwpDJMs3lKiGEj0UQScsOCpwHIjFgfzPnFVkPgnxsF9oPv1uGyckLg58XkXv6LnO46KN9yZqJzINFmAxtUg==
dependencies: dependencies:
esbuild "^0.13.2" esbuild "^0.13.2"
postcss "^8.3.8" postcss "^8.3.8"
@@ -8768,11 +8743,11 @@ vue-eslint-parser@^7.10.0:
semver "^6.3.0" semver "^6.3.0"
vue-router@^4.0.11: vue-router@^4.0.11:
version "4.0.11" version "4.0.12"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.11.tgz#cd649a0941c635281763a20965b599643ddc68ed" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.12.tgz#8dc792cddf5bb1abcc3908f9064136de7e13c460"
integrity sha512-sha6I8fx9HWtvTrFZfxZkiQQBpqSeT+UCwauYjkdOQYRvwsGwimlQQE2ayqUwuuXGzquFpCPoXzYKWlzL4OuXg== integrity sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==
dependencies: dependencies:
"@vue/devtools-api" "^6.0.0-beta.14" "@vue/devtools-api" "^6.0.0-beta.18"
vue@^2.6.0: vue@^2.6.0:
version "2.6.14" 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" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.1.tgz#251a7d9720d75ada1469ca07dbb62f3641a05b6d"
integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA== integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==
webpack@^5.58.2: webpack@^5.59.1:
version "5.58.2" version "5.59.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.58.2.tgz#6b4af12fc9bd5cbedc00dc0a2fc2b9592db16b44" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.59.1.tgz#60c77e9aad796252153d4d7ab6b2d4c11f0e548c"
integrity sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw== integrity sha512-I01IQV9K96FlpXX3V0L4nvd7gb0r7thfuu1IfT2P4uOHOA77nKARAKDYGe/tScSHKnffNIyQhLC8kRXzY4KEHQ==
dependencies: dependencies:
"@types/eslint-scope" "^3.7.0" "@types/eslint-scope" "^3.7.0"
"@types/estree" "^0.0.50" "@types/estree" "^0.0.50"
@@ -8898,11 +8873,11 @@ which@^2.0.1, which@^2.0.2:
isexe "^2.0.0" isexe "^2.0.0"
wide-align@^1.1.0: wide-align@^1.1.0:
version "1.1.3" version "1.1.5"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
dependencies: dependencies:
string-width "^1.0.2 || 2" string-width "^1.0.2 || 2 || 3 || 4"
word-wrap@^1.2.3: word-wrap@^1.2.3:
version "1.2.3" version "1.2.3"
@@ -9109,12 +9084,12 @@ yauzl@^2.10.0:
buffer-crc32 "~0.2.3" buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0" fd-slicer "~1.1.0"
yjs@^13.5.13: yjs@^13.5.16:
version "13.5.13" version "13.5.16"
resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.13.tgz#0bf4d415938fd57212805ba942a5d18ec77fb537" resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.16.tgz#ff64e7faf017c13d35654316c5671b0c66484aab"
integrity sha512-5vDcT2ZY8USY6jfwGU1xWcyLz4UwOZH9ue5Ri/G9qv3u4rD7bhKeZhtQM+92/7ft6T2fnZf6roVhDvCx7ixf7g== integrity sha512-T+sNq9cC4Tq46RKNVEoArHEr2o2vJo/94T0Mgrug70NRmUKf8iwmA4LiWi/bHHEepUAVxzhmt+qsgbbWbKtraw==
dependencies: dependencies:
lib0 "^0.2.41" lib0 "^0.2.42"
yocto-queue@^0.1.0: yocto-queue@^0.1.0:
version "0.1.0" version "0.1.0"