feat: add tiptap class

* update docs
* update demos
This commit is contained in:
Patrick Baber 2023-05-25 13:45:06 +02:00 committed by GitHub
parent d61a621186
commit 614fc8082c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
219 changed files with 1386 additions and 1378 deletions

View File

@ -29,7 +29,7 @@ export function debug() {
// @ts-ignore // @ts-ignore
sendData('source', window.source) sendData('source', window.source)
waitUntilElementExists('.ProseMirror', element => { waitUntilElementExists('.tiptap', element => {
// @ts-ignore // @ts-ignore
const editor = element.editor const editor = element.editor

View File

@ -73,7 +73,7 @@ select {
} }
} }
.ProseMirror:focus { .tiptap:focus {
outline: none; outline: none;
} }

View File

@ -94,7 +94,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

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

View File

@ -4,7 +4,7 @@ context('/src/Examples/AutolinkValidation/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
}) })
const validLinks = [ const validLinks = [
@ -26,75 +26,75 @@ context('/src/Examples/AutolinkValidation/React/', () => {
validLinks.forEach(([rawTextInput, textThatShouldBeLinked]) => { validLinks.forEach(([rawTextInput, textThatShouldBeLinked]) => {
it(`should autolink ${rawTextInput}`, () => { it(`should autolink ${rawTextInput}`, () => {
cy.get('.ProseMirror').type(rawTextInput) cy.get('.tiptap').type(rawTextInput)
cy.get('.ProseMirror a').contains(textThatShouldBeLinked) cy.get('.tiptap a').contains(textThatShouldBeLinked)
}) })
}) })
invalidLinks.forEach(rawTextInput => { invalidLinks.forEach(rawTextInput => {
it(`should not autolink ${rawTextInput}`, () => { it(`should not autolink ${rawTextInput}`, () => {
cy.get('.ProseMirror').type(`{selectall}{backspace}${rawTextInput}`) cy.get('.tiptap').type(`{selectall}{backspace}${rawTextInput}`)
cy.get('.ProseMirror a').should('not.exist') cy.get('.tiptap a').should('not.exist')
}) })
}) })
it('should not relink unset links after entering second link', () => { it('should not relink unset links after entering second link', () => {
cy.get('.ProseMirror').type('https://tiptap.dev {home}') cy.get('.tiptap').type('https://tiptap.dev {home}')
cy.get('.ProseMirror').should('have.text', 'https://tiptap.dev ') cy.get('.tiptap').should('have.text', 'https://tiptap.dev ')
cy.get('[data-testid=unsetLink]').click() cy.get('[data-testid=unsetLink]').click()
cy.get('.ProseMirror') cy.get('.tiptap')
.find('a') .find('a')
.should('have.length', 0) .should('have.length', 0)
cy.get('.ProseMirror').type('{end}http://www.example.com/ ') cy.get('.tiptap').type('{end}http://www.example.com/ ')
cy.get('.ProseMirror') cy.get('.tiptap')
.find('a') .find('a')
.should('have.length', 1) .should('have.length', 1)
.should('have.attr', 'href', 'http://www.example.com/') .should('have.attr', 'href', 'http://www.example.com/')
}) })
it('should not relink unset links after hitting next paragraph', () => { it('should not relink unset links after hitting next paragraph', () => {
cy.get('.ProseMirror').type('https://tiptap.dev {home}') cy.get('.tiptap').type('https://tiptap.dev {home}')
cy.get('.ProseMirror').should('have.text', 'https://tiptap.dev ') cy.get('.tiptap').should('have.text', 'https://tiptap.dev ')
cy.get('[data-testid=unsetLink]').click() cy.get('[data-testid=unsetLink]').click()
cy.get('.ProseMirror') cy.get('.tiptap')
.find('a') .find('a')
.should('have.length', 0) .should('have.length', 0)
cy.get('.ProseMirror').type('{end}typing other text should prevent the link from relinking when hitting enter{enter}') cy.get('.tiptap').type('{end}typing other text should prevent the link from relinking when hitting enter{enter}')
cy.get('.ProseMirror') cy.get('.tiptap')
.find('a') .find('a')
.should('have.length', 0) .should('have.length', 0)
}) })
it('should not relink unset links after modifying', () => { it('should not relink unset links after modifying', () => {
cy.get('.ProseMirror').type('https://tiptap.dev {home}') cy.get('.tiptap').type('https://tiptap.dev {home}')
cy.get('.ProseMirror').should('have.text', 'https://tiptap.dev ') cy.get('.tiptap').should('have.text', 'https://tiptap.dev ')
cy.get('[data-testid=unsetLink]').click() cy.get('[data-testid=unsetLink]').click()
cy.get('.ProseMirror') cy.get('.tiptap')
.find('a') .find('a')
.should('have.length', 0) .should('have.length', 0)
cy.get('.ProseMirror') cy.get('.tiptap')
.type('{home}') .type('{home}')
.type('{rightArrow}'.repeat('https://'.length)) .type('{rightArrow}'.repeat('https://'.length))
.type('blah') .type('blah')
cy.get('.ProseMirror').should('have.text', 'https://blahtiptap.dev ') cy.get('.tiptap').should('have.text', 'https://blahtiptap.dev ')
cy.get('.ProseMirror') cy.get('.tiptap')
.find('a') .find('a')
.should('have.length', 0) .should('have.length', 0)
}) })
it('should autolink after hitting enter (new paragraph)', () => { it('should autolink after hitting enter (new paragraph)', () => {
cy.get('.ProseMirror').type('https://tiptap.dev{enter}') cy.get('.tiptap').type('https://tiptap.dev{enter}')
cy.get('.ProseMirror').should('have.text', 'https://tiptap.dev') cy.get('.tiptap').should('have.text', 'https://tiptap.dev')
cy.get('.ProseMirror') cy.get('.tiptap')
.find('a') .find('a')
.should('have.length', 1) .should('have.length', 1)
.should('have.attr', 'href', 'https://tiptap.dev') .should('have.attr', 'href', 'https://tiptap.dev')
}) })
it('should autolink after hitting shift-enter (hardbreak)', () => { it('should autolink after hitting shift-enter (hardbreak)', () => {
cy.get('.ProseMirror').type('https://tiptap.dev{shift+enter}') cy.get('.tiptap').type('https://tiptap.dev{shift+enter}')
cy.get('.ProseMirror').should('have.text', 'https://tiptap.dev') cy.get('.tiptap').should('have.text', 'https://tiptap.dev')
cy.get('.ProseMirror') cy.get('.tiptap')
.find('a') .find('a')
.should('have.length', 1) .should('have.length', 1)
.should('have.attr', 'href', 'https://tiptap.dev') .should('have.attr', 'href', 'https://tiptap.dev')

View File

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

View File

@ -4,7 +4,7 @@ context('/src/Examples/AutolinkValidation/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
}) })
const validLinks = [ const validLinks = [
@ -26,15 +26,15 @@ context('/src/Examples/AutolinkValidation/Vue/', () => {
validLinks.forEach(([rawTextInput, textThatShouldBeLinked]) => { validLinks.forEach(([rawTextInput, textThatShouldBeLinked]) => {
it(`should autolink ${rawTextInput}`, () => { it(`should autolink ${rawTextInput}`, () => {
cy.get('.ProseMirror').type(rawTextInput) cy.get('.tiptap').type(rawTextInput)
cy.get('.ProseMirror a').contains(textThatShouldBeLinked) cy.get('.tiptap a').contains(textThatShouldBeLinked)
}) })
}) })
invalidLinks.forEach(rawTextInput => { invalidLinks.forEach(rawTextInput => {
it(`should not autolink ${rawTextInput}`, () => { it(`should not autolink ${rawTextInput}`, () => {
cy.get('.ProseMirror').type(`{selectall}{backspace}${rawTextInput}`) cy.get('.tiptap').type(`{selectall}{backspace}${rawTextInput}`)
cy.get('.ProseMirror a').should('not.exist') cy.get('.tiptap a').should('not.exist')
}) })
}) })
}) })

View File

@ -45,7 +45,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,7 +4,7 @@ context('/src/Examples/Book/React/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })

View File

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

View File

@ -4,7 +4,7 @@ context('/src/Examples/Book/Vue/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })

View File

@ -106,7 +106,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

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

View File

@ -131,7 +131,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -15,7 +15,7 @@ context('/src/Examples/CodeBlockLanguage/React/', () => {
expect(initialCount).to.be.greaterThan(0) expect(initialCount).to.be.greaterThan(0)
cy.get('.ProseMirror select').select('java') cy.get('.tiptap select').select('java')
cy.wait(500) cy.wait(500)
cy.get('[class^=hljs]').then(newElements => { cy.get('[class^=hljs]').then(newElements => {

View File

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

View File

@ -15,7 +15,7 @@ context('/src/Examples/CodeBlockLanguage/Vue/', () => {
expect(initialCount).to.be.greaterThan(0) expect(initialCount).to.be.greaterThan(0)
cy.get('.ProseMirror select').select('java') cy.get('.tiptap select').select('java')
cy.wait(500) cy.wait(500)
cy.get('[class^=hljs]').then(newElements => { cy.get('[class^=hljs]').then(newElements => {

View File

@ -87,7 +87,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

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

View File

@ -264,7 +264,7 @@ export default {
} }
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -7,17 +7,17 @@ context('/src/Examples/Community/React/', () => {
// check if count text is "44/280 characters" // check if count text is "44/280 characters"
cy.get('.character-count__text').should('have.text', '44/280 characters') cy.get('.character-count__text').should('have.text', '44/280 characters')
// type in .ProseMirror // type in .tiptap
cy.get('.ProseMirror').type(' Hello World') cy.get('.tiptap').type(' Hello World')
cy.get('.character-count__text').should('have.text', '56/280 characters') cy.get('.character-count__text').should('have.text', '56/280 characters')
// remove content from .ProseMirror and enter text // remove content from .tiptap and enter text
cy.get('.ProseMirror').type('{selectall}{backspace}Hello World') cy.get('.tiptap').type('{selectall}{backspace}Hello World')
cy.get('.character-count__text').should('have.text', '11/280 characters') cy.get('.character-count__text').should('have.text', '11/280 characters')
}) })
it('should mention a user', () => { it('should mention a user', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}@') cy.get('.tiptap').type('{selectall}{backspace}@')
// check if the mention autocomplete is visible // check if the mention autocomplete is visible
cy.get('.tippy-content .items').should('be.visible') cy.get('.tippy-content .items').should('be.visible')
@ -29,7 +29,7 @@ context('/src/Examples/Community/React/', () => {
$el.click() $el.click()
// check if the user is mentioned // check if the user is mentioned
cy.get('.ProseMirror').should('have.text', `@${name} `) cy.get('.tiptap').should('have.text', `@${name} `)
cy.get('.character-count__text').should('have.text', '2/280 characters') cy.get('.character-count__text').should('have.text', '2/280 characters')
}) })

View File

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

View File

@ -7,17 +7,17 @@ context('/src/Examples/Community/Vue/', () => {
// check if count text is "44/280 characters" // check if count text is "44/280 characters"
cy.get('.character-count__text').should('have.text', '44/280 characters') cy.get('.character-count__text').should('have.text', '44/280 characters')
// type in .ProseMirror // type in .tiptap
cy.get('.ProseMirror').type(' Hello World') cy.get('.tiptap').type(' Hello World')
cy.get('.character-count__text').should('have.text', '56/280 characters') cy.get('.character-count__text').should('have.text', '56/280 characters')
// remove content from .ProseMirror and enter text // remove content from .tiptap and enter text
cy.get('.ProseMirror').type('{selectall}{backspace}Hello World') cy.get('.tiptap').type('{selectall}{backspace}Hello World')
cy.get('.character-count__text').should('have.text', '11/280 characters') cy.get('.character-count__text').should('have.text', '11/280 characters')
}) })
it('should mention a user', () => { it('should mention a user', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}@') cy.get('.tiptap').type('{selectall}{backspace}@')
// check if the mention autocomplete is visible // check if the mention autocomplete is visible
cy.get('.tippy-content .items').should('be.visible') cy.get('.tippy-content .items').should('be.visible')
@ -29,7 +29,7 @@ context('/src/Examples/Community/Vue/', () => {
$el.click() $el.click()
// check if the user is mentioned // check if the user is mentioned
cy.get('.ProseMirror').should('have.text', `@${name} `) cy.get('.tiptap').should('have.text', `@${name} `)
cy.get('.character-count__text').should('have.text', '2/280 characters') cy.get('.character-count__text').should('have.text', '2/280 characters')
}) })

View File

@ -96,7 +96,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,42 +4,42 @@ context('/src/Examples/CustomDocument/React/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })
}) })
it('should have a headline and a paragraph', () => { it('should have a headline and a paragraph', () => {
cy.get('.ProseMirror h1').should('exist').should('have.text', 'Itll always have a heading …') cy.get('.tiptap h1').should('exist').should('have.text', 'Itll always have a heading …')
cy.get('.ProseMirror p').should('exist').should('have.text', '… if you pass a custom document. Thats the beauty of having full control over the schema.') cy.get('.tiptap p').should('exist').should('have.text', '… if you pass a custom document. Thats the beauty of having full control over the schema.')
}) })
it('should have a tooltip for a paragraph on a new line', () => { it('should have a tooltip for a paragraph on a new line', () => {
cy.get('.ProseMirror').type('{enter}') cy.get('.tiptap').type('{enter}')
cy.get('.ProseMirror p[data-placeholder]').should('exist').should('have.attr', 'data-placeholder', 'Can you add some further context?') cy.get('.tiptap p[data-placeholder]').should('exist').should('have.attr', 'data-placeholder', 'Can you add some further context?')
}) })
it('should have a headline after clearing the document', () => { it('should have a headline after clearing the document', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('.ProseMirror').focus() cy.get('.tiptap').focus()
cy.get('.ProseMirror h1[data-placeholder]') cy.get('.tiptap h1[data-placeholder]')
.should('exist') .should('exist')
.should('have.attr', 'class', 'is-empty is-editor-empty') .should('have.attr', 'class', 'is-empty is-editor-empty')
.should('have.attr', 'data-placeholder', 'Whats the title?') .should('have.attr', 'data-placeholder', 'Whats the title?')
}) })
it('should have a headline after clearing the document & enter paragraph automatically after adding a headline', () => { it('should have a headline after clearing the document & enter paragraph automatically after adding a headline', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}Hello world{enter}') cy.get('.tiptap').type('{selectall}{backspace}Hello world{enter}')
cy.get('.ProseMirror h1') cy.get('.tiptap h1')
.should('exist') .should('exist')
.should('have.text', 'Hello world') .should('have.text', 'Hello world')
cy.get('.ProseMirror p[data-placeholder]') cy.get('.tiptap p[data-placeholder]')
.should('exist') .should('exist')
.should('have.attr', 'data-placeholder', 'Can you add some further context?') .should('have.attr', 'data-placeholder', 'Can you add some further context?')
cy.get('.ProseMirror').type('This is a paragraph for this test document') cy.get('.tiptap').type('This is a paragraph for this test document')
cy.get('.ProseMirror p') cy.get('.tiptap p')
.should('exist') .should('exist')
.should('have.text', 'This is a paragraph for this test document') .should('have.text', 'This is a paragraph for this test document')
}) })

View File

@ -1,12 +1,12 @@
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }
} }
/* Placeholder (at the top) */ /* Placeholder (at the top) */
/*.ProseMirror p.is-editor-empty:first-child::before { /*.tiptap p.is-editor-empty:first-child::before {
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
color: #ced4da; color: #ced4da;
@ -15,7 +15,7 @@
}*/ }*/
/* Placeholder (on every new line) */ /* Placeholder (on every new line) */
.ProseMirror .is-empty::before { .tiptap .is-empty::before {
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
color: #ced4da; color: #ced4da;

View File

@ -4,44 +4,44 @@ context('/src/Examples/CustomDocument/Vue/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })
}) })
it('should have a headline and a paragraph', () => { it('should have a headline and a paragraph', () => {
cy.get('.ProseMirror h1').should('exist').should('have.text', 'Itll always have a heading …') cy.get('.tiptap h1').should('exist').should('have.text', 'Itll always have a heading …')
cy.get('.ProseMirror p').should('exist').should('have.text', '… if you pass a custom document. Thats the beauty of having full control over the schema.') cy.get('.tiptap p').should('exist').should('have.text', '… if you pass a custom document. Thats the beauty of having full control over the schema.')
}) })
it('should have a tooltip for a paragraph on a new line', () => { it('should have a tooltip for a paragraph on a new line', () => {
cy.get('.ProseMirror').type('{enter}') cy.get('.tiptap').type('{enter}')
cy.get('.ProseMirror p[data-placeholder]').should('exist').should('have.attr', 'data-placeholder', 'Can you add some further context?') cy.get('.tiptap p[data-placeholder]').should('exist').should('have.attr', 'data-placeholder', 'Can you add some further context?')
}) })
it('should have a headline after clearing the document', () => { it('should have a headline after clearing the document', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.wait(100) cy.wait(100)
cy.get('.ProseMirror').focus() cy.get('.tiptap').focus()
cy.get('.ProseMirror h1[data-placeholder]') cy.get('.tiptap h1[data-placeholder]')
.should('exist') .should('exist')
.should('have.attr', 'class', 'is-empty is-editor-empty') .should('have.attr', 'class', 'is-empty is-editor-empty')
.should('have.attr', 'data-placeholder', 'Whats the title?') .should('have.attr', 'data-placeholder', 'Whats the title?')
}) })
it('should have a headline after clearing the document & enter paragraph automatically after adding a headline', () => { it('should have a headline after clearing the document & enter paragraph automatically after adding a headline', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}Hello world{enter}') cy.get('.tiptap').type('{selectall}{backspace}Hello world{enter}')
cy.wait(100) cy.wait(100)
cy.get('.ProseMirror h1') cy.get('.tiptap h1')
.should('exist') .should('exist')
.should('have.text', 'Hello world') .should('have.text', 'Hello world')
cy.get('.ProseMirror p[data-placeholder]') cy.get('.tiptap p[data-placeholder]')
.should('exist') .should('exist')
.should('have.attr', 'data-placeholder', 'Can you add some further context?') .should('have.attr', 'data-placeholder', 'Can you add some further context?')
cy.get('.ProseMirror').type('This is a paragraph for this test document') cy.get('.tiptap').type('This is a paragraph for this test document')
cy.get('.ProseMirror p') cy.get('.tiptap p')
.should('exist') .should('exist')
.should('have.text', 'This is a paragraph for this test document') .should('have.text', 'This is a paragraph for this test document')
}) })

