@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 +181 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +182 -1
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +184 -4
- package/dist/index.umd.js.map +1 -1
- package/dist/packages/extension-list-item/src/commands/joinListItemBackward.d.ts +2 -0
- package/dist/packages/extension-list-item/src/commands/joinListItemForward.d.ts +2 -0
- package/dist/packages/extension-list-item/src/helpers/hasListItemAfter.d.ts +2 -0
- package/dist/packages/extension-list-item/src/helpers/hasListItemBefore.d.ts +2 -0
- package/dist/packages/extension-list-item/src/helpers/index.d.ts +12 -0
- package/dist/packages/extension-list-item/src/helpers/listItemhasSublist.d.ts +3 -0
- package/dist/packages/extension-list-item/src/index.d.ts +2 -2
- package/dist/packages/extension-list-item/src/list-item.d.ts +12 -0
- package/dist/packages/extension-ordered-list/src/index.d.ts +2 -2
- package/dist/packages/extension-text-style/src/index.d.ts +2 -2
- package/package.json +2 -2
- package/src/index.ts +2 -2
- package/src/ordered-list.ts +2 -2
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
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":";;;;;;AAMO,MAAM,QAAQ,GAAGA,SAAI,CAAC,MAAM,CAAkB;AACnD,IAAA,IAAI,EAAE,UAAU;IAEhB,UAAU,GAAA;QACR,OAAO;AACL,YAAA,cAAc,EAAE,EAAE;SACnB,CAAA;KACF;AAED,IAAA,OAAO,EAAE,kBAAkB;AAE3B,IAAA,QAAQ,EAAE,IAAI;IAEd,SAAS,GAAA;QACP,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,IAAI;AACV,aAAA;SACF,CAAA;KACF;IAED,UAAU,CAAC,EAAE,cAAc,EAAE,EAAA;AAC3B,QAAA,OAAO,CAAC,IAAI,EAAEC,oBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAA;KAC/E;IAED,oBAAoB,GAAA;QAClB,OAAO;AACL,YAAA,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1D,YAAA,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACvD,YAAA,WAAW,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;SAChE,CAAA;KACF;AACF,CAAA,CAAC;;ACjBK,MAAM,SAAS,GAAGC,SAAI,CAAC,MAAM,CAAmB;AACrD,IAAA,IAAI,EAAE,WAAW;IAEjB,UAAU,GAAA;QACR,OAAO;AACL,YAAA,cAAc,EAAE,EAAE;SACnB,CAAA;KACF;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,MAAM;gBACX,QAAQ,EAAE,OAAO,IAAG;oBAClB,MAAM,SAAS,GAAI,OAAuB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;oBAEhE,IAAI,CAAC,SAAS,EAAE;AACd,wBAAA,OAAO,KAAK,CAAA;AACb,qBAAA;AAED,oBAAA,OAAO,EAAE,CAAA;iBACV;AACF,aAAA;SACF,CAAA;KACF;IAED,UAAU,CAAC,EAAE,cAAc,EAAE,EAAA;AAC3B,QAAA,OAAO,CAAC,MAAM,EAAED,oBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAA;KACjF;IAED,WAAW,GAAA;QACT,OAAO;YACL,oBAAoB,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAI;gBAClD,MAAM,UAAU,GAAGE,sBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBACtD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAA;AAEzE,gBAAA,IAAI,SAAS,EAAE;AACb,oBAAA,OAAO,IAAI,CAAA;AACZ,iBAAA;gBAED,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACrC;SACF,CAAA;KACF;AAEF,CAAA,CAAC;;AC3CK,MAAM,UAAU,GAAG,cAAa;AAE1B,MAAA,WAAW,GAAGH,SAAI,CAAC,MAAM,CAAqB;AACzD,IAAA,IAAI,EAAE,aAAa;IAEnB,UAAU,GAAA;QACR,OAAO;AACL,YAAA,YAAY,EAAE,UAAU;AACxB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,cAAc,EAAE,KAAK;SACtB,CAAA;KACF;AAED,IAAA,KAAK,EAAE,YAAY;IAEnB,OAAO,GAAA;AACL,QAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAA;KACvC;IAED,aAAa,GAAA;QACX,OAAO;AACL,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,OAAO,IAAG;AACnB,oBAAA,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;AAClC,0BAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;0BACjD,CAAC,CAAA;iBACN;AACF,aAAA;SACF,CAAA;KACF;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,IAAI;AACV,aAAA;SACF,CAAA;KACF;IAED,UAAU,CAAC,EAAE,cAAc,EAAE,EAAA;QAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,sBAAsB,EAAE,GAAG,cAAc,CAAA;QAE3D,OAAO,KAAK,KAAK,CAAC;AAChB,cAAE,CAAC,IAAI,EAAEC,oBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,sBAAsB,CAAC,EAAE,CAAC,CAAC;AACjF,cAAE,CAAC,IAAI,EAAEA,oBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAA;KAC5E;IAED,WAAW,GAAA;QACT,OAAO;YACL,iBAAiB,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAI;AAC/C,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AAC/B,oBAAA,OAAO,KAAK,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;AACzK,iBAAA;gBACD,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;aACzF;SACF,CAAA;KACF;IAED,oBAAoB,GAAA;QAClB,OAAO;YACL,aAAa,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE;SAC9D,CAAA;KACF;IAED,aAAa,GAAA;QACX,IAAI,SAAS,GAAGG,sBAAiB,CAAC;AAChC,YAAA,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,aAAa,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACjF,SAAA,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YACzD,SAAS,GAAGA,sBAAiB,CAAC;AAC5B,gBAAA,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;AACjC,gBAAA,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;gBAC3C,aAAa,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5F,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChF,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,aAAA,CAAC,CAAA;AACH,SAAA;QACD,OAAO;YACL,SAAS;SACV,CAAA;KACF;AACF,CAAA;;;;;;"}
|
|
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
|
});
|
package/dist/index.umd.js.map
CHANGED
|
@@ -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,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;
|
|
@@ -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.
|
|
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.
|
|
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
package/src/ordered-list.ts
CHANGED
|
@@ -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,
|