diff --git a/docs/src/demos/Experiments/WordBreak/index.vue b/docs/src/demos/Experiments/WordBreak/index.vue new file mode 100644 index 00000000..047debd0 --- /dev/null +++ b/docs/src/demos/Experiments/WordBreak/index.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/docs/src/demos/Experiments/WordBreak/word-break.ts b/docs/src/demos/Experiments/WordBreak/word-break.ts new file mode 100644 index 00000000..692ebe04 --- /dev/null +++ b/docs/src/demos/Experiments/WordBreak/word-break.ts @@ -0,0 +1,71 @@ +import { Command, Node, mergeAttributes } from '@tiptap/core' +import { exitCode } from 'prosemirror-commands' + +export interface WordBreakOptions { + HTMLAttributes: { + [key: string]: any + }, +} + +declare module '@tiptap/core' { + interface Commands { + wordBreak: { + /** + * Add a hard break + */ + setWordBreak: () => Command, + } + } +} + +export const WordBreak = Node.create({ + name: 'wordBreak', + + defaultOptions: { + HTMLAttributes: {}, + }, + + inline: true, + + group: 'inline', + + selectable: false, + + parseHTML() { + return [ + { tag: 'wbr' }, + ] + }, + + renderHTML({ HTMLAttributes }) { + return ['wbr', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)] + }, + + addCommands() { + return { + setWordBreak: () => ({ commands, state, dispatch }) => { + return commands.first([ + () => exitCode(state, dispatch), + () => { + if (dispatch) { + state.tr.replaceSelectionWith(this.type.create()).scrollIntoView() + } + + return true + }, + ]) + }, + } + }, + + addNodeView() { + return () => { + const dom = document.createElement('span') + dom.classList.add('word-break') + + return { + dom, + } + } + }, +}) diff --git a/docs/src/docPages/experiments.md b/docs/src/docPages/experiments.md index 0e9a9acd..33957c71 100644 --- a/docs/src/docPages/experiments.md +++ b/docs/src/docPages/experiments.md @@ -9,3 +9,4 @@ Congratulations! You’ve found our playground with a list of experiments. Be aw * [@tiptap/extension-iframe?](/experiments/embeds) * [@tiptap/extension-toggle-list?](/experiments/details) * [@tiptap/extension-collaboration-annotation](/experiments/collaboration-annotation) +* [@tiptap/extension-word-break](/experiments/word-break) diff --git a/docs/src/docPages/experiments/word-break.md b/docs/src/docPages/experiments/word-break.md new file mode 100644 index 00000000..2f8909ca --- /dev/null +++ b/docs/src/docPages/experiments/word-break.md @@ -0,0 +1,5 @@ +# Word break + +⚠️ Experiment + +