View File

@ -59,14 +59,14 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }
} }
/* Placeholder (at the top) */ /* Placeholder (at the top) */
/*.ProseMirror p.is-editor-empty:first-child::before { /*.tiptap p.is-editor-empty:first-child::before {
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
color: #ced4da; color: #ced4da;
@ -75,7 +75,7 @@ export default {
}*/ }*/
/* Placeholder (on every new line) */ /* Placeholder (on every new line) */
.ProseMirror .is-empty::before { .tiptap .is-empty::before {
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
color: #ced4da; color: #ced4da;

View File

@ -4,20 +4,20 @@ context('/src/Examples/CustomParagraph/React/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })
}) })
it('should have a paragraph and text length', () => { it('should have a paragraph and text length', () => {
cy.get('.ProseMirror p').should('exist').should('have.text', 'Each line shows the number of characters in the paragraph.') cy.get('.tiptap p').should('exist').should('have.text', 'Each line shows the number of characters in the paragraph.')
cy.get('.ProseMirror .label').should('exist').should('have.text', '58') cy.get('.tiptap .label').should('exist').should('have.text', '58')
}) })
it('should have new paragraph', () => { it('should have new paragraph', () => {
cy.get('.ProseMirror').type('{selectall}{moveToEnd}{enter}') cy.get('.tiptap').type('{selectall}{moveToEnd}{enter}')
cy.get('.ProseMirror p').eq(1).should('exist').should('have.text', '') cy.get('.tiptap p').eq(1).should('exist').should('have.text', '')
cy.get('.ProseMirror .label').eq(1).should('exist').should('have.text', '0') cy.get('.tiptap .label').eq(1).should('exist').should('have.text', '0')
}) })
}) })

View File

@ -1,12 +1,12 @@
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }
} }
/* Placeholder (at the top) */ /* Placeholder (at the top) */
/*.ProseMirror p.is-editor-empty:first-child::before { /*.tiptap p.is-editor-empty:first-child::before {
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
color: #ced4da; color: #ced4da;
@ -15,7 +15,7 @@
}*/ }*/
/* Placeholder (on every new line) */ /* Placeholder (on every new line) */
.ProseMirror .is-empty::before { .tiptap .is-empty::before {
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
color: #ced4da; color: #ced4da;

View File

@ -4,20 +4,20 @@ context('/src/Examples/CustomParagraph/React/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })
}) })
it('should have a paragraph and text length', () => { it('should have a paragraph and text length', () => {
cy.get('.ProseMirror p').should('exist').should('have.text', 'Each line shows the number of characters in the paragraph.') cy.get('.tiptap p').should('exist').should('have.text', 'Each line shows the number of characters in the paragraph.')
cy.get('.ProseMirror .label').should('exist').should('have.text', '58') cy.get('.tiptap .label').should('exist').should('have.text', '58')
}) })
it('should have new paragraph', () => { it('should have new paragraph', () => {
cy.get('.ProseMirror').type('{selectall}{moveToEnd}{enter}') cy.get('.tiptap').type('{selectall}{moveToEnd}{enter}')
cy.get('.ProseMirror p').eq(1).should('exist').should('have.text', '') cy.get('.tiptap p').eq(1).should('exist').should('have.text', '')
cy.get('.ProseMirror .label').eq(1).should('exist').should('have.text', '0') cy.get('.tiptap .label').eq(1).should('exist').should('have.text', '0')
}) })
}) })

View File

