@milkdown/preset-gfm 6.0.2 → 6.1.0

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.
Files changed (44) hide show
  1. package/README.md +3 -67
  2. package/lib/footnote/definition.d.ts +1 -1
  3. package/lib/footnote/definition.d.ts.map +1 -1
  4. package/lib/footnote/reference.d.ts +1 -1
  5. package/lib/footnote/reference.d.ts.map +1 -1
  6. package/lib/index.es.js +34 -2
  7. package/lib/index.es.js.map +1 -1
  8. package/lib/strike-through.d.ts +1 -1
  9. package/lib/strike-through.d.ts.map +1 -1
  10. package/lib/table/command.d.ts +2 -1
  11. package/lib/table/command.d.ts.map +1 -1
  12. package/lib/table/nodes/index.d.ts +5 -3
  13. package/lib/table/nodes/index.d.ts.map +1 -1
  14. package/lib/table/nodes/schema.d.ts +1 -1
  15. package/lib/table/nodes/schema.d.ts.map +1 -1
  16. package/lib/table/operator-plugin/actions.d.ts +2 -1
  17. package/lib/table/operator-plugin/actions.d.ts.map +1 -1
  18. package/lib/table/operator-plugin/calc-pos.d.ts +1 -1
  19. package/lib/table/operator-plugin/calc-pos.d.ts.map +1 -1
  20. package/lib/table/operator-plugin/helper.d.ts +2 -1
  21. package/lib/table/operator-plugin/helper.d.ts.map +1 -1
  22. package/lib/table/operator-plugin/index.d.ts +1 -1
  23. package/lib/table/operator-plugin/index.d.ts.map +1 -1
  24. package/lib/table/operator-plugin/widget.d.ts +1 -1
  25. package/lib/table/operator-plugin/widget.d.ts.map +1 -1
  26. package/lib/table/utils.d.ts +3 -2
  27. package/lib/table/utils.d.ts.map +1 -1
  28. package/lib/task-list-item.d.ts +1 -1
  29. package/lib/task-list-item.d.ts.map +1 -1
  30. package/package.json +11 -12
  31. package/src/auto-link.ts +1 -1
  32. package/src/footnote/definition.ts +4 -8
  33. package/src/footnote/reference.ts +4 -1
  34. package/src/strike-through.ts +2 -1
  35. package/src/table/command.ts +4 -1
  36. package/src/table/nodes/index.ts +32 -10
  37. package/src/table/nodes/schema.ts +1 -1
  38. package/src/table/operator-plugin/actions.ts +3 -3
  39. package/src/table/operator-plugin/calc-pos.ts +3 -1
  40. package/src/table/operator-plugin/helper.ts +2 -1
  41. package/src/table/operator-plugin/index.ts +3 -1
  42. package/src/table/operator-plugin/widget.ts +1 -1
  43. package/src/table/utils.ts +4 -12
  44. package/src/task-list-item.ts +3 -1
package/README.md CHANGED
@@ -1,74 +1,10 @@
1
1
  # @milkdown/preset-gfm
2
2
 
