@tiptap/extension-ordered-list 2.1.0-rc.0 → 2.1.0-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -3,6 +3,121 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var core = require('@tiptap/core');
6
+ var transform = require('@tiptap/pm/transform');
7
+
8
+ const joinListItemBackward = () => ({ tr, state, dispatch, }) => {
9
+ try {
10
+ const point = transform.joinPoint(state.doc, state.selection.$from.pos, -1);
11
+ if (point === null || point === undefined) {
12
+ return false;
13
+ }
14
+ tr.join(point, 2);
15
+ if (dispatch) {
16
+ dispatch(tr);
17
+ }
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ };
24
+
25
+ const joinListItemForward = () => ({ state, dispatch, tr, }) => {
26
+ try {
27
+ const point = transform.joinPoint(state.doc, state.selection.$from.pos, +1);
28
+ if (point === null || point === undefined) {
29
+ return false;
30
+ }
31
+ tr.join(point, 2);
32
+ if (dispatch) {
33
+ dispatch(tr);
34
+ }
35
+ return true;
36
+ }
37
+ catch (e) {
38
+ return false;
39
+ }
40
+ };
41
+
42
+ const hasListItemBefore = (typeOrName, state) => {
43
+ var _a;
44
+ const { $anchor } = state.selection;
45
+ const $targetPos = state.doc.resolve($anchor.pos - 2);
46
+ if ($targetPos.index() === 0) {
47
+ return false;
48
+ }
49
+ if (((_a = $targetPos.nodeBefore) === null || _a === void 0 ? void 0 : _a.type.name) !== typeOrName) {
50
+ return false;
51
+ }
52
+ return true;
53
+ };
54
+
55
+ const listItemHasSubList = (typeOrName, state, node) => {
56
+ if (!node) {
57
+ return false;
58
+ }
59
+ const nodeType = core.getNodeType(typeOrName, state.schema);
60
+ let hasSubList = false;
61
+ node.descendants(child => {
62
+ if (child.type === nodeType) {
63
+ hasSubList = true;
64
+ }
65
+ });
66
+ return hasSubList;
67
+ };
68
+
69
+ const findListItemPos = (typeOrName, state) => {
70
+ const { $from } = state.selection;
71
+ const nodeType = core.getNodeType(typeOrName, state.schema);
72
+ let currentNode = null;
73
+ let currentDepth = $from.depth;
74
+ let currentPos = $from.pos;
75
+ let targetDepth = null;
76
+ while (currentDepth > 0 && targetDepth === null) {
77
+ currentNode = $from.node(currentDepth);
78
+ if (currentNode.type === nodeType) {
79
+ targetDepth = currentDepth;
80
+ }
81
+ else {
82
+ currentDepth -= 1;
83
+ currentPos -= 1;
84
+ }
85
+ }
86
+ if (targetDepth === null) {
87
+ return null;
88
+ }
89
+ return { $pos: state.doc.resolve(currentPos), depth: targetDepth };
90
+ };
91
+ const getNextListDepth = (typeOrName, state) => {
92
+ const listItemPos = findListItemPos(typeOrName, state);
93
+ if (!listItemPos) {
94
+ return false;
95
+ }
96
+ const [, depth] = core.getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4);
97
+ return depth;
98
+ };
99
+ const nextListIsDeeper = (typeOrName, state) => {
100
+ const listDepth = getNextListDepth(typeOrName, state);
101
+ const listItemPos = findListItemPos(typeOrName, state);
102
+ if (!listItemPos || !listDepth) {
103
+ return false;
104
+ }
105
+ if (listDepth > listItemPos.depth) {
106
+ return true;
107
+ }
108
+ return false;
109
+ };
110
+ const nextListIsHigher = (typeOrName, state) => {
111
+ const listDepth = getNextListDepth(typeOrName, state);
112
+ const listItemPos = findListItemPos(typeOrName, state);
113
+ if (!listItemPos || !listDepth) {
114
+ return false;
115
+ }
116
+ if (listDepth < listItemPos.depth) {
117
+ return true;
118
+ }
119
+ return false;
120
+ };
6
121
 