@ -46,7 +46,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,17 +4,17 @@ context('/src/Examples/Default/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.setContent('<h1>Example Text</h1>') editor.commands.setContent('<h1>Example Text</h1>')
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
}) })
}) })
it('should apply the paragraph style when the keyboard shortcut is pressed', () => { it('should apply the paragraph style when the keyboard shortcut is pressed', () => {
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
cy.get('.ProseMirror p').should('not.exist') cy.get('.tiptap p').should('not.exist')
cy.get('.ProseMirror') cy.get('.tiptap')
.trigger('keydown', { modKey: true, altKey: true, key: '0' }) .trigger('keydown', { modKey: true, altKey: true, key: '0' })
.find('p') .find('p')
.should('contain', 'Example Text') .should('contain', 'Example Text')
@ -28,58 +28,58 @@ context('/src/Examples/Default/React/', () => {
buttonMarks.forEach(m => { buttonMarks.forEach(m => {
it(`should disable ${m.label} when the code tag is enabled for cursor`, () => { it(`should disable ${m.label} when the code tag is enabled for cursor`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains(m.label).should('be.disabled') cy.get('button').contains(m.label).should('be.disabled')
}) })
it(`should enable ${m.label} when the code tag is disabled for cursor`, () => { it(`should enable ${m.label} when the code tag is disabled for cursor`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains(m.label).should('not.be.disabled') cy.get('button').contains(m.label).should('not.be.disabled')
}) })
it(`should disable ${m.label} when the code tag is enabled for selection`, () => { it(`should disable ${m.label} when the code tag is enabled for selection`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world{selectall}') cy.get('.tiptap').type('{selectall}Hello world{selectall}')
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains(m.label).should('be.disabled') cy.get('button').contains(m.label).should('be.disabled')
}) })
it(`should enable ${m.label} when the code tag is disabled for selection`, () => { it(`should enable ${m.label} when the code tag is disabled for selection`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world{selectall}') cy.get('.tiptap').type('{selectall}Hello world{selectall}')
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains(m.label).should('not.be.disabled') cy.get('button').contains(m.label).should('not.be.disabled')
}) })
it(`should apply ${m.label} when the button is pressed`, () => { it(`should apply ${m.label} when the button is pressed`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
cy.get('button').contains(m.label).click() cy.get('button').contains(m.label).click()
cy.get(`.ProseMirror ${m.tag}`).should('exist').should('have.text', 'Hello world') cy.get(`.tiptap ${m.tag}`).should('exist').should('have.text', 'Hello world')
}) })
}) })
it('should clear marks when the button is pressed', () => { it('should clear marks when the button is pressed', () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
cy.get('button').contains('bold').click() cy.get('button').contains('bold').click()
cy.get('.ProseMirror strong').should('exist').should('have.text', 'Hello world') cy.get('.tiptap strong').should('exist').should('have.text', 'Hello world')
cy.get('button').contains('clear marks').click() cy.get('button').contains('clear marks').click()
cy.get('.ProseMirror strong').should('not.exist') cy.get('.tiptap strong').should('not.exist')
}) })
it('should clear nodes when the button is pressed', () => { it('should clear nodes when the button is pressed', () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('bullet list').click() cy.get('button').contains('bullet list').click()
cy.get('.ProseMirror ul').should('exist').should('have.text', 'Hello world') cy.get('.tiptap ul').should('exist').should('have.text', 'Hello world')
cy.get('.ProseMirror').type('{enter}A second item{enter}A third item{selectall}') cy.get('.tiptap').type('{enter}A second item{enter}A third item{selectall}')
cy.get('button').contains('clear nodes').click() cy.get('button').contains('clear nodes').click()
cy.get('.ProseMirror ul').should('not.exist') cy.get('.tiptap ul').should('not.exist')
cy.get('.ProseMirror p').should('have.length', 3) cy.get('.tiptap p').should('have.length', 3)
}) })
const buttonNodes = [ const buttonNodes = [
@ -98,46 +98,46 @@ context('/src/Examples/Default/React/', () => {
buttonNodes.forEach(n => { buttonNodes.forEach(n => {
it(`should set ${n.label} when the button is pressed`, () => { it(`should set ${n.label} when the button is pressed`, () => {
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}Hello world{selectall}') cy.get('.tiptap').type('{selectall}Hello world{selectall}')
cy.get('button').contains(n.label).click() cy.get('button').contains(n.label).click()
cy.get(`.ProseMirror ${n.tag}`).should('exist').should('have.text', 'Hello world') cy.get(`.tiptap ${n.tag}`).should('exist').should('have.text', 'Hello world')
cy.get('button').contains(n.label).click() cy.get('button').contains(n.label).click()
cy.get(`.ProseMirror ${n.tag}`).should('not.exist') cy.get(`.tiptap ${n.tag}`).should('not.exist')
}) })
}) })
it('should add a hr when on the same line as a node', () => { it('should add a hr when on the same line as a node', () => {
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('button').contains('horizontal rule').click() cy.get('button').contains('horizontal rule').click()
cy.get('.ProseMirror hr').should('exist') cy.get('.tiptap hr').should('exist')
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
}) })
it('should add a hr when on a new line', () => { it('should add a hr when on a new line', () => {
cy.get('.ProseMirror').type('{rightArrow}{enter}') cy.get('.tiptap').type('{rightArrow}{enter}')
cy.get('button').contains('horizontal rule').click() cy.get('button').contains('horizontal rule').click()
cy.get('.ProseMirror hr').should('exist') cy.get('.tiptap hr').should('exist')
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
}) })
it('should add a br', () => { it('should add a br', () => {
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('button').contains('hard break').click() cy.get('button').contains('hard break').click()
cy.get('.ProseMirror h1 br').should('exist') cy.get('.tiptap h1 br').should('exist')
}) })
it('should undo', () => { it('should undo', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('button').contains('undo').click() cy.get('button').contains('undo').click()
cy.get('.ProseMirror').should('contain', 'Hello world') cy.get('.tiptap').should('contain', 'Hello world')
}) })
it('should redo', () => { it('should redo', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('button').contains('undo').click() cy.get('button').contains('undo').click()
cy.get('.ProseMirror').should('contain', 'Hello world') cy.get('.tiptap').should('contain', 'Hello world')
cy.get('button').contains('redo').click() cy.get('button').contains('redo').click()
cy.get('.ProseMirror').should('not.contain', 'Hello world') cy.get('.tiptap').should('not.contain', 'Hello world')
}) })
}) })

View File

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

View File

@ -4,17 +4,17 @@ context('/src/Examples/Default/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.setContent('<h1>Example Text</h1>') editor.commands.setContent('<h1>Example Text</h1>')
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
}) })
}) })
it('should apply the paragraph style when the keyboard shortcut is pressed', () => { it('should apply the paragraph style when the keyboard shortcut is pressed', () => {
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
cy.get('.ProseMirror p').should('not.exist') cy.get('.tiptap p').should('not.exist')
cy.get('.ProseMirror') cy.get('.tiptap')
.trigger('keydown', { modKey: true, altKey: true, key: '0' }) .trigger('keydown', { modKey: true, altKey: true, key: '0' })
.find('p') .find('p')
.should('contain', 'Example Text') .should('contain', 'Example Text')
@ -28,32 +28,32 @@ context('/src/Examples/Default/React/', () => {
buttonMarks.forEach(m => { buttonMarks.forEach(m => {
it(`should apply ${m.label} when the button is pressed`, () => { it(`should apply ${m.label} when the button is pressed`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
cy.get('button').contains(m.label).click() cy.get('button').contains(m.label).click()
cy.get(`.ProseMirror ${m.tag}`).should('exist').should('have.text', 'Hello world') cy.get(`.tiptap ${m.tag}`).should('exist').should('have.text', 'Hello world')
}) })
}) })
it('should clear marks when the button is pressed', () => { it('should clear marks when the button is pressed', () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
cy.get('button').contains('bold').click() cy.get('button').contains('bold').click()
cy.get('.ProseMirror strong').should('exist').should('have.text', 'Hello world') cy.get('.tiptap strong').should('exist').should('have.text', 'Hello world')
cy.get('button').contains('clear marks').click() cy.get('button').contains('clear marks').click()
cy.get('.ProseMirror strong').should('not.exist') cy.get('.tiptap strong').should('not.exist')
}) })
it('should clear nodes when the button is pressed', () => { it('should clear nodes when the button is pressed', () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('bullet list').click() cy.get('button').contains('bullet list').click()
cy.get('.ProseMirror ul').should('exist').should('have.text', 'Hello world') cy.get('.tiptap ul').should('exist').should('have.text', 'Hello world')
cy.get('.ProseMirror').type('{enter}A second item{enter}A third item{selectall}') cy.get('.tiptap').type('{enter}A second item{enter}A third item{selectall}')
cy.get('button').contains('clear nodes').click() cy.get('button').contains('clear nodes').click()
cy.get('.ProseMirror ul').should('not.exist') cy.get('.tiptap ul').should('not.exist')
cy.get('.ProseMirror p').should('have.length', 3) cy.get('.tiptap p').should('have.length', 3)
}) })
const buttonNodes = [ const buttonNodes = [
@ -72,46 +72,46 @@ context('/src/Examples/Default/React/', () => {
buttonNodes.forEach(n => { buttonNodes.forEach(n => {
it(`should set ${n.label} when the button is pressed`, () => { it(`should set ${n.label} when the button is pressed`, () => {
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}Hello world{selectall}') cy.get('.tiptap').type('{selectall}Hello world{selectall}')
cy.get('button').contains(n.label).click() cy.get('button').contains(n.label).click()
cy.get(`.ProseMirror ${n.tag}`).should('exist').should('have.text', 'Hello world') cy.get(`.tiptap ${n.tag}`).should('exist').should('have.text', 'Hello world')
cy.get('button').contains(n.label).click() cy.get('button').contains(n.label).click()
cy.get(`.ProseMirror ${n.tag}`).should('not.exist') cy.get(`.tiptap ${n.tag}`).should('not.exist')
}) })
}) })
it('should add a hr when on the same line as a node', () => { it('should add a hr when on the same line as a node', () => {
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('button').contains('horizontal rule').click() cy.get('button').contains('horizontal rule').click()
cy.get('.ProseMirror hr').should('exist') cy.get('.tiptap hr').should('exist')
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
}) })
it('should add a hr when on a new line', () => { it('should add a hr when on a new line', () => {
cy.get('.ProseMirror').type('{rightArrow}{enter}') cy.get('.tiptap').type('{rightArrow}{enter}')
cy.get('button').contains('horizontal rule').click() cy.get('button').contains('horizontal rule').click()
cy.get('.ProseMirror hr').should('exist') cy.get('.tiptap hr').should('exist')
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
}) })
it('should add a br', () => { it('should add a br', () => {
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('button').contains('hard break').click() cy.get('button').contains('hard break').click()
cy.get('.ProseMirror h1 br').should('exist') cy.get('.tiptap h1 br').should('exist')
}) })
it('should undo', () => { it('should undo', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('button').contains('undo').click() cy.get('button').contains('undo').click()
cy.get('.ProseMirror').should('contain', 'Hello world') cy.get('.tiptap').should('contain', 'Hello world')
}) })
it('should redo', () => { it('should redo', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('button').contains('undo').click() cy.get('button').contains('undo').click()
cy.get('.ProseMirror').should('contain', 'Hello world') cy.get('.tiptap').should('contain', 'Hello world')
cy.get('button').contains('redo').click() cy.get('button').contains('redo').click()
cy.get('.ProseMirror').should('not.contain', 'Hello world') cy.get('.tiptap').should('not.contain', 'Hello world')
}) })
}) })

View File

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

View File