3
- Github flavored markdown preset for [milkdown](https://saul-mirone.github.io/milkdown/).
4
- Add support for gfm.
3
+ The gfm preset of [milkdown](https://milkdown.dev/).
5
4
 
6
- # Example Usage
5
+ # Official Documentation
7
6
 
8
- ```typescript
9
- import { Editor } from '@milkdown/core';
10
- import { nord } from '@milkdown/theme-nord';
11
-
12
- import { gfm } from '@milkdown/preset-gfm';
13
-
14
- Editor.make().use(nord).use(gfm).create();
15
- ```
16
-
17
- ## Custom Keymap
18
-
19
- ```typescript
20
- import { gfm, blockquote, SupportedKeys } from '@milkdown/preset-gfm';
21
-
22
- const nodes = gfm.configure(blockquote, {
23
- keymap: {
24
- [SupportedKeys.Blockquote]: 'Mod-Shift-b',
25
- },
26
- });
27
-
28
- Editor.make().use(nodes);
29
- ```
30
-
31
- Keymap supported:
32
-
33
- - HardBreak
34
- - Blockquote
35
- - TaskList
36
- - BulletList
37
- - OrderedList
38
- - CodeFence
39
- - H1
40
- - H2
41
- - H3
42
- - H4
43
- - H5
44
- - H6
45
- - Text
46
- - CodeInline
47
- - Em
48
- - Bold
49
- - StrikeThrough
50
- - NextListItem
51
- - SinkListItem
52
- - LiftListItem
53
- - NextCell
54
- - PrevCell
55
- - ExitTable
56
-
57
- ## Custom Style
58
-
59
- ```typescript
60
- import { gfm, paragraph, heading } from '@milkdown/preset-gfm';
61
-
62
- const nodes = gfm
63
- .configure(paragraph, {
64
- className: () => 'my-custom-paragraph',
65
- })
66
- .configure(heading, {
67
- className: (attrs) => `my-custom-heading my-h${attrs.level}`,
68
- });
69
-
70
- Editor.make().use(nodes);
71
- ```
7
+ Documentation can be found on the [Milkdown website](https://milkdown.dev/preset-gfm).
72
8
 
73
9
  # License
74
10
 
@@ -1,5 +1,5 @@
1
1
  export declare const ModifyFootnoteDef: import("@milkdown/core").CmdKey<string>;
2
- export declare const footnoteDefinition: import("@milkdown/utils/lib/types").WithExtend<string, import("@milkdown/utils").UnknownRecord, import("prosemirror-model").NodeType<any>, {
2
+ export declare const footnoteDefinition: import("@milkdown/utils/lib/types").WithExtend<string, import("@milkdown/utils").UnknownRecord, import("@milkdown/prose/model").NodeType<any>, {
3
3
  id: string;
4
4
  schema: (ctx: import("@milkdown/core").Ctx) => import("@milkdown/core").NodeSchema;
5
5
  view?: ((ctx: import("@milkdown/core").Ctx) => import("@milkdown/prose").NodeViewFactory) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/footnote/definition.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,yCAA4C,CAAC;AAE3E,eAAO,MAAM,kBAAkB;;;;EAuK7B,CAAC"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/footnote/definition.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,iBAAiB,yCAA4C,CAAC;AAE3E,eAAO,MAAM,kBAAkB;;;;EAuK7B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export declare const ModifyFootnoteRef: import("@milkdown/core").CmdKey<string>;
2
- export declare const footnoteReference: import("@milkdown/utils/lib/types").WithExtend<string, import("@milkdown/utils").UnknownRecord, import("prosemirror-model").NodeType<any>, {
2
+ export declare const footnoteReference: import("@milkdown/utils/lib/types").WithExtend<string, import("@milkdown/utils").UnknownRecord, import("@milkdown/prose/model").NodeType<any>, {
3
3
  id: string;
4
4
  schema: (ctx: import("@milkdown/core").Ctx) => import("@milkdown/core").NodeSchema;
5
5
  view?: ((ctx: import("@milkdown/core").Ctx) => import("@milkdown/prose").NodeViewFactory) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/footnote/reference.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,iBAAiB,yCAA4C,CAAC;AAG3E,eAAO,MAAM,iBAAiB;;;;EA+J5B,CAAC"}
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/footnote/reference.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,iBAAiB,yCAA4C,CAAC;AAG3E,eAAO,MAAM,iBAAiB;;;;EA+J5B,CAAC"}
package/lib/index.es.js CHANGED
@@ -21,8 +21,14 @@ import { SupportedKeys as SupportedKeys$2, commonmark, commands as commands$1 }
21
21
  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";
22
22
  import { $prose, createNode, createPlugin, createShortcut, createMark, AtomList, $remark } from "@milkdown/utils";
23
23
  import remarkGFM from "remark-gfm";
24
- import { inputRules, InputRule, PluginKey, NodeSelection, findSelectedNodeOfType, wrappingInputRule, Plugin, isInTable, Selection, findParentNode, TableMap, CellSelection, cloneTr, tableNodeTypes, addColumnBefore, addColumnAfter, selectedRect, setCellAttr, deleteTable, deleteColumn, deleteRow, calculateNodePosition, Decoration, DecorationSet, tableNodes, TextSelection, goToNextCell, columnResizing, tableEditing, markRule, toggleMark, splitListItem, sinkListItem, liftListItem, wrapIn } from "@milkdown/prose";
24
+ import { inputRules, InputRule, wrappingInputRule } from "@milkdown/prose/inputrules";
25
25
  import { createCmdKey, editorViewCtx, createCmd, commandsCtx, themeManagerCtx, ThemeIcon, ThemeBorder, ThemeShadow, getPalette, ThemeSize, schemaCtx } from "@milkdown/core";
26
+ import { findSelectedNodeOfType, findParentNode, cloneTr, calculateNodePosition, markRule } from "@milkdown/prose";
27
+ import { PluginKey, NodeSelection, Plugin, Selection, TextSelection } from "@milkdown/prose/state";
28
+ import { toggleMark, wrapIn } from "@milkdown/prose/commands";
29
+ import { isInTable, TableMap, CellSelection, tableNodeTypes, addColumnBefore, addColumnAfter, selectedRect, setCellAttr, deleteTable, deleteColumn, deleteRow, tableNodes, goToNextCell, columnResizing, tableEditing } from "@milkdown/prose/tables";
30
+ import { Decoration, DecorationSet } from "@milkdown/prose/view";
31
+ import { splitListItem, sinkListItem, liftListItem } from "@milkdown/prose/schema-list";
26
32
  const urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/;
27
33
  const proseUrlPlugin = () => inputRules({
28
34
  rules: [
@@ -855,6 +861,7 @@ const PrevCell = createCmdKey("PrevCell");
855
861
  const NextCell = createCmdKey("NextCell");
856
862
  const BreakTable = createCmdKey("BreakTable");
857
863
  const InsertTable = createCmdKey("InsertTable");
864
+ const TableContentFilterPluginKey = new PluginKey("MILKDOWN_TABLE_CONTENT_FILTER");
858
865
  const table = createPlugin((utils) => {
859
866
  return {
860
867
  schema: () => ({
@@ -983,7 +990,32 @@ const table = createPlugin((utils) => {
983
990
  [SupportedKeys$1.ExitTable]: createShortcut(BreakTable, "Mod-Enter")
984
991
  },
985
992
  prosePlugins: (_, ctx) => {
986
- return [operatorPlugin(ctx, utils), columnResizing({}), tableEditing()];
993
+ return [
994
+ operatorPlugin(ctx, utils),
995
+ columnResizing({}),
996
+ tableEditing(),
997
+ new Plugin({
998
+ key: TableContentFilterPluginKey,
999
+ filterTransaction: (tr, state) => {
1000
+ const isInsertHr = tr.getMeta("hardbreak");
1001
+ const [step] = tr.steps;
1002
+ if (isInsertHr && step) {
1003
+ const { from } = step;
1004
+ const $from = state.doc.resolve(from);
1005
+ let curDepth = $from.depth;
1006
+ let canApply = true;
1007
+ while (curDepth > 0) {
1008
+ if ($from.node(curDepth).type.name === "table") {
1009
+ canApply = false;
1010
+ }
1011
+ curDepth--;
1012
+ }
1013
+ return canApply;
1014
+ }
1015
+ return true;
1016
+ }
1017
+ })
1018
+ ];
987
1019
  }
988
1020
  };
989
1021
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/auto-link.ts","../src/footnote/utils.ts","../src/footnote/definition.ts","../src/footnote/reference.ts","../src/table/command.ts","../src/table/utils.ts","../src/table/operator-plugin/helper.ts","../src/table/operator-plugin/actions.ts","../src/table/operator-plugin/calc-pos.ts","../src/table/operator-plugin/constant.ts","../src/table/operator-plugin/style.ts","../src/table/operator-plugin/widget.ts","../src/table/operator-plugin/index.ts","../src/table/nodes/schema.ts","../src/table/nodes/index.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 { $prose } from '@milkdown/utils';\n\nconst urlRegex = /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-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(start, text.length + start, schema.marks.link.create({ href: text }));\n }),\n ],\n });\n\nexport const urlPlugin = $prose(() => proseUrlPlugin());\n","/* Copyright 2021, Milkdown by Mirone. */\nexport const getFootnoteRefId = (label: string) => `footnote-ref-${label}`;\n\nexport const getFootnoteDefId = (label: string) => `footnote-def-${label}`;\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';\nimport {\n EditorView,\n findSelectedNodeOfType,\n NodeSelection,\n Plugin,\n PluginKey,\n wrappingInputRule,\n} from '@milkdown/prose';\nimport { createNode } from '@milkdown/utils';\n\nimport { getFootnoteDefId, getFootnoteRefId } from './utils';\n\nconst key = new PluginKey('MILKDOWN_PLUGIN_FOOTNOTE_DEF_INPUT');\nexport const ModifyFootnoteDef = createCmdKey<string>('ModifyFootnoteDef');\n\nexport const footnoteDefinition = createNode((utils) => {\n const id = 'footnote_definition';\n const markdownId = 'footnoteDefinition';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'block',\n content: 'block+',\n defining: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `div[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return {\n label: dom.dataset['label'],\n };\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs['label'];\n const className = utils.getClassName(node.attrs, 'footnote-definition');\n\n const dt = document.createElement('dt');\n dt.textContent = `[${label}]:`;\n dt.onclick = () => {\n const view = ctx.get(editorViewCtx);\n const selection = NodeSelection.create(view.state.doc, view.state.selection.from - 2);\n view.dispatch(view.state.tr.setSelection(selection));\n };\n\n const a = document.createElement('a');\n a.href = `#${getFootnoteRefId(label)}`;\n a.contentEditable = 'false';\n a.textContent = '↩';\n a.onmousedown = (e) => {\n e.preventDefault();\n };\n\n return [\n 'div',\n {\n class: className,\n 'data-label': label,\n 'data-type': id,\n id: getFootnoteDefId(label),\n },\n ['div', { class: 'footnote-definition_content' }, dt, ['dd', 0]],\n ['div', { class: 'footnote-definition_anchor' }, a],\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === markdownId,\n runner: (state, node, type) => {\n state\n .openNode(type, {\n label: node['label'] as string,\n })\n .next(node.children)\n .closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state\n .openNode(markdownId, undefined, {\n label: node.attrs['label'],\n identifier: node.attrs['label'],\n })\n .next(node.content)\n .closeNode();\n },\n },\n }),\n commands: (nodeType) => [\n createCmd(ModifyFootnoteDef, (label = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, nodeType);\n if (!node) return false;\n\n const { tr } = state;\n const _tr = tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, label });\n dispatch?.(_tr.setSelection(NodeSelection.create(_tr.doc, node.pos)));\n\n return true;\n }),\n ],\n inputRules: (nodeType) => [\n wrappingInputRule(\n /(?:\\[\\^)([^:]+)(?::)$/,\n nodeType,\n (match) => {\n const label = match[1] ?? 'footnote';\n return {\n label,\n };\n },\n () => false,\n ),\n ],\n prosePlugins: (type, ctx) => {\n return [\n new Plugin({\n key,\n view: (editorView) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n width: '12em',\n placeholder: 'Input Footnote Label',\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyFootnoteDef, value);\n },\n isBindMode: true,\n });\n if (!inputChipRenderer) return {};\n const shouldDisplay = (view: EditorView) => {\n return Boolean(\n view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type),\n );\n };\n const getCurrentLabel = (view: EditorView) => {\n const result = findSelectedNodeOfType(view.state.selection, type);\n if (!result) return;\n\n const value = result.node.attrs['label'];\n return value;\n };\n const renderByView = (view: EditorView) => {\n if (!view.editable) {\n return;\n }\n const display = shouldDisplay(view);\n if (display) {\n inputChipRenderer.show(view);\n inputChipRenderer.update(getCurrentLabel(view));\n } else {\n inputChipRenderer.hide();\n }\n };\n inputChipRenderer.init(editorView);\n renderByView(editorView);\n\n return {\n update: (view, prevState) => {\n const isEqualSelection =\n prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection);\n if (isEqualSelection) return;\n\n renderByView(view);\n },\n destroy: () => {\n inputChipRenderer.destroy();\n },\n };\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';\nimport { EditorView, findSelectedNodeOfType, InputRule, NodeSelection, Plugin, PluginKey } from '@milkdown/prose';\nimport { createNode } from '@milkdown/utils';\n\nimport { getFootnoteDefId, getFootnoteRefId } from './utils';\n\nexport const ModifyFootnoteRef = createCmdKey<string>('ModifyFootnoteRef');\nconst key = new PluginKey('MILKDOWN_PLUGIN_FOOTNOTE_REF_INPUT');\n\nexport const footnoteReference = createNode((utils) => {\n const id = 'footnote_reference';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'inline',\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return {\n label: dom.dataset['label'],\n };\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs['label'];\n const a = document.createElement('a');\n const href = `#${getFootnoteDefId(label)}`;\n a.href = href;\n a.textContent = `[${label}]`;\n a.onclick = (e) => {\n const view = ctx.get(editorViewCtx);\n if (view.editable) {\n e.preventDefault();\n }\n };\n a.ondblclick = () => {\n const view = ctx.get(editorViewCtx);\n if (view.editable) {\n window.location.href = href;\n }\n };\n return [\n 'sup',\n {\n 'data-label': label,\n 'data-type': id,\n id: getFootnoteRefId(label),\n },\n a,\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === 'footnoteReference',\n runner: (state, node, type) => {\n state.addNode(type, {\n label: node['label'] as string,\n });\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.addNode('footnoteReference', undefined, undefined, {\n label: node.attrs['label'],\n identifier: node.attrs['label'],\n });\n },\n },\n }),\n commands: (nodeType) => [\n createCmd(ModifyFootnoteRef, (label = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, nodeType);\n if (!node) return false;\n\n const { tr } = state;\n const _tr = tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, label });\n dispatch?.(_tr.setSelection(NodeSelection.create(_tr.doc, node.pos)));\n\n return true;\n }),\n ],\n inputRules: (nodeType) => [\n new InputRule(/(?:\\[\\^)([^\\]]+)(?:\\])$/, (state, match, start, end) => {\n const $start = state.doc.resolve(start);\n const index = $start.index();\n const $end = state.doc.resolve(end);\n if (!$start.parent.canReplaceWith(index, $end.index(), nodeType)) {\n return null;\n }\n const label = match[1];\n return state.tr.replaceRangeWith(\n start,\n end,\n nodeType.create({\n label,\n }),\n );\n }),\n ],\n prosePlugins: (type, ctx) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n width: '12em',\n placeholder: 'Input Footnote Label',\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyFootnoteRef, value);\n },\n isBindMode: true,\n });\n if (!inputChipRenderer) return [];\n const shouldDisplay = (view: EditorView) => {\n return Boolean(view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type));\n };\n const getCurrentLabel = (view: EditorView) => {\n const result = findSelectedNodeOfType(view.state.selection, type);\n if (!result) return;\n\n const value = result.node.attrs['label'];\n return value;\n };\n const renderByView = (view: EditorView) => {\n if (!view.editable) {\n return;\n }\n const display = shouldDisplay(view);\n if (display) {\n inputChipRenderer.show(view);\n inputChipRenderer.update(getCurrentLabel(view));\n } else {\n inputChipRenderer.hide();\n }\n };\n return [\n new Plugin({\n key,\n view: (editorView) => {\n inputChipRenderer.init(editorView);\n renderByView(editorView);\n\n return {\n update: (view, prevState) => {\n const isEqualSelection =\n prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection);\n if (isEqualSelection) return;\n\n renderByView(view);\n },\n destroy: () => {\n inputChipRenderer.destroy();\n },\n };\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Command, isInTable, Node, NodeType, Selection } from '@milkdown/prose';\n\nexport const exitTable =\n (node: NodeType): Command =>\n (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n const { $head } = state.selection;\n const pos = $head.after();\n const tr = state.tr.replaceWith(pos, pos, node.createAndFill() as Node);\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch?.(tr.scrollIntoView());\n return true;\n };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport {\n CellSelection,\n cloneTr,\n findParentNode,\n Node as ProsemirrorNode,\n Schema,\n Selection,\n TableMap,\n tableNodeTypes,\n TableRect,\n Transaction,\n} from '@milkdown/prose';\n\nexport type CellPos = {\n pos: number;\n start: number;\n node: ProsemirrorNode;\n};\n\nexport const findTable = (selection: Selection) =>\n findParentNode((node) => node.type.spec['tableRole'] === 'table')(selection);\n\nexport const getCellsInColumn =\n (columnIndex: number) =>\n (selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection);\n if (!table) return undefined;\n const map = TableMap.get(table.node);\n if (columnIndex < 0 || columnIndex >= map.width) {\n return undefined;\n }\n\n return map.cellsInRect({ left: columnIndex, right: columnIndex + 1, top: 0, bottom: map.height }).map((pos) => {\n const node = table.node.nodeAt(pos);\n if (!node) throw new Error();\n const start = pos + table.start;\n return {\n pos: start,\n start: start + 1,\n node,\n };\n });\n };\n\nexport const getCellsInRow =\n (rowIndex: number) =>\n (selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection);\n if (!table) return undefined;\n const map = TableMap.get(table.node);\n if (rowIndex < 0 || rowIndex >= map.height) {\n return undefined;\n }\n\n return map.cellsInRect({ left: 0, right: map.width, top: rowIndex, bottom: rowIndex + 1 }).map((pos) => {\n const node = table.node.nodeAt(pos);\n if (!node) throw new Error();\n const start = pos + table.start;\n return {\n pos: start,\n start: start + 1,\n node,\n };\n });\n };\n\nexport const createTable = (schema: Schema, rowsCount = 3, colsCount = 3) => {\n const { cell: tableCell, header_cell: tableHeader, row: tableRow, table } = tableNodeTypes(schema);\n\n const cells = Array(colsCount)\n .fill(0)\n .map(() => tableCell.createAndFill(null) as ProsemirrorNode);\n\n const headerCells = Array(colsCount)\n .fill(0)\n .map(() => tableHeader.createAndFill(null) as ProsemirrorNode);\n\n const rows = Array(rowsCount)\n .fill(0)\n .map((_, i) => tableRow.create(null, i === 0 ? headerCells : cells));\n\n return table.create(null, rows);\n};\n\nexport const selectLine = (type: 'row' | 'col') => (index: number) => (tr: Transaction) => {\n const table = findTable(tr.selection);\n const isRowSelection = type === 'row';\n if (table) {\n const map = TableMap.get(table.node);\n\n // Check if the index is valid\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n const lastCell = map.positionAt(\n isRowSelection ? index : map.height - 1,\n isRowSelection ? map.width - 1 : index,\n table.node,\n );\n const $lastCell = tr.doc.resolve(table.start + lastCell);\n\n const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection;\n\n const firstCell = map.positionAt(isRowSelection ? index : 0, isRowSelection ? 0 : index, table.node);\n const $firstCell = tr.doc.resolve(table.start + firstCell);\n return cloneTr(tr.setSelection(createCellSelection($lastCell, $firstCell) as unknown as Selection));\n }\n }\n return tr;\n};\n\nexport const getCellsInTable = (selection: Selection) => {\n const table = findTable(selection);\n if (!table) {\n return;\n }\n const map = TableMap.get(table.node);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height,\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node };\n });\n};\n\nexport const selectTable = (tr: Transaction) => {\n const cells = getCellsInTable(tr.selection);\n if (cells && cells[0]) {\n const $firstCell = tr.doc.resolve(cells[0].pos);\n const last = cells[cells.length - 1];\n if (last) {\n const $lastCell = tr.doc.resolve(last.pos);\n return cloneTr(tr.setSelection(new CellSelection($lastCell, $firstCell) as unknown as Selection));\n }\n }\n return tr;\n};\n\nexport function addRowWithAlignment(tr: Transaction, { map, tableStart, table }: TableRect, row: number) {\n const rowPos = Array(row)\n .fill(0)\n .reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize;\n }, tableStart);\n\n const { cell: cellType, row: rowType } = tableNodeTypes(table.type.schema);\n\n const cells = Array(map.width)\n .fill(0)\n .map((_, col) => {\n const headerCol = table.nodeAt(map.map[col] as number);\n return cellType.createAndFill({ alignment: headerCol?.attrs['alignment'] }) as ProsemirrorNode;\n });\n\n tr.insert(rowPos, rowType.create(null, cells));\n return tr;\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { CellSelection, EditorView, TableMap } from '@milkdown/prose';\n\nimport { Item } from './actions';\n\nexport const getCellSelection = (view: EditorView): CellSelection => view.state.selection as unknown as CellSelection;\n\nexport const isFirstRowSelected = (selection: CellSelection) => {\n const map = TableMap.get(selection.$anchorCell.node(-1));\n const start = selection.$anchorCell.start(-1);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: 1,\n });\n const selectedCells = map.cellsInRect(\n map.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start),\n );\n\n for (let i = 0, count = cells.length; i < count; i++) {\n if (selectedCells.indexOf(cells[i] as number) === -1) {\n return false;\n }\n }\n return true;\n};\n\nexport const calculateItem = (actions: Record<string, Item>, view: EditorView) => {\n Object.values(actions).forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n item.$.classList.remove('hide');\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport {\n addColumnAfter,\n addColumnBefore,\n Command,\n deleteColumn,\n deleteRow,\n deleteTable,\n EditorView,\n isInTable,\n selectedRect,\n setCellAttr,\n} from '@milkdown/prose';\n\nimport { addRowWithAlignment } from '../utils';\nimport { getCellSelection, isFirstRowSelected } from './helper';\n\nexport type Item = {\n $: HTMLElement;\n command: (e: Event, view: EditorView) => Command;\n disable?: (view: EditorView) => boolean;\n};\n\nexport enum Action {\n AddColLeft,\n AddColRight,\n AddRowTop,\n AddRowBottom,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Delete,\n}\n\nexport const createActions: (ctx: Ctx) => Record<Action, Item> = (ctx) => ({\n [Action.AddColLeft]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'leftArrow')?.dom as HTMLElement,\n command: () => addColumnBefore,\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AddColRight]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'rightArrow')?.dom as HTMLElement,\n command: () => addColumnAfter,\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AddRowTop]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'upArrow')?.dom as HTMLElement,\n command: () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(state.tr, rect, rect.top));\n }\n return true;\n },\n disable: (view) =>\n !getCellSelection(view).isRowSelection() ||\n getCellSelection(view).$head.parent.type.name === 'table_header',\n },\n [Action.AddRowBottom]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'downArrow')?.dom as HTMLElement,\n command: () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(state.tr, rect, rect.bottom));\n }\n return true;\n },\n disable: (view) => !getCellSelection(view).isRowSelection(),\n },\n [Action.AlignLeft]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignLeft')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'left'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AlignCenter]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignCenter')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'center'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AlignRight]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignRight')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'right'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.Delete]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'delete')?.dom as HTMLElement,\n command: (_, view) => {\n const selection = getCellSelection(view);\n const isCol = selection.isColSelection();\n const isRow = selection.isRowSelection();\n if (isCol && isRow) {\n return deleteTable;\n }\n\n if (isCol) {\n return deleteColumn;\n }\n\n return deleteRow;\n },\n disable: (view) => {\n const selection = getCellSelection(view);\n if (selection.isRowSelection()) {\n if (selection.isColSelection()) {\n return false;\n }\n return isFirstRowSelected(selection);\n }\n return false;\n },\n },\n});\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { calculateNodePosition, CellSelection, EditorView } from '@milkdown/prose';\n\nexport const calculatePosition = (view: EditorView, dom: HTMLElement) => {\n const { selection } = view.state as unknown as { selection: CellSelection };\n const isCol = selection.isColSelection();\n const isRow = selection.isRowSelection();\n\n calculateNodePosition(view, dom, (selected, target, parent) => {\n const $editor = dom.parentElement;\n if (!$editor) {\n throw new Error();\n }\n let left = !isRow\n ? selected.left - parent.left + (selected.width - target.width) / 2\n : selected.left - parent.left - target.width / 2 - 8;\n const top = selected.top - parent.top - target.height - (isCol ? 14 : 0) - 14 + $editor.scrollTop;\n\n if (left < 0) {\n left = 0;\n }\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nexport enum ToolTipPos {\n Left = 'Left',\n Top = 'Top',\n Point = 'Point',\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Emotion, getPalette, ThemeBorder, ThemeManager, ThemeShadow, ThemeSize } from '@milkdown/core';\n\nexport const injectStyle = (themeManager: ThemeManager, { css, injectGlobal }: Emotion) => {\n const palette = getPalette(themeManager);\n const radius = themeManager.get(ThemeSize, 'radius');\n const lineWidth = themeManager.get(ThemeSize, 'lineWidth');\n\n injectGlobal`\n .milkdown {\n .tableWrapper {\n table {\n width: calc(100% - 2em) !important;\n margin: 1em 0 1em 1em !important;\n\n .milkdown-cell-left,\n .milkdown-cell-point,\n .milkdown-cell-top {\n position: absolute;\n\n &::after {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: block;\n transition: all 0.2s ease-in-out;\n background: ${palette('secondary', 0.12)};\n content: '';\n }\n\n &:hover::after {\n background: ${palette('secondary', 0.38)};\n }\n }\n\n .milkdown-cell-left {\n left: calc(-6px - 0.5em);\n top: 0;\n bottom: 0;\n width: 0.5em;\n }\n\n .milkdown-cell-top {\n left: 0;\n right: 0;\n top: calc(-6px - 0.5em);\n height: 0.5em;\n }\n\n .milkdown-cell-point {\n left: calc(-2px - 1em);\n top: calc(-2px - 1em);\n width: 1em;\n height: 1em;\n\n .icon {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n }\n }\n }\n }\n `;\n\n return css`\n display: inline-flex;\n cursor: pointer;\n z-index: 2;\n\n justify-content: space-evenly;\n\n position: absolute;\n\n border-radius: ${radius};\n\n ${themeManager.get(ThemeBorder, undefined)};\n ${themeManager.get(ThemeShadow, undefined)};\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 2em;\n line-height: 2em;\n text-align: center;\n transition: all 0.4s ease-in-out;\n\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n\n &.active {\n color: ${palette('primary')};\n }\n\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n right: 0;\n top: 0;\n width: ${lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport { Decoration, WidgetDecorationSpec } from '@milkdown/prose';\n\nimport { CellPos, selectLine, selectTable } from '../utils';\nimport { ToolTipPos } from './constant';\n\nconst calculateClassName = (pos: ToolTipPos) => {\n switch (pos) {\n case ToolTipPos.Left: {\n return 'milkdown-cell-left';\n }\n case ToolTipPos.Top: {\n return 'milkdown-cell-top';\n }\n case ToolTipPos.Point:\n default: {\n return 'milkdown-cell-point';\n }\n }\n};\n\nexport function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos.Point): Decoration<WidgetDecorationSpec>;\nexport function createWidget(\n ctx: Ctx,\n cell: CellPos,\n pos: ToolTipPos.Left,\n index: number,\n): Decoration<WidgetDecorationSpec>;\nexport function createWidget(\n ctx: Ctx,\n cell: CellPos,\n pos: ToolTipPos.Top,\n index: number,\n): Decoration<WidgetDecorationSpec>;\nexport function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos, index = 0) {\n return Decoration.widget(cell.pos + 1, (view) => {\n const div = document.createElement('div');\n div.classList.add(calculateClassName(pos));\n if (pos === ToolTipPos.Point) {\n div.appendChild(ctx.get(themeManagerCtx).get(ThemeIcon, 'select')?.dom as HTMLElement);\n }\n div.addEventListener('mousedown', (e) => {\n if (!view) return;\n\n e.preventDefault();\n switch (pos) {\n case ToolTipPos.Point: {\n view.dispatch(selectTable(view.state.tr));\n return;\n }\n case ToolTipPos.Left: {\n view.dispatch(selectLine('row')(index)(view.state.tr));\n return;\n }\n case ToolTipPos.Top: {\n view.dispatch(selectLine('col')(index)(view.state.tr));\n return;\n }\n }\n });\n return div;\n });\n}\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Ctx } from '@milkdown/core';\nimport { CellSelection, Decoration, DecorationSet, Plugin, PluginKey } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport { CellPos, getCellsInColumn, getCellsInRow } from '../utils';\nimport { createActions } from './actions';\nimport { calculatePosition } from './calc-pos';\nimport { ToolTipPos } from './constant';\nimport { calculateItem } from './helper';\nimport { injectStyle } from './style';\nimport { createWidget } from './widget';\n\nexport const key = 'MILKDOWN_PLUGIN_TABLE';\n\nexport const operatorPlugin = (ctx: Ctx, utils: Utils) => {\n return new Plugin({\n key: new PluginKey('MILKDOWN_TABLE_OP'),\n props: {\n decorations: (state) => {\n const decorations: Decoration[] = [];\n const leftCells = getCellsInColumn(0)(state.selection);\n if (!leftCells) return null;\n const topCells = getCellsInRow(0)(state.selection);\n if (!topCells) return null;\n\n const [topLeft] = leftCells;\n\n decorations.push(createWidget(ctx, topLeft as CellPos, ToolTipPos.Point));\n leftCells.forEach((cell, i) => {\n decorations.push(createWidget(ctx, cell, ToolTipPos.Left, i));\n });\n topCells.forEach((cell, i) => {\n decorations.push(createWidget(ctx, cell, ToolTipPos.Top, i));\n });\n\n return DecorationSet.create(state.doc, decorations);\n },\n },\n view: (editorView) => {\n const items = Object.fromEntries(Object.entries(createActions(ctx)).filter(([, value]) => value.$ != null));\n const tooltip = document.createElement('div');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion));\n if (style) {\n tooltip.classList.add(style);\n }\n });\n tooltip.classList.add('table-tooltip', 'hide');\n Object.values(items).forEach(({ $ }) => tooltip.appendChild($));\n editorView.dom.parentNode?.appendChild(tooltip);\n\n const listener = (e: Event) => {\n if (!editorView) return;\n e.stopPropagation();\n e.preventDefault();\n Object.values(items).forEach(({ $, command }) => {\n if ($.contains(e.target as Element)) {\n command(e, editorView)(editorView.state, editorView.dispatch, editorView);\n }\n });\n };\n\n const hide = () => {\n tooltip.classList.add('hide');\n };\n\n tooltip.addEventListener('mousedown', listener);\n\n return {\n update: (view, prevState) => {\n const state = view.state;\n\n if (prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection)) return;\n\n const isCellSelection = state.selection instanceof CellSelection;\n\n if (!isCellSelection || !view.editable) {\n hide();\n return;\n }\n\n calculateItem(items, view);\n if (Object.values(items).every(({ $ }) => $.classList.contains('hide'))) {\n hide();\n return;\n }\n tooltip.classList.remove('hide');\n calculatePosition(view, tooltip);\n },\n destroy: () => {\n tooltip.removeEventListener('mousedown', listener);\n tooltip.remove();\n },\n };\n },\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { tableNodes as tableNodesSpecCreator } from '@milkdown/prose';\n\nexport const schema = tableNodesSpecCreator({\n tableGroup: 'block',\n cellContent: 'paragraph',\n cellAttributes: {\n alignment: {\n default: 'left',\n getFromDOM: (dom) => (dom as HTMLElement).style.textAlign || 'left',\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || 'left'}`;\n },\n },\n },\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey, MarkdownNode, schemaCtx } from '@milkdown/core';\nimport {\n columnResizing,\n goToNextCell,\n InputRule,\n NodeType,\n Selection,\n tableEditing,\n TextSelection,\n} from '@milkdown/prose';\nimport { createPlugin, createShortcut } from '@milkdown/utils';\n\nimport { exitTable } from '../command';\nimport { operatorPlugin } from '../operator-plugin';\nimport { createTable } from '../utils';\nimport { schema } from './schema';\n\nexport const SupportedKeys = {\n NextCell: 'NextCell',\n PrevCell: 'PrevCell',\n ExitTable: 'ExitTable',\n} as const;\nexport type SupportedKeys = typeof SupportedKeys;\n\ntype Keys = keyof SupportedKeys;\n\nexport const PrevCell = createCmdKey('PrevCell');\nexport const NextCell = createCmdKey('NextCell');\nexport const BreakTable = createCmdKey('BreakTable');\nexport const InsertTable = createCmdKey('InsertTable');\n\nexport const table = createPlugin<Keys, Record<string, unknown>, keyof typeof schema>((utils) => {\n return {\n schema: () => ({\n node: {\n table: {\n ...schema.table,\n parseMarkdown: {\n match: (node) => node.type === 'table',\n runner: (state, node, type) => {\n const align = node['align'] as (string | null)[];\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align,\n isHeader: i === 0,\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table',\n runner: (state, node) => {\n const firstLine = node.content.firstChild?.content;\n if (!firstLine) return;\n\n const align: (string | null)[] = [];\n firstLine.forEach((cell) => {\n align.push(cell.attrs['alignment']);\n });\n state.openNode('table', undefined, { align });\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n table_row: {\n ...schema.table_row,\n parseMarkdown: {\n match: (node) => node.type === 'tableRow',\n runner: (state, node, type) => {\n const align = node['align'] as (string | null)[];\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align: align[i],\n isHeader: node['isHeader'],\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_row',\n runner: (state, node) => {\n state.openNode('tableRow');\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n table_cell: {\n ...schema.table_cell,\n parseMarkdown: {\n match: (node) => node.type === 'tableCell' && !node['isHeader'],\n runner: (state, node, type) => {\n const align = node['align'] as string;\n state\n .openNode(type, { alignment: align })\n .openNode(state.schema.nodes['paragraph'] as NodeType)\n .next(node.children)\n .closeNode()\n .closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_cell',\n runner: (state, node) => {\n state.openNode('tableCell').next(node.content).closeNode();\n },\n },\n },\n table_header: {\n ...schema.table_header,\n parseMarkdown: {\n match: (node) => node.type === 'tableCell' && !!node['isHeader'],\n runner: (state, node, type) => {\n const align = node['align'] as string;\n state.openNode(type, { alignment: align });\n state.openNode(state.schema.nodes['paragraph'] as NodeType);\n state.next(node.children);\n state.closeNode();\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_header',\n runner: (state, node) => {\n state.openNode('tableCell');\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n },\n }),\n inputRules: (nodeType, ctx) => [\n new InputRule(/^\\|\\|\\s$/, (state, _match, start, end) => {\n const $start = state.doc.resolve(start);\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType.table))\n return null;\n\n const tableNode = createTable(ctx.get(schemaCtx));\n const tr = state.tr.replaceRangeWith(start, end, tableNode).scrollIntoView();\n return tr.setSelection(TextSelection.create(tr.doc, start + 3));\n }),\n ],\n commands: (_, ctx) => [\n createCmd(PrevCell, () => goToNextCell(-1)),\n createCmd(NextCell, () => goToNextCell(1)),\n createCmd(BreakTable, () => exitTable(ctx.get(schemaCtx).nodes['paragraph'] as NodeType)),\n createCmd(InsertTable, () => (state, dispatch) => {\n const { selection, tr } = state;\n const { from } = selection;\n const table = createTable(ctx.get(schemaCtx));\n const _tr = tr.replaceSelectionWith(table);\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true);\n if (sel) {\n dispatch?.(_tr.setSelection(sel));\n }\n return true;\n }),\n ],\n shortcuts: {\n [SupportedKeys.NextCell]: createShortcut(NextCell, 'Mod-]'),\n [SupportedKeys.PrevCell]: createShortcut(PrevCell, 'Mod-['),\n [SupportedKeys.ExitTable]: createShortcut(BreakTable, 'Mod-Enter'),\n },\n prosePlugins: (_, ctx) => {\n return [operatorPlugin(ctx, utils), columnResizing({}), tableEditing()];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { SupportedKeys as CommonmarkKeys } from '@milkdown/preset-commonmark';\n\nimport { SupportedKeys as TableKeys } from './table';\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 { 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('ToggleStrikeThrough');\n\nconst id = 'strike_through';\nexport const strikeThrough = createMark<Keys>((utils) => {\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') }],\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 { createCmd, createCmdKey, editorViewCtx, ThemeTaskListItemType } from '@milkdown/core';\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('SplitTaskListItem');\nexport const SinkTaskListItem = createCmdKey('SinkTaskListItem');\nexport const LiftTaskListItem = createCmdKey('LiftTaskListItem');\nexport const TurnIntoTaskList = createCmdKey('TurnIntoTaskList');\n\nexport const taskListItem = createNode<Keys>((utils) => {\n const id = 'task_list_item';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'listItem',\n content: 'paragraph block*',\n defining: true,\n priority: 60,\n attrs: {\n checked: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'li[data-type=\"task-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 const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.checked = node.attrs['checked'];\n checkbox.className = utils.getClassName(node.attrs, 'task-list-item_checkbox');\n checkbox.onchange = (event) => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) return;\n const view = ctx.get(editorViewCtx);\n\n if (!view.editable) {\n checkbox.checked = !checkbox.checked;\n\n return;\n }\n\n const { top, left } = target.getBoundingClientRect();\n const result = view.posAtCoords({ top, left });\n if (!result) return;\n\n const { tr } = view.state;\n\n view.dispatch(\n tr.setNodeMarkup(result.inside, undefined, {\n checked: target.checked,\n }),\n );\n };\n return [\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'),\n },\n checkbox,\n ['span', { class: utils.getClassName(node.attrs, 'task-list-item_body') }, 0],\n ];\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: () => (node, view, getPos) => {\n let currNode = node;\n\n const renderer = utils.themeManager.get<ThemeTaskListItemType>('task-list-item', {\n editable: () => view.editable,\n onChange: (selected) => {\n const { tr } = view.state;\n view.dispatch(\n tr.setNodeMarkup(getPos(), undefined, {\n checked: selected,\n }),\n );\n },\n });\n\n if (!renderer) return {};\n\n const { dom, contentDOM, onUpdate } = renderer;\n onUpdate(currNode);\n\n return {\n dom,\n contentDOM,\n update: (updatedNode) => {\n if (updatedNode.type.name !== id) return false;\n\n currNode = updatedNode;\n onUpdate(currNode);\n\n return true;\n },\n };\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commands as commonmarkCommands, commonmark } from '@milkdown/preset-commonmark';\nimport { $remark, AtomList } from '@milkdown/utils';\nimport remarkGFM from 'remark-gfm';\n\nimport { urlPlugin } from './auto-link';\nimport { footnoteReference } from './footnote';\nimport { footnoteDefinition } from './footnote/definition';\nimport { strikeThrough, ToggleStrikeThrough } from './strike-through';\nimport { table } from './table';\nimport {\n LiftTaskListItem,\n SinkTaskListItem,\n SplitTaskListItem,\n taskListItem,\n TurnIntoTaskList,\n} from './task-list-item';\n\nexport * from './footnote';\nexport * from './strike-through';\nexport { SupportedKeys } from './supported-keys';\nexport {\n BreakTable,\n // command\n createTable,\n InsertTable,\n NextCell,\n PrevCell,\n // gather\n table,\n} from './table';\nexport * from './task-list-item';\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([\n ...commonmark,\n $remark(() => remarkGFM),\n table(),\n urlPlugin,\n strikeThrough(),\n taskListItem(),\n footnoteReference(),\n footnoteDefinition(),\n]);\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":["key","tableNodesSpecCreator","SupportedKeys","CommonmarkKeys","TableKeys","commonmarkCommands"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,WAAW;AAEjB,MAAM,iBAAiB,MACnB,WAAW;AAAA,EACP,OAAO;AAAA,IACH,IAAI,UAAU,UAAU,CAAC,OAAO,OAAO,OAAO,QAAQ;YAC5C,EAAE,oBAAW;YACb,CAAC,SAAQ;UACX,CAAC;eAAa;aAEX,MAAM,GACR,YAAY,OAAO,KAAK,QAAO,KAAK,QACpC,QAAQ,OAAO,MAAK,SAAS,OAAO,QAAO,MAAM,KAAK,OAAO,EAAE,MAAM;AAAA;AAAA;AAAA;MAK7E,YAAY,OAAO,MAAM;MCpBzB,mBAAmB,CAAC,UAAkB,gBAAgB;MAEtD,mBAAmB,CAAC,UAAkB,gBAAgB;ACYnE,MAAMA,QAAM,IAAI,UAAU;MACb,oBAAoB,aAAqB;MAEzC,qBAAqB,WAAW,CAAC,UAAU;QAC9C,MAAK;QACL,aAAa;SAEZ;AAAA,IACH;AAAA,IACA,QAAQ,CAAC;MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,QACH,OAAO;AAAA,UACH,SAAS;AAAA;AAAA;AAAA,MAGjB,UAAU;AAAA,QACN;AAAA,UACI,KAAK,kBAAkB;AAAA,UACvB,UAAU,CAAC,QAAQ;gBACX,iBAAiB,cAAc;oBACzB,IAAI;AAAA;mBAEP;AAAA,cACH,OAAO,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnC,OAAO,CAAC,SAAS;cACP,QAAQ,KAAK,MAAM;cACnB,YAAY,MAAM,aAAa,KAAK,OAAO;cAE3C,KAAK,SAAS,cAAc;WAC/B,cAAc,IAAI;WAClB,UAAU,MAAM;gBACT,OAAO,IAAI,IAAI;gBACf,YAAY,cAAc,OAAO,KAAK,MAAM,KAAK,KAAK,MAAM,UAAU,OAAO;eAC9E,SAAS,KAAK,MAAM,GAAG,aAAa;AAAA;cAGvC,IAAI,SAAS,cAAc;UAC/B,OAAO,IAAI,iBAAiB;UAC5B,kBAAkB;UAClB,cAAc;UACd,cAAc,CAAC,MAAM;YACjB;AAAA;eAGC;AAAA,UACH;AAAA,UACA;AAAA,YACI,OAAO;AAAA,YACP,cAAc;AAAA,YACd,aAAa;AAAA,YACb,IAAI,iBAAiB;AAAA;AAAA,UAEzB,CAAC,OAAO,EAAE,OAAO,iCAAiC,IAAI,CAAC,MAAM;AAAA,UAC7D,CAAC,OAAO,EAAE,OAAO,gCAAgC;AAAA;AAAA;AAAA,MAGzD,eAAe;AAAA,QACX,OAAO,CAAC,EAAE,WAAW,SAAS;AAAA,QAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;gBAEtB,SAAS,MAAM;AAAA,YACZ,OAAO,KAAK;AAAA,aAEf,KAAK,KAAK,UACV;AAAA;AAAA;AAAA,MAGb,YAAY;AAAA,QACR,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,QACpC,QAAQ,CAAC,OAAO,SAAS;gBAEhB,SAAS,YAAY,QAAW;AAAA,YAC7B,OAAO,KAAK,MAAM;AAAA,YAClB,YAAY,KAAK,MAAM;AAAA,aAE1B,KAAK,KAAK,SACV;AAAA;AAAA;AAAA;AAAA,IAIjB,UAAU,CAAC,aAAa;AAAA,MACpB,UAAU,mBAAmB,CAAC,QAAQ,OAAO,CAAC,OAAO,aAAa;cACxD,OAAO,uBAAuB,MAAM,WAAW;YACjD,CAAC;iBAAa;cAEZ,EAAE,OAAO;cACT,MAAM,GAAG,cAAc,KAAK,KAAK,QAAW,iCAAK,KAAK,KAAK,QAAf,EAAsB;6CAC7D,IAAI,aAAa,cAAc,OAAO,IAAI,KAAK,KAAK;eAExD;AAAA;AAAA;AAAA,IAGf,YAAY,CAAC,aAAa;AAAA,MACtB,kBACI,yBACA,UACA,CAAC,UAAU;;cACD,QAAQ,YAAM,OAAN,YAAY;eACnB;AAAA,UACH;AAAA;AAAA,SAGR,MAAM;AAAA;AAAA,IAGd,cAAc,CAAC,MAAM,QAAQ;aAClB;AAAA,QACH,IAAI,OAAO;AAAA,eACPA;AAAAA,UACA,MAAM,CAAC,eAAe;kBACZ,oBAAoB,MAAM,aAAa,IAAwB,cAAc;AAAA,cAC/E,OAAO;AAAA,cACP,aAAa;AAAA,cACb,UAAU,CAAC,UAAU;oBACb,IAAI,aAAa,KAAK,mBAAmB;AAAA;AAAA,cAEjD,YAAY;AAAA;gBAEZ,CAAC;qBAA0B;kBACzB,gBAAgB,CAAC,SAAqB;qBACjC,QACH,KAAK,cAAc,QAAQ,uBAAuB,KAAK,MAAM,WAAW;AAAA;kBAG1E,kBAAkB,CAAC,SAAqB;oBACpC,SAAS,uBAAuB,KAAK,MAAM,WAAW;kBACxD,CAAC;;oBAEC,QAAQ,OAAO,KAAK,MAAM;qBACzB;AAAA;kBAEL,eAAe,CAAC,SAAqB;kBACnC,CAAC,KAAK,UAAU;;;oBAGd,UAAU,cAAc;kBAC1B,SAAS;kCACS,KAAK;kCACL,OAAO,gBAAgB;AAAA,qBACtC;kCACe;AAAA;AAAA;8BAGR,KAAK;yBACV;mBAEN;AAAA,cACH,QAAQ,CAAC,MAAM,cAAc;sBACnB,mBACF,wCAAW,IAAI,GAAG,KAAK,MAAM,SAAQ,UAAU,UAAU,GAAG,KAAK,MAAM;oBACvE;;6BAES;AAAA;AAAA,cAEjB,SAAS,MAAM;kCACO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;MCzKrC,oBAAoB,aAAqB;AACtD,MAAM,MAAM,IAAI,UAAU;MAEb,oBAAoB,WAAW,CAAC,UAAU;QAC7C,MAAK;SAEJ;AAAA,IACH;AAAA,IACA,QAAQ,CAAC;MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,QACH,OAAO;AAAA,UACH,SAAS;AAAA;AAAA;AAAA,MAGjB,UAAU;AAAA,QACN;AAAA,UACI,KAAK,kBAAkB;AAAA,UACvB,UAAU,CAAC,QAAQ;gBACX,iBAAiB,cAAc;oBACzB,IAAI;AAAA;mBAEP;AAAA,cACH,OAAO,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnC,OAAO,CAAC,SAAS;cACP,QAAQ,KAAK,MAAM;cACnB,IAAI,SAAS,cAAc;cAC3B,OAAO,IAAI,iBAAiB;UAChC,OAAO;UACP,cAAc,IAAI;UAClB,UAAU,CAAC,MAAM;gBACT,OAAO,IAAI,IAAI;cACjB,KAAK,UAAU;cACb;AAAA;AAAA;UAGR,aAAa,MAAM;gBACX,OAAO,IAAI,IAAI;cACjB,KAAK,UAAU;mBACR,SAAS,OAAO;AAAA;AAAA;eAGxB;AAAA,UACH;AAAA,UACA;AAAA,YACI,cAAc;AAAA,YACd,aAAa;AAAA,YACb,IAAI,iBAAiB;AAAA;AAAA,UAEzB;AAAA;AAAA;AAAA,MAGR,eAAe;AAAA,QACX,OAAO,CAAC,EAAE,WAAW,SAAS;AAAA,QAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;gBACrB,QAAQ,MAAM;AAAA,YAChB,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA,MAIxB,YAAY;AAAA,QACR,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,QACpC,QAAQ,CAAC,OAAO,SAAS;gBACf,QAAQ,qBAAqB,QAAW,QAAW;AAAA,YACrD,OAAO,KAAK,MAAM;AAAA,YAClB,YAAY,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAKvC,UAAU,CAAC,aAAa;AAAA,MACpB,UAAU,mBAAmB,CAAC,QAAQ,OAAO,CAAC,OAAO,aAAa;cACxD,OAAO,uBAAuB,MAAM,WAAW;YACjD,CAAC;iBAAa;cAEZ,EAAE,OAAO;cACT,MAAM,GAAG,cAAc,KAAK,KAAK,QAAW,iCAAK,KAAK,KAAK,QAAf,EAAsB;6CAC7D,IAAI,aAAa,cAAc,OAAO,IAAI,KAAK,KAAK;eAExD;AAAA;AAAA;AAAA,IAGf,YAAY,CAAC,aAAa;AAAA,MACtB,IAAI,UAAU,2BAA2B,CAAC,OAAO,OAAO,OAAO,QAAQ;cAC7D,SAAS,MAAM,IAAI,QAAQ;cAC3B,QAAQ,OAAO;cACf,OAAO,MAAM,IAAI,QAAQ;YAC3B,CAAC,OAAO,OAAO,eAAe,OAAO,KAAK,SAAS,WAAW;iBACvD;AAAA;cAEL,QAAQ,MAAM;eACb,MAAM,GAAG,iBACZ,OACA,KACA,SAAS,OAAO;AAAA,UACZ;AAAA;AAAA;AAAA;AAAA,IAKhB,cAAc,CAAC,MAAM,QAAQ;YACnB,oBAAoB,MAAM,aAAa,IAAwB,cAAc;AAAA,QAC/E,OAAO;AAAA,QACP,aAAa;AAAA,QACb,UAAU,CAAC,UAAU;cACb,IAAI,aAAa,KAAK,mBAAmB;AAAA;AAAA,QAEjD,YAAY;AAAA;UAEZ,CAAC;eAA0B;YACzB,gBAAgB,CAAC,SAAqB;eACjC,QAAQ,KAAK,cAAc,QAAQ,uBAAuB,KAAK,MAAM,WAAW;AAAA;YAErF,kBAAkB,CAAC,SAAqB;cACpC,SAAS,uBAAuB,KAAK,MAAM,WAAW;YACxD,CAAC;;cAEC,QAAQ,OAAO,KAAK,MAAM;eACzB;AAAA;YAEL,eAAe,CAAC,SAAqB;YACnC,CAAC,KAAK,UAAU;;;cAGd,UAAU,cAAc;YAC1B,SAAS;4BACS,KAAK;4BACL,OAAO,gBAAgB;AAAA,eACtC;4BACe;AAAA;AAAA;aAGnB;AAAA,QACH,IAAI,OAAO;AAAA,UACP;AAAA,UACA,MAAM,CAAC,eAAe;8BACA,KAAK;yBACV;mBAEN;AAAA,cACH,QAAQ,CAAC,MAAM,cAAc;sBACnB,mBACF,wCAAW,IAAI,GAAG,KAAK,MAAM,SAAQ,UAAU,UAAU,GAAG,KAAK,MAAM;oBACvE;;6BAES;AAAA;AAAA,cAEjB,SAAS,MAAM;kCACO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;MC/JrC,YACT,CAAC,SACD,CAAC,OAAO,aAAa;MACb,CAAC,UAAU,QAAQ;WACZ;AAAA;QAEL,EAAE,UAAU,MAAM;QAClB,MAAM,MAAM;QACZ,KAAK,MAAM,GAAG,YAAY,KAAK,KAAK,KAAK;KAC5C,aAAa,UAAU,KAAK,GAAG,IAAI,QAAQ,MAAM;uCACzC,GAAG;SACP;AAAA;MCMF,YAAY,CAAC,cACtB,eAAe,CAAC,SAAS,KAAK,KAAK,KAAK,iBAAiB,SAAS;MAEzD,mBACT,CAAC,gBACD,CAAC,cAAgD;QACvC,SAAQ,UAAU;MACpB,CAAC;WAAc;QACb,MAAM,SAAS,IAAI,OAAM;MAC3B,cAAc,KAAK,eAAe,IAAI,OAAO;WACtC;AAAA;SAGJ,IAAI,YAAY,EAAE,MAAM,aAAa,OAAO,cAAc,GAAG,KAAK,GAAG,QAAQ,IAAI,UAAU,IAAI,CAAC,QAAQ;UACrG,OAAO,OAAM,KAAK,OAAO;QAC3B,CAAC;YAAY,IAAI;UACf,QAAQ,MAAM,OAAM;WACnB;AAAA,MACH,KAAK;AAAA,MACL,OAAO,QAAQ;AAAA,MACf;AAAA;AAAA;AAAA;MAKH,gBACT,CAAC,aACD,CAAC,cAAgD;QACvC,SAAQ,UAAU;MACpB,CAAC;WAAc;QACb,MAAM,SAAS,IAAI,OAAM;MAC3B,WAAW,KAAK,YAAY,IAAI,QAAQ;WACjC;AAAA;SAGJ,IAAI,YAAY,EAAE,MAAM,GAAG,OAAO,IAAI,OAAO,KAAK,UAAU,QAAQ,WAAW,KAAK,IAAI,CAAC,QAAQ;UAC9F,OAAO,OAAM,KAAK,OAAO;QAC3B,CAAC;YAAY,IAAI;UACf,QAAQ,MAAM,OAAM;WACnB;AAAA,MACH,KAAK;AAAA,MACL,OAAO,QAAQ;AAAA,MACf;AAAA;AAAA;AAAA;MAKH,cAAc,CAAC,SAAgB,YAAY,GAAG,YAAY,MAAM;QACnE,EAAE,MAAM,WAAW,aAAa,aAAa,KAAK,UAAU,kBAAU,eAAe;QAErF,QAAQ,MAAM,WACf,KAAK,GACL,IAAI,MAAM,UAAU,cAAc;QAEjC,cAAc,MAAM,WACrB,KAAK,GACL,IAAI,MAAM,YAAY,cAAc;QAEnC,OAAO,MAAM,WACd,KAAK,GACL,IAAI,CAAC,GAAG,MAAM,SAAS,OAAO,MAAM,MAAM,IAAI,cAAc;SAE1D,OAAM,OAAO,MAAM;AAAA;MAGjB,aAAa,CAAC,SAAwB,CAAC,UAAkB,CAAC,OAAoB;QACjF,SAAQ,UAAU,GAAG;QACrB,iBAAiB,SAAS;MAC5B,QAAO;UACD,MAAM,SAAS,IAAI,OAAM;QAG3B,SAAS,KAAK,0BAA0B,IAAI,SAAS,IAAI,QAAQ;YAC3D,WAAW,IAAI,WACjB,iBAAiB,QAAQ,IAAI,SAAS,GACtC,iBAAiB,IAAI,QAAQ,IAAI,OACjC,OAAM;YAEJ,YAAY,GAAG,IAAI,QAAQ,OAAM,QAAQ;YAEzC,sBAAsB,iBAAiB,cAAc,eAAe,cAAc;YAElF,YAAY,IAAI,WAAW,iBAAiB,QAAQ,GAAG,iBAAiB,IAAI,OAAO,OAAM;YACzF,aAAa,GAAG,IAAI,QAAQ,OAAM,QAAQ;aACzC,QAAQ,GAAG,aAAa,oBAAoB,WAAW;AAAA;AAAA;SAG/D;AAAA;MAGE,kBAAkB,CAAC,cAAyB;QAC/C,SAAQ,UAAU;MACpB,CAAC,QAAO;;;QAGN,MAAM,SAAS,IAAI,OAAM;QACzB,QAAQ,IAAI,YAAY;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO,IAAI;AAAA,IACX,KAAK;AAAA,IACL,QAAQ,IAAI;AAAA;SAET,MAAM,IAAI,CAAC,YAAY;UACpB,OAAO,OAAM,KAAK,OAAO;UACzB,MAAM,UAAU,OAAM;WACrB,EAAE,KAAK,OAAO,MAAM,GAAG;AAAA;AAAA;MAIzB,cAAc,CAAC,OAAoB;QACtC,QAAQ,gBAAgB,GAAG;MAC7B,SAAS,MAAM,IAAI;UACb,aAAa,GAAG,IAAI,QAAQ,MAAM,GAAG;UACrC,OAAO,MAAM,MAAM,SAAS;QAC9B,MAAM;YACA,YAAY,GAAG,IAAI,QAAQ,KAAK;aAC/B,QAAQ,GAAG,aAAa,IAAI,cAAc,WAAW;AAAA;AAAA;SAG7D;AAAA;6BAGyB,IAAiB,EAAE,KAAK,YAAY,iBAAoB,KAAa;QAC/F,SAAS,MAAM,KAChB,KAAK,GACL,OAAO,CAAC,KAAK,GAAG,MAAM;WACZ,MAAM,OAAM,MAAM,GAAG;AAAA,KAC7B;QAED,EAAE,MAAM,UAAU,KAAK,YAAY,eAAe,OAAM,KAAK;QAE7D,QAAQ,MAAM,IAAI,OACnB,KAAK,GACL,IAAI,CAAC,GAAG,QAAQ;UACP,YAAY,OAAM,OAAO,IAAI,IAAI;WAChC,SAAS,cAAc,EAAE,WAAW,uCAAW,MAAM;AAAA;KAGjE,OAAO,QAAQ,QAAQ,OAAO,MAAM;SAChC;AAAA;MC1JE,mBAAmB,CAAC,SAAoC,KAAK,MAAM;MAEnE,qBAAqB,CAAC,cAA6B;QACtD,MAAM,SAAS,IAAI,UAAU,YAAY,KAAK;QAC9C,QAAQ,UAAU,YAAY,MAAM;QACpC,QAAQ,IAAI,YAAY;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO,IAAI;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA;QAEN,gBAAgB,IAAI,YACtB,IAAI,YAAY,UAAU,YAAY,MAAM,OAAO,UAAU,UAAU,MAAM;WAGxE,IAAI,GAAG,QAAQ,MAAM,QAAQ,IAAI,OAAO,KAAK;QAC9C,cAAc,QAAQ,MAAM,QAAkB,IAAI;aAC3C;AAAA;AAAA;SAGR;AAAA;MAGE,gBAAgB,CAAC,SAA+B,SAAqB;SACvE,OAAO,SAAS,QAAQ,CAAC,SAAS;;UAC/B,UAAU,WAAK,YAAL,8BAAe;QAC3B,SAAS;WACJ,EAAE,UAAU,IAAI;;;SAGpB,EAAE,UAAU,OAAO;AAAA;AAAA;MCAnB,gBAAoD,CAAC;;;KAC7D,IAAoB;AAAA,MACjB,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,iBAAxC,mBAAsD;AAAA,MACzD,SAAS,MAAM;AAAA,MACf,SAAS,CAAC,SAAS,CAAC,iBAAiB,MAAM;AAAA;AAAA,KAE9C,IAAqB;AAAA,MAClB,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,kBAAxC,mBAAuD;AAAA,MAC1D,SAAS,MAAM;AAAA,MACf,SAAS,CAAC,SAAS,CAAC,iBAAiB,MAAM;AAAA;AAAA,KAE9C,IAAmB;AAAA,MAChB,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,eAAxC,mBAAoD;AAAA,MACvD,SAAS,MAAM,CAAC,OAAO,aAAa;YAC5B,CAAC,UAAU;iBAAe;YAC1B,UAAU;gBACJ,OAAO,aAAa;mBACjB,oBAAoB,MAAM,IAAI,MAAM,KAAK;AAAA;eAE/C;AAAA;AAAA,MAEX,SAAS,CAAC,SACN,CAAC,iBAAiB,MAAM,oBACxB,iBAAiB,MAAM,MAAM,OAAO,KAAK,SAAS;AAAA;AAAA,KAEzD,IAAsB;AAAA,MACnB,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,iBAAxC,mBAAsD;AAAA,MACzD,SAAS,MAAM,CAAC,OAAO,aAAa;YAC5B,CAAC,UAAU;iBAAe;YAC1B,UAAU;gBACJ,OAAO,aAAa;mBACjB,oBAAoB,MAAM,IAAI,MAAM,KAAK;AAAA;eAE/C;AAAA;AAAA,MAEX,SAAS,CAAC,SAAS,CAAC,iBAAiB,MAAM;AAAA;AAAA,KAE9C,IAAmB;AAAA,MAChB,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,iBAAxC,mBAAsD;AAAA,MACzD,SAAS,MAAM,YAAY,aAAa;AAAA,MACxC,SAAS,CAAC,SAAS,CAAC,iBAAiB,MAAM;AAAA;AAAA,KAE9C,IAAqB;AAAA,MAClB,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,mBAAxC,mBAAwD;AAAA,MAC3D,SAAS,MAAM,YAAY,aAAa;AAAA,MACxC,SAAS,CAAC,SAAS,CAAC,iBAAiB,MAAM;AAAA;AAAA,KAE9C,IAAoB;AAAA,MACjB,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,kBAAxC,mBAAuD;AAAA,MAC1D,SAAS,MAAM,YAAY,aAAa;AAAA,MACxC,SAAS,CAAC,SAAS,CAAC,iBAAiB,MAAM;AAAA;AAAA,KAE9C,IAAgB;AAAA,MACb,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,cAAxC,mBAAmD;AAAA,MACtD,SAAS,CAAC,GAAG,SAAS;cACZ,YAAY,iBAAiB;cAC7B,QAAQ,UAAU;cAClB,QAAQ,UAAU;YACpB,SAAS,OAAO;iBACT;AAAA;YAGP,OAAO;iBACA;AAAA;eAGJ;AAAA;AAAA,MAEX,SAAS,CAAC,SAAS;cACT,YAAY,iBAAiB;YAC/B,UAAU,kBAAkB;cACxB,UAAU,kBAAkB;mBACrB;AAAA;iBAEJ,mBAAmB;AAAA;eAEvB;AAAA;AAAA;AAAA;AAAA;MC3GN,oBAAoB,CAAC,MAAkB,QAAqB;QAC/D,EAAE,cAAc,KAAK;QACrB,QAAQ,UAAU;QAClB,QAAQ,UAAU;wBAEF,MAAM,KAAK,CAAC,UAAU,QAAQ,WAAW;UACrD,UAAU,IAAI;QAChB,CAAC,SAAS;YACJ,IAAI;AAAA;QAEV,OAAO,CAAC,QACN,SAAS,OAAO,OAAO,iBAAiB,QAAQ,OAAO,SAAS,IAChE,SAAS,OAAO,OAAO,OAAO,OAAO,QAAQ,IAAI;UACjD,MAAM,SAAS,MAAM,OAAO,MAAM,OAAO,kBAAkB,KAAK,KAAK,KAAK,QAAQ;QAEpF,OAAO,GAAG;aACH;AAAA;WAEJ,CAAC,KAAK;AAAA;AAAA;ICpBT,+BAAA,gBAAL;wBACI;uBACD;yBACE;;;MCFC,cAAc,CAAC,cAA4B,EAAE,KAAK,mBAA4B;QACjF,UAAU,WAAW;QACrB,SAAS,aAAa,IAAI,WAAW;QACrC,YAAY,aAAa,IAAI,WAAW;;;;;;;;;;;;;;;;;;;;;;0CAuBR,QAAQ,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,0CAKrB,QAAQ,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;SAqCpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBASc;AAAA;AAAA,UAEf,aAAa,IAAI,aAAa;AAAA,UAC9B,aAAa,IAAI,aAAa;AAAA;AAAA;AAAA,sBAGlB,QAAQ;AAAA;AAAA;AAAA;AAAA,qBAIT,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAQF,QAAQ,aAAa;AAAA;AAAA;AAAA;AAAA,yBAIhC,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAQR;AAAA;AAAA,8BAEK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACxGtC,MAAM,qBAAqB,CAAC,QAAoB;UACpC;AAAA,SACC,WAAW,MAAM;aACX;AAAA;AAAA,SAEN,WAAW,KAAK;aACV;AAAA;AAAA,SAEN,WAAW;AAAA,aACP;aACE;AAAA;AAAA;AAAA;sBAkBU,KAAU,MAAe,KAAiB,QAAQ,GAAG;SACvE,WAAW,OAAO,KAAK,MAAM,GAAG,CAAC,SAAS;;UACvC,MAAM,SAAS,cAAc;QAC/B,UAAU,IAAI,mBAAmB;QACjC,QAAQ,WAAW,OAAO;UACtB,YAAY,UAAI,IAAI,iBAAiB,IAAI,WAAW,cAAxC,mBAAmD;AAAA;QAEnE,iBAAiB,aAAa,CAAC,MAAM;UACjC,CAAC;;QAEH;cACM;AAAA,aACC,WAAW,OAAO;eACd,SAAS,YAAY,KAAK,MAAM;;;aAGpC,WAAW,MAAM;eACb,SAAS,WAAW,OAAO,OAAO,KAAK,MAAM;;;aAGjD,WAAW,KAAK;eACZ,SAAS,WAAW,OAAO,OAAO,KAAK,MAAM;;;;;WAKvD;AAAA;AAAA;MC9CF,iBAAiB,CAAC,KAAU,UAAiB;SAC/C,IAAI,OAAO;AAAA,IACd,KAAK,IAAI,UAAU;AAAA,IACnB,OAAO;AAAA,MACH,aAAa,CAAC,UAAU;cACd,cAA4B;cAC5B,YAAY,iBAAiB,GAAG,MAAM;YACxC,CAAC;iBAAkB;cACjB,WAAW,cAAc,GAAG,MAAM;YACpC,CAAC;iBAAiB;cAEhB,CAAC,WAAW;oBAEN,KAAK,aAAa,KAAK,SAAoB,WAAW;kBACxD,QAAQ,CAAC,MAAM,MAAM;sBACf,KAAK,aAAa,KAAK,MAAM,WAAW,MAAM;AAAA;iBAErD,QAAQ,CAAC,MAAM,MAAM;sBACd,KAAK,aAAa,KAAK,MAAM,WAAW,KAAK;AAAA;eAGtD,cAAc,OAAO,MAAM,KAAK;AAAA;AAAA;AAAA,IAG/C,MAAM,CAAC,eAAe;;YACZ,QAAQ,OAAO,YAAY,OAAO,QAAQ,cAAc,MAAM,OAAO,CAAC,GAAG,WAAW,MAAM,KAAK;YAC/F,UAAU,SAAS,cAAc;YACjC,aAAa,QAAQ,MAAM;cACvB,QAAQ,MAAM,SAAS,CAAC,YAAY,YAAY,MAAM,cAAc;YACtE,OAAO;kBACC,UAAU,IAAI;AAAA;AAAA;cAGtB,UAAU,IAAI,iBAAiB;aAChC,OAAO,OAAO,QAAQ,CAAC,EAAE,QAAQ,QAAQ,YAAY;uBACjD,IAAI,kCAAY,YAAY;YAEjC,WAAW,CAAC,MAAa;YACvB,CAAC;;UACH;UACA;eACK,OAAO,OAAO,QAAQ,CAAC,EAAE,GAAG,cAAc;cACzC,EAAE,SAAS,EAAE,SAAoB;oBACzB,GAAG,YAAY,WAAW,OAAO,WAAW,UAAU;AAAA;AAAA;AAAA;YAKpE,OAAO,MAAM;gBACP,UAAU,IAAI;AAAA;cAGlB,iBAAiB,aAAa;aAE/B;AAAA,QACH,QAAQ,CAAC,MAAM,cAAc;gBACnB,QAAQ,KAAK;cAEf,wCAAW,IAAI,GAAG,MAAM,SAAQ,UAAU,UAAU,GAAG,MAAM;;gBAE3D,kBAAkB,MAAM,qBAAqB;cAE/C,CAAC,mBAAmB,CAAC,KAAK,UAAU;;;;wBAK1B,OAAO;cACjB,OAAO,OAAO,OAAO,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAU,SAAS,UAAU;;;;kBAIjE,UAAU,OAAO;4BACP,MAAM;AAAA;AAAA,QAE5B,SAAS,MAAM;kBACH,oBAAoB,aAAa;kBACjC;AAAA;AAAA;AAAA;AAAA;AAAA;MC1Ff,SAASC,WAAsB;AAAA,EACxC,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB;AAAA,IACZ,WAAW;AAAA,MACP,SAAS;AAAA,MACT,YAAY,CAAC,QAAS,IAAoB,MAAM,aAAa;AAAA,MAC7D,YAAY,CAAC,OAAO,UAAU;cACpB,QAAQ,eAAe,SAAS;AAAA;AAAA;AAAA;AAAA;MCOzCC,kBAAgB;AAAA,EACzB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA;MAMF,WAAW,aAAa;MACxB,WAAW,aAAa;MACxB,aAAa,aAAa;MAC1B,cAAc,aAAa;MAE3B,QAAQ,aAAiE,CAAC,UAAU;SACtF;AAAA,IACH,QAAQ;MACJ,MAAM;AAAA,QACF,OAAO,iCACA,OAAO,QADP;AAAA,UAEH,eAAe;AAAA,YACX,OAAO,CAAC,SAAS,KAAK,SAAS;AAAA,YAC/B,QAAQ,CAAC,OAAO,MAAM,SAAS;oBACrB,QAAQ,KAAK;oBACb,WAAY,KAAK,SAA4B,IAAI,CAAC,GAAG,uCACpD;gBACH;AAAA,gBACA,UAAU,MAAM;AAAA;oBAEd,SAAS;oBACT,KAAK;oBACL;AAAA;AAAA;AAAA,UAGd,YAAY;AAAA,YACR,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,YACpC,QAAQ,CAAC,OAAO,SAAS;;oBACf,YAAY,WAAK,QAAQ,eAAb,mBAAyB;kBACvC,CAAC;;oBAEC,QAA2B;wBACvB,QAAQ,CAAC,SAAS;sBAClB,KAAK,KAAK,MAAM;AAAA;oBAEpB,SAAS,SAAS,QAAW,EAAE;oBAC/B,KAAK,KAAK;oBACV;AAAA;AAAA;AAAA;AAAA,QAIlB,WAAW,iCACJ,OAAO,YADH;AAAA,UAEP,eAAe;AAAA,YACX,OAAO,CAAC,SAAS,KAAK,SAAS;AAAA,YAC/B,QAAQ,CAAC,OAAO,MAAM,SAAS;oBACrB,QAAQ,KAAK;oBACb,WAAY,KAAK,SAA4B,IAAI,CAAC,GAAG,uCACpD;gBACH,OAAO,MAAM;AAAA,gBACb,UAAU,KAAK;AAAA;oBAEb,SAAS;oBACT,KAAK;oBACL;AAAA;AAAA;AAAA,UAGd,YAAY;AAAA,YACR,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,YACpC,QAAQ,CAAC,OAAO,SAAS;oBACf,SAAS;oBACT,KAAK,KAAK;oBACV;AAAA;AAAA;AAAA;AAAA,QAIlB,YAAY,iCACL,OAAO,aADF;AAAA,UAER,eAAe;AAAA,YACX,OAAO,CAAC,SAAS,KAAK,SAAS,eAAe,CAAC,KAAK;AAAA,YACpD,QAAQ,CAAC,OAAO,MAAM,SAAS;oBACrB,QAAQ,KAAK;oBAEd,SAAS,MAAM,EAAE,WAAW,SAC5B,SAAS,MAAM,OAAO,MAAM,cAC5B,KAAK,KAAK,UACV,YACA;AAAA;AAAA;AAAA,UAGb,YAAY;AAAA,YACR,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,YACpC,QAAQ,CAAC,OAAO,SAAS;oBACf,SAAS,aAAa,KAAK,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA,QAI3D,cAAc,iCACP,OAAO,eADA;AAAA,UAEV,eAAe;AAAA,YACX,OAAO,CAAC,SAAS,KAAK,SAAS,eAAe,CAAC,CAAC,KAAK;AAAA,YACrD,QAAQ,CAAC,OAAO,MAAM,SAAS;oBACrB,QAAQ,KAAK;oBACb,SAAS,MAAM,EAAE,WAAW;oBAC5B,SAAS,MAAM,OAAO,MAAM;oBAC5B,KAAK,KAAK;oBACV;oBACA;AAAA;AAAA;AAAA,UAGd,YAAY;AAAA,YACR,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,YACpC,QAAQ,CAAC,OAAO,SAAS;oBACf,SAAS;oBACT,KAAK,KAAK;oBACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM1B,YAAY,CAAC,UAAU,QAAQ;AAAA,MAC3B,IAAI,UAAU,YAAY,CAAC,OAAO,QAAQ,OAAO,QAAQ;cAC/C,SAAS,MAAM,IAAI,QAAQ;YAC7B,CAAC,OAAO,KAAK,IAAI,eAAe,OAAO,MAAM,KAAK,OAAO,WAAW,KAAK,SAAS;iBAC3E;cAEL,YAAY,YAAY,IAAI,IAAI;cAChC,KAAK,MAAM,GAAG,iBAAiB,OAAO,KAAK,WAAW;eACrD,GAAG,aAAa,cAAc,OAAO,GAAG,KAAK,QAAQ;AAAA;AAAA;AAAA,IAGpE,UAAU,CAAC,GAAG,QAAQ;AAAA,MAClB,UAAU,UAAU,MAAM,aAAa;AAAA,MACvC,UAAU,UAAU,MAAM,aAAa;AAAA,MACvC,UAAU,YAAY,MAAM,UAAU,IAAI,IAAI,WAAW,MAAM;AAAA,MAC/D,UAAU,aAAa,MAAM,CAAC,OAAO,aAAa;cACxC,EAAE,WAAW,OAAO;cACpB,EAAE,SAAS;cACX,SAAQ,YAAY,IAAI,IAAI;cAC5B,MAAM,GAAG,qBAAqB;cAC9B,MAAM,UAAU,SAAS,IAAI,IAAI,QAAQ,OAAO,GAAG;YACrD,KAAK;+CACM,IAAI,aAAa;AAAA;eAEzB;AAAA;AAAA;AAAA,IAGf,WAAW;AAAA,OACNA,gBAAc,WAAW,eAAe,UAAU;AAAA,OAClDA,gBAAc,WAAW,eAAe,UAAU;AAAA,OAClDA,gBAAc,YAAY,eAAe,YAAY;AAAA;AAAA,IAE1D,cAAc,CAAC,GAAG,QAAQ;aACf,CAAC,eAAe,KAAK,QAAQ,eAAe,KAAK;AAAA;AAAA;AAAA;MCtKvD,gBAAgB,gDACtBC,kBACAC,kBAFsB;AAAA,EAGzB,eAAe;AAAA,EACf,UAAU;AAAA;MCAD,sBAAsB,aAAa;AAEhD,MAAM,KAAK;MACE,gBAAgB,WAAiB,CAAC,UAAU;SAC9C;AAAA,IACH;AAAA,IACA,QAAQ;MACJ,UAAU;AAAA,QACN,EAAE,KAAK;AAAA,QACP,EAAE,OAAO,mBAAmB,UAAU,CAAC,UAAW,UAAU;AAAA;AAAA,MAEhE,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,MAAM,aAAa,KAAK,OAAO;AAAA,MACjE,eAAe;AAAA,QACX,OAAO,CAAC,SAAS,KAAK,SAAS;AAAA,QAC/B,QAAQ,CAAC,OAAO,MAAM,aAAa;gBACzB,SAAS;gBACT,KAAK,KAAK;gBACV,UAAU;AAAA;AAAA;AAAA,MAGxB,YAAY;AAAA,QACR,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,QACpC,QAAQ,CAAC,OAAO,SAAS;gBACf,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA,IAIjC,YAAY,CAAC,aAAa;AAAA,MACtB,SAAS,wBAAwB;AAAA,MACjC,SAAS,0BAA0B;AAAA;AAAA,IAEvC,UAAU,CAAC,aAAa,CAAC,UAAU,qBAAqB,MAAM,WAAW;AAAA,IACzE,WAAW;AAAA,OACN,cAAc,gBAAgB,eAAe,qBAAqB;AAAA;AAAA;AAAA;MCjClE,oBAAoB,aAAa;MACjC,mBAAmB,aAAa;MAChC,mBAAmB,aAAa;MAChC,mBAAmB,aAAa;MAEhC,eAAe,WAAiB,CAAC,UAAU;QAC9C,MAAK;SAEJ;AAAA,IACH;AAAA,IACA,QAAQ,CAAC;MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,QACH,SAAS;AAAA,UACL,SAAS;AAAA;AAAA;AAAA,MAGjB,UAAU;AAAA,QACN;AAAA,UACI,KAAK;AAAA,UACL,UAAU,CAAC,QAAQ;gBACX,iBAAiB,cAAc;oBACzB,IAAI;AAAA;mBAEP,EAAE,SAAS,IAAI,QAAQ,eAAe;AAAA;AAAA;AAAA;AAAA,MAIzD,OAAO,CAAC,SAAS;cACP,WAAW,SAAS,cAAc;iBAC/B,OAAO;iBACP,UAAU,KAAK,MAAM;iBACrB,YAAY,MAAM,aAAa,KAAK,OAAO;iBAC3C,WAAW,CAAC,UAAU;gBACrB,SAAS,MAAM;cACjB,oBAAoB;;gBAClB,OAAO,IAAI,IAAI;cAEjB,CAAC,KAAK,UAAU;qBACP,UAAU,CAAC,SAAS;;;gBAK3B,EAAE,KAAK,SAAS,OAAO;gBACvB,SAAS,KAAK,YAAY,EAAE,KAAK;cACnC,CAAC;;gBAEC,EAAE,OAAO,KAAK;eAEf,SACD,GAAG,cAAc,OAAO,QAAQ,QAAW;AAAA,YACvC,SAAS,OAAO;AAAA;AAAA;eAIrB;AAAA,UACH;AAAA,UACA;AAAA,YACI,aAAa;AAAA,YACb,gBAAgB,KAAK,MAAM,aAAa,SAAS;AAAA,YACjD,OAAO,MAAM,aAAa,KAAK,OAAO;AAAA;AAAA,UAE1C;AAAA,UACA,CAAC,QAAQ,EAAE,OAAO,MAAM,aAAa,KAAK,OAAO,0BAA0B;AAAA;AAAA;AAAA,MAGnF,eAAe;AAAA,QACX,OAAO,CAAC,EAAE,MAAM,cAAc;iBACnB,SAAS,cAAc,YAAY;AAAA;AAAA,QAE9C,QAAQ,CAAC,OAAO,MAAM,SAAS;gBACrB,SAAS,MAAM,EAAE,SAAS,KAAK;gBAC/B,KAAK,KAAK;gBACV;AAAA;AAAA;AAAA,MAGd,YAAY;AAAA,QACR,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,QACpC,QAAQ,CAAC,OAAO,SAAS;gBACf,SAAS,YAAY,QAAW,EAAE,SAAS,KAAK,MAAM;gBACtD,KAAK,KAAK;gBACV;AAAA;AAAA;AAAA;AAAA,IAIlB,YAAY,CAAC,aAAa;AAAA,MACtB,kBAAkB,wBAAwB,UAAU,CAAC;QACjD,SAAS,MAAM,MAAM,SAAS,OAAO;AAAA;AAAA;AAAA,IAG7C,UAAU,CAAC,aAAa;AAAA,MACpB,UAAU,mBAAmB,MAAM,cAAc;AAAA,MACjD,UAAU,kBAAkB,MAAM,aAAa;AAAA,MAC/C,UAAU,kBAAkB,MAAM,aAAa;AAAA,MAC/C,UAAU,kBAAkB,MAAM,OAAO;AAAA;AAAA,IAE7C,WAAW;AAAA,OACN,cAAc,eAAe,eAAe,mBAAmB;AAAA,OAC/D,cAAc,eAAe,eAAe,kBAAkB;AAAA,OAC9D,cAAc,eAAe,eAAe,kBAAkB;AAAA,OAC9D,cAAc,WAAW,eAAe,kBAAkB;AAAA;AAAA,IAE/D,MAAM,MAAM,CAAC,MAAM,MAAM,WAAW;UAC5B,WAAW;YAET,WAAW,MAAM,aAAa,IAA2B,kBAAkB;AAAA,QAC7E,UAAU,MAAM,KAAK;AAAA,QACrB,UAAU,CAAC,aAAa;gBACd,EAAE,OAAO,KAAK;eACf,SACD,GAAG,cAAc,UAAU,QAAW;AAAA,YAClC,SAAS;AAAA;AAAA;AAAA;UAMrB,CAAC;eAAiB;YAEhB,EAAE,KAAK,YAAY,aAAa;eAC7B;aAEF;AAAA,QACH;AAAA,QACA;AAAA,QACA,QAAQ,CAAC,gBAAgB;cACjB,YAAY,KAAK,SAAS;mBAAW;qBAE9B;mBACF;iBAEF;AAAA;AAAA;AAAA;AAAA;AAAA;MCrEd,MAAM,SAAS,OAAO;AAAA,EAC/B,GAAG;AAAA,EACH,QAAQ,MAAM;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;MAGS,WAAW,iCACjBC,aADiB;AAAA,EAEpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;;"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/auto-link.ts","../src/footnote/utils.ts","../src/footnote/definition.ts","../src/footnote/reference.ts","../src/table/command.ts","../src/table/utils.ts","../src/table/operator-plugin/helper.ts","../src/table/operator-plugin/actions.ts","../src/table/operator-plugin/calc-pos.ts","../src/table/operator-plugin/constant.ts","../src/table/operator-plugin/style.ts","../src/table/operator-plugin/widget.ts","../src/table/operator-plugin/index.ts","../src/table/nodes/schema.ts","../src/table/nodes/index.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/inputrules';\nimport { $prose } from '@milkdown/utils';\n\nconst urlRegex = /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-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(start, text.length + start, schema.marks.link.create({ href: text }));\n }),\n ],\n });\n\nexport const urlPlugin = $prose(() => proseUrlPlugin());\n","/* Copyright 2021, Milkdown by Mirone. */\nexport const getFootnoteRefId = (label: string) => `footnote-ref-${label}`;\n\nexport const getFootnoteDefId = (label: string) => `footnote-def-${label}`;\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';\nimport { findSelectedNodeOfType } from '@milkdown/prose';\nimport { wrappingInputRule } from '@milkdown/prose/inputrules';\nimport { NodeSelection, Plugin, PluginKey } from '@milkdown/prose/state';\nimport { EditorView } from '@milkdown/prose/view';\nimport { createNode } from '@milkdown/utils';\n\nimport { getFootnoteDefId, getFootnoteRefId } from './utils';\n\nconst key = new PluginKey('MILKDOWN_PLUGIN_FOOTNOTE_DEF_INPUT');\nexport const ModifyFootnoteDef = createCmdKey<string>('ModifyFootnoteDef');\n\nexport const footnoteDefinition = createNode((utils) => {\n const id = 'footnote_definition';\n const markdownId = 'footnoteDefinition';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'block',\n content: 'block+',\n defining: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `div[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return {\n label: dom.dataset['label'],\n };\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs['label'];\n const className = utils.getClassName(node.attrs, 'footnote-definition');\n\n const dt = document.createElement('dt');\n dt.textContent = `[${label}]:`;\n dt.onclick = () => {\n const view = ctx.get(editorViewCtx);\n const selection = NodeSelection.create(view.state.doc, view.state.selection.from - 2);\n view.dispatch(view.state.tr.setSelection(selection));\n };\n\n const a = document.createElement('a');\n a.href = `#${getFootnoteRefId(label)}`;\n a.contentEditable = 'false';\n a.textContent = '↩';\n a.onmousedown = (e) => {\n e.preventDefault();\n };\n\n return [\n 'div',\n {\n class: className,\n 'data-label': label,\n 'data-type': id,\n id: getFootnoteDefId(label),\n },\n ['div', { class: 'footnote-definition_content' }, dt, ['dd', 0]],\n ['div', { class: 'footnote-definition_anchor' }, a],\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === markdownId,\n runner: (state, node, type) => {\n state\n .openNode(type, {\n label: node['label'] as string,\n })\n .next(node.children)\n .closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state\n .openNode(markdownId, undefined, {\n label: node.attrs['label'],\n identifier: node.attrs['label'],\n })\n .next(node.content)\n .closeNode();\n },\n },\n }),\n commands: (nodeType) => [\n createCmd(ModifyFootnoteDef, (label = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, nodeType);\n if (!node) return false;\n\n const { tr } = state;\n const _tr = tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, label });\n dispatch?.(_tr.setSelection(NodeSelection.create(_tr.doc, node.pos)));\n\n return true;\n }),\n ],\n inputRules: (nodeType) => [\n wrappingInputRule(\n /(?:\\[\\^)([^:]+)(?::)$/,\n nodeType,\n (match) => {\n const label = match[1] ?? 'footnote';\n return {\n label,\n };\n },\n () => false,\n ),\n ],\n prosePlugins: (type, ctx) => {\n return [\n new Plugin({\n key,\n view: (editorView) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n width: '12em',\n placeholder: 'Input Footnote Label',\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyFootnoteDef, value);\n },\n isBindMode: true,\n });\n if (!inputChipRenderer) return {};\n const shouldDisplay = (view: EditorView) => {\n return Boolean(\n view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type),\n );\n };\n const getCurrentLabel = (view: EditorView) => {\n const result = findSelectedNodeOfType(view.state.selection, type);\n if (!result) return;\n\n const value = result.node.attrs['label'];\n return value;\n };\n const renderByView = (view: EditorView) => {\n if (!view.editable) {\n return;\n }\n const display = shouldDisplay(view);\n if (display) {\n inputChipRenderer.show(view);\n inputChipRenderer.update(getCurrentLabel(view));\n } else {\n inputChipRenderer.hide();\n }\n };\n inputChipRenderer.init(editorView);\n renderByView(editorView);\n\n return {\n update: (view, prevState) => {\n const isEqualSelection =\n prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection);\n if (isEqualSelection) return;\n\n renderByView(view);\n },\n destroy: () => {\n inputChipRenderer.destroy();\n },\n };\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';\nimport { findSelectedNodeOfType } from '@milkdown/prose';\nimport { InputRule } from '@milkdown/prose/inputrules';\nimport { NodeSelection, Plugin, PluginKey } from '@milkdown/prose/state';\nimport { EditorView } from '@milkdown/prose/view';\nimport { createNode } from '@milkdown/utils';\n\nimport { getFootnoteDefId, getFootnoteRefId } from './utils';\n\nexport const ModifyFootnoteRef = createCmdKey<string>('ModifyFootnoteRef');\nconst key = new PluginKey('MILKDOWN_PLUGIN_FOOTNOTE_REF_INPUT');\n\nexport const footnoteReference = createNode((utils) => {\n const id = 'footnote_reference';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'inline',\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return {\n label: dom.dataset['label'],\n };\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs['label'];\n const a = document.createElement('a');\n const href = `#${getFootnoteDefId(label)}`;\n a.href = href;\n a.textContent = `[${label}]`;\n a.onclick = (e) => {\n const view = ctx.get(editorViewCtx);\n if (view.editable) {\n e.preventDefault();\n }\n };\n a.ondblclick = () => {\n const view = ctx.get(editorViewCtx);\n if (view.editable) {\n window.location.href = href;\n }\n };\n return [\n 'sup',\n {\n 'data-label': label,\n 'data-type': id,\n id: getFootnoteRefId(label),\n },\n a,\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === 'footnoteReference',\n runner: (state, node, type) => {\n state.addNode(type, {\n label: node['label'] as string,\n });\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.addNode('footnoteReference', undefined, undefined, {\n label: node.attrs['label'],\n identifier: node.attrs['label'],\n });\n },\n },\n }),\n commands: (nodeType) => [\n createCmd(ModifyFootnoteRef, (label = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, nodeType);\n if (!node) return false;\n\n const { tr } = state;\n const _tr = tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, label });\n dispatch?.(_tr.setSelection(NodeSelection.create(_tr.doc, node.pos)));\n\n return true;\n }),\n ],\n inputRules: (nodeType) => [\n new InputRule(/(?:\\[\\^)([^\\]]+)(?:\\])$/, (state, match, start, end) => {\n const $start = state.doc.resolve(start);\n const index = $start.index();\n const $end = state.doc.resolve(end);\n if (!$start.parent.canReplaceWith(index, $end.index(), nodeType)) {\n return null;\n }\n const label = match[1];\n return state.tr.replaceRangeWith(\n start,\n end,\n nodeType.create({\n label,\n }),\n );\n }),\n ],\n prosePlugins: (type, ctx) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n width: '12em',\n placeholder: 'Input Footnote Label',\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyFootnoteRef, value);\n },\n isBindMode: true,\n });\n if (!inputChipRenderer) return [];\n const shouldDisplay = (view: EditorView) => {\n return Boolean(view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type));\n };\n const getCurrentLabel = (view: EditorView) => {\n const result = findSelectedNodeOfType(view.state.selection, type);\n if (!result) return;\n\n const value = result.node.attrs['label'];\n return value;\n };\n const renderByView = (view: EditorView) => {\n if (!view.editable) {\n return;\n }\n const display = shouldDisplay(view);\n if (display) {\n inputChipRenderer.show(view);\n inputChipRenderer.update(getCurrentLabel(view));\n } else {\n inputChipRenderer.hide();\n }\n };\n return [\n new Plugin({\n key,\n view: (editorView) => {\n inputChipRenderer.init(editorView);\n renderByView(editorView);\n\n return {\n update: (view, prevState) => {\n const isEqualSelection =\n prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection);\n if (isEqualSelection) return;\n\n renderByView(view);\n },\n destroy: () => {\n inputChipRenderer.destroy();\n },\n };\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Command } from '@milkdown/prose/commands';\nimport { Node, NodeType } from '@milkdown/prose/model';\nimport { Selection } from '@milkdown/prose/state';\nimport { isInTable } from '@milkdown/prose/tables';\n\nexport const exitTable =\n (node: NodeType): Command =>\n (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n const { $head } = state.selection;\n const pos = $head.after();\n const tr = state.tr.replaceWith(pos, pos, node.createAndFill() as Node);\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch?.(tr.scrollIntoView());\n return true;\n };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { cloneTr, findParentNode } from '@milkdown/prose';\nimport { Node as ProsemirrorNode, Schema } from '@milkdown/prose/model';\nimport { Selection, Transaction } from '@milkdown/prose/state';\nimport { CellSelection, TableMap, tableNodeTypes, TableRect } from '@milkdown/prose/tables';\n\nexport type CellPos = {\n pos: number;\n start: number;\n node: ProsemirrorNode;\n};\n\nexport const findTable = (selection: Selection) =>\n findParentNode((node) => node.type.spec['tableRole'] === 'table')(selection);\n\nexport const getCellsInColumn =\n (columnIndex: number) =>\n (selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection);\n if (!table) return undefined;\n const map = TableMap.get(table.node);\n if (columnIndex < 0 || columnIndex >= map.width) {\n return undefined;\n }\n\n return map.cellsInRect({ left: columnIndex, right: columnIndex + 1, top: 0, bottom: map.height }).map((pos) => {\n const node = table.node.nodeAt(pos);\n if (!node) throw new Error();\n const start = pos + table.start;\n return {\n pos: start,\n start: start + 1,\n node,\n };\n });\n };\n\nexport const getCellsInRow =\n (rowIndex: number) =>\n (selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection);\n if (!table) return undefined;\n const map = TableMap.get(table.node);\n if (rowIndex < 0 || rowIndex >= map.height) {\n return undefined;\n }\n\n return map.cellsInRect({ left: 0, right: map.width, top: rowIndex, bottom: rowIndex + 1 }).map((pos) => {\n const node = table.node.nodeAt(pos);\n if (!node) throw new Error();\n const start = pos + table.start;\n return {\n pos: start,\n start: start + 1,\n node,\n };\n });\n };\n\nexport const createTable = (schema: Schema, rowsCount = 3, colsCount = 3) => {\n const { cell: tableCell, header_cell: tableHeader, row: tableRow, table } = tableNodeTypes(schema);\n\n const cells = Array(colsCount)\n .fill(0)\n .map(() => tableCell.createAndFill(null) as ProsemirrorNode);\n\n const headerCells = Array(colsCount)\n .fill(0)\n .map(() => tableHeader.createAndFill(null) as ProsemirrorNode);\n\n const rows = Array(rowsCount)\n .fill(0)\n .map((_, i) => tableRow.create(null, i === 0 ? headerCells : cells));\n\n return table.create(null, rows);\n};\n\nexport const selectLine = (type: 'row' | 'col') => (index: number) => (tr: Transaction) => {\n const table = findTable(tr.selection);\n const isRowSelection = type === 'row';\n if (table) {\n const map = TableMap.get(table.node);\n\n // Check if the index is valid\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n const lastCell = map.positionAt(\n isRowSelection ? index : map.height - 1,\n isRowSelection ? map.width - 1 : index,\n table.node,\n );\n const $lastCell = tr.doc.resolve(table.start + lastCell);\n\n const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection;\n\n const firstCell = map.positionAt(isRowSelection ? index : 0, isRowSelection ? 0 : index, table.node);\n const $firstCell = tr.doc.resolve(table.start + firstCell);\n return cloneTr(tr.setSelection(createCellSelection($lastCell, $firstCell) as unknown as Selection));\n }\n }\n return tr;\n};\n\nexport const getCellsInTable = (selection: Selection) => {\n const table = findTable(selection);\n if (!table) {\n return;\n }\n const map = TableMap.get(table.node);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height,\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node };\n });\n};\n\nexport const selectTable = (tr: Transaction) => {\n const cells = getCellsInTable(tr.selection);\n if (cells && cells[0]) {\n const $firstCell = tr.doc.resolve(cells[0].pos);\n const last = cells[cells.length - 1];\n if (last) {\n const $lastCell = tr.doc.resolve(last.pos);\n return cloneTr(tr.setSelection(new CellSelection($lastCell, $firstCell) as unknown as Selection));\n }\n }\n return tr;\n};\n\nexport function addRowWithAlignment(tr: Transaction, { map, tableStart, table }: TableRect, row: number) {\n const rowPos = Array(row)\n .fill(0)\n .reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize;\n }, tableStart);\n\n const { cell: cellType, row: rowType } = tableNodeTypes(table.type.schema);\n\n const cells = Array(map.width)\n .fill(0)\n .map((_, col) => {\n const headerCol = table.nodeAt(map.map[col] as number);\n return cellType.createAndFill({ alignment: headerCol?.attrs['alignment'] }) as ProsemirrorNode;\n });\n\n tr.insert(rowPos, rowType.create(null, cells));\n return tr;\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { CellSelection, TableMap } from '@milkdown/prose/tables';\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { Item } from './actions';\n\nexport const getCellSelection = (view: EditorView): CellSelection => view.state.selection as unknown as CellSelection;\n\nexport const isFirstRowSelected = (selection: CellSelection) => {\n const map = TableMap.get(selection.$anchorCell.node(-1));\n const start = selection.$anchorCell.start(-1);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: 1,\n });\n const selectedCells = map.cellsInRect(\n map.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start),\n );\n\n for (let i = 0, count = cells.length; i < count; i++) {\n if (selectedCells.indexOf(cells[i] as number) === -1) {\n return false;\n }\n }\n return true;\n};\n\nexport const calculateItem = (actions: Record<string, Item>, view: EditorView) => {\n Object.values(actions).forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n item.$.classList.remove('hide');\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport { Command } from '@milkdown/prose/commands';\nimport {\n addColumnAfter,\n addColumnBefore,\n deleteColumn,\n deleteRow,\n deleteTable,\n isInTable,\n selectedRect,\n setCellAttr,\n} from '@milkdown/prose/tables';\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { addRowWithAlignment } from '../utils';\nimport { getCellSelection, isFirstRowSelected } from './helper';\n\nexport type Item = {\n $: HTMLElement;\n command: (e: Event, view: EditorView) => Command;\n disable?: (view: EditorView) => boolean;\n};\n\nexport enum Action {\n AddColLeft,\n AddColRight,\n AddRowTop,\n AddRowBottom,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Delete,\n}\n\nexport const createActions: (ctx: Ctx) => Record<Action, Item> = (ctx) => ({\n [Action.AddColLeft]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'leftArrow')?.dom as HTMLElement,\n command: () => addColumnBefore,\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AddColRight]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'rightArrow')?.dom as HTMLElement,\n command: () => addColumnAfter,\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AddRowTop]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'upArrow')?.dom as HTMLElement,\n command: () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(state.tr, rect, rect.top));\n }\n return true;\n },\n disable: (view) =>\n !getCellSelection(view).isRowSelection() ||\n getCellSelection(view).$head.parent.type.name === 'table_header',\n },\n [Action.AddRowBottom]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'downArrow')?.dom as HTMLElement,\n command: () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(state.tr, rect, rect.bottom));\n }\n return true;\n },\n disable: (view) => !getCellSelection(view).isRowSelection(),\n },\n [Action.AlignLeft]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignLeft')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'left'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AlignCenter]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignCenter')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'center'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AlignRight]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignRight')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'right'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.Delete]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'delete')?.dom as HTMLElement,\n command: (_, view) => {\n const selection = getCellSelection(view);\n const isCol = selection.isColSelection();\n const isRow = selection.isRowSelection();\n if (isCol && isRow) {\n return deleteTable;\n }\n\n if (isCol) {\n return deleteColumn;\n }\n\n return deleteRow;\n },\n disable: (view) => {\n const selection = getCellSelection(view);\n if (selection.isRowSelection()) {\n if (selection.isColSelection()) {\n return false;\n }\n return isFirstRowSelected(selection);\n }\n return false;\n },\n },\n});\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { calculateNodePosition } from '@milkdown/prose';\nimport { CellSelection } from '@milkdown/prose/tables';\nimport { EditorView } from '@milkdown/prose/view';\n\nexport const calculatePosition = (view: EditorView, dom: HTMLElement) => {\n const { selection } = view.state as unknown as { selection: CellSelection };\n const isCol = selection.isColSelection();\n const isRow = selection.isRowSelection();\n\n calculateNodePosition(view, dom, (selected, target, parent) => {\n const $editor = dom.parentElement;\n if (!$editor) {\n throw new Error();\n }\n let left = !isRow\n ? selected.left - parent.left + (selected.width - target.width) / 2\n : selected.left - parent.left - target.width / 2 - 8;\n const top = selected.top - parent.top - target.height - (isCol ? 14 : 0) - 14 + $editor.scrollTop;\n\n if (left < 0) {\n left = 0;\n }\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nexport enum ToolTipPos {\n Left = 'Left',\n Top = 'Top',\n Point = 'Point',\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Emotion, getPalette, ThemeBorder, ThemeManager, ThemeShadow, ThemeSize } from '@milkdown/core';\n\nexport const injectStyle = (themeManager: ThemeManager, { css, injectGlobal }: Emotion) => {\n const palette = getPalette(themeManager);\n const radius = themeManager.get(ThemeSize, 'radius');\n const lineWidth = themeManager.get(ThemeSize, 'lineWidth');\n\n injectGlobal`\n .milkdown {\n .tableWrapper {\n table {\n width: calc(100% - 2em) !important;\n margin: 1em 0 1em 1em !important;\n\n .milkdown-cell-left,\n .milkdown-cell-point,\n .milkdown-cell-top {\n position: absolute;\n\n &::after {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: block;\n transition: all 0.2s ease-in-out;\n background: ${palette('secondary', 0.12)};\n content: '';\n }\n\n &:hover::after {\n background: ${palette('secondary', 0.38)};\n }\n }\n\n .milkdown-cell-left {\n left: calc(-6px - 0.5em);\n top: 0;\n bottom: 0;\n width: 0.5em;\n }\n\n .milkdown-cell-top {\n left: 0;\n right: 0;\n top: calc(-6px - 0.5em);\n height: 0.5em;\n }\n\n .milkdown-cell-point {\n left: calc(-2px - 1em);\n top: calc(-2px - 1em);\n width: 1em;\n height: 1em;\n\n .icon {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n }\n }\n }\n }\n `;\n\n return css`\n display: inline-flex;\n cursor: pointer;\n z-index: 2;\n\n justify-content: space-evenly;\n\n position: absolute;\n\n border-radius: ${radius};\n\n ${themeManager.get(ThemeBorder, undefined)};\n ${themeManager.get(ThemeShadow, undefined)};\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 2em;\n line-height: 2em;\n text-align: center;\n transition: all 0.4s ease-in-out;\n\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n\n &.active {\n color: ${palette('primary')};\n }\n\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n right: 0;\n top: 0;\n width: ${lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport { Decoration, WidgetDecorationSpec } from '@milkdown/prose/view';\n\nimport { CellPos, selectLine, selectTable } from '../utils';\nimport { ToolTipPos } from './constant';\n\nconst calculateClassName = (pos: ToolTipPos) => {\n switch (pos) {\n case ToolTipPos.Left: {\n return 'milkdown-cell-left';\n }\n case ToolTipPos.Top: {\n return 'milkdown-cell-top';\n }\n case ToolTipPos.Point:\n default: {\n return 'milkdown-cell-point';\n }\n }\n};\n\nexport function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos.Point): Decoration<WidgetDecorationSpec>;\nexport function createWidget(\n ctx: Ctx,\n cell: CellPos,\n pos: ToolTipPos.Left,\n index: number,\n): Decoration<WidgetDecorationSpec>;\nexport function createWidget(\n ctx: Ctx,\n cell: CellPos,\n pos: ToolTipPos.Top,\n index: number,\n): Decoration<WidgetDecorationSpec>;\nexport function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos, index = 0) {\n return Decoration.widget(cell.pos + 1, (view) => {\n const div = document.createElement('div');\n div.classList.add(calculateClassName(pos));\n if (pos === ToolTipPos.Point) {\n div.appendChild(ctx.get(themeManagerCtx).get(ThemeIcon, 'select')?.dom as HTMLElement);\n }\n div.addEventListener('mousedown', (e) => {\n if (!view) return;\n\n e.preventDefault();\n switch (pos) {\n case ToolTipPos.Point: {\n view.dispatch(selectTable(view.state.tr));\n return;\n }\n case ToolTipPos.Left: {\n view.dispatch(selectLine('row')(index)(view.state.tr));\n return;\n }\n case ToolTipPos.Top: {\n view.dispatch(selectLine('col')(index)(view.state.tr));\n return;\n }\n }\n });\n return div;\n });\n}\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Ctx } from '@milkdown/core';\nimport { Plugin, PluginKey } from '@milkdown/prose/state';\nimport { CellSelection } from '@milkdown/prose/tables';\nimport { Decoration, DecorationSet } from '@milkdown/prose/view';\nimport { Utils } from '@milkdown/utils';\n\nimport { CellPos, getCellsInColumn, getCellsInRow } from '../utils';\nimport { createActions } from './actions';\nimport { calculatePosition } from './calc-pos';\nimport { ToolTipPos } from './constant';\nimport { calculateItem } from './helper';\nimport { injectStyle } from './style';\nimport { createWidget } from './widget';\n\nexport const key = 'MILKDOWN_PLUGIN_TABLE';\n\nexport const operatorPlugin = (ctx: Ctx, utils: Utils) => {\n return new Plugin({\n key: new PluginKey('MILKDOWN_TABLE_OP'),\n props: {\n decorations: (state) => {\n const decorations: Decoration[] = [];\n const leftCells = getCellsInColumn(0)(state.selection);\n if (!leftCells) return null;\n const topCells = getCellsInRow(0)(state.selection);\n if (!topCells) return null;\n\n const [topLeft] = leftCells;\n\n decorations.push(createWidget(ctx, topLeft as CellPos, ToolTipPos.Point));\n leftCells.forEach((cell, i) => {\n decorations.push(createWidget(ctx, cell, ToolTipPos.Left, i));\n });\n topCells.forEach((cell, i) => {\n decorations.push(createWidget(ctx, cell, ToolTipPos.Top, i));\n });\n\n return DecorationSet.create(state.doc, decorations);\n },\n },\n view: (editorView) => {\n const items = Object.fromEntries(Object.entries(createActions(ctx)).filter(([, value]) => value.$ != null));\n const tooltip = document.createElement('div');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion));\n if (style) {\n tooltip.classList.add(style);\n }\n });\n tooltip.classList.add('table-tooltip', 'hide');\n Object.values(items).forEach(({ $ }) => tooltip.appendChild($));\n editorView.dom.parentNode?.appendChild(tooltip);\n\n const listener = (e: Event) => {\n if (!editorView) return;\n e.stopPropagation();\n e.preventDefault();\n Object.values(items).forEach(({ $, command }) => {\n if ($.contains(e.target as Element)) {\n command(e, editorView)(editorView.state, editorView.dispatch, editorView);\n }\n });\n };\n\n const hide = () => {\n tooltip.classList.add('hide');\n };\n\n tooltip.addEventListener('mousedown', listener);\n\n return {\n update: (view, prevState) => {\n const state = view.state;\n\n if (prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection)) return;\n\n const isCellSelection = state.selection instanceof CellSelection;\n\n if (!isCellSelection || !view.editable) {\n hide();\n return;\n }\n\n calculateItem(items, view);\n if (Object.values(items).every(({ $ }) => $.classList.contains('hide'))) {\n hide();\n return;\n }\n tooltip.classList.remove('hide');\n calculatePosition(view, tooltip);\n },\n destroy: () => {\n tooltip.removeEventListener('mousedown', listener);\n tooltip.remove();\n },\n };\n },\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { tableNodes as tableNodesSpecCreator } from '@milkdown/prose/tables';\n\nexport const schema = tableNodesSpecCreator({\n tableGroup: 'block',\n cellContent: 'paragraph',\n cellAttributes: {\n alignment: {\n default: 'left',\n getFromDOM: (dom) => (dom as HTMLElement).style.textAlign || 'left',\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || 'left'}`;\n },\n },\n },\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey, MarkdownNode, schemaCtx } from '@milkdown/core';\nimport { InputRule } from '@milkdown/prose/inputrules';\nimport { NodeType } from '@milkdown/prose/model';\nimport { Plugin, PluginKey, Selection, TextSelection } from '@milkdown/prose/state';\nimport { columnResizing, goToNextCell, tableEditing } from '@milkdown/prose/tables';\nimport { createPlugin, createShortcut } from '@milkdown/utils';\n\nimport { exitTable } from '../command';\nimport { operatorPlugin } from '../operator-plugin';\nimport { createTable } from '../utils';\nimport { schema } from './schema';\n\nexport const SupportedKeys = {\n NextCell: 'NextCell',\n PrevCell: 'PrevCell',\n ExitTable: 'ExitTable',\n} as const;\nexport type SupportedKeys = typeof SupportedKeys;\n\ntype Keys = keyof SupportedKeys;\n\nexport const PrevCell = createCmdKey('PrevCell');\nexport const NextCell = createCmdKey('NextCell');\nexport const BreakTable = createCmdKey('BreakTable');\nexport const InsertTable = createCmdKey('InsertTable');\n\nexport const TableContentFilterPluginKey = new PluginKey('MILKDOWN_TABLE_CONTENT_FILTER');\n\nexport const table = createPlugin<Keys, Record<string, unknown>, keyof typeof schema>((utils) => {\n return {\n schema: () => ({\n node: {\n table: {\n ...schema.table,\n parseMarkdown: {\n match: (node) => node.type === 'table',\n runner: (state, node, type) => {\n const align = node['align'] as (string | null)[];\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align,\n isHeader: i === 0,\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table',\n runner: (state, node) => {\n const firstLine = node.content.firstChild?.content;\n if (!firstLine) return;\n\n const align: (string | null)[] = [];\n firstLine.forEach((cell) => {\n align.push(cell.attrs['alignment']);\n });\n state.openNode('table', undefined, { align });\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n table_row: {\n ...schema.table_row,\n parseMarkdown: {\n match: (node) => node.type === 'tableRow',\n runner: (state, node, type) => {\n const align = node['align'] as (string | null)[];\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align: align[i],\n isHeader: node['isHeader'],\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_row',\n runner: (state, node) => {\n state.openNode('tableRow');\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n table_cell: {\n ...schema.table_cell,\n parseMarkdown: {\n match: (node) => node.type === 'tableCell' && !node['isHeader'],\n runner: (state, node, type) => {\n const align = node['align'] as string;\n state\n .openNode(type, { alignment: align })\n .openNode(state.schema.nodes['paragraph'] as NodeType)\n .next(node.children)\n .closeNode()\n .closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_cell',\n runner: (state, node) => {\n state.openNode('tableCell').next(node.content).closeNode();\n },\n },\n },\n table_header: {\n ...schema.table_header,\n parseMarkdown: {\n match: (node) => node.type === 'tableCell' && !!node['isHeader'],\n runner: (state, node, type) => {\n const align = node['align'] as string;\n state.openNode(type, { alignment: align });\n state.openNode(state.schema.nodes['paragraph'] as NodeType);\n state.next(node.children);\n state.closeNode();\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_header',\n runner: (state, node) => {\n state.openNode('tableCell');\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n },\n }),\n inputRules: (nodeType, ctx) => [\n new InputRule(/^\\|\\|\\s$/, (state, _match, start, end) => {\n const $start = state.doc.resolve(start);\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType.table))\n return null;\n\n const tableNode = createTable(ctx.get(schemaCtx));\n const tr = state.tr.replaceRangeWith(start, end, tableNode).scrollIntoView();\n return tr.setSelection(TextSelection.create(tr.doc, start + 3));\n }),\n ],\n commands: (_, ctx) => [\n createCmd(PrevCell, () => goToNextCell(-1)),\n createCmd(NextCell, () => goToNextCell(1)),\n createCmd(BreakTable, () => exitTable(ctx.get(schemaCtx).nodes['paragraph'] as NodeType)),\n createCmd(InsertTable, () => (state, dispatch) => {\n const { selection, tr } = state;\n const { from } = selection;\n const table = createTable(ctx.get(schemaCtx));\n const _tr = tr.replaceSelectionWith(table);\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true);\n if (sel) {\n dispatch?.(_tr.setSelection(sel));\n }\n return true;\n }),\n ],\n shortcuts: {\n [SupportedKeys.NextCell]: createShortcut(NextCell, 'Mod-]'),\n [SupportedKeys.PrevCell]: createShortcut(PrevCell, 'Mod-['),\n [SupportedKeys.ExitTable]: createShortcut(BreakTable, 'Mod-Enter'),\n },\n prosePlugins: (_, ctx) => {\n return [\n operatorPlugin(ctx, utils),\n columnResizing({}),\n tableEditing(),\n new Plugin({\n key: TableContentFilterPluginKey,\n filterTransaction: (tr, state) => {\n const isInsertHr = tr.getMeta('hardbreak');\n const [step] = tr.steps;\n if (isInsertHr && step) {\n const { from } = step as unknown as { from: number };\n const $from = state.doc.resolve(from);\n let curDepth = $from.depth;\n let canApply = true;\n while (curDepth > 0) {\n if ($from.node(curDepth).type.name === 'table') {\n canApply = false;\n }\n curDepth--;\n }\n return canApply;\n }\n return true;\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { SupportedKeys as CommonmarkKeys } from '@milkdown/preset-commonmark';\n\nimport { SupportedKeys as TableKeys } from './table';\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 { createCmd, createCmdKey } from '@milkdown/core';\nimport { markRule } from '@milkdown/prose';\nimport { toggleMark } from '@milkdown/prose/commands';\nimport { createMark, createShortcut } from '@milkdown/utils';\n\nimport { SupportedKeys } from './supported-keys';\n\ntype Keys = SupportedKeys['StrikeThrough'];\n\nexport const ToggleStrikeThrough = createCmdKey('ToggleStrikeThrough');\n\nconst id = 'strike_through';\nexport const strikeThrough = createMark<Keys>((utils) => {\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') }],\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 { createCmd, createCmdKey, editorViewCtx, ThemeTaskListItemType } from '@milkdown/core';\nimport { wrapIn } from '@milkdown/prose/commands';\nimport { wrappingInputRule } from '@milkdown/prose/inputrules';\nimport { liftListItem, sinkListItem, splitListItem } from '@milkdown/prose/schema-list';\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('SplitTaskListItem');\nexport const SinkTaskListItem = createCmdKey('SinkTaskListItem');\nexport const LiftTaskListItem = createCmdKey('LiftTaskListItem');\nexport const TurnIntoTaskList = createCmdKey('TurnIntoTaskList');\n\nexport const taskListItem = createNode<Keys>((utils) => {\n const id = 'task_list_item';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'listItem',\n content: 'paragraph block*',\n defining: true,\n priority: 60,\n attrs: {\n checked: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'li[data-type=\"task-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 const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.checked = node.attrs['checked'];\n checkbox.className = utils.getClassName(node.attrs, 'task-list-item_checkbox');\n checkbox.onchange = (event) => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) return;\n const view = ctx.get(editorViewCtx);\n\n if (!view.editable) {\n checkbox.checked = !checkbox.checked;\n\n return;\n }\n\n const { top, left } = target.getBoundingClientRect();\n const result = view.posAtCoords({ top, left });\n if (!result) return;\n\n const { tr } = view.state;\n\n view.dispatch(\n tr.setNodeMarkup(result.inside, undefined, {\n checked: target.checked,\n }),\n );\n };\n return [\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'),\n },\n checkbox,\n ['span', { class: utils.getClassName(node.attrs, 'task-list-item_body') }, 0],\n ];\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: () => (node, view, getPos) => {\n let currNode = node;\n\n const renderer = utils.themeManager.get<ThemeTaskListItemType>('task-list-item', {\n editable: () => view.editable,\n onChange: (selected) => {\n const { tr } = view.state;\n view.dispatch(\n tr.setNodeMarkup(getPos(), undefined, {\n checked: selected,\n }),\n );\n },\n });\n\n if (!renderer) return {};\n\n const { dom, contentDOM, onUpdate } = renderer;\n onUpdate(currNode);\n\n return {\n dom,\n contentDOM,\n update: (updatedNode) => {\n if (updatedNode.type.name !== id) return false;\n\n currNode = updatedNode;\n onUpdate(currNode);\n\n return true;\n },\n };\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commands as commonmarkCommands, commonmark } from '@milkdown/preset-commonmark';\nimport { $remark, AtomList } from '@milkdown/utils';\nimport remarkGFM from 'remark-gfm';\n\nimport { urlPlugin } from './auto-link';\nimport { footnoteReference } from './footnote';\nimport { footnoteDefinition } from './footnote/definition';\nimport { strikeThrough, ToggleStrikeThrough } from './strike-through';\nimport { table } from './table';\nimport {\n LiftTaskListItem,\n SinkTaskListItem,\n SplitTaskListItem,\n taskListItem,\n TurnIntoTaskList,\n} from './task-list-item';\n\nexport * from './footnote';\nexport * from './strike-through';\nexport { SupportedKeys } from './supported-keys';\nexport {\n BreakTable,\n // command\n createTable,\n InsertTable,\n NextCell,\n PrevCell,\n // gather\n table,\n} from './table';\nexport * from './task-list-item';\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([\n ...commonmark,\n $remark(() => remarkGFM),\n table(),\n urlPlugin,\n strikeThrough(),\n taskListItem(),\n footnoteReference(),\n footnoteDefinition(),\n]);\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":["key","tableNodesSpecCreator","SupportedKeys","CommonmarkKeys","TableKeys","commonmarkCommands"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export declare const ToggleStrikeThrough: import("@milkdown/core").CmdKey<undefined>;
2
- export declare const strikeThrough: import("@milkdown/utils/lib/types").WithExtend<"StrikeThrough", import("@milkdown/utils").UnknownRecord, import("prosemirror-model").MarkType<any>, {
2
+ export declare const strikeThrough: import("@milkdown/utils/lib/types").WithExtend<"StrikeThrough", import("@milkdown/utils").UnknownRecord, import("@milkdown/prose/model").MarkType<any>, {
3
3
  id: string;
4
4
  schema: (ctx: import("@milkdown/core").Ctx) => import("@milkdown/core").MarkSchema;
5
5
  view?: ((ctx: import("@milkdown/core").Ctx) => import("@milkdown/prose").MarkViewFactory) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"strike-through.d.ts","sourceRoot":"","sources":["../src/strike-through.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,mBAAmB,4CAAsC,CAAC;AAGvE,eAAO,MAAM,aAAa;;;;EAiCxB,CAAC"}
1
+ {"version":3,"file":"strike-through.d.ts","sourceRoot":"","sources":["../src/strike-through.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,mBAAmB,4CAAsC,CAAC;AAGvE,eAAO,MAAM,aAAa;;;;EAiCxB,CAAC"}
@@ -1,3 +1,4 @@
1
- import { Command, NodeType } from '@milkdown/prose';
1
+ import { Command } from '@milkdown/prose/commands';
2
+ import { NodeType } from '@milkdown/prose/model';
2
3
  export declare const exitTable: (node: NodeType) => Command;
3
4
  //# sourceMappingURL=command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/table/command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAmB,QAAQ,EAAa,MAAM,iBAAiB,CAAC;AAEhF,eAAO,MAAM,SAAS,SACX,QAAQ,KAAG,OAWjB,CAAC"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/table/command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIvD,eAAO,MAAM,SAAS,SACX,QAAQ,KAAG,OAWjB,CAAC"}
@@ -1,4 +1,5 @@
1
- import { NodeType } from '@milkdown/prose';
1
+ import { NodeType } from '@milkdown/prose/model';
2
+ import { PluginKey } from '@milkdown/prose/state';
2
3
  export declare const SupportedKeys: {
3
4
  readonly NextCell: "NextCell";
4
5
  readonly PrevCell: "PrevCell";
@@ -9,16 +10,17 @@ export declare const PrevCell: import("@milkdown/core").CmdKey<undefined>;
9
10
  export declare const NextCell: import("@milkdown/core").CmdKey<undefined>;
10
11
  export declare const BreakTable: import("@milkdown/core").CmdKey<undefined>;
11
12
  export declare const InsertTable: import("@milkdown/core").CmdKey<undefined>;
13
+ export declare const TableContentFilterPluginKey: PluginKey<any, any>;
12
14
  export declare const table: import("@milkdown/utils/lib/types").WithExtend<"NextCell" | "PrevCell" | "ExitTable", Record<string, unknown>, {
13
15
  table: NodeType<any>;
14
16
  table_header: NodeType<any>;
15
17
  table_row: NodeType<any>;
16
18
  table_cell: NodeType<any>;
17
19
  } & {
18
- [x: string]: import("prosemirror-model").MarkType<any>;
20
+ [x: string]: import("@milkdown/prose/model").MarkType<any>;
19
21
  }, {
20
22
  schema?: ((ctx: import("@milkdown/core").Ctx) => {
21
- node?: Record<keyof import("@milkdown/prose").TableNodes, import("@milkdown/core").NodeSchema> | undefined;
23
+ node?: Record<keyof import("@milkdown/prose/tables").TableNodes, import("@milkdown/core").NodeSchema> | undefined;
22
24
  mark?: Record<string, import("@milkdown/core").MarkSchema> | undefined;
23
25
  }) | undefined;
24
26
  view?: ((ctx: import("@milkdown/core").Ctx) => Partial<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/table/nodes/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAIH,QAAQ,EAIX,MAAM,iBAAiB,CAAC;AAQzB,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AACX,oBAAY,aAAa,GAAG,OAAO,aAAa,CAAC;AAIjD,eAAO,MAAM,QAAQ,4CAA2B,CAAC;AACjD,eAAO,MAAM,QAAQ,4CAA2B,CAAC;AACjD,eAAO,MAAM,UAAU,4CAA6B,CAAC;AACrD,eAAO,MAAM,WAAW,4CAA8B,CAAC;AAEvD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;EA8IhB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/table/nodes/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAU,SAAS,EAA4B,MAAM,uBAAuB,CAAC;AASpF,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AACX,oBAAY,aAAa,GAAG,OAAO,aAAa,CAAC;AAIjD,eAAO,MAAM,QAAQ,4CAA2B,CAAC;AACjD,eAAO,MAAM,QAAQ,4CAA2B,CAAC;AACjD,eAAO,MAAM,UAAU,4CAA6B,CAAC;AACrD,eAAO,MAAM,WAAW,4CAA8B,CAAC;AAEvD,eAAO,MAAM,2BAA2B,qBAAiD,CAAC;AAE1F,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;EAuKhB,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const schema: import("@milkdown/prose").TableNodes;
1
+ export declare const schema: import("@milkdown/prose/tables").TableNodes;
2
2
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/table/nodes/schema.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,sCAYjB,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/table/nodes/schema.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,6CAYjB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { Ctx } from '@milkdown/core';
2
- import { Command, EditorView } from '@milkdown/prose';
2
+ import { Command } from '@milkdown/prose/commands';
3
+ import { EditorView } from '@milkdown/prose/view';
3
4
  export declare type Item = {
4
5
  $: HTMLElement;
5
6
  command: (e: Event, view: EditorView) => Command;
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/actions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAA8B,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAGH,OAAO,EAIP,UAAU,EAIb,MAAM,iBAAiB,CAAC;AAKzB,oBAAY,IAAI,GAAG;IACf,CAAC,EAAE,WAAW,CAAC;IACf,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;CAC3C,CAAC;AAEF,oBAAY,MAAM;IACd,UAAU,IAAA;IACV,WAAW,IAAA;IACX,SAAS,IAAA;IACT,YAAY,IAAA;IACZ,SAAS,IAAA;IACT,WAAW,IAAA;IACX,UAAU,IAAA;IACV,MAAM,IAAA;CACT;AAED,eAAO,MAAM,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CA+E3D,CAAC"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/actions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAA8B,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKlD,oBAAY,IAAI,GAAG;IACf,CAAC,EAAE,WAAW,CAAC;IACf,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;CAC3C,CAAC;AAEF,oBAAY,MAAM;IACd,UAAU,IAAA;IACV,WAAW,IAAA;IACX,SAAS,IAAA;IACT,YAAY,IAAA;IACZ,SAAS,IAAA;IACT,WAAW,IAAA;IACX,UAAU,IAAA;IACV,MAAM,IAAA;CACT;AAED,eAAO,MAAM,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CA+E3D,CAAC"}
@@ -1,3 +1,3 @@
1
- import { EditorView } from '@milkdown/prose';
1
+ import { EditorView } from '@milkdown/prose/view';
2
2
  export declare const calculatePosition: (view: EditorView, dom: HTMLElement) => void;
3
3
  //# sourceMappingURL=calc-pos.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calc-pos.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/calc-pos.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwC,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnF,eAAO,MAAM,iBAAiB,SAAU,UAAU,OAAO,WAAW,SAoBnE,CAAC"}
1
+ {"version":3,"file":"calc-pos.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/calc-pos.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,eAAO,MAAM,iBAAiB,SAAU,UAAU,OAAO,WAAW,SAoBnE,CAAC"}
@@ -1,4 +1,5 @@
1
- import { CellSelection, EditorView } from '@milkdown/prose';
1
+ import { CellSelection } from '@milkdown/prose/tables';
2
+ import { EditorView } from '@milkdown/prose/view';
2
3
  import { Item } from './actions';
3
4
  export declare const getCellSelection: (view: EditorView) => CellSelection;
4
5
  export declare const isFirstRowSelected: (selection: CellSelection) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAY,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,eAAO,MAAM,gBAAgB,SAAU,UAAU,KAAG,aAAiE,CAAC;AAEtH,eAAO,MAAM,kBAAkB,cAAe,aAAa,YAmB1D,CAAC;AAEF,eAAO,MAAM,aAAa,YAAa,OAAO,MAAM,EAAE,IAAI,CAAC,QAAQ,UAAU,SAS5E,CAAC"}
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAY,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,eAAO,MAAM,gBAAgB,SAAU,UAAU,KAAG,aAAiE,CAAC;AAEtH,eAAO,MAAM,kBAAkB,cAAe,aAAa,YAmB1D,CAAC;AAEF,eAAO,MAAM,aAAa,YAAa,OAAO,MAAM,EAAE,IAAI,CAAC,QAAQ,UAAU,SAS5E,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Ctx } from '@milkdown/core';
2
- import { Plugin } from '@milkdown/prose';
2
+ import { Plugin } from '@milkdown/prose/state';
3
3
  import { Utils } from '@milkdown/utils';
4
4
  export declare const key = "MILKDOWN_PLUGIN_TABLE";
5
5
  export declare const operatorPlugin: (ctx: Ctx, utils: Utils) => Plugin<any, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAA4C,MAAM,EAAa,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUxC,eAAO,MAAM,GAAG,0BAA0B,CAAC;AAE3C,eAAO,MAAM,cAAc,QAAS,GAAG,SAAS,KAAK,qBAkFpD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAa,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUxC,eAAO,MAAM,GAAG,0BAA0B,CAAC;AAE3C,eAAO,MAAM,cAAc,QAAS,GAAG,SAAS,KAAK,qBAkFpD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Ctx } from '@milkdown/core';
2
- import { Decoration, WidgetDecorationSpec } from '@milkdown/prose';
2
+ import { Decoration, WidgetDecorationSpec } from '@milkdown/prose/view';
3
3
  import { CellPos } from '../utils';
4
4
  import { ToolTipPos } from './constant';
5
5
  export declare function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos.Point): Decoration<WidgetDecorationSpec>;
@@ -1 +1 @@
1
- {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/widget.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAA8B,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,OAAO,EAA2B,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiBxC,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC/G,wBAAgB,YAAY,CACxB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,UAAU,CAAC,IAAI,EACpB,KAAK,EAAE,MAAM,GACd,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACpC,wBAAgB,YAAY,CACxB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,UAAU,CAAC,GAAG,EACnB,KAAK,EAAE,MAAM,GACd,UAAU,CAAC,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../../src/table/operator-plugin/widget.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAA8B,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,OAAO,EAA2B,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiBxC,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC/G,wBAAgB,YAAY,CACxB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,UAAU,CAAC,IAAI,EACpB,KAAK,EAAE,MAAM,GACd,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACpC,wBAAgB,YAAY,CACxB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,UAAU,CAAC,GAAG,EACnB,KAAK,EAAE,MAAM,GACd,UAAU,CAAC,oBAAoB,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
- /// <reference types="prosemirror-model" />
2
- import { Node as ProsemirrorNode, Schema, Selection, TableRect, Transaction } from '@milkdown/prose';
1
+ import { Node as ProsemirrorNode, Schema } from '@milkdown/prose/model';
2
+ import { Selection, Transaction } from '@milkdown/prose/state';
3
+ import { TableRect } from '@milkdown/prose/tables';
3
4
  export declare type CellPos = {
4
5
  pos: number;
5
6
  start: number;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/table/utils.ts"],"names":[],"mappings":";AACA,OAAO,EAIH,IAAI,IAAI,eAAe,EACvB,MAAM,EACN,SAAS,EAGT,SAAS,EACT,WAAW,EACd,MAAM,iBAAiB,CAAC;AAEzB,oBAAY,OAAO,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,SAAS,cAAe,SAAS,6DACkC,CAAC;AAEjF,eAAO,MAAM,gBAAgB,gBACX,MAAM,iBACR,SAAS,KAAG,OAAO,EAAE,GAAG,SAkBnC,CAAC;AAEN,eAAO,MAAM,aAAa,aACX,MAAM,iBACL,SAAS,KAAG,OAAO,EAAE,GAAG,SAkBnC,CAAC;AAEN,eAAO,MAAM,WAAW,WAAY,MAAM,iEAgBzC,CAAC;AAEF,eAAO,MAAM,UAAU,SAAU,KAAK,GAAG,KAAK,aAAa,MAAM,UAAU,WAAW,QAuBrF,CAAC;AAEF,eAAO,MAAM,eAAe,cAAe,SAAS;;;;eAiBnD,CAAC;AAEF,eAAO,MAAM,WAAW,OAAQ,WAAW,QAW1C,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,oBAkBtG"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/table/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAA2C,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE5F,oBAAY,OAAO,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,SAAS,cAAe,SAAS,6DACkC,CAAC;AAEjF,eAAO,MAAM,gBAAgB,gBACX,MAAM,iBACR,SAAS,KAAG,OAAO,EAAE,GAAG,SAkBnC,CAAC;AAEN,eAAO,MAAM,aAAa,aACX,MAAM,iBACL,SAAS,KAAG,OAAO,EAAE,GAAG,SAkBnC,CAAC;AAEN,eAAO,MAAM,WAAW,WAAY,MAAM,iEAgBzC,CAAC;AAEF,eAAO,MAAM,UAAU,SAAU,KAAK,GAAG,KAAK,aAAa,MAAM,UAAU,WAAW,QAuBrF,CAAC;AAEF,eAAO,MAAM,eAAe,cAAe,SAAS;;;;eAiBnD,CAAC;AAEF,eAAO,MAAM,WAAW,OAAQ,WAAW,QAW1C,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,oBAkBtG"}
@@ -4,7 +4,7 @@ export declare const SplitTaskListItem: import("@milkdown/core").CmdKey<undefine
4
4
  export declare const SinkTaskListItem: import("@milkdown/core").CmdKey<undefined>;
5
5
  export declare const LiftTaskListItem: import("@milkdown/core").CmdKey<undefined>;
6
6
  export declare const TurnIntoTaskList: import("@milkdown/core").CmdKey<undefined>;
7
- export declare const taskListItem: import("@milkdown/utils/lib/types").WithExtend<Keys, import("@milkdown/utils").UnknownRecord, import("prosemirror-model").NodeType<any>, {
7
+ export declare const taskListItem: import("@milkdown/utils/lib/types").WithExtend<Keys, import("@milkdown/utils").UnknownRecord, import("@milkdown/prose/model").NodeType<any>, {
8
8
  id: string;
9
9
  schema: (ctx: import("@milkdown/core").Ctx) => import("@milkdown/core").NodeSchema;
10
10
  view?: ((ctx: import("@milkdown/core").Ctx) => import("@milkdown/prose").NodeViewFactory) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"task-list-item.d.ts","sourceRoot":"","sources":["../src/task-list-item.ts"],"names":[],"mappings":"AAKA,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,4CAAoC,CAAC;AACnE,eAAO,MAAM,gBAAgB,4CAAmC,CAAC;AACjE,eAAO,MAAM,gBAAgB,4CAAmC,CAAC;AACjE,eAAO,MAAM,gBAAgB,4CAAmC,CAAC;AAEjE,eAAO,MAAM,YAAY;;;;EAuIvB,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,4CAAoC,CAAC;AACnE,eAAO,MAAM,gBAAgB,4CAAmC,CAAC;AACjE,eAAO,MAAM,gBAAgB,4CAAmC,CAAC;AACjE,eAAO,MAAM,gBAAgB,4CAAmC,CAAC;AAEjE,eAAO,MAAM,YAAY;;;;EAuIvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milkdown/preset-gfm",
3
- "version": "6.0.2",
3
+ "version": "6.1.0",
4
4
  "type": "module",
5
5
  "main": "./lib/index.es.js",
6
6
  "types": "./lib/index.d.ts",
@@ -17,18 +17,18 @@
17
17
  "gfm"
18
18
  ],
19
19
  "devDependencies": {
20
- "@milkdown/core": "6.0.2",
21
- "@milkdown/prose": "6.0.2",
22
- "@milkdown/design-system": "6.0.2",
23
- "@milkdown/preset-commonmark": "6.0.2"
20
+ "@milkdown/core": "6.1.0",
21
+ "@milkdown/design-system": "6.1.0",
22
+ "@milkdown/preset-commonmark": "6.1.0",
23
+ "@milkdown/prose": "6.1.0"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "@milkdown/core": "^6.0.1",
27
- "@milkdown/prose": "^6.0.1",
28
- "@milkdown/preset-commonmark": "^6.0.1"
27
+ "@milkdown/preset-commonmark": "^6.0.1",
28
+ "@milkdown/prose": "^6.0.1"
29
29
  },
30
30
  "dependencies": {
31
- "@milkdown/utils": "6.0.2",
31
+ "@milkdown/utils": "6.1.0",
32
32
  "remark-gfm": "^3.0.0",
33
33
  "tslib": "^2.3.1"
34
34
  },
@@ -59,8 +59,7 @@
59
59
  "scripts": {
60
60
  "start": "concurrently -n es,dts \"vite build --watch\" \"tsc --emitDeclarationOnly --watch\"",
61
61
  "test": "vitest",
62
- "tsc": "tsc --noEmit",
63
- "build": "vite build && tsc --emitDeclarationOnly"
64
- },
65
- "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 { gfm, blockquote, SupportedKeys } from '@milkdown/preset-gfm';\n\nconst nodes = gfm.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 { gfm, paragraph, heading } from '@milkdown/preset-gfm';\n\nconst nodes = gfm\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"
62
+ "tsc": "tsc --noEmit && echo",
63
+ "build": "tsc --emitDeclarationOnly && vite build"
64
+ }
66
65
  }
package/src/auto-link.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
- import { InputRule, inputRules } from '@milkdown/prose';
2
+ import { InputRule, inputRules } from '@milkdown/prose/inputrules';
3
3
  import { $prose } from '@milkdown/utils';
4
4
 
5
5
  const urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/;
@@ -1,14 +1,10 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
 
3
3
  import { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';
4
- import {
5
- EditorView,
6
- findSelectedNodeOfType,
7
- NodeSelection,
8
- Plugin,
9
- PluginKey,
10
- wrappingInputRule,
11
- } from '@milkdown/prose';
4
+ import { findSelectedNodeOfType } from '@milkdown/prose';
5
+ import { wrappingInputRule } from '@milkdown/prose/inputrules';
6
+ import { NodeSelection, Plugin, PluginKey } from '@milkdown/prose/state';
7
+ import { EditorView } from '@milkdown/prose/view';
12
8
  import { createNode } from '@milkdown/utils';
13
9
 
14
10
  import { getFootnoteDefId, getFootnoteRefId } from './utils';
@@ -1,7 +1,10 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
 
3
3
  import { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';
4
- import { EditorView, findSelectedNodeOfType, InputRule, NodeSelection, Plugin, PluginKey } from '@milkdown/prose';
4
+ import { findSelectedNodeOfType } from '@milkdown/prose';
5
+ import { InputRule } from '@milkdown/prose/inputrules';
6
+ import { NodeSelection, Plugin, PluginKey } from '@milkdown/prose/state';
7
+ import { EditorView } from '@milkdown/prose/view';
5
8
  import { createNode } from '@milkdown/utils';
6
9
 
7
10
  import { getFootnoteDefId, getFootnoteRefId } from './utils';
@@ -1,6 +1,7 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import { createCmd, createCmdKey } from '@milkdown/core';
3
- import { markRule, toggleMark } from '@milkdown/prose';
3
+ import { markRule } from '@milkdown/prose';
4
+ import { toggleMark } from '@milkdown/prose/commands';
4
5
  import { createMark, createShortcut } from '@milkdown/utils';
5
6
 
6
7
  import { SupportedKeys } from './supported-keys';
@@ -1,5 +1,8 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
- import { Command, isInTable, Node, NodeType, Selection } from '@milkdown/prose';
2
+ import { Command } from '@milkdown/prose/commands';
3
+ import { Node, NodeType } from '@milkdown/prose/model';
4
+ import { Selection } from '@milkdown/prose/state';
5
+ import { isInTable } from '@milkdown/prose/tables';
3
6
 
4
7
  export const exitTable =
5
8
  (node: NodeType): Command =>
@@ -1,14 +1,9 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import { createCmd, createCmdKey, MarkdownNode, schemaCtx } from '@milkdown/core';
3
- import {
4
- columnResizing,
5
- goToNextCell,
6
- InputRule,
7
- NodeType,
8
- Selection,
9
- tableEditing,
10
- TextSelection,
11
- } from '@milkdown/prose';
3
+ import { InputRule } from '@milkdown/prose/inputrules';
4
+ import { NodeType } from '@milkdown/prose/model';
5
+ import { Plugin, PluginKey, Selection, TextSelection } from '@milkdown/prose/state';
6
+ import { columnResizing, goToNextCell, tableEditing } from '@milkdown/prose/tables';
12
7
  import { createPlugin, createShortcut } from '@milkdown/utils';
13
8
 
14
9
  import { exitTable } from '../command';
@@ -30,6 +25,8 @@ export const NextCell = createCmdKey('NextCell');
30
25
  export const BreakTable = createCmdKey('BreakTable');
31
26
  export const InsertTable = createCmdKey('InsertTable');
32
27
 
28
+ export const TableContentFilterPluginKey = new PluginKey('MILKDOWN_TABLE_CONTENT_FILTER');
29
+
33
30
  export const table = createPlugin<Keys, Record<string, unknown>, keyof typeof schema>((utils) => {
34
31
  return {
35
32
  schema: () => ({
@@ -169,7 +166,32 @@ export const table = createPlugin<Keys, Record<string, unknown>, keyof typeof sc
169
166
  [SupportedKeys.ExitTable]: createShortcut(BreakTable, 'Mod-Enter'),
170
167
  },
171
168
  prosePlugins: (_, ctx) => {
172
- return [operatorPlugin(ctx, utils), columnResizing({}), tableEditing()];
169
+ return [
170
+ operatorPlugin(ctx, utils),
171
+ columnResizing({}),
172
+ tableEditing(),
173
+ new Plugin({
174
+ key: TableContentFilterPluginKey,
175
+ filterTransaction: (tr, state) => {
176
+ const isInsertHr = tr.getMeta('hardbreak');
177
+ const [step] = tr.steps;
178
+ if (isInsertHr && step) {
179
+ const { from } = step as unknown as { from: number };
180
+ const $from = state.doc.resolve(from);
181
+ let curDepth = $from.depth;
182
+ let canApply = true;
183
+ while (curDepth > 0) {
184
+ if ($from.node(curDepth).type.name === 'table') {
185
+ canApply = false;
186
+ }
187
+ curDepth--;
188
+ }
189
+ return canApply;
190
+ }
191
+ return true;
192
+ },
193
+ }),
194
+ ];
173
195
  },
174
196
  };
175
197
  });
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
- import { tableNodes as tableNodesSpecCreator } from '@milkdown/prose';
2
+ import { tableNodes as tableNodesSpecCreator } from '@milkdown/prose/tables';
3
3
 
4
4
  export const schema = tableNodesSpecCreator({
5
5
  tableGroup: 'block',
@@ -1,17 +1,17 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';
3
+ import { Command } from '@milkdown/prose/commands';
3
4
  import {
4
5
  addColumnAfter,
5
6
  addColumnBefore,
6
- Command,
7
7
  deleteColumn,
8
8
  deleteRow,
9
9
  deleteTable,
10
- EditorView,
11
10
  isInTable,
12
11
  selectedRect,
13
12
  setCellAttr,
14
- } from '@milkdown/prose';
13
+ } from '@milkdown/prose/tables';
14
+ import { EditorView } from '@milkdown/prose/view';
15
15
 
16
16
  import { addRowWithAlignment } from '../utils';
17
17
  import { getCellSelection, isFirstRowSelected } from './helper';
@@ -1,6 +1,8 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
 
3
- import { calculateNodePosition, CellSelection, EditorView } from '@milkdown/prose';
3
+ import { calculateNodePosition } from '@milkdown/prose';
4
+ import { CellSelection } from '@milkdown/prose/tables';
5
+ import { EditorView } from '@milkdown/prose/view';
4
6
 
5
7
  export const calculatePosition = (view: EditorView, dom: HTMLElement) => {
6
8
  const { selection } = view.state as unknown as { selection: CellSelection };
@@ -1,5 +1,6 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
- import { CellSelection, EditorView, TableMap } from '@milkdown/prose';
2
+ import { CellSelection, TableMap } from '@milkdown/prose/tables';
3
+ import { EditorView } from '@milkdown/prose/view';
3
4
 
4
5
  import { Item } from './actions';
5
6
 
@@ -1,7 +1,9 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
 
3
3
  import { Ctx } from '@milkdown/core';
4
- import { CellSelection, Decoration, DecorationSet, Plugin, PluginKey } from '@milkdown/prose';
4
+ import { Plugin, PluginKey } from '@milkdown/prose/state';
5
+ import { CellSelection } from '@milkdown/prose/tables';
6
+ import { Decoration, DecorationSet } from '@milkdown/prose/view';
5
7
  import { Utils } from '@milkdown/utils';
6
8
 
7
9
  import { CellPos, getCellsInColumn, getCellsInRow } from '../utils';
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
 
3
3
  import { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';
4
- import { Decoration, WidgetDecorationSpec } from '@milkdown/prose';
4
+ import { Decoration, WidgetDecorationSpec } from '@milkdown/prose/view';
5
5
 
6
6
  import { CellPos, selectLine, selectTable } from '../utils';
7
7
  import { ToolTipPos } from './constant';
@@ -1,16 +1,8 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
- import {
3
- CellSelection,
4
- cloneTr,
5
- findParentNode,
6
- Node as ProsemirrorNode,
7
- Schema,
8
- Selection,
9
- TableMap,
10
- tableNodeTypes,
11
- TableRect,
12
- Transaction,
13
- } from '@milkdown/prose';
2
+ import { cloneTr, findParentNode } from '@milkdown/prose';
3
+ import { Node as ProsemirrorNode, Schema } from '@milkdown/prose/model';
4
+ import { Selection, Transaction } from '@milkdown/prose/state';
5
+ import { CellSelection, TableMap, tableNodeTypes, TableRect } from '@milkdown/prose/tables';
14
6
 
15
7
  export type CellPos = {
16
8
  pos: number;
@@ -1,6 +1,8 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import { createCmd, createCmdKey, editorViewCtx, ThemeTaskListItemType } from '@milkdown/core';
3
- import { liftListItem, sinkListItem, splitListItem, wrapIn, wrappingInputRule } from '@milkdown/prose';
3
+ import { wrapIn } from '@milkdown/prose/commands';
4
+ import { wrappingInputRule } from '@milkdown/prose/inputrules';
5
+ import { liftListItem, sinkListItem, splitListItem } from '@milkdown/prose/schema-list';
4
6
  import { createNode, createShortcut } from '@milkdown/utils';
5
7
 
6
8
  import { SupportedKeys } from './supported-keys';