+
@@ -10,6 +10,8 @@ import Document from '@tiptap/extension-document'
import Paragraph from '@tiptap/extension-paragraph'
import Text from '@tiptap/extension-text'
import Code from '@tiptap/extension-code'
+import BulletList from '@tiptap/extension-bullet-list'
+import ListItem from '@tiptap/extension-list-item'
import Focus from '@tiptap/extension-focus'
export default {
@@ -30,6 +32,8 @@ export default {
Paragraph(),
Text(),
Code(),
+ BulletList(),
+ ListItem(),
Focus({
className: 'has-focus',
nested: true,
@@ -38,12 +42,11 @@ export default {
autoFocus: true,
content: `
- The focus extension adds custom classes to focused nodes. By default, it’ll add a has-focus class, even to nested nodes:
+ The focus extension adds a class to the focused node only. That enables you to add a custom styling to just that node. By default, it’ll add .has-focus, even to nested nodes.
-
{ className: 'has-focus', nested: true }
- - With
nested: true nested elements like this list item will be focused.
- - Otherwise the whole list will get the focus class, even if only a single list item is selected.
+ - Nested elements (like this list item) will be focused with the default setting of
nested: true.
+ - Otherwise the whole list will get the focus class, even when just a single list item is selected.
`,
})
diff --git a/docs/src/demos/Examples/Links/index.vue b/docs/src/demos/Examples/Links/index.vue
index 9d22c73f..e3240fc7 100644
--- a/docs/src/demos/Examples/Links/index.vue
+++ b/docs/src/demos/Examples/Links/index.vue
@@ -39,10 +39,13 @@ export default {
],
content: `
- Wow, this editor has support for links to the whole world wide web. We tested a lot of URLs and I think you can add *every URL* you want. Isn’t that cool? Let’s try another one! Yep, seems to work.
+ Wow, this editor has support for links to the whole world wide web. We tested a lot of URLs and I think you can add *every URL* you want. Isn’t that cool? Let’s try another one! Yep, seems to work.
- By default every link will get a \`rel="noopener noreferrer nofollow"\` attribute. It’s configurable though.
+ By default every link will get a [rel="noopener noreferrer nofollow"] attribute for security reasons. It’s configurable though.
+
+
+ Ah, and links open in a new tab by default, but that’s also - yes, you’ve guessed it - configurable.
`,
})
diff --git a/docs/src/demos/Examples/Minimalist/index.vue b/docs/src/demos/Examples/Minimalist/index.vue
index 2de54be3..9b676326 100644
--- a/docs/src/demos/Examples/Minimalist/index.vue
+++ b/docs/src/demos/Examples/Minimalist/index.vue
@@ -21,19 +21,19 @@ export default {
mounted() {
this.editor = new Editor({
- content: `
-
- This is a radically reduced version of tiptap. It has only support for a document, paragraphs and text. That’s it. It’s probably too much for real minimalists though.
-
-
- The paragraph extension is not literally required, but you need at least one node. That node can be something different, for example to render a task list and only that task list.
-
- `,
extensions: [
Document(),
Paragraph(),
Text(),
],
+ content: `
+
+ This is a radically reduced version of tiptap. It has only support for a document, paragraphs and text. That’s it. It’s probably too much for real minimalists though.
+
+
+ The paragraph extension is not really required, but you need at least one node. Sure, that node can be something different. You’ll mostly likely want to add a paragraph though.
+
+ `,
})
},
diff --git a/docs/src/demos/Examples/ReadOnly/index.vue b/docs/src/demos/Examples/ReadOnly/index.vue
index 766da7dd..08e61ba5 100644
--- a/docs/src/demos/Examples/ReadOnly/index.vue
+++ b/docs/src/demos/Examples/ReadOnly/index.vue
@@ -28,7 +28,10 @@ export default {
editable: this.editable,
content: `
- This text is read-only. You are not able to edit something. Links to fancy websites are still working.
+ This text is read-only. No matter what you try, you are not able to edit something. Okay, if you toggle the checkbox above you’ll be able to edit the text.
+
+
+ If you want to check the state, you can call editor.isEditable().
`,
extensions: defaultExtensions(),
@@ -60,5 +63,6 @@ export default {
[contenteditable=false] {
color: #999;
+ cursor: not-allowed;
}
diff --git a/docs/src/demos/Extensions/Blockquote/index.spec.js b/docs/src/demos/Extensions/Blockquote/index.spec.js
index 76d7cd68..d6e0cc7d 100644
--- a/docs/src/demos/Extensions/Blockquote/index.spec.js
+++ b/docs/src/demos/Extensions/Blockquote/index.spec.js
@@ -10,6 +10,20 @@ context('/api/extensions/blockquote', () => {
})
})
+ it('should parse blockquote tags correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should parse blockquote tags without paragraphs correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should make the selected line a blockquote', () => {
cy.get('.ProseMirror blockquote')
.should('not.exist')
diff --git a/docs/src/demos/Extensions/Bold/index.spec.js b/docs/src/demos/Extensions/Bold/index.spec.js
index da2d4f48..dbdbba45 100644
--- a/docs/src/demos/Extensions/Bold/index.spec.js
+++ b/docs/src/demos/Extensions/Bold/index.spec.js
@@ -10,6 +10,36 @@ context('/api/extensions/bold', () => {
})
})
+ it('should transform b tags to strong tags', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('sould omit b tags with normal font weight inline style', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should transform any tag with bold inline style to strong tags', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should make the selected text bold', () => {
cy.get('.demo__preview button:first')
.click()
diff --git a/docs/src/demos/Extensions/BulletList/index.spec.js b/docs/src/demos/Extensions/BulletList/index.spec.js
index 2636ba56..28f9a815 100644
--- a/docs/src/demos/Extensions/BulletList/index.spec.js
+++ b/docs/src/demos/Extensions/BulletList/index.spec.js
@@ -10,6 +10,20 @@ context('/api/extensions/bullet-list', () => {
})
})
+ it('should parse unordered lists correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
')
+ expect(editor.getHTML()).to.eq('
')
+ })
+ })
+
+ it('should parse unordered lists without paragraphs correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
')
+ expect(editor.getHTML()).to.eq('
')
+ })
+ })
+
it('the button should make the selected line a bullet list item', () => {
cy.get('.ProseMirror ul')
.should('not.exist')
diff --git a/docs/src/demos/Extensions/Code/index.spec.js b/docs/src/demos/Extensions/Code/index.spec.js
index 2b48929d..2111e436 100644
--- a/docs/src/demos/Extensions/Code/index.spec.js
+++ b/docs/src/demos/Extensions/Code/index.spec.js
@@ -10,6 +10,16 @@ context('/api/extensions/code', () => {
})
})
+ it('should parse code tags correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+
+ editor.setContent('
Example Text')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('should mark the selected text as inline code', () => {
cy.get('.demo__preview button:first')
.click()
@@ -32,4 +42,11 @@ context('/api/extensions/code', () => {
cy.get('.ProseMirror code')
.should('not.exist')
})
+
+ it('should make inline code from the markdown shortcut', () => {
+ cy.get('.ProseMirror')
+ .type('`Example`')
+ .find('code')
+ .should('contain', 'Example')
+ })
})
diff --git a/docs/src/demos/Extensions/CodeBlock/index.spec.js b/docs/src/demos/Extensions/CodeBlock/index.spec.js
index 746605c0..18b6bb18 100644
--- a/docs/src/demos/Extensions/CodeBlock/index.spec.js
+++ b/docs/src/demos/Extensions/CodeBlock/index.spec.js
@@ -10,6 +10,20 @@ context('/api/extensions/code-block', () => {
})
})
+ it('should parse code blocks correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should parse code blocks with language correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should make the selected line a code block', () => {
cy.get('.demo__preview button:first')
.click()
@@ -39,36 +53,25 @@ context('/api/extensions/code-block', () => {
it('the keyboard shortcut should make the selected line a code block', () => {
cy.get('.ProseMirror')
- .trigger('keydown', { shiftKey: true, ctrlKey: true, key: '\\' })
+ .trigger('keydown', { shiftKey: true, modKey: true, key: 'c' })
.find('pre')
.should('contain', 'Example Text')
})
it('the keyboard shortcut should toggle the code block', () => {
cy.get('.ProseMirror')
- .trigger('keydown', { shiftKey: true, ctrlKey: true, key: '\\' })
+ .trigger('keydown', { shiftKey: true, modKey: true, key: 'c' })
.find('pre')
.should('contain', 'Example Text')
cy.get('.ProseMirror')
.type('{selectall}')
- .trigger('keydown', { shiftKey: true, ctrlKey: true, key: '\\' })
+ .trigger('keydown', { shiftKey: true, modKey: true, key: 'c' })
cy.get('.ProseMirror pre')
.should('not.exist')
})
- it('should make a code block from markdown shortcuts', () => {
- cy.get('.ProseMirror').then(([{ editor }]) => {
- editor.clearContent()
-
- cy.get('.ProseMirror')
- .type('``` Code')
- .find('pre>code')
- .should('contain', 'Code')
- })
- })
-
it('should parse the language from a HTML code block', () => {
cy.get('.ProseMirror').then(([{ editor }]) => {
editor.setContent('
body { display: none; }
')
@@ -79,7 +82,29 @@ context('/api/extensions/code-block', () => {
})
})
- it('should make a code block for js', () => {
+ it('should make a code block from backtick markdown shortcuts', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.clearContent()
+
+ cy.get('.ProseMirror')
+ .type('``` Code')
+ .find('pre>code')
+ .should('contain', 'Code')
+ })
+ })
+
+ it('should make a code block from tilde markdown shortcuts', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.clearContent()
+
+ cy.get('.ProseMirror')
+ .type('~~~ Code')
+ .find('pre>code')
+ .should('contain', 'Code')
+ })
+ })
+
+ it('should make a code block for js with backticks', () => {
cy.get('.ProseMirror').then(([{ editor }]) => {
editor.clearContent()
@@ -89,4 +114,15 @@ context('/api/extensions/code-block', () => {
.should('contain', 'Code')
})
})
+
+ it('should make a code block for js with tildes', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.clearContent()
+
+ cy.get('.ProseMirror')
+ .type('~~~js Code')
+ .find('pre>code.language-js')
+ .should('contain', 'Code')
+ })
+ })
})
diff --git a/docs/src/demos/Extensions/Document/index.spec.js b/docs/src/demos/Extensions/Document/index.spec.js
index e5480a1b..0231d33c 100644
--- a/docs/src/demos/Extensions/Document/index.spec.js
+++ b/docs/src/demos/Extensions/Document/index.spec.js
@@ -2,4 +2,25 @@ context('/api/extensions/document', () => {
before(() => {
cy.visit('/api/extensions/document')
})
+
+ beforeEach(() => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
')
+ })
+ })
+
+ it('should return the document in as json', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ const json = editor.getJSON()
+
+ expect(json).to.deep.equal({
+ type: 'document',
+ content: [
+ {
+ type: 'paragraph',
+ },
+ ],
+ })
+ })
+ })
})
diff --git a/docs/src/demos/Extensions/HardBreak/index.spec.js b/docs/src/demos/Extensions/HardBreak/index.spec.js
index 9cb12634..00586450 100644
--- a/docs/src/demos/Extensions/HardBreak/index.spec.js
+++ b/docs/src/demos/Extensions/HardBreak/index.spec.js
@@ -9,6 +9,20 @@ context('/api/extensions/hard-break', () => {
})
})
+ it('should parse hard breaks correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example
Text
')
+ expect(editor.getHTML()).to.eq('
Example
Text
')
+ })
+ })
+
+ it('should parse hard breaks with self-closing tag correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example
Text
')
+ expect(editor.getHTML()).to.eq('
Example
Text
')
+ })
+ })
+
it('the button should add a line break', () => {
cy.get('.ProseMirror br')
.should('not.exist')
@@ -20,7 +34,7 @@ context('/api/extensions/hard-break', () => {
.should('exist')
})
- it('the default keyboard shortcut should add a line break', () => {
+ it.skip('the default keyboard shortcut should add a line break', () => {
cy.get('.ProseMirror br')
.should('not.exist')
diff --git a/docs/src/demos/Extensions/Heading/index.spec.js b/docs/src/demos/Extensions/Heading/index.spec.js
index 5f9c9f9c..2543c17e 100644
--- a/docs/src/demos/Extensions/Heading/index.spec.js
+++ b/docs/src/demos/Extensions/Heading/index.spec.js
@@ -10,6 +10,28 @@ context('/api/extensions/heading', () => {
})
})
+ const headings = [
+ '
Example Text
',
+ '
Example Text
',
+ '
Example Text
',
+ ]
+
+ headings.forEach(html => {
+ it(`should parse headings correctly (${html})`, () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent(html)
+ expect(editor.getHTML()).to.eq(html)
+ })
+ })
+ })
+
+ it('should omit disabled heading levels', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should make the selected line a h1', () => {
cy.get('.ProseMirror h1')
.should('not.exist')
diff --git a/docs/src/demos/Extensions/HorizontalRule/index.spec.js b/docs/src/demos/Extensions/HorizontalRule/index.spec.js
index 0f700668..30e962be 100644
--- a/docs/src/demos/Extensions/HorizontalRule/index.spec.js
+++ b/docs/src/demos/Extensions/HorizontalRule/index.spec.js
@@ -9,6 +9,20 @@ context('/api/extensions/horizontal-rule', () => {
})
})
+ it('should parse horizontal rules correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should parse horizontal rules with self-closing tag correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should add a horizontal rule', () => {
cy.get('.ProseMirror hr')
.should('not.exist')
diff --git a/docs/src/demos/Extensions/Image/index.vue b/docs/src/demos/Extensions/Image/index.vue
new file mode 100644
index 00000000..52615a3b
--- /dev/null
+++ b/docs/src/demos/Extensions/Image/index.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/docs/src/demos/Extensions/Italic/index.spec.js b/docs/src/demos/Extensions/Italic/index.spec.js
index 0bd952ac..16d26c3f 100644
--- a/docs/src/demos/Extensions/Italic/index.spec.js
+++ b/docs/src/demos/Extensions/Italic/index.spec.js
@@ -10,6 +10,27 @@ context('/api/extensions/italic', () => {
})
})
+ it('i tags should be transformed to em tags', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('i tags with normal font style should be omitted', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('generic tags with italic style should be transformed to strong tags', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should make the selected text italic', () => {
cy.get('.demo__preview button:first')
.click()
diff --git a/docs/src/demos/Extensions/Link/index.spec.js b/docs/src/demos/Extensions/Link/index.spec.js
index 29db24a4..6f7f89c1 100644
--- a/docs/src/demos/Extensions/Link/index.spec.js
+++ b/docs/src/demos/Extensions/Link/index.spec.js
@@ -10,6 +10,27 @@ context('/api/extensions/link', () => {
})
})
+ it('should parse a tags correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should parse a tags with target attribute correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should parse a tags with rel attribute correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should add a link to the selected text', () => {
cy.window().then(win => {
cy.stub(win, 'prompt').returns('https://tiptap.dev')
diff --git a/docs/src/demos/Extensions/OrderedList/index.spec.js b/docs/src/demos/Extensions/OrderedList/index.spec.js
index a6d58920..acab83cc 100644
--- a/docs/src/demos/Extensions/OrderedList/index.spec.js
+++ b/docs/src/demos/Extensions/OrderedList/index.spec.js
@@ -10,6 +10,20 @@ context('/api/extensions/ordered-list', () => {
})
})
+ it('should parse ordered lists correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should parse ordered lists without paragraphs correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
- Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should make the selected line a ordered list item', () => {
cy.get('.ProseMirror ol')
.should('not.exist')
diff --git a/docs/src/demos/Extensions/OrderedList/index.vue b/docs/src/demos/Extensions/OrderedList/index.vue
index e1f4268b..6703c4ec 100644
--- a/docs/src/demos/Extensions/OrderedList/index.vue
+++ b/docs/src/demos/Extensions/OrderedList/index.vue
@@ -38,10 +38,15 @@ export default {
ListItem(),
],
content: `
-
+
- A list item
- And another one
-
+
+
+
+ - This item starts at 5
+ - And another one
+
`,
})
},
diff --git a/docs/src/demos/Extensions/Paragraph/index.spec.js b/docs/src/demos/Extensions/Paragraph/index.spec.js
index 734f9d31..359cfbcf 100644
--- a/docs/src/demos/Extensions/Paragraph/index.spec.js
+++ b/docs/src/demos/Extensions/Paragraph/index.spec.js
@@ -9,6 +9,19 @@ context('/api/extensions/paragraph', () => {
})
})
+ it('should parse paragraphs correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('text should be wrapped in a paragraph by default', () => {
cy.get('.ProseMirror')
.type('Example Text')
diff --git a/docs/src/demos/Extensions/Strike/index.spec.js b/docs/src/demos/Extensions/Strike/index.spec.js
index ad51e03f..f43f91d6 100644
--- a/docs/src/demos/Extensions/Strike/index.spec.js
+++ b/docs/src/demos/Extensions/Strike/index.spec.js
@@ -10,6 +10,34 @@ context('/api/extensions/strike', () => {
})
})
+ it('should parse s tags correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should transform del tags to s tags', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should transform strike tags to s tags', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should transform any tag with text decoration line through to s tags', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should strike the selected text', () => {
cy.get('.demo__preview button:first')
.click()
@@ -51,7 +79,7 @@ context('/api/extensions/strike', () => {
it('should make a striked text from the markdown shortcut', () => {
cy.get('.ProseMirror')
- .type('~Strike~')
+ .type('~~Strike~~')
.find('s')
.should('contain', 'Strike')
})
diff --git a/docs/src/demos/Extensions/TextAlign/index.spec.js b/docs/src/demos/Extensions/TextAlign/index.spec.js
new file mode 100644
index 00000000..a9d851de
--- /dev/null
+++ b/docs/src/demos/Extensions/TextAlign/index.spec.js
@@ -0,0 +1,18 @@
+context('/api/extensions/text', () => {
+ before(() => {
+ cy.visit('/api/extensions/text')
+ })
+
+ beforeEach(() => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.clearContent()
+ })
+ })
+
+ it('text should be wrapped in a paragraph by default', () => {
+ cy.get('.ProseMirror')
+ .type('Example Text')
+ .find('p')
+ .should('contain', 'Example Text')
+ })
+})
diff --git a/docs/src/demos/Extensions/TextAlign/index.vue b/docs/src/demos/Extensions/TextAlign/index.vue
new file mode 100644
index 00000000..58af3f46
--- /dev/null
+++ b/docs/src/demos/Extensions/TextAlign/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/src/demos/Extensions/Underline/index.spec.js b/docs/src/demos/Extensions/Underline/index.spec.js
index 19a28377..3d7664e7 100644
--- a/docs/src/demos/Extensions/Underline/index.spec.js
+++ b/docs/src/demos/Extensions/Underline/index.spec.js
@@ -10,6 +10,20 @@ context('/api/extensions/underline', () => {
})
})
+ it('should parse u tags correctly', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
+ it('should transform any tag with text decoration underline to u tags', () => {
+ cy.get('.ProseMirror').then(([{ editor }]) => {
+ editor.setContent('
Example Text
')
+ expect(editor.getHTML()).to.eq('
Example Text
')
+ })
+ })
+
it('the button should underline the selected text', () => {
cy.get('.demo__preview button:first')
.click()
diff --git a/docs/src/demos/React/components/Editor.jsx b/docs/src/demos/React/components/Editor.jsx
index 7700616b..8eec95cd 100644
--- a/docs/src/demos/React/components/Editor.jsx
+++ b/docs/src/demos/React/components/Editor.jsx
@@ -19,7 +19,7 @@ export const Editor = ({
content: value,
...props,
}).on('transaction', () => {
- onChange(e.json())
+ onChange(e.getJSON())
})
setEditor(e)
diff --git a/docs/src/docPages/api/commands.md b/docs/src/docPages/api/commands.md
index b32d9187..3192ed56 100644
--- a/docs/src/docPages/api/commands.md
+++ b/docs/src/docPages/api/commands.md
@@ -3,20 +3,38 @@
## Table of Contents
## Introduction
+The editor provides a ton of commands to programmtically add or change content or alter the selection. If you want to build your own editor you definitely want to learn more about them.
+
+## Execute a command
+All available commands are accessible through an editor instance. Let’s say you want to make text bold when a user clicks on a button. That’s how that would look like:
+
+```js
+editor.bold()
+```
+
+While that’s perfectly fine and does make the selected bold, you’d likely want to change multiple commands in one run. Let’s have a look at how that works.
## Chain commands
+Most commands can be executed combined to one call. First of all, that’s shorter than separate function call in most cases. Here is an example to make the selected text bold:
```js
editor.chain().focus().bold().run()
```
+The `.chain()` is required to start a new chain and the `.run()` is needed to actually execute all the commands in between. Between those two functions, this example combines to different commands.
+
+When a user clicks on a button outside of the content, the editor isn’t in focus anymore. That’s why you probably want to add a `.focus()` call to most of your commands, that brings back the focus to the editor and the user can continue to type.
+
+All chained commands are kind of queued up. They are combined to one single transaction. That means, the content is only updated once, also the `update` event is only triggered once.
+
## List of commands
+Have a look at all of the core commands listed below. They should give you a good first impression of what’s possible.
### Content
| Command | Description |
| --------------- | ----------------------------------------------------------- |
| .clearContent() | Clear the whole document. |
-| .insertHTML() | Insert a string of HTML at the currently selected position. |
+| .insertgetHTML() | Insert a string of HTML at the currently selected position. |
| .insertText() | Insert a string of text at the currently selected position. |
| .setContent() | Replace the whole document with new content. |
@@ -47,3 +65,6 @@ editor.chain().focus().bold().run()
| .focus() | Focus the editor at the given position. |
| .scrollIntoView() | Scroll the selection into view. |
| .selectAll() | Select the whole document. |
+
+### Extensions
+All extension can add additional commands (and most do), check out the specific [documentation for the provided extensions](/api/extensions) to learn more about that. Of course, you can [add your custom extensions](/guide/custom-extensions) with custom commands aswell.
diff --git a/docs/src/docPages/api/editor.md b/docs/src/docPages/api/editor.md
index 7067849a..1e0f0c73 100644
--- a/docs/src/docPages/api/editor.md
+++ b/docs/src/docPages/api/editor.md
@@ -20,13 +20,13 @@ This class is a central building block of tiptap. It does most of the heavy lift
| `onBlur` | `Function` | `undefined` | Returns an object with the `event` and current `state` and `view` of Prosemirror on blur. |
| `onFocus` | `Function` | `undefined` | Returns an object with the `event` and current `state` and `view` of Prosemirror on focus. |
| `onInit` | `Function` | `undefined` | Returns an object with the current `state` and `view` of Prosemirror on init. |
-| `onUpdate` | `Function` | `undefined` | Returns an object with the current `state` of Prosemirror, a `json()` and `html()` function and the `transaction` on every change. |
+| `onUpdate` | `Function` | `undefined` | Returns an object with the current `state` of Prosemirror, a `getJSON()` and `getHTML()` function and the `transaction` on every change. |
## Methods
| Method | Parameters | Description |
| -------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
-| `html()` | – | Returns the current content as HTML. |
-| `json()` | – | Returns the current content as JSON. |
+| `getHTML()` | – | Returns the current content as HTML. |
+| `getJSON()` | – | Returns the current content as JSON. |
| `destroy()` | – | Stops the editor instance and unbinds all events. |
| `chain()` | - | Create a command chain to call multiple commands at once. |
| `setOptions()` | `options` A list of options | Update editor options. |
diff --git a/docs/src/docPages/api/extensions/code-block.md b/docs/src/docPages/api/extensions/code-block.md
index 6608c521..e8a45b6d 100644
--- a/docs/src/docPages/api/extensions/code-block.md
+++ b/docs/src/docPages/api/extensions/code-block.md
@@ -1,7 +1,7 @@
# CodeBlock
With the CodeBlock extension you can add fenced code blocks to your documents. It’ll wrap the code in `
` and `` HTML tags.
-Type three backticks and a space ``` and a code block is instantly added for you.
+Type ``` (three backticks and a space) or ∼∼∼ (three tildes and a space) and a code block is instantly added for you. You can even specify the language, try writing ```css . That should add a `language-css` class to the ``-tag.
::: warning Restrictions
The CodeBlock extension doesn’t come with styling and has no syntax highlighting built-in. It’s on our roadmap though.
@@ -28,7 +28,8 @@ yarn add @tiptap/extension-code-block
| codeBlock | — | Wrap content in a code block. |
## Keyboard shortcuts
-* `Shift` `Control` `\`
+* Windows/Linux: `Control` `Shift` `C`
+* macOS: `Cmd` `Shift` `C`
## Source code
[packages/extension-code-block/](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-code-block/)
diff --git a/docs/src/docPages/api/extensions/code.md b/docs/src/docPages/api/extensions/code.md
index 2c02666c..2c00086c 100644
--- a/docs/src/docPages/api/extensions/code.md
+++ b/docs/src/docPages/api/extensions/code.md
@@ -23,7 +23,7 @@ yarn add @tiptap/extension-code
| code | — | Mark text as inline code. |
## Keyboard shortcuts
-* `Alt ` `
+* `Alt` `
## Source code
[packages/extension-code/](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-code/)
diff --git a/docs/src/docPages/api/extensions/image.md b/docs/src/docPages/api/extensions/image.md
new file mode 100644
index 00000000..e811d826
--- /dev/null
+++ b/docs/src/docPages/api/extensions/image.md
@@ -0,0 +1,16 @@
+# Image
+
+## Installation
+```bash
+# With npm
+npm install @tiptap/extension-image
+
+# Or: With Yarn
+yarn add @tiptap/extension-image
+```
+
+## Source code
+[packages/extension-image/](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-image/)
+
+## Usage
+
diff --git a/docs/src/docPages/api/extensions/strike.md b/docs/src/docPages/api/extensions/strike.md
index 15729c2e..4cff00dd 100644
--- a/docs/src/docPages/api/extensions/strike.md
+++ b/docs/src/docPages/api/extensions/strike.md
@@ -1,7 +1,7 @@
# Strike
Use this extension to render ~~striked text~~. If you pass ``, ``, `` tags, or text with inline `style` attributes setting `text-decoration: line-through` in the editor’s initial content, they all will be rendered accordingly.
-Type ~text between tildes~ and it will be magically ~~striked through~~ while you type.
+Type ∼∼text between tildes∼∼ and it will be magically ~~striked through~~ while you type.
::: warning Restrictions
The extension will generate the corresponding `` HTML tags when reading contents of the `Editor` instance. All text striked through, regardless of the method will be normalized to `` HTML tags.
diff --git a/docs/src/docPages/api/extensions/text-align.md b/docs/src/docPages/api/extensions/text-align.md
new file mode 100644
index 00000000..fdb3680a
--- /dev/null
+++ b/docs/src/docPages/api/extensions/text-align.md
@@ -0,0 +1,16 @@
+# Text Align
+
+## Installation
+```bash
+# With npm
+npm install @tiptap/extension-text-align
+
+# Or: With Yarn
+yarn add @tiptap/extension-text-align
+```
+
+## Source code
+[packages/extension-text-align/](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-text-align/)
+
+## Usage
+
diff --git a/docs/src/docPages/api/schema.md b/docs/src/docPages/api/schema.md
index 46f00a5c..37a4b3fc 100644
--- a/docs/src/docPages/api/schema.md
+++ b/docs/src/docPages/api/schema.md
@@ -128,7 +128,7 @@ const schema = getSchema([
If you need to render the content on the server side, e. g. for a blog post that was written with tiptap, you’ll probably need a way to do just that without an actual editor instance.
-That’s what `generateHtml()` is for. It’s a utility function that renders HTML without an actual editor instance.
+That’s what `generategetHTML()` is for. It’s a utility function that renders HTML without an actual editor instance.
:::warning Work in progress
Currently, that works only in the browser (client side), but we plan to bring this to Node.js (to use it on the server side).
diff --git a/docs/src/docPages/examples/basic.md b/docs/src/docPages/examples/basic.md
index 14651225..91004db3 100644
--- a/docs/src/docPages/examples/basic.md
+++ b/docs/src/docPages/examples/basic.md
@@ -1,4 +1,4 @@
# Basic
+BUG: Headings can’t be transformed to a bullet or ordered list.
-
diff --git a/docs/src/docPages/examples/collaborative-editing.md b/docs/src/docPages/examples/collaborative-editing.md
index d1f66ae0..c085612e 100644
--- a/docs/src/docPages/examples/collaborative-editing.md
+++ b/docs/src/docPages/examples/collaborative-editing.md
@@ -1,6 +1,12 @@
# Collaborative editing
-:::warning Public
-The content of this editor is shared with other users.
+This example shows how you can use tiptap to let different users collaboratively work on the same text in real-time.
+
+It connects client with WebRTC and merges changes to the document (no matter where they come from) with the awesome library [Y.js](https://github.com/yjs/yjs) by Kevin Jahns. Be aware that in a real-world scenario you would probably add a server, which is also able to merge changes with Y.js.
+
+If you want to learn more about collaborative text editing, [check out our guide on that topic](/guide/collaborative-editing). Anyway, it’s showtime now:
+
+:::warning The content of this editor is shared with other users from the Internet.
+Don’t share your password, credit card numbers or other things you wouldn’t make public.
:::
diff --git a/docs/src/docPages/examples/focus.md b/docs/src/docPages/examples/focus.md
index 04e59d5b..be7024ea 100644
--- a/docs/src/docPages/examples/focus.md
+++ b/docs/src/docPages/examples/focus.md
@@ -1,3 +1,3 @@
# Focus
-
\ No newline at end of file
+
diff --git a/docs/src/docPages/examples/minimalist.md b/docs/src/docPages/examples/minimalist.md
index 5505bbae..0a735ea0 100644
--- a/docs/src/docPages/examples/minimalist.md
+++ b/docs/src/docPages/examples/minimalist.md
@@ -1,3 +1,3 @@
# Minimalist
-
+
diff --git a/docs/src/docPages/guide/collaborative-editing.md b/docs/src/docPages/guide/collaborative-editing.md
new file mode 100644
index 00000000..9bbe3895
--- /dev/null
+++ b/docs/src/docPages/guide/collaborative-editing.md
@@ -0,0 +1,24 @@
+# Collaborative editing
+
+## Table of Contents
+
+## Introduction
+
+Collaborative editing allows multiple users to work on the same text document in real-time. It’s a complex topic that you should be aware before adding it blindly to you app. No worries though, here is everything you need to know.
+
+## Configure collaboration
+
+### WebRTC provider
+
+### Websocket provider
+
+### Add cursors
+
+### Offline support
+
+## Store the content
+
+### Client-only implementation
+
+### Server implementation
+
diff --git a/docs/src/docPages/guide/custom-extensions.md b/docs/src/docPages/guide/custom-extensions.md
index 76c3c088..0e6d430a 100644
--- a/docs/src/docPages/guide/custom-extensions.md
+++ b/docs/src/docPages/guide/custom-extensions.md
@@ -3,7 +3,7 @@
## Table of Contents
## Introduction
-Let’s extend tiptap with a custom extension!
+One of the strength of tiptap is it’s extendability. You don’t depend on the provided extensions, it’s intended to extend the editor to your liking. With custom extensions you can add new content types and new functionalities, on top of what already exists or on top of that.
## Option 1: Change defaults
diff --git a/docs/src/docPages/guide/custom-styling.md b/docs/src/docPages/guide/custom-styling.md
index b1605244..b3c53c02 100644
--- a/docs/src/docPages/guide/custom-styling.md
+++ b/docs/src/docPages/guide/custom-styling.md
@@ -10,7 +10,7 @@ The whole editor is rendered inside of a container with the class `.ProseMirror`
```css
/* Scoped to the editor */
-.ProseMirror p {
+.ProseMirror p {
margin: 1em 0;
}
```
@@ -19,7 +19,7 @@ If you’re rendering the stored content somewhere, there won’t be a `.ProseMi
```css
/* Global styling */
-p {
+p {
margin: 1em 0;
}
```
@@ -29,7 +29,6 @@ p {
Most extensions have a `class` option, which you can use to add a custom CSS class to the HTML tag.
```js
-/* Add custom classes */
new Editor({
extensions: [
Document(),
@@ -55,7 +54,6 @@ The rendered HTML will look like that:
You can even customize the markup for every extension. This will make a custom bold extension that doesn’t render a `` tag, but a `` tag:
```js
-/* Customizing the markup */
import Bold from '@tiptap/extension-bold'
const CustomBold = Bold
diff --git a/docs/src/docPages/guide/store-content.md b/docs/src/docPages/guide/store-content.md
index 92c0497e..d69d267f 100644
--- a/docs/src/docPages/guide/store-content.md
+++ b/docs/src/docPages/guide/store-content.md
@@ -11,7 +11,7 @@ You can store your content as JSON and restore the content from HTML, or the oth
JSON is probably easier to loop through, for example to look for a mention and it’s more like what tiptap uses under the hood. Anyway, if you want to use JSON to store the content we provide a method to retrieve the content as JSON:
```js
-const json = editor.json()
+const json = editor.getJSON()
```
You can store that in your database (or send it to an API) and restore the document initially like that:
@@ -59,7 +59,7 @@ editor.setContent({
HTML can be easily rendered in other places, for example in emails and it’s wildly used, so it’s probably easier to switch the editor at some point. Anyway, every editor instance provides a method to get HTML from the current document:
```js
-const html = editor.html()
+const html = editor.getHTML()
```
This can then be used to restore the document initially:
diff --git a/docs/src/docPages/introduction.md b/docs/src/docPages/introduction.md
index 1f56e8e7..5c6afa8b 100644
--- a/docs/src/docPages/introduction.md
+++ b/docs/src/docPages/introduction.md
@@ -17,9 +17,9 @@ Although tiptap tries to hide most of the complexity of ProseMirror, it’s buil
**Renderless.** We don’t tell you what a menu should look like or where it should be rendered in the DOM. That’s why tiptap is renderless and comes without any CSS. You are in full control over markup and styling.
-**Framework-agnostic.** We don’t care what framework you use. Tiptap is ready to be used with plain JavaScript, Vue.js or React. That makes it even possible to write a renderer for Svelte and others.
+**Framework-agnostic.** We don’t care what framework you use. Tiptap is ready to be used with plain JavaScript or Vue.js. That makes it even possible to write a renderer for React, Svelte and others.
-**TypeScript.** Tiptap 2 is written in TypeScript. That gives you a nice autocomplete for the API (if your IDE for it), helps to find bugs early and makes it possible to generate [a complete API documentation](#) on top of the extensive human written documentation.
+**TypeScript.** Tiptap 2 is written in TypeScript. That gives you a nice autocomplete for the API (if your IDE supports that), helps to find bugs early and makes it possible to generate [a complete API documentation](#) on top of the extensive human written documentation.
## Who uses tiptap?
- [GitLab](https://gitlab.com)
diff --git a/docs/src/layouts/App/base.scss b/docs/src/layouts/App/base.scss
index 7e229b72..95b824ad 100644
--- a/docs/src/layouts/App/base.scss
+++ b/docs/src/layouts/App/base.scss
@@ -8,6 +8,10 @@
outline: none;
}
+*:focus {
+ outline: none;
+}
+
::-webkit-scrollbar {
width: 14px;
height: 14px;
@@ -24,11 +28,11 @@
border: 4px solid rgba(0, 0, 0, 0);
background-clip: padding-box;
border-radius: 8px;
- background-color: rgba($colorBlack, 0);
+ background-color: rgba($colorWhite, 0);
}
:hover::-webkit-scrollbar-thumb {
- background-color: rgba($colorBlack, 0.1);
+ background-color: rgba($colorWhite, 0.1);
}
::-webkit-scrollbar-button {
@@ -43,7 +47,6 @@
html {
scroll-behavior: smooth;
- height: 100%;
}
body {
@@ -52,17 +55,12 @@ body {
-moz-osx-font-smoothing: grayscale;
line-height: 1.7;
font-feature-settings: 'cv05' 1;
- background-color: $colorBackground;
- height: 100%;
+ background-color: $colorBlack;
+ color: $colorText;
}
-*:focus {
- outline: none;
-}
-
-ul,
-ol {
- list-style: none;
+*[id] {
+ scroll-margin-top: 6rem;
}
button {
@@ -74,22 +72,19 @@ a {
color: inherit;
transition: color 0.2s $ease, background-color 0.2s $ease;
text-decoration: none;
+
+ &:hover {
+ color: $colorWhite;
+ }
}
code {
font-family: 'JetBrainsMono', monospace;
- background-color: rgba($colorBlack, 0.05);
padding: 0.1rem 0.3rem;
border-radius: 0.25rem;
- color: rgba($colorBlack, 0.7);
font-size: 0.9rem;
}
-blockquote {
- padding-left: 1rem;
- border-left: 3px solid rgba($colorBlack, 0.1);
-}
-
.is-active {
background: black;
color: white;
@@ -103,21 +98,23 @@ blockquote {
pre {
background: rgba($colorBlack, 0.9);
color: rgba($colorWhite, 0.9);
- padding: 1rem;
+ padding: 0.75rem 1rem;
margin: 0.5rem 0;
border-radius: 0.25rem;
code {
color: inherit;
background: none;
+ font-size: 0.8rem;
}
}
hr {
margin: 1rem 0;
}
-}
-#table-of-contents {
- display: none;
+ blockquote {
+ padding-left: 1rem;
+ border-left: 3px solid rgba($colorBlack, 0.1);
+ }
}
diff --git a/docs/src/layouts/App/fonts.scss b/docs/src/layouts/App/fonts.scss
index 1e0b7961..59e4432b 100644
--- a/docs/src/layouts/App/fonts.scss
+++ b/docs/src/layouts/App/fonts.scss
@@ -2,7 +2,7 @@
// font-family: 'Inter';
// font-style: normal;
// font-weight: 100;
-//
+//
// src: url("~@/assets/fonts/Inter-Thin-BETA.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-Thin-BETA.woff") format("woff"),
// ;
@@ -11,7 +11,7 @@
// font-family: 'Inter';
// font-style: italic;
// font-weight: 100;
-//
+//
// src: url("~@/assets/fonts/Inter-ThinItalic-BETA.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-ThinItalic-BETA.woff") format("woff"),
// ;
@@ -21,7 +21,7 @@
// font-family: 'Inter';
// font-style: normal;
// font-weight: 200;
-//
+//
// src: url("~@/assets/fonts/Inter-ExtraLight-BETA.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-ExtraLight-BETA.woff") format("woff"),
// ;
@@ -30,7 +30,7 @@
// font-family: 'Inter';
// font-style: italic;
// font-weight: 200;
-//
+//
// src: url("~@/assets/fonts/Inter-ExtraLightItalic-BETA.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-ExtraLightItalic-BETA.woff") format("woff"),
// ;
@@ -40,7 +40,7 @@
// font-family: 'Inter';
// font-style: normal;
// font-weight: 300;
-//
+//
// src: url("~@/assets/fonts/Inter-Light-BETA.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-Light-BETA.woff") format("woff"),
// ;
@@ -49,7 +49,7 @@
// font-family: 'Inter';
// font-style: italic;
// font-weight: 300;
-//
+//
// src: url("~@/assets/fonts/Inter-LightItalic-BETA.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-LightItalic-BETA.woff") format("woff"),
// ;
@@ -112,30 +112,30 @@
;
}
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-weight: 700;
- src:
- url("~@/assets/fonts/Inter-Bold.woff2") format("woff2"),
- url("~@/assets/fonts/Inter-Bold.woff") format("woff"),
- ;
-}
-@font-face {
- font-family: 'Inter';
- font-style: italic;
- font-weight: 700;
- src:
- url("~@/assets/fonts/Inter-BoldItalic.woff2") format("woff2"),
- url("~@/assets/fonts/Inter-BoldItalic.woff") format("woff"),
- ;
-}
+// @font-face {
+// font-family: 'Inter';
+// font-style: normal;
+// font-weight: 700;
+// src:
+// url("~@/assets/fonts/Inter-Bold.woff2") format("woff2"),
+// url("~@/assets/fonts/Inter-Bold.woff") format("woff"),
+// ;
+// }
+// @font-face {
+// font-family: 'Inter';
+// font-style: italic;
+// font-weight: 700;
+// src:
+// url("~@/assets/fonts/Inter-BoldItalic.woff2") format("woff2"),
+// url("~@/assets/fonts/Inter-BoldItalic.woff") format("woff"),
+// ;
+// }
// @font-face {
// font-family: 'Inter';
// font-style: normal;
// font-weight: 800;
-//
+//
// src: url("~@/assets/fonts/Inter-ExtraBold.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-ExtraBold.woff") format("woff"),
// ;
@@ -144,26 +144,26 @@
// font-family: 'Inter';
// font-style: italic;
// font-weight: 800;
-//
+//
// src: url("~@/assets/fonts/Inter-ExtraBoldItalic.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-ExtraBoldItalic.woff") format("woff"),
// ;
// }
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-weight: 900;
-
- src: url("~@/assets/fonts/Inter-Black.woff2") format("woff2"),
- url("~@/assets/fonts/Inter-Black.woff") format("woff"),
-;
-}
+// @font-face {
+// font-family: 'Inter';
+// font-style: normal;
+// font-weight: 900;
+
+// src: url("~@/assets/fonts/Inter-Black.woff2") format("woff2"),
+// url("~@/assets/fonts/Inter-Black.woff") format("woff"),
+// ;
+// }
// @font-face {
// font-family: 'Inter';
// font-style: italic;
// font-weight: 900;
-//
+//
// src: url("~@/assets/fonts/Inter-BlackItalic.woff2") format("woff2"),
// url("~@/assets/fonts/Inter-BlackItalic.woff") format("woff"),
// ;
diff --git a/docs/src/layouts/App/index.vue b/docs/src/layouts/App/index.vue
index 98580e2b..1c9bf00b 100644
--- a/docs/src/layouts/App/index.vue
+++ b/docs/src/layouts/App/index.vue
@@ -1,5 +1,5 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -86,26 +182,36 @@ query {
import linkGroups from '@/links.yaml'
import Icon from '@/components/Icon'
import PageNavigation from '@/components/PageNavigation'
-import GithubButton from 'vue-github-button'
+// import GithubButton from 'vue-github-button'
export default {
components: {
Icon,
PageNavigation,
- GithubButton,
+ // GithubButton,
},
data() {
return {
linkGroups,
menuIsVisible: false,
+ windowWidth: null,
}
},
computed: {
+ portal() {
+ if (this.windowWidth && this.windowWidth < 800) {
+ return 'mobile-nav'
+ }
+
+ return 'desktop-nav'
+ },
+
currentPath() {
return this.$route.matched[0].path
},
+
editLink() {
const { currentPath } = this
const filePath = currentPath === '' ? '/introduction' : currentPath
@@ -114,20 +220,37 @@ export default {
},
},
+ watch: {
+ $route() {
+ this.menuIsVisible = false
+ },
+ },
+
methods: {
initSearch() {
// eslint-disable-next-line
docsearch({
apiKey: '1abe7fb0f0dac150d0e963d2eda930fe',
indexName: 'ueberdosis_tiptap',
- inputSelector: '.search',
+ inputSelector: '.app__search',
debug: false,
})
},
+
+ handleResize() {
+ this.windowWidth = window.innerWidth
+ },
},
mounted() {
this.initSearch()
+ this.handleResize()
+
+ window.addEventListener('resize', this.handleResize)
+ },
+
+ beforeDestroy() {
+ window.removeEventListener('resize', this.handleResize)
},
}
diff --git a/docs/src/layouts/App/prism.scss b/docs/src/layouts/App/prism.scss
index fddc3f77..e2629c18 100644
--- a/docs/src/layouts/App/prism.scss
+++ b/docs/src/layouts/App/prism.scss
@@ -1,13 +1,4 @@
-$codeBackground: rgba($colorBlack, 0.9);
-$codeText: #eee;
-$codeGrey: #616161;
-$codeRed: #ff6666;
-$codeOrange: #fd9170;
-$colorYellow: #ffcb6b;
-$codeGreen: #b9ea80;
-$codeBlue: #89ddff;
-$codeTeal: #80cbc4;
-$codePurple: #c792ea;
+$codeBackground: $colorBlack;
.prism-editor__textarea {
background: transparent;
@@ -36,14 +27,14 @@ pre[class*="language-"] {
:not(pre) > code[class*="language-"] {
white-space: normal;
- color: $codeText;
+ color: $colorWhite;
background: $codeBackground;
border-radius: 0.2em;
padding: 0.1em;
}
pre > code[class*="language-"] {
- display: inline-block; // TODO: breaks on mobile safari
+ display: block;
min-width: 100%;
background: none;
}
@@ -51,21 +42,17 @@ pre > code[class*="language-"] {
pre[class*="language-"] {
overflow: auto;
position: relative;
- color: $codeText;
+ color: $colorWhite;
background: $codeBackground;
- padding: 1.2rem 1.5rem !important;
+ padding: 1.25rem !important;
border-radius: 0.5rem;
max-height: unquote("max(300px, 60vh)");
-
- &::-webkit-scrollbar-thumb {
- background-color: rgba($colorWhite, 0.25);
- }
}
pre[class*="language-"].language-css > code,
pre[class*="language-"].language-sass > code,
pre[class*="language-"].language-scss > code {
- color: $codeOrange;
+ color: $colorOrange;
}
[class*="language-"] .namespace {
@@ -73,7 +60,7 @@ pre[class*="language-"].language-scss > code {
}
.token.atrule {
- color: $codePurple;
+ color: $colorPurple;
}
.token.attr-name {
@@ -81,15 +68,15 @@ pre[class*="language-"].language-scss > code {
}
.token.attr-value {
- color: $codeGreen;
+ color: $colorGreen;
}
.token.attribute {
- color: $codeGreen;
+ color: $colorGreen;
}
.token.boolean {
- color: $codePurple;
+ color: $colorPurple;
}
.token.builtin {
@@ -97,11 +84,11 @@ pre[class*="language-"].language-scss > code {
}
.token.cdata {
- color: $codeTeal;
+ color: $colorTeal;
}
.token.char {
- color: $codeTeal;
+ color: $colorTeal;
}
.token.class {
@@ -113,27 +100,27 @@ pre[class*="language-"].language-scss > code {
}
.token.comment {
- color: $codeGrey;
+ color: $colorGrey;
}
.token.constant {
- color: $codePurple;
+ color: $colorPurple;
}
.token.deleted {
- color: $codeRed;
+ color: $colorRed;
}
.token.doctype {
- color: $codeGrey;
+ color: $colorGrey;
}
.token.entity {
- color: $codeRed;
+ color: $colorRed;
}
.token.function {
- color: $codePurple;
+ color: $colorPurple;
}
.token.hexcode {
@@ -141,49 +128,49 @@ pre[class*="language-"].language-scss > code {
}
.token.id {
- color: $codePurple;
+ color: $colorPurple;
font-weight: bold;
}
.token.important {
- color: $codePurple;
+ color: $colorPurple;
font-weight: bold;
}
.token.inserted {
- color: $codeTeal;
+ color: $colorTeal;
}
.token.keyword {
- color: $codePurple;
+ color: $colorPurple;
}
.token.number {
- color: $codeOrange;
+ color: $colorOrange;
}
.token.operator {
- color: $codeBlue;
+ color: $colorBlue;
}
.token.prolog {
- color: $codeGrey;
+ color: $colorGrey;
}
.token.property {
- color: $codeTeal;
+ color: $colorTeal;
}
.token.pseudo-class {
- color: $codeGreen;
+ color: $colorGreen;
}
.token.pseudo-element {
- color: $codeGreen;
+ color: $colorGreen;
}
.token.punctuation {
- color: $codeBlue;
+ color: $colorBlue;
}
.token.regex {
@@ -191,35 +178,39 @@ pre[class*="language-"].language-scss > code {
}
.token.selector {
- color: $codeRed;
+ color: $colorRed;
}
.token.string {
- color: $codeGreen;
+ color: $colorGreen;
}
.token.symbol {
- color: $codePurple;
+ color: $colorPurple;
}
.token.tag {
- color: $codeRed;
+ color: $colorRed;
}
.token.unit {
- color: $codeOrange;
+ color: $colorOrange;
}
.token.url {
- color: $codeRed;
+ color: $colorRed;
}
.token.variable {
- color: $codeRed;
+ color: $colorRed;
}
.line-highlight {
- background: rgba($colorWhite, 0.1) !important;
+ background: linear-gradient(
+ to right,
+ rgba($colorWhite, 0.1),
+ rgba($colorWhite, 0),
+ ) !important;
left: -1.5rem !important;
right: -1.5rem !important;
margin: 0 !important;
diff --git a/docs/src/layouts/App/style.scss b/docs/src/layouts/App/style.scss
index 4af9e903..2c224389 100644
--- a/docs/src/layouts/App/style.scss
+++ b/docs/src/layouts/App/style.scss
@@ -1,18 +1,141 @@
$navHeight: 4.5rem;
-$menuBreakPoint: 750px;
+$mobileBreakPoint: 600px;
+$menuBreakPoint: 800px;
.app {
display: flex;
- flex-direction: column;
- min-height: 100%;
- &__logo {
- font-weight: 700;
- font-size: 1.4rem;
+ &__title {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 2rem;
+ }
+
+ &__name {
+ font-weight: 600;
+ color: $colorWhite;
+ font-size: 1.5rem;
+ }
+
+ &__github {
+ width: 1.75rem;
+ height: 1.75rem;
+ }
+
+ ::v-deep .algolia-autocomplete {
+ display: block;
+ width: 100%;
+ }
+
+ &__search {
+ display: block;
+ width: 100%;
+ background-color: transparent;
+ border: 1px solid rgba($colorWhite, 0.1);
+ border-radius: 0.5rem;
+ font: inherit;
+ color: $colorWhite;
+ padding: 0.5rem 0.75rem;
+ -webkit-appearance: none;
+ }
+
+ &__sidebar {
+ display: none;
+
+ @media (min-width: $menuBreakPoint) {
+ display: block;
+ width: 20rem;
+ flex: 0 0 auto;
+ position: sticky;
+ top: 0;
+ align-self: flex-start;
+ padding: 2rem;
+ height: 100vh;
+ overflow-x: hidden;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ overscroll-behavior: contain;
+ border-right: 1px solid rgba($colorWhite, 0.1);
+ }
+ }
+
+ &__content {
+ flex: 1 1 auto;
+ min-width: 0;
+ }
+
+ &__top-bar {
+ display: flex;
+ flex-direction: column;
+ padding: 1rem 0;
+ position: sticky;
+ z-index: 2;
+ top: 0;
+ backdrop-filter: blur(10px);
+ max-height: 100vh;
+
+ @media (min-width: $menuBreakPoint) {
+ padding: 1.5rem 0;
+ }
+
+ &::after {
+ content: '';
+ z-index: -1;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: $colorBlack;
+ opacity: 0.8;
+ transform: translate3d(0,0,0);
+ pointer-events: none;
+ }
+ }
+
+ &__top-bar-inner {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ flex: 0 0 auto;
+ }
+
+ &__menu-icon,
+ &__close-icon {
+ display: flex;
+ flex: 0 0 auto;
+ background: transparent;
+ border: 0;
+ color: $colorText;
+ margin-left: 1rem;
+ transition: color 0.2s $ease;
+
+ &:hover {
+ color: $colorWhite;
+ }
+
+ @media (min-width: $menuBreakPoint) {
+ display: none;
+ }
+ }
+
+ &__inner {
+ margin: 0 auto;
+ max-width: 50rem;
+ padding: 0 1rem;
+
+ @media (min-width: $mobileBreakPoint) {
+ padding: 0 2rem;
+ }
}
&__link-group {
- margin-bottom: 2rem;
+ margin-bottom: 1rem;
+
+ @media (min-width: $mobileBreakPoint) {
+ margin-bottom: 2rem;
+ }
}
&__link-group-title {
@@ -20,16 +143,18 @@ $menuBreakPoint: 750px;
letter-spacing: 0.025rem;
font-size: 0.75rem;
text-transform: uppercase;
- color: rgba($colorBlack, 0.3);
+ color: rgba($colorWhite, 0.3);
margin-bottom: 0.5rem;
}
+ &__link-list {
+ list-style: none;
+ }
+
&__link-list &__link-list {
display: none;
padding-left: 1rem;
margin-top: 0.5rem;
- margin-bottom: 1.5rem;
- border-left: 2px solid rgba($colorBlack, 0.1);
}
.active + &__link-list {
@@ -37,137 +162,55 @@ $menuBreakPoint: 750px;
}
&__link {
- display: block;
- padding: 0.1rem 0.5rem;
+ display: flex;
+ justify-content: space-between;
+ padding: 0.25rem 0.5rem;
border-radius: 5px;
- font-weight: 500;
- color: rgba($colorBlack, 0.6);
- margin-bottom: 0.2rem;
+ font-size: 0.85rem;
margin-left: -0.5rem;
+ white-space: nowrap;
&:hover {
- color: $colorBlack;
+ color: $colorWhite;
}
- &.active {
- color: $colorBlack;
- background-color: rgba($colorBlack, 0.05);
+ &.active--exact {
+ color: $colorWhite;
+ background-color: rgba($colorWhite, 0.05);
}
&--draft {
- color: rgba($colorBlack, 0.2);
+ color: rgba($colorWhite, 0.2);
}
&--with-children::after {
- content: '→';
- color: rgba($colorBlack, 0.2);
+ content: '↓';
+ color: rgba($colorWhite, 0.2);
}
}
- &__header {
- align-self: center;
- position: fixed;
- top: 0;
- z-index: 2;
- display: flex;
- align-items: center;
- justify-content: center;
- width: 100%;
- height: $navHeight;
- flex: 0 0 auto;
- background-color: rgba($colorBackground, 0.8);
- border-bottom: 1px solid rgba($colorBlack, 0.05);
- backdrop-filter: blur(10px);
- }
-
- &__header-inner {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- max-width: 62rem;
- margin: 0 auto;
- padding: 0 1rem;
-
- @media (min-width: $menuBreakPoint) {
- padding: 0 2rem;
- }
- }
-
- &__content {
- position: relative;
- z-index: 1;
- flex: 1 1 auto;
- display: flex;
- width: 100%;
- max-width: 62rem;
- margin: 0 auto;
- padding-left: 1rem;
- padding-right: 1rem;
-
- @media (min-width: $menuBreakPoint) {
- padding-left: 2rem;
- padding-right: 2rem;
- }
- }
-
- &__menu-icon,
- &__close-icon {
- border: none;
- padding: 0;
- background-color: transparent;
- margin-left: 1rem;
-
- @media (min-width: $menuBreakPoint) {
- display: none;
- }
- }
-
- &__sidebar-wrapper {
- position: fixed;
- z-index: 2;
- top: $navHeight;
- bottom: 0;
- left: 0;
- right: 0;
- background-color: $colorBackground;
- padding-left: 1rem;
- padding-right: 1rem;
- visibility: hidden;
- opacity: 0;
-
- &.is-mobile-visible {
- visibility: visible;
- opacity: 1;
- }
-
- @media (min-width: $menuBreakPoint) {
- visibility: visible;
- opacity: 1;
- position: sticky;
- flex: 0 0 auto;
- align-self: flex-start;
- top: 0;
- width: 18rem;
- height: 100vh;
- padding-left: 0;
- padding-right: 0;
- padding-right: 3rem;
- padding-top: $navHeight;
- }
- }
-
- &__sidebar {
- overflow: auto;
- height: 100%;
- padding-top: 2rem;
- padding-left: 0.5rem;
- margin-left: -0.5rem;
- }
-
&__main {
+ padding: 1rem 0;
+
+ @media (min-width: $mobileBreakPoint) {
+ padding: 2rem 0;
+ }
+ }
+
+ &__page-navigation {
+ border-top: 1px solid rgba($colorWhite, 0.1);
+ }
+
+ &__mobile-nav {
+ padding: 1rem;
flex: 1 1 auto;
- min-width: 0;
- padding-top: $navHeight + 2rem;
+ overflow-x: hidden;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ overscroll-behavior: contain;
+
+ @media (min-width: $mobileBreakPoint) {
+ padding: 2rem;
+ }
}
}
diff --git a/docs/src/links.yaml b/docs/src/links.yaml
index 0b6a08c8..c30b91e3 100644
--- a/docs/src/links.yaml
+++ b/docs/src/links.yaml
@@ -56,8 +56,8 @@
# - title: Placeholder
# link: /examples/placeholder
# draft: true
- # - title: Focus
- # link: /examples/focus
+ - title: Focus
+ link: /examples/focus
# - title: Title
# link: /examples/title
# draft: true
@@ -87,12 +87,12 @@
link: /guide/store-content
- title: Custom extensions
link: /guide/custom-extensions
- - title: Use Vue Components
- link: /guide/use-vue-components
- draft: true
- # - title: Collaborative editing
+ # - title: Use Vue Components
# link: /guide/use-vue-components
# draft: true
+ - title: Collaborative editing
+ link: /guide/collaborative-editing
+ draft: true
- title: API
items:
@@ -134,6 +134,9 @@
link: /api/extensions/history
- title: HorizontalRule
link: /api/extensions/horizontal-rule
+ - title: Image
+ link: /api/extensions/image
+ draft: true
- title: Italic
link: /api/extensions/italic
- title: Link
@@ -163,6 +166,9 @@
# draft: true
- title: Text
link: /api/extensions/text
+ - title: Text Align
+ link: /api/extensions/text-align
+ draft: true
# - title: TodoItem
# link: /api/extensions/todo-item
# draft: true
diff --git a/docs/src/main.js b/docs/src/main.js
index e069efd6..99476dbe 100644
--- a/docs/src/main.js
+++ b/docs/src/main.js
@@ -2,9 +2,11 @@
import Prism from 'prismjs'
import 'prismjs/components/prism-jsx.js'
import 'prismjs/components/prism-scss.js'
+import PortalVue from 'portal-vue'
import App from '~/layouts/App'
export default function (Vue) {
+ Vue.use(PortalVue)
Vue.component('Layout', App)
Vue.component('Demo', () => import(/* webpackChunkName: "demo" */ '~/components/Demo'))
Vue.component('LiveDemo', () => import(/* webpackChunkName: "live-demo" */ '~/components/LiveDemo'))
diff --git a/docs/src/templates/DocPage/style.scss b/docs/src/templates/DocPage/style.scss
index f298c8e7..b08a90f8 100644
--- a/docs/src/templates/DocPage/style.scss
+++ b/docs/src/templates/DocPage/style.scss
@@ -1,42 +1,60 @@
.doc-page {
&__markdown ::v-deep {
+ $spacing: 0.75em;
- a {
- text-decoration: underline;
+ > div,
+ > p,
+ > ul,
+ > ol,
+ > blockquote {
+ margin-top: 2 * $spacing;
+ margin-bottom: 2 * $spacing;
}
- h1,
- h2,
- h3,
- h4,
- h5,
- h6 {
- position: relative;
+ > ul li,
+ > ol li,
+ > ul ul,
+ > ul ol,
+ > ol ol,
+ > ol ul {
+ margin-top: 0.5 * $spacing;
+ margin-bottom: 0.5 * $spacing;
+ }
+
+ > h1,
+ > h2,
+ > h3,
+ > h4,
+ > h5,
+ > h6 {
font-weight: 500;
+ color: $colorWhite;
+ margin-top: 3 * $spacing;
+ margin-bottom: $spacing;
+
+ & + * {
+ margin-top: 0;
+ }
}
- h1 {
- font-weight: 400;
- }
-
- h1,
- h4,
- h5,
- h6 {
+ > h1,
+ > h4,
+ > h5,
+ > h6 {
a {
display: none;
}
}
- h2,
- h3 {
+ > h2,
+ > h3 {
position: relative;
a {
position: absolute;
top: 0;
right: 100%;
- color: rgba($colorBlack, 0.4);
+ color: rgba($colorWhite, 0.4);
text-decoration: none;
font-weight: 400;
padding-right: 0.5rem;
@@ -49,16 +67,75 @@
}
}
- > * + * {
- margin-top: 1.5em;
+ :first-child {
+ margin-top: 0;
}
- ul {
- list-style-type: none;
+ :last-child {
+ margin-bottom: 0;
+ }
- > * + * {
- margin-top: 0.5rem;
+ > pre {
+ border: 1px solid rgba($colorWhite, 0.1);
+ }
+
+ > p code,
+ > li code,
+ > table code,
+ > .remark-container code {
+ color: $colorPurple;
+ background-color: rgba($colorPurple, 0.1);
+ box-decoration-break: clone;
+ }
+
+ > p a,
+ > li a,
+ > table a,
+ > .remark-container a {
+ text-decoration: underline;
+ }
+
+ #table-of-contents {
+ display: none;
+
+ & + ul {
+ list-style: none;
+ border: 1px solid rgba($colorWhite, 0.1);
+ padding: 1.25rem !important;
+ border-radius: 0.5rem;
+
+ &::before {
+ display: block;
+ content: 'On this page';
+ font-weight: 700;
+ letter-spacing: 0.025rem;
+ font-size: 0.75rem;
+ text-transform: uppercase;
+ color: rgba($colorWhite, 0.3);
+ margin-bottom: 0.5rem;
+ }
+
+ li {
+ padding-left: 0;
+
+ &::before {
+ display: none;
+ }
+
+ ul {
+ list-style: none;
+ margin-left: 1rem;
+ }
+ }
}
+ }
+
+ p a img[src^="https://img.shields.io"] {
+ margin-right: 0.5rem;
+ }
+
+ > ul {
+ list-style: none;
li {
position: relative;
@@ -75,13 +152,9 @@
}
}
- ol {
+ > ol {
counter-reset: item;
- > * + * {
- margin-top: 0.5rem;
- }
-
li {
position: relative;
padding-left: 2.5rem;
@@ -96,9 +169,9 @@
justify-content: center;
height: 1.5rem;
width: 1.5rem;
- background-color: rgba($colorBlack, 0.1);
+ background-color: rgba($colorWhite, 0.1);
border-radius: 9999px;
- color: rgba($colorBlack, 0.4);
+ color: rgba($colorWhite, 0.4);
font-size: 0.75rem;
font-weight: 700;
content: counter(item);
@@ -107,20 +180,29 @@
}
}
- table {
+ > table {
width: 100%;
border-collapse: collapse;
+ font-size: 0.85rem;
+ text-align: left;
th,
td {
- text-align: left;
- font-size: 0.75rem;
padding: 0.5rem;
+
+ &:first-child {
+ padding-left: 0;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
}
th {
- font-weight: 600;
- background-color: rgba($colorBlack, 0.05);
+ color: $colorWhite;
+ font-weight: 500;
+ border-bottom: 1px solid rgba($colorWhite, 0.2);
&:first-child {
border-top-left-radius: 5px;
@@ -134,7 +216,7 @@
}
td {
- border-bottom: 1px solid rgba($colorBlack, 0.05);
+ border-bottom: 1px solid rgba($colorWhite, 0.1);
}
tr:last-child td {
@@ -142,21 +224,27 @@
}
}
- .remark-container {
- padding: 1rem;
- border: 2px solid rgba($colorBlack, 0.1);
- border-radius: 0.25rem;
+ > .remark-container {
+ padding: 1.25rem;
+ border: 1px solid rgba($colorWhite, 0.1);
+ border-radius: 0.5rem;
&.warning {
- border-color:#ffd8a8;
- background-color: #fff4e6;
- color: #ca9c63;
+ border-color: rgba($colorYellow, 0.1);
+ background-color: rgba($colorYellow, 0.1);
+ color: $colorYellow;
}
&.info {
- border-color:#a5d8ff;
- background-color: #e7f5ff;
- color: #228be6;
+ border-color: rgba($colorBlue, 0.1);
+ background-color: rgba($colorBlue, 0.1);
+ color: $colorBlue;
+ }
+
+ &.error {
+ border-color: rgba($colorRed, 0.1);
+ background-color: rgba($colorRed, 0.1);
+ color: $colorRed;
}
.remark-container-title {
@@ -165,4 +253,4 @@
}
}
-}
\ No newline at end of file
+}
diff --git a/docs/src/variables.scss b/docs/src/variables.scss
index 42d5f433..27db5a61 100644
--- a/docs/src/variables.scss
+++ b/docs/src/variables.scss
@@ -1,7 +1,14 @@
$colorWhite: #FFF;
-$colorBlack: #000;
-$colorRed: #fa5252;
-$colorBackground: mix($colorBlack, $colorWhite, 2%);
+$colorBlack: #0D0D0D;
+$colorText: rgba($colorWhite, 0.75);
+$colorGrey: #616161;
+$colorPurple: #A975FF;
+$colorRed: #FB5151;
+$colorOrange: #fd9170;
+$colorYellow: #FFCB6B;
+$colorBlue: #68CEF8;
+$colorTeal: #80cbc4;
+$colorGreen: #9DEF8F;
/* Default Equations */
$linear: cubic-bezier(0.250, 0.250, 0.750, 0.750);
@@ -36,4 +43,4 @@ $easeInOutQuint: cubic-bezier(0.860, 0.000, 0.070, 1.000);
$easeInOutSine: cubic-bezier(0.445, 0.050, 0.550, 0.950);
$easeInOutExpo: cubic-bezier(1.000, 0.000, 0.000, 1.000);
$easeInOutCirc: cubic-bezier(0.785, 0.135, 0.150, 0.860);
-$easeInOutBack: cubic-bezier(0.680, -0.550, 0.265, 1.550);
\ No newline at end of file
+$easeInOutBack: cubic-bezier(0.680, -0.550, 0.265, 1.550);
diff --git a/package.json b/package.json
index 49d85b55..fe3a59d4 100644
--- a/package.json
+++ b/package.json
@@ -32,20 +32,20 @@
"@types/prosemirror-model": "^1.7.4",
"@types/prosemirror-state": "^1.2.5",
"@types/prosemirror-transform": "^1.1.1",
- "@types/prosemirror-view": "^1.15.0",
- "@typescript-eslint/eslint-plugin": "^4.3.0",
- "@typescript-eslint/parser": "^4.3.0",
- "cypress": "^5.3.0",
- "eslint": "^7.10.0",
+ "@types/prosemirror-view": "^1.16.0",
+ "@typescript-eslint/eslint-plugin": "^4.6.0",
+ "@typescript-eslint/parser": "^4.6.0",
+ "cypress": "^5.5.0",
+ "eslint": "^7.12.1",
"eslint-config-airbnb-base": "^14.2.0",
"eslint-plugin-cypress": "^2.11.2",
"eslint-plugin-html": "^6.1.0",
"eslint-plugin-import": "^2.22.1",
- "eslint-plugin-vue": "^7.0.0",
+ "eslint-plugin-vue": "^7.0.1",
"lerna": "^3.22.1",
"microbundle": "^0.12.4",
"typedoc": "^0.19.2",
- "typescript": "^4.0.3",
+ "typescript": "^4.0.5",
"vue": "^2.6.12"
}
}
diff --git a/packages/core/index.ts b/packages/core/index.ts
index eb825360..1eb42fff 100644
--- a/packages/core/index.ts
+++ b/packages/core/index.ts
@@ -3,10 +3,11 @@ import { Editor, Command, CommandsSpec } from './src/Editor'
export default Editor
export { Editor, Command, CommandsSpec }
export { default as ComponentRenderer } from './src/ComponentRenderer'
-export { default as Extension } from './src/Extension'
-export { default as Node } from './src/Node'
-export { default as Mark } from './src/Mark'
-export { Extensions } from './src/types'
+
+export * from './src/Extension'
+export * from './src/NodeExtension'
+export * from './src/MarkExtension'
+export * from './src/types'
export { default as nodeInputRule } from './src/inputRules/nodeInputRule'
export { default as markInputRule } from './src/inputRules/markInputRule'
@@ -16,7 +17,5 @@ export { default as capitalize } from './src/utils/capitalize'
export { default as getSchema } from './src/utils/getSchema'
export { default as generateHtml } from './src/utils/generateHtml'
export { default as getHtmlFromFragment } from './src/utils/getHtmlFromFragment'
-export { default as getTopNodeFromExtensions } from './src/utils/getTopNodeFromExtensions'
-export { default as getNodesFromExtensions } from './src/utils/getNodesFromExtensions'
-export { default as getMarksFromExtensions } from './src/utils/getMarksFromExtensions'
export { default as getMarkAttrs } from './src/utils/getMarkAttrs'
+export { default as mergeAttributes } from './src/utils/mergeAttributes'
diff --git a/packages/core/package.json b/packages/core/package.json
index 9adb3c96..4044ffe3 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -12,24 +12,20 @@
"dist"
],
"dependencies": {
- "@types/clone-deep": "^4.0.1",
"@types/prosemirror-dropcursor": "^1.0.0",
"@types/prosemirror-gapcursor": "^1.0.1",
"@types/prosemirror-schema-list": "^1.0.1",
- "clone-deep": "^4.0.1",
- "collect.js": "^4.28.2",
- "deepmerge": "^4.2.2",
"prosemirror-commands": "^1.1.3",
"prosemirror-dropcursor": "^1.3.2",
"prosemirror-gapcursor": "^1.1.5",
"prosemirror-inputrules": "^1.1.3",
"prosemirror-keymap": "^1.1.3",
- "prosemirror-model": "^1.11.2",
+ "prosemirror-model": "^1.12.0",
"prosemirror-schema-list": "^1.1.4",
"prosemirror-state": "^1.3.3",
"prosemirror-tables": "^1.1.1",
- "prosemirror-utils": "^0.9.6",
- "prosemirror-view": "^1.16.0"
+ "prosemirror-utils": "^1.0.0-0",
+ "prosemirror-view": "^1.16.1"
},
"scripts": {
"build": "microbundle"
diff --git a/packages/core/src/Editor.ts b/packages/core/src/Editor.ts
index d9ee686a..67fc2d4e 100644
--- a/packages/core/src/Editor.ts
+++ b/packages/core/src/Editor.ts
@@ -8,17 +8,15 @@ import markIsActive from './utils/markIsActive'
import getNodeAttrs from './utils/getNodeAttrs'
import getMarkAttrs from './utils/getMarkAttrs'
import removeElement from './utils/removeElement'
-import getSchemaTypeByName from './utils/getSchemaTypeByName'
+import getSchemaTypeNameByName from './utils/getSchemaTypeNameByName'
import getHtmlFromFragment from './utils/getHtmlFromFragment'
import createStyleTag from './utils/createStyleTag'
import CommandManager from './CommandManager'
import ExtensionManager from './ExtensionManager'
import EventEmitter from './EventEmitter'
-import Extension from './Extension'
-import Node from './Node'
-import Mark from './Mark'
+import { Extensions, UnionToIntersection, PickValue } from './types'
import defaultPlugins from './plugins'
-import * as coreCommands from './commands'
+import * as extensions from './extensions'
import style from './style'
export type Command = (props: {
@@ -37,19 +35,19 @@ export interface CommandsSpec {
[key: string]: CommandSpec
}
-export interface Commands {}
+export interface AllExtensions {}
-export type CommandNames = Extract
+export type AllCommands = UnionToIntersection, 'addCommands'>>>
export type SingleCommands = {
- [Item in keyof Commands]: Commands[Item] extends (...args: any[]) => any
- ? (...args: Parameters) => boolean
+ [Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any
+ ? (...args: Parameters) => boolean
: never
}
export type ChainedCommands = {
- [Item in keyof Commands]: Commands[Item] extends (...args: any[]) => any
- ? (...args: Parameters) => ChainedCommands
+ [Item in keyof AllCommands]: AllCommands[Item] extends (...args: any[]) => any
+ ? (...args: Parameters) => ChainedCommands
: never
} & {
run: () => boolean
@@ -64,7 +62,7 @@ interface HTMLElement {
interface EditorOptions {
element: Element,
content: EditorContent,
- extensions: (Extension | Node | Mark)[],
+ extensions: Extensions,
injectCSS: boolean,
autoFocus: 'start' | 'end' | number | boolean | null,
editable: boolean,
@@ -117,12 +115,11 @@ export class Editor extends EventEmitter {
this.createCommandManager()
this.createExtensionManager()
this.createSchema()
- this.extensionManager.resolveConfigs()
this.createView()
- this.registerCommands(coreCommands)
+ // this.registerCommands(coreCommands)
this.injectCSS()
- this.proxy.focus(this.options.autoFocus)
+ window.setTimeout(() => this.proxy.focus(this.options.autoFocus), 0)
}
/**
@@ -235,7 +232,10 @@ export class Editor extends EventEmitter {
* Creates an extension manager.
*/
private createExtensionManager() {
- this.extensionManager = new ExtensionManager(this.options.extensions, this.proxy)
+ const coreExtensions = Object.entries(extensions).map(([, extension]) => extension())
+ const allExtensions = [...coreExtensions, ...this.options.extensions]
+
+ this.extensionManager = new ExtensionManager(allExtensions, this.proxy)
}
/**
@@ -346,7 +346,7 @@ export class Editor extends EventEmitter {
* @param attrs Attributes of the node or mark
*/
public isActive(name: string, attrs = {}) {
- const schemaType = getSchemaTypeByName(name, this.schema)
+ const schemaType = getSchemaTypeNameByName(name, this.schema)
if (schemaType === 'node') {
return nodeIsActive(this.state, this.schema.nodes[name], attrs)
@@ -376,17 +376,24 @@ export class Editor extends EventEmitter {
/**
* Get the document as JSON.
*/
- public json() {
+ public getJSON() {
return this.state.doc.toJSON()
}
/**
* Get the document as HTML.
*/
- public html() {
+ public getHTML() {
return getHtmlFromFragment(this.state.doc, this.schema)
}
+ /**
+ * Check if there is no content.
+ */
+ public isEmpty() {
+ return !this.state.doc.textContent.length
+ }
+
/**
* Destroy the editor.
*/
diff --git a/packages/core/src/Extension.ts b/packages/core/src/Extension.ts
index ff114e52..bcd91541 100644
--- a/packages/core/src/Extension.ts
+++ b/packages/core/src/Extension.ts
@@ -1,114 +1,113 @@
-import cloneDeep from 'clone-deep'
import { Plugin } from 'prosemirror-state'
-import { Editor, CommandsSpec } from './Editor'
+import { Editor } from './Editor'
+import { GlobalAttributes } from './types'
-type AnyObject = {
- [key: string]: any
+export interface ExtensionSpec {
+ /**
+ * Name
+ */
+ name?: string,
+
+ /**
+ * Default options
+ */
+ defaultOptions?: Options,
+
+ /**
+ * Global attributes
+ */
+ addGlobalAttributes?: (this: {
+ options: Options,
+ }) => GlobalAttributes,
+
+ /**
+ * Commands
+ */
+ addCommands?: (this: {
+ options: Options,
+ editor: Editor,
+ }) => Commands,
+
+ /**
+ * Keyboard shortcuts
+ */
+ addKeyboardShortcuts?: (this: {
+ options: Options,
+ editor: Editor,
+ }) => {
+ [key: string]: any
+ },
+
+ /**
+ * Input rules
+ */
+ addInputRules?: (this: {
+ options: Options,
+ editor: Editor,
+ }) => any[],
+
+ /**
+ * Paste rules
+ */
+ addPasteRules?: (this: {
+ options: Options,
+ editor: Editor,
+ }) => any[],
+
+ /**
+ * ProseMirror plugins
+ */
+ addProseMirrorPlugins?: (this: {
+ options: Options,
+ editor: Editor,
+ }) => Plugin[],
}
-type NoInfer = [T][T extends any ? 0 : never]
+/**
+ * Extension interface for internal usage
+ */
+export type Extension = Required & {
+ type: string,
+ options: {
+ [key: string]: any
+ },
+}>
-type MergeStrategy = 'extend' | 'overwrite'
-
-type Configs = {
- [key: string]: {
- stategy: MergeStrategy
- value: any
- }[]
+/**
+ * Default extension
+ */
+export const defaultExtension: Extension = {
+ name: 'extension',
+ type: 'extension',
+ options: {},
+ addGlobalAttributes: () => [],
+ addCommands: () => ({}),
+ addKeyboardShortcuts: () => ({}),
+ addInputRules: () => [],
+ addPasteRules: () => [],
+ addProseMirrorPlugins: () => [],
}
-export interface ExtensionProps {
- name: string
- editor: Editor
- options: Options
-}
-
-export interface ExtensionMethods {
- name: string
- options: Options
- commands: (params: Props) => CommandsSpec
- inputRules: (params: Props) => any[]
- pasteRules: (params: Props) => any[]
- keys: (params: Props) => {
- [key: string]: Function
+export function createExtension(config: ExtensionSpec) {
+ const extend = (extendedConfig: Partial>) => {
+ return createExtension({
+ ...config,
+ ...extendedConfig,
+ } as ExtensionSpec)
}
- plugins: (params: Props) => Plugin[]
-}
-export default class Extension<
- Options = {},
- Props = ExtensionProps,
- Methods extends ExtensionMethods = ExtensionMethods,
-> {
- type = 'extension'
+ const setOptions = (options?: Partial) => {
+ const { defaultOptions, ...rest } = config
- config: AnyObject = {}
-
- configs: Configs = {}
-
- options: Partial = {}
-
- protected storeConfig(key: string, value: any, stategy: MergeStrategy) {
- const item = {
- stategy,
- value,
- }
-
- if (this.configs[key]) {
- this.configs[key].push(item)
- } else {
- this.configs[key] = [item]
+ return {
+ ...defaultExtension,
+ ...rest,
+ options: {
+ ...defaultOptions,
+ ...options,
+ } as Options,
}
}
- public configure(options: Partial) {
- this.options = { ...this.options, ...options }
- return this
- }
-
- public name(value: Methods['name']) {
- this.storeConfig('name', value, 'overwrite')
- return this
- }
-
- public defaults(value: Options) {
- this.storeConfig('defaults', value, 'overwrite')
- return this
- }
-
- public commands(value: Methods['commands']) {
- this.storeConfig('commands', value, 'overwrite')
- return this
- }
-
- public keys(value: Methods['keys']) {
- this.storeConfig('keys', value, 'overwrite')
- return this
- }
-
- public inputRules(value: Methods['inputRules']) {
- this.storeConfig('inputRules', value, 'overwrite')
- return this
- }
-
- public pasteRules(value: Methods['pasteRules']) {
- this.storeConfig('pasteRules', value, 'overwrite')
- return this
- }
-
- public plugins(value: Methods['plugins']) {
- this.storeConfig('plugins', value, 'overwrite')
- return this
- }
-
- public extend>(key: T, value: Methods[T]) {
- this.storeConfig(key, value, 'extend')
- return this
- }
-
- public create() {
- return (options?: Partial>) => {
- return cloneDeep(this, true).configure(options as NewOptions)
- }
- }
+ return Object.assign(setOptions, { config, extend })
}
diff --git a/packages/core/src/ExtensionManager.ts b/packages/core/src/ExtensionManager.ts
index cf6d15b2..2da65cd5 100644
--- a/packages/core/src/ExtensionManager.ts
+++ b/packages/core/src/ExtensionManager.ts
@@ -1,86 +1,53 @@
-import collect from 'collect.js'
import { Plugin } from 'prosemirror-state'
import { keymap } from 'prosemirror-keymap'
-import { Schema } from 'prosemirror-model'
// import { Schema, Node as ProsemirrorNode } from 'prosemirror-model'
import { inputRules } from 'prosemirror-inputrules'
// import { EditorView, Decoration } from 'prosemirror-view'
-
+import { Schema } from 'prosemirror-model'
import { Editor } from './Editor'
// import capitalize from './utils/capitalize'
import { Extensions } from './types'
-import getTopNodeFromExtensions from './utils/getTopNodeFromExtensions'
-import getNodesFromExtensions from './utils/getNodesFromExtensions'
-import getMarksFromExtensions from './utils/getMarksFromExtensions'
-import resolveExtensionConfig from './utils/resolveExtensionConfig'
import getSchema from './utils/getSchema'
+import getSchemaTypeByName from './utils/getSchemaTypeByName'
export default class ExtensionManager {
editor: Editor
+ schema: Schema
+
extensions: Extensions
constructor(extensions: Extensions, editor: Editor) {
this.editor = editor
this.extensions = extensions
- }
+ this.schema = getSchema(this.extensions)
- resolveConfigs() {
this.extensions.forEach(extension => {
- const { editor } = this
- const { name } = extension.config
- const options = {
- ...extension.config.defaults,
- ...extension.options,
+ const context = {
+ options: extension.options,
+ editor: this.editor,
+ type: getSchemaTypeByName(extension.name, this.schema),
}
- const type = extension.type === 'node'
- ? editor.schema.nodes[name]
- : editor.schema.marks[name]
- resolveExtensionConfig(extension, 'commands', {
- name, options, editor, type,
- })
- resolveExtensionConfig(extension, 'inputRules', {
- name, options, editor, type,
- })
- resolveExtensionConfig(extension, 'pasteRules', {
- name, options, editor, type,
- })
- resolveExtensionConfig(extension, 'keys', {
- name, options, editor, type,
- })
- resolveExtensionConfig(extension, 'plugins', {
- name, options, editor, type,
- })
+ const commands = extension.addCommands.bind(context)()
- if (extension.config.commands) {
- editor.registerCommands(extension.config.commands)
- }
+ editor.registerCommands(commands)
})
}
- get schema(): Schema {
- return getSchema(this.extensions)
- }
-
- get topNode(): any {
- return getTopNodeFromExtensions(this.extensions)
- }
-
- get nodes(): any {
- return getNodesFromExtensions(this.extensions)
- }
-
- get marks(): any {
- return getMarksFromExtensions(this.extensions)
- }
-
get plugins(): Plugin[] {
- const plugins = collect(this.extensions)
- .flatMap(extension => extension.config.plugins)
- .filter(plugin => plugin)
- .toArray()
+ const plugins = this.extensions
+ .map(extension => {
+ const context = {
+ options: extension.options,
+ editor: this.editor,
+ type: getSchemaTypeByName(extension.name, this.schema),
+ }
+
+ return extension.addProseMirrorPlugins.bind(context)()
+ })
+ .flat()
return [
...plugins,
@@ -91,25 +58,43 @@ export default class ExtensionManager {
}
get inputRules(): any {
- return collect(this.extensions)
- .flatMap(extension => extension.config.inputRules)
- .filter(plugin => plugin)
- .toArray()
+ return this.extensions
+ .map(extension => {
+ const context = {
+ options: extension.options,
+ editor: this.editor,
+ type: getSchemaTypeByName(extension.name, this.schema),
+ }
+
+ return extension.addInputRules.bind(context)()
+ })
+ .flat()
}
get pasteRules(): any {
- return collect(this.extensions)
- .flatMap(extension => extension.config.pasteRules)
- .filter(plugin => plugin)
- .toArray()
+ return this.extensions
+ .map(extension => {
+ const context = {
+ options: extension.options,
+ editor: this.editor,
+ type: getSchemaTypeByName(extension.name, this.schema),
+ }
+
+ return extension.addPasteRules.bind(context)()
+ })
+ .flat()
}
get keymaps() {
- return collect(this.extensions)
- .map(extension => extension.config.keys)
- .filter(keys => keys)
- .map(keys => keymap(keys))
- .toArray()
+ return this.extensions.map(extension => {
+ const context = {
+ options: extension.options,
+ editor: this.editor,
+ type: getSchemaTypeByName(extension.name, this.schema),
+ }
+
+ return keymap(extension.addKeyboardShortcuts.bind(context)())
+ })
}
get nodeViews() {
diff --git a/packages/core/src/Mark.ts b/packages/core/src/Mark.ts
deleted file mode 100644
index b15329e2..00000000
--- a/packages/core/src/Mark.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { MarkSpec, MarkType } from 'prosemirror-model'
-import Extension, { ExtensionMethods } from './Extension'
-import { Editor } from './Editor'
-
-export interface MarkProps {
- name: string
- editor: Editor
- options: Options
- type: MarkType
-}
-
-export interface MarkMethods extends ExtensionMethods {
- topMark: boolean
- schema: (params: Omit) => MarkSpec
-}
-
-export default class Mark<
- Options = {},
- Props = MarkProps,
- Methods extends MarkMethods = MarkMethods,
-> extends Extension {
- type = 'mark'
-
- public schema(value: Methods['schema']) {
- this.storeConfig('schema', value, 'overwrite')
- return this
- }
-}
diff --git a/packages/core/src/MarkExtension.ts b/packages/core/src/MarkExtension.ts
new file mode 100644
index 00000000..4627b681
--- /dev/null
+++ b/packages/core/src/MarkExtension.ts
@@ -0,0 +1,151 @@
+import {
+ DOMOutputSpec, MarkSpec, Mark, MarkType,
+} from 'prosemirror-model'
+import { Plugin } from 'prosemirror-state'
+import { ExtensionSpec, defaultExtension } from './Extension'
+import { Attributes, Overwrite } from './types'
+import { Editor } from './Editor'
+
+export interface MarkExtensionSpec extends Overwrite, {
+ /**
+ * Inclusive
+ */
+ inclusive?: MarkSpec['inclusive'],
+
+ /**
+ * Excludes
+ */
+ excludes?: MarkSpec['excludes'],
+
+ /**
+ * Group
+ */
+ group?: MarkSpec['group'],
+
+ /**
+ * Spanning
+ */
+ spanning?: MarkSpec['spanning'],
+
+ /**
+ * Parse HTML
+ */
+ parseHTML?: (
+ this: {
+ options: Options,
+ },
+ ) => MarkSpec['parseDOM'],
+
+ /**
+ * Render HTML
+ */
+ renderHTML?: ((
+ this: {
+ options: Options,
+ },
+ props: {
+ mark: Mark,
+ attributes: { [key: string]: any },
+ }
+ ) => DOMOutputSpec) | null,
+
+ /**
+ * Attributes
+ */
+ addAttributes?: (
+ this: {
+ options: Options,
+ },
+ ) => Attributes,
+
+ /**
+ * Commands
+ */
+ addCommands?: (this: {
+ options: Options,
+ editor: Editor,
+ type: MarkType,
+ }) => Commands,
+
+ /**
+ * Keyboard shortcuts
+ */
+ addKeyboardShortcuts?: (this: {
+ options: Options,
+ editor: Editor,
+ type: MarkType,
+ }) => {
+ [key: string]: any
+ },
+
+ /**
+ * Input rules
+ */
+ addInputRules?: (this: {
+ options: Options,
+ editor: Editor,
+ type: MarkType,
+ }) => any[],
+
+ /**
+ * Paste rules
+ */
+ addPasteRules?: (this: {
+ options: Options,
+ editor: Editor,
+ type: MarkType,
+ }) => any[],
+
+ /**
+ * ProseMirror plugins
+ */
+ addProseMirrorPlugins?: (this: {
+ options: Options,
+ editor: Editor,
+ type: MarkType,
+ }) => Plugin[],
+}> {}
+
+export type MarkExtension = Required & {
+ type: string,
+ options: {
+ [key: string]: any
+ },
+}>
+
+const defaultMark: MarkExtension = {
+ ...defaultExtension,
+ type: 'mark',
+ name: 'mark',
+ inclusive: null,
+ excludes: null,
+ group: null,
+ spanning: null,
+ parseHTML: () => null,
+ renderHTML: null,
+ addAttributes: () => ({}),
+}
+
+export function createMark(config: MarkExtensionSpec) {
+ const extend = (extendedConfig: Partial>) => {
+ return createMark({
+ ...config,
+ ...extendedConfig,
+ } as MarkExtensionSpec)
+ }
+
+ const setOptions = (options?: Partial) => {
+ const { defaultOptions, ...rest } = config
+
+ return {
+ ...defaultMark,
+ ...rest,
+ options: {
+ ...defaultOptions,
+ ...options,
+ } as Options,
+ }
+ }
+
+ return Object.assign(setOptions, { config, extend })
+}
diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts
deleted file mode 100644
index da675280..00000000
--- a/packages/core/src/Node.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { NodeSpec, NodeType } from 'prosemirror-model'
-import Extension, { ExtensionMethods } from './Extension'
-import { Editor } from './Editor'
-
-export interface NodeProps {
- name: string
- editor: Editor
- options: Options
- type: NodeType
-}
-
-export interface NodeMethods extends ExtensionMethods {
- topNode: boolean
- schema: (params: Omit) => NodeSpec
-}
-
-export default class Node<
- Options = {},
- Props = NodeProps,
- Methods extends NodeMethods = NodeMethods,
-> extends Extension {
- type = 'node'
-
- public topNode(value: Methods['topNode'] = true) {
- this.storeConfig('topNode', value, 'overwrite')
- return this
- }
-
- public schema(value: Methods['schema']) {
- this.storeConfig('schema', value, 'overwrite')
- return this
- }
-}
diff --git a/packages/core/src/NodeExtension.ts b/packages/core/src/NodeExtension.ts
new file mode 100644
index 00000000..76dba816
--- /dev/null
+++ b/packages/core/src/NodeExtension.ts
@@ -0,0 +1,193 @@
+import {
+ DOMOutputSpec, NodeSpec, Node, NodeType,
+} from 'prosemirror-model'
+import { Plugin } from 'prosemirror-state'
+import { ExtensionSpec, defaultExtension } from './Extension'
+import { Attributes, Overwrite } from './types'
+import { Editor } from './Editor'
+
+export interface NodeExtensionSpec extends Overwrite, {
+ /**
+ * TopNode
+ */
+ topNode?: boolean,
+
+ /**
+ * Content
+ */
+ content?: NodeSpec['content'],
+
+ /**
+ * Marks
+ */
+ marks?: NodeSpec['marks'],
+
+ /**
+ * Group
+ */
+ group?: NodeSpec['group'],
+
+ /**
+ * Inline
+ */
+ inline?: NodeSpec['inline'],
+
+ /**
+ * Atom
+ */
+ atom?: NodeSpec['atom'],
+
+ /**
+ * Selectable
+ */
+ selectable?: NodeSpec['selectable'],
+
+ /**
+ * Draggable
+ */
+ draggable?: NodeSpec['draggable'],
+
+ /**
+ * Code
+ */
+ code?: NodeSpec['code'],
+
+ /**
+ * Defining
+ */
+ defining?: NodeSpec['defining'],
+
+ /**
+ * Isolating
+ */
+ isolating?: NodeSpec['isolating'],
+
+ /**
+ * Parse HTML
+ */
+ parseHTML?: (
+ this: {
+ options: Options,
+ },
+ ) => NodeSpec['parseDOM'],
+
+ /**
+ * Render HTML
+ */
+ renderHTML?: ((
+ this: {
+ options: Options,
+ },
+ props: {
+ node: Node,
+ attributes: { [key: string]: any },
+ }
+ ) => DOMOutputSpec) | null,
+
+ /**
+ * Add Attributes
+ */
+ addAttributes?: (
+ this: {
+ options: Options,
+ },
+ ) => Attributes,
+
+ /**
+ * Commands
+ */
+ addCommands?: (this: {
+ options: Options,
+ editor: Editor,
+ type: NodeType,
+ }) => Commands,
+
+ /**
+ * Keyboard shortcuts
+ */
+ addKeyboardShortcuts?: (this: {
+ options: Options,
+ editor: Editor,
+ type: NodeType,
+ }) => {
+ [key: string]: any
+ },
+
+ /**
+ * Input rules
+ */
+ addInputRules?: (this: {
+ options: Options,
+ editor: Editor,
+ type: NodeType,
+ }) => any[],
+
+ /**
+ * Paste rules
+ */
+ addPasteRules?: (this: {
+ options: Options,
+ editor: Editor,
+ type: NodeType,
+ }) => any[],
+
+ /**
+ * ProseMirror plugins
+ */
+ addProseMirrorPlugins?: (this: {
+ options: Options,
+ editor: Editor,
+ type: NodeType,
+ }) => Plugin[],
+}> {}
+
+export type NodeExtension = Required & {
+ type: string,
+ options: {
+ [key: string]: any
+ },
+}>
+
+const defaultNode: NodeExtension = {
+ ...defaultExtension,
+ type: 'node',
+ name: 'node',
+ topNode: false,
+ content: null,
+ marks: null,
+ group: null,
+ inline: null,
+ atom: null,
+ selectable: null,
+ draggable: null,
+ code: null,
+ defining: null,
+ isolating: null,
+ parseHTML: () => null,
+ renderHTML: null,
+ addAttributes: () => ({}),
+}
+
+export function createNode(config: NodeExtensionSpec) {
+ const extend = (extendedConfig: Partial>) => {
+ return createNode({
+ ...config,
+ ...extendedConfig,
+ } as NodeExtensionSpec)
+ }
+
+ const setOptions = (options?: Partial) => {
+ const { defaultOptions, ...rest } = config
+
+ return {
+ ...defaultNode,
+ ...rest,
+ options: {
+ ...defaultOptions,
+ ...options,
+ } as Options,
+ }
+ }
+
+ return Object.assign(setOptions, { config, extend })
+}
diff --git a/packages/core/src/commands/blur.ts b/packages/core/src/commands/blur.ts
deleted file mode 100644
index ec46a8ba..00000000
--- a/packages/core/src/commands/blur.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Command } from '../Editor'
-
-type BlurCommand = () => Command
-
-declare module '../Editor' {
- interface Commands {
- blur: BlurCommand,
- }
-}
-
-export const blur: BlurCommand = () => ({ view }) => {
- const element = view.dom as HTMLElement
-
- element.blur()
-
- return true
-}
diff --git a/packages/core/src/commands/clearContent.ts b/packages/core/src/commands/clearContent.ts
deleted file mode 100644
index beb87c55..00000000
--- a/packages/core/src/commands/clearContent.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Command } from '../Editor'
-
-type ClearContentCommand = (emitUpdate?: Boolean) => Command
-
-declare module '../Editor' {
- interface Commands {
- clearContent: ClearContentCommand,
- }
-}
-
-export const clearContent: ClearContentCommand = (emitUpdate = false) => ({ commands }) => {
- return commands.setContent('', emitUpdate)
-}
diff --git a/packages/core/src/commands/deleteSelection.ts b/packages/core/src/commands/deleteSelection.ts
deleted file mode 100644
index 067cdebd..00000000
--- a/packages/core/src/commands/deleteSelection.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { deleteSelection as originalDeleteSelection } from 'prosemirror-commands'
-import { Command } from '../Editor'
-
-type DeleteSelectionCommand = () => Command
-
-declare module '../Editor' {
- interface Commands {
- deleteSelection: DeleteSelectionCommand,
- }
-}
-
-export const deleteSelection: DeleteSelectionCommand = () => ({ state, dispatch }) => {
- return originalDeleteSelection(state, dispatch)
-}
diff --git a/packages/core/src/commands/index.ts b/packages/core/src/commands/index.ts
deleted file mode 100644
index cd182285..00000000
--- a/packages/core/src/commands/index.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-export { blur } from './blur'
-export { clearContent } from './clearContent'
-export { deleteSelection } from './deleteSelection'
-export { focus } from './focus'
-export { insertHTML } from './insertHTML'
-export { insertText } from './insertText'
-export { liftListItem } from './liftListItem'
-export { removeMark } from './removeMark'
-export { removeMarks } from './removeMarks'
-export { scrollIntoView } from './scrollIntoView'
-export { selectAll } from './selectAll'
-export { selectParentNode } from './selectParentNode'
-export { setBlockType } from './setBlockType'
-export { setContent } from './setContent'
-export { sinkListItem } from './sinkListItem'
-export { splitListItem } from './splitListItem'
-export { toggleBlockType } from './toggleBlockType'
-export { toggleList } from './toggleList'
-export { toggleMark } from './toggleMark'
-export { updateMark } from './updateMark'
-export { toggleWrap } from './toggleWrap'
diff --git a/packages/core/src/commands/insertText.ts b/packages/core/src/commands/insertText.ts
deleted file mode 100644
index e48609e9..00000000
--- a/packages/core/src/commands/insertText.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Command } from '../Editor'
-
-type InsertTextCommand = (value: string) => Command
-
-declare module '../Editor' {
- interface Commands {
- insertText: InsertTextCommand,
- }
-}
-
-export const insertText: InsertTextCommand = value => ({ tr }) => {
- tr.insertText(value)
-
- return true
-}
diff --git a/packages/core/src/commands/liftListItem.ts b/packages/core/src/commands/liftListItem.ts
deleted file mode 100644
index ad0db3ad..00000000
--- a/packages/core/src/commands/liftListItem.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { liftListItem as originalLiftListItem } from 'prosemirror-schema-list'
-import { NodeType } from 'prosemirror-model'
-import { Command } from '../Editor'
-import getNodeType from '../utils/getNodeType'
-
-type LiftListItem = (typeOrName: string | NodeType) => Command
-
-declare module '../Editor' {
- interface Commands {
- liftListItem: LiftListItem,
- }
-}
-
-export const liftListItem: LiftListItem = typeOrName => ({ state, dispatch }) => {
- const type = getNodeType(typeOrName, state.schema)
-
- return originalLiftListItem(type)(state, dispatch)
-}
diff --git a/packages/core/src/commands/removeMark.ts b/packages/core/src/commands/removeMark.ts
deleted file mode 100644
index 00971361..00000000
--- a/packages/core/src/commands/removeMark.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { MarkType } from 'prosemirror-model'
-import { Command } from '../Editor'
-import getMarkType from '../utils/getMarkType'
-import getMarkRange from '../utils/getMarkRange'
-
-type RemoveMarkCommand = (typeOrName: string | MarkType) => Command
-
-declare module '../Editor' {
- interface Commands {
- removeMark: RemoveMarkCommand,
- }
-}
-
-export const removeMark: RemoveMarkCommand = typeOrName => ({ tr, state }) => {
- const { selection } = tr
- const type = getMarkType(typeOrName, state.schema)
- let { from, to } = selection
- const { $from, empty } = selection
-
- if (empty) {
- const range = getMarkRange($from, type)
-
- if (range) {
- from = range.from
- to = range.to
- }
- }
-
- tr.removeMark(from, to, type)
-
- return true
-}
diff --git a/packages/core/src/commands/removeMarks.ts b/packages/core/src/commands/removeMarks.ts
deleted file mode 100644
index d2eb17c4..00000000
--- a/packages/core/src/commands/removeMarks.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Command } from '../Editor'
-
-type RemoveMarksCommand = () => Command
-
-declare module '../Editor' {
- interface Commands {
- removeMarks: RemoveMarksCommand,
- }
-}
-
-export const removeMarks: RemoveMarksCommand = () => ({ tr, state }) => {
- const { selection } = tr
- const { from, to, empty } = selection
-
- if (empty) {
- return true
- }
-
- Object
- .entries(state.schema.marks)
- .forEach(([, mark]) => {
- tr.removeMark(from, to, mark as any)
- })
-
- return true
-}
diff --git a/packages/core/src/commands/scrollIntoView.ts b/packages/core/src/commands/scrollIntoView.ts
deleted file mode 100644
index 142dbee3..00000000
--- a/packages/core/src/commands/scrollIntoView.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Command } from '../Editor'
-
-type ScrollIntoViewCommand = () => Command
-
-declare module '../Editor' {
- interface Commands {
- scrollIntoView: ScrollIntoViewCommand,
- }
-}
-
-export const scrollIntoView: ScrollIntoViewCommand = () => ({ tr }) => {
- tr.scrollIntoView()
-
- return true
-}
diff --git a/packages/core/src/commands/selectAll.ts b/packages/core/src/commands/selectAll.ts
deleted file mode 100644
index 6aca7b86..00000000
--- a/packages/core/src/commands/selectAll.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { selectAll as originalSelectAll } from 'prosemirror-commands'
-import { Command } from '../Editor'
-
-type SelectAllCommand = () => Command
-
-declare module '../Editor' {
- interface Commands {
- selectAll: SelectAllCommand,
- }
-}
-
-export const selectAll: SelectAllCommand = () => ({ state, dispatch }) => {
- return originalSelectAll(state, dispatch)
-}
diff --git a/packages/core/src/commands/selectParentNode.ts b/packages/core/src/commands/selectParentNode.ts
deleted file mode 100644
index 7e51e7c9..00000000
--- a/packages/core/src/commands/selectParentNode.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { selectParentNode as originalSelectParentNode } from 'prosemirror-commands'
-import { Command } from '../Editor'
-
-type SelectParentNodeCommand = () => Command
-
-declare module '../Editor' {
- interface Commands {
- selectParentNode: SelectParentNodeCommand,
- }
-}
-
-export const selectParentNode: SelectParentNodeCommand = () => ({ state, dispatch }) => {
- return originalSelectParentNode(state, dispatch)
-}
diff --git a/packages/core/src/commands/setBlockType.ts b/packages/core/src/commands/setBlockType.ts
deleted file mode 100644
index af1fc866..00000000
--- a/packages/core/src/commands/setBlockType.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { NodeType } from 'prosemirror-model'
-import { setBlockType as originalSetBlockType } from 'prosemirror-commands'
-import { Command } from '../Editor'
-import getNodeType from '../utils/getNodeType'
-
-type SetBlockTypeCommand = (
- typeOrName: string | NodeType,
- attrs?: {},
-) => Command
-
-declare module '../Editor' {
- interface Commands {
- setBlockType: SetBlockTypeCommand,
- }
-}
-
-export const setBlockType: SetBlockTypeCommand = (typeOrName, attrs = {}) => ({ state, dispatch }) => {
- const type = getNodeType(typeOrName, state.schema)
-
- return originalSetBlockType(type, attrs)(state, dispatch)
-}
diff --git a/packages/core/src/commands/setContent.ts b/packages/core/src/commands/setContent.ts
deleted file mode 100644
index fb1c5d1e..00000000
--- a/packages/core/src/commands/setContent.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { TextSelection } from 'prosemirror-state'
-import { Command } from '../Editor'
-
-type SetContentCommand = (
- content: string,
- emitUpdate?: Boolean,
- parseOptions?: any,
-) => Command
-
-declare module '../Editor' {
- interface Commands {
- setContent: SetContentCommand,
- }
-}
-
-export const setContent: SetContentCommand = (content = '', emitUpdate = false, parseOptions = {}) => ({ tr, editor }) => {
- const { createDocument } = editor
- const { doc } = tr
- const document = createDocument(content, parseOptions)
- const selection = TextSelection.create(doc, 0, doc.content.size)
-
- tr.setSelection(selection)
- .replaceSelectionWith(document, false)
- .setMeta('preventUpdate', !emitUpdate)
-
- return true
-}
diff --git a/packages/core/src/commands/sinkListItem.ts b/packages/core/src/commands/sinkListItem.ts
deleted file mode 100644
index 04dea8b9..00000000
--- a/packages/core/src/commands/sinkListItem.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { sinkListItem as originalSinkListItem } from 'prosemirror-schema-list'
-import { NodeType } from 'prosemirror-model'
-import { Command } from '../Editor'
-import getNodeType from '../utils/getNodeType'
-
-type SinkListItem = (typeOrName: string | NodeType) => Command
-
-declare module '../Editor' {
- interface Commands {
- sinkListItem: SinkListItem,
- }
-}
-
-export const sinkListItem: SinkListItem = typeOrName => ({ state, dispatch }) => {
- const type = getNodeType(typeOrName, state.schema)
-
- return originalSinkListItem(type)(state, dispatch)
-}
diff --git a/packages/core/src/commands/splitListItem.ts b/packages/core/src/commands/splitListItem.ts
deleted file mode 100644
index 807eee36..00000000
--- a/packages/core/src/commands/splitListItem.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { splitListItem as originalSplitListItem } from 'prosemirror-schema-list'
-import { NodeType } from 'prosemirror-model'
-import { Command } from '../Editor'
-import getNodeType from '../utils/getNodeType'
-
-type SplitListItem = (typeOrName: string | NodeType) => Command
-
-declare module '../Editor' {
- interface Commands {
- splitListItem: SplitListItem,
- }
-}
-
-export const splitListItem: SplitListItem = typeOrName => ({ state, dispatch }) => {
- const type = getNodeType(typeOrName, state.schema)
-
- return originalSplitListItem(type)(state, dispatch)
-}
diff --git a/packages/core/src/commands/toggleBlockType.ts b/packages/core/src/commands/toggleBlockType.ts
deleted file mode 100644
index abf47426..00000000
--- a/packages/core/src/commands/toggleBlockType.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { NodeType } from 'prosemirror-model'
-import { Command } from '../Editor'
-import nodeIsActive from '../utils/nodeIsActive'
-import getNodeType from '../utils/getNodeType'
-
-type ToggleBlockTypeCommand = (
- typeOrName: string | NodeType,
- toggleType: string | NodeType,
- attrs?: {}
-) => Command
-
-declare module '../Editor' {
- interface Commands {
- toggleBlockType: ToggleBlockTypeCommand,
- }
-}
-
-export const toggleBlockType: ToggleBlockTypeCommand = (typeOrName, toggleTypeOrName, attrs = {}) => ({ state, commands }) => {
- const type = getNodeType(typeOrName, state.schema)
- const toggleType = getNodeType(toggleTypeOrName, state.schema)
- const isActive = nodeIsActive(state, type, attrs)
-
- if (isActive) {
- return commands.setBlockType(toggleType)
- }
-
- return commands.setBlockType(type, attrs)
-}
diff --git a/packages/core/src/commands/toggleList.ts b/packages/core/src/commands/toggleList.ts
deleted file mode 100644
index 2a2238cd..00000000
--- a/packages/core/src/commands/toggleList.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import { wrapInList, liftListItem } from 'prosemirror-schema-list'
-import { findParentNode } from 'prosemirror-utils'
-import { Node, NodeType, Schema } from 'prosemirror-model'
-import { Command } from '../Editor'
-import getNodeType from '../utils/getNodeType'
-
-type ToggleListCommand = (
- listType: string | NodeType,
- itemType: string | NodeType,
-) => Command
-
-declare module '../Editor' {
- interface Commands {
- toggleList: ToggleListCommand,
- }
-}
-
-function isList(node: Node, schema: Schema) {
- return (node.type === schema.nodes.bullet_list
- || node.type === schema.nodes.ordered_list
- || node.type === schema.nodes.todo_list)
-}
-
-export const toggleList: ToggleListCommand = (listTypeOrName, itemTypeOrName) => ({ tr, state, dispatch }) => {
- const listType = getNodeType(listTypeOrName, state.schema)
- const itemType = getNodeType(itemTypeOrName, state.schema)
- const { schema, selection } = state
- const { $from, $to } = selection
- const range = $from.blockRange($to)
-
- if (!range) {
- return false
- }
-
- const parentList = findParentNode(node => isList(node, schema))(selection)
-
- if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {
- if (parentList.node.type === listType) {
- return liftListItem(itemType)(state, dispatch)
- }
-
- if (isList(parentList.node, schema) && listType.validContent(parentList.node.content)) {
- tr.setNodeMarkup(parentList.pos, listType)
-
- return false
- }
- }
-
- return wrapInList(listType)(state, dispatch)
-}
diff --git a/packages/core/src/commands/toggleWrap.ts b/packages/core/src/commands/toggleWrap.ts
deleted file mode 100644
index e3a17095..00000000
--- a/packages/core/src/commands/toggleWrap.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { wrapIn, lift } from 'prosemirror-commands'
-import { NodeType } from 'prosemirror-model'
-import { Command } from '../Editor'
-import nodeIsActive from '../utils/nodeIsActive'
-import getNodeType from '../utils/getNodeType'
-
-type ToggleWrapCommand = (typeOrName: string | NodeType, attrs?: {}) => Command
-
-declare module '../Editor' {
- interface Commands {
- toggleWrap: ToggleWrapCommand,
- }
-}
-
-export const toggleWrap: ToggleWrapCommand = (typeOrName, attrs) => ({
- state, dispatch,
-}) => {
- const type = getNodeType(typeOrName, state.schema)
- const isActive = nodeIsActive(state, type, attrs)
-
- if (isActive) {
- return lift(state, dispatch)
- }
-
- return wrapIn(type, attrs)(state, dispatch)
-}
diff --git a/packages/core/src/commands/updateMark.ts b/packages/core/src/commands/updateMark.ts
deleted file mode 100644
index 4e09e46c..00000000
--- a/packages/core/src/commands/updateMark.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { MarkType } from 'prosemirror-model'
-import { Command } from '../Editor'
-import getMarkType from '../utils/getMarkType'
-import getMarkRange from '../utils/getMarkRange'
-
-type UpdateMarkCommand = (
- typeOrName: string | MarkType,
- attrs: {},
-) => Command
-
-declare module '../Editor' {
- interface Commands {
- updateMark: UpdateMarkCommand,
- }
-}
-
-export const updateMark: UpdateMarkCommand = (typeOrName, attrs = {}) => ({ tr, state }) => {
- const { selection, doc } = tr
- let { from, to } = selection
- const { $from, empty } = selection
- const type = getMarkType(typeOrName, state.schema)
-
- if (empty) {
- const range = getMarkRange($from, type)
-
- if (range) {
- from = range.from
- to = range.to
- }
- }
-
- const hasMark = doc.rangeHasMark(from, to, type)
-
- if (hasMark) {
- tr.removeMark(from, to, type)
- }
-
- tr.addMark(from, to, type.create(attrs))
-
- return true
-}
diff --git a/packages/core/src/extensions/blur.ts b/packages/core/src/extensions/blur.ts
new file mode 100644
index 00000000..14dd93e0
--- /dev/null
+++ b/packages/core/src/extensions/blur.ts
@@ -0,0 +1,22 @@
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const Blur = createExtension({
+ addCommands() {
+ return {
+ blur: (): Command => ({ view }) => {
+ const element = view.dom as HTMLElement
+
+ element.blur()
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ Blur: typeof Blur,
+ }
+}
diff --git a/packages/core/src/extensions/clearContent.ts b/packages/core/src/extensions/clearContent.ts
new file mode 100644
index 00000000..2efc9463
--- /dev/null
+++ b/packages/core/src/extensions/clearContent.ts
@@ -0,0 +1,18 @@
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const ClearContent = createExtension({
+ addCommands() {
+ return {
+ clearContent: (emitUpdate: Boolean = false): Command => ({ commands }) => {
+ return commands.setContent('', emitUpdate)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ ClearContent: typeof ClearContent,
+ }
+}
diff --git a/packages/core/src/extensions/deleteSelection.ts b/packages/core/src/extensions/deleteSelection.ts
new file mode 100644
index 00000000..8065c52b
--- /dev/null
+++ b/packages/core/src/extensions/deleteSelection.ts
@@ -0,0 +1,19 @@
+import { deleteSelection } from 'prosemirror-commands'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const DeleteSelection = createExtension({
+ addCommands() {
+ return {
+ deleteSelection: (): Command => ({ state, dispatch }) => {
+ return deleteSelection(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ DeleteSelection: typeof DeleteSelection,
+ }
+}
diff --git a/packages/core/src/commands/focus.ts b/packages/core/src/extensions/focus.ts
similarity index 51%
rename from packages/core/src/commands/focus.ts
rename to packages/core/src/extensions/focus.ts
index 1042852e..8f9ffdb3 100644
--- a/packages/core/src/commands/focus.ts
+++ b/packages/core/src/extensions/focus.ts
@@ -1,15 +1,9 @@
import { TextSelection } from 'prosemirror-state'
import { Editor, Command } from '../Editor'
+import { createExtension } from '../Extension'
import minMax from '../utils/minMax'
type Position = 'start' | 'end' | number | boolean | null
-type FocusCommand = (position?: Position) => Command
-
-declare module '../Editor' {
- interface Commands {
- focus: FocusCommand
- }
-}
interface ResolvedSelection {
from: number,
@@ -43,19 +37,31 @@ function resolveSelection(editor: Editor, position: Position = null): ResolvedSe
}
}
-export const focus: FocusCommand = (position = null) => ({ editor, view, tr }) => {
- if ((view.hasFocus() && position === null) || position === false) {
- return true
+export const Focus = createExtension({
+ addCommands() {
+ return {
+ focus: (position: Position = null): Command => ({ editor, view, tr }) => {
+ if ((view.hasFocus() && position === null) || position === false) {
+ return true
+ }
+
+ const { from, to } = resolveSelection(editor, position)
+ const { doc } = tr
+ const resolvedFrom = minMax(from, 0, doc.content.size)
+ const resolvedEnd = minMax(to, 0, doc.content.size)
+ const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
+
+ tr.setSelection(selection)
+ view.focus()
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ Focus: typeof Focus,
}
-
- const { from, to } = resolveSelection(editor, position)
- const { doc } = tr
- const resolvedFrom = minMax(from, 0, doc.content.size)
- const resolvedEnd = minMax(to, 0, doc.content.size)
- const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
-
- tr.setSelection(selection)
- view.focus()
-
- return true
}
diff --git a/packages/core/src/extensions/index.ts b/packages/core/src/extensions/index.ts
new file mode 100644
index 00000000..caaade84
--- /dev/null
+++ b/packages/core/src/extensions/index.ts
@@ -0,0 +1,23 @@
+export { Blur } from './blur'
+export { ClearContent } from './clearContent'
+export { DeleteSelection } from './deleteSelection'
+export { Focus } from './focus'
+export { InsertHTML } from './insertHTML'
+export { InsertText } from './insertText'
+export { LiftListItem } from './liftListItem'
+export { RemoveMark } from './removeMark'
+export { RemoveMarks } from './removeMarks'
+export { ScrollIntoView } from './scrollIntoView'
+export { SelectAll } from './selectAll'
+export { SelectParentNode } from './selectParentNode'
+export { SetNodeAttributes } from './setNodeAttributes'
+export { SetBlockType } from './setBlockType'
+export { SetContent } from './setContent'
+export { SinkListItem } from './sinkListItem'
+export { SplitBlock } from './splitBlock'
+export { SplitListItem } from './splitListItem'
+export { ToggleBlockType } from './toggleBlockType'
+export { ToggleList } from './toggleList'
+export { ToggleMark } from './toggleMark'
+export { UpdateMark } from './updateMark'
+export { ToggleWrap } from './toggleWrap'
diff --git a/packages/core/src/commands/insertHTML.ts b/packages/core/src/extensions/insertHTML.ts
similarity index 61%
rename from packages/core/src/commands/insertHTML.ts
rename to packages/core/src/extensions/insertHTML.ts
index 9d06dddf..2a567a40 100644
--- a/packages/core/src/commands/insertHTML.ts
+++ b/packages/core/src/extensions/insertHTML.ts
@@ -1,16 +1,9 @@
import { DOMParser } from 'prosemirror-model'
import { Selection, Transaction } from 'prosemirror-state'
import { ReplaceStep, ReplaceAroundStep } from 'prosemirror-transform'
-import { Command } from '../Editor'
import elementFromString from '../utils/elementFromString'
-
-type InsertHTMLCommand = (value: string) => Command
-
-declare module '../Editor' {
- interface Commands {
- insertHTML: InsertHTMLCommand,
- }
-}
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
// TODO: move to utils
// https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466
@@ -25,13 +18,25 @@ function selectionToInsertionEnd(tr: Transaction, startLen: number, bias: number
tr.setSelection(Selection.near(tr.doc.resolve(end as unknown as number), bias))
}
-export const insertHTML: InsertHTMLCommand = value => ({ tr, state }) => {
- const { selection } = tr
- const element = elementFromString(value)
- const slice = DOMParser.fromSchema(state.schema).parseSlice(element)
+export const InsertHTML = createExtension({
+ addCommands() {
+ return {
+ insertHTML: (value: string): Command => ({ tr, state }) => {
+ const { selection } = tr
+ const element = elementFromString(value)
+ const slice = DOMParser.fromSchema(state.schema).parseSlice(element)
- tr.insert(selection.anchor, slice.content)
- selectionToInsertionEnd(tr, tr.steps.length - 1, -1)
+ tr.insert(selection.anchor, slice.content)
+ selectionToInsertionEnd(tr, tr.steps.length - 1, -1)
- return true
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ InsertHTML: typeof InsertHTML,
+ }
}
diff --git a/packages/core/src/extensions/insertText.ts b/packages/core/src/extensions/insertText.ts
new file mode 100644
index 00000000..cdef3263
--- /dev/null
+++ b/packages/core/src/extensions/insertText.ts
@@ -0,0 +1,20 @@
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const InsertText = createExtension({
+ addCommands() {
+ return {
+ insertText: (value: string): Command => ({ tr }) => {
+ tr.insertText(value)
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ InsertText: typeof InsertText,
+ }
+}
diff --git a/packages/core/src/extensions/liftListItem.ts b/packages/core/src/extensions/liftListItem.ts
new file mode 100644
index 00000000..c7244dba
--- /dev/null
+++ b/packages/core/src/extensions/liftListItem.ts
@@ -0,0 +1,23 @@
+import { liftListItem } from 'prosemirror-schema-list'
+import { NodeType } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import getNodeType from '../utils/getNodeType'
+
+export const LiftListItem = createExtension({
+ addCommands() {
+ return {
+ liftListItem: (typeOrName: string | NodeType): Command => ({ state, dispatch }) => {
+ const type = getNodeType(typeOrName, state.schema)
+
+ return liftListItem(type)(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ LiftListItem: typeof LiftListItem,
+ }
+}
diff --git a/packages/core/src/extensions/removeMark.ts b/packages/core/src/extensions/removeMark.ts
new file mode 100644
index 00000000..f4463341
--- /dev/null
+++ b/packages/core/src/extensions/removeMark.ts
@@ -0,0 +1,37 @@
+import { MarkType } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import getMarkType from '../utils/getMarkType'
+import getMarkRange from '../utils/getMarkRange'
+
+export const RemoveMark = createExtension({
+ addCommands() {
+ return {
+ removeMark: (typeOrName: string | MarkType): Command => ({ tr, state }) => {
+ const { selection } = tr
+ const type = getMarkType(typeOrName, state.schema)
+ let { from, to } = selection
+ const { $from, empty } = selection
+
+ if (empty) {
+ const range = getMarkRange($from, type)
+
+ if (range) {
+ from = range.from
+ to = range.to
+ }
+ }
+
+ tr.removeMark(from, to, type)
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ RemoveMark: typeof RemoveMark,
+ }
+}
diff --git a/packages/core/src/extensions/removeMarks.ts b/packages/core/src/extensions/removeMarks.ts
new file mode 100644
index 00000000..af527062
--- /dev/null
+++ b/packages/core/src/extensions/removeMarks.ts
@@ -0,0 +1,31 @@
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const RemoveMarks = createExtension({
+ addCommands() {
+ return {
+ removeMarks: (): Command => ({ tr, state }) => {
+ const { selection } = tr
+ const { from, to, empty } = selection
+
+ if (empty) {
+ return true
+ }
+
+ Object
+ .entries(state.schema.marks)
+ .forEach(([, mark]) => {
+ tr.removeMark(from, to, mark as any)
+ })
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ RemoveMarks: typeof RemoveMarks,
+ }
+}
diff --git a/packages/core/src/extensions/scrollIntoView.ts b/packages/core/src/extensions/scrollIntoView.ts
new file mode 100644
index 00000000..44fee958
--- /dev/null
+++ b/packages/core/src/extensions/scrollIntoView.ts
@@ -0,0 +1,20 @@
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const ScrollIntoView = createExtension({
+ addCommands() {
+ return {
+ scrollIntoView: (): Command => ({ tr }) => {
+ tr.scrollIntoView()
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ ScrollIntoView: typeof ScrollIntoView,
+ }
+}
diff --git a/packages/core/src/extensions/selectAll.ts b/packages/core/src/extensions/selectAll.ts
new file mode 100644
index 00000000..74b9198d
--- /dev/null
+++ b/packages/core/src/extensions/selectAll.ts
@@ -0,0 +1,19 @@
+import { selectAll } from 'prosemirror-commands'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const SelectAll = createExtension({
+ addCommands() {
+ return {
+ selectAll: (): Command => ({ state, dispatch }) => {
+ return selectAll(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ SelectAll: typeof SelectAll,
+ }
+}
diff --git a/packages/core/src/extensions/selectParentNode.ts b/packages/core/src/extensions/selectParentNode.ts
new file mode 100644
index 00000000..79c6c06d
--- /dev/null
+++ b/packages/core/src/extensions/selectParentNode.ts
@@ -0,0 +1,19 @@
+import { selectParentNode } from 'prosemirror-commands'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const SelectParentNode = createExtension({
+ addCommands() {
+ return {
+ selectParentNode: (): Command => ({ state, dispatch }) => {
+ return selectParentNode(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ SelectParentNode: typeof SelectParentNode,
+ }
+}
diff --git a/packages/core/src/extensions/setBlockType.ts b/packages/core/src/extensions/setBlockType.ts
new file mode 100644
index 00000000..aa7244ee
--- /dev/null
+++ b/packages/core/src/extensions/setBlockType.ts
@@ -0,0 +1,23 @@
+import { NodeType } from 'prosemirror-model'
+import { setBlockType } from 'prosemirror-commands'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import getNodeType from '../utils/getNodeType'
+
+export const SetBlockType = createExtension({
+ addCommands() {
+ return {
+ setBlockType: (typeOrName: string | NodeType, attrs = {}): Command => ({ state, dispatch }) => {
+ const type = getNodeType(typeOrName, state.schema)
+
+ return setBlockType(type, attrs)(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ SetBlockType: typeof SetBlockType,
+ }
+}
diff --git a/packages/core/src/extensions/setContent.ts b/packages/core/src/extensions/setContent.ts
new file mode 100644
index 00000000..f19fb906
--- /dev/null
+++ b/packages/core/src/extensions/setContent.ts
@@ -0,0 +1,28 @@
+import { TextSelection } from 'prosemirror-state'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const SetContent = createExtension({
+ addCommands() {
+ return {
+ setContent: (content: string, emitUpdate: Boolean = false, parseOptions = {}): Command => ({ tr, editor }) => {
+ const { createDocument } = editor
+ const { doc } = tr
+ const document = createDocument(content, parseOptions)
+ const selection = TextSelection.create(doc, 0, doc.content.size)
+
+ tr.setSelection(selection)
+ .replaceSelectionWith(document, false)
+ .setMeta('preventUpdate', !emitUpdate)
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ SetContent: typeof SetContent,
+ }
+}
diff --git a/packages/core/src/extensions/setNodeAttributes.ts b/packages/core/src/extensions/setNodeAttributes.ts
new file mode 100644
index 00000000..d049ba3b
--- /dev/null
+++ b/packages/core/src/extensions/setNodeAttributes.ts
@@ -0,0 +1,27 @@
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+
+export const SetNodeAttributes = createExtension({
+ addCommands() {
+ return {
+ setNodeAttributes: (attributes: {}): Command => ({ tr, state }) => {
+ const { selection } = tr
+ const { from, to } = selection
+
+ state.doc.nodesBetween(from, to, (node, pos) => {
+ if (!node.type.isText) {
+ tr.setNodeMarkup(pos, undefined, attributes)
+ }
+ })
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ SetNodeAttributes: typeof SetNodeAttributes,
+ }
+}
diff --git a/packages/core/src/extensions/sinkListItem.ts b/packages/core/src/extensions/sinkListItem.ts
new file mode 100644
index 00000000..e6832a08
--- /dev/null
+++ b/packages/core/src/extensions/sinkListItem.ts
@@ -0,0 +1,23 @@
+import { sinkListItem as originalSinkListItem } from 'prosemirror-schema-list'
+import { NodeType } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import getNodeType from '../utils/getNodeType'
+
+export const SinkListItem = createExtension({
+ addCommands() {
+ return {
+ sinkListItem: (typeOrName: string | NodeType): Command => ({ state, dispatch }) => {
+ const type = getNodeType(typeOrName, state.schema)
+
+ return originalSinkListItem(type)(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ SinkListItem: typeof SinkListItem,
+ }
+}
diff --git a/packages/core/src/extensions/splitBlock.ts b/packages/core/src/extensions/splitBlock.ts
new file mode 100644
index 00000000..b82be5e5
--- /dev/null
+++ b/packages/core/src/extensions/splitBlock.ts
@@ -0,0 +1,71 @@
+// import {
+// baseKeymap, chainCommands, newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock,
+// } from 'prosemirror-commands'
+import { canSplit } from 'prosemirror-transform'
+import { ContentMatch, Fragment } from 'prosemirror-model'
+import { NodeSelection, TextSelection } from 'prosemirror-state'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+// import getNodeType from '../utils/getNodeType'
+
+function defaultBlockAt(match: ContentMatch) {
+ for (let i = 0; i < match.edgeCount; i + 1) {
+ const { type } = match.edge(i)
+ // @ts-ignore
+ if (type.isTextblock && !type.hasRequiredAttrs()) return type
+ }
+ return null
+}
+
+export const SplitBlock = createExtension({
+ addCommands() {
+ return {
+ splitBlock: (copyAttributes = false): Command => ({ state, dispatch }) => {
+ // const type = getNodeType(typeOrName, state.schema)
+
+ const { $from, $to } = state.selection
+ if (state.selection instanceof NodeSelection && state.selection.node.isBlock) {
+ if (!$from.parentOffset || !canSplit(state.doc, $from.pos)) return false
+ if (dispatch) dispatch(state.tr.split($from.pos).scrollIntoView())
+ return true
+ }
+
+ if (!$from.parent.isBlock) return false
+
+ if (dispatch) {
+ const atEnd = $to.parentOffset === $to.parent.content.size
+ const { tr } = state
+ if (state.selection instanceof TextSelection) tr.deleteSelection()
+ const deflt = $from.depth === 0 ? null : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)))
+ let types = atEnd && deflt ? [{ type: deflt, attrs: copyAttributes ? $from.node().attrs : {} }] : null
+ // let types = atEnd && deflt ? [{ type: deflt }] : null
+ // @ts-ignore
+ let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types)
+ // @ts-ignore
+ if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt && [{ type: deflt }])) {
+ // @ts-ignore
+ types = [{ type: deflt, attrs: copyAttributes ? $from.node().attrs : {} }]
+ // types = [{ type: deflt }]
+ can = true
+ }
+ if (can) {
+ // @ts-ignore
+ tr.split(tr.mapping.map($from.pos), 1, types)
+ if (!atEnd && !$from.parentOffset && $from.parent.type !== deflt
+ // @ts-ignore
+ && $from.node(-1).canReplace($from.index(-1), $from.indexAfter(-1), Fragment.from(deflt.create(), $from.parent))) { tr.setNodeMarkup(tr.mapping.map($from.before()), deflt) }
+ }
+ dispatch(tr.scrollIntoView())
+ }
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ SplitBlock: typeof SplitBlock,
+ }
+}
diff --git a/packages/core/src/extensions/splitListItem.ts b/packages/core/src/extensions/splitListItem.ts
new file mode 100644
index 00000000..9b84df0e
--- /dev/null
+++ b/packages/core/src/extensions/splitListItem.ts
@@ -0,0 +1,23 @@
+import { splitListItem } from 'prosemirror-schema-list'
+import { NodeType } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import getNodeType from '../utils/getNodeType'
+
+export const SplitListItem = createExtension({
+ addCommands() {
+ return {
+ splitListItem: (typeOrName: string | NodeType): Command => ({ state, dispatch }) => {
+ const type = getNodeType(typeOrName, state.schema)
+
+ return splitListItem(type)(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ SplitListItem: typeof SplitListItem,
+ }
+}
diff --git a/packages/core/src/extensions/toggleBlockType.ts b/packages/core/src/extensions/toggleBlockType.ts
new file mode 100644
index 00000000..f04838d5
--- /dev/null
+++ b/packages/core/src/extensions/toggleBlockType.ts
@@ -0,0 +1,29 @@
+import { NodeType } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import nodeIsActive from '../utils/nodeIsActive'
+import getNodeType from '../utils/getNodeType'
+
+export const ToggleBlockType = createExtension({
+ addCommands() {
+ return {
+ toggleBlockType: (typeOrName: string | NodeType, toggleTypeOrName: string | NodeType, attrs = {}): Command => ({ state, commands }) => {
+ const type = getNodeType(typeOrName, state.schema)
+ const toggleType = getNodeType(toggleTypeOrName, state.schema)
+ const isActive = nodeIsActive(state, type, attrs)
+
+ if (isActive) {
+ return commands.setBlockType(toggleType)
+ }
+
+ return commands.setBlockType(type, attrs)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ ToggleBlockType: typeof ToggleBlockType,
+ }
+}
diff --git a/packages/core/src/extensions/toggleList.ts b/packages/core/src/extensions/toggleList.ts
new file mode 100644
index 00000000..2f7a15d3
--- /dev/null
+++ b/packages/core/src/extensions/toggleList.ts
@@ -0,0 +1,52 @@
+import { wrapInList, liftListItem } from 'prosemirror-schema-list'
+import { findParentNode } from 'prosemirror-utils'
+import { Node, NodeType, Schema } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import getNodeType from '../utils/getNodeType'
+
+function isList(node: Node, schema: Schema) {
+ return (node.type === schema.nodes.bullet_list
+ || node.type === schema.nodes.ordered_list
+ || node.type === schema.nodes.todo_list)
+}
+
+export const ToggleList = createExtension({
+ addCommands() {
+ return {
+ toggleList: (listTypeOrName: string | NodeType, itemTypeOrName: string | NodeType): Command => ({ tr, state, dispatch }) => {
+ const listType = getNodeType(listTypeOrName, state.schema)
+ const itemType = getNodeType(itemTypeOrName, state.schema)
+ const { schema, selection } = state
+ const { $from, $to } = selection
+ const range = $from.blockRange($to)
+
+ if (!range) {
+ return false
+ }
+
+ const parentList = findParentNode(node => isList(node, schema))(selection)
+
+ if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {
+ if (parentList.node.type === listType) {
+ return liftListItem(itemType)(state, dispatch)
+ }
+
+ if (isList(parentList.node, schema) && listType.validContent(parentList.node.content)) {
+ tr.setNodeMarkup(parentList.pos, listType)
+
+ return false
+ }
+ }
+
+ return wrapInList(listType)(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ ToggleList: typeof ToggleList,
+ }
+}
diff --git a/packages/core/src/extensions/toggleMark.ts b/packages/core/src/extensions/toggleMark.ts
new file mode 100644
index 00000000..e3de9adb
--- /dev/null
+++ b/packages/core/src/extensions/toggleMark.ts
@@ -0,0 +1,23 @@
+import { toggleMark as originalToggleMark } from 'prosemirror-commands'
+import { MarkType } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import getMarkType from '../utils/getMarkType'
+
+export const ToggleMark = createExtension({
+ addCommands() {
+ return {
+ toggleMark: (typeOrName: string | MarkType): Command => ({ state, dispatch }) => {
+ const type = getMarkType(typeOrName, state.schema)
+
+ return originalToggleMark(type)(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ ToggleMark: typeof ToggleMark,
+ }
+}
diff --git a/packages/core/src/extensions/toggleWrap.ts b/packages/core/src/extensions/toggleWrap.ts
new file mode 100644
index 00000000..1ba1558d
--- /dev/null
+++ b/packages/core/src/extensions/toggleWrap.ts
@@ -0,0 +1,29 @@
+import { wrapIn, lift } from 'prosemirror-commands'
+import { NodeType } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import nodeIsActive from '../utils/nodeIsActive'
+import getNodeType from '../utils/getNodeType'
+
+export const ToggleWrap = createExtension({
+ addCommands() {
+ return {
+ toggleWrap: (typeOrName: string | NodeType, attrs = {}): Command => ({ state, dispatch }) => {
+ const type = getNodeType(typeOrName, state.schema)
+ const isActive = nodeIsActive(state, type, attrs)
+
+ if (isActive) {
+ return lift(state, dispatch)
+ }
+
+ return wrapIn(type, attrs)(state, dispatch)
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ ToggleWrap: typeof ToggleWrap,
+ }
+}
diff --git a/packages/core/src/extensions/updateMark.ts b/packages/core/src/extensions/updateMark.ts
new file mode 100644
index 00000000..0200cf0d
--- /dev/null
+++ b/packages/core/src/extensions/updateMark.ts
@@ -0,0 +1,43 @@
+import { MarkType } from 'prosemirror-model'
+import { Command } from '../Editor'
+import { createExtension } from '../Extension'
+import getMarkType from '../utils/getMarkType'
+import getMarkRange from '../utils/getMarkRange'
+
+export const UpdateMark = createExtension({
+ addCommands() {
+ return {
+ updateMark: (typeOrName: string | MarkType, attrs: {}): Command => ({ tr, state }) => {
+ const { selection, doc } = tr
+ let { from, to } = selection
+ const { $from, empty } = selection
+ const type = getMarkType(typeOrName, state.schema)
+
+ if (empty) {
+ const range = getMarkRange($from, type)
+
+ if (range) {
+ from = range.from
+ to = range.to
+ }
+ }
+
+ const hasMark = doc.rangeHasMark(from, to, type)
+
+ if (hasMark) {
+ tr.removeMark(from, to, type)
+ }
+
+ tr.addMark(from, to, type.create(attrs))
+
+ return true
+ },
+ }
+ },
+})
+
+declare module '../Editor' {
+ interface AllExtensions {
+ UpdateMark: typeof UpdateMark,
+ }
+}
diff --git a/packages/core/src/inputRules/markInputRule.ts b/packages/core/src/inputRules/markInputRule.ts
index fc1ba923..fa99778b 100644
--- a/packages/core/src/inputRules/markInputRule.ts
+++ b/packages/core/src/inputRules/markInputRule.ts
@@ -26,7 +26,7 @@ export default function (regexp: RegExp, markType: MarkType, getAttrs?: Function
if (match[m]) {
const matchStart = start + match[0].indexOf(match[m - 1])
- const matchEnd = matchStart + match[m - 1].length
+ const matchEnd = matchStart + match[m - 1].length - 1
const textStart = matchStart + match[m - 1].lastIndexOf(match[m])
const textEnd = textStart + match[m].length
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
index bc33c59c..5533a4fd 100644
--- a/packages/core/src/types.ts
+++ b/packages/core/src/types.ts
@@ -1,5 +1,42 @@
-import Extension from './Extension'
-import Node from './Node'
-import Mark from './Mark'
+import { Extension } from './Extension'
+import { NodeExtension } from './NodeExtension'
+import { MarkExtension } from './MarkExtension'
-export type Extensions = (Extension | Node | Mark)[]
+export type Extensions = (Extension | NodeExtension | MarkExtension)[]
+
+export type Attribute = {
+ default: any,
+ rendered?: boolean,
+ renderHTML?: ((attributes: { [key: string]: any }) => { [key: string]: any } | null) | null,
+ parseHTML?: ((element: HTMLElement) => { [key: string]: any } | null) | null,
+}
+
+export type Attributes = {
+ [key: string]: Attribute,
+}
+
+export type ExtensionAttribute = {
+ type: string,
+ name: string,
+ attribute: Required,
+}
+
+export type GlobalAttributes = {
+ types: string[],
+ attributes: Attributes,
+}[]
+
+export type PickValue = T[K]
+
+export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I)=>void)
+ ? I
+ : never
+
+export type Diff =
+ ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T]
+
+export type Overwrite = Pick> & U;
+
+export type AnyObject = {
+ [key: string]: any
+}
diff --git a/packages/core/src/utils/getAttributesFromExtensions.ts b/packages/core/src/utils/getAttributesFromExtensions.ts
new file mode 100644
index 00000000..62a327c3
--- /dev/null
+++ b/packages/core/src/utils/getAttributesFromExtensions.ts
@@ -0,0 +1,72 @@
+import splitExtensions from './splitExtensions'
+import {
+ Extensions,
+ GlobalAttributes,
+ Attributes,
+ Attribute,
+ ExtensionAttribute,
+} from '../types'
+
+/**
+ * Get a list of all extension attributes defined in `addAttribute` and `addGlobalAttribute`.
+ * @param extensions List of extensions
+ */
+export default function getAttributesFromExtensions(extensions: Extensions) {
+ const extensionAttributes: ExtensionAttribute[] = []
+ const { nodeExtensions, markExtensions } = splitExtensions(extensions)
+ const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions]
+ const defaultAttribute: Required = {
+ default: null,
+ rendered: true,
+ renderHTML: null,
+ parseHTML: null,
+ }
+
+ extensions.forEach(extension => {
+ const context = {
+ options: extension.options,
+ }
+
+ const globalAttributes = extension.addGlobalAttributes.bind(context)() as GlobalAttributes
+
+ globalAttributes.forEach(globalAttribute => {
+ globalAttribute.types.forEach(type => {
+ Object
+ .entries(globalAttribute.attributes)
+ .forEach(([name, attribute]) => {
+ extensionAttributes.push({
+ type,
+ name,
+ attribute: {
+ ...defaultAttribute,
+ ...attribute,
+ },
+ })
+ })
+ })
+ })
+ })
+
+ nodeAndMarkExtensions.forEach(extension => {
+ const context = {
+ options: extension.options,
+ }
+
+ const attributes = extension.addAttributes.bind(context)() as Attributes
+
+ Object
+ .entries(attributes)
+ .forEach(([name, attribute]) => {
+ extensionAttributes.push({
+ type: extension.name,
+ name,
+ attribute: {
+ ...defaultAttribute,
+ ...attribute,
+ },
+ })
+ })
+ })
+
+ return extensionAttributes
+}
diff --git a/packages/core/src/utils/getMarksFromExtensions.ts b/packages/core/src/utils/getMarksFromExtensions.ts
deleted file mode 100644
index 13152522..00000000
--- a/packages/core/src/utils/getMarksFromExtensions.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import collect from 'collect.js'
-import Mark from '../Mark'
-import { Extensions } from '../types'
-
-export default function getMarksFromExtensions(extensions: Extensions): any {
- return collect(extensions)
- .where('type', 'mark')
- .mapWithKeys((extension: Mark) => [extension.config.name, extension.config.schema])
- .all()
-}
diff --git a/packages/core/src/utils/getNodesFromExtensions.ts b/packages/core/src/utils/getNodesFromExtensions.ts
deleted file mode 100644
index 34290eec..00000000
--- a/packages/core/src/utils/getNodesFromExtensions.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import collect from 'collect.js'
-import Node from '../Node'
-import { Extensions } from '../types'
-
-export default function getNodesFromExtensions(extensions: Extensions): any {
- return collect(extensions)
- .where('type', 'node')
- .mapWithKeys((extension: Node) => [extension.config.name, extension.config.schema])
- .all()
-}
diff --git a/packages/core/src/utils/getRenderedAttributes.ts b/packages/core/src/utils/getRenderedAttributes.ts
new file mode 100644
index 00000000..da92012d
--- /dev/null
+++ b/packages/core/src/utils/getRenderedAttributes.ts
@@ -0,0 +1,20 @@
+import { Node, Mark } from 'prosemirror-model'
+import { ExtensionAttribute } from '../types'
+import mergeAttributes from './mergeAttributes'
+
+export default function getRenderedAttributes(nodeOrMark: Node | Mark, extensionAttributes: ExtensionAttribute[]): { [key: string]: any } {
+ return extensionAttributes
+ .filter(item => item.attribute.rendered)
+ .map(item => {
+ if (!item.attribute.renderHTML) {
+ return {
+ [item.name]: nodeOrMark.attrs[item.name],
+ }
+ }
+
+ return item.attribute.renderHTML(nodeOrMark.attrs) || {}
+ })
+ .reduce((attributes, attribute) => {
+ return mergeAttributes(attributes, attribute)
+ }, {})
+}
diff --git a/packages/core/src/utils/getSchema.ts b/packages/core/src/utils/getSchema.ts
index 066af5f5..817ed7a8 100644
--- a/packages/core/src/utils/getSchema.ts
+++ b/packages/core/src/utils/getSchema.ts
@@ -1,26 +1,93 @@
-import deepmerge from 'deepmerge'
-import { Schema } from 'prosemirror-model'
+import { NodeSpec, MarkSpec, Schema } from 'prosemirror-model'
import { Extensions } from '../types'
-import getTopNodeFromExtensions from './getTopNodeFromExtensions'
-import getNodesFromExtensions from './getNodesFromExtensions'
-import getMarksFromExtensions from './getMarksFromExtensions'
-import resolveExtensionConfig from './resolveExtensionConfig'
+import splitExtensions from './splitExtensions'
+import getAttributesFromExtensions from './getAttributesFromExtensions'
+import getRenderedAttributes from './getRenderedAttributes'
+import isEmptyObject from './isEmptyObject'
+import injectExtensionAttributesToParseRule from './injectExtensionAttributesToParseRule'
+
+function cleanUpSchemaItem(data: T) {
+ return Object.fromEntries(Object.entries(data).filter(([key, value]) => {
+ if (key === 'attrs' && isEmptyObject(value)) {
+ return false
+ }
+
+ return value !== null && value !== undefined
+ })) as T
+}
export default function getSchema(extensions: Extensions): Schema {
- extensions.forEach(extension => {
- resolveExtensionConfig(extension, 'name')
- resolveExtensionConfig(extension, 'defaults')
- resolveExtensionConfig(extension, 'topNode')
+ const allAttributes = getAttributesFromExtensions(extensions)
+ const { nodeExtensions, markExtensions } = splitExtensions(extensions)
+ const topNode = nodeExtensions.find(extension => extension.topNode)?.name
- const { name } = extension.config
- const options = deepmerge(extension.config.defaults, extension.options)
+ const nodes = Object.fromEntries(nodeExtensions.map(extension => {
+ const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name)
+ const context = { options: extension.options }
+ const schema: NodeSpec = cleanUpSchemaItem({
+ content: extension.content,
+ marks: extension.marks,
+ group: extension.group,
+ inline: extension.inline,
+ atom: extension.atom,
+ selectable: extension.selectable,
+ draggable: extension.draggable,
+ code: extension.code,
+ defining: extension.defining,
+ isolating: extension.isolating,
+ attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => {
+ return [extensionAttribute.name, { default: extensionAttribute?.attribute?.default }]
+ })),
+ })
- resolveExtensionConfig(extension, 'schema', { name, options })
- })
+ if (extension.parseHTML) {
+ schema.parseDOM = extension.parseHTML
+ .bind(context)()
+ ?.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes))
+ }
+
+ if (extension.renderHTML) {
+ schema.toDOM = node => (extension.renderHTML as Function)?.bind(context)({
+ node,
+ attributes: getRenderedAttributes(node, extensionAttributes),
+ })
+ }
+
+ return [extension.name, schema]
+ }))
+
+ const marks = Object.fromEntries(markExtensions.map(extension => {
+ const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name)
+ const context = { options: extension.options }
+ const schema: MarkSpec = cleanUpSchemaItem({
+ inclusive: extension.inclusive,
+ excludes: extension.excludes,
+ group: extension.group,
+ spanning: extension.spanning,
+ attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => {
+ return [extensionAttribute.name, { default: extensionAttribute?.attribute?.default }]
+ })),
+ })
+
+ if (extension.parseHTML) {
+ schema.parseDOM = extension.parseHTML
+ .bind(context)()
+ ?.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes))
+ }
+
+ if (extension.renderHTML) {
+ schema.toDOM = mark => (extension.renderHTML as Function)?.bind(context)({
+ mark,
+ attributes: getRenderedAttributes(mark, extensionAttributes),
+ })
+ }
+
+ return [extension.name, schema]
+ }))
return new Schema({
- topNode: getTopNodeFromExtensions(extensions),
- nodes: getNodesFromExtensions(extensions),
- marks: getMarksFromExtensions(extensions),
+ topNode,
+ nodes,
+ marks,
})
}
diff --git a/packages/core/src/utils/getSchemaTypeByName.ts b/packages/core/src/utils/getSchemaTypeByName.ts
index bf8250f0..95166080 100644
--- a/packages/core/src/utils/getSchemaTypeByName.ts
+++ b/packages/core/src/utils/getSchemaTypeByName.ts
@@ -2,11 +2,11 @@ import { Schema } from 'prosemirror-model'
export default function getSchemaTypeByName(name: string, schema: Schema) {
if (schema.nodes[name]) {
- return 'node'
+ return schema.nodes[name]
}
if (schema.marks[name]) {
- return 'mark'
+ return schema.marks[name]
}
return null
diff --git a/packages/core/src/utils/getSchemaTypeNameByName.ts b/packages/core/src/utils/getSchemaTypeNameByName.ts
new file mode 100644
index 00000000..5af5bdf3
--- /dev/null
+++ b/packages/core/src/utils/getSchemaTypeNameByName.ts
@@ -0,0 +1,13 @@
+import { Schema } from 'prosemirror-model'
+
+export default function getSchemaTypeNameByName(name: string, schema: Schema) {
+ if (schema.nodes[name]) {
+ return 'node'
+ }
+
+ if (schema.marks[name]) {
+ return 'mark'
+ }
+
+ return null
+}
diff --git a/packages/core/src/utils/getTopNodeFromExtensions.ts b/packages/core/src/utils/getTopNodeFromExtensions.ts
deleted file mode 100644
index 693070e1..00000000
--- a/packages/core/src/utils/getTopNodeFromExtensions.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import collect from 'collect.js'
-import { Extensions } from '../types'
-
-export default function getTopNodeFromExtensions(extensions: Extensions): any {
- const topNode = collect(extensions).firstWhere('config.topNode', true)
-
- if (topNode) {
- return topNode.config.name
- }
-}
diff --git a/packages/core/src/utils/injectExtensionAttributesToParseRule.ts b/packages/core/src/utils/injectExtensionAttributesToParseRule.ts
new file mode 100644
index 00000000..0cd42dd6
--- /dev/null
+++ b/packages/core/src/utils/injectExtensionAttributesToParseRule.ts
@@ -0,0 +1,47 @@
+import { ParseRule } from 'prosemirror-model'
+import { ExtensionAttribute } from '../types'
+
+/**
+ * This function merges extension attributes into parserule attributes (`attrs` or `getAttrs`).
+ * Cancels when `getAttrs` returned `false`.
+ * @param parseRule ProseMirror ParseRule
+ * @param extensionAttributes List of attributes to inject
+ */
+export default function injectExtensionAttributesToParseRule(parseRule: ParseRule, extensionAttributes: ExtensionAttribute[]): ParseRule {
+ if (parseRule.style) {
+ return parseRule
+ }
+
+ return {
+ ...parseRule,
+ getAttrs: node => {
+ const oldAttributes = parseRule.getAttrs
+ ? parseRule.getAttrs(node)
+ : parseRule.attrs
+
+ if (oldAttributes === false) {
+ return false
+ }
+
+ const newAttributes = extensionAttributes
+ .filter(item => item.attribute.rendered)
+ .reduce((items, item) => {
+ const attributes = item.attribute.parseHTML
+ ? item.attribute.parseHTML(node as HTMLElement) || {}
+ : {
+ [item.name]: (node as HTMLElement).getAttribute(item.name),
+ }
+
+ const filteredAttributes = Object.fromEntries(Object.entries(attributes)
+ .filter(([, value]) => value !== undefined && value !== null))
+
+ return {
+ ...items,
+ ...filteredAttributes,
+ }
+ }, {})
+
+ return { ...oldAttributes, ...newAttributes }
+ },
+ }
+}
diff --git a/packages/core/src/utils/isEmptyObject.ts b/packages/core/src/utils/isEmptyObject.ts
new file mode 100644
index 00000000..7d28f3d9
--- /dev/null
+++ b/packages/core/src/utils/isEmptyObject.ts
@@ -0,0 +1,3 @@
+export default function isEmptyObject(object = {}) {
+ return Object.keys(object).length === 0 && object.constructor === Object
+}
diff --git a/packages/core/src/utils/mergeAttributes.ts b/packages/core/src/utils/mergeAttributes.ts
new file mode 100644
index 00000000..136e3c5b
--- /dev/null
+++ b/packages/core/src/utils/mergeAttributes.ts
@@ -0,0 +1,25 @@
+import { AnyObject } from '../types'
+
+export default function mergeAttributes(...object: AnyObject[]) {
+ return object.reduce((items, item) => {
+ const mergedAttributes = { ...items }
+
+ Object.entries(item).forEach(([key, value]) => {
+ if (!mergedAttributes[key]) {
+ mergedAttributes[key] = value
+ return
+ }
+
+ if (key === 'class') {
+ mergedAttributes[key] = [mergedAttributes[key], value].join(' ')
+ return
+ }
+
+ if (key === 'style') {
+ mergedAttributes[key] = [mergedAttributes[key], value].join('; ')
+ }
+ })
+
+ return mergedAttributes
+ }, {})
+}
diff --git a/packages/core/src/utils/resolveExtensionConfig.ts b/packages/core/src/utils/resolveExtensionConfig.ts
deleted file mode 100644
index 05a73ded..00000000
--- a/packages/core/src/utils/resolveExtensionConfig.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import deepmerge from 'deepmerge'
-import Extension from '../Extension'
-import Node from '../Node'
-import Mark from '../Mark'
-
-export default function resolveExtensionConfig(
- extension: Extension | Node | Mark,
- name: string,
- props = {},
-): void {
- if (!extension.configs[name]) {
- return
- }
-
- extension.config[name] = extension.configs[name]
- .reduce((accumulator, { stategy, value: rawValue }) => {
- const value = typeof rawValue === 'function'
- ? rawValue(props)
- : rawValue
-
- if (accumulator === undefined) {
- return value
- }
-
- if (stategy === 'overwrite') {
- return value
- }
-
- if (stategy === 'extend') {
- return deepmerge(accumulator, value)
- }
-
- return accumulator
- }, undefined)
-}
diff --git a/packages/core/src/utils/splitExtensions.ts b/packages/core/src/utils/splitExtensions.ts
new file mode 100644
index 00000000..b34a853d
--- /dev/null
+++ b/packages/core/src/utils/splitExtensions.ts
@@ -0,0 +1,16 @@
+import { Extensions } from '../types'
+import { Extension } from '../Extension'
+import { NodeExtension } from '../NodeExtension'
+import { MarkExtension } from '../MarkExtension'
+
+export default function splitExtensions(extensions: Extensions) {
+ const baseExtensions = extensions.filter(extension => extension.type === 'extension') as Extension[]
+ const nodeExtensions = extensions.filter(extension => extension.type === 'node') as NodeExtension[]
+ const markExtensions = extensions.filter(extension => extension.type === 'mark') as MarkExtension[]
+
+ return {
+ baseExtensions,
+ nodeExtensions,
+ markExtensions,
+ }
+}
diff --git a/packages/extension-blockquote/index.ts b/packages/extension-blockquote/index.ts
index d01c6fe9..dc6d5a01 100644
--- a/packages/extension-blockquote/index.ts
+++ b/packages/extension-blockquote/index.ts
@@ -1,37 +1,52 @@
-import { Command, Node } from '@tiptap/core'
+import { Command, createNode } from '@tiptap/core'
import { wrappingInputRule } from 'prosemirror-inputrules'
-export type BlockquoteCommand = () => Command
-
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- blockquote: BlockquoteCommand,
- }
-}
-
export const inputRegex = /^\s*>\s$/gm
-export default new Node()
- .name('blockquote')
- .schema(() => ({
- content: 'block*',
- group: 'block',
- defining: true,
- draggable: false,
- parseDOM: [
+const Blockquote = createNode({
+ name: 'blockquote',
+
+ content: 'block*',
+
+ group: 'block',
+
+ defining: true,
+
+ parseHTML() {
+ return [
{ tag: 'blockquote' },
- ],
- toDOM: () => ['blockquote', 0],
- }))
- .commands(({ name }) => ({
- [name]: () => ({ commands }) => {
- return commands.toggleWrap(name)
- },
- }))
- .keys(({ editor }) => ({
- 'Shift-Mod-9': () => editor.blockquote(),
- }))
- .inputRules(({ type }) => [
- wrappingInputRule(inputRegex, type),
- ])
- .create()
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['blockquote', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ blockquote: (): Command => ({ commands }) => {
+ return commands.toggleWrap('blockquote')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Shift-Mod-9': () => this.editor.blockquote(),
+ }
+ },
+
+ addInputRules() {
+ return [
+ wrappingInputRule(inputRegex, this.type),
+ ]
+ },
+})
+
+export default Blockquote
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Blockquote: typeof Blockquote,
+ }
+}
diff --git a/packages/extension-bold/index.ts b/packages/extension-bold/index.ts
index 5f937e56..21f8c58c 100644
--- a/packages/extension-bold/index.ts
+++ b/packages/extension-bold/index.ts
@@ -1,24 +1,17 @@
import {
- Command, Mark, markInputRule, markPasteRule,
+ Command, createMark, markInputRule, markPasteRule,
} from '@tiptap/core'
-export type BoldCommand = () => Command
-
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- bold: BoldCommand,
- }
-}
-
export const starInputRegex = /(?:^|\s)((?:\*\*)((?:[^*]+))(?:\*\*))$/gm
export const starPasteRegex = /(?:^|\s)((?:\*\*)((?:[^*]+))(?:\*\*))/gm
export const underscoreInputRegex = /(?:^|\s)((?:__)((?:[^__]+))(?:__))$/gm
export const underscorePasteRegex = /(?:^|\s)((?:__)((?:[^__]+))(?:__))/gm
-export default new Mark()
- .name('bold')
- .schema(() => ({
- parseDOM: [
+const Bold = createMark({
+ name: 'bold',
+
+ parseHTML() {
+ return [
{
tag: 'strong',
},
@@ -30,23 +23,49 @@ export default new Mark()
style: 'font-weight',
getAttrs: value => /^(bold(er)?|[5-9]\d{2,})$/.test(value as string) && null,
},
- ],
- toDOM: () => ['strong', 0],
- }))
- .commands(({ name }) => ({
- bold: () => ({ commands }) => {
- return commands.toggleMark(name)
- },
- }))
- .keys(({ editor }) => ({
- 'Mod-b': () => editor.bold(),
- }))
- .inputRules(({ type }) => [
- markInputRule(starInputRegex, type),
- markInputRule(underscoreInputRegex, type),
- ])
- .pasteRules(({ type }) => [
- markPasteRule(starPasteRegex, type),
- markPasteRule(underscorePasteRegex, type),
- ])
- .create()
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['strong', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ /**
+ * bold command
+ */
+ bold: (): Command => ({ commands }) => {
+ return commands.toggleMark('bold')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-b': () => this.editor.bold(),
+ }
+ },
+
+ addInputRules() {
+ return [
+ markInputRule(starInputRegex, this.type),
+ markInputRule(underscoreInputRegex, this.type),
+ ]
+ },
+
+ addPasteRules() {
+ return [
+ markPasteRule(starPasteRegex, this.type),
+ markPasteRule(underscorePasteRegex, this.type),
+ ]
+ },
+})
+
+export default Bold
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Bold: typeof Bold,
+ }
+}
diff --git a/packages/extension-bullet-list/index.ts b/packages/extension-bullet-list/index.ts
index e2f0fba2..45e6bc18 100644
--- a/packages/extension-bullet-list/index.ts
+++ b/packages/extension-bullet-list/index.ts
@@ -1,33 +1,48 @@
-import { Command, Node } from '@tiptap/core'
+import { Command, createNode } from '@tiptap/core'
import { wrappingInputRule } from 'prosemirror-inputrules'
-export type BulletListCommand = () => Command
+const BulletList = createNode({
+ name: 'bullet_list',
+
+ content: 'list_item+',
+
+ group: 'block',
+
+ parseHTML() {
+ return [
+ { tag: 'ul' },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['ul', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ bulletList: (): Command => ({ commands }) => {
+ return commands.toggleList('bullet_list', 'list_item')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Shift-Control-8': () => this.editor.bulletList(),
+ }
+ },
+
+ addInputRules() {
+ return [
+ wrappingInputRule(/^\s*([-+*])\s$/, this.type),
+ ]
+ },
+})
+
+export default BulletList
declare module '@tiptap/core/src/Editor' {
- interface Commands {
- bulletList: BulletListCommand,
+ interface AllExtensions {
+ BulletList: typeof BulletList,
}
}
-
-export default new Node()
- .name('bullet_list')
- .schema(() => ({
- content: 'list_item+',
- group: 'block',
- parseDOM: [
- { tag: 'ul' },
- ],
- toDOM: () => ['ul', 0],
- }))
- .commands(({ name }) => ({
- bulletList: () => ({ commands }) => {
- return commands.toggleList(name, 'list_item')
- },
- }))
- .keys(({ editor }) => ({
- 'Shift-Control-8': () => editor.bulletList(),
- }))
- .inputRules(({ type }) => [
- wrappingInputRule(/^\s*([-+*])\s$/, type),
- ])
- .create()
diff --git a/packages/extension-code-block/index.ts b/packages/extension-code-block/index.ts
index 4119e7ec..3cd4e1dd 100644
--- a/packages/extension-code-block/index.ts
+++ b/packages/extension-code-block/index.ts
@@ -1,67 +1,99 @@
-import { Command, Node } from '@tiptap/core'
+import { Command, createNode } from '@tiptap/core'
import { textblockTypeInputRule } from 'prosemirror-inputrules'
export interface CodeBlockOptions {
languageClassPrefix: string,
}
-export type CodeBlockCommand = () => Command
+export const backtickInputRegex = /^```(?[a-z]*)? $/
+export const tildeInputRegex = /^~~~(?[a-z]*)? $/
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- codeBlock: CodeBlockCommand,
- }
-}
+const CodeBlock = createNode({
+ name: 'code_block',
-export const inputRegex = /^```(?[a-z]*)? $/
-
-export default new Node()
- .name('code_block')
- .defaults({
+ defaultOptions: {
languageClassPrefix: 'language-',
- })
- .schema(({ options }) => ({
- attrs: {
+ },
+
+ content: 'text*',
+
+ marks: '',
+
+ group: 'block',
+
+ code: true,
+
+ defining: true,
+
+ addAttributes() {
+ return {
language: {
default: null,
- },
- },
- content: 'text*',
- marks: '',
- group: 'block',
- code: true,
- defining: true,
- draggable: false,
- parseDOM: [
- {
- tag: 'pre',
- preserveWhitespace: 'full',
- getAttrs(node) {
- const classAttribute = (node as Element).firstElementChild?.getAttribute('class')
+ parseHTML: element => {
+ const classAttribute = element.firstElementChild?.getAttribute('class')
if (!classAttribute) {
return null
}
- const regexLanguageClassPrefix = new RegExp(`^(${options.languageClassPrefix})`)
+ const regexLanguageClassPrefix = new RegExp(`^(${this.options.languageClassPrefix})`)
- return { language: classAttribute.replace(regexLanguageClassPrefix, '') }
+ return {
+ language: classAttribute.replace(regexLanguageClassPrefix, ''),
+ }
+ },
+ renderHTML: attributes => {
+ if (!attributes.language) {
+ return null
+ }
+
+ return {
+ class: this.options.languageClassPrefix + attributes.language,
+ }
},
},
- ],
- toDOM: node => ['pre', ['code', {
- class: node.attrs.language && options.languageClassPrefix + node.attrs.language,
- }, 0]],
- }))
- .commands(({ name }) => ({
- codeBlock: attrs => ({ commands }) => {
- return commands.toggleBlockType(name, 'paragraph', attrs)
- },
- }))
- .keys(({ editor }) => ({
- 'Shift-Control-\\': () => editor.codeBlock(),
- }))
- .inputRules(({ type }) => [
- textblockTypeInputRule(inputRegex, type, ({ groups }: any) => groups),
- ])
- .create()
+ }
+ },
+
+ parseHTML() {
+ return [
+ {
+ tag: 'pre',
+ preserveWhitespace: 'full',
+ },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['pre', ['code', attributes, 0]]
+ },
+
+ addCommands() {
+ return {
+ codeBlock: (attrs?: CodeBlockOptions): Command => ({ commands }) => {
+ return commands.toggleBlockType('code_block', 'paragraph', attrs)
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-Shift-c': () => this.editor.codeBlock(),
+ }
+ },
+
+ addInputRules() {
+ return [
+ textblockTypeInputRule(backtickInputRegex, this.type, ({ groups }: any) => groups),
+ textblockTypeInputRule(tildeInputRegex, this.type, ({ groups }: any) => groups),
+ ]
+ },
+})
+
+export default CodeBlock
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ CodeBlock: typeof CodeBlock,
+ }
+}
diff --git a/packages/extension-code/index.ts b/packages/extension-code/index.ts
index b9615fd0..7dcc8f5d 100644
--- a/packages/extension-code/index.ts
+++ b/packages/extension-code/index.ts
@@ -1,39 +1,56 @@
import {
- Command, Mark, markInputRule, markPasteRule,
+ Command, createMark, markInputRule, markPasteRule,
} from '@tiptap/core'
-export type CodeCommand = () => Command
-
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- code: CodeCommand,
- }
-}
-
export const inputRegex = /(?:^|\s)((?:`)((?:[^`]+))(?:`))$/gm
export const pasteRegex = /(?:^|\s)((?:`)((?:[^`]+))(?:`))/gm
-export default new Mark()
- .name('code')
- .schema(() => ({
- excludes: '_',
- parseDOM: [
+const Code = createMark({
+ name: 'code',
+
+ excludes: '_',
+
+ parseHTML() {
+ return [
{ tag: 'code' },
- ],
- toDOM: () => ['code', 0],
- }))
- .commands(({ name }) => ({
- code: () => ({ commands }) => {
- return commands.toggleMark(name)
- },
- }))
- .keys(({ editor }) => ({
- 'Mod-`': () => editor.code(),
- }))
- .inputRules(({ type }) => [
- markInputRule(inputRegex, type),
- ])
- .pasteRules(({ type }) => [
- markPasteRule(inputRegex, type),
- ])
- .create()
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['code', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ code: (): Command => ({ commands }) => {
+ return commands.toggleMark('code')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-`': () => this.editor.code(),
+ }
+ },
+
+ addInputRules() {
+ return [
+ markInputRule(inputRegex, this.type),
+ ]
+ },
+
+ addPasteRules() {
+ return [
+ markPasteRule(inputRegex, this.type),
+ ]
+ },
+})
+
+export default Code
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Code: typeof Code,
+ }
+}
diff --git a/packages/extension-collaboration-cursor/index.ts b/packages/extension-collaboration-cursor/index.ts
index cacb30a9..c969fa95 100644
--- a/packages/extension-collaboration-cursor/index.ts
+++ b/packages/extension-collaboration-cursor/index.ts
@@ -1,4 +1,4 @@
-import { Extension, Command } from '@tiptap/core'
+import { createExtension, Command } from '@tiptap/core'
import { yCursorPlugin } from 'y-prosemirror'
export interface CollaborationCursorOptions {
@@ -8,27 +8,8 @@ export interface CollaborationCursorOptions {
render (user: { name: string, color: string }): HTMLElement,
}
-export type UserCommand = (attributes: {
- name: string,
- color: string,
-}) => Command
-
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- user: UserCommand,
- }
-}
-
-export default new Extension()
- .name('collaboration_cursor')
- .commands(({ options }) => ({
- user: attributes => () => {
- options.provider.awareness.setLocalStateField('user', attributes)
-
- return true
- },
- }))
- .defaults({
+const CollaborationCursor = createExtension({
+ defaultOptions: {
provider: null,
name: 'Someone',
color: '#cccccc',
@@ -45,19 +26,43 @@ export default new Extension()
return cursor
},
- })
- .plugins(({ options }) => [
- yCursorPlugin((() => {
- options.provider.awareness.setLocalStateField('user', {
- name: options.name,
- color: options.color,
- })
+ },
- return options.provider.awareness
- })(),
- // @ts-ignore
- {
- cursorBuilder: options.render,
- }),
- ])
- .create()
+ addCommands() {
+ return {
+ user: (attributes: {
+ name: string,
+ color: string,
+ }): Command => () => {
+ this.options.provider.awareness.setLocalStateField('user', attributes)
+
+ return true
+ },
+ }
+ },
+
+ addProseMirrorPlugins() {
+ return [
+ yCursorPlugin((() => {
+ this.options.provider.awareness.setLocalStateField('user', {
+ name: this.options.name,
+ color: this.options.color,
+ })
+
+ return this.options.provider.awareness
+ })(),
+ // @ts-ignore
+ {
+ cursorBuilder: this.options.render,
+ }),
+ ]
+ },
+})
+
+export default CollaborationCursor
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ CollaborationCursor: typeof CollaborationCursor,
+ }
+}
diff --git a/packages/extension-collaboration/index.ts b/packages/extension-collaboration/index.ts
index e734b370..d4427f14 100644
--- a/packages/extension-collaboration/index.ts
+++ b/packages/extension-collaboration/index.ts
@@ -1,4 +1,4 @@
-import { Extension } from '@tiptap/core'
+import { createExtension } from '@tiptap/core'
import {
redo, undo, ySyncPlugin, yUndoPlugin,
} from 'y-prosemirror'
@@ -8,21 +8,32 @@ export interface CollaborationOptions {
type: any,
}
-export default new Extension()
- .name('collaboration')
- .defaults({
+const Collaboration = createExtension({
+ defaultOptions: {
provider: null,
type: null,
- })
- .plugins(({ options }) => [
- ySyncPlugin(options.type),
- yUndoPlugin(),
- ])
- .keys(() => {
+ },
+
+ addProseMirrorPlugins() {
+ return [
+ ySyncPlugin(this.options.type),
+ yUndoPlugin(),
+ ]
+ },
+
+ addKeyboardShortcuts() {
return {
'Mod-z': undo,
'Mod-y': redo,
'Mod-Shift-z': redo,
}
- })
- .create()
+ },
+})
+
+export default Collaboration
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Collaboration: typeof Collaboration,
+ }
+}
diff --git a/packages/extension-document/index.ts b/packages/extension-document/index.ts
index 11e688aa..d569b12f 100644
--- a/packages/extension-document/index.ts
+++ b/packages/extension-document/index.ts
@@ -1,9 +1,15 @@
-import { Node } from '@tiptap/core'
+import { createNode } from '@tiptap/core'
-export default new Node()
- .name('document')
- .topNode()
- .schema(() => ({
- content: 'block+',
- }))
- .create()
+const Document = createNode({
+ name: 'document',
+ topNode: true,
+ content: 'block+',
+})
+
+export default Document
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Document: typeof Document,
+ }
+}
diff --git a/packages/extension-focus/index.ts b/packages/extension-focus/index.ts
index c4388807..77070018 100644
--- a/packages/extension-focus/index.ts
+++ b/packages/extension-focus/index.ts
@@ -1,4 +1,4 @@
-import { Extension } from '@tiptap/core'
+import { createExtension } from '@tiptap/core'
import { Plugin } from 'prosemirror-state'
import { DecorationSet, Decoration } from 'prosemirror-view'
@@ -7,40 +7,50 @@ export interface FocusOptions {
nested: boolean,
}
-export default new Extension()
- .name('focus')
- .defaults({
+const FocusClasses = createExtension({
+ defaultOptions: {
className: 'has-focus',
nested: false,
- })
- .plugins(({ editor, options }) => [
- new Plugin({
- props: {
- decorations: ({ doc, selection }) => {
- const { isEditable, isFocused } = editor
- const { anchor } = selection
- const decorations: Decoration[] = []
+ },
- if (!isEditable || !isFocused) {
- return DecorationSet.create(doc, [])
- }
+ addProseMirrorPlugins() {
+ return [
+ new Plugin({
+ props: {
+ decorations: ({ doc, selection }) => {
+ const { isEditable, isFocused } = this.editor
+ const { anchor } = selection
+ const decorations: Decoration[] = []
- doc.descendants((node, pos) => {
- const hasAnchor = anchor >= pos && anchor <= (pos + node.nodeSize)
-
- if (hasAnchor && !node.isText) {
- const decoration = Decoration.node(pos, pos + node.nodeSize, {
- class: options.className,
- })
- decorations.push(decoration)
+ if (!isEditable || !isFocused) {
+ return DecorationSet.create(doc, [])
}
- return options.nested
- })
+ doc.descendants((node, pos) => {
+ const hasAnchor = anchor >= pos && anchor <= (pos + node.nodeSize)
- return DecorationSet.create(doc, decorations)
+ if (hasAnchor && !node.isText) {
+ const decoration = Decoration.node(pos, pos + node.nodeSize, {
+ class: this.options.className,
+ })
+ decorations.push(decoration)
+ }
+
+ return this.options.nested
+ })
+
+ return DecorationSet.create(doc, decorations)
+ },
},
- },
- }),
- ])
- .create()
+ }),
+ ]
+ },
+})
+
+export default FocusClasses
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ FocusClasses: typeof FocusClasses,
+ }
+}
diff --git a/packages/extension-hard-break/index.ts b/packages/extension-hard-break/index.ts
index fee38fbe..69c0d4dc 100644
--- a/packages/extension-hard-break/index.ts
+++ b/packages/extension-hard-break/index.ts
@@ -1,37 +1,50 @@
-import { Command, Node } from '@tiptap/core'
+import { Command, createNode } from '@tiptap/core'
import { chainCommands, exitCode } from 'prosemirror-commands'
-export type HardBreakCommand = () => Command
+const HardBreak = createNode({
+ name: 'hardBreak',
+
+ inline: true,
+
+ group: 'inline',
+
+ selectable: false,
+
+ parseHTML() {
+ return [
+ { tag: 'br' },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['br', attributes]
+ },
+
+ addCommands() {
+ return {
+ hardBreak: (): Command => ({
+ tr, state, dispatch, view,
+ }) => {
+ return chainCommands(exitCode, () => {
+ dispatch(tr.replaceSelectionWith(this.type.create()).scrollIntoView())
+ return true
+ })(state, dispatch, view)
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-Enter': () => this.editor.hardBreak(),
+ 'Shift-Enter': () => this.editor.hardBreak(),
+ }
+ },
+})
+
+export default HardBreak
declare module '@tiptap/core/src/Editor' {
- interface Commands {
- hardBreak: HardBreakCommand,
+ interface AllExtensions {
+ HardBreak: typeof HardBreak,
}
}
-
-export default new Node()
- .name('hardBreak')
- .schema(() => ({
- inline: true,
- group: 'inline',
- selectable: false,
- parseDOM: [
- { tag: 'br' },
- ],
- toDOM: () => ['br'],
- }))
- .commands(({ type }) => ({
- hardBreak: () => ({
- tr, state, dispatch, view,
- }) => {
- return chainCommands(exitCode, () => {
- dispatch(tr.replaceSelectionWith(type.create()).scrollIntoView())
- return true
- })(state, dispatch, view)
- },
- }))
- .keys(({ editor }) => ({
- 'Mod-Enter': () => editor.hardBreak(),
- 'Shift-Enter': () => editor.hardBreak(),
- }))
- .create()
diff --git a/packages/extension-heading/index.ts b/packages/extension-heading/index.ts
index ba647b78..223e6717 100644
--- a/packages/extension-heading/index.ts
+++ b/packages/extension-heading/index.ts
@@ -1,4 +1,4 @@
-import { Command, Node } from '@tiptap/core'
+import { Command, createNode } from '@tiptap/core'
import { textblockTypeInputRule } from 'prosemirror-inputrules'
type Level = 1 | 2 | 3 | 4 | 5 | 6
@@ -7,52 +7,71 @@ export interface HeadingOptions {
levels: Level[],
}
-export type HeadingCommand = (options: { level: Level }) => Command
+const Heading = createNode({
+ name: 'heading',
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- heading: HeadingCommand,
- }
-}
-
-export default new Node()
- .name('heading')
- .defaults({
+ defaultOptions: {
levels: [1, 2, 3, 4, 5, 6],
- })
- .schema(({ options }) => ({
- attrs: {
+ },
+
+ content: 'inline*',
+
+ group: 'block',
+
+ defining: true,
+
+ addAttributes() {
+ return {
level: {
default: 1,
+ rendered: false,
},
- },
- content: 'inline*',
- group: 'block',
- defining: true,
- draggable: false,
- parseDOM: options.levels
+ }
+ },
+
+ parseHTML() {
+ return this.options.levels
.map((level: Level) => ({
tag: `h${level}`,
attrs: { level },
- })),
- toDOM: node => [`h${node.attrs.level}`, 0],
- }))
- .commands(({ name }) => ({
- heading: attrs => ({ commands }) => {
- return commands.toggleBlockType(name, 'paragraph', attrs)
- },
- }))
- .keys(({ name, options, editor }) => {
- return options.levels.reduce((items, level) => ({
+ }))
+ },
+
+ renderHTML({ node, attributes }) {
+ return [`h${node.attrs.level}`, attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ /**
+ * heading command
+ */
+ heading: (options: { level: Level }): Command => ({ commands }) => {
+ return commands.toggleBlockType('heading', 'paragraph', options)
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return this.options.levels.reduce((items, level) => ({
...items,
...{
- [`Mod-Alt-${level}`]: () => editor.setBlockType(name, { level }),
+ [`Mod-Alt-${level}`]: () => this.editor.setBlockType('heading', { level }),
},
}), {})
- })
- .inputRules(({ options, type }) => {
- return options.levels.map((level: Level) => {
- return textblockTypeInputRule(new RegExp(`^(#{1,${level}})\\s$`), type, { level })
+ },
+
+ addInputRules() {
+ return this.options.levels.map(level => {
+ return textblockTypeInputRule(new RegExp(`^(#{1,${level}})\\s$`), this.type, { level })
})
- })
- .create()
+ },
+})
+
+export default Heading
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Heading: typeof Heading,
+ }
+}
diff --git a/packages/extension-history/index.ts b/packages/extension-history/index.ts
index 3401b4e9..b9ff706b 100644
--- a/packages/extension-history/index.ts
+++ b/packages/extension-history/index.ts
@@ -1,42 +1,47 @@
-import { Command, Extension } from '@tiptap/core'
-import {
- history,
- undo,
- redo,
-} from 'prosemirror-history'
-
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- undo: () => Command,
- redo: () => Command,
- }
-}
+import { Command, createExtension } from '@tiptap/core'
+import { history, undo, redo } from 'prosemirror-history'
export interface HistoryOptions {
depth: number,
newGroupDelay: number,
}
-export default new Extension()
- .name('history')
- .defaults({
+const History = createExtension({
+ defaultOptions: {
depth: 100,
newGroupDelay: 500,
- })
- .commands(() => ({
- undo: () => ({ state, dispatch }) => {
- return undo(state, dispatch)
- },
- redo: () => ({ state, dispatch }) => {
- return redo(state, dispatch)
- },
- }))
- .keys(({ editor }) => ({
- 'Mod-z': () => editor.undo(),
- 'Mod-y': () => editor.redo(),
- 'Shift-Mod-z': () => editor.redo(),
- }))
- .plugins(({ options }) => [
- history(options),
- ])
- .create()
+ },
+
+ addCommands() {
+ return {
+ undo: (): Command => ({ state, dispatch }) => {
+ return undo(state, dispatch)
+ },
+ redo: (): Command => ({ state, dispatch }) => {
+ return redo(state, dispatch)
+ },
+ }
+ },
+
+ addProseMirrorPlugins() {
+ return [
+ history(this.options),
+ ]
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-z': () => this.editor.undo(),
+ 'Mod-y': () => this.editor.redo(),
+ 'Shift-Mod-z': () => this.editor.redo(),
+ }
+ },
+})
+
+export default History
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ History: typeof History,
+ }
+}
diff --git a/packages/extension-horizontal-rule/index.ts b/packages/extension-horizontal-rule/index.ts
index 9398a6d7..73f5b7d2 100644
--- a/packages/extension-horizontal-rule/index.ts
+++ b/packages/extension-horizontal-rule/index.ts
@@ -1,28 +1,41 @@
-import { Command, Node, nodeInputRule } from '@tiptap/core'
+import { Command, createNode, nodeInputRule } from '@tiptap/core'
-export type HorizontalRuleCommand = () => Command
+const HorizontalRule = createNode({
+ name: 'horizontalRule',
+
+ group: 'block',
+
+ parseHTML() {
+ return [
+ { tag: 'hr' },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['hr', attributes]
+ },
+
+ addCommands() {
+ return {
+ horizontalRule: (): Command => ({ tr }) => {
+ tr.replaceSelectionWith(this.type.create())
+
+ return true
+ },
+ }
+ },
+
+ addInputRules() {
+ return [
+ nodeInputRule(/^(?:---|___\s|\*\*\*\s)$/, this.type),
+ ]
+ },
+})
+
+export default HorizontalRule
declare module '@tiptap/core/src/Editor' {
- interface Commands {
- horizontalRule: HorizontalRuleCommand,
+ interface AllExtensions {
+ HorizontalRule: typeof HorizontalRule,
}
}
-
-export default new Node()
- .name('horizontalRule')
- .schema(() => ({
- group: 'block',
- parseDOM: [{ tag: 'hr' }],
- toDOM: () => ['hr'],
- }))
- .commands(({ type }) => ({
- horizontalRule: () => ({ tr }) => {
- tr.replaceSelectionWith(type.create())
-
- return true
- },
- }))
- .inputRules(({ type }) => [
- nodeInputRule(/^(?:---|___\s|\*\*\*\s)$/, type),
- ])
- .create()
diff --git a/packages/extension-image/index.ts b/packages/extension-image/index.ts
new file mode 100644
index 00000000..605a4b52
--- /dev/null
+++ b/packages/extension-image/index.ts
@@ -0,0 +1,125 @@
+import { Command, createNode, nodeInputRule } from '@tiptap/core'
+import { Plugin } from 'prosemirror-state'
+
+const IMAGE_INPUT_REGEX = /!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\)/
+
+const Image = createNode({
+ name: 'image',
+
+ inline: true,
+
+ group: 'inline',
+
+ addAttributes() {
+ return {
+ src: {
+ default: null,
+ },
+ alt: {
+ default: null,
+ },
+ title: {
+ default: null,
+ },
+ }
+ },
+
+ parseHTML() {
+ return [
+ {
+ tag: 'img[src]',
+ },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['img', attributes]
+ },
+
+ addCommands() {
+ return {
+ image: (attrs: any): Command => ({ tr }) => {
+ const { selection } = tr
+ console.log({ selection })
+ // const position = selection.$cursor ? selection.$cursor.pos : selection.$to.pos
+ const position = selection.$anchor ? selection.$anchor.pos : selection.$to.pos
+ const node = this.type.create(attrs)
+ tr.insert(position, node)
+
+ return true
+ },
+ }
+ },
+
+ addInputRules() {
+ return [
+ nodeInputRule(IMAGE_INPUT_REGEX, this.type, match => {
+ const [, alt, src, title] = match
+ return {
+ src,
+ alt,
+ title,
+ }
+ }),
+ ]
+ },
+
+ addProseMirrorPlugins() {
+ return [
+ new Plugin({
+ props: {
+ handleDOMEvents: {
+ drop(view, event) {
+ const hasFiles = event.dataTransfer
+ && event.dataTransfer.files
+ && event.dataTransfer.files.length
+
+ if (!hasFiles) {
+ return false
+ }
+
+ const images = Array
+ // @ts-ignore
+ .from(event.dataTransfer.files)
+ .filter(file => (/image/i).test(file.type))
+
+ if (images.length === 0) {
+ return false
+ }
+
+ event.preventDefault()
+
+ const { schema } = view.state
+ const coordinates = view.posAtCoords({ left: event.clientX, top: event.clientY })
+
+ images.forEach(image => {
+ const reader = new FileReader()
+
+ reader.onload = readerEvent => {
+ const node = schema.nodes.image.create({
+ // @ts-ignore
+ src: readerEvent.target.result,
+ })
+ // @ts-ignore
+ const transaction = view.state.tr.insert(coordinates.pos, node)
+ view.dispatch(transaction)
+ }
+ reader.readAsDataURL(image)
+ })
+
+ return true
+ },
+ },
+ },
+ }),
+ ]
+ },
+})
+
+export default Image
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Image: typeof Image,
+ }
+}
diff --git a/packages/extension-image/package.json b/packages/extension-image/package.json
new file mode 100644
index 00000000..5b017870
--- /dev/null
+++ b/packages/extension-image/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@tiptap/extension-image",
+ "version": "1.0.0",
+ "source": "index.ts",
+ "main": "dist/tiptap-extension-image.js",
+ "umd:main": "dist/tiptap-extension-image.umd.js",
+ "module": "dist/tiptap-extension-image.mjs",
+ "unpkg": "dist/tiptap-extension-image.js",
+ "jsdelivr": "dist/tiptap-extension-image.js",
+ "files": [
+ "src",
+ "dist"
+ ],
+ "peerDependencies": {
+ "@tiptap/core": "2.x"
+ }
+}
diff --git a/packages/extension-italic/index.ts b/packages/extension-italic/index.ts
index e6021921..4e1cafc9 100644
--- a/packages/extension-italic/index.ts
+++ b/packages/extension-italic/index.ts
@@ -1,44 +1,67 @@
import {
- Command, Mark, markInputRule, markPasteRule,
+ Command, createMark, markInputRule, markPasteRule,
} from '@tiptap/core'
-export type ItalicCommand = () => Command
-
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- italic: ItalicCommand,
- }
-}
-
export const starInputRegex = /(?:^|\s)((?:\*)((?:[^*]+))(?:\*))$/gm
export const starPasteRegex = /(?:^|\s)((?:\*)((?:[^*]+))(?:\*))/gm
export const underscoreInputRegex = /(?:^|\s)((?:_)((?:[^_]+))(?:_))$/gm
export const underscorePasteRegex = /(?:^|\s)((?:_)((?:[^_]+))(?:_))/gm
-export default new Mark()
- .name('italic')
- .schema(() => ({
- parseDOM: [
- { tag: 'i' },
- { tag: 'em' },
- { style: 'font-style=italic' },
- ],
- toDOM: () => ['em', 0],
- }))
- .commands(({ name }) => ({
- italic: () => ({ commands }) => {
- return commands.toggleMark(name)
- },
- }))
- .keys(({ editor }) => ({
- 'Mod-i': () => editor.italic(),
- }))
- .inputRules(({ type }) => [
- markInputRule(starInputRegex, type),
- markInputRule(underscoreInputRegex, type),
- ])
- .pasteRules(({ type }) => [
- markPasteRule(starPasteRegex, type),
- markPasteRule(underscorePasteRegex, type),
- ])
- .create()
+const Italic = createMark({
+ name: 'italic',
+
+ parseHTML() {
+ return [
+ {
+ tag: 'em',
+ },
+ {
+ tag: 'i',
+ getAttrs: node => (node as HTMLElement).style.fontStyle !== 'normal' && null,
+ },
+ {
+ style: 'font-style=italic',
+ },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['em', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ italic: (): Command => ({ commands }) => {
+ return commands.toggleMark('italic')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-i': () => this.editor.italic(),
+ }
+ },
+
+ addInputRules() {
+ return [
+ markInputRule(starInputRegex, this.type),
+ markInputRule(underscoreInputRegex, this.type),
+ ]
+ },
+
+ addPasteRules() {
+ return [
+ markPasteRule(starPasteRegex, this.type),
+ markPasteRule(underscorePasteRegex, this.type),
+ ]
+ },
+})
+
+export default Italic
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Italic: typeof Italic,
+ }
+}
diff --git a/packages/extension-link/index.ts b/packages/extension-link/index.ts
index a306bced..42e261c9 100644
--- a/packages/extension-link/index.ts
+++ b/packages/extension-link/index.ts
@@ -1,5 +1,5 @@
import {
- Command, Mark, markPasteRule,
+ Command, createMark, markPasteRule, mergeAttributes,
} from '@tiptap/core'
import { Plugin, PluginKey } from 'prosemirror-state'
@@ -9,62 +9,60 @@ export interface LinkOptions {
rel: string,
}
-export type LinkCommand = (options: {href?: string, target?: string}) => Command
-
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- link: LinkCommand,
- }
-}
-
export const pasteRegex = /https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z]{2,}\b(?:[-a-zA-Z0-9@:%_+.~#?&//=]*)/gi
-export default new Mark()
- .name('link')
- .defaults({
+const Link = createMark({
+ name: 'link',
+
+ inclusive: false,
+
+ defaultOptions: {
openOnClick: true,
target: '_blank',
rel: 'noopener noreferrer nofollow',
- })
- .schema(({ options }) => ({
- attrs: {
+ },
+
+ addAttributes() {
+ return {
href: {
default: null,
},
target: {
- default: null,
+ default: this.options.target,
},
- },
- inclusive: false,
- parseDOM: [
- {
- tag: 'a[href]',
- getAttrs: node => ({
- href: (node as HTMLElement).getAttribute('href'),
- target: (node as HTMLElement).getAttribute('target'),
- }),
- },
- ],
- toDOM: node => ['a', {
- ...node.attrs,
- rel: options.rel,
- target: node.attrs.target ? node.attrs.target : options.target,
- }, 0],
- }))
- .commands(({ name }) => ({
- link: attributes => ({ commands }) => {
- if (!attributes.href) {
- return commands.removeMark(name)
- }
+ }
+ },
- return commands.updateMark(name, attributes)
- },
- }))
- .pasteRules(({ type }) => [
- markPasteRule(pasteRegex, type, (url: string) => ({ href: url })),
- ])
- .plugins(({ editor, options, name }) => {
- if (!options.openOnClick) {
+ parseHTML() {
+ return [
+ { tag: 'a[href]' },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['a', mergeAttributes(attributes, { rel: this.options.rel }), 0]
+ },
+
+ addCommands() {
+ return {
+ link: (options: { href?: string, target?: string } = {}): Command => ({ commands }) => {
+ if (!options.href) {
+ return commands.removeMark('link')
+ }
+
+ return commands.updateMark('link', options)
+ },
+ }
+ },
+
+ addPasteRules() {
+ return [
+ markPasteRule(pasteRegex, this.type, (url: string) => ({ href: url })),
+ ]
+ },
+
+ addProseMirrorPlugins() {
+ if (!this.options.openOnClick) {
return []
}
@@ -73,7 +71,7 @@ export default new Mark()
key: new PluginKey('handleClick'),
props: {
handleClick: (view, pos, event) => {
- const attrs = editor.getMarkAttrs(name)
+ const attrs = this.editor.getMarkAttrs('link')
if (attrs.href && event.target instanceof HTMLAnchorElement) {
window.open(attrs.href, attrs.target)
@@ -86,5 +84,13 @@ export default new Mark()
},
}),
]
- })
- .create()
+ },
+})
+
+export default Link
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Link: typeof Link,
+ }
+}
diff --git a/packages/extension-list-item/index.ts b/packages/extension-list-item/index.ts
index 28561bda..3bfa852a 100644
--- a/packages/extension-list-item/index.ts
+++ b/packages/extension-list-item/index.ts
@@ -1,17 +1,35 @@
-import { Node } from '@tiptap/core'
+import { createNode } from '@tiptap/core'
-export default new Node()
- .name('list_item')
- .schema(() => ({
- content: 'paragraph block*',
- defining: true,
- draggable: false,
- parseDOM: [{ tag: 'li' }],
- toDOM: () => ['li', 0],
- }))
- .keys(({ editor, name }) => ({
- Enter: () => editor.splitListItem(name),
- Tab: () => editor.sinkListItem(name),
- 'Shift-Tab': () => editor.liftListItem(name),
- }))
- .create()
+const ListItem = createNode({
+ name: 'list_item',
+
+ content: 'paragraph block*',
+
+ defining: true,
+
+ parseHTML() {
+ return [
+ { tag: 'li' },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['li', attributes, 0]
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ Enter: () => this.editor.splitListItem('list_item'),
+ Tab: () => this.editor.sinkListItem('list_item'),
+ 'Shift-Tab': () => this.editor.liftListItem('list_item'),
+ }
+ },
+})
+
+export default ListItem
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ ListItem: typeof ListItem,
+ }
+}
diff --git a/packages/extension-ordered-list/index.ts b/packages/extension-ordered-list/index.ts
index 14273ca2..0b678728 100644
--- a/packages/extension-ordered-list/index.ts
+++ b/packages/extension-ordered-list/index.ts
@@ -1,51 +1,72 @@
-import { Command, Node } from '@tiptap/core'
+import { Command, createNode } from '@tiptap/core'
import { wrappingInputRule } from 'prosemirror-inputrules'
-export type OrderedListCommand = () => Command
+const OrderedList = createNode({
+ name: 'ordered_list',
+
+ content: 'list_item+',
+
+ group: 'block',
+
+ addAttributes() {
+ return {
+ start: {
+ default: 1,
+ parseHTML: element => ({
+ start: element.hasAttribute('start')
+ ? parseInt(element.getAttribute('start') || '', 10)
+ : 1,
+ }),
+ },
+ }
+ },
+
+ parseHTML() {
+ return [
+ {
+ tag: 'ol',
+ },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ const { start, ...attributesWithoutStart } = attributes
+
+ return start === 1
+ ? ['ol', attributesWithoutStart, 0]
+ : ['ol', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ orderedList: (): Command => ({ commands }) => {
+ return commands.toggleList('ordered_list', 'list_item')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Shift-Control-9': () => this.editor.orderedList(),
+ }
+ },
+
+ addInputRules() {
+ return [
+ wrappingInputRule(
+ /^(\d+)\.\s$/,
+ this.type,
+ match => ({ order: +match[1] }),
+ (match, node) => node.childCount + node.attrs.order === +match[1],
+ ),
+ ]
+ },
+})
+
+export default OrderedList
declare module '@tiptap/core/src/Editor' {
- interface Commands {
- orderedList: OrderedListCommand,
+ interface AllExtensions {
+ OrderedList: typeof OrderedList,
}
}
-
-export default new Node()
- .name('ordered_list')
- .schema(() => ({
- attrs: {
- order: {
- default: 1,
- },
- },
- content: 'list_item+',
- group: 'block',
- parseDOM: [{
- tag: 'ol',
- getAttrs: node => ({
- order: (node as HTMLElement).hasAttribute('start')
- ? parseInt((node as HTMLElement).getAttribute('start') || '', 10)
- : 1,
- }),
- }],
- toDOM: node => (node.attrs.order === 1
- ? ['ol', 0]
- : ['ol', { start: node.attrs.order }, 0]
- ),
- }))
- .commands(({ name }) => ({
- orderedList: () => ({ commands }) => {
- return commands.toggleList(name, 'list_item')
- },
- }))
- .keys(({ editor }) => ({
- 'Shift-Control-9': () => editor.orderedList(),
- }))
- .inputRules(({ type }) => [
- wrappingInputRule(
- /^(\d+)\.\s$/,
- type,
- match => ({ order: +match[1] }),
- (match, node) => node.childCount + node.attrs.order === +match[1],
- ),
- ])
- .create()
diff --git a/packages/extension-paragraph/index.ts b/packages/extension-paragraph/index.ts
index b71a8133..59706d64 100644
--- a/packages/extension-paragraph/index.ts
+++ b/packages/extension-paragraph/index.ts
@@ -1,29 +1,42 @@
-import { Command, Node } from '@tiptap/core'
+import { Command, createNode } from '@tiptap/core'
// import ParagraphComponent from './paragraph.vue'
-export type ParagraphCommand = () => Command
+const Paragraph = createNode({
+ name: 'paragraph',
+
+ group: 'block',
+
+ content: 'inline*',
+
+ parseHTML() {
+ return [
+ { tag: 'p' },
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['p', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ paragraph: (): Command => ({ commands }) => {
+ return commands.toggleBlockType('paragraph', 'paragraph')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-Alt-0': () => this.editor.paragraph(),
+ }
+ },
+})
+
+export default Paragraph
declare module '@tiptap/core/src/Editor' {
- interface Commands {
- paragraph: ParagraphCommand,
+ interface AllExtensions {
+ Paragraph: typeof Paragraph,
}
}
-
-export default new Node()
- .name('paragraph')
- .schema(() => ({
- content: 'inline*',
- group: 'block',
- parseDOM: [{ tag: 'p' }],
- toDOM: () => ['p', 0],
- // toVue: ParagraphComponent,
- }))
- .commands(({ name }) => ({
- [name]: () => ({ commands }) => {
- return commands.toggleBlockType(name, 'paragraph')
- },
- }))
- .keys(({ editor }) => ({
- 'Mod-Alt-0': () => editor.paragraph(),
- }))
- .create()
diff --git a/packages/extension-strike/index.ts b/packages/extension-strike/index.ts
index 2f33e1cc..caedb10a 100644
--- a/packages/extension-strike/index.ts
+++ b/packages/extension-strike/index.ts
@@ -1,22 +1,15 @@
import {
- Command, Mark, markInputRule, markPasteRule,
+ Command, createMark, markInputRule, markPasteRule,
} from '@tiptap/core'
-type StrikeCommand = () => Command
+export const inputRegex = /(?:^|\s)((?:~~)((?:[^~]+))(?:~~))$/gm
+export const pasteRegex = /(?:^|\s)((?:~~)((?:[^~]+))(?:~~))/gm
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- strike: StrikeCommand,
- }
-}
+const Strike = createMark({
+ name: 'strike',
-export const inputRegex = /(?:^|\s)((?:~)((?:[^~]+))(?:~))$/gm
-export const pasteRegex = /(?:^|\s)((?:~)((?:[^~]+))(?:~))/gm
-
-export default new Mark()
- .name('strike')
- .schema(() => ({
- parseDOM: [
+ parseHTML() {
+ return [
{
tag: 's',
},
@@ -30,21 +23,44 @@ export default new Mark()
style: 'text-decoration',
getAttrs: node => (node === 'line-through' ? {} : false),
},
- ],
- toDOM: () => ['s', 0],
- }))
- .commands(({ name }) => ({
- strike: () => ({ commands }) => {
- return commands.toggleMark(name)
- },
- }))
- .keys(({ editor }) => ({
- 'Mod-d': () => editor.strike(),
- }))
- .inputRules(({ type }) => [
- markInputRule(inputRegex, type),
- ])
- .pasteRules(({ type }) => [
- markPasteRule(inputRegex, type),
- ])
- .create()
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['s', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ strike: (): Command => ({ commands }) => {
+ return commands.toggleMark('strike')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-d': () => this.editor.strike(),
+ }
+ },
+
+ addInputRules() {
+ return [
+ markInputRule(inputRegex, this.type),
+ ]
+ },
+
+ addPasteRules() {
+ return [
+ markPasteRule(inputRegex, this.type),
+ ]
+ },
+})
+
+export default Strike
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Strike: typeof Strike,
+ }
+}
diff --git a/packages/extension-text-align/index.ts b/packages/extension-text-align/index.ts
new file mode 100644
index 00000000..15938051
--- /dev/null
+++ b/packages/extension-text-align/index.ts
@@ -0,0 +1,63 @@
+import { Command, createExtension } from '@tiptap/core'
+
+type TextAlignOptions = {
+ types: string[],
+ alignments: string[],
+ defaultAlignment: string,
+}
+
+const TextAlign = createExtension({
+ defaultOptions: {
+ types: ['heading', 'paragraph'],
+ alignments: ['left', 'center', 'right'],
+ defaultAlignment: 'left',
+ },
+
+ addGlobalAttributes() {
+ return [
+ {
+ types: this.options.types,
+ attributes: {
+ textAlign: {
+ default: this.options.defaultAlignment,
+ renderHTML: attributes => ({
+ style: `text-align: ${attributes.textAlign}`,
+ }),
+ parseHTML: element => ({
+ textAlign: element.style.textAlign || this.options.defaultAlignment,
+ }),
+ },
+ },
+ },
+ ]
+ },
+
+ addCommands() {
+ return {
+ textAlign: (alignment: string): Command => ({ commands }) => {
+ if (!this.options.alignments.includes(alignment)) {
+ return false
+ }
+
+ return commands.setNodeAttributes({ textAlign: alignment })
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ // TODO: re-use only 'textAlign' attribute
+ // TODO: use custom splitBlock only for `this.options.types`
+ // TODO: use complete default enter handler (chainCommand) with custom splitBlock
+ Enter: () => this.editor.splitBlock(true),
+ }
+ },
+})
+
+export default TextAlign
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ TextAlign: typeof TextAlign,
+ }
+}
diff --git a/packages/extension-text-align/package.json b/packages/extension-text-align/package.json
new file mode 100644
index 00000000..2914b5c4
--- /dev/null
+++ b/packages/extension-text-align/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@tiptap/extension-text-align",
+ "version": "1.0.0",
+ "source": "index.ts",
+ "main": "dist/tiptap-extension-text-align.js",
+ "umd:main": "dist/tiptap-extension-text-align.umd.js",
+ "module": "dist/tiptap-extension-text-align.mjs",
+ "unpkg": "dist/tiptap-extension-text-align.js",
+ "jsdelivr": "dist/tiptap-extension-text-align.js",
+ "files": [
+ "src",
+ "dist"
+ ],
+ "peerDependencies": {
+ "@tiptap/core": "2.x"
+ }
+}
diff --git a/packages/extension-text/index.ts b/packages/extension-text/index.ts
index 96e8355f..26c1609f 100644
--- a/packages/extension-text/index.ts
+++ b/packages/extension-text/index.ts
@@ -1,8 +1,14 @@
-import { Node } from '@tiptap/core'
+import { createNode } from '@tiptap/core'
-export default new Node()
- .name('text')
- .schema(() => ({
- group: 'inline',
- }))
- .create()
+const Text = createNode({
+ name: 'text',
+ group: 'inline',
+})
+
+export default Text
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Text: typeof Text,
+ }
+}
diff --git a/packages/extension-underline/index.ts b/packages/extension-underline/index.ts
index aedfe852..a9eeba86 100644
--- a/packages/extension-underline/index.ts
+++ b/packages/extension-underline/index.ts
@@ -1,17 +1,10 @@
-import { Command, Mark } from '@tiptap/core'
+import { Command, createMark } from '@tiptap/core'
-export type UnderlineCommand = () => Command
+const Underline = createMark({
+ name: 'underline',
-declare module '@tiptap/core/src/Editor' {
- interface Commands {
- underline: UnderlineCommand,
- }
-}
-
-export default new Mark()
- .name('underline')
- .schema(() => ({
- parseDOM: [
+ parseHTML() {
+ return [
{
tag: 'u',
},
@@ -19,15 +12,32 @@ export default new Mark()
style: 'text-decoration',
getAttrs: node => (node === 'underline' ? {} : false),
},
- ],
- toDOM: () => ['u', 0],
- }))
- .commands(({ name }) => ({
- underline: () => ({ commands }) => {
- return commands.toggleMark(name)
- },
- }))
- .keys(({ editor }) => ({
- 'Mod-u': () => editor.underline(),
- }))
- .create()
+ ]
+ },
+
+ renderHTML({ attributes }) {
+ return ['u', attributes, 0]
+ },
+
+ addCommands() {
+ return {
+ underline: (): Command => ({ commands }) => {
+ return commands.toggleMark('underline')
+ },
+ }
+ },
+
+ addKeyboardShortcuts() {
+ return {
+ 'Mod-u': () => this.editor.underline(),
+ }
+ },
+})
+
+export default Underline
+
+declare module '@tiptap/core/src/Editor' {
+ interface AllExtensions {
+ Underline: typeof Underline,
+ }
+}
diff --git a/packages/html/package.json b/packages/html/package.json
index b88cddfc..404f86c4 100644
--- a/packages/html/package.json
+++ b/packages/html/package.json
@@ -10,6 +10,6 @@
"@tiptap/core": "2.x",
"@types/jsdom": "^16.2.4",
"jsdom": "^16.4.0",
- "prosemirror-model": "^1.11.2"
+ "prosemirror-model": "^1.12.0"
}
}
diff --git a/tests/cypress/integration/extensions/bold.spec.ts b/tests/cypress/integration/extensions/bold.spec.ts
new file mode 100644
index 00000000..16ec952f
--- /dev/null
+++ b/tests/cypress/integration/extensions/bold.spec.ts
@@ -0,0 +1,26 @@
+///
+
+import {
+ starInputRegex,
+ starPasteRegex,
+ underscoreInputRegex,
+ underscorePasteRegex,
+} from '@tiptap/extension-bold'
+
+describe('bold regex test', () => {
+ it('star input regex matches', () => {
+ expect('**Test**').to.match(starInputRegex)
+ })
+
+ it('star paste regex matches', () => {
+ expect('**Test**').to.match(starPasteRegex)
+ })
+
+ it('underscore input regex matches', () => {
+ expect('__Test__').to.match(underscoreInputRegex)
+ })
+
+ it('underscore paste regex matches', () => {
+ expect('__Test__').to.match(underscorePasteRegex)
+ })
+})
diff --git a/tests/cypress/integration/extensions/link.spec.ts b/tests/cypress/integration/extensions/link.spec.ts
new file mode 100644
index 00000000..08f55add
--- /dev/null
+++ b/tests/cypress/integration/extensions/link.spec.ts
@@ -0,0 +1,11 @@
+///
+
+import { pasteRegex } from '@tiptap/extension-link'
+
+describe('link regex test', () => {
+
+ it('paste regex matches url', () => {
+ expect('https://www.example.com/with-spaces?var=true&foo=bar+3').to.match(pasteRegex)
+ })
+
+})
diff --git a/tsconfig.json b/tsconfig.json
index 96ec68b1..cbf208f1 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -28,6 +28,9 @@
"files": [
"./shims/vue.d.ts"
],
+ "filesGlob": [
+ "packages/**/*.ts"
+ ],
"exclude": [
"node_modules",
"dist"
diff --git a/yarn.lock b/yarn.lock
index 92429267..6c86bc70 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,28 +9,24 @@
dependencies:
"@babel/highlight" "^7.10.4"
-"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0":
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c"
- integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==
- dependencies:
- browserslist "^4.12.0"
- invariant "^2.2.4"
- semver "^5.5.0"
+"@babel/compat-data@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.1.tgz#d7386a689aa0ddf06255005b4b991988021101a0"
+ integrity sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==
"@babel/core@^7.0.0", "@babel/core@^7.10.2", "@babel/core@^7.11.0", "@babel/core@^7.11.6":
- version "7.11.6"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651"
- integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==
+ version "7.12.3"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8"
+ integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==
dependencies:
"@babel/code-frame" "^7.10.4"
- "@babel/generator" "^7.11.6"
- "@babel/helper-module-transforms" "^7.11.0"
- "@babel/helpers" "^7.10.4"
- "@babel/parser" "^7.11.5"
+ "@babel/generator" "^7.12.1"
+ "@babel/helper-module-transforms" "^7.12.1"
+ "@babel/helpers" "^7.12.1"
+ "@babel/parser" "^7.12.3"
"@babel/template" "^7.10.4"
- "@babel/traverse" "^7.11.5"
- "@babel/types" "^7.11.5"
+ "@babel/traverse" "^7.12.1"
+ "@babel/types" "^7.12.1"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
@@ -40,12 +36,12 @@
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/generator@^7.11.5", "@babel/generator@^7.11.6":
- version "7.11.6"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620"
- integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==
+"@babel/generator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.1.tgz#0d70be32bdaa03d7c51c8597dda76e0df1f15468"
+ integrity sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==
dependencies:
- "@babel/types" "^7.11.5"
+ "@babel/types" "^7.12.1"
jsesc "^2.5.1"
source-map "^0.5.0"
@@ -64,14 +60,14 @@
"@babel/helper-explode-assignable-expression" "^7.10.4"
"@babel/types" "^7.10.4"
-"@babel/helper-builder-react-jsx-experimental@^7.10.4", "@babel/helper-builder-react-jsx-experimental@^7.11.5":
- version "7.11.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.11.5.tgz#4ea43dd63857b0a35cd1f1b161dc29b43414e79f"
- integrity sha512-Vc4aPJnRZKWfzeCBsqTBnzulVNjABVdahSPhtdMD3Vs80ykx4a87jTHtF/VR+alSrDmNvat7l13yrRHauGcHVw==
+"@babel/helper-builder-react-jsx-experimental@^7.12.1":
+ version "7.12.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48"
+ integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
- "@babel/helper-module-imports" "^7.10.4"
- "@babel/types" "^7.11.5"
+ "@babel/helper-module-imports" "^7.12.1"
+ "@babel/types" "^7.12.1"
"@babel/helper-builder-react-jsx@^7.10.4":
version "7.10.4"
@@ -81,37 +77,35 @@
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/types" "^7.10.4"
-"@babel/helper-compilation-targets@^7.10.4", "@babel/helper-compilation-targets@^7.9.6":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2"
- integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==
+"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.9.6":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz#310e352888fbdbdd8577be8dfdd2afb9e7adcf50"
+ integrity sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==
dependencies:
- "@babel/compat-data" "^7.10.4"
+ "@babel/compat-data" "^7.12.1"
+ "@babel/helper-validator-option" "^7.12.1"
browserslist "^4.12.0"
- invariant "^2.2.4"
- levenary "^1.1.1"
semver "^5.5.0"
-"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5", "@babel/helper-create-class-features-plugin@^7.7.4":
- version "7.10.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d"
- integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==
+"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.7.4":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e"
+ integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==
dependencies:
"@babel/helper-function-name" "^7.10.4"
- "@babel/helper-member-expression-to-functions" "^7.10.5"
+ "@babel/helper-member-expression-to-functions" "^7.12.1"
"@babel/helper-optimise-call-expression" "^7.10.4"
- "@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.12.1"
"@babel/helper-split-export-declaration" "^7.10.4"
-"@babel/helper-create-regexp-features-plugin@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8"
- integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==
+"@babel/helper-create-regexp-features-plugin@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz#18b1302d4677f9dc4740fe8c9ed96680e29d37e8"
+ integrity sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/helper-regex" "^7.10.4"
- regexpu-core "^4.7.0"
+ regexpu-core "^4.7.1"
"@babel/helper-define-map@^7.10.4":
version "7.10.5"
@@ -123,11 +117,11 @@
lodash "^4.17.19"
"@babel/helper-explode-assignable-expression@^7.10.4":
- version "7.11.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b"
- integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633"
+ integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==
dependencies:
- "@babel/types" "^7.10.4"
+ "@babel/types" "^7.12.1"
"@babel/helper-function-name@^7.10.4":
version "7.10.4"
@@ -152,31 +146,33 @@
dependencies:
"@babel/types" "^7.10.4"
-"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5":
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df"
- integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==
+"@babel/helper-member-expression-to-functions@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c"
+ integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==
dependencies:
- "@babel/types" "^7.11.0"
+ "@babel/types" "^7.12.1"
-"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
- integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.8.3":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz#1644c01591a15a2f084dd6d092d9430eb1d1216c"
+ integrity sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==
dependencies:
- "@babel/types" "^7.10.4"
+ "@babel/types" "^7.12.1"
-"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0":
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359"
- integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==
+"@babel/helper-module-transforms@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c"
+ integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==
dependencies:
- "@babel/helper-module-imports" "^7.10.4"
- "@babel/helper-replace-supers" "^7.10.4"
- "@babel/helper-simple-access" "^7.10.4"
+ "@babel/helper-module-imports" "^7.12.1"
+ "@babel/helper-replace-supers" "^7.12.1"
+ "@babel/helper-simple-access" "^7.12.1"
"@babel/helper-split-export-declaration" "^7.11.0"
+ "@babel/helper-validator-identifier" "^7.10.4"
"@babel/template" "^7.10.4"
- "@babel/types" "^7.11.0"
+ "@babel/traverse" "^7.12.1"
+ "@babel/types" "^7.12.1"
lodash "^4.17.19"
"@babel/helper-optimise-call-expression@^7.10.4":
@@ -198,40 +194,38 @@
dependencies:
lodash "^4.17.19"
-"@babel/helper-remap-async-to-generator@^7.10.4":
- version "7.11.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d"
- integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==
+"@babel/helper-remap-async-to-generator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd"
+ integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/helper-wrap-function" "^7.10.4"
- "@babel/template" "^7.10.4"
- "@babel/types" "^7.10.4"
+ "@babel/types" "^7.12.1"
-"@babel/helper-replace-supers@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf"
- integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==
+"@babel/helper-replace-supers@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz#f15c9cc897439281891e11d5ce12562ac0cf3fa9"
+ integrity sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==
dependencies:
- "@babel/helper-member-expression-to-functions" "^7.10.4"
+ "@babel/helper-member-expression-to-functions" "^7.12.1"
"@babel/helper-optimise-call-expression" "^7.10.4"
- "@babel/traverse" "^7.10.4"
- "@babel/types" "^7.10.4"
+ "@babel/traverse" "^7.12.1"
+ "@babel/types" "^7.12.1"
-"@babel/helper-simple-access@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461"
- integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==
+"@babel/helper-simple-access@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136"
+ integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==
dependencies:
- "@babel/template" "^7.10.4"
- "@babel/types" "^7.10.4"
+ "@babel/types" "^7.12.1"
-"@babel/helper-skip-transparent-expression-wrappers@^7.11.0":
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729"
- integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==
+"@babel/helper-skip-transparent-expression-wrappers@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf"
+ integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==
dependencies:
- "@babel/types" "^7.11.0"
+ "@babel/types" "^7.12.1"
"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0":
version "7.11.0"
@@ -245,24 +239,29 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
+"@babel/helper-validator-option@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9"
+ integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==
+
"@babel/helper-wrap-function@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87"
- integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==
+ version "7.12.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9"
+ integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==
dependencies:
"@babel/helper-function-name" "^7.10.4"
"@babel/template" "^7.10.4"
"@babel/traverse" "^7.10.4"
"@babel/types" "^7.10.4"
-"@babel/helpers@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044"
- integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==
+"@babel/helpers@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.1.tgz#8a8261c1d438ec18cb890434df4ec768734c1e79"
+ integrity sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==
dependencies:
"@babel/template" "^7.10.4"
- "@babel/traverse" "^7.10.4"
- "@babel/types" "^7.10.4"
+ "@babel/traverse" "^7.12.1"
+ "@babel/types" "^7.12.1"
"@babel/highlight@^7.10.4":
version "7.10.4"
@@ -273,18 +272,18 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.0.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.3.3":
- version "7.11.5"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037"
- integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==
+"@babel/parser@^7.0.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.0", "@babel/parser@^7.12.1", "@babel/parser@^7.12.3", "@babel/parser@^7.3.3":
+ version "7.12.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.3.tgz#a305415ebe7a6c7023b40b5122a0662d928334cd"
+ integrity sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==
-"@babel/plugin-proposal-async-generator-functions@^7.10.4":
- version "7.10.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558"
- integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==
+"@babel/plugin-proposal-async-generator-functions@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e"
+ integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-remap-async-to-generator" "^7.10.4"
+ "@babel/helper-remap-async-to-generator" "^7.12.1"
"@babel/plugin-syntax-async-generators" "^7.8.0"
"@babel/plugin-proposal-class-properties@7.7.4":
@@ -295,111 +294,111 @@
"@babel/helper-create-class-features-plugin" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.8.3":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807"
- integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==
+"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.8.3":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de"
+ integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.10.4"
+ "@babel/helper-create-class-features-plugin" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-proposal-decorators@^7.8.3":
- version "7.10.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4"
- integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ==
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f"
+ integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.10.5"
+ "@babel/helper-create-class-features-plugin" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-syntax-decorators" "^7.10.4"
+ "@babel/plugin-syntax-decorators" "^7.12.1"
-"@babel/plugin-proposal-dynamic-import@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e"
- integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==
+"@babel/plugin-proposal-dynamic-import@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc"
+ integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-dynamic-import" "^7.8.0"
-"@babel/plugin-proposal-export-namespace-from@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54"
- integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==
+"@babel/plugin-proposal-export-namespace-from@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4"
+ integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-"@babel/plugin-proposal-json-strings@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db"
- integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==
+"@babel/plugin-proposal-json-strings@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c"
+ integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-json-strings" "^7.8.0"
-"@babel/plugin-proposal-logical-assignment-operators@^7.11.0":
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8"
- integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==
+"@babel/plugin-proposal-logical-assignment-operators@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751"
+ integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a"
- integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c"
+ integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
-"@babel/plugin-proposal-numeric-separator@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06"
- integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==
+"@babel/plugin-proposal-numeric-separator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6"
+ integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-proposal-object-rest-spread@^7.11.0":
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af"
- integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==
+"@babel/plugin-proposal-object-rest-spread@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069"
+ integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
- "@babel/plugin-transform-parameters" "^7.10.4"
+ "@babel/plugin-transform-parameters" "^7.12.1"
-"@babel/plugin-proposal-optional-catch-binding@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd"
- integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==
+"@babel/plugin-proposal-optional-catch-binding@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942"
+ integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
-"@babel/plugin-proposal-optional-chaining@^7.11.0":
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076"
- integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==
+"@babel/plugin-proposal-optional-chaining@^7.11.0", "@babel/plugin-proposal-optional-chaining@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797"
+ integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"
-"@babel/plugin-proposal-private-methods@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909"
- integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==
+"@babel/plugin-proposal-private-methods@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389"
+ integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.10.4"
+ "@babel/helper-create-class-features-plugin" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d"
- integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==
+"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072"
+ integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-create-regexp-features-plugin" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-async-generators@^7.8.0":
@@ -409,17 +408,17 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-class-properties@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c"
- integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==
+"@babel/plugin-syntax-class-properties@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978"
+ integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-syntax-decorators@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c"
- integrity sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw==
+"@babel/plugin-syntax-decorators@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz#81a8b535b284476c41be6de06853a8802b98c5dd"
+ integrity sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
@@ -437,10 +436,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-syntax-flow@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6"
- integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ==
+"@babel/plugin-syntax-flow@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz#a77670d9abe6d63e8acadf4c31bb1eb5a506bbdd"
+ integrity sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
@@ -458,10 +457,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.10.1", "@babel/plugin-syntax-jsx@^7.10.4", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c"
- integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.10.1", "@babel/plugin-syntax-jsx@^7.12.1", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926"
+ integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
@@ -507,356 +506,354 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-top-level-await@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d"
- integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==
+"@babel/plugin-syntax-top-level-await@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0"
+ integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-arrow-functions@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd"
- integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==
+"@babel/plugin-transform-arrow-functions@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3"
+ integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-async-to-generator@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37"
- integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==
+"@babel/plugin-transform-async-to-generator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1"
+ integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==
dependencies:
- "@babel/helper-module-imports" "^7.10.4"
+ "@babel/helper-module-imports" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-remap-async-to-generator" "^7.10.4"
+ "@babel/helper-remap-async-to-generator" "^7.12.1"
-"@babel/plugin-transform-block-scoped-functions@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8"
- integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==
+"@babel/plugin-transform-block-scoped-functions@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9"
+ integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-block-scoping@^7.10.4":
- version "7.11.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215"
- integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==
+"@babel/plugin-transform-block-scoping@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1"
+ integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-classes@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7"
- integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==
+"@babel/plugin-transform-classes@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6"
+ integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/helper-define-map" "^7.10.4"
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-optimise-call-expression" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.12.1"
"@babel/helper-split-export-declaration" "^7.10.4"
globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb"
- integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==
+"@babel/plugin-transform-computed-properties@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852"
+ integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-destructuring@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5"
- integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==
+"@babel/plugin-transform-destructuring@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847"
+ integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee"
- integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==
+"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975"
+ integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-create-regexp-features-plugin" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-duplicate-keys@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47"
- integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==
+"@babel/plugin-transform-duplicate-keys@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228"
+ integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-exponentiation-operator@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e"
- integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==
+"@babel/plugin-transform-exponentiation-operator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0"
+ integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==
dependencies:
"@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-flow-strip-types@^7.10.1", "@babel/plugin-transform-flow-strip-types@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788"
- integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ==
+"@babel/plugin-transform-flow-strip-types@^7.10.1", "@babel/plugin-transform-flow-strip-types@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4"
+ integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-syntax-flow" "^7.10.4"
+ "@babel/plugin-syntax-flow" "^7.12.1"
-"@babel/plugin-transform-for-of@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9"
- integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==
+"@babel/plugin-transform-for-of@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa"
+ integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-function-name@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7"
- integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==
+"@babel/plugin-transform-function-name@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667"
+ integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==
dependencies:
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-literals@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c"
- integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==
+"@babel/plugin-transform-literals@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57"
+ integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-member-expression-literals@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7"
- integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==
+"@babel/plugin-transform-member-expression-literals@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad"
+ integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-modules-amd@^7.10.4":
- version "7.10.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1"
- integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==
+"@babel/plugin-transform-modules-amd@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9"
+ integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==
dependencies:
- "@babel/helper-module-transforms" "^7.10.5"
+ "@babel/helper-module-transforms" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-commonjs@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0"
- integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==
+"@babel/plugin-transform-modules-commonjs@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648"
+ integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==
dependencies:
- "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helper-module-transforms" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-simple-access" "^7.10.4"
+ "@babel/helper-simple-access" "^7.12.1"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-systemjs@^7.10.4":
- version "7.10.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85"
- integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==
+"@babel/plugin-transform-modules-systemjs@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086"
+ integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==
dependencies:
"@babel/helper-hoist-variables" "^7.10.4"
- "@babel/helper-module-transforms" "^7.10.5"
+ "@babel/helper-module-transforms" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-validator-identifier" "^7.10.4"
babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-umd@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e"
- integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==
+"@babel/plugin-transform-modules-umd@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902"
+ integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==
dependencies:
- "@babel/helper-module-transforms" "^7.10.4"
+ "@babel/helper-module-transforms" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6"
- integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753"
+ integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-create-regexp-features-plugin" "^7.12.1"
-"@babel/plugin-transform-new-target@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888"
- integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==
+"@babel/plugin-transform-new-target@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0"
+ integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-object-super@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894"
- integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==
+"@babel/plugin-transform-object-super@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e"
+ integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.12.1"
-"@babel/plugin-transform-parameters@^7.10.4":
- version "7.10.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a"
- integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==
- dependencies:
- "@babel/helper-get-function-arity" "^7.10.4"
- "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-transform-property-literals@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0"
- integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==
+"@babel/plugin-transform-parameters@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d"
+ integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-react-display-name@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz#b5795f4e3e3140419c3611b7a2a3832b9aef328d"
- integrity sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==
+"@babel/plugin-transform-property-literals@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd"
+ integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-react-jsx-development@^7.10.4":
- version "7.11.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.11.5.tgz#e1439e6a57ee3d43e9f54ace363fb29cefe5d7b6"
- integrity sha512-cImAmIlKJ84sDmpQzm4/0q/2xrXlDezQoixy3qoz1NJeZL/8PRon6xZtluvr4H4FzwlDGI5tCcFupMnXGtr+qw==
- dependencies:
- "@babel/helper-builder-react-jsx-experimental" "^7.11.5"
- "@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-syntax-jsx" "^7.10.4"
-
-"@babel/plugin-transform-react-jsx-self@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz#cd301a5fed8988c182ed0b9d55e9bd6db0bd9369"
- integrity sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==
+"@babel/plugin-transform-react-display-name@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d"
+ integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-syntax-jsx" "^7.10.4"
-"@babel/plugin-transform-react-jsx-source@^7.10.4":
- version "7.10.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz#34f1779117520a779c054f2cdd9680435b9222b4"
- integrity sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==
+"@babel/plugin-transform-react-jsx-development@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz#0b8f8cd531dcf7991f1e5f2c10a2a4f1cfc78e36"
+ integrity sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ==
+ dependencies:
+ "@babel/helper-builder-react-jsx-experimental" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-jsx" "^7.12.1"
+
+"@babel/plugin-transform-react-jsx-self@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28"
+ integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-syntax-jsx" "^7.10.4"
-"@babel/plugin-transform-react-jsx@^7.10.1", "@babel/plugin-transform-react-jsx@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2"
- integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==
+"@babel/plugin-transform-react-jsx-source@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b"
+ integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-react-jsx@^7.10.1", "@babel/plugin-transform-react-jsx@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz#c2d96c77c2b0e4362cc4e77a43ce7c2539d478cb"
+ integrity sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==
dependencies:
"@babel/helper-builder-react-jsx" "^7.10.4"
- "@babel/helper-builder-react-jsx-experimental" "^7.10.4"
+ "@babel/helper-builder-react-jsx-experimental" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-syntax-jsx" "^7.10.4"
+ "@babel/plugin-syntax-jsx" "^7.12.1"
-"@babel/plugin-transform-react-pure-annotations@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz#3eefbb73db94afbc075f097523e445354a1c6501"
- integrity sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==
+"@babel/plugin-transform-react-pure-annotations@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42"
+ integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-regenerator@^7.10.1", "@babel/plugin-transform-regenerator@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63"
- integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==
+"@babel/plugin-transform-regenerator@^7.10.1", "@babel/plugin-transform-regenerator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753"
+ integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==
dependencies:
regenerator-transform "^0.14.2"
-"@babel/plugin-transform-reserved-words@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd"
- integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==
+"@babel/plugin-transform-reserved-words@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8"
+ integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-runtime@^7.11.0":
- version "7.11.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc"
- integrity sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg==
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5"
+ integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==
dependencies:
- "@babel/helper-module-imports" "^7.10.4"
+ "@babel/helper-module-imports" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
resolve "^1.8.1"
semver "^5.5.1"
-"@babel/plugin-transform-shorthand-properties@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6"
- integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==
+"@babel/plugin-transform-shorthand-properties@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3"
+ integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-spread@^7.11.0":
- version "7.11.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc"
- integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==
+"@babel/plugin-transform-spread@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e"
+ integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
-"@babel/plugin-transform-sticky-regex@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d"
- integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==
+"@babel/plugin-transform-sticky-regex@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz#5c24cf50de396d30e99afc8d1c700e8bce0f5caf"
+ integrity sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/helper-regex" "^7.10.4"
-"@babel/plugin-transform-template-literals@^7.10.4":
- version "7.10.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c"
- integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.10.4"
- "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-transform-typeof-symbol@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc"
- integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==
+"@babel/plugin-transform-template-literals@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843"
+ integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-unicode-escapes@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007"
- integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==
+"@babel/plugin-transform-typeof-symbol@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a"
+ integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-unicode-regex@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8"
- integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==
+"@babel/plugin-transform-unicode-escapes@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709"
+ integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-unicode-regex@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb"
+ integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.11.5":
- version "7.11.5"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272"
- integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2"
+ integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==
dependencies:
- "@babel/compat-data" "^7.11.0"
- "@babel/helper-compilation-targets" "^7.10.4"
- "@babel/helper-module-imports" "^7.10.4"
+ "@babel/compat-data" "^7.12.1"
+ "@babel/helper-compilation-targets" "^7.12.1"
+ "@babel/helper-module-imports" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-proposal-async-generator-functions" "^7.10.4"
- "@babel/plugin-proposal-class-properties" "^7.10.4"
- "@babel/plugin-proposal-dynamic-import" "^7.10.4"
- "@babel/plugin-proposal-export-namespace-from" "^7.10.4"
- "@babel/plugin-proposal-json-strings" "^7.10.4"
- "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0"
- "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4"
- "@babel/plugin-proposal-numeric-separator" "^7.10.4"
- "@babel/plugin-proposal-object-rest-spread" "^7.11.0"
- "@babel/plugin-proposal-optional-catch-binding" "^7.10.4"
- "@babel/plugin-proposal-optional-chaining" "^7.11.0"
- "@babel/plugin-proposal-private-methods" "^7.10.4"
- "@babel/plugin-proposal-unicode-property-regex" "^7.10.4"
+ "@babel/helper-validator-option" "^7.12.1"
+ "@babel/plugin-proposal-async-generator-functions" "^7.12.1"
+ "@babel/plugin-proposal-class-properties" "^7.12.1"
+ "@babel/plugin-proposal-dynamic-import" "^7.12.1"
+ "@babel/plugin-proposal-export-namespace-from" "^7.12.1"
+ "@babel/plugin-proposal-json-strings" "^7.12.1"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1"
+ "@babel/plugin-proposal-numeric-separator" "^7.12.1"
+ "@babel/plugin-proposal-object-rest-spread" "^7.12.1"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.12.1"
+ "@babel/plugin-proposal-optional-chaining" "^7.12.1"
+ "@babel/plugin-proposal-private-methods" "^7.12.1"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.12.1"
"@babel/plugin-syntax-async-generators" "^7.8.0"
- "@babel/plugin-syntax-class-properties" "^7.10.4"
+ "@babel/plugin-syntax-class-properties" "^7.12.1"
"@babel/plugin-syntax-dynamic-import" "^7.8.0"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
"@babel/plugin-syntax-json-strings" "^7.8.0"
@@ -866,54 +863,51 @@
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"
- "@babel/plugin-syntax-top-level-await" "^7.10.4"
- "@babel/plugin-transform-arrow-functions" "^7.10.4"
- "@babel/plugin-transform-async-to-generator" "^7.10.4"
- "@babel/plugin-transform-block-scoped-functions" "^7.10.4"
- "@babel/plugin-transform-block-scoping" "^7.10.4"
- "@babel/plugin-transform-classes" "^7.10.4"
- "@babel/plugin-transform-computed-properties" "^7.10.4"
- "@babel/plugin-transform-destructuring" "^7.10.4"
- "@babel/plugin-transform-dotall-regex" "^7.10.4"
- "@babel/plugin-transform-duplicate-keys" "^7.10.4"
- "@babel/plugin-transform-exponentiation-operator" "^7.10.4"
- "@babel/plugin-transform-for-of" "^7.10.4"
- "@babel/plugin-transform-function-name" "^7.10.4"
- "@babel/plugin-transform-literals" "^7.10.4"
- "@babel/plugin-transform-member-expression-literals" "^7.10.4"
- "@babel/plugin-transform-modules-amd" "^7.10.4"
- "@babel/plugin-transform-modules-commonjs" "^7.10.4"
- "@babel/plugin-transform-modules-systemjs" "^7.10.4"
- "@babel/plugin-transform-modules-umd" "^7.10.4"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4"
- "@babel/plugin-transform-new-target" "^7.10.4"
- "@babel/plugin-transform-object-super" "^7.10.4"
- "@babel/plugin-transform-parameters" "^7.10.4"
- "@babel/plugin-transform-property-literals" "^7.10.4"
- "@babel/plugin-transform-regenerator" "^7.10.4"
- "@babel/plugin-transform-reserved-words" "^7.10.4"
- "@babel/plugin-transform-shorthand-properties" "^7.10.4"
- "@babel/plugin-transform-spread" "^7.11.0"
- "@babel/plugin-transform-sticky-regex" "^7.10.4"
- "@babel/plugin-transform-template-literals" "^7.10.4"
- "@babel/plugin-transform-typeof-symbol" "^7.10.4"
- "@babel/plugin-transform-unicode-escapes" "^7.10.4"
- "@babel/plugin-transform-unicode-regex" "^7.10.4"
+ "@babel/plugin-syntax-top-level-await" "^7.12.1"
+ "@babel/plugin-transform-arrow-functions" "^7.12.1"
+ "@babel/plugin-transform-async-to-generator" "^7.12.1"
+ "@babel/plugin-transform-block-scoped-functions" "^7.12.1"
+ "@babel/plugin-transform-block-scoping" "^7.12.1"
+ "@babel/plugin-transform-classes" "^7.12.1"
+ "@babel/plugin-transform-computed-properties" "^7.12.1"
+ "@babel/plugin-transform-destructuring" "^7.12.1"
+ "@babel/plugin-transform-dotall-regex" "^7.12.1"
+ "@babel/plugin-transform-duplicate-keys" "^7.12.1"
+ "@babel/plugin-transform-exponentiation-operator" "^7.12.1"
+ "@babel/plugin-transform-for-of" "^7.12.1"
+ "@babel/plugin-transform-function-name" "^7.12.1"
+ "@babel/plugin-transform-literals" "^7.12.1"
+ "@babel/plugin-transform-member-expression-literals" "^7.12.1"
+ "@babel/plugin-transform-modules-amd" "^7.12.1"
+ "@babel/plugin-transform-modules-commonjs" "^7.12.1"
+ "@babel/plugin-transform-modules-systemjs" "^7.12.1"
+ "@babel/plugin-transform-modules-umd" "^7.12.1"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1"
+ "@babel/plugin-transform-new-target" "^7.12.1"
+ "@babel/plugin-transform-object-super" "^7.12.1"
+ "@babel/plugin-transform-parameters" "^7.12.1"
+ "@babel/plugin-transform-property-literals" "^7.12.1"
+ "@babel/plugin-transform-regenerator" "^7.12.1"
+ "@babel/plugin-transform-reserved-words" "^7.12.1"
+ "@babel/plugin-transform-shorthand-properties" "^7.12.1"
+ "@babel/plugin-transform-spread" "^7.12.1"
+ "@babel/plugin-transform-sticky-regex" "^7.12.1"
+ "@babel/plugin-transform-template-literals" "^7.12.1"
+ "@babel/plugin-transform-typeof-symbol" "^7.12.1"
+ "@babel/plugin-transform-unicode-escapes" "^7.12.1"
+ "@babel/plugin-transform-unicode-regex" "^7.12.1"
"@babel/preset-modules" "^0.1.3"
- "@babel/types" "^7.11.5"
- browserslist "^4.12.0"
+ "@babel/types" "^7.12.1"
core-js-compat "^3.6.2"
- invariant "^2.2.2"
- levenary "^1.1.1"
semver "^5.5.0"
"@babel/preset-flow@^7.10.1":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f"
- integrity sha512-XI6l1CptQCOBv+ZKYwynyswhtOKwpZZp5n0LG1QKCo8erRhqjoQV6nvx61Eg30JHpysWQSBwA2AWRU3pBbSY5g==
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.12.1.tgz#1a81d376c5a9549e75352a3888f8c273455ae940"
+ integrity sha512-UAoyMdioAhM6H99qPoKvpHMzxmNVXno8GYU/7vZmGaHk6/KqfDYL1W0NxszVbJ2EP271b7e6Ox+Vk2A9QsB3Sw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-transform-flow-strip-types" "^7.10.4"
+ "@babel/plugin-transform-flow-strip-types" "^7.12.1"
"@babel/preset-modules@^0.1.3":
version "0.1.4"
@@ -927,22 +921,22 @@
esutils "^2.0.2"
"@babel/preset-react@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.4.tgz#92e8a66d816f9911d11d4cc935be67adfc82dbcf"
- integrity sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c"
+ integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/plugin-transform-react-display-name" "^7.10.4"
- "@babel/plugin-transform-react-jsx" "^7.10.4"
- "@babel/plugin-transform-react-jsx-development" "^7.10.4"
- "@babel/plugin-transform-react-jsx-self" "^7.10.4"
- "@babel/plugin-transform-react-jsx-source" "^7.10.4"
- "@babel/plugin-transform-react-pure-annotations" "^7.10.4"
+ "@babel/plugin-transform-react-display-name" "^7.12.1"
+ "@babel/plugin-transform-react-jsx" "^7.12.1"
+ "@babel/plugin-transform-react-jsx-development" "^7.12.1"
+ "@babel/plugin-transform-react-jsx-self" "^7.12.1"
+ "@babel/plugin-transform-react-jsx-source" "^7.12.1"
+ "@babel/plugin-transform-react-pure-annotations" "^7.12.1"
"@babel/runtime@^7.11.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4":
- version "7.11.2"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
- integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740"
+ integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==
dependencies:
regenerator-runtime "^0.13.4"
@@ -955,25 +949,25 @@
"@babel/parser" "^7.10.4"
"@babel/types" "^7.10.4"
-"@babel/traverse@^7.0.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5":
- version "7.11.5"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3"
- integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e"
+ integrity sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==
dependencies:
"@babel/code-frame" "^7.10.4"
- "@babel/generator" "^7.11.5"
+ "@babel/generator" "^7.12.1"
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.11.0"
- "@babel/parser" "^7.11.5"
- "@babel/types" "^7.11.5"
+ "@babel/parser" "^7.12.1"
+ "@babel/types" "^7.12.1"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.19"
-"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.4.4":
- version "7.11.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d"
- integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==
+"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.0", "@babel/types@^7.12.1", "@babel/types@^7.4.4":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.1.tgz#e109d9ab99a8de735be287ee3d6a9947a190c4ae"
+ integrity sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==
dependencies:
"@babel/helper-validator-identifier" "^7.10.4"
lodash "^4.17.19"
@@ -1023,10 +1017,10 @@
debug "^3.1.0"
lodash.once "^4.1.1"
-"@eslint/eslintrc@^0.1.3":
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085"
- integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==
+"@eslint/eslintrc@^0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c"
+ integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==
dependencies:
ajv "^6.12.4"
debug "^4.1.1"
@@ -1985,9 +1979,9 @@
"@octokit/types" "^5.0.0"
"@octokit/endpoint@^6.0.1":
- version "6.0.6"
- resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.6.tgz#4f09f2b468976b444742a1d5069f6fa45826d999"
- integrity sha512-7Cc8olaCoL/mtquB7j/HTbPM+sY6Ebr4k2X2y4JoXpVKQ7r5xB4iGQE0IoO58wIPsUk4AzoT65AMEpymSbWTgQ==
+ version "6.0.8"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.8.tgz#91b07e236fdb69929c678c6439f7a560dc6058ac"
+ integrity sha512-MuRrgv+bM4Q+e9uEvxAB/Kf+Sj0O2JAOBA131uo1o6lgdq1iS8ejKwtqHgdfY91V3rN9R/hdGKFiQYMzVzVBEQ==
dependencies:
"@octokit/types" "^5.0.0"
is-plain-object "^5.0.0"
@@ -2006,9 +2000,9 @@
"@octokit/types" "^2.0.1"
"@octokit/plugin-request-log@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e"
- integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.1.tgz#07e3bfeb94559a2538cdf54d435b097fba6d6fd3"
+ integrity sha512-d8vmiGAUGswxErdIGfpd0I2UHo2Cs7EaBDpFUZQ9UqYmA0s5/4XoMO4HBld73xGpCj2BvyVyQe2qd9e+/nvKwQ==
"@octokit/plugin-rest-endpoint-methods@2.4.0":
version "2.4.0"
@@ -2198,16 +2192,6 @@
dependencies:
defer-to-connect "^1.0.1"
-"@types/clone-deep@^4.0.1":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@types/clone-deep/-/clone-deep-4.0.1.tgz#7c488443ab9f571cd343d774551b78e9264ea990"
- integrity sha512-bdkCSkyVHsgl3Goe1y16T9k6JuQx7SiDREkq728QjKmTZkGJZuS8R3gGcnGzVuGBP0mssKrzM/GlMOQxtip9cg==
-
-"@types/color-name@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
- integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
-
"@types/estree@*":
version "0.0.45"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884"
@@ -2235,7 +2219,7 @@
"@types/parse5" "*"
"@types/tough-cookie" "*"
-"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5":
+"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
version "7.0.6"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
@@ -2263,9 +2247,9 @@
integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=
"@types/node@*", "@types/node@>= 8":
- version "14.11.2"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256"
- integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==
+ version "14.14.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.2.tgz#d25295f9e4ca5989a2c610754dc02a9721235eeb"
+ integrity sha512-jeYJU2kl7hL9U5xuI/BhKPZ4vqGM/OmK6whiFAXVhlstzZhVamWhDSmHyGLIp+RVyuF9/d0dqr2P85aFj4BvJg==
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
@@ -2342,9 +2326,9 @@
"@types/prosemirror-view" "*"
"@types/prosemirror-model@*", "@types/prosemirror-model@^1.7.4":
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.7.4.tgz#fdbee6af3f450cdac6ab915cec3b033c598e0c7d"
- integrity sha512-nXDcEopJ1fqeSJhGHxQMLd1VKWfA0kRaNLvK30CZhGXOKRySk66hWyrqo9swdGzzGtGZ7VzjDkECo0L4ScYk+w==
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.11.0.tgz#4ade6f1aae6ccfd442c7245197b5bb48834b8af0"
+ integrity sha512-R+vutu3AptoiXGJR0Jdpyr7BkJg24bce9ETUDOrBJZhRcsWeMEFGzidG19GHcY6Yny5zTILxlqXeDEIF3C5b7A==
dependencies:
"@types/orderedmap" "*"
@@ -2373,10 +2357,10 @@
dependencies:
"@types/prosemirror-model" "*"
-"@types/prosemirror-view@*", "@types/prosemirror-view@^1.15.0":
- version "1.15.1"
- resolved "https://registry.yarnpkg.com/@types/prosemirror-view/-/prosemirror-view-1.15.1.tgz#7c2f68d64796727cbd43ff38437b645a02ac1e87"
- integrity sha512-ZdgIqDLWiO4wW4DhK8OjEVam3/DhBcggQeZ6zLts+UCflAZPnEk5dzRqFBVEyrvWqSAGLuPAoOgGAPjj/XwR8w==
+"@types/prosemirror-view@*", "@types/prosemirror-view@^1.16.0":
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/@types/prosemirror-view/-/prosemirror-view-1.16.1.tgz#09d66e2518366fd8d6c316c35c621bc374a0414c"
+ integrity sha512-vsL7QB9Qmg9HcBTWsOkmBEGMF0CfA/SZgtqlUArQglnDWV40ZJYonkjBzyP+YhurMC/s4JT4T2vzfnv7rFF/cg==
dependencies:
"@types/prosemirror-model" "*"
"@types/prosemirror-state" "*"
@@ -2388,9 +2372,9 @@
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
"@types/react@^16.8.12":
- version "16.9.49"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872"
- integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g==
+ version "16.9.53"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.53.tgz#40cd4f8b8d6b9528aedd1fff8fcffe7a112a3d23"
+ integrity sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw==
dependencies:
"@types/prop-types" "*"
csstype "^3.0.2"
@@ -2445,61 +2429,61 @@
"@types/unist" "*"
"@types/vfile-message" "*"
-"@typescript-eslint/eslint-plugin@^4.3.0":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.3.0.tgz#1a23d904bf8ea248d09dc3761af530d90f39c8fa"
- integrity sha512-RqEcaHuEKnn3oPFislZ6TNzsBLqpZjN93G69SS+laav/I8w/iGMuMq97P0D2/2/kW4SCebHggqhbcCfbDaaX+g==
+"@typescript-eslint/eslint-plugin@^4.6.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.6.0.tgz#210cd538bb703f883aff81d3996961f5dba31fdb"
+ integrity sha512-1+419X+Ynijytr1iWI+/IcX/kJryc78YNpdaXR1aRO1sU3bC0vZrIAF1tIX7rudVI84W7o7M4zo5p1aVt70fAg==
dependencies:
- "@typescript-eslint/experimental-utils" "4.3.0"
- "@typescript-eslint/scope-manager" "4.3.0"
+ "@typescript-eslint/experimental-utils" "4.6.0"
+ "@typescript-eslint/scope-manager" "4.6.0"
debug "^4.1.1"
functional-red-black-tree "^1.0.1"
regexpp "^3.0.0"
semver "^7.3.2"
tsutils "^3.17.1"
-"@typescript-eslint/experimental-utils@4.3.0":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.3.0.tgz#3f3c6c508e01b8050d51b016e7f7da0e3aefcb87"
- integrity sha512-cmmIK8shn3mxmhpKfzMMywqiEheyfXLV/+yPDnOTvQX/ztngx7Lg/OD26J8gTZfkLKUmaEBxO2jYP3keV7h2OQ==
+"@typescript-eslint/experimental-utils@4.6.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.6.0.tgz#f750aef4dd8e5970b5c36084f0a5ca2f0db309a4"
+ integrity sha512-pnh6Beh2/4xjJVNL+keP49DFHk3orDHHFylSp3WEjtgW3y1U+6l+jNnJrGlbs6qhAz5z96aFmmbUyKhunXKvKw==
dependencies:
"@types/json-schema" "^7.0.3"
- "@typescript-eslint/scope-manager" "4.3.0"
- "@typescript-eslint/types" "4.3.0"
- "@typescript-eslint/typescript-estree" "4.3.0"
+ "@typescript-eslint/scope-manager" "4.6.0"
+ "@typescript-eslint/types" "4.6.0"
+ "@typescript-eslint/typescript-estree" "4.6.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
-"@typescript-eslint/parser@^4.3.0":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.3.0.tgz#684fc0be6551a2bfcb253991eec3c786a8c063a3"
- integrity sha512-JyfRnd72qRuUwItDZ00JNowsSlpQGeKfl9jxwO0FHK1qQ7FbYdoy5S7P+5wh1ISkT2QyAvr2pc9dAemDxzt75g==
+"@typescript-eslint/parser@^4.6.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.6.0.tgz#7e9ff7df2f21d5c8f65f17add3b99eeeec33199d"
+ integrity sha512-Dj6NJxBhbdbPSZ5DYsQqpR32MwujF772F2H3VojWU6iT4AqL4BKuoNWOPFCoSZvCcADDvQjDpa6OLDAaiZPz2Q==
dependencies:
- "@typescript-eslint/scope-manager" "4.3.0"
- "@typescript-eslint/types" "4.3.0"
- "@typescript-eslint/typescript-estree" "4.3.0"
+ "@typescript-eslint/scope-manager" "4.6.0"
+ "@typescript-eslint/types" "4.6.0"
+ "@typescript-eslint/typescript-estree" "4.6.0"
debug "^4.1.1"
-"@typescript-eslint/scope-manager@4.3.0":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.3.0.tgz#c743227e087545968080d2362cfb1273842cb6a7"
- integrity sha512-cTeyP5SCNE8QBRfc+Lgh4Xpzje46kNUhXYfc3pQWmJif92sjrFuHT9hH4rtOkDTo/si9Klw53yIr+djqGZS1ig==
+"@typescript-eslint/scope-manager@4.6.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.6.0.tgz#b7d8b57fe354047a72dfb31881d9643092838662"
+ integrity sha512-uZx5KvStXP/lwrMrfQQwDNvh2ppiXzz5TmyTVHb+5TfZ3sUP7U1onlz3pjoWrK9konRyFe1czyxObWTly27Ang==
dependencies:
- "@typescript-eslint/types" "4.3.0"
- "@typescript-eslint/visitor-keys" "4.3.0"
+ "@typescript-eslint/types" "4.6.0"
+ "@typescript-eslint/visitor-keys" "4.6.0"
-"@typescript-eslint/types@4.3.0":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.3.0.tgz#1f0b2d5e140543e2614f06d48fb3ae95193c6ddf"
- integrity sha512-Cx9TpRvlRjOppGsU6Y6KcJnUDOelja2NNCX6AZwtVHRzaJkdytJWMuYiqi8mS35MRNA3cJSwDzXePfmhU6TANw==
+"@typescript-eslint/types@4.6.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.6.0.tgz#157ca925637fd53c193c6bf226a6c02b752dde2f"
+ integrity sha512-5FAgjqH68SfFG4UTtIFv+rqYJg0nLjfkjD0iv+5O27a0xEeNZ5rZNDvFGZDizlCD1Ifj7MAbSW2DPMrf0E9zjA==
-"@typescript-eslint/typescript-estree@4.3.0":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.3.0.tgz#0edc1068e6b2e4c7fdc54d61e329fce76241cee8"
- integrity sha512-ZAI7xjkl+oFdLV/COEz2tAbQbR3XfgqHEGy0rlUXzfGQic6EBCR4s2+WS3cmTPG69aaZckEucBoTxW9PhzHxxw==
+"@typescript-eslint/typescript-estree@4.6.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.6.0.tgz#85bd98dcc8280511cfc5b2ce7b03a9ffa1732b08"
+ integrity sha512-s4Z9qubMrAo/tw0CbN0IN4AtfwuehGXVZM0CHNMdfYMGBDhPdwTEpBrecwhP7dRJu6d9tT9ECYNaWDHvlFSngA==
dependencies:
- "@typescript-eslint/types" "4.3.0"
- "@typescript-eslint/visitor-keys" "4.3.0"
+ "@typescript-eslint/types" "4.6.0"
+ "@typescript-eslint/visitor-keys" "4.6.0"
debug "^4.1.1"
globby "^11.0.1"
is-glob "^4.0.1"
@@ -2507,18 +2491,18 @@
semver "^7.3.2"
tsutils "^3.17.1"
-"@typescript-eslint/visitor-keys@4.3.0":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.3.0.tgz#0e5ab0a09552903edeae205982e8521e17635ae0"
- integrity sha512-xZxkuR7XLM6RhvLkgv9yYlTcBHnTULzfnw4i6+z2TGBLy9yljAypQaZl9c3zFvy7PNI7fYWyvKYtohyF8au3cw==
+"@typescript-eslint/visitor-keys@4.6.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.6.0.tgz#fb05d6393891b0a089b243fc8f9fb8039383d5da"
+ integrity sha512-38Aa9Ztl0XyFPVzmutHXqDMCu15Xx8yKvUo38Gu3GhsuckCh3StPI5t2WIO9LHEsOH7MLmlGfKUisU8eW1Sjhg==
dependencies:
- "@typescript-eslint/types" "4.3.0"
+ "@typescript-eslint/types" "4.6.0"
eslint-visitor-keys "^2.0.0"
-"@vue/babel-helper-vue-jsx-merge-props@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040"
- integrity sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==
+"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81"
+ integrity sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==
"@vue/babel-helper-vue-transform-on@^1.0.0-rc.2":
version "1.0.0-rc.2"
@@ -2539,22 +2523,22 @@
html-tags "^3.1.0"
svg-tags "^1.0.0"
-"@vue/babel-plugin-transform-vue-jsx@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz#c0a3e6efc022e75e4247b448a8fc6b86f03e91c0"
- integrity sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ==
+"@vue/babel-plugin-transform-vue-jsx@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz#646046c652c2f0242727f34519d917b064041ed7"
+ integrity sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/plugin-syntax-jsx" "^7.2.0"
- "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
+ "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
html-tags "^2.0.0"
lodash.kebabcase "^4.1.1"
svg-tags "^1.0.0"
"@vue/babel-preset-app@^4.2.2":
- version "4.5.6"
- resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.5.6.tgz#391db83518790c07f241ca52ac97c6a71bd9d851"
- integrity sha512-Eps83UNiBJeqlbpR9afYnhvjVLElVtA4fDLNuVUr1r3RbepoxWuq+mUTr3TBArPQebnAaDcrZaNHBWTLRbfo3A==
+ version "4.5.8"
+ resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.5.8.tgz#3fc5f52181db76054ecc085622f3cb066c242f6d"
+ integrity sha512-efCBo2HY8Jcs6+SyCnvWl8jGeF1Fl38reFL35AjO4SBcro0ol/qjPkeeJLjzvXUxrHAsM9DMfL/DvPa/hBmZwQ==
dependencies:
"@babel/core" "^7.11.0"
"@babel/helper-compilation-targets" "^7.9.6"
@@ -2574,70 +2558,86 @@
semver "^6.1.0"
"@vue/babel-preset-jsx@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz#2e169eb4c204ea37ca66c2ea85a880bfc99d4f20"
- integrity sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ==
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.3.tgz#355f59206b691a558bc95e4dbd8e59cd27dd76cb"
+ integrity sha512-yMPoPFH6kiNFAhJknjLKAre7JQNWRPjH1K9EyzTPi/J5T5oDC8sEumSjWI6lBQxcSaBboXpQp92mvxZdXCfiFw==
dependencies:
- "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
- "@vue/babel-plugin-transform-vue-jsx" "^1.1.2"
- "@vue/babel-sugar-functional-vue" "^1.1.2"
- "@vue/babel-sugar-inject-h" "^1.1.2"
- "@vue/babel-sugar-v-model" "^1.1.2"
- "@vue/babel-sugar-v-on" "^1.1.2"
+ "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
+ "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
+ "@vue/babel-sugar-composition-api-inject-h" "^1.2.1"
+ "@vue/babel-sugar-composition-api-render-instance" "^1.2.1"
+ "@vue/babel-sugar-functional-vue" "^1.2.2"
+ "@vue/babel-sugar-inject-h" "^1.2.2"
+ "@vue/babel-sugar-v-model" "^1.2.3"
+ "@vue/babel-sugar-v-on" "^1.2.3"
-"@vue/babel-sugar-functional-vue@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz#f7e24fba09e6f1ee70104560a8808057555f1a9a"
- integrity sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ==
+"@vue/babel-sugar-composition-api-inject-h@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz#05d6e0c432710e37582b2be9a6049b689b6f03eb"
+ integrity sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==
dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0"
-"@vue/babel-sugar-inject-h@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz#8a5276b6d8e2ed16ffc8078aad94236274e6edf0"
- integrity sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w==
+"@vue/babel-sugar-composition-api-render-instance@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.1.tgz#745cf4608ed71476c66434203d0603f32b4c025b"
+ integrity sha512-F2gQbEMOUPyapqc85/O1Tbw0qBuvgXC/qBcBsjMKqC7KWJ4hK1eJUvU3iLHHTbre6V7zzIjrqEe0SoE1lR4mfw==
dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0"
-"@vue/babel-sugar-v-model@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz#1ff6fd1b800223fc9cb1e84dceb5e52d737a8192"
- integrity sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg==
+"@vue/babel-sugar-functional-vue@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz#267a9ac8d787c96edbf03ce3f392c49da9bd2658"
+ integrity sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==
dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0"
- "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
- "@vue/babel-plugin-transform-vue-jsx" "^1.1.2"
+
+"@vue/babel-sugar-inject-h@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz#d738d3c893367ec8491dcbb669b000919293e3aa"
+ integrity sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==
+ dependencies:
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-v-model@^1.2.3":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz#fa1f29ba51ebf0aa1a6c35fa66d539bc459a18f2"
+ integrity sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==
+ dependencies:
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+ "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
+ "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
camelcase "^5.0.0"
html-tags "^2.0.0"
svg-tags "^1.0.0"
-"@vue/babel-sugar-v-on@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz#b2ef99b8f2fab09fbead25aad70ef42e1cf5b13b"
- integrity sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ==
+"@vue/babel-sugar-v-on@^1.2.3":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz#342367178586a69f392f04bfba32021d02913ada"
+ integrity sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==
dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0"
- "@vue/babel-plugin-transform-vue-jsx" "^1.1.2"
+ "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
camelcase "^5.0.0"
-"@vue/compiler-core@3.0.0", "@vue/compiler-core@^3.0.0-rc.5":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.0.tgz#25e4f079cf6c39f83bad23700f814c619105a0f2"
- integrity sha512-XqPC7vdv4rFE77S71oCHmT1K4Ks3WE2Gi6Lr4B5wn0Idmp+NyQQBUHsCNieMDRiEpgtJrw+yOHslrsV0AfAsfQ==
+"@vue/compiler-core@3.0.2", "@vue/compiler-core@^3.0.0-rc.5":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.2.tgz#7790b7a1fcbba5ace4d81a70ce59096fa5c95734"
+ integrity sha512-GOlEMTlC/OdzBkKaKOniYErbkjoKxkBOmulxGmMR10I2JJX6TvXd/peaO/kla2xhpliV/M6Z4TLJp0yjAvRIAw==
dependencies:
- "@babel/parser" "^7.11.5"
- "@babel/types" "^7.11.5"
- "@vue/shared" "3.0.0"
+ "@babel/parser" "^7.12.0"
+ "@babel/types" "^7.12.0"
+ "@vue/shared" "3.0.2"
estree-walker "^2.0.1"
source-map "^0.6.1"
"@vue/compiler-dom@^3.0.0-rc.5":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.0.tgz#4cbb48fcf1f852daef2babcf9953b681ac463526"
- integrity sha512-ukDEGOP8P7lCPyStuM3F2iD5w2QPgUu2xwCW2XNeqPjFKIlR2xMsWjy4raI/cLjN6W16GtlMFaZdK8tLj5PRog==
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.2.tgz#1d40de04bcdf9aabb79fb6a802dd70a2f3c2992a"
+ integrity sha512-jvaL4QF2yXBJVD+JLbM2YA3e5fNfflJnfQ+GtfYk46ENGsEetqbkZqcX7fO+RHdG8tZBo7LCNBvgD0QLr+V4sg==
dependencies:
- "@vue/compiler-core" "3.0.0"
- "@vue/shared" "3.0.0"
+ "@vue/compiler-core" "3.0.2"
+ "@vue/shared" "3.0.2"
"@vue/component-compiler-utils@^2.5.2":
version "2.6.0"
@@ -2670,10 +2670,10 @@
optionalDependencies:
prettier "^1.18.2"
-"@vue/shared@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.0.tgz#ec089236629ecc0f10346b92f101ff4339169f1a"
- integrity sha512-4XWL/avABGxU2E2ZF1eZq3Tj7fvksCMssDZUHOykBIMmh5d+KcAnQMC5XHMhtnA0NAvktYsA2YpdsVwVmhWzvA==
+"@vue/shared@3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.2.tgz#419bd85a2ebdbd4f42963e98c5a1b103452176d9"
+ integrity sha512-Zx869zlNoujFOclKIoYmkh8ES2RcS/+Jn546yOiPyZ+3+Ejivnr+fb8l+DdXUEFjo+iVDNR3KyLzg03aBFfZ4Q==
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
@@ -2889,14 +2889,14 @@ acorn-walk@^7.1.1:
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
acorn@^6.1.1, acorn@^6.4.1:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
- integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
+ version "6.4.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+ integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0:
- version "7.4.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
- integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
address@^1.1.0:
version "1.1.2"
@@ -2934,10 +2934,10 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
-ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
- version "6.12.5"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da"
- integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
dependencies:
fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
@@ -3014,11 +3014,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
color-convert "^1.9.0"
ansi-styles@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
- integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
- "@types/color-name" "^1.1.1"
color-convert "^2.0.1"
any-observable@^0.3.0:
@@ -3905,9 +3904,9 @@ camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1:
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
camelcase@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e"
- integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.1.0.tgz#27dc176173725fb0adf8a48b647f4d7871944d78"
+ integrity sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==
caniuse-api@^3.0.0:
version "3.0.0"
@@ -3920,9 +3919,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135:
- version "1.0.30001141"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001141.tgz#214a196d81aa938b268fb0cb6d8fab23fdf14378"
- integrity sha512-EHfInJHoQTmlMdVZrEc5gmwPc0zyN/hVufmGHPbVNQwlk7tJfCmQ2ysRZMY2MeleBivALUTyyxXnQjK18XrVpA==
+ version "1.0.30001150"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001150.tgz#6d0d829da654b0b233576de00335586bc2004df1"
+ integrity sha512-kiNKvihW0m36UhAFnl7bOAv0i1K1f6wpfVtTF5O5O82XzgtBnb05V0XeV3oZ968vfg2sRNChsHw8ASH2hDfoYQ==
case-sensitive-paths-webpack-plugin@^2.2.0:
version "2.3.0"
@@ -4035,9 +4034,9 @@ chokidar@^2.0.4, chokidar@^2.1.0, chokidar@^2.1.8:
fsevents "^1.2.7"
chokidar@^3.4.1:
- version "3.4.2"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d"
- integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
+ integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==
dependencies:
anymatch "~3.1.1"
braces "~3.0.2"
@@ -4045,7 +4044,7 @@ chokidar@^3.4.1:
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
- readdirp "~3.4.0"
+ readdirp "~3.5.0"
optionalDependencies:
fsevents "~2.1.2"
@@ -4197,9 +4196,9 @@ collapse-white-space@^1.0.0, collapse-white-space@^1.0.2:
integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==
collect.js@^4.28.2:
- version "4.28.2"
- resolved "https://registry.yarnpkg.com/collect.js/-/collect.js-4.28.2.tgz#08c11c48923641f7e86899adbd55aa31ed5de5b0"
- integrity sha512-Ok2z0kuyywWJ4AtkeUI61pbSxCmaN5XYr/fkUYJP4bYk6Dz3NKH2FA8RhF7i3Do9Iq80MLRFWasSOpyE9X7hDA==
+ version "4.28.4"
+ resolved "https://registry.yarnpkg.com/collect.js/-/collect.js-4.28.4.tgz#29e8b6925b60be75eb14e3d2aeeeb9a94a8d6366"
+ integrity sha512-NJXATt6r+gtGOgDJOKLeooTY6QpGn8YQN/PkKnCmajJOguz/xGPgPrTyrBkmBBTHXnniPRIkUqjqt3AkjwCKlg==
collection-visit@^1.0.0:
version "1.0.0"
@@ -4233,21 +4232,21 @@ color-name@^1.0.0, color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-color-string@^1.5.2, color-string@^1.5.3:
- version "1.5.3"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
- integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+color-string@^1.5.3, color-string@^1.5.4:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6"
+ integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==
dependencies:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
color@^3.0.0, color@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
- integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e"
+ integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==
dependencies:
color-convert "^1.9.1"
- color-string "^1.5.2"
+ color-string "^1.5.4"
colorette@^1.2.1:
version "1.2.1"
@@ -4771,9 +4770,9 @@ css-what@2.1:
integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
css-what@^3.2.1:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.0.tgz#f8d042a1ebb31a8251e64d2a0f0ec3fee9a05267"
- integrity sha512-HA4iK1F5BEjbfSAguPk03XboiTvzS0tsqkoSJhkZVf52TgigRpIRGXtvSGRVgHcr1ln1Ubqx2flxKFwtY3kX9A==
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"
+ integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
cssesc@^2.0.0:
version "2.0.0"
@@ -4883,9 +4882,9 @@ cssstyle@^2.2.0:
cssom "~0.3.6"
csstype@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8"
- integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.4.tgz#b156d7be03b84ff425c9a0a4b1e5f4da9c5ca888"
+ integrity sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==
currently-unhandled@^0.4.1:
version "0.4.1"
@@ -4908,10 +4907,10 @@ cyclist@^1.0.1:
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-cypress@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/cypress/-/cypress-5.3.0.tgz#91122219ae66ab910058970dbf36619ab0fbde6c"
- integrity sha512-XgebyqL7Th6/8YenE1ddb7+d4EiCG2Jvg/5c8+HPfFFY/gXnOVhoCVUU3KW8qg3JL7g0B+iJbHd5hxuCqbd1RQ==
+cypress@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/cypress/-/cypress-5.5.0.tgz#1da0355794a43247f8a80cb7f505e83e1cf847cb"
+ integrity sha512-UHEiTca8AUTevbT2pWkHQlxoHtXmbq+h6Eiu/Mz8DqpNkF98zjTBLv/HFiKJUU5rQzp9EwSWtms33p5TWCJ8tQ==
dependencies:
"@cypress/listr-verbose-renderer" "^0.4.1"
"@cypress/request" "^2.88.5"
@@ -4943,10 +4942,10 @@ cypress@^5.3.0:
minimist "^1.2.5"
moment "^2.27.0"
ospath "^1.2.2"
- pretty-bytes "^5.3.0"
+ pretty-bytes "^5.4.1"
ramda "~0.26.1"
request-progress "^3.0.0"
- supports-color "^7.1.0"
+ supports-color "^7.2.0"
tmp "~0.2.1"
untildify "^4.0.0"
url "^0.11.0"
@@ -5363,10 +5362,10 @@ domhandler@^2.3.0:
dependencies:
domelementtype "1"
-domhandler@^3.0.0, domhandler@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.2.0.tgz#41711ab2f48f42b692537bcf279bc7f1167c83cd"
- integrity sha512-FnT5pxGpykNI10uuwyqae65Ysw7XBQJKDjDjlHgE/rsNtjr1FyGNVNQCVlM5hwcq9wkyWSqB+L5Z+Qa4khwLuA==
+domhandler@^3.0.0, domhandler@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a"
+ integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==
dependencies:
domelementtype "^2.0.1"
@@ -5387,13 +5386,13 @@ domutils@^1.5.1, domutils@^1.7.0:
domelementtype "1"
domutils@^2.0.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.1.tgz#73f65c09eb17943dd752d4a6e5d07914e52dc541"
- integrity sha512-AA5r2GD1Dljhxc+k4zD2HYQaDkDPBhTqmqF55wLNlxfhFQlqaYME8Jhmo2nKNBb+CNfPXE8SAjtF6SsZ0cza/w==
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b"
+ integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.0.1"
- domhandler "^3.2.0"
+ domhandler "^3.3.0"
dot-case@^3.0.3:
version "3.0.3"
@@ -5496,9 +5495,9 @@ ee-first@1.1.1:
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.3.571:
- version "1.3.576"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.576.tgz#2e70234484e03d7c7e90310d7d79fd3775379c34"
- integrity sha512-uSEI0XZ//5ic+0NdOqlxp0liCD44ck20OAGyLMSymIWTEAtHKVJi6JM18acOnRgUgX7Q65QqnI+sNncNvIy8ew==
+ version "1.3.583"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.583.tgz#47a9fde74740b1205dba96db2e433132964ba3ee"
+ integrity sha512-L9BwLwJohjZW9mQESI79HRzhicPk1DFgM+8hOCfGgGCFEcA3Otpv7QK6SGtYoZvfQfE3wKLh0Hd5ptqUFv3gvQ==
elegant-spinner@^1.0.1:
version "1.0.1"
@@ -5584,9 +5583,9 @@ entities@^1.1.1:
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
entities@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
- integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
+ integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
env-paths@^2.2.0:
version "2.2.0"
@@ -5641,7 +5640,7 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstrac
string.prototype.trimend "^1.0.1"
string.prototype.trimstart "^1.0.1"
-es-abstract@^1.18.0-next.0:
+es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1:
version "1.18.0-next.1"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68"
integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==
@@ -5686,9 +5685,9 @@ es6-promisify@^6.1.1:
integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==
escalade@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e"
- integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
escape-goat@^2.0.0:
version "2.1.1"
@@ -5780,15 +5779,15 @@ eslint-plugin-import@^2.22.1:
resolve "^1.17.0"
tsconfig-paths "^3.9.0"
-eslint-plugin-vue@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.0.0.tgz#abaf59dec3aa50228b37a89ca1239893c96c981f"
- integrity sha512-SFcM8ZMdVRUQKrAryl6Q5razrJtloATUOKTZoK/8yvQig1c1L3VRoMLL9AXiV3VNsKXolkk6yeMIiqGf33/Iew==
+eslint-plugin-vue@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.1.0.tgz#832d83e4e1e480c7285b2bc3ff1076cd0dca7a5b"
+ integrity sha512-9dW7kj8/d2IkDdgNpvIhJdJ3XzU3x4PThXYMzWt49taktYnGyrTY6/bXCYZ/VtQKU9kXPntPrZ41+8Pw0Nxblg==
dependencies:
eslint-utils "^2.1.0"
natural-compare "^1.4.0"
semver "^7.3.2"
- vue-eslint-parser "^7.1.0"
+ vue-eslint-parser "^7.1.1"
eslint-scope@^4.0.3:
version "4.0.3"
@@ -5823,13 +5822,13 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
-eslint@^7.10.0:
- version "7.10.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9"
- integrity sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==
+eslint@^7.12.1:
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801"
+ integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==
dependencies:
"@babel/code-frame" "^7.0.0"
- "@eslint/eslintrc" "^0.1.3"
+ "@eslint/eslintrc" "^0.2.1"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
@@ -5838,7 +5837,7 @@ eslint@^7.10.0:
enquirer "^2.3.5"
eslint-scope "^5.1.1"
eslint-utils "^2.1.0"
- eslint-visitor-keys "^1.3.0"
+ eslint-visitor-keys "^2.0.0"
espree "^7.3.0"
esquery "^1.2.0"
esutils "^2.0.2"
@@ -6773,9 +6772,9 @@ git-up@^4.0.0:
parse-url "^5.0.0"
git-url-parse@^11.1.2:
- version "11.3.0"
- resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.3.0.tgz#1515b4574c4eb2efda7d25cc50b29ce8beaefaae"
- integrity sha512-i3XNa8IKmqnUqWBcdWBjOcnyZYfN3C1WRvnKI6ouFWwsXCZEnlgbwbm55ZpJ3OJMhfEP/ryFhqW8bBhej3C5Ug==
+ version "11.4.0"
+ resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.0.tgz#f2bb1f2b00f05552540e95a62e31399a639a6aa6"
+ integrity sha512-KlIa5jvMYLjXMQXkqpFzobsyD/V2K5DRHl5OAf+6oDFPlPLxrGDVQlIdI63c4/Kt6kai4kALENSALlzTGST3GQ==
dependencies:
git-up "^4.0.0"
@@ -7006,19 +7005,19 @@ graphql-compose@7.20.1:
graphql-type-json "0.3.2"
object-path "^0.11.4"
-graphql-playground-html@^1.6.28:
- version "1.6.28"
- resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.28.tgz#4a7c2e368c3f44deb7e86b70d3782b65edc64213"
- integrity sha512-22uwTEGjZg0h9rYcM7WspcMPVsixAE8m56tNzwjGr2Y3pNY7OctbsMkJ3EPtPcL6ZdUpzsa4rMgYR54BGmTrpQ==
+graphql-playground-html@^1.6.29:
+ version "1.6.29"
+ resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz#5b0c60a0161cc0f3116085f64c5a16cb3b2d9a16"
+ integrity sha512-fbF/zZKuw2sdfKp8gjTORJ/I9xBsqeEYRseWxBzuR15NHMptRTT9414IyRCs3ognZzUDr5MDJgx97SlLZCtQyA==
dependencies:
xss "^1.0.6"
graphql-playground-middleware-express@^1.7.12:
- version "1.7.21"
- resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.21.tgz#e3af11848232000a2d61ab3c216d467fb6cf8376"
- integrity sha512-CjPHDZqJ8ifS6v+JCyEZOEGrR8eKHWaUIUawggfUlW1xFFHCNcBhG4/S7EnSUspaUldSnL/cFcBp4yLhYkG53A==
+ version "1.7.22"
+ resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.22.tgz#e4bbe4faaa56b48e95769c8b87b65e53355d91a4"
+ integrity sha512-PJLiCxLmN6Dp+dHGyHU92m9y3hB/RAkcUBWcqYl2fiP+EbpDDgNfElrsVzW60MhJe+LTV1PFqiInH2d3KNvlCQ==
dependencies:
- graphql-playground-html "^1.6.28"
+ graphql-playground-html "^1.6.29"
graphql-type-json@0.3.2:
version "0.3.2"
@@ -7385,9 +7384,9 @@ hex-color-regex@^1.1.0:
integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
highlight.js@^10.2.0:
- version "10.2.1"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.2.1.tgz#09784fe2e95612abbefd510948945d4fe6fa9668"
- integrity sha512-A+sckVPIb9zQTUydC9lpRX1qRFO/N0OKEh0NwIr65ckvWA/oMY8v9P3+kGRK3w2ULSh9E8v5MszXafodQ6039g==
+ version "10.3.1"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.3.1.tgz#3ca6bf007377faae347e8135ff25900aac734b9a"
+ integrity sha512-jeW8rdPdhshYKObedYg5XGbpVgb1/DT4AHvDFXhkU7UnGSIjy9kkJ7zHG7qplhFHMitTSzh5/iClKQk3Kb2RFQ==
hirestime@^3.2.1:
version "3.2.2"
@@ -7435,15 +7434,15 @@ html-entities@^1.2.0:
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==
-html-loader@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.3.1.tgz#16ae142e23daa4f0d67a2ac2fccaa087be5d64e2"
- integrity sha512-zL+z9mIhcXEXuHqzriTwZR4ZslZHi5IFNhjyJHyhJlhEgR8VtLTPbqeR5TdbNtHtb88zbVmlNB8ia2vr/GTrbA==
+html-loader@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.3.2.tgz#5a72ebba420d337083497c9aba7866c9e1aee340"
+ integrity sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==
dependencies:
html-minifier-terser "^5.1.1"
htmlparser2 "^4.1.0"
loader-utils "^2.0.0"
- schema-utils "^2.7.1"
+ schema-utils "^3.0.0"
html-minifier-terser@^5.1.1:
version "5.1.1"
@@ -7883,7 +7882,7 @@ into-stream@^3.1.0:
from2 "^2.1.1"
p-is-promise "^1.1.0"
-invariant@^2.2.2, invariant@^2.2.4:
+invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
@@ -7995,6 +7994,13 @@ is-color-stop@^1.0.0:
rgb-regex "^1.0.1"
rgba-regex "^1.0.0"
+is-core-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.0.0.tgz#58531b70aed1db7c0e8d4eb1a0a2d1ddd64bd12d"
+ integrity sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==
+ dependencies:
+ has "^1.0.3"
+
is-cwebp-readable@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-cwebp-readable/-/is-cwebp-readable-2.0.1.tgz#afb93b0c0abd0a25101016ae33aea8aedf926d26"
@@ -8360,9 +8366,9 @@ isobject@^3.0.0, isobject@^3.0.1:
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
isomorphic.js@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.1.4.tgz#6cc878773b0d895261a1b022e6863d564fcccd28"
- integrity sha512-t9zbgkjE7f9f2M6OSW49YEq0lUrSdAllBbWFUZoeck/rnnFae6UlhmDtXWs48VJY3ZpryCoZsRiAiKD44hPIGQ==
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.1.5.tgz#f210e58ba4c96978a991c443cf67283366e9b70f"
+ integrity sha512-MkX5lLQApx/8IAIU31PKvpAZosnu2Jqcj1rM8TzxyA4CR96tv3SgMKQNTCxL58G7696Q57zd7ubHV/hTg+5fNA==
isstream@~0.1.2:
version "0.1.2"
@@ -8606,7 +8612,7 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-klona@^2.0.3:
+klona@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
@@ -8660,13 +8666,6 @@ leven@^3.1.0:
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-levenary@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
- integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==
- dependencies:
- leven "^3.1.0"
-
levn@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
@@ -8963,7 +8962,7 @@ longest@^1.0.0:
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -9126,9 +9125,9 @@ markdown-escapes@^1.0.0:
integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
marked@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.0.tgz#7221ce2395fa6cf6d722e6f2871a32d3513c85ca"
- integrity sha512-tiRxakgbNPBr301ihe/785NntvYyhxlqcL3YaC8CaxJQh7kiaEtrN9B/eK2I2943Yjkh5gw25chYFDQhOMCwMA==
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.2.tgz#5d77ffb789c4cb0ae828bfe76250f7140b123f70"
+ integrity sha512-5jjKHVl/FPo0Z6ocP3zYhKiJLzkwJAw4CZoLjv57FkvbUuwOX4LIBBGGcXjAY6ATcd1q9B8UTj5T9Umauj0QYQ==
maxmin@^2.1.0:
version "2.1.0"
@@ -9585,7 +9584,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
-mkdirp-classic@^0.5.2:
+mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
@@ -9620,9 +9619,9 @@ module-details-from-path@^1.0.3:
integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=
moment@^2.24.0, moment@^2.27.0:
- version "2.29.0"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.0.tgz#fcbef955844d91deb55438613ddcec56e86a3425"
- integrity sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA==
+ version "2.29.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
+ integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
move-concurrently@^1.0.1:
version "1.0.1"
@@ -9695,9 +9694,9 @@ mz@^2.5.0:
thenify-all "^1.0.0"
nan@^2.12.1, nan@^2.13.2:
- version "2.14.1"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
- integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
+ version "2.14.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
+ integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
nanomatch@^1.2.9:
version "1.2.13"
@@ -9852,9 +9851,9 @@ node-libs-browser@^2.2.1:
vm-browserify "^1.0.1"
node-releases@^1.1.61:
- version "1.1.61"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e"
- integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==
+ version "1.1.64"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.64.tgz#71b4ae988e9b1dd7c1ffce58dd9e561752dfebc5"
+ integrity sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==
node-sass@^4.14.1:
version "4.14.1"
@@ -10083,9 +10082,9 @@ object-keys@^1.0.12, object-keys@^1.1.1:
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
object-path@^0.11.4:
- version "0.11.4"
- resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949"
- integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=
+ version "0.11.5"
+ resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a"
+ integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==
object-visit@^1.0.0:
version "1.0.1"
@@ -10377,12 +10376,12 @@ p-queue@^4.0.0:
eventemitter3 "^3.1.0"
p-queue@^6.3.0:
- version "6.6.1"
- resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.1.tgz#578891ada028a61371ec2692b26614d1b7d2b10a"
- integrity sha512-miQiSxLYPYBxGkrldecZC18OTLjdUqnlRebGzPRiVxB8mco7usCmm7hFuxiTvp93K18JnLtE4KMMycjAu/cQQg==
+ version "6.6.2"
+ resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
+ integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==
dependencies:
eventemitter3 "^4.0.4"
- p-timeout "^3.1.0"
+ p-timeout "^3.2.0"
p-reduce@^1.0.0:
version "1.0.0"
@@ -10403,7 +10402,7 @@ p-timeout@^2.0.1:
dependencies:
p-finally "^1.0.0"
-p-timeout@^3.1.0:
+p-timeout@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==
@@ -10756,6 +10755,11 @@ pngquant-bin@^5.0.0:
execa "^0.10.0"
logalot "^2.0.0"
+portal-vue@^2.1.7:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/portal-vue/-/portal-vue-2.1.7.tgz#ea08069b25b640ca08a5b86f67c612f15f4e4ad4"
+ integrity sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==
+
portfinder@^1.0.20:
version "1.0.28"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
@@ -10771,9 +10775,9 @@ posix-character-classes@^0.1.0:
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
postcss-calc@^7.0.1:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.4.tgz#5e177ddb417341e6d4a193c5d9fd8ada79094f8b"
- integrity sha512-0I79VRAd1UTkaHzY9w83P39YGO/M3bG7/tNLrHGEunBolfoGM0hSjrGvjoeaj0JE/zIw5GsI2KZ0UwDJqv5hjw==
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e"
+ integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==
dependencies:
postcss "^7.0.27"
postcss-selector-parser "^6.0.2"
@@ -11175,15 +11179,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.3
supports-color "^6.1.0"
prebuild-install@^5.3.4:
- version "5.3.5"
- resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.5.tgz#e7e71e425298785ea9d22d4f958dbaccf8bb0e1b"
- integrity sha512-YmMO7dph9CYKi5IR/BzjOJlRzpxGGVo1EsLSUZ0mt/Mq0HWZIHOKHHcHdT69yG54C9m6i45GpItwRHpk0Py7Uw==
+ version "5.3.6"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291"
+ integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==
dependencies:
detect-libc "^1.0.3"
expand-template "^2.0.3"
github-from-package "0.0.0"
minimist "^1.2.3"
- mkdirp "^0.5.1"
+ mkdirp-classic "^0.5.3"
napi-build-utils "^1.0.1"
node-abi "^2.7.0"
noop-logger "^0.1.1"
@@ -11232,23 +11236,23 @@ pretty-bytes@^3.0.0:
dependencies:
number-is-nan "^1.0.0"
-pretty-bytes@^5.3.0:
+pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b"
integrity sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA==
pretty-error@^2.0.2:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
- integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6"
+ integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==
dependencies:
- renderkid "^2.0.1"
- utila "~0.4"
+ lodash "^4.17.20"
+ renderkid "^2.0.4"
prismjs@^1.15.0, prismjs@^1.21.0:
- version "1.21.0"
- resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.21.0.tgz#36c086ec36b45319ec4218ee164c110f9fc015a3"
- integrity sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==
+ version "1.22.0"
+ resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.22.0.tgz#73c3400afc58a823dd7eed023f8e1ce9fd8977fa"
+ integrity sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==
optionalDependencies:
clipboard "^2.0.0"
@@ -11309,15 +11313,6 @@ promzard@^0.3.0:
dependencies:
read "1"
-prop-types@^15.6.2:
- version "15.7.2"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
- integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
- dependencies:
- loose-envify "^1.4.0"
- object-assign "^4.1.1"
- react-is "^16.8.1"
-
property-information@^4.0.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/property-information/-/property-information-4.2.0.tgz#f0e66e07cbd6fed31d96844d958d153ad3eb486e"
@@ -11326,9 +11321,9 @@ property-information@^4.0.0:
xtend "^4.0.1"
property-information@^5.0.0, property-information@^5.2.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943"
- integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA==
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69"
+ integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==
dependencies:
xtend "^4.0.0"
@@ -11385,10 +11380,10 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.1.3:
prosemirror-state "^1.0.0"
w3c-keyname "^2.2.0"
-prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.11.2, prosemirror-model@^1.8.1:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.11.2.tgz#3ce08172b465bc725c8808c18c2e9378fe69418d"
- integrity sha512-+gM+x1VUfGAyKR/g0bK7FC46fVNq0xVVL859QAQ7my2p5HzKrPps/pSbYn7T50XTG2r2IhZJChsUFUBHtcoN0Q==
+prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.12.0, prosemirror-model@^1.8.1:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.12.0.tgz#deb6acbce5c62ea35ef3d59c7d4c54f65d6d9fba"
+ integrity sha512-B5syrXluQwEPfih8PqZcVg2VWRUf8Rj97K/VNSkQtjUPL1BCoTUgdLERIlxdWHkwqvujFsT3Pw5ubc4/ofF1jQ==
dependencies:
orderedmap "^1.1.0"
@@ -11426,12 +11421,12 @@ prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transfor
dependencies:
prosemirror-model "^1.0.0"
-prosemirror-utils@^0.9.6:
- version "0.9.6"
- resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-0.9.6.tgz#3d97bd85897e3b535555867dc95a51399116a973"
- integrity sha512-UC+j9hQQ1POYfMc5p7UFxBTptRiGPR7Kkmbl3jVvU8VgQbkI89tR/GK+3QYC8n+VvBZrtAoCrJItNhWSxX3slA==
+prosemirror-utils@^1.0.0-0:
+ version "1.0.0-0"
+ resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-1.0.0-0.tgz#7dfd112abf69001508a76200f9c8660fda7fa85f"
+ integrity sha512-11hTMG4Qwqlux6Vwp/4m16mLDg6IwWb0/odsWXGtWvvRJo61SfG0RGYlA8H72vExmbnWpiXa7PNenZ6t12Rkqw==
-prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.16.0:
+prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3:
version "1.16.0"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.16.0.tgz#024440a8e9acbbb5826572eef58c21c11cd1e454"
integrity sha512-iFtStCw2byF0yLc3mm1ezGdFSd6SWM4pnJod+ZaJiU5ju36QdYM4Xwa+qNm/AaI2/MgxpJqi8jsGWOJNkeBQ/Q==
@@ -11440,6 +11435,15 @@ prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, pros
prosemirror-state "^1.0.0"
prosemirror-transform "^1.1.0"
+prosemirror-view@^1.16.1:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.16.1.tgz#375794a253151205394bb1ece07bcc2a647c85da"
+ integrity sha512-7iDdRf2PAIgOnstcxqUxzf8IbHGfxygQs5covfxOHLWKyx7SSLRnBIlwVda54Hr6N26F4t5Kj2jfK7uIBcAKAw==
+ dependencies:
+ prosemirror-model "^1.1.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.1.0"
+
proto-list@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
@@ -11533,9 +11537,9 @@ punycode@^2.1.0, punycode@^2.1.1:
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
pupa@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726"
- integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.0.tgz#9e4ec587952b5e4f2c06fe577b0e7db97e8ef721"
+ integrity sha512-Pj8EhJzFiPwnf4dEXpuUWwH8M/Yl4vpl4cN2RX1i3R77DWvbY5ZPKni7CCKkOYxz+XKt2fieemsV+WTZbIlYzg==
dependencies:
escape-goat "^2.0.0"
@@ -11638,13 +11642,13 @@ raw-body@^2.4.1:
iconv-lite "0.4.24"
unpipe "1.0.0"
-raw-loader@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz#14e1f726a359b68437e183d5a5b7d33a3eba6933"
- integrity sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A==
+raw-loader@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"
+ integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==
dependencies:
loader-utils "^2.0.0"
- schema-utils "^2.6.5"
+ schema-utils "^3.0.0"
rc@^1.2.7, rc@^1.2.8:
version "1.2.8"
@@ -11656,29 +11660,22 @@ rc@^1.2.7, rc@^1.2.8:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-react-dom@^16.13.1:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f"
- integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==
+react-dom@^17.0.1:
+ version "17.0.1"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6"
+ integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
- prop-types "^15.6.2"
- scheduler "^0.19.1"
+ scheduler "^0.20.1"
-react-is@^16.8.1:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
- integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-react@^16.13.1:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
- integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
+react@^17.0.1:
+ version "17.0.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
+ integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
- prop-types "^15.6.2"
read-cmd-shim@^1.0.1:
version "1.0.5"
@@ -11824,10 +11821,10 @@ readdirp@^2.2.1:
micromatch "^3.1.10"
readable-stream "^2.0.2"
-readdirp@~3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
- integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
+readdirp@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
+ integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
dependencies:
picomatch "^2.2.1"
@@ -11909,7 +11906,7 @@ regexpp@^3.0.0, regexpp@^3.1.0:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
-regexpu-core@^4.5.4, regexpu-core@^4.7.0:
+regexpu-core@^4.5.4, regexpu-core@^4.7.1:
version "4.7.1"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6"
integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==
@@ -12042,16 +12039,16 @@ remove-trailing-separator@^1.0.1:
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-renderkid@^2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149"
- integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
+renderkid@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.4.tgz#d325e532afb28d3f8796ffee306be8ffd6fc864c"
+ integrity sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==
dependencies:
css-select "^1.1.0"
dom-converter "^0.2"
htmlparser2 "^3.3.0"
+ lodash "^4.17.20"
strip-ansi "^3.0.0"
- utila "^0.4.0"
repeat-element@^1.1.2:
version "1.1.3"
@@ -12179,10 +12176,11 @@ resolve@1.12.0:
path-parse "^1.0.6"
resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.16.0, resolve@^1.17.0, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.8.1:
- version "1.17.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
- integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130"
+ integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==
dependencies:
+ is-core-module "^2.0.0"
path-parse "^1.0.6"
responselike@1.0.2, responselike@^1.0.2:
@@ -12343,9 +12341,9 @@ rollup@^1.32.1:
acorn "^7.1.0"
rollup@^2.26.11:
- version "2.28.2"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.28.2.tgz#599ec4978144a82d8a8ec3d37670a8440cb04e4b"
- integrity sha512-8txbsFBFLmm9Xdt4ByTOGa9Muonmc8MfNjnGAR8U8scJlF1ZW7AgNZa7aqBXaKtlvnYP/ab++fQIq9dB9NWUbg==
+ version "2.32.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.32.1.tgz#625a92c54f5b4d28ada12d618641491d4dbb548c"
+ integrity sha512-Op2vWTpvK7t6/Qnm1TTh7VjEZZkN8RWgf0DHbkKzQBwNf748YhXbozHVefqpPp/Fuyk/PQPAnYsBxAEtlMvpUw==
optionalDependencies:
fsevents "~2.1.2"
@@ -12432,15 +12430,15 @@ sass-graph@2.2.5:
scss-tokenizer "^0.2.3"
yargs "^13.3.2"
-sass-loader@^10.0.2:
- version "10.0.2"
- resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.2.tgz#c7b73010848b264792dd45372eea0b87cba4401e"
- integrity sha512-wV6NDUVB8/iEYMalV/+139+vl2LaRFlZGEd5/xmdcdzQcgmis+npyco6NsDTVOlNA3y2NV9Gcz+vHyFMIT+ffg==
+sass-loader@^10.0.3:
+ version "10.0.4"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.4.tgz#ec7181096947d078d60a1d76d527f47c19b151d8"
+ integrity sha512-zhdZ8qvZM4iL5XjLVEjJLvKWvC+MB+hHgzL2x/Nf7UHpUNmPYsJvypW79bW39g4LZ603dH/dRSsRYzJJIljtdA==
dependencies:
- klona "^2.0.3"
+ klona "^2.0.4"
loader-utils "^2.0.0"
neo-async "^2.6.2"
- schema-utils "^2.7.1"
+ schema-utils "^3.0.0"
semver "^7.3.2"
sax@~1.2.4:
@@ -12455,10 +12453,10 @@ saxes@^5.0.0:
dependencies:
xmlchars "^2.2.0"
-scheduler@^0.19.1:
- version "0.19.1"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
- integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
+scheduler@^0.20.1:
+ version "0.20.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c"
+ integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
@@ -12472,7 +12470,7 @@ schema-utils@^1.0.0:
ajv-errors "^1.0.0"
ajv-keywords "^3.1.0"
-schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.7.1:
+schema-utils@^2.6.1:
version "2.7.1"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
@@ -12481,6 +12479,15 @@ schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.7.1:
ajv "^6.12.4"
ajv-keywords "^3.5.2"
+schema-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
+ integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
+ dependencies:
+ "@types/json-schema" "^7.0.6"
+ ajv "^6.12.5"
+ ajv-keywords "^3.5.2"
+
scss-tokenizer@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
@@ -12875,9 +12882,9 @@ sort-object-keys@^1.1.3:
integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==
sort-package-json@^1.15.0:
- version "1.46.0"
- resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.46.0.tgz#ea30a03d17c23762bfbf115fa54500459508c9ca"
- integrity sha512-Fn5iiGKkATkEOQ0rol45dClfvNNW3r6PZ87mU4rbpz/M0Dxz+0D6oEU8nfpwUB5rd8u+WzsH2BQ/kRDwz+yVDQ==
+ version "1.46.1"
+ resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.46.1.tgz#b7812bb53ec34ca69ac0ad920e31193fd983015c"
+ integrity sha512-jUkuCxcXCZD31eIJ/Zza62LRP0lzd4LNkY0z0q1kDSvfBfCmPotrHPXVrz6WTppbGeM2JzNyyARQLUEnK4dUyg==
dependencies:
detect-indent "^6.0.0"
detect-newline "3.1.0"
@@ -13160,20 +13167,20 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
strip-ansi "^6.0.0"
string.prototype.trimend@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
- integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz#6ddd9a8796bc714b489a3ae22246a208f37bfa46"
+ integrity sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==
dependencies:
define-properties "^1.1.3"
- es-abstract "^1.17.5"
+ es-abstract "^1.18.0-next.1"
string.prototype.trimstart@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
- integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7"
+ integrity sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==
dependencies:
define-properties "^1.1.3"
- es-abstract "^1.17.5"
+ es-abstract "^1.18.0-next.1"
string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
@@ -13367,7 +13374,7 @@ supports-color@^6.1.0:
dependencies:
has-flag "^3.0.0"
-supports-color@^7.1.0:
+supports-color@^7.1.0, supports-color@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
@@ -13791,10 +13798,10 @@ trough@^1.0.0:
dependencies:
glob "^7.1.2"
-ts-loader@^8.0.4:
- version "8.0.4"
- resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.4.tgz#02b9c91fbcfdb3114d8b1e98a3829265270eee7a"
- integrity sha512-5u8KF1SW8eCUb/Ff7At81e3wznPmT/27fvaGRO9CziVy+6NlPVRvrzSox4OwU0/e6OflOUB32Err4VquysCSAQ==
+ts-loader@^8.0.7:
+ version "8.0.7"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.7.tgz#9ce70db5b3906cc9143a09c54ff5247d102ea974"
+ integrity sha512-ooa4wxlZ9TOXaJ/iVyZlWsim79Ul4KyifSwyT2hOrbQA6NZJypsLOE198o8Ko+JV+ZHnMArvWcl4AnRqpCU/Mw==
dependencies:
chalk "^2.3.0"
enhanced-resolve "^4.0.0"
@@ -13818,9 +13825,9 @@ tslib@1.10.0:
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
- integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tsutils@^3.17.1:
version "3.17.1"
@@ -13927,10 +13934,10 @@ typescript@^3.9.5:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"
integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==
-typescript@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.3.tgz#153bbd468ef07725c1df9c77e8b453f8d36abba5"
- integrity sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==
+typescript@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389"
+ integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==
uglify-js@3.4.x:
version "3.4.10"
@@ -13941,9 +13948,9 @@ uglify-js@3.4.x:
source-map "~0.6.1"
uglify-js@^3.1.4:
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.0.tgz#67317658d76c21e0e54d3224aee2df4ee6c3e1dc"
- integrity sha512-e1KQFRCpOxnrJsJVqDUCjURq+wXvIn7cK2sRAx9XL3HYLL9aezOP4Pb1+Y3/o693EPk111Yj2Q+IUXxcpHlygQ==
+ version "3.11.3"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.3.tgz#b2f8c87826344f091ba48c417c499d6cba5d5786"
+ integrity sha512-wDRziHG94mNj2n3R864CvYw/+pc9y/RNImiTyrrf8BzgWn75JgFSwYvXrtZQMnMnOp/4UTrf3iCSQxSStPiByA==
uid-number@0.0.6:
version "0.0.6"
@@ -14120,9 +14127,9 @@ unist-util-visit-parents@^2.0.0:
unist-util-is "^3.0.0"
unist-util-visit-parents@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz#4dd262fb9dcfe44f297d53e882fc6ff3421173d5"
- integrity sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6"
+ integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==
dependencies:
"@types/unist" "^2.0.0"
unist-util-is "^4.0.0"
@@ -14322,7 +14329,7 @@ util@^0.11.0:
dependencies:
inherits "2.0.3"
-utila@^0.4.0, utila@~0.4:
+utila@~0.4:
version "0.4.0"
resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
@@ -14427,10 +14434,10 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
-vue-eslint-parser@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz#9cdbcc823e656b087507a1911732b867ac101e83"
- integrity sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q==
+vue-eslint-parser@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.1.tgz#c43c1c715ff50778b9a7e9a4e16921185f3425d3"
+ integrity sha512-8FdXi0gieEwh1IprIBafpiJWcApwrU+l2FEj8c1HtHFdNXMd0+2jUSjBVmcQYohf/E72irwAXEXLga6TQcB3FA==
dependencies:
debug "^4.1.1"
eslint-scope "^5.0.0"
@@ -14440,9 +14447,9 @@ vue-eslint-parser@^7.1.0:
lodash "^4.17.15"
vue-github-button@^1.1.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/vue-github-button/-/vue-github-button-1.2.0.tgz#5624a2807b16bdac61589f55503b8a492d2a9d5b"
- integrity sha512-lvGrbQnHWX8bYovtBFz5uSgtbM+glXXQQq5VR79YDsZ+Fh5DBpLR+Ws5YLz9eSA+gNGi3xnXKjZDbUeQXOYh6A==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/vue-github-button/-/vue-github-button-1.3.0.tgz#a4da317a3b93d05824768b3916a0d22fa91603be"
+ integrity sha512-Cc92t+GBLwBPhwtHSvKXjbx07U3+6xdi+eR+s9c734tHbndipCLenJjLVkgErNhKZ0EvDjRyuu8Hu69gg9/TxQ==
dependencies:
github-buttons "^2.8.0"
@@ -14451,29 +14458,29 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
-vue-inbrowser-compiler-utils@^4.32.1:
- version "4.32.1"
- resolved "https://registry.yarnpkg.com/vue-inbrowser-compiler-utils/-/vue-inbrowser-compiler-utils-4.32.1.tgz#d8774a4b7e91677d4d17d441485f5eafc77bc65d"
- integrity sha512-IL8rBV3lCyHErqD8sBdQhWz3zJ/wLzG6JfoSzZ3K6HShS5QqIQfJN0GESvzIos6EGvmtByEf4TTJnjm12b51VQ==
+vue-inbrowser-compiler-utils@^4.33.4:
+ version "4.33.4"
+ resolved "https://registry.yarnpkg.com/vue-inbrowser-compiler-utils/-/vue-inbrowser-compiler-utils-4.33.4.tgz#895d6053612d6b88a29e8c58d7284e44eebfbcf5"
+ integrity sha512-8/YvqKy0s7UUUdR8eHLwbuAEb3qs5SfM4Og21E9scKxAwfFBw20YJCLnXB/uEbYsGGpuMg/oY0P7lehfBhm1Tw==
dependencies:
camelcase "^5.3.1"
-vue-inbrowser-compiler@^4.32.1:
- version "4.32.1"
- resolved "https://registry.yarnpkg.com/vue-inbrowser-compiler/-/vue-inbrowser-compiler-4.32.1.tgz#8f19ba7b999f418e53839b6e2a36a1dcbac8ac14"
- integrity sha512-eHNJ6fenrTISxS2t540eB6K7O4AcZX7x73ZHHkK78sGAFeRDaxB17gEqtPPY2mgSi124gEy1I0MzFo+cHEJNSA==
+vue-inbrowser-compiler@^4.33.4:
+ version "4.33.4"
+ resolved "https://registry.yarnpkg.com/vue-inbrowser-compiler/-/vue-inbrowser-compiler-4.33.4.tgz#1a6604edc5ba5023a3688c5284efe8e739ad0da6"
+ integrity sha512-7CmoZaXMLQlA8DH3849OOeuYIhHTC0jHYNsrCxN/nBp/1wD+4e6tAedE5yqcy0zw8qfXRmK5Sl/TZW4GZA8lzg==
dependencies:
acorn "^6.1.1"
acorn-jsx "^5.0.1"
buble "^0.19.7"
camelcase "^5.3.1"
- vue-inbrowser-compiler-utils "^4.32.1"
+ vue-inbrowser-compiler-utils "^4.33.4"
walkes "^0.2.1"
-vue-live@^1.14.0:
- version "1.14.0"
- resolved "https://registry.yarnpkg.com/vue-live/-/vue-live-1.14.0.tgz#bcc0c9a069008e61586d5c6c003c847ddd574c63"
- integrity sha512-DTY2iqk4GgZ/f3P8VcVjlB2MvU8/rNBtYREaD42vaedaHzq4/53lvqkCFsqrY9cmVJVxwc8aEp/qw81kLy1wyQ==
+vue-live@^1.15.1:
+ version "1.15.1"
+ resolved "https://registry.yarnpkg.com/vue-live/-/vue-live-1.15.1.tgz#59696a63df51cb128460659c07f32aaabd51ae17"
+ integrity sha512-C6dZ4eur3Fxlw6lg0t64LNHpWNAecpy93U2wfmO9qLEgfa0MLiCC3E3XbWRyEqPSKuyBfklEWuy4+hRXSF0FQA==
dependencies:
"@babel/runtime" "^7.11.2"
"@vue/compiler-core" "^3.0.0-rc.5"
@@ -14484,7 +14491,7 @@ vue-live@^1.14.0:
hash-sum "^2.0.0"
prismjs "^1.21.0"
recast "^0.19.1"
- vue-inbrowser-compiler "^4.32.1"
+ vue-inbrowser-compiler "^4.33.4"
vue-prism-editor "^1.2.2"
vue-template-compiler "^2.6.12"
@@ -14512,9 +14519,9 @@ vue-prism-editor@^1.2.2:
integrity sha512-Lq2VgVygTx3Whn/tC8gD4m1ajA4lzSyCTqPLZA1Dq/ErbBaZA93FWRblwCoDR7AD2nXhGWuiTzb5ih3guzB7DA==
vue-router@^3.1.3:
- version "3.4.5"
- resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.4.5.tgz#d396ec037b35931bdd1e9b7edd86f9788dc15175"
- integrity sha512-ioRY5QyDpXM9TDjOX6hX79gtaMXSVDDzSlbIlyAmbHNteIL81WIVB2e+jbzV23vzxtoV0krdS2XHm+GxFg+Nxg==
+ version "3.4.7"
+ resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.4.7.tgz#bf189bafd16f4e4ef783c4a6250a3090f2c1fa1b"
+ integrity sha512-CbHXue5BLrDivOk5O4eZ0WT4Yj8XwdXa4kCnsEIOzYUPF/07ZukayA2jGxDCJxLc9SgVQX9QX0OuGOwGlVB4Qg==
vue-server-renderer@^2.6.10:
version "2.6.12"
@@ -14737,9 +14744,9 @@ whatwg-url@^7.0.0:
webidl-conversions "^4.0.2"
whatwg-url@^8.0.0:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.3.0.tgz#d1e11e565334486cdb280d3101b9c3fd1c867582"
- integrity sha512-BQRf/ej5Rp3+n7k0grQXZj9a1cHtsp4lqj01p59xBWFKdezR8sO37XnpafwNqiFac/v2Il12EIMjX/Y4VZtT8Q==
+ version "8.4.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837"
+ integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==
dependencies:
lodash.sortby "^4.7.0"
tr46 "^2.0.2"
@@ -15057,9 +15064,9 @@ yauzl@^2.10.0, yauzl@^2.4.2:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
-yjs@^13.4.0:
- version "13.4.0"
- resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.4.0.tgz#b8cedabf853897d6061b3efd88ce306ad18621f5"
- integrity sha512-7Uk28QwLILYoTjfOYL9LwGJpcLL8Nfs52u7pVLrBKiyGkH9D6dj3k+M5/BlRx7g4S4FvuG/yezsGU/UVLuV6Lg==
+yjs@^13.4.1:
+ version "13.4.1"
+ resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.4.1.tgz#5ef869eb2e64f028eb013952a5f28412a084dc90"
+ integrity sha512-kIh0sprCTzIm2qyr1VsovkvjKzD2GR4WcU/McJpLAEvImCJHA78Q3S6uSLnhZX0i7FQdrLPCRT8DtTPEH73jnw==
dependencies:
lib0 "^0.2.33"