@ -4,17 +4,17 @@ context('/src/Examples/Default/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.setContent('<h1>Example Text</h1>') editor.commands.setContent('<h1>Example Text</h1>')
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
}) })
}) })
it('should apply the paragraph style when the keyboard shortcut is pressed', () => { it('should apply the paragraph style when the keyboard shortcut is pressed', () => {
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
cy.get('.ProseMirror p').should('not.exist') cy.get('.tiptap p').should('not.exist')
cy.get('.ProseMirror') cy.get('.tiptap')
.trigger('keydown', { modKey: true, altKey: true, key: '0' }) .trigger('keydown', { modKey: true, altKey: true, key: '0' })
.find('p') .find('p')
.should('contain', 'Example Text') .should('contain', 'Example Text')
@ -28,32 +28,32 @@ context('/src/Examples/Default/Vue/', () => {
buttonMarks.forEach(m => { buttonMarks.forEach(m => {
it(`should apply ${m.label} when the button is pressed`, () => { it(`should apply ${m.label} when the button is pressed`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
cy.get('button').contains(m.label).click() cy.get('button').contains(m.label).click()
cy.get(`.ProseMirror ${m.tag}`).should('exist').should('have.text', 'Hello world') cy.get(`.tiptap ${m.tag}`).should('exist').should('have.text', 'Hello world')
}) })
}) })
it('should clear marks when the button is pressed', () => { it('should clear marks when the button is pressed', () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
cy.get('button').contains('bold').click() cy.get('button').contains('bold').click()
cy.get('.ProseMirror strong').should('exist').should('have.text', 'Hello world') cy.get('.tiptap strong').should('exist').should('have.text', 'Hello world')
cy.get('button').contains('clear marks').click() cy.get('button').contains('clear marks').click()
cy.get('.ProseMirror strong').should('not.exist') cy.get('.tiptap strong').should('not.exist')
}) })
it('should clear nodes when the button is pressed', () => { it('should clear nodes when the button is pressed', () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('bullet list').click() cy.get('button').contains('bullet list').click()
cy.get('.ProseMirror ul').should('exist').should('have.text', 'Hello world') cy.get('.tiptap ul').should('exist').should('have.text', 'Hello world')
cy.get('.ProseMirror').type('{enter}A second item{enter}A third item{selectall}') cy.get('.tiptap').type('{enter}A second item{enter}A third item{selectall}')
cy.get('button').contains('clear nodes').click() cy.get('button').contains('clear nodes').click()
cy.get('.ProseMirror ul').should('not.exist') cy.get('.tiptap ul').should('not.exist')
cy.get('.ProseMirror p').should('have.length', 3) cy.get('.tiptap p').should('have.length', 3)
}) })
const buttonNodes = [ const buttonNodes = [
@ -72,46 +72,46 @@ context('/src/Examples/Default/Vue/', () => {
buttonNodes.forEach(n => { buttonNodes.forEach(n => {
it(`should set ${n.label} when the button is pressed`, () => { it(`should set ${n.label} when the button is pressed`, () => {
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}Hello world{selectall}') cy.get('.tiptap').type('{selectall}Hello world{selectall}')
cy.get('button').contains(n.label).click() cy.get('button').contains(n.label).click()
cy.get(`.ProseMirror ${n.tag}`).should('exist').should('have.text', 'Hello world') cy.get(`.tiptap ${n.tag}`).should('exist').should('have.text', 'Hello world')
cy.get('button').contains(n.label).click() cy.get('button').contains(n.label).click()
cy.get(`.ProseMirror ${n.tag}`).should('not.exist') cy.get(`.tiptap ${n.tag}`).should('not.exist')
}) })
}) })
it('should add a hr when on the same line as a node', () => { it('should add a hr when on the same line as a node', () => {
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('button').contains('horizontal rule').click() cy.get('button').contains('horizontal rule').click()
cy.get('.ProseMirror hr').should('exist') cy.get('.tiptap hr').should('exist')
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
}) })
it('should add a hr when on a new line', () => { it('should add a hr when on a new line', () => {
cy.get('.ProseMirror').type('{rightArrow}{enter}') cy.get('.tiptap').type('{rightArrow}{enter}')
cy.get('button').contains('horizontal rule').click() cy.get('button').contains('horizontal rule').click()
cy.get('.ProseMirror hr').should('exist') cy.get('.tiptap hr').should('exist')
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
}) })
it('should add a br', () => { it('should add a br', () => {
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('button').contains('hard break').click() cy.get('button').contains('hard break').click()
cy.get('.ProseMirror h1 br').should('exist') cy.get('.tiptap h1 br').should('exist')
}) })
it('should undo', () => { it('should undo', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('button').contains('undo').click() cy.get('button').contains('undo').click()
cy.get('.ProseMirror').should('contain', 'Hello world') cy.get('.tiptap').should('contain', 'Hello world')
}) })
it('should redo', () => { it('should redo', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('button').contains('undo').click() cy.get('button').contains('undo').click()
cy.get('.ProseMirror').should('contain', 'Hello world') cy.get('.tiptap').should('contain', 'Hello world')
cy.get('button').contains('redo').click() cy.get('button').contains('redo').click()
cy.get('.ProseMirror').should('not.contain', 'Hello world') cy.get('.tiptap').should('not.contain', 'Hello world')
}) })
}) })

View File

@ -128,7 +128,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,18 +4,18 @@ context('/src/Examples/Drawing/Vue/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })
}) })
it('should have a svg canvas', () => { it('should have a svg canvas', () => {
cy.get('.ProseMirror svg').should('exist') cy.get('.tiptap svg').should('exist')
}) })
it('should draw on the svg canvas', () => { it('should draw on the svg canvas', () => {
cy.get('.ProseMirror svg').should('exist') cy.get('.tiptap svg').should('exist')
cy.wait(500) cy.wait(500)
@ -23,13 +23,13 @@ context('/src/Examples/Drawing/Vue/', () => {
const color = inputs[0].value const color = inputs[0].value
const size = inputs[1].value const size = inputs[1].value
cy.get('.ProseMirror svg') cy.get('.tiptap svg')
.click() .click()
.trigger('mousedown', { pageX: 100, pageY: 100, which: 1 }) .trigger('mousedown', { pageX: 100, pageY: 100, which: 1 })
.trigger('mousemove', { pageX: 200, pageY: 200, which: 1 }) .trigger('mousemove', { pageX: 200, pageY: 200, which: 1 })
.trigger('mouseup') .trigger('mouseup')
cy.get('.ProseMirror svg path') cy.get('.tiptap svg path')
.should('exist') .should('exist')
.should('have.attr', 'stroke-width', size) .should('have.attr', 'stroke-width', size)
.should('have.attr', 'stroke', color.toUpperCase()) .should('have.attr', 'stroke', color.toUpperCase())

View File

@ -4,7 +4,7 @@ context('/src/Examples/Formatting/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
}) })
const marks = [ const marks = [
@ -13,9 +13,9 @@ context('/src/Examples/Formatting/React/', () => {
marks.forEach(m => { marks.forEach(m => {
it(`sets ${m.label}`, () => { it(`sets ${m.label}`, () => {
cy.get('.ProseMirror').type('Hello world.{selectall}') cy.get('.tiptap').type('Hello world.{selectall}')
cy.get('button').contains(m.label).click() cy.get('button').contains(m.label).click()
cy.get('.ProseMirror mark').should('exist') cy.get('.tiptap mark').should('exist')
}) })
}) })
@ -28,10 +28,10 @@ context('/src/Examples/Formatting/React/', () => {
alignments.forEach(a => { alignments.forEach(a => {
it(`sets ${a.label}`, () => { it(`sets ${a.label}`, () => {
cy.get('.ProseMirror').type('Hello world.{selectall}') cy.get('.tiptap').type('Hello world.{selectall}')
cy.get('button').contains(a.label).click() cy.get('button').contains(a.label).click()
if (a.alignment !== 'left') { if (a.alignment !== 'left') {
cy.get('.ProseMirror p').should('have.css', 'text-align', a.alignment) cy.get('.tiptap p').should('have.css', 'text-align', a.alignment)
} }
}) })
}) })

View File

@ -1,5 +1,5 @@
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
margin-top: 1rem; margin-top: 1rem;
> * + * { > * + * {

View File

@ -4,7 +4,7 @@ context('/src/Examples/Formatting/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
}) })
const marks = [ const marks = [
@ -13,9 +13,9 @@ context('/src/Examples/Formatting/Vue/', () => {
marks.forEach(m => { marks.forEach(m => {
it(`sets ${m.label}`, () => { it(`sets ${m.label}`, () => {
cy.get('.ProseMirror').type('Hello world.{selectall}') cy.get('.tiptap').type('Hello world.{selectall}')
cy.get('button').contains(m.label).click() cy.get('button').contains(m.label).click()
cy.get('.ProseMirror mark').should('exist') cy.get('.tiptap mark').should('exist')
}) })
}) })
@ -28,10 +28,10 @@ context('/src/Examples/Formatting/Vue/', () => {
alignments.forEach(a => { alignments.forEach(a => {
it(`sets ${a.label}`, () => { it(`sets ${a.label}`, () => {
cy.get('.ProseMirror').type('Hello world.{selectall}') cy.get('.tiptap').type('Hello world.{selectall}')
cy.get('button').contains(a.label).click() cy.get('button').contains(a.label).click()
if (a.alignment !== 'left') { if (a.alignment !== 'left') {
cy.get('.ProseMirror p').should('have.css', 'text-align', a.alignment) cy.get('.tiptap p').should('have.css', 'text-align', a.alignment)
} }
}) })
}) })

View File

@ -103,7 +103,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
margin-top: 1rem; margin-top: 1rem;
> * + * { > * + * {

View File

@ -4,21 +4,21 @@ context('/src/Examples/Images/React/', () => {
}) })
it('finds image elements inside editor', () => { it('finds image elements inside editor', () => {
cy.get('.ProseMirror img').should('have.length', 2) cy.get('.tiptap img').should('have.length', 2)
}) })
it('allows removing images', () => { it('allows removing images', () => {
cy.get('.ProseMirror img').should('have.length', 2) cy.get('.tiptap img').should('have.length', 2)
cy.get('.ProseMirror img').first().trigger('mousedown', { which: 1 }) cy.get('.tiptap img').first().trigger('mousedown', { which: 1 })
cy.get('.ProseMirror').type('{backspace}') cy.get('.tiptap').type('{backspace}')
cy.get('.ProseMirror img').should('have.length', 1) cy.get('.tiptap img').should('have.length', 1)
}) })
it('allows images to be added via URL', () => { it('allows images to be added via URL', () => {
cy.window().then(win => { cy.window().then(win => {
cy.stub(win, 'prompt').returns('https://unsplash.it/250/250') cy.stub(win, 'prompt').returns('https://unsplash.it/250/250')
cy.get('button').contains('add image from URL').click({ force: false }) cy.get('button').contains('add image from URL').click({ force: false })
cy.get('.ProseMirror img').should('have.length', 3) cy.get('.tiptap img').should('have.length', 3)
}) })
}) })
}) })

View File

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

View File

@ -5,14 +5,14 @@ context('/src/Examples/Images/Vue/', () => {
// TODO: Write tests // TODO: Write tests
it('finds image elements inside editor', () => { it('finds image elements inside editor', () => {
cy.get('.ProseMirror img').should('have.length', 2) cy.get('.tiptap img').should('have.length', 2)
}) })
it('allows removing images', () => { it('allows removing images', () => {
cy.get('.ProseMirror img').should('have.length', 2) cy.get('.tiptap img').should('have.length', 2)
cy.get('.ProseMirror img').first().trigger('mousedown', { which: 1 }) cy.get('.tiptap img').first().trigger('mousedown', { which: 1 })
cy.get('.ProseMirror').type('{backspace}') cy.get('.tiptap').type('{backspace}')
cy.get('.ProseMirror img').should('have.length', 1) cy.get('.tiptap img').should('have.length', 1)
}) })
it('allows images to be added via URL', () => { it('allows images to be added via URL', () => {
@ -22,7 +22,7 @@ context('/src/Examples/Images/Vue/', () => {
cy.wait(1000) cy.wait(1000)
cy.get('button').contains('add image from URL').click({ force: false }) cy.get('button').contains('add image from URL').click({ force: false })
cy.wait(1000) cy.wait(1000)
cy.get('.ProseMirror img').should('have.length', 3) cy.get('.tiptap img').should('have.length', 3)
}) })
}) })
}) })

View File

@ -59,7 +59,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,18 +4,18 @@ context('/src/Examples/InteractivityComponent/React/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })
}) })
it('should render a custom node', () => { it('should render a custom node', () => {
cy.get('.ProseMirror .react-component').should('have.length', 1) cy.get('.tiptap .react-component').should('have.length', 1)
}) })
it('should handle count click inside custom node', () => { it('should handle count click inside custom node', () => {
cy.get('.ProseMirror .react-component button') cy.get('.tiptap .react-component button')
.should('have.text', 'This button has been clicked 0 times.') .should('have.text', 'This button has been clicked 0 times.')
.click() .click()
.should('have.text', 'This button has been clicked 1 times.') .should('have.text', 'This button has been clicked 1 times.')

View File

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

View File

@ -4,18 +4,18 @@ context('/src/Examples/InteractivityComponent/Vue/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })
}) })
it('should render a custom node', () => { it('should render a custom node', () => {
cy.get('.ProseMirror .vue-component').should('have.length', 1) cy.get('.tiptap .vue-component').should('have.length', 1)
}) })
it('should handle count click inside custom node', () => { it('should handle count click inside custom node', () => {
cy.get('.ProseMirror .vue-component button') cy.get('.tiptap .vue-component button')
.should('have.text', 'This button has been clicked 0 times.') .should('have.text', 'This button has been clicked 0 times.')
.click() .click()
.should('have.text', 'This button has been clicked 1 times.') .should('have.text', 'This button has been clicked 1 times.')

View File

@ -45,7 +45,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

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

View File

@ -4,19 +4,19 @@ context('/src/Examples/InteractivityComponentContent/Vue/', () => {
}) })
it('should have a working tiptap instance', () => { it('should have a working tiptap instance', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
// eslint-disable-next-line // eslint-disable-next-line
expect(editor).to.not.be.null expect(editor).to.not.be.null
}) })
}) })
it('should render a custom node', () => { it('should render a custom node', () => {
cy.get('.ProseMirror .vue-component') cy.get('.tiptap .vue-component')
.should('have.length', 1) .should('have.length', 1)
}) })
it('should allow text editing inside component', () => { it('should allow text editing inside component', () => {
cy.get('.ProseMirror .vue-component .content') cy.get('.tiptap .vue-component .content')
.invoke('attr', 'contentEditable', true) .invoke('attr', 'contentEditable', true)
.invoke('text', '') .invoke('text', '')
.type('Hello World!') .type('Hello World!')
@ -24,24 +24,24 @@ context('/src/Examples/InteractivityComponentContent/Vue/', () => {
}) })
it('should allow text editing inside component with markdown text', () => { it('should allow text editing inside component with markdown text', () => {
cy.get('.ProseMirror .vue-component .content') cy.get('.tiptap .vue-component .content')
.invoke('attr', 'contentEditable', true) .invoke('attr', 'contentEditable', true)
.invoke('text', '') .invoke('text', '')
.type('Hello World! This is **bold**.') .type('Hello World! This is **bold**.')
.should('have.text', 'Hello World! This is bold.') .should('have.text', 'Hello World! This is bold.')
cy.get('.ProseMirror .vue-component .content strong') cy.get('.tiptap .vue-component .content strong')
.should('exist') .should('exist')
}) })
it('should remove node via selectall', () => { it('should remove node via selectall', () => {
cy.get('.ProseMirror .vue-component') cy.get('.tiptap .vue-component')
.should('have.length', 1) .should('have.length', 1)
cy.get('.ProseMirror') cy.get('.tiptap')
.type('{selectall}{backspace}') .type('{selectall}{backspace}')
cy.get('.ProseMirror .vue-component') cy.get('.tiptap .vue-component')
.should('have.length', 0) .should('have.length', 0)
}) })
}) })

