@milkdown/preset-gfm 5.1.2 → 5.3.1

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.
@@ -0,0 +1,279 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { SupportedKeys as SupportedKeys$2, tablePlugin } from "@milkdown/plugin-table";
21
+ export { BreakTable, InsertTable, NextCell, PrevCell, createTable, table, tablePlugin } from "@milkdown/plugin-table";
22
+ import { SupportedKeys as SupportedKeys$1, commonmark, commands as commands$1 } from "@milkdown/preset-commonmark";
23
+ export { InsertHardbreak, InsertHr, InsertImage, LiftListItem, ModifyImage, ModifyLink, SinkListItem, SplitListItem, ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, TurnIntoCodeFence, TurnIntoHeading, TurnIntoText, WrapInBlockquote, WrapInBulletList, WrapInOrderedList, blockquote, bulletList, codeFence, codeInline, commonmark, commonmarkNodes, commonmarkPlugins, doc, em, hardbreak, heading, hr, image, link, listItem, orderedList, paragraph, strong, text } from "@milkdown/preset-commonmark";
24
+ import { createPlugin, createMark, createShortcut, createNode, AtomList } from "@milkdown/utils";
25
+ import { inputRules, InputRule, markRule, toggleMark, wrappingInputRule, splitListItem, sinkListItem, liftListItem, wrapIn } from "@milkdown/prose";
26
+ import { css } from "@emotion/css";
27
+ import { createCmdKey, createCmd, themeToolCtx } from "@milkdown/core";
28
+ const urlRegex = /(https?:\/\/)?www\.[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z]{2,}\b(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)$/;
29
+ const proseUrlPlugin = () => inputRules({
30
+ rules: [
31
+ new InputRule(urlRegex, (state, match, start, end) => {
32
+ const { schema } = state;
33
+ const [text2] = match;
34
+ if (!text2)
35
+ return null;
36
+ return state.tr.replaceWith(start, end, schema.text(text2)).addMark(start, text2.length + start, schema.marks.link.create({ href: text2.startsWith("www") ? `https://${text2}` : text2 }));
37
+ })
38
+ ]
39
+ });
40
+ const urlPlugin = createPlugin(() => ({ prosePlugins: () => [proseUrlPlugin()] }));
41
+ const SupportedKeys = __spreadProps(__spreadValues(__spreadValues({}, SupportedKeys$1), SupportedKeys$2), {
42
+ StrikeThrough: "StrikeThrough",
43
+ TaskList: "TaskList"
44
+ });
45
+ const ToggleStrikeThrough = createCmdKey();
46
+ const strikeThrough = createMark((utils) => {
47
+ const id = "strike_through";
48
+ const style = utils.getStyle((themeTool) => css`
49
+ text-decoration-color: ${themeTool.palette("secondary")};
50
+ `);
51
+ return {
52
+ id,
53
+ schema: () => ({
54
+ parseDOM: [
55
+ { tag: "del" },
56
+ { style: "text-decoration", getAttrs: (value) => value === "line-through" }
57
+ ],
58
+ toDOM: (mark) => ["del", { class: utils.getClassName(mark.attrs, "strike-through", style) }],
59
+ parseMarkdown: {
60
+ match: (node) => node.type === "delete",
61
+ runner: (state, node, markType) => {
62
+ state.openMark(markType);
63
+ state.next(node.children);
64
+ state.closeMark(markType);
65
+ }
66
+ },
67
+ toMarkdown: {
68
+ match: (mark) => mark.type.name === id,
69
+ runner: (state, mark) => {
70
+ state.withMark(mark, "delete");
71
+ }
72
+ }
73
+ }),
74
+ inputRules: (markType) => [
75
+ markRule(/(?:~~)([^~]+)(?:~~)$/, markType),
76
+ markRule(/(?:^|[^~])(~([^~]+)~)$/, markType)
77
+ ],
78
+ commands: (markType) => [createCmd(ToggleStrikeThrough, () => toggleMark(markType))],
79
+ shortcuts: {
80
+ [SupportedKeys.StrikeThrough]: createShortcut(ToggleStrikeThrough, "Mod-Alt-x")
81
+ }
82
+ };
83
+ });
84
+ const SplitTaskListItem = createCmdKey();
85
+ const SinkTaskListItem = createCmdKey();
86
+ const LiftTaskListItem = createCmdKey();
87
+ const TurnIntoTaskList = createCmdKey();
88
+ const taskListItem = createNode((utils) => {
89
+ const id = "task_list_item";
90
+ const style = utils.getStyle(({ palette, size }) => css`
91
+ list-style-type: none;
92
+ position: relative;
93
+
94
+ & > div {
95
+ overflow: hidden;
96
+ padding: 0 2px;
97
+ }
98
+
99
+ label {
100
+ position: absolute;
101
+ top: 0;
102
+ left: -2rem;
103
+ display: inline-block;
104
+ width: 1.5rem;
105
+ height: 1.5rem;
106
+ margin: 0.5rem 0;
107
+ input {
108
+ visibility: hidden;
109
+ }
110
+ }
111
+ label:before {
112
+ position: absolute;
113
+ top: 0;
114
+ right: 0;
115
+ bottom: 0;
116
+ left: 0;
117
+ border-radius: ${size.radius};
118
+ }
119
+ label:hover:before {
120
+ background: ${palette("background")};
121
+ }
122
+ &[data-checked='true'] {
123
+ label {
124
+ color: ${palette("primary")};
125
+ }
126
+ }
127
+ &[data-checked='false'] {
128
+ label {
129
+ color: ${palette("solid", 0.87)};
130
+ }
131
+ }
132
+ .paragraph {
133
+ margin: 0.5rem 0;
134
+ }
135
+ `);
136
+ return {
137
+ id,
138
+ schema: () => ({
139
+ group: "listItem",
140
+ content: "paragraph block*",
141
+ defining: true,
142
+ attrs: {
143
+ checked: {
144
+ default: false
145
+ }
146
+ },
147
+ parseDOM: [
148
+ {
149
+ tag: 'li[data-type="task-list-item"]',
150
+ getAttrs: (dom) => {
151
+ if (!(dom instanceof HTMLElement)) {
152
+ throw new Error();
153
+ }
154
+ return { checked: dom.dataset.checked === "true" };
155
+ }
156
+ }
157
+ ],
158
+ toDOM: (node) => [
159
+ "li",
160
+ {
161
+ "data-type": "task-item",
162
+ "data-checked": node.attrs.checked ? "true" : "false",
163
+ class: utils.getClassName(node.attrs, "task-list-item", style)
164
+ },
165
+ 0
166
+ ],
167
+ parseMarkdown: {
168
+ match: ({ type, checked }) => {
169
+ return type === "listItem" && checked !== null;
170
+ },
171
+ runner: (state, node, type) => {
172
+ state.openNode(type, { checked: node.checked });
173
+ state.next(node.children);
174
+ state.closeNode();
175
+ }
176
+ },
177
+ toMarkdown: {
178
+ match: (node) => node.type.name === id,
179
+ runner: (state, node) => {
180
+ state.openNode("listItem", void 0, { checked: node.attrs.checked });
181
+ state.next(node.content);
182
+ state.closeNode();
183
+ }
184
+ }
185
+ }),
186
+ inputRules: (nodeType) => [
187
+ wrappingInputRule(/^\s*(\[([ |x])\])\s$/, nodeType, (match) => ({
188
+ checked: match[match.length - 1] === "x"
189
+ }))
190
+ ],
191
+ commands: (nodeType) => [
192
+ createCmd(SplitTaskListItem, () => splitListItem(nodeType)),
193
+ createCmd(SinkTaskListItem, () => sinkListItem(nodeType)),
194
+ createCmd(LiftTaskListItem, () => liftListItem(nodeType)),
195
+ createCmd(TurnIntoTaskList, () => wrapIn(nodeType))
196
+ ],
197
+ shortcuts: {
198
+ [SupportedKeys.NextListItem]: createShortcut(SplitTaskListItem, "Enter"),
199
+ [SupportedKeys.SinkListItem]: createShortcut(SinkTaskListItem, "Mod-]"),
200
+ [SupportedKeys.LiftListItem]: createShortcut(LiftTaskListItem, "Mod-["),
201
+ [SupportedKeys.TaskList]: createShortcut(TurnIntoTaskList, "Mod-Alt-9")
202
+ },
203
+ view: (ctx) => (node, view, getPos) => {
204
+ const createIcon = ctx.get(themeToolCtx).slots.icon;
205
+ const listItem2 = document.createElement("li");
206
+ const checkboxWrapper = document.createElement("label");
207
+ const checkboxStyler = document.createElement("span");
208
+ const checkbox = document.createElement("input");
209
+ const content = document.createElement("div");
210
+ let icon = createIcon("unchecked");
211
+ checkboxWrapper.appendChild(icon);
212
+ const setIcon = (name) => {
213
+ const nextIcon = createIcon(name);
214
+ checkboxWrapper.replaceChild(nextIcon, icon);
215
+ icon = nextIcon;
216
+ };
217
+ checkboxWrapper.contentEditable = "false";
218
+ checkbox.type = "checkbox";
219
+ const onChange = (event) => {
220
+ const target = event.target;
221
+ if (!(target instanceof HTMLInputElement))
222
+ return;
223
+ if (!view.editable) {
224
+ checkbox.checked = !checkbox.checked;
225
+ return;
226
+ }
227
+ const { tr } = view.state;
228
+ view.dispatch(tr.setNodeMarkup(getPos(), void 0, {
229
+ checked: target.checked
230
+ }));
231
+ };
232
+ checkbox.addEventListener("change", onChange);
233
+ listItem2.dataset.checked = node.attrs.checked;
234
+ if (node.attrs.checked) {
235
+ checkbox.setAttribute("checked", "checked");
236
+ }
237
+ checkboxWrapper.append(checkbox, checkboxStyler);
238
+ listItem2.append(checkboxWrapper, content);
239
+ const attributes = {
240
+ "data-type": "task-item",
241
+ "data-checked": node.attrs.checked ? "true" : "false",
242
+ class: utils.getClassName(node.attrs, "task-list-item", style)
243
+ };
244
+ Object.entries(attributes).forEach(([key, value]) => {
245
+ listItem2.setAttribute(key, value);
246
+ });
247
+ setIcon(node.attrs.checked ? "checked" : "unchecked");
248
+ return {
249
+ dom: listItem2,
250
+ contentDOM: content,
251
+ update: (updatedNode) => {
252
+ if (updatedNode.type.name !== id)
253
+ return false;
254
+ listItem2.dataset.checked = updatedNode.attrs.checked;
255
+ if (updatedNode.attrs.checked) {
256
+ checkbox.setAttribute("checked", "checked");
257
+ } else {
258
+ checkbox.removeAttribute("checked");
259
+ }
260
+ setIcon(updatedNode.attrs.checked ? "checked" : "unchecked");
261
+ return true;
262
+ },
263
+ destroy: () => {
264
+ checkbox.removeEventListener("change", onChange);
265
+ }
266
+ };
267
+ }
268
+ };
269
+ });
270
+ const gfm = AtomList.create([...commonmark, tablePlugin(), urlPlugin(), strikeThrough(), taskListItem()]);
271
+ const commands = __spreadProps(__spreadValues({}, commands$1), {
272
+ ToggleStrikeThrough,
273
+ TurnIntoTaskList,
274
+ SinkTaskListItem,
275
+ LiftTaskListItem,
276
+ SplitTaskListItem
277
+ });
278
+ export { LiftTaskListItem, SinkTaskListItem, SplitTaskListItem, SupportedKeys, ToggleStrikeThrough, TurnIntoTaskList, commands, gfm, strikeThrough, taskListItem };
279
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../src/auto-link.ts","../src/supported-keys.ts","../src/strike-through.ts","../src/task-list-item.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport { InputRule, inputRules } from '@milkdown/prose';\nimport { createPlugin } from '@milkdown/utils';\n\nconst urlRegex =\n /(https?:\\/\\/)?www\\.[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z]{2,}\\b(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)$/;\n\nconst proseUrlPlugin = () =>\n inputRules({\n rules: [\n new InputRule(urlRegex, (state, match, start, end) => {\n const { schema } = state;\n const [text] = match;\n if (!text) return null;\n\n return state.tr\n .replaceWith(start, end, schema.text(text))\n .addMark(\n start,\n text.length + start,\n schema.marks.link.create({ href: text.startsWith('www') ? `https://${text}` : text }),\n );\n }),\n ],\n });\n\nexport const urlPlugin = createPlugin(() => ({ prosePlugins: () => [proseUrlPlugin()] }));\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { SupportedKeys as TableKeys } from '@milkdown/plugin-table';\nimport { SupportedKeys as CommonmarkKeys } from '@milkdown/preset-commonmark';\n\nexport const SupportedKeys = {\n ...CommonmarkKeys,\n ...TableKeys,\n StrikeThrough: 'StrikeThrough',\n TaskList: 'TaskList',\n} as const;\nexport type SupportedKeys = typeof SupportedKeys;\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { css } from '@emotion/css';\nimport { createCmd, createCmdKey } from '@milkdown/core';\nimport { markRule, toggleMark } from '@milkdown/prose';\nimport { createMark, createShortcut } from '@milkdown/utils';\n\nimport { SupportedKeys } from './supported-keys';\n\ntype Keys = SupportedKeys['StrikeThrough'];\n\nexport const ToggleStrikeThrough = createCmdKey();\n\nexport const strikeThrough = createMark<Keys>((utils) => {\n const id = 'strike_through';\n const style = utils.getStyle(\n (themeTool) =>\n css`\n text-decoration-color: ${themeTool.palette('secondary')};\n `,\n );\n\n return {\n id,\n schema: () => ({\n parseDOM: [\n { tag: 'del' },\n { style: 'text-decoration', getAttrs: (value) => (value === 'line-through') as false },\n ],\n toDOM: (mark) => ['del', { class: utils.getClassName(mark.attrs, 'strike-through', style) }],\n parseMarkdown: {\n match: (node) => node.type === 'delete',\n runner: (state, node, markType) => {\n state.openMark(markType);\n state.next(node.children);\n state.closeMark(markType);\n },\n },\n toMarkdown: {\n match: (mark) => mark.type.name === id,\n runner: (state, mark) => {\n state.withMark(mark, 'delete');\n },\n },\n }),\n inputRules: (markType) => [\n markRule(/(?:~~)([^~]+)(?:~~)$/, markType),\n markRule(/(?:^|[^~])(~([^~]+)~)$/, markType),\n ],\n commands: (markType) => [createCmd(ToggleStrikeThrough, () => toggleMark(markType))],\n shortcuts: {\n [SupportedKeys.StrikeThrough]: createShortcut(ToggleStrikeThrough, 'Mod-Alt-x'),\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { css } from '@emotion/css';\nimport { createCmd, createCmdKey, themeToolCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport { liftListItem, sinkListItem, splitListItem, wrapIn, wrappingInputRule } from '@milkdown/prose';\nimport { createNode, createShortcut } from '@milkdown/utils';\n\nimport { SupportedKeys } from './supported-keys';\n\ntype Keys = Extract<keyof SupportedKeys, 'SinkListItem' | 'LiftListItem' | 'NextListItem' | 'TaskList'>;\n\nexport const SplitTaskListItem = createCmdKey();\nexport const SinkTaskListItem = createCmdKey();\nexport const LiftTaskListItem = createCmdKey();\nexport const TurnIntoTaskList = createCmdKey();\n\nexport const taskListItem = createNode<Keys>((utils) => {\n const id = 'task_list_item';\n const style = utils.getStyle(\n ({ palette, size }) =>\n css`\n list-style-type: none;\n position: relative;\n\n & > div {\n overflow: hidden;\n padding: 0 2px;\n }\n\n label {\n position: absolute;\n top: 0;\n left: -2rem;\n display: inline-block;\n width: 1.5rem;\n height: 1.5rem;\n margin: 0.5rem 0;\n input {\n visibility: hidden;\n }\n }\n label:before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-radius: ${size.radius};\n }\n label:hover:before {\n background: ${palette('background')};\n }\n &[data-checked='true'] {\n label {\n color: ${palette('primary')};\n }\n }\n &[data-checked='false'] {\n label {\n color: ${palette('solid', 0.87)};\n }\n }\n .paragraph {\n margin: 0.5rem 0;\n }\n `,\n );\n\n return {\n id,\n schema: () => ({\n group: 'listItem',\n content: 'paragraph block*',\n defining: true,\n attrs: {\n checked: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'li[data-type=\"task-list-item\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return { checked: dom.dataset.checked === 'true' };\n },\n },\n ],\n toDOM: (node) => [\n 'li',\n {\n 'data-type': 'task-item',\n 'data-checked': node.attrs.checked ? 'true' : 'false',\n class: utils.getClassName(node.attrs, 'task-list-item', style),\n },\n 0,\n ],\n parseMarkdown: {\n match: ({ type, checked }) => {\n return type === 'listItem' && checked !== null;\n },\n runner: (state, node, type) => {\n state.openNode(type, { checked: node.checked as boolean });\n state.next(node.children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.openNode('listItem', undefined, { checked: node.attrs.checked });\n state.next(node.content);\n state.closeNode();\n },\n },\n }),\n inputRules: (nodeType) => [\n wrappingInputRule(/^\\s*(\\[([ |x])\\])\\s$/, nodeType, (match) => ({\n checked: match[match.length - 1] === 'x',\n })),\n ],\n commands: (nodeType) => [\n createCmd(SplitTaskListItem, () => splitListItem(nodeType)),\n createCmd(SinkTaskListItem, () => sinkListItem(nodeType)),\n createCmd(LiftTaskListItem, () => liftListItem(nodeType)),\n createCmd(TurnIntoTaskList, () => wrapIn(nodeType)),\n ],\n shortcuts: {\n [SupportedKeys.NextListItem]: createShortcut(SplitTaskListItem, 'Enter'),\n [SupportedKeys.SinkListItem]: createShortcut(SinkTaskListItem, 'Mod-]'),\n [SupportedKeys.LiftListItem]: createShortcut(LiftTaskListItem, 'Mod-['),\n [SupportedKeys.TaskList]: createShortcut(TurnIntoTaskList, 'Mod-Alt-9'),\n },\n view: (ctx) => (node, view, getPos) => {\n const createIcon = ctx.get(themeToolCtx).slots.icon;\n\n const listItem = document.createElement('li');\n const checkboxWrapper = document.createElement('label');\n const checkboxStyler = document.createElement('span');\n const checkbox = document.createElement('input');\n const content = document.createElement('div');\n\n let icon = createIcon('unchecked');\n checkboxWrapper.appendChild(icon);\n const setIcon = (name: Icon) => {\n const nextIcon = createIcon(name);\n checkboxWrapper.replaceChild(nextIcon, icon);\n icon = nextIcon;\n };\n\n checkboxWrapper.contentEditable = 'false';\n checkbox.type = 'checkbox';\n const onChange = (event: Event) => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) return;\n\n if (!view.editable) {\n checkbox.checked = !checkbox.checked;\n\n return;\n }\n\n const { tr } = view.state;\n\n view.dispatch(\n tr.setNodeMarkup(getPos(), undefined, {\n checked: target.checked,\n }),\n );\n };\n checkbox.addEventListener('change', onChange);\n\n listItem.dataset.checked = node.attrs.checked;\n if (node.attrs.checked) {\n checkbox.setAttribute('checked', 'checked');\n }\n\n checkboxWrapper.append(checkbox, checkboxStyler);\n listItem.append(checkboxWrapper, content);\n\n const attributes = {\n 'data-type': 'task-item',\n 'data-checked': node.attrs.checked ? 'true' : 'false',\n class: utils.getClassName(node.attrs, 'task-list-item', style),\n };\n Object.entries(attributes).forEach(([key, value]) => {\n listItem.setAttribute(key, value);\n });\n setIcon(node.attrs.checked ? 'checked' : 'unchecked');\n\n return {\n dom: listItem,\n contentDOM: content,\n update: (updatedNode) => {\n if (updatedNode.type.name !== id) return false;\n\n listItem.dataset.checked = updatedNode.attrs.checked;\n if (updatedNode.attrs.checked) {\n checkbox.setAttribute('checked', 'checked');\n } else {\n checkbox.removeAttribute('checked');\n }\n setIcon(updatedNode.attrs.checked ? 'checked' : 'unchecked');\n\n return true;\n },\n destroy: () => {\n checkbox.removeEventListener('change', onChange);\n },\n };\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { tablePlugin } from '@milkdown/plugin-table';\nimport { commands as commonmarkCommands, commonmark } from '@milkdown/preset-commonmark';\nimport { AtomList } from '@milkdown/utils';\n\nimport { urlPlugin } from './auto-link';\nimport { strikeThrough, ToggleStrikeThrough } from './strike-through';\nimport {\n LiftTaskListItem,\n SinkTaskListItem,\n SplitTaskListItem,\n taskListItem,\n TurnIntoTaskList,\n} from './task-list-item';\n\nexport * from './strike-through';\nexport { SupportedKeys } from './supported-keys';\nexport * from './task-list-item';\nexport {\n BreakTable,\n // command\n createTable,\n InsertTable,\n NextCell,\n PrevCell,\n // gather\n table,\n tablePlugin,\n} from '@milkdown/plugin-table';\nexport {\n blockquote,\n bulletList,\n codeFence,\n codeInline,\n commonmark,\n // gather\n commonmarkNodes,\n commonmarkPlugins,\n // node\n doc,\n em,\n hardbreak,\n heading,\n hr,\n image,\n // command\n InsertHardbreak,\n InsertHr,\n InsertImage,\n LiftListItem,\n link,\n listItem,\n ModifyImage,\n ModifyLink,\n orderedList,\n paragraph,\n SinkListItem,\n SplitListItem,\n strong,\n text,\n ToggleBold,\n ToggleInlineCode,\n ToggleItalic,\n ToggleLink,\n TurnIntoCodeFence,\n TurnIntoHeading,\n TurnIntoText,\n WrapInBlockquote,\n WrapInBulletList,\n WrapInOrderedList,\n} from '@milkdown/preset-commonmark';\n\nexport const gfm = AtomList.create([...commonmark, tablePlugin(), urlPlugin(), strikeThrough(), taskListItem()]);\n\nexport const commands = {\n ...commonmarkCommands,\n ToggleStrikeThrough,\n TurnIntoTaskList,\n SinkTaskListItem,\n LiftTaskListItem,\n SplitTaskListItem,\n} as const;\nexport type Commands = typeof commands;\n"],"names":["CommonmarkKeys","TableKeys","commonmarkCommands"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-list-item.d.ts","sourceRoot":"","sources":["../src/task-list-item.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,aAAK,IAAI,GAAG,OAAO,CAAC,MAAM,aAAa,EAAE,cAAc,GAAG,cAAc,GAAG,cAAc,GAAG,UAAU,CAAC,CAAC;AAExG,eAAO,MAAM,iBAAiB,4CAAiB,CAAC;AAChD,eAAO,MAAM,gBAAgB,4CAAiB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,4CAAiB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,4CAAiB,CAAC;AAE/C,eAAO,MAAM,YAAY;;;;EAsMvB,CAAC"}
1
+ {"version":3,"file":"task-list-item.d.ts","sourceRoot":"","sources":["../src/task-list-item.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,aAAK,IAAI,GAAG,OAAO,CAAC,MAAM,aAAa,EAAE,cAAc,GAAG,cAAc,GAAG,cAAc,GAAG,UAAU,CAAC,CAAC;AAExG,eAAO,MAAM,iBAAiB,4CAAiB,CAAC;AAChD,eAAO,MAAM,gBAAgB,4CAAiB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,4CAAiB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,4CAAiB,CAAC;AAE/C,eAAO,MAAM,YAAY;;;;EAsMvB,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@milkdown/preset-gfm",
3
- "version": "5.1.2",
4
- "main": "lib/index.js",
5
- "module": "lib/index.js",
6
- "types": "lib/index.d.ts",
3
+ "version": "5.3.1",
4
+ "type": "module",
5
+ "main": "./lib/index.es.js",
6
+ "types": "./lib/index.d.ts",
7
7
  "sideEffects": false,
8
8
  "license": "MIT",
9
9
  "files": [
@@ -21,21 +21,23 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@emotion/css": "^11.1.3",
24
- "@milkdown/plugin-table": "5.1.2",
25
- "@milkdown/preset-commonmark": "5.1.2",
26
- "@milkdown/utils": "5.1.2",
27
- "@types/prosemirror-schema-list": "^1.0.3",
28
- "prosemirror-schema-list": "^1.1.4",
24
+ "@milkdown/plugin-table": "5.3.1",
25
+ "@milkdown/preset-commonmark": "5.3.1",
26
+ "@milkdown/utils": "5.3.1",
29
27
  "tslib": "^2.3.1"
30
28
  },
31
29
  "devDependencies": {
32
- "concurrently": "^6.0.2"
30
+ "@milkdown/prose": "5.3.1",
31
+ "@milkdown/core": "5.3.1",
32
+ "@milkdown/utils": "5.3.1",
33
+ "@milkdown/design-system": "5.3.1"
33
34
  },
34
35
  "scripts": {
35
36
  "start": "vite",
36
- "watch": "tsc -w",
37
- "test": "jest",
37
+ "watch": "vite build --watch",
38
+ "test": "vitest",
38
39
  "tsc": "tsc --noEmit",
39
- "build": "tsc"
40
- }
40
+ "build": "vite build && tsc --emitDeclarationOnly"
41
+ },
42
+ "readme": "# @milkdown/preset-gfm\n\nGithub flavored markdown preset for [milkdown](https://saul-mirone.github.io/milkdown/).\nAdd support for gfm.\n\n# Example Usage\n\n```typescript\nimport { Editor } from '@milkdown/core';\nimport { nord } from '@milkdown/theme-nord';\n\nimport { gfm } from '@milkdown/preset-gfm';\n\nEditor.make().use(nord).use(gfm).create();\n```\n\n## Custom Keymap\n\n```typescript\nimport { commonmark, blockquote, SupportedKeys } from '@milkdown/preset-gfm';\n\nconst nodes = commonmark.configure(blockquote, {\n keymap: {\n [SupportedKeys.Blockquote]: 'Mod-Shift-b',\n },\n});\n\nEditor.make().use(nodes);\n```\n\nKeymap supported:\n\n- HardBreak\n- Blockquote\n- TaskList\n- BulletList\n- OrderedList\n- CodeFence\n- H1\n- H2\n- H3\n- H4\n- H5\n- H6\n- Text\n- CodeInline\n- Em\n- Bold\n- StrikeThrough\n- NextListItem\n- SinkListItem\n- LiftListItem\n- NextCell\n- PrevCell\n- ExitTable\n\n## Custom Style\n\n```typescript\nimport { commonmark, paragraph, heading } from '@milkdown/preset-gfm';\n\nconst nodes = commonmark\n .configure(paragraph, {\n className: () => 'my-custom-paragraph',\n })\n .configure(heading, {\n className: (attrs) => `my-custom-heading my-h${attrs.level}`,\n });\n\nEditor.make().use(nodes);\n```\n\n# License\n\nMilkdown is open sourced software licensed under [MIT license](https://github.com/Saul-Mirone/milkdown/blob/main/LICENSE).\n"
41
43
  }
@@ -2,9 +2,8 @@
2
2
  import { css } from '@emotion/css';
3
3
  import { createCmd, createCmdKey, themeToolCtx } from '@milkdown/core';
4
4
  import type { Icon } from '@milkdown/design-system';
5
- import { wrapIn, wrappingInputRule } from '@milkdown/prose';
5
+ import { liftListItem, sinkListItem, splitListItem, wrapIn, wrappingInputRule } from '@milkdown/prose';
6
6
  import { createNode, createShortcut } from '@milkdown/utils';
7
- import { liftListItem, sinkListItem, splitListItem } from 'prosemirror-schema-list';
8
7
 
9
8
  import { SupportedKeys } from './supported-keys';
10
9
 
package/lib/auto-link.js DELETED
@@ -1,19 +0,0 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
- import { InputRule, inputRules } from '@milkdown/prose';
3
- import { createPlugin } from '@milkdown/utils';
4
- const urlRegex = /(https?:\/\/)?www\.[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z]{2,}\b(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)$/;
5
- const proseUrlPlugin = () => inputRules({
6
- rules: [
7
- new InputRule(urlRegex, (state, match, start, end) => {
8
- const { schema } = state;
9
- const [text] = match;
10
- if (!text)
11
- return null;
12
- return state.tr
13
- .replaceWith(start, end, schema.text(text))
14
- .addMark(start, text.length + start, schema.marks.link.create({ href: text.startsWith('www') ? `https://${text}` : text }));
15
- }),
16
- ],
17
- });
18
- export const urlPlugin = createPlugin(() => ({ prosePlugins: () => [proseUrlPlugin()] }));
19
- //# sourceMappingURL=auto-link.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-link.js","sourceRoot":"","sources":["../src/auto-link.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,QAAQ,GACV,8HAA8H,CAAC;AAEnI,MAAM,cAAc,GAAG,GAAG,EAAE,CACxB,UAAU,CAAC;IACP,KAAK,EAAE;QACH,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACjD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,OAAO,KAAK,CAAC,EAAE;iBACV,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC1C,OAAO,CACJ,KAAK,EACL,IAAI,CAAC,MAAM,GAAG,KAAK,EACnB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACxF,CAAC;QACV,CAAC,CAAC;KACL;CACJ,CAAC,CAAC;AAEP,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"}
package/lib/index.js DELETED
@@ -1,29 +0,0 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
- import { tablePlugin } from '@milkdown/plugin-table';
3
- import { commands as commonmarkCommands, commonmark } from '@milkdown/preset-commonmark';
4
- import { AtomList } from '@milkdown/utils';
5
- import { urlPlugin } from './auto-link';
6
- import { strikeThrough, ToggleStrikeThrough } from './strike-through';
7
- import { LiftTaskListItem, SinkTaskListItem, SplitTaskListItem, taskListItem, TurnIntoTaskList, } from './task-list-item';
8
- export * from './strike-through';
9
- export { SupportedKeys } from './supported-keys';
10
- export * from './task-list-item';
11
- export { BreakTable,
12
- // command
13
- createTable, InsertTable, NextCell, PrevCell,
14
- // gather
15
- table, tablePlugin, } from '@milkdown/plugin-table';
16
- export { blockquote, bulletList, codeFence, codeInline, commonmark,
17
- // gather
18
- commonmarkNodes, commonmarkPlugins,
19
- // node
20
- doc, em, hardbreak, heading, hr, image,
21
- // command
22
- InsertHardbreak, InsertHr, InsertImage, LiftListItem, link, listItem, ModifyImage, ModifyLink, orderedList, paragraph, SinkListItem, SplitListItem, strong, text, ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, TurnIntoCodeFence, TurnIntoHeading, TurnIntoText, WrapInBlockquote, WrapInBulletList, WrapInOrderedList, } from '@milkdown/preset-commonmark';
23
- export const gfm = AtomList.create([...commonmark, tablePlugin(), urlPlugin(), strikeThrough(), taskListItem()]);
24
- export const commands = Object.assign(Object.assign({}, commonmarkCommands), { ToggleStrikeThrough,
25
- TurnIntoTaskList,
26
- SinkTaskListItem,
27
- LiftTaskListItem,
28
- SplitTaskListItem });
29
- //# sourceMappingURL=index.js.map
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACH,UAAU;AACV,UAAU;AACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ;AACR,SAAS;AACT,KAAK,EACL,WAAW,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU;AACV,SAAS;AACT,eAAe,EACf,iBAAiB;AACjB,OAAO;AACP,GAAG,EACH,EAAE,EACF,SAAS,EACT,OAAO,EACP,EAAE,EACF,KAAK;AACL,UAAU;AACV,eAAe,EACf,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,MAAM,EACN,IAAI,EACJ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,6BAA6B,CAAC;AAErC,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;AAEjH,MAAM,CAAC,MAAM,QAAQ,GAAG,gCACjB,kBAAkB,KACrB,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB,GACX,CAAC"}
@@ -1,46 +0,0 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
- import { css } from '@emotion/css';
3
- import { createCmd, createCmdKey } from '@milkdown/core';
4
- import { markRule, toggleMark } from '@milkdown/prose';
5
- import { createMark, createShortcut } from '@milkdown/utils';
6
- import { SupportedKeys } from './supported-keys';
7
- export const ToggleStrikeThrough = createCmdKey();
8
- export const strikeThrough = createMark((utils) => {
9
- const id = 'strike_through';
10
- const style = utils.getStyle((themeTool) => css `
11
- text-decoration-color: ${themeTool.palette('secondary')};
12
- `);
13
- return {
14
- id,
15
- schema: () => ({
16
- parseDOM: [
17
- { tag: 'del' },
18
- { style: 'text-decoration', getAttrs: (value) => (value === 'line-through') },
19
- ],
20
- toDOM: (mark) => ['del', { class: utils.getClassName(mark.attrs, 'strike-through', style) }],
21
- parseMarkdown: {
22
- match: (node) => node.type === 'delete',
23
- runner: (state, node, markType) => {
24
- state.openMark(markType);
25
- state.next(node.children);
26
- state.closeMark(markType);
27
- },
28
- },
29
- toMarkdown: {
30
- match: (mark) => mark.type.name === id,
31
- runner: (state, mark) => {
32
- state.withMark(mark, 'delete');
33
- },
34
- },
35
- }),
36
- inputRules: (markType) => [
37
- markRule(/(?:~~)([^~]+)(?:~~)$/, markType),
38
- markRule(/(?:^|[^~])(~([^~]+)~)$/, markType),
39
- ],
40
- commands: (markType) => [createCmd(ToggleStrikeThrough, () => toggleMark(markType))],
41
- shortcuts: {
42
- [SupportedKeys.StrikeThrough]: createShortcut(ToggleStrikeThrough, 'Mod-Alt-x'),
43
- },
44
- };
45
- });
46
- //# sourceMappingURL=strike-through.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strike-through.js","sourceRoot":"","sources":["../src/strike-through.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,EAAE,CAAC;AAElD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAO,CAAC,KAAK,EAAE,EAAE;IACpD,MAAM,EAAE,GAAG,gBAAgB,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CACxB,CAAC,SAAS,EAAE,EAAE,CACV,GAAG,CAAA;yCAC0B,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC;aAC1D,CACR,CAAC;IAEF,OAAO;QACH,EAAE;QACF,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACX,QAAQ,EAAE;gBACN,EAAE,GAAG,EAAE,KAAK,EAAE;gBACd,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,cAAc,CAAU,EAAE;aACzF;YACD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5F,aAAa,EAAE;gBACX,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;gBACvC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBAC9B,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC1B,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC9B,CAAC;aACJ;YACD,UAAU,EAAE;gBACR,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE;gBACtC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACpB,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACnC,CAAC;aACJ;SACJ,CAAC;QACF,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtB,QAAQ,CAAC,sBAAsB,EAAE,QAAQ,CAAC;YAC1C,QAAQ,CAAC,wBAAwB,EAAE,QAAQ,CAAC;SAC/C;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpF,SAAS,EAAE;YACP,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC,mBAAmB,EAAE,WAAW,CAAC;SAClF;KACJ,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -1,5 +0,0 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
- import { SupportedKeys as TableKeys } from '@milkdown/plugin-table';
3
- import { SupportedKeys as CommonmarkKeys } from '@milkdown/preset-commonmark';
4
- export const SupportedKeys = Object.assign(Object.assign(Object.assign({}, CommonmarkKeys), TableKeys), { StrikeThrough: 'StrikeThrough', TaskList: 'TaskList' });
5
- //# sourceMappingURL=supported-keys.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supported-keys.js","sourceRoot":"","sources":["../src/supported-keys.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,aAAa,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAG,8CACtB,cAAc,GACd,SAAS,KACZ,aAAa,EAAE,eAAe,EAC9B,QAAQ,EAAE,UAAU,GACd,CAAC"}
@@ -1,195 +0,0 @@
1
- /* Copyright 2021, Milkdown by Mirone. */
2
- import { css } from '@emotion/css';
3
- import { createCmd, createCmdKey, themeToolCtx } from '@milkdown/core';
4
- import { wrapIn, wrappingInputRule } from '@milkdown/prose';
5
- import { createNode, createShortcut } from '@milkdown/utils';
6
- import { liftListItem, sinkListItem, splitListItem } from 'prosemirror-schema-list';
7
- import { SupportedKeys } from './supported-keys';
8
- export const SplitTaskListItem = createCmdKey();
9
- export const SinkTaskListItem = createCmdKey();
10
- export const LiftTaskListItem = createCmdKey();
11
- export const TurnIntoTaskList = createCmdKey();
12
- export const taskListItem = createNode((utils) => {
13
- const id = 'task_list_item';
14
- const style = utils.getStyle(({ palette, size }) => css `
15
- list-style-type: none;
16
- position: relative;
17
-
18
- & > div {
19
- overflow: hidden;
20
- padding: 0 2px;
21
- }
22
-
23
- label {
24
- position: absolute;
25
- top: 0;
26
- left: -2rem;
27
- display: inline-block;
28
- width: 1.5rem;
29
- height: 1.5rem;
30
- margin: 0.5rem 0;
31
- input {
32
- visibility: hidden;
33
- }
34
- }
35
- label:before {
36
- position: absolute;
37
- top: 0;
38
- right: 0;
39
- bottom: 0;
40
- left: 0;
41
- border-radius: ${size.radius};
42
- }
43
- label:hover:before {
44
- background: ${palette('background')};
45
- }
46
- &[data-checked='true'] {
47
- label {
48
- color: ${palette('primary')};
49
- }
50
- }
51
- &[data-checked='false'] {
52
- label {
53
- color: ${palette('solid', 0.87)};
54
- }
55
- }
56
- .paragraph {
57
- margin: 0.5rem 0;
58
- }
59
- `);
60
- return {
61
- id,
62
- schema: () => ({
63
- group: 'listItem',
64
- content: 'paragraph block*',
65
- defining: true,
66
- attrs: {
67
- checked: {
68
- default: false,
69
- },
70
- },
71
- parseDOM: [
72
- {
73
- tag: 'li[data-type="task-list-item"]',
74
- getAttrs: (dom) => {
75
- if (!(dom instanceof HTMLElement)) {
76
- throw new Error();
77
- }
78
- return { checked: dom.dataset.checked === 'true' };
79
- },
80
- },
81
- ],
82
- toDOM: (node) => [
83
- 'li',
84
- {
85
- 'data-type': 'task-item',
86
- 'data-checked': node.attrs.checked ? 'true' : 'false',
87
- class: utils.getClassName(node.attrs, 'task-list-item', style),
88
- },
89
- 0,
90
- ],
91
- parseMarkdown: {
92
- match: ({ type, checked }) => {
93
- return type === 'listItem' && checked !== null;
94
- },
95
- runner: (state, node, type) => {
96
- state.openNode(type, { checked: node.checked });
97
- state.next(node.children);
98
- state.closeNode();
99
- },
100
- },
101
- toMarkdown: {
102
- match: (node) => node.type.name === id,
103
- runner: (state, node) => {
104
- state.openNode('listItem', undefined, { checked: node.attrs.checked });
105
- state.next(node.content);
106
- state.closeNode();
107
- },
108
- },
109
- }),
110
- inputRules: (nodeType) => [
111
- wrappingInputRule(/^\s*(\[([ |x])\])\s$/, nodeType, (match) => ({
112
- checked: match[match.length - 1] === 'x',
113
- })),
114
- ],
115
- commands: (nodeType) => [
116
- createCmd(SplitTaskListItem, () => splitListItem(nodeType)),
117
- createCmd(SinkTaskListItem, () => sinkListItem(nodeType)),
118
- createCmd(LiftTaskListItem, () => liftListItem(nodeType)),
119
- createCmd(TurnIntoTaskList, () => wrapIn(nodeType)),
120
- ],
121
- shortcuts: {
122
- [SupportedKeys.NextListItem]: createShortcut(SplitTaskListItem, 'Enter'),
123
- [SupportedKeys.SinkListItem]: createShortcut(SinkTaskListItem, 'Mod-]'),
124
- [SupportedKeys.LiftListItem]: createShortcut(LiftTaskListItem, 'Mod-['),
125
- [SupportedKeys.TaskList]: createShortcut(TurnIntoTaskList, 'Mod-Alt-9'),
126
- },
127
- view: (ctx) => (node, view, getPos) => {
128
- const createIcon = ctx.get(themeToolCtx).slots.icon;
129
- const listItem = document.createElement('li');
130
- const checkboxWrapper = document.createElement('label');
131
- const checkboxStyler = document.createElement('span');
132
- const checkbox = document.createElement('input');
133
- const content = document.createElement('div');
134
- let icon = createIcon('unchecked');
135
- checkboxWrapper.appendChild(icon);
136
- const setIcon = (name) => {
137
- const nextIcon = createIcon(name);
138
- checkboxWrapper.replaceChild(nextIcon, icon);
139
- icon = nextIcon;
140
- };
141
- checkboxWrapper.contentEditable = 'false';
142
- checkbox.type = 'checkbox';
143
- const onChange = (event) => {
144
- const target = event.target;
145
- if (!(target instanceof HTMLInputElement))
146
- return;
147
- if (!view.editable) {
148
- checkbox.checked = !checkbox.checked;
149
- return;
150
- }
151
- const { tr } = view.state;
152
- view.dispatch(tr.setNodeMarkup(getPos(), undefined, {
153
- checked: target.checked,
154
- }));
155
- };
156
- checkbox.addEventListener('change', onChange);
157
- listItem.dataset.checked = node.attrs.checked;
158
- if (node.attrs.checked) {
159
- checkbox.setAttribute('checked', 'checked');
160
- }
161
- checkboxWrapper.append(checkbox, checkboxStyler);
162
- listItem.append(checkboxWrapper, content);
163
- const attributes = {
164
- 'data-type': 'task-item',
165
- 'data-checked': node.attrs.checked ? 'true' : 'false',
166
- class: utils.getClassName(node.attrs, 'task-list-item', style),
167
- };
168
- Object.entries(attributes).forEach(([key, value]) => {
169
- listItem.setAttribute(key, value);
170
- });
171
- setIcon(node.attrs.checked ? 'checked' : 'unchecked');
172
- return {
173
- dom: listItem,
174
- contentDOM: content,
175
- update: (updatedNode) => {
176
- if (updatedNode.type.name !== id)
177
- return false;
178
- listItem.dataset.checked = updatedNode.attrs.checked;
179
- if (updatedNode.attrs.checked) {
180
- checkbox.setAttribute('checked', 'checked');
181
- }
182
- else {
183
- checkbox.removeAttribute('checked');
184
- }
185
- setIcon(updatedNode.attrs.checked ? 'checked' : 'unchecked');
186
- return true;
187
- },
188
- destroy: () => {
189
- checkbox.removeEventListener('change', onChange);
190
- },
191
- };
192
- },
193
- };
194
- });
195
- //# sourceMappingURL=task-list-item.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-list-item.js","sourceRoot":"","sources":["../src/task-list-item.ts"],"names":[],"mappings":"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"}