@milkdown/preset-gfm 6.1.0 → 6.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/footnote/definition.d.ts.map +1 -1
- package/lib/footnote/reference.d.ts.map +1 -1
- package/lib/index.es.js +4 -8
- package/lib/index.es.js.map +1 -1
- package/lib/table/operator-plugin/index.d.ts +1 -1
- package/lib/table/operator-plugin/index.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/footnote/definition.ts +3 -6
- package/src/footnote/reference.ts +3 -4
- package/src/table/operator-plugin/index.ts +1 -1
|
@@ -1 +1 @@
|
|
|
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;;;;
|
|
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;;;;EAoK7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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;;;;
|
|
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;;;;EA8J5B,CAAC"}
|
package/lib/index.es.js
CHANGED
|
@@ -44,7 +44,7 @@ const proseUrlPlugin = () => inputRules({
|
|
|
44
44
|
const urlPlugin = $prose(() => proseUrlPlugin());
|
|
45
45
|
const getFootnoteRefId = (label) => `footnote-ref-${label}`;
|
|
46
46
|
const getFootnoteDefId = (label) => `footnote-def-${label}`;
|
|
47
|
-
const key$1 = new PluginKey("
|
|
47
|
+
const key$1 = new PluginKey("MILKDOWN_FOOTNOTE_DEF_INPUT");
|
|
48
48
|
const ModifyFootnoteDef = createCmdKey("ModifyFootnoteDef");
|
|
49
49
|
const footnoteDefinition = createNode((utils) => {
|
|
50
50
|
const id2 = "footnote_definition";
|
|
@@ -155,9 +155,7 @@ const footnoteDefinition = createNode((utils) => {
|
|
|
155
155
|
});
|
|
156
156
|
if (!inputChipRenderer)
|
|
157
157
|
return {};
|
|
158
|
-
const shouldDisplay = (view) =>
|
|
159
|
-
return Boolean(view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type));
|
|
160
|
-
};
|
|
158
|
+
const shouldDisplay = (view) => Boolean(type && findSelectedNodeOfType(view.state.selection, type));
|
|
161
159
|
const getCurrentLabel = (view) => {
|
|
162
160
|
const result = findSelectedNodeOfType(view.state.selection, type);
|
|
163
161
|
if (!result)
|
|
@@ -197,7 +195,7 @@ const footnoteDefinition = createNode((utils) => {
|
|
|
197
195
|
};
|
|
198
196
|
});
|
|
199
197
|
const ModifyFootnoteRef = createCmdKey("ModifyFootnoteRef");
|
|
200
|
-
const key = new PluginKey("
|
|
198
|
+
const key = new PluginKey("MILKDOWN_FOOTNOTE_REF_INPUT");
|
|
201
199
|
const footnoteReference = createNode((utils) => {
|
|
202
200
|
const id2 = "footnote_reference";
|
|
203
201
|
return {
|
|
@@ -306,9 +304,7 @@ const footnoteReference = createNode((utils) => {
|
|
|
306
304
|
});
|
|
307
305
|
if (!inputChipRenderer)
|
|
308
306
|
return [];
|
|
309
|
-
const shouldDisplay = (view) =>
|
|
310
|
-
return Boolean(view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type));
|
|
311
|
-
};
|
|
307
|
+
const shouldDisplay = (view) => Boolean(type && findSelectedNodeOfType(view.state.selection, type));
|
|
312
308
|
const getCurrentLabel = (view) => {
|
|
313
309
|
const result = findSelectedNodeOfType(view.state.selection, type);
|
|
314
310
|
if (!result)
|
package/lib/index.es.js.map
CHANGED
|
@@ -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/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
|
+
{"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_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 Boolean(type && findSelectedNodeOfType(view.state.selection, type));\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_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 Boolean(type && findSelectedNodeOfType(view.state.selection, type));\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_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,6 +1,6 @@
|
|
|
1
1
|
import { Ctx } from '@milkdown/core';
|
|
2
2
|
import { Plugin } from '@milkdown/prose/state';
|
|
3
3
|
import { Utils } from '@milkdown/utils';
|
|
4
|
-
export declare const key = "
|
|
4
|
+
export declare const key = "MILKDOWN_TABLE";
|
|
5
5
|
export declare const operatorPlugin: (ctx: Ctx, utils: Utils) => Plugin<any, any>;
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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,EAAE,MAAM,EAAa,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUxC,eAAO,MAAM,GAAG,
|
|
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,mBAAmB,CAAC;AAEpC,eAAO,MAAM,cAAc,QAAS,GAAG,SAAS,KAAK,qBAkFpD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milkdown/preset-gfm",
|
|
3
|
-
"version": "6.1.
|
|
3
|
+
"version": "6.1.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./lib/index.es.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
"gfm"
|
|
18
18
|
],
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@milkdown/core": "6.1.
|
|
21
|
-
"@milkdown/design-system": "6.1.
|
|
22
|
-
"@milkdown/preset-commonmark": "6.1.
|
|
23
|
-
"@milkdown/prose": "6.1.
|
|
20
|
+
"@milkdown/core": "6.1.3",
|
|
21
|
+
"@milkdown/design-system": "6.1.3",
|
|
22
|
+
"@milkdown/preset-commonmark": "6.1.3",
|
|
23
|
+
"@milkdown/prose": "6.1.3"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@milkdown/core": "^6.0.1",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@milkdown/prose": "^6.0.1"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@milkdown/utils": "6.1.
|
|
31
|
+
"@milkdown/utils": "6.1.3",
|
|
32
32
|
"remark-gfm": "^3.0.0",
|
|
33
33
|
"tslib": "^2.3.1"
|
|
34
34
|
},
|
|
@@ -9,7 +9,7 @@ import { createNode } from '@milkdown/utils';
|
|
|
9
9
|
|
|
10
10
|
import { getFootnoteDefId, getFootnoteRefId } from './utils';
|
|
11
11
|
|
|
12
|
-
const key = new PluginKey('
|
|
12
|
+
const key = new PluginKey('MILKDOWN_FOOTNOTE_DEF_INPUT');
|
|
13
13
|
export const ModifyFootnoteDef = createCmdKey<string>('ModifyFootnoteDef');
|
|
14
14
|
|
|
15
15
|
export const footnoteDefinition = createNode((utils) => {
|
|
@@ -135,11 +135,8 @@ export const footnoteDefinition = createNode((utils) => {
|
|
|
135
135
|
isBindMode: true,
|
|
136
136
|
});
|
|
137
137
|
if (!inputChipRenderer) return {};
|
|
138
|
-
const shouldDisplay = (view: EditorView) =>
|
|
139
|
-
|
|
140
|
-
view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type),
|
|
141
|
-
);
|
|
142
|
-
};
|
|
138
|
+
const shouldDisplay = (view: EditorView) =>
|
|
139
|
+
Boolean(type && findSelectedNodeOfType(view.state.selection, type));
|
|
143
140
|
const getCurrentLabel = (view: EditorView) => {
|
|
144
141
|
const result = findSelectedNodeOfType(view.state.selection, type);
|
|
145
142
|
if (!result) return;
|
|
@@ -10,7 +10,7 @@ import { createNode } from '@milkdown/utils';
|
|
|
10
10
|
import { getFootnoteDefId, getFootnoteRefId } from './utils';
|
|
11
11
|
|
|
12
12
|
export const ModifyFootnoteRef = createCmdKey<string>('ModifyFootnoteRef');
|
|
13
|
-
const key = new PluginKey('
|
|
13
|
+
const key = new PluginKey('MILKDOWN_FOOTNOTE_REF_INPUT');
|
|
14
14
|
|
|
15
15
|
export const footnoteReference = createNode((utils) => {
|
|
16
16
|
const id = 'footnote_reference';
|
|
@@ -125,9 +125,8 @@ export const footnoteReference = createNode((utils) => {
|
|
|
125
125
|
isBindMode: true,
|
|
126
126
|
});
|
|
127
127
|
if (!inputChipRenderer) return [];
|
|
128
|
-
const shouldDisplay = (view: EditorView) =>
|
|
129
|
-
|
|
130
|
-
};
|
|
128
|
+
const shouldDisplay = (view: EditorView) =>
|
|
129
|
+
Boolean(type && findSelectedNodeOfType(view.state.selection, type));
|
|
131
130
|
const getCurrentLabel = (view: EditorView) => {
|
|
132
131
|
const result = findSelectedNodeOfType(view.state.selection, type);
|
|
133
132
|
if (!result) return;
|
|
@@ -14,7 +14,7 @@ import { calculateItem } from './helper';
|
|
|
14
14
|
import { injectStyle } from './style';
|
|
15
15
|
import { createWidget } from './widget';
|
|
16
16
|
|
|
17
|
-
export const key = '
|
|
17
|
+
export const key = 'MILKDOWN_TABLE';
|
|
18
18
|
|
|
19
19
|
export const operatorPlugin = (ctx: Ctx, utils: Utils) => {
|
|
20
20
|
return new Plugin({
|