View File

@ -47,7 +47,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,97 +4,97 @@ context('/src/Examples/MarkdownShortcuts/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
it('should make a h1', () => { it('should make a h1', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('# Headline') .type('# Headline')
.find('h1') .find('h1')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h2', () => { it('should make a h2', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('## Headline') .type('## Headline')
.find('h2') .find('h2')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h3', () => { it('should make a h3', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('### Headline') .type('### Headline')
.find('h3') .find('h3')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h4', () => { it('should make a h4', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('#### Headline') .type('#### Headline')
.find('h4') .find('h4')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h5', () => { it('should make a h5', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('##### Headline') .type('##### Headline')
.find('h5') .find('h5')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h6', () => { it('should make a h6', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('###### Headline') .type('###### Headline')
.find('h6') .find('h6')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should create inline code', () => { it('should create inline code', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('`$foobar`') .type('`$foobar`')
.find('code') .find('code')
.should('contain', '$foobar') .should('contain', '$foobar')
}) })
it('should create a code block without language', () => { it('should create a code block without language', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('``` {enter}const foo = bar{enter}```') .type('``` {enter}const foo = bar{enter}```')
.find('pre') .find('pre')
.should('contain', 'const foo = bar') .should('contain', 'const foo = bar')
}) })
it('should create a bullet list from asteriks', () => { it('should create a bullet list from asteriks', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('* foobar') .type('* foobar')
.find('ul') .find('ul')
.should('contain', 'foobar') .should('contain', 'foobar')
}) })
it('should create a bullet list from dashes', () => { it('should create a bullet list from dashes', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('- foobar') .type('- foobar')
.find('ul') .find('ul')
.should('contain', 'foobar') .should('contain', 'foobar')
}) })
it('should create a bullet list from pluses', () => { it('should create a bullet list from pluses', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('+ foobar') .type('+ foobar')
.find('ul') .find('ul')
.should('contain', 'foobar') .should('contain', 'foobar')
}) })
it('should create a ordered list', () => { it('should create a ordered list', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('1. foobar') .type('1. foobar')
.find('ol') .find('ol')
.should('contain', 'foobar') .should('contain', 'foobar')
}) })
it('should create a blockquote', () => { it('should create a blockquote', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('> foobar') .type('> foobar')
.find('blockquote') .find('blockquote')
.should('contain', 'foobar') .should('contain', 'foobar')

View File

@ -1,4 +1,4 @@
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,97 +4,97 @@ context('/src/Examples/MarkdownShortcuts/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
it('should make a h1', () => { it('should make a h1', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('# Headline') .type('# Headline')
.find('h1') .find('h1')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h2', () => { it('should make a h2', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('## Headline') .type('## Headline')
.find('h2') .find('h2')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h3', () => { it('should make a h3', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('### Headline') .type('### Headline')
.find('h3') .find('h3')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h4', () => { it('should make a h4', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('#### Headline') .type('#### Headline')
.find('h4') .find('h4')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h5', () => { it('should make a h5', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('##### Headline') .type('##### Headline')
.find('h5') .find('h5')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should make a h6', () => { it('should make a h6', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('###### Headline') .type('###### Headline')
.find('h6') .find('h6')
.should('contain', 'Headline') .should('contain', 'Headline')
}) })
it('should create inline code', () => { it('should create inline code', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('`$foobar`') .type('`$foobar`')
.find('code') .find('code')
.should('contain', '$foobar') .should('contain', '$foobar')
}) })
it('should create a code block without language', () => { it('should create a code block without language', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('``` {enter}const foo = bar{enter}```') .type('``` {enter}const foo = bar{enter}```')
.find('pre') .find('pre')
.should('contain', 'const foo = bar') .should('contain', 'const foo = bar')
}) })
it('should create a bullet list from asteriks', () => { it('should create a bullet list from asteriks', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('* foobar') .type('* foobar')
.find('ul') .find('ul')
.should('contain', 'foobar') .should('contain', 'foobar')
}) })
it('should create a bullet list from dashes', () => { it('should create a bullet list from dashes', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('- foobar') .type('- foobar')
.find('ul') .find('ul')
.should('contain', 'foobar') .should('contain', 'foobar')
}) })
it('should create a bullet list from pluses', () => { it('should create a bullet list from pluses', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('+ foobar') .type('+ foobar')
.find('ul') .find('ul')
.should('contain', 'foobar') .should('contain', 'foobar')
}) })
it('should create a ordered list', () => { it('should create a ordered list', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('1. foobar') .type('1. foobar')
.find('ol') .find('ol')
.should('contain', 'foobar') .should('contain', 'foobar')
}) })
it('should create a blockquote', () => { it('should create a blockquote', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('> foobar') .type('> foobar')
.find('blockquote') .find('blockquote')
.should('contain', 'foobar') .should('contain', 'foobar')

View File

@ -54,7 +54,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,7 +4,7 @@ context('/src/Examples/Menus/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.chain().focus().clearContent().run() editor.chain().focus().clearContent().run()
}) })
}) })
@ -15,7 +15,7 @@ context('/src/Examples/Menus/React/', () => {
}) })
it('should show menu when text is selected', () => { it('should show menu when text is selected', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('Test') .type('Test')
.type('{selectall}') .type('{selectall}')
@ -40,7 +40,7 @@ context('/src/Examples/Menus/React/', () => {
marks.forEach(mark => { marks.forEach(mark => {
it(`should apply ${mark.button} correctly`, () => { it(`should apply ${mark.button} correctly`, () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('Test') .type('Test')
.type('{selectall}') .type('{selectall}')
@ -49,7 +49,7 @@ context('/src/Examples/Menus/React/', () => {
.contains(mark.button) .contains(mark.button)
.click() .click()
cy.get('.ProseMirror') cy.get('.tiptap')
.find(`p ${mark.tag}`) .find(`p ${mark.tag}`)
}) })
}) })

View File

@ -1,4 +1,4 @@
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,7 +4,7 @@ context('/src/Examples/Menus/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.chain().focus().clearContent().run() editor.chain().focus().clearContent().run()
}) })
}) })
@ -15,7 +15,7 @@ context('/src/Examples/Menus/Vue/', () => {
}) })
it('should show menu when text is selected', () => { it('should show menu when text is selected', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('Test') .type('Test')
.type('{selectall}') .type('{selectall}')
@ -40,7 +40,7 @@ context('/src/Examples/Menus/Vue/', () => {
marks.forEach(mark => { marks.forEach(mark => {
it(`should apply ${mark.button} correctly`, () => { it(`should apply ${mark.button} correctly`, () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('Test') .type('Test')
.type('{selectall}') .type('{selectall}')
@ -49,7 +49,7 @@ context('/src/Examples/Menus/Vue/', () => {
.contains(mark.button) .contains(mark.button)
.click() .click()
cy.get('.ProseMirror') cy.get('.tiptap')
.find(`p ${mark.tag}`) .find(`p ${mark.tag}`)
}) })
}) })

View File

@ -82,7 +82,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,20 +4,20 @@ context('/src/Examples/Minimal/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
it('text should be wrapped in a paragraph by default', () => { it('text should be wrapped in a paragraph by default', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('Example Text') .type('Example Text')
.find('p') .find('p')
.should('contain', 'Example Text') .should('contain', 'Example Text')
}) })
it('should parse paragraphs correctly', () => { it('should parse paragraphs correctly', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.setContent('<p>Example Text</p>') editor.commands.setContent('<p>Example Text</p>')
expect(editor.getHTML()).to.eq('<p>Example Text</p>') expect(editor.getHTML()).to.eq('<p>Example Text</p>')
@ -27,19 +27,19 @@ context('/src/Examples/Minimal/React/', () => {
}) })
it('enter should make a new paragraph', () => { it('enter should make a new paragraph', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('First Paragraph{enter}Second Paragraph') .type('First Paragraph{enter}Second Paragraph')
.find('p') .find('p')
.should('have.length', 2) .should('have.length', 2)
}) })
it('backspace should remove the last paragraph', () => { it('backspace should remove the last paragraph', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('{enter}') .type('{enter}')
.find('p') .find('p')
.should('have.length', 2) .should('have.length', 2)
cy.get('.ProseMirror') cy.get('.tiptap')
.type('{backspace}') .type('{backspace}')
.find('p') .find('p')
.should('have.length', 1) .should('have.length', 1)

View File

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

View File

@ -4,20 +4,20 @@ context('/src/Examples/Minimal/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
it('text should be wrapped in a paragraph by default', () => { it('text should be wrapped in a paragraph by default', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('Example Text') .type('Example Text')
.find('p') .find('p')
.should('contain', 'Example Text') .should('contain', 'Example Text')
}) })
it('should parse paragraphs correctly', () => { it('should parse paragraphs correctly', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.setContent('<p>Example Text</p>') editor.commands.setContent('<p>Example Text</p>')
expect(editor.getHTML()).to.eq('<p>Example Text</p>') expect(editor.getHTML()).to.eq('<p>Example Text</p>')
@ -27,19 +27,19 @@ context('/src/Examples/Minimal/Vue/', () => {
}) })
it('enter should make a new paragraph', () => { it('enter should make a new paragraph', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('First Paragraph{enter}Second Paragraph') .type('First Paragraph{enter}Second Paragraph')
.find('p') .find('p')
.should('have.length', 2) .should('have.length', 2)
}) })
it('backspace should remove the last paragraph', () => { it('backspace should remove the last paragraph', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('{enter}') .type('{enter}')
.find('p') .find('p')
.should('have.length', 2) .should('have.length', 2)
cy.get('.ProseMirror') cy.get('.tiptap')
.type('{backspace}') .type('{backspace}')
.find('p') .find('p')
.should('have.length', 1) .should('have.length', 1)

View File

@ -45,7 +45,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,7 +4,7 @@ context('/src/Examples/Savvy/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
@ -24,11 +24,11 @@ context('/src/Examples/Savvy/React/', () => {
tests.forEach(test => { tests.forEach(test => {
it(`should parse ${test[0]} correctly`, () => { it(`should parse ${test[0]} correctly`, () => {
cy.get('.ProseMirror').type(test[0]).should('contain', test[1]) cy.get('.tiptap').type(test[0]).should('contain', test[1])
}) })
}) })
it('should parse hex colors correctly', () => { it('should parse hex colors correctly', () => {
cy.get('.ProseMirror').type('#FD9170').find('.color') cy.get('.tiptap').type('#FD9170').find('.color')
}) })
}) })

View File

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

View File

@ -4,7 +4,7 @@ context('/src/Examples/Savvy/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
@ -24,14 +24,14 @@ context('/src/Examples/Savvy/Vue/', () => {
tests.forEach(test => { tests.forEach(test => {
it(`should parse ${test[0]} correctly`, () => { it(`should parse ${test[0]} correctly`, () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type(test[0]) .type(test[0])
.should('contain', test[1]) .should('contain', test[1])
}) })
}) })
it('should parse hex colors correctly', () => { it('should parse hex colors correctly', () => {
cy.get('.ProseMirror') cy.get('.tiptap')
.type('#FD9170') .type('#FD9170')
.find('.color') .find('.color')
}) })

View File

@ -63,7 +63,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,119 +4,119 @@ context('/src/Examples/Tables/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
cy.get('button').contains('insertTable').click() cy.get('button').contains('insertTable').click()
}) })
}) })
it('adds a table with three columns and three rows', () => { it('adds a table with three columns and three rows', () => {
cy.get('.ProseMirror table') cy.get('.tiptap table')
.should('exist') .should('exist')
cy.get('.ProseMirror table tr') cy.get('.tiptap table tr')
.should('exist') .should('exist')
.should('have.length', 3) .should('have.length', 3)
cy.get('.ProseMirror table th') cy.get('.tiptap table th')
.should('exist') .should('exist')
.should('have.length', 3) .should('have.length', 3)
cy.get('.ProseMirror table td') cy.get('.tiptap table td')
.should('exist') .should('exist')
.should('have.length', 6) .should('have.length', 6)
}) })
it('adds & delete columns', () => { it('adds & delete columns', () => {
cy.get('button').contains('addColumnBefore').click() cy.get('button').contains('addColumnBefore').click()
cy.get('.ProseMirror table th') cy.get('.tiptap table th')
.should('have.length', 4) .should('have.length', 4)
cy.get('button').contains('addColumnAfter').click() cy.get('button').contains('addColumnAfter').click()
cy.get('.ProseMirror table th') cy.get('.tiptap table th')
.should('have.length', 5) .should('have.length', 5)
cy.get('button').contains('deleteColumn') cy.get('button').contains('deleteColumn')
.click() .click()
.click() .click()
cy.get('.ProseMirror table th') cy.get('.tiptap table th')
.should('have.length', 3) .should('have.length', 3)
}) })
it('adds & delete rows', () => { it('adds & delete rows', () => {
cy.get('button').contains('addRowBefore').click() cy.get('button').contains('addRowBefore').click()
cy.get('.ProseMirror table tr') cy.get('.tiptap table tr')
.should('have.length', 4) .should('have.length', 4)
cy.get('button').contains('addRowAfter').click() cy.get('button').contains('addRowAfter').click()
cy.get('.ProseMirror table tr') cy.get('.tiptap table tr')
.should('have.length', 5) .should('have.length', 5)
cy.get('button').contains('deleteRow') cy.get('button').contains('deleteRow')
.click() .click()
.click() .click()
cy.get('.ProseMirror table tr') cy.get('.tiptap table tr')
.should('have.length', 3) .should('have.length', 3)
}) })
it('should delete table', () => { it('should delete table', () => {
cy.get('button').contains('deleteTable').click() cy.get('button').contains('deleteTable').click()
cy.get('.ProseMirror table').should('not.exist') cy.get('.tiptap table').should('not.exist')
}) })
it('should merge cells', () => { it('should merge cells', () => {
cy.get('.ProseMirror').type('{shift}{rightArrow}') cy.get('.tiptap').type('{shift}{rightArrow}')
cy.get('button').contains('mergeCells').click() cy.get('button').contains('mergeCells').click()
cy.get('.ProseMirror table th').should('have.length', 2) cy.get('.tiptap table th').should('have.length', 2)
}) })
it('should split cells', () => { it('should split cells', () => {
cy.get('.ProseMirror').type('{shift}{rightArrow}') cy.get('.tiptap').type('{shift}{rightArrow}')
cy.get('button').contains('mergeCells').click() cy.get('button').contains('mergeCells').click()
cy.get('.ProseMirror table th').should('have.length', 2) cy.get('.tiptap table th').should('have.length', 2)
cy.get('button').contains('splitCell').click() cy.get('button').contains('splitCell').click()
cy.get('.ProseMirror table th').should('have.length', 3) cy.get('.tiptap table th').should('have.length', 3)
}) })
it('should toggle header columns', () => { it('should toggle header columns', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.toggleHeaderColumn() editor.commands.toggleHeaderColumn()
cy.get('.ProseMirror table th').should('have.length', 5) cy.get('.tiptap table th').should('have.length', 5)
}) })
}) })
it('should toggle header row', () => { it('should toggle header row', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.toggleHeaderRow() editor.commands.toggleHeaderRow()
cy.get('.ProseMirror table th').should('have.length', 0) cy.get('.tiptap table th').should('have.length', 0)
}) })
}) })
it('should merge split', () => { it('should merge split', () => {
cy.get('.ProseMirror').type('{shift}{rightArrow}') cy.get('.tiptap').type('{shift}{rightArrow}')
cy.get('button').contains('mergeCells').click() cy.get('button').contains('mergeCells').click()
cy.get('.ProseMirror th[colspan="2"]') cy.get('.tiptap th[colspan="2"]')
.should('exist') .should('exist')
cy.get('button') cy.get('button')
.contains('mergeOrSplit') .contains('mergeOrSplit')
.click() .click()
cy.get('.ProseMirror th[colspan="2"]') cy.get('.tiptap th[colspan="2"]')
.should('not.exist') .should('not.exist')
}) })
it('should set cell attribute', () => { it('should set cell attribute', () => {
cy.get('.ProseMirror').type('{downArrow}') cy.get('.tiptap').type('{downArrow}')
cy.get('button').contains('setCellAttribute').click() cy.get('button').contains('setCellAttribute').click()
cy.get('.ProseMirror table td[style]').should('have.attr', 'style', 'background-color: #FAF594') cy.get('.tiptap table td[style]').should('have.attr', 'style', 'background-color: #FAF594')
}) })
it('should move focus to next or prev cell', () => { it('should move focus to next or prev cell', () => {
cy.get('.ProseMirror').type('Column 1') cy.get('.tiptap').type('Column 1')
cy.get('button').contains('goToNextCell').click() cy.get('button').contains('goToNextCell').click()
cy.get('.ProseMirror').type('Column 2') cy.get('.tiptap').type('Column 2')
cy.get('button').contains('goToPreviousCell').click() cy.get('button').contains('goToPreviousCell').click()
cy.get('.ProseMirror th').then(elements => { cy.get('.tiptap th').then(elements => {
expect(elements[0].innerText).to.equal('Column 1') expect(elements[0].innerText).to.equal('Column 1')
expect(elements[1].innerText).to.equal('Column 2') expect(elements[1].innerText).to.equal('Column 2')
}) })

View File

@ -1,5 +1,5 @@
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
margin: 1rem 0; margin: 1rem 0;
> * + * { > * + * {
@ -58,7 +58,7 @@
} }
/* Table-specific styling */ /* Table-specific styling */
.ProseMirror { .tiptap {
table { table {
border-collapse: collapse; border-collapse: collapse;
table-layout: fixed; table-layout: fixed;

View File

@ -4,119 +4,119 @@ context('/src/Examples/Tables/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
cy.get('button').contains('insertTable').click() cy.get('button').contains('insertTable').click()
}) })
}) })
it('adds a table with three columns and three rows', () => { it('adds a table with three columns and three rows', () => {
cy.get('.ProseMirror table') cy.get('.tiptap table')
.should('exist') .should('exist')
cy.get('.ProseMirror table tr') cy.get('.tiptap table tr')
.should('exist') .should('exist')
.should('have.length', 3) .should('have.length', 3)
cy.get('.ProseMirror table th') cy.get('.tiptap table th')
.should('exist') .should('exist')
.should('have.length', 3) .should('have.length', 3)
cy.get('.ProseMirror table td') cy.get('.tiptap table td')
.should('exist') .should('exist')
.should('have.length', 6) .should('have.length', 6)
}) })
it('adds & delete columns', () => { it('adds & delete columns', () => {
cy.get('button').contains('addColumnBefore').click() cy.get('button').contains('addColumnBefore').click()
cy.get('.ProseMirror table th') cy.get('.tiptap table th')
.should('have.length', 4) .should('have.length', 4)
cy.get('button').contains('addColumnAfter').click() cy.get('button').contains('addColumnAfter').click()
cy.get('.ProseMirror table th') cy.get('.tiptap table th')
.should('have.length', 5) .should('have.length', 5)
cy.get('button').contains('deleteColumn') cy.get('button').contains('deleteColumn')
.click() .click()
.click() .click()
cy.get('.ProseMirror table th') cy.get('.tiptap table th')
.should('have.length', 3) .should('have.length', 3)
}) })
it('adds & delete rows', () => { it('adds & delete rows', () => {
cy.get('button').contains('addRowBefore').click() cy.get('button').contains('addRowBefore').click()
cy.get('.ProseMirror table tr') cy.get('.tiptap table tr')
.should('have.length', 4) .should('have.length', 4)
cy.get('button').contains('addRowAfter').click() cy.get('button').contains('addRowAfter').click()
cy.get('.ProseMirror table tr') cy.get('.tiptap table tr')
.should('have.length', 5) .should('have.length', 5)
cy.get('button').contains('deleteRow') cy.get('button').contains('deleteRow')
.click() .click()
.click() .click()
cy.get('.ProseMirror table tr') cy.get('.tiptap table tr')
.should('have.length', 3) .should('have.length', 3)
}) })
it('should delete table', () => { it('should delete table', () => {
cy.get('button').contains('deleteTable').click() cy.get('button').contains('deleteTable').click()
cy.get('.ProseMirror table').should('not.exist') cy.get('.tiptap table').should('not.exist')
}) })
it('should merge cells', () => { it('should merge cells', () => {
cy.get('.ProseMirror').type('{shift}{rightArrow}') cy.get('.tiptap').type('{shift}{rightArrow}')
cy.get('button').contains('mergeCells').click() cy.get('button').contains('mergeCells').click()
cy.get('.ProseMirror table th').should('have.length', 2) cy.get('.tiptap table th').should('have.length', 2)
}) })
it('should split cells', () => { it('should split cells', () => {
cy.get('.ProseMirror').type('{shift}{rightArrow}') cy.get('.tiptap').type('{shift}{rightArrow}')
cy.get('button').contains('mergeCells').click() cy.get('button').contains('mergeCells').click()
cy.get('.ProseMirror table th').should('have.length', 2) cy.get('.tiptap table th').should('have.length', 2)
cy.get('button').contains('splitCell').click() cy.get('button').contains('splitCell').click()
cy.get('.ProseMirror table th').should('have.length', 3) cy.get('.tiptap table th').should('have.length', 3)
}) })
it('should toggle header columns', () => { it('should toggle header columns', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.toggleHeaderColumn() editor.commands.toggleHeaderColumn()
cy.get('.ProseMirror table th').should('have.length', 5) cy.get('.tiptap table th').should('have.length', 5)
}) })
}) })
it('should toggle header row', () => { it('should toggle header row', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.toggleHeaderRow() editor.commands.toggleHeaderRow()
cy.get('.ProseMirror table th').should('have.length', 0) cy.get('.tiptap table th').should('have.length', 0)
}) })
}) })
it('should merge split', () => { it('should merge split', () => {
cy.get('.ProseMirror').type('{shift}{rightArrow}') cy.get('.tiptap').type('{shift}{rightArrow}')
cy.get('button').contains('mergeCells').click() cy.get('button').contains('mergeCells').click()
cy.get('.ProseMirror th[colspan="2"]') cy.get('.tiptap th[colspan="2"]')
.should('exist') .should('exist')
cy.get('button') cy.get('button')
.contains('mergeOrSplit') .contains('mergeOrSplit')
.click() .click()
cy.get('.ProseMirror th[colspan="2"]') cy.get('.tiptap th[colspan="2"]')
.should('not.exist') .should('not.exist')
}) })
it('should set cell attribute', () => { it('should set cell attribute', () => {
cy.get('.ProseMirror').type('{downArrow}') cy.get('.tiptap').type('{downArrow}')
cy.get('button').contains('setCellAttribute').click() cy.get('button').contains('setCellAttribute').click()
cy.get('.ProseMirror table td[style]').should('have.attr', 'style', 'background-color: #FAF594') cy.get('.tiptap table td[style]').should('have.attr', 'style', 'background-color: #FAF594')
}) })
it('should move focus to next or prev cell', () => { it('should move focus to next or prev cell', () => {
cy.get('.ProseMirror').type('Column 1') cy.get('.tiptap').type('Column 1')
cy.get('button').contains('goToNextCell').click() cy.get('button').contains('goToNextCell').click()
cy.get('.ProseMirror').type('Column 2') cy.get('.tiptap').type('Column 2')
cy.get('button').contains('goToPreviousCell').click() cy.get('button').contains('goToPreviousCell').click()
cy.get('.ProseMirror th').then(elements => { cy.get('.tiptap th').then(elements => {
expect(elements[0].innerText).to.equal('Column 1') expect(elements[0].innerText).to.equal('Column 1')
expect(elements[1].innerText).to.equal('Column 2') expect(elements[1].innerText).to.equal('Column 2')
}) })

View File

@ -161,7 +161,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
margin: 1rem 0; margin: 1rem 0;
> * + * { > * + * {
@ -220,7 +220,7 @@ export default {
} }
/* Table-specific styling */ /* Table-specific styling */
.ProseMirror { .tiptap {
table { table {
border-collapse: collapse; border-collapse: collapse;
table-layout: fixed; table-layout: fixed;

View File

@ -4,29 +4,29 @@ context('/src/Examples/Tasks/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
it('should always use task items', () => { it('should always use task items', () => {
cy.get('.ProseMirror input[type="checkbox"]').should('have.length', 1) cy.get('.tiptap input[type="checkbox"]').should('have.length', 1)
}) })
it('should create new tasks', () => { it('should create new tasks', () => {
cy.get('.ProseMirror').type('Cook food{enter}Eat food{enter}Clean dishes') cy.get('.tiptap').type('Cook food{enter}Eat food{enter}Clean dishes')
cy.get('.ProseMirror input[type="checkbox"]').should('have.length', 3) cy.get('.tiptap input[type="checkbox"]').should('have.length', 3)
}) })
it('should check and uncheck tasks on click', () => { it('should check and uncheck tasks on click', () => {
cy.get('.ProseMirror').type('Cook food{enter}Eat food{enter}Clean dishes') cy.get('.tiptap').type('Cook food{enter}Eat food{enter}Clean dishes')
cy.get('.ProseMirror').find('input[type="checkbox"]').eq(0).click({ force: true }) cy.get('.tiptap').find('input[type="checkbox"]').eq(0).click({ force: true })
cy.get('.ProseMirror').find('input[type="checkbox"]:checked').should('have.length', 1) cy.get('.tiptap').find('input[type="checkbox"]:checked').should('have.length', 1)
cy.get('.ProseMirror').find('input[type="checkbox"]').eq(1).click({ force: true }) cy.get('.tiptap').find('input[type="checkbox"]').eq(1).click({ force: true })
cy.get('.ProseMirror').find('input[type="checkbox"]:checked').should('have.length', 2) cy.get('.tiptap').find('input[type="checkbox"]:checked').should('have.length', 2)
cy.get('.ProseMirror').find('input[type="checkbox"]').eq(0).click({ force: true }) cy.get('.tiptap').find('input[type="checkbox"]').eq(0).click({ force: true })
cy.get('.ProseMirror').find('input[type="checkbox"]:checked').should('have.length', 1) cy.get('.tiptap').find('input[type="checkbox"]:checked').should('have.length', 1)
cy.get('.ProseMirror').find('input[type="checkbox"]').eq(1).click({ force: true }) cy.get('.tiptap').find('input[type="checkbox"]').eq(1).click({ force: true })
cy.get('.ProseMirror').find('input[type="checkbox"]:checked').should('have.length', 0) cy.get('.tiptap').find('input[type="checkbox"]:checked').should('have.length', 0)
}) })
}) })

View File

@ -4,29 +4,29 @@ context('/src/Examples/Tasks/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
it('should always use task items', () => { it('should always use task items', () => {
cy.get('.ProseMirror input[type="checkbox"]').should('have.length', 1) cy.get('.tiptap input[type="checkbox"]').should('have.length', 1)
}) })
it('should create new tasks', () => { it('should create new tasks', () => {
cy.get('.ProseMirror').type('Cook food{enter}Eat food{enter}Clean dishes') cy.get('.tiptap').type('Cook food{enter}Eat food{enter}Clean dishes')
cy.get('.ProseMirror input[type="checkbox"]').should('have.length', 3) cy.get('.tiptap input[type="checkbox"]').should('have.length', 3)
}) })
it('should check and uncheck tasks on click', () => { it('should check and uncheck tasks on click', () => {
cy.get('.ProseMirror').type('Cook food{enter}Eat food{enter}Clean dishes') cy.get('.tiptap').type('Cook food{enter}Eat food{enter}Clean dishes')
cy.get('.ProseMirror').find('input[type="checkbox"]').eq(0).click({ force: true }) cy.get('.tiptap').find('input[type="checkbox"]').eq(0).click({ force: true })
cy.get('.ProseMirror').find('input[type="checkbox"]:checked').should('have.length', 1) cy.get('.tiptap').find('input[type="checkbox"]:checked').should('have.length', 1)
cy.get('.ProseMirror').find('input[type="checkbox"]').eq(1).click({ force: true }) cy.get('.tiptap').find('input[type="checkbox"]').eq(1).click({ force: true })
cy.get('.ProseMirror').find('input[type="checkbox"]:checked').should('have.length', 2) cy.get('.tiptap').find('input[type="checkbox"]:checked').should('have.length', 2)
cy.get('.ProseMirror').find('input[type="checkbox"]').eq(0).click({ force: true }) cy.get('.tiptap').find('input[type="checkbox"]').eq(0).click({ force: true })
cy.get('.ProseMirror').find('input[type="checkbox"]:checked').should('have.length', 1) cy.get('.tiptap').find('input[type="checkbox"]:checked').should('have.length', 1)
cy.get('.ProseMirror').find('input[type="checkbox"]').eq(1).click({ force: true }) cy.get('.tiptap').find('input[type="checkbox"]').eq(1).click({ force: true })
cy.get('.ProseMirror').find('input[type="checkbox"]:checked').should('have.length', 0) cy.get('.tiptap').find('input[type="checkbox"]:checked').should('have.length', 0)
}) })
}) })

View File

@ -263,7 +263,7 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }
@ -445,7 +445,7 @@ export default {
} }
} }
.ProseMirror p.is-empty::before { .tiptap p.is-empty::before {
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
color: #adb5bd; color: #adb5bd;

View File

@ -4,20 +4,20 @@ context('/src/Experiments/CollaborationAnnotation/Vue/', () => {
}) })
/* it('renders two editors', () => { /* it('renders two editors', () => {
cy.get('.ProseMirror').should('have.length', 2) cy.get('.tiptap').should('have.length', 2)
}) */ }) */
// TODO: Fix those tests in the future // TODO: Fix those tests in the future
// Current problem is that ProseMirror seems to mismatch a transformation somewhere inside those tests // Current problem is that tiptap seems to mismatch a transformation somewhere inside those tests
// So to fix this, we should look for a different way to simulate the annotation process // So to fix this, we should look for a different way to simulate the annotation process
/* it('sets an annotation in editor 1 and shows annotations in both editors', () => { /* it('sets an annotation in editor 1 and shows annotations in both editors', () => {
cy.window().then(win => { cy.window().then(win => {
cy.stub(win, 'prompt', () => 'This is a test comment') cy.stub(win, 'prompt', () => 'This is a test comment')
cy.get('.editor-1 .ProseMirror').type('{selectall}{backspace}Hello world{selectall}') cy.get('.editor-1 .tiptap').type('{selectall}{backspace}Hello world{selectall}')
cy.get('button').contains('comment').eq(0).click() cy.get('button').contains('comment').eq(0).click()
cy.get('.editor-1 .ProseMirror').type('{end}') cy.get('.editor-1 .tiptap').type('{end}')
cy.get('.ProseMirror .annotation').should('have.length', 2) cy.get('.tiptap .annotation').should('have.length', 2)
cy.get('.comment').should('exist').contains('This is a test comment') cy.get('.comment').should('exist').contains('This is a test comment')
}) })
}) */ }) */
@ -41,10 +41,10 @@ context('/src/Experiments/CollaborationAnnotation/Vue/', () => {
} }
}) })
cy.get('.editor-1 .ProseMirror').type('{selectall}{backspace}Hello world{selectall}') cy.get('.editor-1 .tiptap').type('{selectall}{backspace}Hello world{selectall}')
cy.get('button').contains('comment').eq(0).click() cy.get('button').contains('comment').eq(0).click()
cy.wait(1000) cy.wait(1000)
cy.get('.editor-1 .ProseMirror').find('.annotation').click() cy.get('.editor-1 .tiptap').find('.annotation').click()
cy.get('.comment').should('exist').contains('This is a test comment') cy.get('.comment').should('exist').contains('This is a test comment')
cy.get('button').contains('update').click() cy.get('button').contains('update').click()
cy.wait(1000) cy.wait(1000)
@ -56,13 +56,13 @@ context('/src/Experiments/CollaborationAnnotation/Vue/', () => {
cy.window().then(win => { cy.window().then(win => {
cy.stub(win, 'prompt', () => 'This is a test comment') cy.stub(win, 'prompt', () => 'This is a test comment')
cy.get('.editor-1 .ProseMirror').type('{selectall}{backspace}Hello world{selectall}') cy.get('.editor-1 .tiptap').type('{selectall}{backspace}Hello world{selectall}')
cy.get('button').contains('comment').eq(0).click() cy.get('button').contains('comment').eq(0).click()
cy.wait(1000) cy.wait(1000)
cy.get('.editor-1 .ProseMirror').find('.annotation').click() cy.get('.editor-1 .tiptap').find('.annotation').click()
cy.get('.comment').should('exist').contains('This is a test comment') cy.get('.comment').should('exist').contains('This is a test comment')
cy.get('button').contains('remove').click() cy.get('button').contains('remove').click()
cy.get('.ProseMirror .annotation').should('not.exist') cy.get('.tiptap .annotation').should('not.exist')
cy.wait(1000) cy.wait(1000)
cy.get('.comment').should('not.exist') cy.get('.comment').should('not.exist')
}) })

View File

@ -137,7 +137,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -4,7 +4,7 @@ context('/src/Experiments/Commands/Vue/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.clearContent() editor.commands.clearContent()
}) })
}) })
@ -18,27 +18,27 @@ context('/src/Experiments/Commands/Vue/', () => {
] ]
items.forEach((item, i) => { items.forEach((item, i) => {
cy.get('.ProseMirror').type('{selectall}{backspace}/') cy.get('.tiptap').type('{selectall}{backspace}/')
cy.get('.tippy-content .items').should('exist') cy.get('.tippy-content .items').should('exist')
cy.get('.tippy-content .items .item').eq(i).click() cy.get('.tippy-content .items .item').eq(i).click()
cy.get('.ProseMirror').type(`I am a ${item.tag}`) cy.get('.tiptap').type(`I am a ${item.tag}`)
cy.get(`.ProseMirror ${item.tag}`).should('exist').should('have.text', `I am a ${item.tag}`) cy.get(`.tiptap ${item.tag}`).should('exist').should('have.text', `I am a ${item.tag}`)
}) })
}) })
it('should close the popup without any command via esc', () => { it('should close the popup without any command via esc', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}/') cy.get('.tiptap').type('{selectall}{backspace}/')
cy.get('.tippy-content .items').should('exist') cy.get('.tippy-content .items').should('exist')
cy.get('.ProseMirror').type('{esc}') cy.get('.tiptap').type('{esc}')
cy.get('.tippy-content .items').should('not.exist') cy.get('.tippy-content .items').should('not.exist')
}) })
it('should open the popup when the cursor is after a slash', () => { it('should open the popup when the cursor is after a slash', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}/') cy.get('.tiptap').type('{selectall}{backspace}/')
cy.get('.tippy-content .items').should('exist') cy.get('.tippy-content .items').should('exist')
cy.get('.ProseMirror').type('{leftArrow}') cy.get('.tiptap').type('{leftArrow}')
cy.get('.tippy-content .items').should('not.exist') cy.get('.tippy-content .items').should('not.exist')
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('.tippy-content .items').should('exist') cy.get('.tippy-content .items').should('exist')
}) })
}) })