7
122
  const ListItem = core.Node.create({
8
123
  name: 'listItem',
@@ -23,11 +138,77 @@ const ListItem = core.Node.create({
23
138
  renderHTML({ HTMLAttributes }) {
24
139
  return ['li', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
25
140
  },
141
+ addCommands() {
142
+ return {
143
+ joinListItemForward,
144
+ joinListItemBackward,
145
+ };
146
+ },
26
147
  addKeyboardShortcuts() {
27
148
  return {
28
149
  Enter: () => this.editor.commands.splitListItem(this.name),
29
150
  Tab: () => this.editor.commands.sinkListItem(this.name),
30
151
  'Shift-Tab': () => this.editor.commands.liftListItem(this.name),
152
+ Delete: ({ editor }) => {
153
+ // if the cursor is not inside the current node type
154
+ // do nothing and proceed
155
+ if (!core.isNodeActive(editor.state, this.name)) {
156
+ return false;
157
+ }
158
+ // if the cursor is not at the end of a node
159
+ // do nothing and proceed
160
+ if (!core.istAtEndOfNode(editor.state)) {
161
+ return false;
162
+ }
163
+ // check if the next node is a list with a deeper depth
164
+ if (nextListIsDeeper(this.name, editor.state)) {
165
+ return editor
166
+ .chain()
167
+ .focus(editor.state.selection.from + 4)
168
+ .lift(this.name)
169
+ .joinBackward()
170
+ .run();
171
+ }
172
+ if (nextListIsHigher(this.name, editor.state)) {
173
+ return editor.chain()
174
+ .joinForward()
175
+ .joinBackward()
176
+ .run();
177
+ }
178
+ // check if the next node is also a listItem
179
+ return editor.commands.joinListItemForward(this.name);
180
+ },
181
+ Backspace: ({ editor }) => {
182
+ // this is required to still handle the undo handling
183
+ if (this.editor.commands.undoInputRule()) {
184
+ return true;
185
+ }
186
+ // if the cursor is not inside the current node type
187
+ // do nothing and proceed
188
+ if (!core.isNodeActive(editor.state, this.name)) {
189
+ return false;
190
+ }
191
+ // if the cursor is not at the start of a node
192
+ // do nothing and proceed
193
+ if (!core.isAtStartOfNode(editor.state)) {
194
+ return false;
195
+ }
196
+ const listItemPos = findListItemPos(this.name, editor.state);
197
+ if (!listItemPos) {
198
+ return false;
199
+ }
200
+ const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2);
201
+ const prevNode = $prev.node(listItemPos.depth);
202
+ const previousListItemHasSubList = listItemHasSubList(this.name, editor.state, prevNode);
203
+ // if the previous item is a list item and doesn't have a sublist, join the list items
204
+ if (hasListItemBefore(this.name, editor.state) && !previousListItemHasSubList) {
205
+ return editor.commands.joinListItemBackward(this.name);
206
+ }
207
+ // otherwise in the end, a backspace should
208
+ // always just lift the list item if
209
+ // joining / merging is not possible
210
+ return editor.chain().liftListItem(this.name).run();
211
+ },
31
212
  };
32
213
  },
33
214
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../extension-list-item/src/list-item.ts","../../extension-text-style/src/text-style.ts","../src/ordered-list.ts"],"sourcesContent":["import { mergeAttributes, Node } from '@tiptap/core'\n\nexport interface ListItemOptions {\n HTMLAttributes: Record<string, any>,\n}\n\nexport const ListItem = Node.create<ListItemOptions>({\n name: 'listItem',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n content: 'paragraph block*',\n\n defining: true,\n\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n }\n },\n})\n","import {\n getMarkAttributes,\n Mark,\n mergeAttributes,\n} from '@tiptap/core'\n\nexport interface TextStyleOptions {\n HTMLAttributes: Record<string, any>,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n textStyle: {\n /**\n * Remove spans without inline style attributes.\n */\n removeEmptyTextStyle: () => ReturnType,\n }\n }\n}\n\nexport const TextStyle = Mark.create<TextStyleOptions>({\n name: 'textStyle',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = (element as HTMLElement).hasAttribute('style')\n\n if (!hasStyles) {\n return false\n }\n\n return {}\n },\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type)\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value)\n\n if (hasStyles) {\n return true\n }\n\n return commands.unsetMark(this.name)\n },\n }\n },\n\n})\n","import { mergeAttributes, Node, wrappingInputRule } from '@tiptap/core'\n\nimport ListItem from '../../extension-list-item/src'\nimport TextStyle from '../../extension-text-style/src'\n\nexport interface OrderedListOptions {\n itemTypeName: string,\n HTMLAttributes: Record<string, any>,\n keepMarks: boolean,\n keepAttributes: boolean,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n orderedList: {\n /**\n * Toggle an ordered list\n */\n toggleOrderedList: () => ReturnType,\n }\n }\n}\n\nexport const inputRegex = /^(\\d+)\\.\\s$/\n\nexport const OrderedList = Node.create<OrderedListOptions>({\n name: 'orderedList',\n\n addOptions() {\n return {\n itemTypeName: 'listItem',\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false,\n }\n },\n\n group: 'block list',\n\n content() {\n return `${this.options.itemTypeName}+`\n },\n\n addAttributes() {\n return {\n start: {\n default: 1,\n parseHTML: element => {\n return element.hasAttribute('start')\n ? parseInt(element.getAttribute('start') || '', 10)\n : 1\n },\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'ol',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n const { start, ...attributesWithoutStart } = HTMLAttributes\n\n return start === 1\n ? ['ol', mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0]\n : ['ol', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n toggleOrderedList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run()\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-7': () => this.editor.commands.toggleOrderedList(),\n }\n },\n\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({ start: +match[1] }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n })\n\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyle.name) }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n editor: this.editor,\n })\n }\n return [\n inputRule,\n ]\n },\n})\n"],"names":["Node","mergeAttributes","Mark","getMarkAttributes","wrappingInputRule"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../extension-list-item/src/commands/joinListItemBackward.ts","../../extension-list-item/src/commands/joinListItemForward.ts","../../extension-list-item/src/helpers/hasListItemBefore.ts","../../extension-list-item/src/helpers/listItemhasSublist.ts","../../extension-list-item/src/helpers/index.ts","../../extension-list-item/src/list-item.ts","../../extension-text-style/src/text-style.ts","../src/ordered-list.ts"],"sourcesContent":["import { RawCommands } from '@tiptap/core'\nimport { joinPoint } from '@tiptap/pm/transform'\n\nexport const joinListItemBackward: RawCommands['splitListItem'] = () => ({\n tr, state, dispatch,\n}) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1)\n\n if (point === null || point === undefined) {\n return false\n }\n\n tr.join(point, 2)\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n } catch {\n return false\n }\n}\n","import { RawCommands } from '@tiptap/core'\nimport { joinPoint } from '@tiptap/pm/transform'\n\nexport const joinListItemForward: RawCommands['splitListItem'] = () => ({\n state,\n dispatch,\n tr,\n}) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, +1)\n\n if (point === null || point === undefined) {\n return false\n }\n\n tr.join(point, 2)\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n } catch (e) {\n return false\n }\n}\n","import { EditorState } from '@tiptap/pm/state'\n\nexport const hasListItemBefore = (typeOrName: string, state: EditorState): boolean => {\n const { $anchor } = state.selection\n\n const $targetPos = state.doc.resolve($anchor.pos - 2)\n\n if ($targetPos.index() === 0) {\n return false\n }\n\n if ($targetPos.nodeBefore?.type.name !== typeOrName) {\n return false\n }\n\n return true\n}\n","import { getNodeType } from '@tiptap/core'\nimport { Node } from '@tiptap/pm/model'\nimport { EditorState } from '@tiptap/pm/state'\n\nexport const listItemHasSubList = (typeOrName: string, state: EditorState, node?: Node) => {\n if (!node) {\n return false\n }\n\n const nodeType = getNodeType(typeOrName, state.schema)\n\n let hasSubList = false\n\n node.descendants(child => {\n if (child.type === nodeType) {\n hasSubList = true\n }\n })\n\n return hasSubList\n}\n","import { getNodeAtPosition, getNodeType } from '@tiptap/core'\nimport { NodeType } from '@tiptap/pm/model'\nimport { EditorState } from '@tiptap/pm/state'\n\nexport * from './hasListItemAfter.js'\nexport * from './hasListItemBefore.js'\nexport * from './listItemhasSublist.js'\n\nexport const findListItemPos = (typeOrName: string | NodeType, state: EditorState) => {\n const { $from } = state.selection\n const nodeType = getNodeType(typeOrName, state.schema)\n\n let currentNode = null\n let currentDepth = $from.depth\n let currentPos = $from.pos\n let targetDepth: number | null = null\n\n while (currentDepth > 0 && targetDepth === null) {\n currentNode = $from.node(currentDepth)\n\n if (currentNode.type === nodeType) {\n targetDepth = currentDepth\n } else {\n currentDepth -= 1\n currentPos -= 1\n }\n }\n\n if (targetDepth === null) {\n return null\n }\n\n return { $pos: state.doc.resolve(currentPos), depth: targetDepth }\n}\n\nexport const getNextListDepth = (typeOrName: string, state: EditorState) => {\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos) {\n return false\n }\n\n const [, depth] = getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4)\n\n return depth\n}\n\nexport const nextListIsDeeper = (typeOrName: string, state: EditorState) => {\n const listDepth = getNextListDepth(typeOrName, state)\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos || !listDepth) {\n return false\n }\n\n if (listDepth > listItemPos.depth) {\n return true\n }\n\n return false\n}\n\nexport const nextListIsHigher = (typeOrName: string, state: EditorState) => {\n const listDepth = getNextListDepth(typeOrName, state)\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos || !listDepth) {\n return false\n }\n\n if (listDepth < listItemPos.depth) {\n return true\n }\n\n return false\n}\n","import {\n isAtStartOfNode, isNodeActive, istAtEndOfNode, mergeAttributes, Node,\n} from '@tiptap/core'\nimport { NodeType } from '@tiptap/pm/model'\n\nimport { joinListItemBackward } from './commands/joinListItemBackward.js'\nimport { joinListItemForward } from './commands/joinListItemForward.js'\nimport {\n findListItemPos, hasListItemBefore, listItemHasSubList, nextListIsDeeper, nextListIsHigher,\n} from './helpers/index.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n listItem: {\n /**\n * Lift the list item into a wrapping list.\n */\n joinListItemForward: (typeOrName: string | NodeType) => ReturnType\n joinListItemBackward: (typeOrName: string | NodeType) => ReturnType\n }\n }\n}\n\nexport interface ListItemOptions {\n HTMLAttributes: Record<string, any>,\n}\n\nexport const ListItem = Node.create<ListItemOptions>({\n name: 'listItem',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n content: 'paragraph block*',\n\n defining: true,\n\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n joinListItemForward,\n joinListItemBackward,\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n Delete: ({ editor }) => {\n // if the cursor is not inside the current node type\n // do nothing and proceed\n if (!isNodeActive(editor.state, this.name)) {\n return false\n }\n\n // if the cursor is not at the end of a node\n // do nothing and proceed\n if (!istAtEndOfNode(editor.state)) {\n return false\n }\n\n // check if the next node is a list with a deeper depth\n if (nextListIsDeeper(this.name, editor.state)) {\n return editor\n .chain()\n .focus(editor.state.selection.from + 4)\n .lift(this.name)\n .joinBackward()\n .run()\n }\n\n if (nextListIsHigher(this.name, editor.state)) {\n return editor.chain()\n .joinForward()\n .joinBackward()\n .run()\n }\n\n // check if the next node is also a listItem\n return editor.commands.joinListItemForward(this.name)\n },\n Backspace: ({ editor }) => {\n // this is required to still handle the undo handling\n if (this.editor.commands.undoInputRule()) {\n return true\n }\n\n // if the cursor is not inside the current node type\n // do nothing and proceed\n if (!isNodeActive(editor.state, this.name)) {\n return false\n }\n\n // if the cursor is not at the start of a node\n // do nothing and proceed\n if (!isAtStartOfNode(editor.state)) {\n return false\n }\n\n const listItemPos = findListItemPos(this.name, editor.state)\n\n if (!listItemPos) {\n return false\n }\n\n const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2)\n const prevNode = $prev.node(listItemPos.depth)\n\n const previousListItemHasSubList = listItemHasSubList(this.name, editor.state, prevNode)\n\n // if the previous item is a list item and doesn't have a sublist, join the list items\n if (hasListItemBefore(this.name, editor.state) && !previousListItemHasSubList) {\n return editor.commands.joinListItemBackward(this.name)\n }\n\n // otherwise in the end, a backspace should\n // always just lift the list item if\n // joining / merging is not possible\n return editor.chain().liftListItem(this.name).run()\n },\n }\n },\n})\n","import {\n getMarkAttributes,\n Mark,\n mergeAttributes,\n} from '@tiptap/core'\n\nexport interface TextStyleOptions {\n HTMLAttributes: Record<string, any>,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n textStyle: {\n /**\n * Remove spans without inline style attributes.\n */\n removeEmptyTextStyle: () => ReturnType,\n }\n }\n}\n\nexport const TextStyle = Mark.create<TextStyleOptions>({\n name: 'textStyle',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = (element as HTMLElement).hasAttribute('style')\n\n if (!hasStyles) {\n return false\n }\n\n return {}\n },\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type)\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value)\n\n if (hasStyles) {\n return true\n }\n\n return commands.unsetMark(this.name)\n },\n }\n },\n\n})\n","import { mergeAttributes, Node, wrappingInputRule } from '@tiptap/core'\n\nimport ListItem from '../../extension-list-item/src/index.js'\nimport TextStyle from '../../extension-text-style/src/index.js'\n\nexport interface OrderedListOptions {\n itemTypeName: string,\n HTMLAttributes: Record<string, any>,\n keepMarks: boolean,\n keepAttributes: boolean,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n orderedList: {\n /**\n * Toggle an ordered list\n */\n toggleOrderedList: () => ReturnType,\n }\n }\n}\n\nexport const inputRegex = /^(\\d+)\\.\\s$/\n\nexport const OrderedList = Node.create<OrderedListOptions>({\n name: 'orderedList',\n\n addOptions() {\n return {\n itemTypeName: 'listItem',\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false,\n }\n },\n\n group: 'block list',\n\n content() {\n return `${this.options.itemTypeName}+`\n },\n\n addAttributes() {\n return {\n start: {\n default: 1,\n parseHTML: element => {\n return element.hasAttribute('start')\n ? parseInt(element.getAttribute('start') || '', 10)\n : 1\n },\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'ol',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n const { start, ...attributesWithoutStart } = HTMLAttributes\n\n return start === 1\n ? ['ol', mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0]\n : ['ol', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n toggleOrderedList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run()\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-7': () => this.editor.commands.toggleOrderedList(),\n }\n },\n\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({ start: +match[1] }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n })\n\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyle.name) }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n editor: this.editor,\n })\n }\n return [\n inputRule,\n ]\n },\n})\n"],"names":["joinPoint","getNodeType","getNodeAtPosition","Node","mergeAttributes","isNodeActive","istAtEndOfNode","isAtStartOfNode","Mark","getMarkAttributes","wrappingInputRule"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,119 @@
1
- import { Node, mergeAttributes, Mark, getMarkAttributes, wrappingInputRule } from '@tiptap/core';
1
+ import { getNodeType, getNodeAtPosition, Node, mergeAttributes, isNodeActive, istAtEndOfNode, isAtStartOfNode, Mark, getMarkAttributes, wrappingInputRule } from '@tiptap/core';
2
+ import { joinPoint } from '@tiptap/pm/transform';
3
+
4
+ const joinListItemBackward = () => ({ tr, state, dispatch, }) => {
5
+ try {
6
+ const point = joinPoint(state.doc, state.selection.$from.pos, -1);
7
+ if (point === null || point === undefined) {
8
+ return false;
9
+ }
10
+ tr.join(point, 2);
11
+ if (dispatch) {
12
+ dispatch(tr);
13
+ }
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ };
20
+
21
+ const joinListItemForward = () => ({ state, dispatch, tr, }) => {
22
+ try {
23
+ const point = joinPoint(state.doc, state.selection.$from.pos, +1);
24
+ if (point === null || point === undefined) {
25
+ return false;
26
+ }
27
+ tr.join(point, 2);
28
+ if (dispatch) {
29
+ dispatch(tr);
30
+ }
31
+ return true;
32
+ }
33
+ catch (e) {
34
+ return false;
35
+ }
36
+ };
37
+
38
+ const hasListItemBefore = (typeOrName, state) => {
39
+ var _a;
40
+ const { $anchor } = state.selection;
41
+ const $targetPos = state.doc.resolve($anchor.pos - 2);
42
+ if ($targetPos.index() === 0) {
43
+ return false;
44
+ }
45
+ if (((_a = $targetPos.nodeBefore) === null || _a === void 0 ? void 0 : _a.type.name) !== typeOrName) {
46
+ return false;
47
+ }
48
+ return true;
49
+ };
50
+
51
+ const listItemHasSubList = (typeOrName, state, node) => {
52
+ if (!node) {
53
+ return false;
54
+ }
55
+ const nodeType = getNodeType(typeOrName, state.schema);
56
+ let hasSubList = false;
57
+ node.descendants(child => {
58
+ if (child.type === nodeType) {
59
+ hasSubList = true;
60
+ }
61
+ });
62
+ return hasSubList;
63
+ };
64
+
65
+ const findListItemPos = (typeOrName, state) => {
66
+ const { $from } = state.selection;
67
+ const nodeType = getNodeType(typeOrName, state.schema);
68
+ let currentNode = null;
69
+ let currentDepth = $from.depth;
70
+ let currentPos = $from.pos;
71
+ let targetDepth = null;
72
+ while (currentDepth > 0 && targetDepth === null) {
73
+ currentNode = $from.node(currentDepth);
74
+ if (currentNode.type === nodeType) {
75
+ targetDepth = currentDepth;
76
+ }
77
+ else {
78
+ currentDepth -= 1;
79
+ currentPos -= 1;
80
+ }
81
+ }
82
+ if (targetDepth === null) {
83
+ return null;
84
+ }
85
+ return { $pos: state.doc.resolve(currentPos), depth: targetDepth };
86
+ };
87
+ const getNextListDepth = (typeOrName, state) => {
88
+ const listItemPos = findListItemPos(typeOrName, state);
89
+ if (!listItemPos) {
90
+ return false;
91
+ }
92
+ const [, depth] = getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4);
93
+ return depth;
94
+ };
95
+ const nextListIsDeeper = (typeOrName, state) => {
96
+ const listDepth = getNextListDepth(typeOrName, state);
97
+ const listItemPos = findListItemPos(typeOrName, state);
98
+ if (!listItemPos || !listDepth) {
99
+ return false;
100
+ }
101
+ if (listDepth > listItemPos.depth) {
102
+ return true;
103
+ }
104
+ return false;
105
+ };
106
+ const nextListIsHigher = (typeOrName, state) => {
107
+ const listDepth = getNextListDepth(typeOrName, state);
108
+ const listItemPos = findListItemPos(typeOrName, state);
109
+ if (!listItemPos || !listDepth) {
110
+ return false;
111
+ }
112
+ if (listDepth < listItemPos.depth) {
113
+ return true;
114
+ }
115
+ return false;
116
+ };
2
117
 
3
118
  const ListItem = Node.create({
4
119
  name: 'listItem',
@@ -19,11 +134,77 @@ const ListItem = Node.create({
19
134
  renderHTML({ HTMLAttributes }) {
20
135
  return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
21
136
  },
137
+ addCommands() {
138
+ return {
139
+ joinListItemForward,
140
+ joinListItemBackward,
141
+ };
142
+ },
22
143
  addKeyboardShortcuts() {
23
144
  return {
24
145
  Enter: () => this.editor.commands.splitListItem(this.name),
25
146
  Tab: () => this.editor.commands.sinkListItem(this.name),
26
147
  'Shift-Tab': () => this.editor.commands.liftListItem(this.name),
148
+ Delete: ({ editor }) => {
149
+ // if the cursor is not inside the current node type
150
+ // do nothing and proceed
151
+ if (!isNodeActive(editor.state, this.name)) {
152
+ return false;
153
+ }
154
+ // if the cursor is not at the end of a node
155
+ // do nothing and proceed
156
+ if (!istAtEndOfNode(editor.state)) {
157
+ return false;
158
+ }
159
+ // check if the next node is a list with a deeper depth
160
+ if (nextListIsDeeper(this.name, editor.state)) {
161
+ return editor
162
+ .chain()
163
+ .focus(editor.state.selection.from + 4)
164
+ .lift(this.name)
165
+ .joinBackward()
166
+ .run();
167
+ }
168
+ if (nextListIsHigher(this.name, editor.state)) {
169
+ return editor.chain()
170
+ .joinForward()
171
+ .joinBackward()
172
+ .run();
173
+ }
174
+ // check if the next node is also a listItem
175
+ return editor.commands.joinListItemForward(this.name);
176
+ },
177
+ Backspace: ({ editor }) => {
178
+ // this is required to still handle the undo handling
179
+ if (this.editor.commands.undoInputRule()) {
180
+ return true;
181
+ }
182
+ // if the cursor is not inside the current node type
183
+ // do nothing and proceed
184
+ if (!isNodeActive(editor.state, this.name)) {
185
+ return false;
186
+ }
187
+ // if the cursor is not at the start of a node
188
+ // do nothing and proceed
189
+ if (!isAtStartOfNode(editor.state)) {
190
+ return false;
191
+ }
192
+ const listItemPos = findListItemPos(this.name, editor.state);
193
+ if (!listItemPos) {
194
+ return false;
195
+ }
196
+ const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2);
197
+ const prevNode = $prev.node(listItemPos.depth);
198
+ const previousListItemHasSubList = listItemHasSubList(this.name, editor.state, prevNode);
199
+ // if the previous item is a list item and doesn't have a sublist, join the list items
200
+ if (hasListItemBefore(this.name, editor.state) && !previousListItemHasSubList) {
201
+ return editor.commands.joinListItemBackward(this.name);
202
+ }
203
+ // otherwise in the end, a backspace should
204
+ // always just lift the list item if
205
+ // joining / merging is not possible
206
+ return editor.chain().liftListItem(this.name).run();
207
+ },
27
208
  };
28
209
  },
29
210
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../extension-list-item/src/list-item.ts","../../extension-text-style/src/text-style.ts","../src/ordered-list.ts"],"sourcesContent":["import { mergeAttributes, Node } from '@tiptap/core'\n\nexport interface ListItemOptions {\n HTMLAttributes: Record<string, any>,\n}\n\nexport const ListItem = Node.create<ListItemOptions>({\n name: 'listItem',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n content: 'paragraph block*',\n\n defining: true,\n\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n }\n },\n})\n","import {\n getMarkAttributes,\n Mark,\n mergeAttributes,\n} from '@tiptap/core'\n\nexport interface TextStyleOptions {\n HTMLAttributes: Record<string, any>,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n textStyle: {\n /**\n * Remove spans without inline style attributes.\n */\n removeEmptyTextStyle: () => ReturnType,\n }\n }\n}\n\nexport const TextStyle = Mark.create<TextStyleOptions>({\n name: 'textStyle',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = (element as HTMLElement).hasAttribute('style')\n\n if (!hasStyles) {\n return false\n }\n\n return {}\n },\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type)\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value)\n\n if (hasStyles) {\n return true\n }\n\n return commands.unsetMark(this.name)\n },\n }\n },\n\n})\n","import { mergeAttributes, Node, wrappingInputRule } from '@tiptap/core'\n\nimport ListItem from '../../extension-list-item/src'\nimport TextStyle from '../../extension-text-style/src'\n\nexport interface OrderedListOptions {\n itemTypeName: string,\n HTMLAttributes: Record<string, any>,\n keepMarks: boolean,\n keepAttributes: boolean,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n orderedList: {\n /**\n * Toggle an ordered list\n */\n toggleOrderedList: () => ReturnType,\n }\n }\n}\n\nexport const inputRegex = /^(\\d+)\\.\\s$/\n\nexport const OrderedList = Node.create<OrderedListOptions>({\n name: 'orderedList',\n\n addOptions() {\n return {\n itemTypeName: 'listItem',\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false,\n }\n },\n\n group: 'block list',\n\n content() {\n return `${this.options.itemTypeName}+`\n },\n\n addAttributes() {\n return {\n start: {\n default: 1,\n parseHTML: element => {\n return element.hasAttribute('start')\n ? parseInt(element.getAttribute('start') || '', 10)\n : 1\n },\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'ol',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n const { start, ...attributesWithoutStart } = HTMLAttributes\n\n return start === 1\n ? ['ol', mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0]\n : ['ol', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n toggleOrderedList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run()\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-7': () => this.editor.commands.toggleOrderedList(),\n }\n },\n\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({ start: +match[1] }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n })\n\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyle.name) }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n editor: this.editor,\n })\n }\n return [\n inputRule,\n ]\n },\n})\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../extension-list-item/src/commands/joinListItemBackward.ts","../../extension-list-item/src/commands/joinListItemForward.ts","../../extension-list-item/src/helpers/hasListItemBefore.ts","../../extension-list-item/src/helpers/listItemhasSublist.ts","../../extension-list-item/src/helpers/index.ts","../../extension-list-item/src/list-item.ts","../../extension-text-style/src/text-style.ts","../src/ordered-list.ts"],"sourcesContent":["import { RawCommands } from '@tiptap/core'\nimport { joinPoint } from '@tiptap/pm/transform'\n\nexport const joinListItemBackward: RawCommands['splitListItem'] = () => ({\n tr, state, dispatch,\n}) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1)\n\n if (point === null || point === undefined) {\n return false\n }\n\n tr.join(point, 2)\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n } catch {\n return false\n }\n}\n","import { RawCommands } from '@tiptap/core'\nimport { joinPoint } from '@tiptap/pm/transform'\n\nexport const joinListItemForward: RawCommands['splitListItem'] = () => ({\n state,\n dispatch,\n tr,\n}) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, +1)\n\n if (point === null || point === undefined) {\n return false\n }\n\n tr.join(point, 2)\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n } catch (e) {\n return false\n }\n}\n","import { EditorState } from '@tiptap/pm/state'\n\nexport const hasListItemBefore = (typeOrName: string, state: EditorState): boolean => {\n const { $anchor } = state.selection\n\n const $targetPos = state.doc.resolve($anchor.pos - 2)\n\n if ($targetPos.index() === 0) {\n return false\n }\n\n if ($targetPos.nodeBefore?.type.name !== typeOrName) {\n return false\n }\n\n return true\n}\n","import { getNodeType } from '@tiptap/core'\nimport { Node } from '@tiptap/pm/model'\nimport { EditorState } from '@tiptap/pm/state'\n\nexport const listItemHasSubList = (typeOrName: string, state: EditorState, node?: Node) => {\n if (!node) {\n return false\n }\n\n const nodeType = getNodeType(typeOrName, state.schema)\n\n let hasSubList = false\n\n node.descendants(child => {\n if (child.type === nodeType) {\n hasSubList = true\n }\n })\n\n return hasSubList\n}\n","import { getNodeAtPosition, getNodeType } from '@tiptap/core'\nimport { NodeType } from '@tiptap/pm/model'\nimport { EditorState } from '@tiptap/pm/state'\n\nexport * from './hasListItemAfter.js'\nexport * from './hasListItemBefore.js'\nexport * from './listItemhasSublist.js'\n\nexport const findListItemPos = (typeOrName: string | NodeType, state: EditorState) => {\n const { $from } = state.selection\n const nodeType = getNodeType(typeOrName, state.schema)\n\n let currentNode = null\n let currentDepth = $from.depth\n let currentPos = $from.pos\n let targetDepth: number | null = null\n\n while (currentDepth > 0 && targetDepth === null) {\n currentNode = $from.node(currentDepth)\n\n if (currentNode.type === nodeType) {\n targetDepth = currentDepth\n } else {\n currentDepth -= 1\n currentPos -= 1\n }\n }\n\n if (targetDepth === null) {\n return null\n }\n\n return { $pos: state.doc.resolve(currentPos), depth: targetDepth }\n}\n\nexport const getNextListDepth = (typeOrName: string, state: EditorState) => {\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos) {\n return false\n }\n\n const [, depth] = getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4)\n\n return depth\n}\n\nexport const nextListIsDeeper = (typeOrName: string, state: EditorState) => {\n const listDepth = getNextListDepth(typeOrName, state)\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos || !listDepth) {\n return false\n }\n\n if (listDepth > listItemPos.depth) {\n return true\n }\n\n return false\n}\n\nexport const nextListIsHigher = (typeOrName: string, state: EditorState) => {\n const listDepth = getNextListDepth(typeOrName, state)\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos || !listDepth) {\n return false\n }\n\n if (listDepth < listItemPos.depth) {\n return true\n }\n\n return false\n}\n","import {\n isAtStartOfNode, isNodeActive, istAtEndOfNode, mergeAttributes, Node,\n} from '@tiptap/core'\nimport { NodeType } from '@tiptap/pm/model'\n\nimport { joinListItemBackward } from './commands/joinListItemBackward.js'\nimport { joinListItemForward } from './commands/joinListItemForward.js'\nimport {\n findListItemPos, hasListItemBefore, listItemHasSubList, nextListIsDeeper, nextListIsHigher,\n} from './helpers/index.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n listItem: {\n /**\n * Lift the list item into a wrapping list.\n */\n joinListItemForward: (typeOrName: string | NodeType) => ReturnType\n joinListItemBackward: (typeOrName: string | NodeType) => ReturnType\n }\n }\n}\n\nexport interface ListItemOptions {\n HTMLAttributes: Record<string, any>,\n}\n\nexport const ListItem = Node.create<ListItemOptions>({\n name: 'listItem',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n content: 'paragraph block*',\n\n defining: true,\n\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n joinListItemForward,\n joinListItemBackward,\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n Delete: ({ editor }) => {\n // if the cursor is not inside the current node type\n // do nothing and proceed\n if (!isNodeActive(editor.state, this.name)) {\n return false\n }\n\n // if the cursor is not at the end of a node\n // do nothing and proceed\n if (!istAtEndOfNode(editor.state)) {\n return false\n }\n\n // check if the next node is a list with a deeper depth\n if (nextListIsDeeper(this.name, editor.state)) {\n return editor\n .chain()\n .focus(editor.state.selection.from + 4)\n .lift(this.name)\n .joinBackward()\n .run()\n }\n\n if (nextListIsHigher(this.name, editor.state)) {\n return editor.chain()\n .joinForward()\n .joinBackward()\n .run()\n }\n\n // check if the next node is also a listItem\n return editor.commands.joinListItemForward(this.name)\n },\n Backspace: ({ editor }) => {\n // this is required to still handle the undo handling\n if (this.editor.commands.undoInputRule()) {\n return true\n }\n\n // if the cursor is not inside the current node type\n // do nothing and proceed\n if (!isNodeActive(editor.state, this.name)) {\n return false\n }\n\n // if the cursor is not at the start of a node\n // do nothing and proceed\n if (!isAtStartOfNode(editor.state)) {\n return false\n }\n\n const listItemPos = findListItemPos(this.name, editor.state)\n\n if (!listItemPos) {\n return false\n }\n\n const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2)\n const prevNode = $prev.node(listItemPos.depth)\n\n const previousListItemHasSubList = listItemHasSubList(this.name, editor.state, prevNode)\n\n // if the previous item is a list item and doesn't have a sublist, join the list items\n if (hasListItemBefore(this.name, editor.state) && !previousListItemHasSubList) {\n return editor.commands.joinListItemBackward(this.name)\n }\n\n // otherwise in the end, a backspace should\n // always just lift the list item if\n // joining / merging is not possible\n return editor.chain().liftListItem(this.name).run()\n },\n }\n },\n})\n","import {\n getMarkAttributes,\n Mark,\n mergeAttributes,\n} from '@tiptap/core'\n\nexport interface TextStyleOptions {\n HTMLAttributes: Record<string, any>,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n textStyle: {\n /**\n * Remove spans without inline style attributes.\n */\n removeEmptyTextStyle: () => ReturnType,\n }\n }\n}\n\nexport const TextStyle = Mark.create<TextStyleOptions>({\n name: 'textStyle',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = (element as HTMLElement).hasAttribute('style')\n\n if (!hasStyles) {\n return false\n }\n\n return {}\n },\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type)\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value)\n\n if (hasStyles) {\n return true\n }\n\n return commands.unsetMark(this.name)\n },\n }\n },\n\n})\n","import { mergeAttributes, Node, wrappingInputRule } from '@tiptap/core'\n\nimport ListItem from '../../extension-list-item/src/index.js'\nimport TextStyle from '../../extension-text-style/src/index.js'\n\nexport interface OrderedListOptions {\n itemTypeName: string,\n HTMLAttributes: Record<string, any>,\n keepMarks: boolean,\n keepAttributes: boolean,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n orderedList: {\n /**\n * Toggle an ordered list\n */\n toggleOrderedList: () => ReturnType,\n }\n }\n}\n\nexport const inputRegex = /^(\\d+)\\.\\s$/\n\nexport const OrderedList = Node.create<OrderedListOptions>({\n name: 'orderedList',\n\n addOptions() {\n return {\n itemTypeName: 'listItem',\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false,\n }\n },\n\n group: 'block list',\n\n content() {\n return `${this.options.itemTypeName}+`\n },\n\n addAttributes() {\n return {\n start: {\n default: 1,\n parseHTML: element => {\n return element.hasAttribute('start')\n ? parseInt(element.getAttribute('start') || '', 10)\n : 1\n },\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'ol',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n const { start, ...attributesWithoutStart } = HTMLAttributes\n\n return start === 1\n ? ['ol', mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0]\n : ['ol', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n toggleOrderedList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run()\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-7': () => this.editor.commands.toggleOrderedList(),\n }\n },\n\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({ start: +match[1] }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n })\n\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyle.name) }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n editor: this.editor,\n })\n }\n return [\n inputRule,\n ]\n },\n})\n"],"names":[],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,8 +1,122 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@tiptap/core')) :
3
- typeof define === 'function' && define.amd ? define(['exports', '@tiptap/core'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@tiptap/extension-ordered-list"] = {}, global.core));
5
- })(this, (function (exports, core) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@tiptap/core'), require('@tiptap/pm/transform')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@tiptap/core', '@tiptap/pm/transform'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@tiptap/extension-ordered-list"] = {}, global.core, global.transform));
5
+ })(this, (function (exports, core, transform) { 'use strict';
6
+
7
+ const joinListItemBackward = () => ({ tr, state, dispatch, }) => {
8
+ try {
9
+ const point = transform.joinPoint(state.doc, state.selection.$from.pos, -1);
10
+ if (point === null || point === undefined) {
11
+ return false;
12
+ }
13
+ tr.join(point, 2);
14
+ if (dispatch) {
15
+ dispatch(tr);
16
+ }
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ };
23
+
24
+ const joinListItemForward = () => ({ state, dispatch, tr, }) => {
25
+ try {
26
+ const point = transform.joinPoint(state.doc, state.selection.$from.pos, +1);
27
+ if (point === null || point === undefined) {
28
+ return false;
29
+ }
30
+ tr.join(point, 2);
31
+ if (dispatch) {
32
+ dispatch(tr);
33
+ }
34
+ return true;
35
+ }
36
+ catch (e) {
37
+ return false;
38
+ }
39
+ };
40
+
41
+ const hasListItemBefore = (typeOrName, state) => {
42
+ var _a;
43
+ const { $anchor } = state.selection;
44
+ const $targetPos = state.doc.resolve($anchor.pos - 2);
45
+ if ($targetPos.index() === 0) {
46
+ return false;
47
+ }
48
+ if (((_a = $targetPos.nodeBefore) === null || _a === void 0 ? void 0 : _a.type.name) !== typeOrName) {
49
+ return false;
50
+ }
51
+ return true;
52
+ };
53
+
54
+ const listItemHasSubList = (typeOrName, state, node) => {
55
+ if (!node) {
56
+ return false;
57
+ }
58
+ const nodeType = core.getNodeType(typeOrName, state.schema);
59
+ let hasSubList = false;
60
+ node.descendants(child => {
61
+ if (child.type === nodeType) {
62
+ hasSubList = true;
63
+ }
64
+ });
65
+ return hasSubList;
66
+ };
67
+
68
+ const findListItemPos = (typeOrName, state) => {
69
+ const { $from } = state.selection;
70
+ const nodeType = core.getNodeType(typeOrName, state.schema);
71
+ let currentNode = null;
72
+ let currentDepth = $from.depth;
73
+ let currentPos = $from.pos;
74
+ let targetDepth = null;
75
+ while (currentDepth > 0 && targetDepth === null) {
76
+ currentNode = $from.node(currentDepth);
77
+ if (currentNode.type === nodeType) {
78
+ targetDepth = currentDepth;
79
+ }
80
+ else {
81
+ currentDepth -= 1;
82
+ currentPos -= 1;
83
+ }
84
+ }
85
+ if (targetDepth === null) {
86
+ return null;
87
+ }
88
+ return { $pos: state.doc.resolve(currentPos), depth: targetDepth };
89
+ };
90
+ const getNextListDepth = (typeOrName, state) => {
91
+ const listItemPos = findListItemPos(typeOrName, state);
92
+ if (!listItemPos) {
93
+ return false;
94
+ }
95
+ const [, depth] = core.getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4);
96
+ return depth;
97
+ };
98
+ const nextListIsDeeper = (typeOrName, state) => {
99
+ const listDepth = getNextListDepth(typeOrName, state);
100
+ const listItemPos = findListItemPos(typeOrName, state);
101
+ if (!listItemPos || !listDepth) {
102
+ return false;
103
+ }
104
+ if (listDepth > listItemPos.depth) {
105
+ return true;
106
+ }
107
+ return false;
108
+ };
109
+ const nextListIsHigher = (typeOrName, state) => {
110
+ const listDepth = getNextListDepth(typeOrName, state);
111
+ const listItemPos = findListItemPos(typeOrName, state);
112
+ if (!listItemPos || !listDepth) {
113
+ return false;
114
+ }
115
+ if (listDepth < listItemPos.depth) {
116
+ return true;
117
+ }
118
+ return false;
119
+ };
6
120
 
7
121
  const ListItem = core.Node.create({
8
122
  name: 'listItem',
@@ -23,11 +137,77 @@
23
137
  renderHTML({ HTMLAttributes }) {
24
138
  return ['li', core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
25
139
  },
140
+ addCommands() {
141
+ return {
142
+ joinListItemForward,
143
+ joinListItemBackward,
144
+ };
145
+ },
26
146
  addKeyboardShortcuts() {
27
147
  return {
28
148
  Enter: () => this.editor.commands.splitListItem(this.name),
29
149
  Tab: () => this.editor.commands.sinkListItem(this.name),
30
150
  'Shift-Tab': () => this.editor.commands.liftListItem(this.name),
151
+ Delete: ({ editor }) => {
152
+ // if the cursor is not inside the current node type
153
+ // do nothing and proceed
154
+ if (!core.isNodeActive(editor.state, this.name)) {
155
+ return false;
156
+ }
157
+ // if the cursor is not at the end of a node
158
+ // do nothing and proceed
159
+ if (!core.istAtEndOfNode(editor.state)) {
160
+ return false;
161
+ }
162
+ // check if the next node is a list with a deeper depth
163
+ if (nextListIsDeeper(this.name, editor.state)) {
164
+ return editor
165
+ .chain()
166
+ .focus(editor.state.selection.from + 4)
167
+ .lift(this.name)
168
+ .joinBackward()
169
+ .run();
170
+ }
171
+ if (nextListIsHigher(this.name, editor.state)) {
172
+ return editor.chain()
173
+ .joinForward()
174
+ .joinBackward()
175
+ .run();
176
+ }
177
+ // check if the next node is also a listItem
178
+ return editor.commands.joinListItemForward(this.name);
179
+ },
180
+ Backspace: ({ editor }) => {
181
+ // this is required to still handle the undo handling
182
+ if (this.editor.commands.undoInputRule()) {
183
+ return true;
184
+ }
185
+ // if the cursor is not inside the current node type
186
+ // do nothing and proceed
187
+ if (!core.isNodeActive(editor.state, this.name)) {
188
+ return false;
189
+ }
190
+ // if the cursor is not at the start of a node
191
+ // do nothing and proceed
192
+ if (!core.isAtStartOfNode(editor.state)) {
193
+ return false;
194
+ }
195
+ const listItemPos = findListItemPos(this.name, editor.state);
196
+ if (!listItemPos) {
197
+ return false;
198
+ }
199
+ const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2);
200
+ const prevNode = $prev.node(listItemPos.depth);
201
+ const previousListItemHasSubList = listItemHasSubList(this.name, editor.state, prevNode);
202
+ // if the previous item is a list item and doesn't have a sublist, join the list items
203
+ if (hasListItemBefore(this.name, editor.state) && !previousListItemHasSubList) {
204
+ return editor.commands.joinListItemBackward(this.name);
205
+ }
206
+ // otherwise in the end, a backspace should
207
+ // always just lift the list item if
208
+ // joining / merging is not possible
209
+ return editor.chain().liftListItem(this.name).run();
210
+ },
31
211
  };
32
212
  },
33
213
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../../extension-list-item/src/list-item.ts","../../extension-text-style/src/text-style.ts","../src/ordered-list.ts"],"sourcesContent":["import { mergeAttributes, Node } from '@tiptap/core'\n\nexport interface ListItemOptions {\n HTMLAttributes: Record<string, any>,\n}\n\nexport const ListItem = Node.create<ListItemOptions>({\n name: 'listItem',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n content: 'paragraph block*',\n\n defining: true,\n\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n }\n },\n})\n","import {\n getMarkAttributes,\n Mark,\n mergeAttributes,\n} from '@tiptap/core'\n\nexport interface TextStyleOptions {\n HTMLAttributes: Record<string, any>,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n textStyle: {\n /**\n * Remove spans without inline style attributes.\n */\n removeEmptyTextStyle: () => ReturnType,\n }\n }\n}\n\nexport const TextStyle = Mark.create<TextStyleOptions>({\n name: 'textStyle',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = (element as HTMLElement).hasAttribute('style')\n\n if (!hasStyles) {\n return false\n }\n\n return {}\n },\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type)\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value)\n\n if (hasStyles) {\n return true\n }\n\n return commands.unsetMark(this.name)\n },\n }\n },\n\n})\n","import { mergeAttributes, Node, wrappingInputRule } from '@tiptap/core'\n\nimport ListItem from '../../extension-list-item/src'\nimport TextStyle from '../../extension-text-style/src'\n\nexport interface OrderedListOptions {\n itemTypeName: string,\n HTMLAttributes: Record<string, any>,\n keepMarks: boolean,\n keepAttributes: boolean,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n orderedList: {\n /**\n * Toggle an ordered list\n */\n toggleOrderedList: () => ReturnType,\n }\n }\n}\n\nexport const inputRegex = /^(\\d+)\\.\\s$/\n\nexport const OrderedList = Node.create<OrderedListOptions>({\n name: 'orderedList',\n\n addOptions() {\n return {\n itemTypeName: 'listItem',\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false,\n }\n },\n\n group: 'block list',\n\n content() {\n return `${this.options.itemTypeName}+`\n },\n\n addAttributes() {\n return {\n start: {\n default: 1,\n parseHTML: element => {\n return element.hasAttribute('start')\n ? parseInt(element.getAttribute('start') || '', 10)\n : 1\n },\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'ol',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n const { start, ...attributesWithoutStart } = HTMLAttributes\n\n return start === 1\n ? ['ol', mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0]\n : ['ol', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n toggleOrderedList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run()\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-7': () => this.editor.commands.toggleOrderedList(),\n }\n },\n\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({ start: +match[1] }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n })\n\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyle.name) }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n editor: this.editor,\n })\n }\n return [\n inputRule,\n ]\n },\n})\n"],"names":["Node","mergeAttributes","Mark","getMarkAttributes","wrappingInputRule"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../../extension-list-item/src/commands/joinListItemBackward.ts","../../extension-list-item/src/commands/joinListItemForward.ts","../../extension-list-item/src/helpers/hasListItemBefore.ts","../../extension-list-item/src/helpers/listItemhasSublist.ts","../../extension-list-item/src/helpers/index.ts","../../extension-list-item/src/list-item.ts","../../extension-text-style/src/text-style.ts","../src/ordered-list.ts"],"sourcesContent":["import { RawCommands } from '@tiptap/core'\nimport { joinPoint } from '@tiptap/pm/transform'\n\nexport const joinListItemBackward: RawCommands['splitListItem'] = () => ({\n tr, state, dispatch,\n}) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1)\n\n if (point === null || point === undefined) {\n return false\n }\n\n tr.join(point, 2)\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n } catch {\n return false\n }\n}\n","import { RawCommands } from '@tiptap/core'\nimport { joinPoint } from '@tiptap/pm/transform'\n\nexport const joinListItemForward: RawCommands['splitListItem'] = () => ({\n state,\n dispatch,\n tr,\n}) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, +1)\n\n if (point === null || point === undefined) {\n return false\n }\n\n tr.join(point, 2)\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n } catch (e) {\n return false\n }\n}\n","import { EditorState } from '@tiptap/pm/state'\n\nexport const hasListItemBefore = (typeOrName: string, state: EditorState): boolean => {\n const { $anchor } = state.selection\n\n const $targetPos = state.doc.resolve($anchor.pos - 2)\n\n if ($targetPos.index() === 0) {\n return false\n }\n\n if ($targetPos.nodeBefore?.type.name !== typeOrName) {\n return false\n }\n\n return true\n}\n","import { getNodeType } from '@tiptap/core'\nimport { Node } from '@tiptap/pm/model'\nimport { EditorState } from '@tiptap/pm/state'\n\nexport const listItemHasSubList = (typeOrName: string, state: EditorState, node?: Node) => {\n if (!node) {\n return false\n }\n\n const nodeType = getNodeType(typeOrName, state.schema)\n\n let hasSubList = false\n\n node.descendants(child => {\n if (child.type === nodeType) {\n hasSubList = true\n }\n })\n\n return hasSubList\n}\n","import { getNodeAtPosition, getNodeType } from '@tiptap/core'\nimport { NodeType } from '@tiptap/pm/model'\nimport { EditorState } from '@tiptap/pm/state'\n\nexport * from './hasListItemAfter.js'\nexport * from './hasListItemBefore.js'\nexport * from './listItemhasSublist.js'\n\nexport const findListItemPos = (typeOrName: string | NodeType, state: EditorState) => {\n const { $from } = state.selection\n const nodeType = getNodeType(typeOrName, state.schema)\n\n let currentNode = null\n let currentDepth = $from.depth\n let currentPos = $from.pos\n let targetDepth: number | null = null\n\n while (currentDepth > 0 && targetDepth === null) {\n currentNode = $from.node(currentDepth)\n\n if (currentNode.type === nodeType) {\n targetDepth = currentDepth\n } else {\n currentDepth -= 1\n currentPos -= 1\n }\n }\n\n if (targetDepth === null) {\n return null\n }\n\n return { $pos: state.doc.resolve(currentPos), depth: targetDepth }\n}\n\nexport const getNextListDepth = (typeOrName: string, state: EditorState) => {\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos) {\n return false\n }\n\n const [, depth] = getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4)\n\n return depth\n}\n\nexport const nextListIsDeeper = (typeOrName: string, state: EditorState) => {\n const listDepth = getNextListDepth(typeOrName, state)\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos || !listDepth) {\n return false\n }\n\n if (listDepth > listItemPos.depth) {\n return true\n }\n\n return false\n}\n\nexport const nextListIsHigher = (typeOrName: string, state: EditorState) => {\n const listDepth = getNextListDepth(typeOrName, state)\n const listItemPos = findListItemPos(typeOrName, state)\n\n if (!listItemPos || !listDepth) {\n return false\n }\n\n if (listDepth < listItemPos.depth) {\n return true\n }\n\n return false\n}\n","import {\n isAtStartOfNode, isNodeActive, istAtEndOfNode, mergeAttributes, Node,\n} from '@tiptap/core'\nimport { NodeType } from '@tiptap/pm/model'\n\nimport { joinListItemBackward } from './commands/joinListItemBackward.js'\nimport { joinListItemForward } from './commands/joinListItemForward.js'\nimport {\n findListItemPos, hasListItemBefore, listItemHasSubList, nextListIsDeeper, nextListIsHigher,\n} from './helpers/index.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n listItem: {\n /**\n * Lift the list item into a wrapping list.\n */\n joinListItemForward: (typeOrName: string | NodeType) => ReturnType\n joinListItemBackward: (typeOrName: string | NodeType) => ReturnType\n }\n }\n}\n\nexport interface ListItemOptions {\n HTMLAttributes: Record<string, any>,\n}\n\nexport const ListItem = Node.create<ListItemOptions>({\n name: 'listItem',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n content: 'paragraph block*',\n\n defining: true,\n\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n joinListItemForward,\n joinListItemBackward,\n }\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n Delete: ({ editor }) => {\n // if the cursor is not inside the current node type\n // do nothing and proceed\n if (!isNodeActive(editor.state, this.name)) {\n return false\n }\n\n // if the cursor is not at the end of a node\n // do nothing and proceed\n if (!istAtEndOfNode(editor.state)) {\n return false\n }\n\n // check if the next node is a list with a deeper depth\n if (nextListIsDeeper(this.name, editor.state)) {\n return editor\n .chain()\n .focus(editor.state.selection.from + 4)\n .lift(this.name)\n .joinBackward()\n .run()\n }\n\n if (nextListIsHigher(this.name, editor.state)) {\n return editor.chain()\n .joinForward()\n .joinBackward()\n .run()\n }\n\n // check if the next node is also a listItem\n return editor.commands.joinListItemForward(this.name)\n },\n Backspace: ({ editor }) => {\n // this is required to still handle the undo handling\n if (this.editor.commands.undoInputRule()) {\n return true\n }\n\n // if the cursor is not inside the current node type\n // do nothing and proceed\n if (!isNodeActive(editor.state, this.name)) {\n return false\n }\n\n // if the cursor is not at the start of a node\n // do nothing and proceed\n if (!isAtStartOfNode(editor.state)) {\n return false\n }\n\n const listItemPos = findListItemPos(this.name, editor.state)\n\n if (!listItemPos) {\n return false\n }\n\n const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2)\n const prevNode = $prev.node(listItemPos.depth)\n\n const previousListItemHasSubList = listItemHasSubList(this.name, editor.state, prevNode)\n\n // if the previous item is a list item and doesn't have a sublist, join the list items\n if (hasListItemBefore(this.name, editor.state) && !previousListItemHasSubList) {\n return editor.commands.joinListItemBackward(this.name)\n }\n\n // otherwise in the end, a backspace should\n // always just lift the list item if\n // joining / merging is not possible\n return editor.chain().liftListItem(this.name).run()\n },\n }\n },\n})\n","import {\n getMarkAttributes,\n Mark,\n mergeAttributes,\n} from '@tiptap/core'\n\nexport interface TextStyleOptions {\n HTMLAttributes: Record<string, any>,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n textStyle: {\n /**\n * Remove spans without inline style attributes.\n */\n removeEmptyTextStyle: () => ReturnType,\n }\n }\n}\n\nexport const TextStyle = Mark.create<TextStyleOptions>({\n name: 'textStyle',\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = (element as HTMLElement).hasAttribute('style')\n\n if (!hasStyles) {\n return false\n }\n\n return {}\n },\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type)\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value)\n\n if (hasStyles) {\n return true\n }\n\n return commands.unsetMark(this.name)\n },\n }\n },\n\n})\n","import { mergeAttributes, Node, wrappingInputRule } from '@tiptap/core'\n\nimport ListItem from '../../extension-list-item/src/index.js'\nimport TextStyle from '../../extension-text-style/src/index.js'\n\nexport interface OrderedListOptions {\n itemTypeName: string,\n HTMLAttributes: Record<string, any>,\n keepMarks: boolean,\n keepAttributes: boolean,\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n orderedList: {\n /**\n * Toggle an ordered list\n */\n toggleOrderedList: () => ReturnType,\n }\n }\n}\n\nexport const inputRegex = /^(\\d+)\\.\\s$/\n\nexport const OrderedList = Node.create<OrderedListOptions>({\n name: 'orderedList',\n\n addOptions() {\n return {\n itemTypeName: 'listItem',\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false,\n }\n },\n\n group: 'block list',\n\n content() {\n return `${this.options.itemTypeName}+`\n },\n\n addAttributes() {\n return {\n start: {\n default: 1,\n parseHTML: element => {\n return element.hasAttribute('start')\n ? parseInt(element.getAttribute('start') || '', 10)\n : 1\n },\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'ol',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n const { start, ...attributesWithoutStart } = HTMLAttributes\n\n return start === 1\n ? ['ol', mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0]\n : ['ol', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n addCommands() {\n return {\n toggleOrderedList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run()\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-7': () => this.editor.commands.toggleOrderedList(),\n }\n },\n\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({ start: +match[1] }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n })\n\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyle.name) }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n editor: this.editor,\n })\n }\n return [\n inputRule,\n ]\n },\n})\n"],"names":["joinPoint","getNodeType","getNodeAtPosition","Node","mergeAttributes","isNodeActive","istAtEndOfNode","isAtStartOfNode","Mark","getMarkAttributes","wrappingInputRule"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { RawCommands } from '@tiptap/core';
2
+ export declare const joinListItemBackward: RawCommands['splitListItem'];
@@ -0,0 +1,2 @@
1
+ import { RawCommands } from '@tiptap/core';
2
+ export declare const joinListItemForward: RawCommands['splitListItem'];
@@ -0,0 +1,2 @@
1
+ import { EditorState } from '@tiptap/pm/state';
2
+ export declare const hasListItemAfter: (typeOrName: string, state: EditorState) => boolean;
@@ -0,0 +1,2 @@
1
+ import { EditorState } from '@tiptap/pm/state';
2
+ export declare const hasListItemBefore: (typeOrName: string, state: EditorState) => boolean;
@@ -0,0 +1,12 @@
1
+ import { NodeType } from '@tiptap/pm/model';
2
+ import { EditorState } from '@tiptap/pm/state';
3
+ export * from './hasListItemAfter.js';
4
+ export * from './hasListItemBefore.js';
5
+ export * from './listItemhasSublist.js';
6
+ export declare const findListItemPos: (typeOrName: string | NodeType, state: EditorState) => {
7
+ $pos: import("prosemirror-model").ResolvedPos;
8
+ depth: number;
9
+ } | null;
10
+ export declare const getNextListDepth: (typeOrName: string, state: EditorState) => number | false;
11
+ export declare const nextListIsDeeper: (typeOrName: string, state: EditorState) => boolean;
12
+ export declare const nextListIsHigher: (typeOrName: string, state: EditorState) => boolean;
@@ -0,0 +1,3 @@
1
+ import { Node } from '@tiptap/pm/model';
2
+ import { EditorState } from '@tiptap/pm/state';
3
+ export declare const listItemHasSubList: (typeOrName: string, state: EditorState, node?: Node) => boolean;
@@ -1,3 +1,3 @@
1
- import { ListItem } from './list-item';
2
- export * from './list-item';
1
+ import { ListItem } from './list-item.js';
2
+ export * from './list-item.js';
3
3
  export default ListItem;
@@ -1,4 +1,16 @@
1
1
  import { Node } from '@tiptap/core';
2
+ import { NodeType } from '@tiptap/pm/model';
3
+ declare module '@tiptap/core' {
4
+ interface Commands<ReturnType> {
5
+ listItem: {
6
+ /**
7
+ * Lift the list item into a wrapping list.
8
+ */
9
+ joinListItemForward: (typeOrName: string | NodeType) => ReturnType;
10
+ joinListItemBackward: (typeOrName: string | NodeType) => ReturnType;
11
+ };
12
+ }
13
+ }
2
14
  export interface ListItemOptions {
3
15
  HTMLAttributes: Record<string, any>;
4
16
  }
@@ -1,3 +1,3 @@
1
- import { OrderedList } from './ordered-list';
2
- export * from './ordered-list';
1
+ import { OrderedList } from './ordered-list.js';
2
+ export * from './ordered-list.js';
3
3
  export default OrderedList;
@@ -1,3 +1,3 @@
1
- import { TextStyle } from './text-style';
2
- export * from './text-style';
1
+ import { TextStyle } from './text-style.js';
2
+ export * from './text-style.js';
3
3
  export default TextStyle;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiptap/extension-ordered-list",
3
3
  "description": "ordered list extension for tiptap",
4
- "version": "2.1.0-rc.0",
4
+ "version": "2.1.0-rc.10",
5
5
  "homepage": "https://tiptap.dev",
6
6
  "keywords": [
7
7
  "tiptap",
@@ -29,7 +29,7 @@
29
29
  "dist"
30
30
  ],
31
31
  "devDependencies": {
32
- "@tiptap/core": "^2.1.0-rc.0"
32
+ "@tiptap/core": "^2.1.0-rc.10"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "@tiptap/core": "^2.0.0"
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { OrderedList } from './ordered-list'
1
+ import { OrderedList } from './ordered-list.js'
2
2
 
3
- export * from './ordered-list'
3
+ export * from './ordered-list.js'
4
4
 
5
5
  export default OrderedList
@@ -1,7 +1,7 @@
1
1
  import { mergeAttributes, Node, wrappingInputRule } from '@tiptap/core'
2
2
 
3
- import ListItem from '../../extension-list-item/src'
4
- import TextStyle from '../../extension-text-style/src'
3
+ import ListItem from '../../extension-list-item/src/index.js'
4
+ import TextStyle from '../../extension-text-style/src/index.js'
5
5
 
6
6
  export interface OrderedListOptions {
7
7
  itemTypeName: string,