View File

@ -45,7 +45,7 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -41,7 +41,7 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -56,7 +56,7 @@ export default {
<style lang="scss"> <style lang="scss">
@use "sass:math"; @use "sass:math";
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

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

View File

@ -49,7 +49,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -85,7 +85,7 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -244,7 +244,7 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -71,7 +71,7 @@ export default {
</style> </style>
<style lang="scss"> <style lang="scss">
.ProseMirror { .tiptap {
padding: 0 1rem; padding: 0 1rem;
> * + * { > * + * {

View File

@ -4,17 +4,17 @@ context('/src/Examples/Default/React/', () => {
}) })
beforeEach(() => { beforeEach(() => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.tiptap').then(([{ editor }]) => {
editor.commands.setContent('<h1>Example Text</h1>') editor.commands.setContent('<h1>Example Text</h1>')
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
}) })
}) })
it('should apply the paragraph style when the keyboard shortcut is pressed', () => { it('should apply the paragraph style when the keyboard shortcut is pressed', () => {
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
cy.get('.ProseMirror p').should('not.exist') cy.get('.tiptap p').should('not.exist')
cy.get('.ProseMirror') cy.get('.tiptap')
.trigger('keydown', { modKey: true, altKey: true, key: '0' }) .trigger('keydown', { modKey: true, altKey: true, key: '0' })
.find('p') .find('p')
.should('contain', 'Example Text') .should('contain', 'Example Text')
@ -28,58 +28,58 @@ context('/src/Examples/Default/React/', () => {
buttonMarks.forEach(m => { buttonMarks.forEach(m => {
it(`should disable ${m.label} when the code tag is enabled for cursor`, () => { it(`should disable ${m.label} when the code tag is enabled for cursor`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains(m.label).should('be.disabled') cy.get('button').contains(m.label).should('be.disabled')
}) })
it(`should enable ${m.label} when the code tag is disabled for cursor`, () => { it(`should enable ${m.label} when the code tag is disabled for cursor`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains(m.label).should('not.be.disabled') cy.get('button').contains(m.label).should('not.be.disabled')
}) })
it(`should disable ${m.label} when the code tag is enabled for selection`, () => { it(`should disable ${m.label} when the code tag is enabled for selection`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world{selectall}') cy.get('.tiptap').type('{selectall}Hello world{selectall}')
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains(m.label).should('be.disabled') cy.get('button').contains(m.label).should('be.disabled')
}) })
it(`should enable ${m.label} when the code tag is disabled for selection`, () => { it(`should enable ${m.label} when the code tag is disabled for selection`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world{selectall}') cy.get('.tiptap').type('{selectall}Hello world{selectall}')
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains('code').click() cy.get('button').contains('code').click()
cy.get('button').contains(m.label).should('not.be.disabled') cy.get('button').contains(m.label).should('not.be.disabled')
}) })
it(`should apply ${m.label} when the button is pressed`, () => { it(`should apply ${m.label} when the button is pressed`, () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
cy.get('button').contains(m.label).click() cy.get('button').contains(m.label).click()
cy.get(`.ProseMirror ${m.tag}`).should('exist').should('have.text', 'Hello world') cy.get(`.tiptap ${m.tag}`).should('exist').should('have.text', 'Hello world')
}) })
}) })
it('should clear marks when the button is pressed', () => { it('should clear marks when the button is pressed', () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}') cy.get('.tiptap').type('{selectall}')
cy.get('button').contains('bold').click() cy.get('button').contains('bold').click()
cy.get('.ProseMirror strong').should('exist').should('have.text', 'Hello world') cy.get('.tiptap strong').should('exist').should('have.text', 'Hello world')
cy.get('button').contains('clear marks').click() cy.get('button').contains('clear marks').click()
cy.get('.ProseMirror strong').should('not.exist') cy.get('.tiptap strong').should('not.exist')
}) })
it('should clear nodes when the button is pressed', () => { it('should clear nodes when the button is pressed', () => {
cy.get('.ProseMirror').type('{selectall}Hello world') cy.get('.tiptap').type('{selectall}Hello world')
cy.get('button').contains('bullet list').click() cy.get('button').contains('bullet list').click()
cy.get('.ProseMirror ul').should('exist').should('have.text', 'Hello world') cy.get('.tiptap ul').should('exist').should('have.text', 'Hello world')
cy.get('.ProseMirror').type('{enter}A second item{enter}A third item{selectall}') cy.get('.tiptap').type('{enter}A second item{enter}A third item{selectall}')
cy.get('button').contains('clear nodes').click() cy.get('button').contains('clear nodes').click()
cy.get('.ProseMirror ul').should('not.exist') cy.get('.tiptap ul').should('not.exist')
cy.get('.ProseMirror p').should('have.length', 3) cy.get('.tiptap p').should('have.length', 3)
}) })
const buttonNodes = [ const buttonNodes = [
@ -98,46 +98,46 @@ context('/src/Examples/Default/React/', () => {
buttonNodes.forEach(n => { buttonNodes.forEach(n => {
it(`should set ${n.label} when the button is pressed`, () => { it(`should set ${n.label} when the button is pressed`, () => {
cy.get('button').contains('paragraph').click() cy.get('button').contains('paragraph').click()
cy.get('.ProseMirror').type('{selectall}Hello world{selectall}') cy.get('.tiptap').type('{selectall}Hello world{selectall}')
cy.get('button').contains(n.label).click() cy.get('button').contains(n.label).click()
cy.get(`.ProseMirror ${n.tag}`).should('exist').should('have.text', 'Hello world') cy.get(`.tiptap ${n.tag}`).should('exist').should('have.text', 'Hello world')
cy.get('button').contains(n.label).click() cy.get('button').contains(n.label).click()
cy.get(`.ProseMirror ${n.tag}`).should('not.exist') cy.get(`.tiptap ${n.tag}`).should('not.exist')
}) })
}) })
it('should add a hr when on the same line as a node', () => { it('should add a hr when on the same line as a node', () => {
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('button').contains('horizontal rule').click() cy.get('button').contains('horizontal rule').click()
cy.get('.ProseMirror hr').should('exist') cy.get('.tiptap hr').should('exist')
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
}) })
it('should add a hr when on a new line', () => { it('should add a hr when on a new line', () => {
cy.get('.ProseMirror').type('{rightArrow}{enter}') cy.get('.tiptap').type('{rightArrow}{enter}')
cy.get('button').contains('horizontal rule').click() cy.get('button').contains('horizontal rule').click()
cy.get('.ProseMirror hr').should('exist') cy.get('.tiptap hr').should('exist')
cy.get('.ProseMirror h1').should('exist') cy.get('.tiptap h1').should('exist')
}) })
it('should add a br', () => { it('should add a br', () => {
cy.get('.ProseMirror').type('{rightArrow}') cy.get('.tiptap').type('{rightArrow}')
cy.get('button').contains('hard break').click() cy.get('button').contains('hard break').click()
cy.get('.ProseMirror h1 br').should('exist') cy.get('.tiptap h1 br').should('exist')
}) })
it('should undo', () => { it('should undo', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('button').contains('undo').click() cy.get('button').contains('undo').click()
cy.get('.ProseMirror').should('contain', 'Hello world') cy.get('.tiptap').should('contain', 'Hello world')
}) })
it('should redo', () => { it('should redo', () => {
cy.get('.ProseMirror').type('{selectall}{backspace}') cy.get('.tiptap').type('{selectall}{backspace}')
cy.get('button').contains('undo').click() cy.get('button').contains('undo').click()
cy.get('.ProseMirror').should('contain', 'Hello world') cy.get('.tiptap').should('contain', 'Hello world')
cy.get('button').contains('redo').click() cy.get('button').contains('redo').click()
cy.get('.ProseMirror').should('not.contain', 'Hello world') cy.get('.tiptap').should('not.contain', 'Hello world')
}) })
}) })

View File

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

View File

@ -91,7 +91,7 @@ export default {
content: "!"; content: "!";
} }
.ProseMirror { .tiptap {
padding-right: 20px; padding-right: 20px;
} }
</style> </style>

View File

@ -142,7 +142,7 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

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

View File

@ -41,7 +41,7 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -1,4 +1,4 @@
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -67,7 +67,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

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

View File

@ -55,7 +55,7 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { .tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }

View File

@ -1,12 +1,12 @@
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }
} }
/* Placeholder (at the top) */ /* Placeholder (at the top) */
.ProseMirror p.is-editor-empty:first-child::before { tiptap p.is-editor-empty:first-child::before {
color: #adb5bd; color: #adb5bd;
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;

View File

@ -53,14 +53,14 @@ export default {
<style lang="scss"> <style lang="scss">
/* Basic editor styles */ /* Basic editor styles */
.ProseMirror { tiptap {
> * + * { > * + * {
margin-top: 0.75em; margin-top: 0.75em;
} }
} }
/* Placeholder (at the top) */ /* Placeholder (at the top) */
.ProseMirror p.is-editor-empty:first-child::before { tiptap p.is-editor-empty:first-child::before {
content: attr(data-placeholder); content: attr(data-placeholder);
float: left; float: left;
color: #adb5bd; color: #adb5bd;

Some files were not shown because too many files have changed in this diff Show More