@milkdown/preset-gfm 6.0.1 → 6.0.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/footnote/definition.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,yCAA4C,CAAC;AAE3E,eAAO,MAAM,kBAAkB;;;;
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/footnote/definition.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,yCAA4C,CAAC;AAE3E,eAAO,MAAM,kBAAkB;;;;EAuK7B,CAAC"}
|
package/lib/index.es.js
CHANGED
|
@@ -150,7 +150,7 @@ const footnoteDefinition = createNode((utils) => {
|
|
|
150
150
|
if (!inputChipRenderer)
|
|
151
151
|
return {};
|
|
152
152
|
const shouldDisplay = (view) => {
|
|
153
|
-
return Boolean(type && findSelectedNodeOfType(view.state.selection, type));
|
|
153
|
+
return Boolean(view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type));
|
|
154
154
|
};
|
|
155
155
|
const getCurrentLabel = (view) => {
|
|
156
156
|
const result = findSelectedNodeOfType(view.state.selection, type);
|
|
@@ -301,7 +301,7 @@ const footnoteReference = createNode((utils) => {
|
|
|
301
301
|
if (!inputChipRenderer)
|
|
302
302
|
return [];
|
|
303
303
|
const shouldDisplay = (view) => {
|
|
304
|
-
return Boolean(type && findSelectedNodeOfType(view.state.selection, type));
|
|
304
|
+
return Boolean(view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type));
|
|
305
305
|
};
|
|
306
306
|
const getCurrentLabel = (view) => {
|
|
307
307
|
const result = findSelectedNodeOfType(view.state.selection, type);
|
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';\nimport { $prose } from '@milkdown/utils';\n\nconst urlRegex = /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/;\n\nconst proseUrlPlugin = () =>\n inputRules({\n rules: [\n new InputRule(urlRegex, (state, match, start, end) => {\n const { schema } = state;\n const [text] = match;\n if (!text) return null;\n\n return state.tr\n .replaceWith(start, end, schema.text(text))\n .addMark(start, text.length + start, schema.marks.link.create({ href: text }));\n }),\n ],\n });\n\nexport const urlPlugin = $prose(() => proseUrlPlugin());\n","/* Copyright 2021, Milkdown by Mirone. */\nexport const getFootnoteRefId = (label: string) => `footnote-ref-${label}`;\n\nexport const getFootnoteDefId = (label: string) => `footnote-def-${label}`;\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';\nimport {\n EditorView,\n findSelectedNodeOfType,\n NodeSelection,\n Plugin,\n PluginKey,\n wrappingInputRule,\n} from '@milkdown/prose';\nimport { createNode } from '@milkdown/utils';\n\nimport { getFootnoteDefId, getFootnoteRefId } from './utils';\n\nconst key = new PluginKey('MILKDOWN_PLUGIN_FOOTNOTE_DEF_INPUT');\nexport const ModifyFootnoteDef = createCmdKey<string>('ModifyFootnoteDef');\n\nexport const footnoteDefinition = createNode((utils) => {\n const id = 'footnote_definition';\n const markdownId = 'footnoteDefinition';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'block',\n content: 'block+',\n defining: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `div[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return {\n label: dom.dataset['label'],\n };\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs['label'];\n const className = utils.getClassName(node.attrs, 'footnote-definition');\n\n const dt = document.createElement('dt');\n dt.textContent = `[${label}]:`;\n dt.onclick = () => {\n const view = ctx.get(editorViewCtx);\n const selection = NodeSelection.create(view.state.doc, view.state.selection.from - 2);\n view.dispatch(view.state.tr.setSelection(selection));\n };\n\n const a = document.createElement('a');\n a.href = `#${getFootnoteRefId(label)}`;\n a.contentEditable = 'false';\n a.textContent = '↩';\n a.onmousedown = (e) => {\n e.preventDefault();\n };\n\n return [\n 'div',\n {\n class: className,\n 'data-label': label,\n 'data-type': id,\n id: getFootnoteDefId(label),\n },\n ['div', { class: 'footnote-definition_content' }, dt, ['dd', 0]],\n ['div', { class: 'footnote-definition_anchor' }, a],\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === markdownId,\n runner: (state, node, type) => {\n state\n .openNode(type, {\n label: node['label'] as string,\n })\n .next(node.children)\n .closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state\n .openNode(markdownId, undefined, {\n label: node.attrs['label'],\n identifier: node.attrs['label'],\n })\n .next(node.content)\n .closeNode();\n },\n },\n }),\n commands: (nodeType) => [\n createCmd(ModifyFootnoteDef, (label = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, nodeType);\n if (!node) return false;\n\n const { tr } = state;\n const _tr = tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, label });\n dispatch?.(_tr.setSelection(NodeSelection.create(_tr.doc, node.pos)));\n\n return true;\n }),\n ],\n inputRules: (nodeType) => [\n wrappingInputRule(\n /(?:\\[\\^)([^:]+)(?::)$/,\n nodeType,\n (match) => {\n const label = match[1] ?? 'footnote';\n return {\n label,\n };\n },\n () => false,\n ),\n ],\n prosePlugins: (type, ctx) => {\n return [\n new Plugin({\n key,\n view: (editorView) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n width: '12em',\n placeholder: 'Input Footnote Label',\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyFootnoteDef, value);\n },\n isBindMode: true,\n });\n if (!inputChipRenderer) return {};\n const shouldDisplay = (view: EditorView) => {\n return Boolean(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 inputChipRenderer.init(editorView);\n renderByView(editorView);\n\n return {\n update: (view, prevState) => {\n const isEqualSelection =\n prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection);\n if (isEqualSelection) return;\n\n renderByView(view);\n },\n destroy: () => {\n inputChipRenderer.destroy();\n },\n };\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';\nimport { EditorView, findSelectedNodeOfType, InputRule, NodeSelection, Plugin, PluginKey } from '@milkdown/prose';\nimport { createNode } from '@milkdown/utils';\n\nimport { getFootnoteDefId, getFootnoteRefId } from './utils';\n\nexport const ModifyFootnoteRef = createCmdKey<string>('ModifyFootnoteRef');\nconst key = new PluginKey('MILKDOWN_PLUGIN_FOOTNOTE_REF_INPUT');\n\nexport const footnoteReference = createNode((utils) => {\n const id = 'footnote_reference';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'inline',\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return {\n label: dom.dataset['label'],\n };\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs['label'];\n const a = document.createElement('a');\n const href = `#${getFootnoteDefId(label)}`;\n a.href = href;\n a.textContent = `[${label}]`;\n a.onclick = (e) => {\n const view = ctx.get(editorViewCtx);\n if (view.editable) {\n e.preventDefault();\n }\n };\n a.ondblclick = () => {\n const view = ctx.get(editorViewCtx);\n if (view.editable) {\n window.location.href = href;\n }\n };\n return [\n 'sup',\n {\n 'data-label': label,\n 'data-type': id,\n id: getFootnoteRefId(label),\n },\n a,\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === 'footnoteReference',\n runner: (state, node, type) => {\n state.addNode(type, {\n label: node['label'] as string,\n });\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.addNode('footnoteReference', undefined, undefined, {\n label: node.attrs['label'],\n identifier: node.attrs['label'],\n });\n },\n },\n }),\n commands: (nodeType) => [\n createCmd(ModifyFootnoteRef, (label = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, nodeType);\n if (!node) return false;\n\n const { tr } = state;\n const _tr = tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, label });\n dispatch?.(_tr.setSelection(NodeSelection.create(_tr.doc, node.pos)));\n\n return true;\n }),\n ],\n inputRules: (nodeType) => [\n new InputRule(/(?:\\[\\^)([^\\]]+)(?:\\])$/, (state, match, start, end) => {\n const $start = state.doc.resolve(start);\n const index = $start.index();\n const $end = state.doc.resolve(end);\n if (!$start.parent.canReplaceWith(index, $end.index(), nodeType)) {\n return null;\n }\n const label = match[1];\n return state.tr.replaceRangeWith(\n start,\n end,\n nodeType.create({\n label,\n }),\n );\n }),\n ],\n prosePlugins: (type, ctx) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n width: '12em',\n placeholder: 'Input Footnote Label',\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyFootnoteRef, value);\n },\n isBindMode: true,\n });\n if (!inputChipRenderer) return [];\n const shouldDisplay = (view: EditorView) => {\n return Boolean(type && findSelectedNodeOfType(view.state.selection, type));\n };\n const getCurrentLabel = (view: EditorView) => {\n const result = findSelectedNodeOfType(view.state.selection, type);\n if (!result) return;\n\n const value = result.node.attrs['label'];\n return value;\n };\n const renderByView = (view: EditorView) => {\n if (!view.editable) {\n return;\n }\n const display = shouldDisplay(view);\n if (display) {\n inputChipRenderer.show(view);\n inputChipRenderer.update(getCurrentLabel(view));\n } else {\n inputChipRenderer.hide();\n }\n };\n return [\n new Plugin({\n key,\n view: (editorView) => {\n inputChipRenderer.init(editorView);\n renderByView(editorView);\n\n return {\n update: (view, prevState) => {\n const isEqualSelection =\n prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection);\n if (isEqualSelection) return;\n\n renderByView(view);\n },\n destroy: () => {\n inputChipRenderer.destroy();\n },\n };\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Command, isInTable, Node, NodeType, Selection } from '@milkdown/prose';\n\nexport const exitTable =\n (node: NodeType): Command =>\n (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n const { $head } = state.selection;\n const pos = $head.after();\n const tr = state.tr.replaceWith(pos, pos, node.createAndFill() as Node);\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch?.(tr.scrollIntoView());\n return true;\n };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport {\n CellSelection,\n cloneTr,\n findParentNode,\n Node as ProsemirrorNode,\n Schema,\n Selection,\n TableMap,\n tableNodeTypes,\n TableRect,\n Transaction,\n} from '@milkdown/prose';\n\nexport type CellPos = {\n pos: number;\n start: number;\n node: ProsemirrorNode;\n};\n\nexport const findTable = (selection: Selection) =>\n findParentNode((node) => node.type.spec['tableRole'] === 'table')(selection);\n\nexport const getCellsInColumn =\n (columnIndex: number) =>\n (selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection);\n if (!table) return undefined;\n const map = TableMap.get(table.node);\n if (columnIndex < 0 || columnIndex >= map.width) {\n return undefined;\n }\n\n return map.cellsInRect({ left: columnIndex, right: columnIndex + 1, top: 0, bottom: map.height }).map((pos) => {\n const node = table.node.nodeAt(pos);\n if (!node) throw new Error();\n const start = pos + table.start;\n return {\n pos: start,\n start: start + 1,\n node,\n };\n });\n };\n\nexport const getCellsInRow =\n (rowIndex: number) =>\n (selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection);\n if (!table) return undefined;\n const map = TableMap.get(table.node);\n if (rowIndex < 0 || rowIndex >= map.height) {\n return undefined;\n }\n\n return map.cellsInRect({ left: 0, right: map.width, top: rowIndex, bottom: rowIndex + 1 }).map((pos) => {\n const node = table.node.nodeAt(pos);\n if (!node) throw new Error();\n const start = pos + table.start;\n return {\n pos: start,\n start: start + 1,\n node,\n };\n });\n };\n\nexport const createTable = (schema: Schema, rowsCount = 3, colsCount = 3) => {\n const { cell: tableCell, header_cell: tableHeader, row: tableRow, table } = tableNodeTypes(schema);\n\n const cells = Array(colsCount)\n .fill(0)\n .map(() => tableCell.createAndFill(null) as ProsemirrorNode);\n\n const headerCells = Array(colsCount)\n .fill(0)\n .map(() => tableHeader.createAndFill(null) as ProsemirrorNode);\n\n const rows = Array(rowsCount)\n .fill(0)\n .map((_, i) => tableRow.create(null, i === 0 ? headerCells : cells));\n\n return table.create(null, rows);\n};\n\nexport const selectLine = (type: 'row' | 'col') => (index: number) => (tr: Transaction) => {\n const table = findTable(tr.selection);\n const isRowSelection = type === 'row';\n if (table) {\n const map = TableMap.get(table.node);\n\n // Check if the index is valid\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n const lastCell = map.positionAt(\n isRowSelection ? index : map.height - 1,\n isRowSelection ? map.width - 1 : index,\n table.node,\n );\n const $lastCell = tr.doc.resolve(table.start + lastCell);\n\n const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection;\n\n const firstCell = map.positionAt(isRowSelection ? index : 0, isRowSelection ? 0 : index, table.node);\n const $firstCell = tr.doc.resolve(table.start + firstCell);\n return cloneTr(tr.setSelection(createCellSelection($lastCell, $firstCell) as unknown as Selection));\n }\n }\n return tr;\n};\n\nexport const getCellsInTable = (selection: Selection) => {\n const table = findTable(selection);\n if (!table) {\n return;\n }\n const map = TableMap.get(table.node);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height,\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node };\n });\n};\n\nexport const selectTable = (tr: Transaction) => {\n const cells = getCellsInTable(tr.selection);\n if (cells && cells[0]) {\n const $firstCell = tr.doc.resolve(cells[0].pos);\n const last = cells[cells.length - 1];\n if (last) {\n const $lastCell = tr.doc.resolve(last.pos);\n return cloneTr(tr.setSelection(new CellSelection($lastCell, $firstCell) as unknown as Selection));\n }\n }\n return tr;\n};\n\nexport function addRowWithAlignment(tr: Transaction, { map, tableStart, table }: TableRect, row: number) {\n const rowPos = Array(row)\n .fill(0)\n .reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize;\n }, tableStart);\n\n const { cell: cellType, row: rowType } = tableNodeTypes(table.type.schema);\n\n const cells = Array(map.width)\n .fill(0)\n .map((_, col) => {\n const headerCol = table.nodeAt(map.map[col] as number);\n return cellType.createAndFill({ alignment: headerCol?.attrs['alignment'] }) as ProsemirrorNode;\n });\n\n tr.insert(rowPos, rowType.create(null, cells));\n return tr;\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { CellSelection, EditorView, TableMap } from '@milkdown/prose';\n\nimport { Item } from './actions';\n\nexport const getCellSelection = (view: EditorView): CellSelection => view.state.selection as unknown as CellSelection;\n\nexport const isFirstRowSelected = (selection: CellSelection) => {\n const map = TableMap.get(selection.$anchorCell.node(-1));\n const start = selection.$anchorCell.start(-1);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: 1,\n });\n const selectedCells = map.cellsInRect(\n map.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start),\n );\n\n for (let i = 0, count = cells.length; i < count; i++) {\n if (selectedCells.indexOf(cells[i] as number) === -1) {\n return false;\n }\n }\n return true;\n};\n\nexport const calculateItem = (actions: Record<string, Item>, view: EditorView) => {\n Object.values(actions).forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n item.$.classList.remove('hide');\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport {\n addColumnAfter,\n addColumnBefore,\n Command,\n deleteColumn,\n deleteRow,\n deleteTable,\n EditorView,\n isInTable,\n selectedRect,\n setCellAttr,\n} from '@milkdown/prose';\n\nimport { addRowWithAlignment } from '../utils';\nimport { getCellSelection, isFirstRowSelected } from './helper';\n\nexport type Item = {\n $: HTMLElement;\n command: (e: Event, view: EditorView) => Command;\n disable?: (view: EditorView) => boolean;\n};\n\nexport enum Action {\n AddColLeft,\n AddColRight,\n AddRowTop,\n AddRowBottom,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Delete,\n}\n\nexport const createActions: (ctx: Ctx) => Record<Action, Item> = (ctx) => ({\n [Action.AddColLeft]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'leftArrow')?.dom as HTMLElement,\n command: () => addColumnBefore,\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AddColRight]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'rightArrow')?.dom as HTMLElement,\n command: () => addColumnAfter,\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AddRowTop]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'upArrow')?.dom as HTMLElement,\n command: () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(state.tr, rect, rect.top));\n }\n return true;\n },\n disable: (view) =>\n !getCellSelection(view).isRowSelection() ||\n getCellSelection(view).$head.parent.type.name === 'table_header',\n },\n [Action.AddRowBottom]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'downArrow')?.dom as HTMLElement,\n command: () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(state.tr, rect, rect.bottom));\n }\n return true;\n },\n disable: (view) => !getCellSelection(view).isRowSelection(),\n },\n [Action.AlignLeft]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignLeft')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'left'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AlignCenter]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignCenter')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'center'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AlignRight]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignRight')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'right'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.Delete]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'delete')?.dom as HTMLElement,\n command: (_, view) => {\n const selection = getCellSelection(view);\n const isCol = selection.isColSelection();\n const isRow = selection.isRowSelection();\n if (isCol && isRow) {\n return deleteTable;\n }\n\n if (isCol) {\n return deleteColumn;\n }\n\n return deleteRow;\n },\n disable: (view) => {\n const selection = getCellSelection(view);\n if (selection.isRowSelection()) {\n if (selection.isColSelection()) {\n return false;\n }\n return isFirstRowSelected(selection);\n }\n return false;\n },\n },\n});\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { calculateNodePosition, CellSelection, EditorView } from '@milkdown/prose';\n\nexport const calculatePosition = (view: EditorView, dom: HTMLElement) => {\n const { selection } = view.state as unknown as { selection: CellSelection };\n const isCol = selection.isColSelection();\n const isRow = selection.isRowSelection();\n\n calculateNodePosition(view, dom, (selected, target, parent) => {\n const $editor = dom.parentElement;\n if (!$editor) {\n throw new Error();\n }\n let left = !isRow\n ? selected.left - parent.left + (selected.width - target.width) / 2\n : selected.left - parent.left - target.width / 2 - 8;\n const top = selected.top - parent.top - target.height - (isCol ? 14 : 0) - 14 + $editor.scrollTop;\n\n if (left < 0) {\n left = 0;\n }\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nexport enum ToolTipPos {\n Left = 'Left',\n Top = 'Top',\n Point = 'Point',\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Emotion, getPalette, ThemeBorder, ThemeManager, ThemeShadow, ThemeSize } from '@milkdown/core';\n\nexport const injectStyle = (themeManager: ThemeManager, { css, injectGlobal }: Emotion) => {\n const palette = getPalette(themeManager);\n const radius = themeManager.get(ThemeSize, 'radius');\n const lineWidth = themeManager.get(ThemeSize, 'lineWidth');\n\n injectGlobal`\n .milkdown {\n .tableWrapper {\n table {\n width: calc(100% - 2em) !important;\n margin: 1em 0 1em 1em !important;\n\n .milkdown-cell-left,\n .milkdown-cell-point,\n .milkdown-cell-top {\n position: absolute;\n\n &::after {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: block;\n transition: all 0.2s ease-in-out;\n background: ${palette('secondary', 0.12)};\n content: '';\n }\n\n &:hover::after {\n background: ${palette('secondary', 0.38)};\n }\n }\n\n .milkdown-cell-left {\n left: calc(-6px - 0.5em);\n top: 0;\n bottom: 0;\n width: 0.5em;\n }\n\n .milkdown-cell-top {\n left: 0;\n right: 0;\n top: calc(-6px - 0.5em);\n height: 0.5em;\n }\n\n .milkdown-cell-point {\n left: calc(-2px - 1em);\n top: calc(-2px - 1em);\n width: 1em;\n height: 1em;\n\n .icon {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n }\n }\n }\n }\n `;\n\n return css`\n display: inline-flex;\n cursor: pointer;\n z-index: 2;\n\n justify-content: space-evenly;\n\n position: absolute;\n\n border-radius: ${radius};\n\n ${themeManager.get(ThemeBorder, undefined)};\n ${themeManager.get(ThemeShadow, undefined)};\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 2em;\n line-height: 2em;\n text-align: center;\n transition: all 0.4s ease-in-out;\n\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n\n &.active {\n color: ${palette('primary')};\n }\n\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n right: 0;\n top: 0;\n width: ${lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport { Decoration, WidgetDecorationSpec } from '@milkdown/prose';\n\nimport { CellPos, selectLine, selectTable } from '../utils';\nimport { ToolTipPos } from './constant';\n\nconst calculateClassName = (pos: ToolTipPos) => {\n switch (pos) {\n case ToolTipPos.Left: {\n return 'milkdown-cell-left';\n }\n case ToolTipPos.Top: {\n return 'milkdown-cell-top';\n }\n case ToolTipPos.Point:\n default: {\n return 'milkdown-cell-point';\n }\n }\n};\n\nexport function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos.Point): Decoration<WidgetDecorationSpec>;\nexport function createWidget(\n ctx: Ctx,\n cell: CellPos,\n pos: ToolTipPos.Left,\n index: number,\n): Decoration<WidgetDecorationSpec>;\nexport function createWidget(\n ctx: Ctx,\n cell: CellPos,\n pos: ToolTipPos.Top,\n index: number,\n): Decoration<WidgetDecorationSpec>;\nexport function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos, index = 0) {\n return Decoration.widget(cell.pos + 1, (view) => {\n const div = document.createElement('div');\n div.classList.add(calculateClassName(pos));\n if (pos === ToolTipPos.Point) {\n div.appendChild(ctx.get(themeManagerCtx).get(ThemeIcon, 'select')?.dom as HTMLElement);\n }\n div.addEventListener('mousedown', (e) => {\n if (!view) return;\n\n e.preventDefault();\n switch (pos) {\n case ToolTipPos.Point: {\n view.dispatch(selectTable(view.state.tr));\n return;\n }\n case ToolTipPos.Left: {\n view.dispatch(selectLine('row')(index)(view.state.tr));\n return;\n }\n case ToolTipPos.Top: {\n view.dispatch(selectLine('col')(index)(view.state.tr));\n return;\n }\n }\n });\n return div;\n });\n}\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Ctx } from '@milkdown/core';\nimport { CellSelection, Decoration, DecorationSet, Plugin, PluginKey } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport { CellPos, getCellsInColumn, getCellsInRow } from '../utils';\nimport { createActions } from './actions';\nimport { calculatePosition } from './calc-pos';\nimport { ToolTipPos } from './constant';\nimport { calculateItem } from './helper';\nimport { injectStyle } from './style';\nimport { createWidget } from './widget';\n\nexport const key = 'MILKDOWN_PLUGIN_TABLE';\n\nexport const operatorPlugin = (ctx: Ctx, utils: Utils) => {\n return new Plugin({\n key: new PluginKey('MILKDOWN_TABLE_OP'),\n props: {\n decorations: (state) => {\n const decorations: Decoration[] = [];\n const leftCells = getCellsInColumn(0)(state.selection);\n if (!leftCells) return null;\n const topCells = getCellsInRow(0)(state.selection);\n if (!topCells) return null;\n\n const [topLeft] = leftCells;\n\n decorations.push(createWidget(ctx, topLeft as CellPos, ToolTipPos.Point));\n leftCells.forEach((cell, i) => {\n decorations.push(createWidget(ctx, cell, ToolTipPos.Left, i));\n });\n topCells.forEach((cell, i) => {\n decorations.push(createWidget(ctx, cell, ToolTipPos.Top, i));\n });\n\n return DecorationSet.create(state.doc, decorations);\n },\n },\n view: (editorView) => {\n const items = Object.fromEntries(Object.entries(createActions(ctx)).filter(([, value]) => value.$ != null));\n const tooltip = document.createElement('div');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion));\n if (style) {\n tooltip.classList.add(style);\n }\n });\n tooltip.classList.add('table-tooltip', 'hide');\n Object.values(items).forEach(({ $ }) => tooltip.appendChild($));\n editorView.dom.parentNode?.appendChild(tooltip);\n\n const listener = (e: Event) => {\n if (!editorView) return;\n e.stopPropagation();\n e.preventDefault();\n Object.values(items).forEach(({ $, command }) => {\n if ($.contains(e.target as Element)) {\n command(e, editorView)(editorView.state, editorView.dispatch, editorView);\n }\n });\n };\n\n const hide = () => {\n tooltip.classList.add('hide');\n };\n\n tooltip.addEventListener('mousedown', listener);\n\n return {\n update: (view, prevState) => {\n const state = view.state;\n\n if (prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection)) return;\n\n const isCellSelection = state.selection instanceof CellSelection;\n\n if (!isCellSelection || !view.editable) {\n hide();\n return;\n }\n\n calculateItem(items, view);\n if (Object.values(items).every(({ $ }) => $.classList.contains('hide'))) {\n hide();\n return;\n }\n tooltip.classList.remove('hide');\n calculatePosition(view, tooltip);\n },\n destroy: () => {\n tooltip.removeEventListener('mousedown', listener);\n tooltip.remove();\n },\n };\n },\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { tableNodes as tableNodesSpecCreator } from '@milkdown/prose';\n\nexport const schema = tableNodesSpecCreator({\n tableGroup: 'block',\n cellContent: 'paragraph',\n cellAttributes: {\n alignment: {\n default: 'left',\n getFromDOM: (dom) => (dom as HTMLElement).style.textAlign || 'left',\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || 'left'}`;\n },\n },\n },\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey, MarkdownNode, schemaCtx } from '@milkdown/core';\nimport {\n columnResizing,\n goToNextCell,\n InputRule,\n NodeType,\n Selection,\n tableEditing,\n TextSelection,\n} from '@milkdown/prose';\nimport { createPlugin, createShortcut } from '@milkdown/utils';\n\nimport { exitTable } from '../command';\nimport { operatorPlugin } from '../operator-plugin';\nimport { createTable } from '../utils';\nimport { schema } from './schema';\n\nexport const SupportedKeys = {\n NextCell: 'NextCell',\n PrevCell: 'PrevCell',\n ExitTable: 'ExitTable',\n} as const;\nexport type SupportedKeys = typeof SupportedKeys;\n\ntype Keys = keyof SupportedKeys;\n\nexport const PrevCell = createCmdKey('PrevCell');\nexport const NextCell = createCmdKey('NextCell');\nexport const BreakTable = createCmdKey('BreakTable');\nexport const InsertTable = createCmdKey('InsertTable');\n\nexport const table = createPlugin<Keys, Record<string, unknown>, keyof typeof schema>((utils) => {\n return {\n schema: () => ({\n node: {\n table: {\n ...schema.table,\n parseMarkdown: {\n match: (node) => node.type === 'table',\n runner: (state, node, type) => {\n const align = node['align'] as (string | null)[];\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align,\n isHeader: i === 0,\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table',\n runner: (state, node) => {\n const firstLine = node.content.firstChild?.content;\n if (!firstLine) return;\n\n const align: (string | null)[] = [];\n firstLine.forEach((cell) => {\n align.push(cell.attrs['alignment']);\n });\n state.openNode('table', undefined, { align });\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n table_row: {\n ...schema.table_row,\n parseMarkdown: {\n match: (node) => node.type === 'tableRow',\n runner: (state, node, type) => {\n const align = node['align'] as (string | null)[];\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align: align[i],\n isHeader: node['isHeader'],\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_row',\n runner: (state, node) => {\n state.openNode('tableRow');\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n table_cell: {\n ...schema.table_cell,\n parseMarkdown: {\n match: (node) => node.type === 'tableCell' && !node['isHeader'],\n runner: (state, node, type) => {\n const align = node['align'] as string;\n state\n .openNode(type, { alignment: align })\n .openNode(state.schema.nodes['paragraph'] as NodeType)\n .next(node.children)\n .closeNode()\n .closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_cell',\n runner: (state, node) => {\n state.openNode('tableCell').next(node.content).closeNode();\n },\n },\n },\n table_header: {\n ...schema.table_header,\n parseMarkdown: {\n match: (node) => node.type === 'tableCell' && !!node['isHeader'],\n runner: (state, node, type) => {\n const align = node['align'] as string;\n state.openNode(type, { alignment: align });\n state.openNode(state.schema.nodes['paragraph'] as NodeType);\n state.next(node.children);\n state.closeNode();\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_header',\n runner: (state, node) => {\n state.openNode('tableCell');\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n },\n }),\n inputRules: (nodeType, ctx) => [\n new InputRule(/^\\|\\|\\s$/, (state, _match, start, end) => {\n const $start = state.doc.resolve(start);\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType.table))\n return null;\n\n const tableNode = createTable(ctx.get(schemaCtx));\n const tr = state.tr.replaceRangeWith(start, end, tableNode).scrollIntoView();\n return tr.setSelection(TextSelection.create(tr.doc, start + 3));\n }),\n ],\n commands: (_, ctx) => [\n createCmd(PrevCell, () => goToNextCell(-1)),\n createCmd(NextCell, () => goToNextCell(1)),\n createCmd(BreakTable, () => exitTable(ctx.get(schemaCtx).nodes['paragraph'] as NodeType)),\n createCmd(InsertTable, () => (state, dispatch) => {\n const { selection, tr } = state;\n const { from } = selection;\n const table = createTable(ctx.get(schemaCtx));\n const _tr = tr.replaceSelectionWith(table);\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true);\n if (sel) {\n dispatch?.(_tr.setSelection(sel));\n }\n return true;\n }),\n ],\n shortcuts: {\n [SupportedKeys.NextCell]: createShortcut(NextCell, 'Mod-]'),\n [SupportedKeys.PrevCell]: createShortcut(PrevCell, 'Mod-['),\n [SupportedKeys.ExitTable]: createShortcut(BreakTable, 'Mod-Enter'),\n },\n prosePlugins: (_, ctx) => {\n return [operatorPlugin(ctx, utils), columnResizing({}), tableEditing()];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { SupportedKeys as CommonmarkKeys } from '@milkdown/preset-commonmark';\n\nimport { SupportedKeys as TableKeys } from './table';\n\nexport const SupportedKeys = {\n ...CommonmarkKeys,\n ...TableKeys,\n StrikeThrough: 'StrikeThrough',\n TaskList: 'TaskList',\n} as const;\nexport type SupportedKeys = typeof SupportedKeys;\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core';\nimport { markRule, toggleMark } from '@milkdown/prose';\nimport { createMark, createShortcut } from '@milkdown/utils';\n\nimport { SupportedKeys } from './supported-keys';\n\ntype Keys = SupportedKeys['StrikeThrough'];\n\nexport const ToggleStrikeThrough = createCmdKey('ToggleStrikeThrough');\n\nconst id = 'strike_through';\nexport const strikeThrough = createMark<Keys>((utils) => {\n return {\n id,\n schema: () => ({\n parseDOM: [\n { tag: 'del' },\n { style: 'text-decoration', getAttrs: (value) => (value === 'line-through') as false },\n ],\n toDOM: (mark) => ['del', { class: utils.getClassName(mark.attrs, 'strike-through') }],\n parseMarkdown: {\n match: (node) => node.type === 'delete',\n runner: (state, node, markType) => {\n state.openMark(markType);\n state.next(node.children);\n state.closeMark(markType);\n },\n },\n toMarkdown: {\n match: (mark) => mark.type.name === id,\n runner: (state, mark) => {\n state.withMark(mark, 'delete');\n },\n },\n }),\n inputRules: (markType) => [\n markRule(/(?:~~)([^~]+)(?:~~)$/, markType),\n markRule(/(?:^|[^~])(~([^~]+)~)$/, markType),\n ],\n commands: (markType) => [createCmd(ToggleStrikeThrough, () => toggleMark(markType))],\n shortcuts: {\n [SupportedKeys.StrikeThrough]: createShortcut(ToggleStrikeThrough, 'Mod-Alt-x'),\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey, editorViewCtx, ThemeTaskListItemType } from '@milkdown/core';\nimport { liftListItem, sinkListItem, splitListItem, wrapIn, wrappingInputRule } from '@milkdown/prose';\nimport { createNode, createShortcut } from '@milkdown/utils';\n\nimport { SupportedKeys } from './supported-keys';\n\ntype Keys = Extract<keyof SupportedKeys, 'SinkListItem' | 'LiftListItem' | 'NextListItem' | 'TaskList'>;\n\nexport const SplitTaskListItem = createCmdKey('SplitTaskListItem');\nexport const SinkTaskListItem = createCmdKey('SinkTaskListItem');\nexport const LiftTaskListItem = createCmdKey('LiftTaskListItem');\nexport const TurnIntoTaskList = createCmdKey('TurnIntoTaskList');\n\nexport const taskListItem = createNode<Keys>((utils) => {\n const id = 'task_list_item';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'listItem',\n content: 'paragraph block*',\n defining: true,\n priority: 60,\n attrs: {\n checked: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'li[data-type=\"task-item\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return { checked: dom.dataset['checked'] === 'true' };\n },\n },\n ],\n toDOM: (node) => {\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.checked = node.attrs['checked'];\n checkbox.className = utils.getClassName(node.attrs, 'task-list-item_checkbox');\n checkbox.onchange = (event) => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) return;\n const view = ctx.get(editorViewCtx);\n\n if (!view.editable) {\n checkbox.checked = !checkbox.checked;\n\n return;\n }\n\n const { top, left } = target.getBoundingClientRect();\n const result = view.posAtCoords({ top, left });\n if (!result) return;\n\n const { tr } = view.state;\n\n view.dispatch(\n tr.setNodeMarkup(result.inside, undefined, {\n checked: target.checked,\n }),\n );\n };\n return [\n 'li',\n {\n 'data-type': 'task-item',\n 'data-checked': node.attrs['checked'] ? 'true' : 'false',\n class: utils.getClassName(node.attrs, 'task-list-item'),\n },\n checkbox,\n ['span', { class: utils.getClassName(node.attrs, 'task-list-item_body') }, 0],\n ];\n },\n parseMarkdown: {\n match: ({ type, checked }) => {\n return type === 'listItem' && checked !== null;\n },\n runner: (state, node, type) => {\n state.openNode(type, { checked: node['checked'] as boolean });\n state.next(node.children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.openNode('listItem', undefined, { checked: node.attrs['checked'] });\n state.next(node.content);\n state.closeNode();\n },\n },\n }),\n inputRules: (nodeType) => [\n wrappingInputRule(/^\\s*(\\[([ |x])\\])\\s$/, nodeType, (match) => ({\n checked: match[match.length - 1] === 'x',\n })),\n ],\n commands: (nodeType) => [\n createCmd(SplitTaskListItem, () => splitListItem(nodeType)),\n createCmd(SinkTaskListItem, () => sinkListItem(nodeType)),\n createCmd(LiftTaskListItem, () => liftListItem(nodeType)),\n createCmd(TurnIntoTaskList, () => wrapIn(nodeType)),\n ],\n shortcuts: {\n [SupportedKeys.NextListItem]: createShortcut(SplitTaskListItem, 'Enter'),\n [SupportedKeys.SinkListItem]: createShortcut(SinkTaskListItem, 'Mod-]'),\n [SupportedKeys.LiftListItem]: createShortcut(LiftTaskListItem, 'Mod-['),\n [SupportedKeys.TaskList]: createShortcut(TurnIntoTaskList, 'Mod-Alt-9'),\n },\n view: () => (node, view, getPos) => {\n let currNode = node;\n\n const renderer = utils.themeManager.get<ThemeTaskListItemType>('task-list-item', {\n editable: () => view.editable,\n onChange: (selected) => {\n const { tr } = view.state;\n view.dispatch(\n tr.setNodeMarkup(getPos(), undefined, {\n checked: selected,\n }),\n );\n },\n });\n\n if (!renderer) return {};\n\n const { dom, contentDOM, onUpdate } = renderer;\n onUpdate(currNode);\n\n return {\n dom,\n contentDOM,\n update: (updatedNode) => {\n if (updatedNode.type.name !== id) return false;\n\n currNode = updatedNode;\n onUpdate(currNode);\n\n return true;\n },\n };\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commands as commonmarkCommands, commonmark } from '@milkdown/preset-commonmark';\nimport { $remark, AtomList } from '@milkdown/utils';\nimport remarkGFM from 'remark-gfm';\n\nimport { urlPlugin } from './auto-link';\nimport { footnoteReference } from './footnote';\nimport { footnoteDefinition } from './footnote/definition';\nimport { strikeThrough, ToggleStrikeThrough } from './strike-through';\nimport { table } from './table';\nimport {\n LiftTaskListItem,\n SinkTaskListItem,\n SplitTaskListItem,\n taskListItem,\n TurnIntoTaskList,\n} from './task-list-item';\n\nexport * from './footnote';\nexport * from './strike-through';\nexport { SupportedKeys } from './supported-keys';\nexport {\n BreakTable,\n // command\n createTable,\n InsertTable,\n NextCell,\n PrevCell,\n // gather\n table,\n} from './table';\nexport * from './task-list-item';\nexport {\n blockquote,\n bulletList,\n codeFence,\n codeInline,\n commonmark,\n // gather\n commonmarkNodes,\n commonmarkPlugins,\n // node\n doc,\n em,\n hardbreak,\n heading,\n hr,\n image,\n // command\n InsertHardbreak,\n InsertHr,\n InsertImage,\n LiftListItem,\n link,\n listItem,\n ModifyImage,\n ModifyLink,\n orderedList,\n paragraph,\n SinkListItem,\n SplitListItem,\n strong,\n text,\n ToggleBold,\n ToggleInlineCode,\n ToggleItalic,\n ToggleLink,\n TurnIntoCodeFence,\n TurnIntoHeading,\n TurnIntoText,\n WrapInBlockquote,\n WrapInBulletList,\n WrapInOrderedList,\n} from '@milkdown/preset-commonmark';\n\nexport const gfm = AtomList.create([\n ...commonmark,\n $remark(() => remarkGFM),\n table(),\n urlPlugin,\n strikeThrough(),\n taskListItem(),\n footnoteReference(),\n footnoteDefinition(),\n]);\n\nexport const commands = {\n ...commonmarkCommands,\n ToggleStrikeThrough,\n TurnIntoTaskList,\n SinkTaskListItem,\n LiftTaskListItem,\n SplitTaskListItem,\n} as const;\nexport type Commands = typeof commands;\n"],"names":["key","tableNodesSpecCreator","SupportedKeys","CommonmarkKeys","TableKeys","commonmarkCommands"],"mappings":"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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';\nimport { $prose } from '@milkdown/utils';\n\nconst urlRegex = /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/;\n\nconst proseUrlPlugin = () =>\n inputRules({\n rules: [\n new InputRule(urlRegex, (state, match, start, end) => {\n const { schema } = state;\n const [text] = match;\n if (!text) return null;\n\n return state.tr\n .replaceWith(start, end, schema.text(text))\n .addMark(start, text.length + start, schema.marks.link.create({ href: text }));\n }),\n ],\n });\n\nexport const urlPlugin = $prose(() => proseUrlPlugin());\n","/* Copyright 2021, Milkdown by Mirone. */\nexport const getFootnoteRefId = (label: string) => `footnote-ref-${label}`;\n\nexport const getFootnoteDefId = (label: string) => `footnote-def-${label}`;\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';\nimport {\n EditorView,\n findSelectedNodeOfType,\n NodeSelection,\n Plugin,\n PluginKey,\n wrappingInputRule,\n} from '@milkdown/prose';\nimport { createNode } from '@milkdown/utils';\n\nimport { getFootnoteDefId, getFootnoteRefId } from './utils';\n\nconst key = new PluginKey('MILKDOWN_PLUGIN_FOOTNOTE_DEF_INPUT');\nexport const ModifyFootnoteDef = createCmdKey<string>('ModifyFootnoteDef');\n\nexport const footnoteDefinition = createNode((utils) => {\n const id = 'footnote_definition';\n const markdownId = 'footnoteDefinition';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'block',\n content: 'block+',\n defining: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `div[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return {\n label: dom.dataset['label'],\n };\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs['label'];\n const className = utils.getClassName(node.attrs, 'footnote-definition');\n\n const dt = document.createElement('dt');\n dt.textContent = `[${label}]:`;\n dt.onclick = () => {\n const view = ctx.get(editorViewCtx);\n const selection = NodeSelection.create(view.state.doc, view.state.selection.from - 2);\n view.dispatch(view.state.tr.setSelection(selection));\n };\n\n const a = document.createElement('a');\n a.href = `#${getFootnoteRefId(label)}`;\n a.contentEditable = 'false';\n a.textContent = '↩';\n a.onmousedown = (e) => {\n e.preventDefault();\n };\n\n return [\n 'div',\n {\n class: className,\n 'data-label': label,\n 'data-type': id,\n id: getFootnoteDefId(label),\n },\n ['div', { class: 'footnote-definition_content' }, dt, ['dd', 0]],\n ['div', { class: 'footnote-definition_anchor' }, a],\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === markdownId,\n runner: (state, node, type) => {\n state\n .openNode(type, {\n label: node['label'] as string,\n })\n .next(node.children)\n .closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state\n .openNode(markdownId, undefined, {\n label: node.attrs['label'],\n identifier: node.attrs['label'],\n })\n .next(node.content)\n .closeNode();\n },\n },\n }),\n commands: (nodeType) => [\n createCmd(ModifyFootnoteDef, (label = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, nodeType);\n if (!node) return false;\n\n const { tr } = state;\n const _tr = tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, label });\n dispatch?.(_tr.setSelection(NodeSelection.create(_tr.doc, node.pos)));\n\n return true;\n }),\n ],\n inputRules: (nodeType) => [\n wrappingInputRule(\n /(?:\\[\\^)([^:]+)(?::)$/,\n nodeType,\n (match) => {\n const label = match[1] ?? 'footnote';\n return {\n label,\n };\n },\n () => false,\n ),\n ],\n prosePlugins: (type, ctx) => {\n return [\n new Plugin({\n key,\n view: (editorView) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n width: '12em',\n placeholder: 'Input Footnote Label',\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyFootnoteDef, value);\n },\n isBindMode: true,\n });\n if (!inputChipRenderer) return {};\n const shouldDisplay = (view: EditorView) => {\n return Boolean(\n view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type),\n );\n };\n const getCurrentLabel = (view: EditorView) => {\n const result = findSelectedNodeOfType(view.state.selection, type);\n if (!result) return;\n\n const value = result.node.attrs['label'];\n return value;\n };\n const renderByView = (view: EditorView) => {\n if (!view.editable) {\n return;\n }\n const display = shouldDisplay(view);\n if (display) {\n inputChipRenderer.show(view);\n inputChipRenderer.update(getCurrentLabel(view));\n } else {\n inputChipRenderer.hide();\n }\n };\n inputChipRenderer.init(editorView);\n renderByView(editorView);\n\n return {\n update: (view, prevState) => {\n const isEqualSelection =\n prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection);\n if (isEqualSelection) return;\n\n renderByView(view);\n },\n destroy: () => {\n inputChipRenderer.destroy();\n },\n };\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commandsCtx, createCmd, createCmdKey, editorViewCtx, ThemeInputChipType } from '@milkdown/core';\nimport { EditorView, findSelectedNodeOfType, InputRule, NodeSelection, Plugin, PluginKey } from '@milkdown/prose';\nimport { createNode } from '@milkdown/utils';\n\nimport { getFootnoteDefId, getFootnoteRefId } from './utils';\n\nexport const ModifyFootnoteRef = createCmdKey<string>('ModifyFootnoteRef');\nconst key = new PluginKey('MILKDOWN_PLUGIN_FOOTNOTE_REF_INPUT');\n\nexport const footnoteReference = createNode((utils) => {\n const id = 'footnote_reference';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'inline',\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return {\n label: dom.dataset['label'],\n };\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs['label'];\n const a = document.createElement('a');\n const href = `#${getFootnoteDefId(label)}`;\n a.href = href;\n a.textContent = `[${label}]`;\n a.onclick = (e) => {\n const view = ctx.get(editorViewCtx);\n if (view.editable) {\n e.preventDefault();\n }\n };\n a.ondblclick = () => {\n const view = ctx.get(editorViewCtx);\n if (view.editable) {\n window.location.href = href;\n }\n };\n return [\n 'sup',\n {\n 'data-label': label,\n 'data-type': id,\n id: getFootnoteRefId(label),\n },\n a,\n ];\n },\n parseMarkdown: {\n match: ({ type }) => type === 'footnoteReference',\n runner: (state, node, type) => {\n state.addNode(type, {\n label: node['label'] as string,\n });\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.addNode('footnoteReference', undefined, undefined, {\n label: node.attrs['label'],\n identifier: node.attrs['label'],\n });\n },\n },\n }),\n commands: (nodeType) => [\n createCmd(ModifyFootnoteRef, (label = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, nodeType);\n if (!node) return false;\n\n const { tr } = state;\n const _tr = tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, label });\n dispatch?.(_tr.setSelection(NodeSelection.create(_tr.doc, node.pos)));\n\n return true;\n }),\n ],\n inputRules: (nodeType) => [\n new InputRule(/(?:\\[\\^)([^\\]]+)(?:\\])$/, (state, match, start, end) => {\n const $start = state.doc.resolve(start);\n const index = $start.index();\n const $end = state.doc.resolve(end);\n if (!$start.parent.canReplaceWith(index, $end.index(), nodeType)) {\n return null;\n }\n const label = match[1];\n return state.tr.replaceRangeWith(\n start,\n end,\n nodeType.create({\n label,\n }),\n );\n }),\n ],\n prosePlugins: (type, ctx) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n width: '12em',\n placeholder: 'Input Footnote Label',\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyFootnoteRef, value);\n },\n isBindMode: true,\n });\n if (!inputChipRenderer) return [];\n const shouldDisplay = (view: EditorView) => {\n return Boolean(view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type));\n };\n const getCurrentLabel = (view: EditorView) => {\n const result = findSelectedNodeOfType(view.state.selection, type);\n if (!result) return;\n\n const value = result.node.attrs['label'];\n return value;\n };\n const renderByView = (view: EditorView) => {\n if (!view.editable) {\n return;\n }\n const display = shouldDisplay(view);\n if (display) {\n inputChipRenderer.show(view);\n inputChipRenderer.update(getCurrentLabel(view));\n } else {\n inputChipRenderer.hide();\n }\n };\n return [\n new Plugin({\n key,\n view: (editorView) => {\n inputChipRenderer.init(editorView);\n renderByView(editorView);\n\n return {\n update: (view, prevState) => {\n const isEqualSelection =\n prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection);\n if (isEqualSelection) return;\n\n renderByView(view);\n },\n destroy: () => {\n inputChipRenderer.destroy();\n },\n };\n },\n }),\n ];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Command, isInTable, Node, NodeType, Selection } from '@milkdown/prose';\n\nexport const exitTable =\n (node: NodeType): Command =>\n (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n const { $head } = state.selection;\n const pos = $head.after();\n const tr = state.tr.replaceWith(pos, pos, node.createAndFill() as Node);\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch?.(tr.scrollIntoView());\n return true;\n };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport {\n CellSelection,\n cloneTr,\n findParentNode,\n Node as ProsemirrorNode,\n Schema,\n Selection,\n TableMap,\n tableNodeTypes,\n TableRect,\n Transaction,\n} from '@milkdown/prose';\n\nexport type CellPos = {\n pos: number;\n start: number;\n node: ProsemirrorNode;\n};\n\nexport const findTable = (selection: Selection) =>\n findParentNode((node) => node.type.spec['tableRole'] === 'table')(selection);\n\nexport const getCellsInColumn =\n (columnIndex: number) =>\n (selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection);\n if (!table) return undefined;\n const map = TableMap.get(table.node);\n if (columnIndex < 0 || columnIndex >= map.width) {\n return undefined;\n }\n\n return map.cellsInRect({ left: columnIndex, right: columnIndex + 1, top: 0, bottom: map.height }).map((pos) => {\n const node = table.node.nodeAt(pos);\n if (!node) throw new Error();\n const start = pos + table.start;\n return {\n pos: start,\n start: start + 1,\n node,\n };\n });\n };\n\nexport const getCellsInRow =\n (rowIndex: number) =>\n (selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection);\n if (!table) return undefined;\n const map = TableMap.get(table.node);\n if (rowIndex < 0 || rowIndex >= map.height) {\n return undefined;\n }\n\n return map.cellsInRect({ left: 0, right: map.width, top: rowIndex, bottom: rowIndex + 1 }).map((pos) => {\n const node = table.node.nodeAt(pos);\n if (!node) throw new Error();\n const start = pos + table.start;\n return {\n pos: start,\n start: start + 1,\n node,\n };\n });\n };\n\nexport const createTable = (schema: Schema, rowsCount = 3, colsCount = 3) => {\n const { cell: tableCell, header_cell: tableHeader, row: tableRow, table } = tableNodeTypes(schema);\n\n const cells = Array(colsCount)\n .fill(0)\n .map(() => tableCell.createAndFill(null) as ProsemirrorNode);\n\n const headerCells = Array(colsCount)\n .fill(0)\n .map(() => tableHeader.createAndFill(null) as ProsemirrorNode);\n\n const rows = Array(rowsCount)\n .fill(0)\n .map((_, i) => tableRow.create(null, i === 0 ? headerCells : cells));\n\n return table.create(null, rows);\n};\n\nexport const selectLine = (type: 'row' | 'col') => (index: number) => (tr: Transaction) => {\n const table = findTable(tr.selection);\n const isRowSelection = type === 'row';\n if (table) {\n const map = TableMap.get(table.node);\n\n // Check if the index is valid\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n const lastCell = map.positionAt(\n isRowSelection ? index : map.height - 1,\n isRowSelection ? map.width - 1 : index,\n table.node,\n );\n const $lastCell = tr.doc.resolve(table.start + lastCell);\n\n const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection;\n\n const firstCell = map.positionAt(isRowSelection ? index : 0, isRowSelection ? 0 : index, table.node);\n const $firstCell = tr.doc.resolve(table.start + firstCell);\n return cloneTr(tr.setSelection(createCellSelection($lastCell, $firstCell) as unknown as Selection));\n }\n }\n return tr;\n};\n\nexport const getCellsInTable = (selection: Selection) => {\n const table = findTable(selection);\n if (!table) {\n return;\n }\n const map = TableMap.get(table.node);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height,\n });\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos);\n const pos = nodePos + table.start;\n return { pos, start: pos + 1, node };\n });\n};\n\nexport const selectTable = (tr: Transaction) => {\n const cells = getCellsInTable(tr.selection);\n if (cells && cells[0]) {\n const $firstCell = tr.doc.resolve(cells[0].pos);\n const last = cells[cells.length - 1];\n if (last) {\n const $lastCell = tr.doc.resolve(last.pos);\n return cloneTr(tr.setSelection(new CellSelection($lastCell, $firstCell) as unknown as Selection));\n }\n }\n return tr;\n};\n\nexport function addRowWithAlignment(tr: Transaction, { map, tableStart, table }: TableRect, row: number) {\n const rowPos = Array(row)\n .fill(0)\n .reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize;\n }, tableStart);\n\n const { cell: cellType, row: rowType } = tableNodeTypes(table.type.schema);\n\n const cells = Array(map.width)\n .fill(0)\n .map((_, col) => {\n const headerCol = table.nodeAt(map.map[col] as number);\n return cellType.createAndFill({ alignment: headerCol?.attrs['alignment'] }) as ProsemirrorNode;\n });\n\n tr.insert(rowPos, rowType.create(null, cells));\n return tr;\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { CellSelection, EditorView, TableMap } from '@milkdown/prose';\n\nimport { Item } from './actions';\n\nexport const getCellSelection = (view: EditorView): CellSelection => view.state.selection as unknown as CellSelection;\n\nexport const isFirstRowSelected = (selection: CellSelection) => {\n const map = TableMap.get(selection.$anchorCell.node(-1));\n const start = selection.$anchorCell.start(-1);\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: 1,\n });\n const selectedCells = map.cellsInRect(\n map.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start),\n );\n\n for (let i = 0, count = cells.length; i < count; i++) {\n if (selectedCells.indexOf(cells[i] as number) === -1) {\n return false;\n }\n }\n return true;\n};\n\nexport const calculateItem = (actions: Record<string, Item>, view: EditorView) => {\n Object.values(actions).forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n item.$.classList.remove('hide');\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport {\n addColumnAfter,\n addColumnBefore,\n Command,\n deleteColumn,\n deleteRow,\n deleteTable,\n EditorView,\n isInTable,\n selectedRect,\n setCellAttr,\n} from '@milkdown/prose';\n\nimport { addRowWithAlignment } from '../utils';\nimport { getCellSelection, isFirstRowSelected } from './helper';\n\nexport type Item = {\n $: HTMLElement;\n command: (e: Event, view: EditorView) => Command;\n disable?: (view: EditorView) => boolean;\n};\n\nexport enum Action {\n AddColLeft,\n AddColRight,\n AddRowTop,\n AddRowBottom,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Delete,\n}\n\nexport const createActions: (ctx: Ctx) => Record<Action, Item> = (ctx) => ({\n [Action.AddColLeft]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'leftArrow')?.dom as HTMLElement,\n command: () => addColumnBefore,\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AddColRight]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'rightArrow')?.dom as HTMLElement,\n command: () => addColumnAfter,\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AddRowTop]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'upArrow')?.dom as HTMLElement,\n command: () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(state.tr, rect, rect.top));\n }\n return true;\n },\n disable: (view) =>\n !getCellSelection(view).isRowSelection() ||\n getCellSelection(view).$head.parent.type.name === 'table_header',\n },\n [Action.AddRowBottom]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'downArrow')?.dom as HTMLElement,\n command: () => (state, dispatch) => {\n if (!isInTable(state)) return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRowWithAlignment(state.tr, rect, rect.bottom));\n }\n return true;\n },\n disable: (view) => !getCellSelection(view).isRowSelection(),\n },\n [Action.AlignLeft]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignLeft')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'left'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AlignCenter]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignCenter')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'center'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.AlignRight]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'alignRight')?.dom as HTMLElement,\n command: () => setCellAttr('alignment', 'right'),\n disable: (view) => !getCellSelection(view).isColSelection(),\n },\n [Action.Delete]: {\n $: ctx.get(themeManagerCtx).get(ThemeIcon, 'delete')?.dom as HTMLElement,\n command: (_, view) => {\n const selection = getCellSelection(view);\n const isCol = selection.isColSelection();\n const isRow = selection.isRowSelection();\n if (isCol && isRow) {\n return deleteTable;\n }\n\n if (isCol) {\n return deleteColumn;\n }\n\n return deleteRow;\n },\n disable: (view) => {\n const selection = getCellSelection(view);\n if (selection.isRowSelection()) {\n if (selection.isColSelection()) {\n return false;\n }\n return isFirstRowSelected(selection);\n }\n return false;\n },\n },\n});\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { calculateNodePosition, CellSelection, EditorView } from '@milkdown/prose';\n\nexport const calculatePosition = (view: EditorView, dom: HTMLElement) => {\n const { selection } = view.state as unknown as { selection: CellSelection };\n const isCol = selection.isColSelection();\n const isRow = selection.isRowSelection();\n\n calculateNodePosition(view, dom, (selected, target, parent) => {\n const $editor = dom.parentElement;\n if (!$editor) {\n throw new Error();\n }\n let left = !isRow\n ? selected.left - parent.left + (selected.width - target.width) / 2\n : selected.left - parent.left - target.width / 2 - 8;\n const top = selected.top - parent.top - target.height - (isCol ? 14 : 0) - 14 + $editor.scrollTop;\n\n if (left < 0) {\n left = 0;\n }\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nexport enum ToolTipPos {\n Left = 'Left',\n Top = 'Top',\n Point = 'Point',\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Emotion, getPalette, ThemeBorder, ThemeManager, ThemeShadow, ThemeSize } from '@milkdown/core';\n\nexport const injectStyle = (themeManager: ThemeManager, { css, injectGlobal }: Emotion) => {\n const palette = getPalette(themeManager);\n const radius = themeManager.get(ThemeSize, 'radius');\n const lineWidth = themeManager.get(ThemeSize, 'lineWidth');\n\n injectGlobal`\n .milkdown {\n .tableWrapper {\n table {\n width: calc(100% - 2em) !important;\n margin: 1em 0 1em 1em !important;\n\n .milkdown-cell-left,\n .milkdown-cell-point,\n .milkdown-cell-top {\n position: absolute;\n\n &::after {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: block;\n transition: all 0.2s ease-in-out;\n background: ${palette('secondary', 0.12)};\n content: '';\n }\n\n &:hover::after {\n background: ${palette('secondary', 0.38)};\n }\n }\n\n .milkdown-cell-left {\n left: calc(-6px - 0.5em);\n top: 0;\n bottom: 0;\n width: 0.5em;\n }\n\n .milkdown-cell-top {\n left: 0;\n right: 0;\n top: calc(-6px - 0.5em);\n height: 0.5em;\n }\n\n .milkdown-cell-point {\n left: calc(-2px - 1em);\n top: calc(-2px - 1em);\n width: 1em;\n height: 1em;\n\n .icon {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n }\n }\n }\n }\n `;\n\n return css`\n display: inline-flex;\n cursor: pointer;\n z-index: 2;\n\n justify-content: space-evenly;\n\n position: absolute;\n\n border-radius: ${radius};\n\n ${themeManager.get(ThemeBorder, undefined)};\n ${themeManager.get(ThemeShadow, undefined)};\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 2em;\n line-height: 2em;\n text-align: center;\n transition: all 0.4s ease-in-out;\n\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n\n &.active {\n color: ${palette('primary')};\n }\n\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n right: 0;\n top: 0;\n width: ${lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport { Decoration, WidgetDecorationSpec } from '@milkdown/prose';\n\nimport { CellPos, selectLine, selectTable } from '../utils';\nimport { ToolTipPos } from './constant';\n\nconst calculateClassName = (pos: ToolTipPos) => {\n switch (pos) {\n case ToolTipPos.Left: {\n return 'milkdown-cell-left';\n }\n case ToolTipPos.Top: {\n return 'milkdown-cell-top';\n }\n case ToolTipPos.Point:\n default: {\n return 'milkdown-cell-point';\n }\n }\n};\n\nexport function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos.Point): Decoration<WidgetDecorationSpec>;\nexport function createWidget(\n ctx: Ctx,\n cell: CellPos,\n pos: ToolTipPos.Left,\n index: number,\n): Decoration<WidgetDecorationSpec>;\nexport function createWidget(\n ctx: Ctx,\n cell: CellPos,\n pos: ToolTipPos.Top,\n index: number,\n): Decoration<WidgetDecorationSpec>;\nexport function createWidget(ctx: Ctx, cell: CellPos, pos: ToolTipPos, index = 0) {\n return Decoration.widget(cell.pos + 1, (view) => {\n const div = document.createElement('div');\n div.classList.add(calculateClassName(pos));\n if (pos === ToolTipPos.Point) {\n div.appendChild(ctx.get(themeManagerCtx).get(ThemeIcon, 'select')?.dom as HTMLElement);\n }\n div.addEventListener('mousedown', (e) => {\n if (!view) return;\n\n e.preventDefault();\n switch (pos) {\n case ToolTipPos.Point: {\n view.dispatch(selectTable(view.state.tr));\n return;\n }\n case ToolTipPos.Left: {\n view.dispatch(selectLine('row')(index)(view.state.tr));\n return;\n }\n case ToolTipPos.Top: {\n view.dispatch(selectLine('col')(index)(view.state.tr));\n return;\n }\n }\n });\n return div;\n });\n}\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { Ctx } from '@milkdown/core';\nimport { CellSelection, Decoration, DecorationSet, Plugin, PluginKey } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport { CellPos, getCellsInColumn, getCellsInRow } from '../utils';\nimport { createActions } from './actions';\nimport { calculatePosition } from './calc-pos';\nimport { ToolTipPos } from './constant';\nimport { calculateItem } from './helper';\nimport { injectStyle } from './style';\nimport { createWidget } from './widget';\n\nexport const key = 'MILKDOWN_PLUGIN_TABLE';\n\nexport const operatorPlugin = (ctx: Ctx, utils: Utils) => {\n return new Plugin({\n key: new PluginKey('MILKDOWN_TABLE_OP'),\n props: {\n decorations: (state) => {\n const decorations: Decoration[] = [];\n const leftCells = getCellsInColumn(0)(state.selection);\n if (!leftCells) return null;\n const topCells = getCellsInRow(0)(state.selection);\n if (!topCells) return null;\n\n const [topLeft] = leftCells;\n\n decorations.push(createWidget(ctx, topLeft as CellPos, ToolTipPos.Point));\n leftCells.forEach((cell, i) => {\n decorations.push(createWidget(ctx, cell, ToolTipPos.Left, i));\n });\n topCells.forEach((cell, i) => {\n decorations.push(createWidget(ctx, cell, ToolTipPos.Top, i));\n });\n\n return DecorationSet.create(state.doc, decorations);\n },\n },\n view: (editorView) => {\n const items = Object.fromEntries(Object.entries(createActions(ctx)).filter(([, value]) => value.$ != null));\n const tooltip = document.createElement('div');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion));\n if (style) {\n tooltip.classList.add(style);\n }\n });\n tooltip.classList.add('table-tooltip', 'hide');\n Object.values(items).forEach(({ $ }) => tooltip.appendChild($));\n editorView.dom.parentNode?.appendChild(tooltip);\n\n const listener = (e: Event) => {\n if (!editorView) return;\n e.stopPropagation();\n e.preventDefault();\n Object.values(items).forEach(({ $, command }) => {\n if ($.contains(e.target as Element)) {\n command(e, editorView)(editorView.state, editorView.dispatch, editorView);\n }\n });\n };\n\n const hide = () => {\n tooltip.classList.add('hide');\n };\n\n tooltip.addEventListener('mousedown', listener);\n\n return {\n update: (view, prevState) => {\n const state = view.state;\n\n if (prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection)) return;\n\n const isCellSelection = state.selection instanceof CellSelection;\n\n if (!isCellSelection || !view.editable) {\n hide();\n return;\n }\n\n calculateItem(items, view);\n if (Object.values(items).every(({ $ }) => $.classList.contains('hide'))) {\n hide();\n return;\n }\n tooltip.classList.remove('hide');\n calculatePosition(view, tooltip);\n },\n destroy: () => {\n tooltip.removeEventListener('mousedown', listener);\n tooltip.remove();\n },\n };\n },\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { tableNodes as tableNodesSpecCreator } from '@milkdown/prose';\n\nexport const schema = tableNodesSpecCreator({\n tableGroup: 'block',\n cellContent: 'paragraph',\n cellAttributes: {\n alignment: {\n default: 'left',\n getFromDOM: (dom) => (dom as HTMLElement).style.textAlign || 'left',\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || 'left'}`;\n },\n },\n },\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey, MarkdownNode, schemaCtx } from '@milkdown/core';\nimport {\n columnResizing,\n goToNextCell,\n InputRule,\n NodeType,\n Selection,\n tableEditing,\n TextSelection,\n} from '@milkdown/prose';\nimport { createPlugin, createShortcut } from '@milkdown/utils';\n\nimport { exitTable } from '../command';\nimport { operatorPlugin } from '../operator-plugin';\nimport { createTable } from '../utils';\nimport { schema } from './schema';\n\nexport const SupportedKeys = {\n NextCell: 'NextCell',\n PrevCell: 'PrevCell',\n ExitTable: 'ExitTable',\n} as const;\nexport type SupportedKeys = typeof SupportedKeys;\n\ntype Keys = keyof SupportedKeys;\n\nexport const PrevCell = createCmdKey('PrevCell');\nexport const NextCell = createCmdKey('NextCell');\nexport const BreakTable = createCmdKey('BreakTable');\nexport const InsertTable = createCmdKey('InsertTable');\n\nexport const table = createPlugin<Keys, Record<string, unknown>, keyof typeof schema>((utils) => {\n return {\n schema: () => ({\n node: {\n table: {\n ...schema.table,\n parseMarkdown: {\n match: (node) => node.type === 'table',\n runner: (state, node, type) => {\n const align = node['align'] as (string | null)[];\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align,\n isHeader: i === 0,\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table',\n runner: (state, node) => {\n const firstLine = node.content.firstChild?.content;\n if (!firstLine) return;\n\n const align: (string | null)[] = [];\n firstLine.forEach((cell) => {\n align.push(cell.attrs['alignment']);\n });\n state.openNode('table', undefined, { align });\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n table_row: {\n ...schema.table_row,\n parseMarkdown: {\n match: (node) => node.type === 'tableRow',\n runner: (state, node, type) => {\n const align = node['align'] as (string | null)[];\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align: align[i],\n isHeader: node['isHeader'],\n }));\n state.openNode(type);\n state.next(children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_row',\n runner: (state, node) => {\n state.openNode('tableRow');\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n table_cell: {\n ...schema.table_cell,\n parseMarkdown: {\n match: (node) => node.type === 'tableCell' && !node['isHeader'],\n runner: (state, node, type) => {\n const align = node['align'] as string;\n state\n .openNode(type, { alignment: align })\n .openNode(state.schema.nodes['paragraph'] as NodeType)\n .next(node.children)\n .closeNode()\n .closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_cell',\n runner: (state, node) => {\n state.openNode('tableCell').next(node.content).closeNode();\n },\n },\n },\n table_header: {\n ...schema.table_header,\n parseMarkdown: {\n match: (node) => node.type === 'tableCell' && !!node['isHeader'],\n runner: (state, node, type) => {\n const align = node['align'] as string;\n state.openNode(type, { alignment: align });\n state.openNode(state.schema.nodes['paragraph'] as NodeType);\n state.next(node.children);\n state.closeNode();\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'table_header',\n runner: (state, node) => {\n state.openNode('tableCell');\n state.next(node.content);\n state.closeNode();\n },\n },\n },\n },\n }),\n inputRules: (nodeType, ctx) => [\n new InputRule(/^\\|\\|\\s$/, (state, _match, start, end) => {\n const $start = state.doc.resolve(start);\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType.table))\n return null;\n\n const tableNode = createTable(ctx.get(schemaCtx));\n const tr = state.tr.replaceRangeWith(start, end, tableNode).scrollIntoView();\n return tr.setSelection(TextSelection.create(tr.doc, start + 3));\n }),\n ],\n commands: (_, ctx) => [\n createCmd(PrevCell, () => goToNextCell(-1)),\n createCmd(NextCell, () => goToNextCell(1)),\n createCmd(BreakTable, () => exitTable(ctx.get(schemaCtx).nodes['paragraph'] as NodeType)),\n createCmd(InsertTable, () => (state, dispatch) => {\n const { selection, tr } = state;\n const { from } = selection;\n const table = createTable(ctx.get(schemaCtx));\n const _tr = tr.replaceSelectionWith(table);\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true);\n if (sel) {\n dispatch?.(_tr.setSelection(sel));\n }\n return true;\n }),\n ],\n shortcuts: {\n [SupportedKeys.NextCell]: createShortcut(NextCell, 'Mod-]'),\n [SupportedKeys.PrevCell]: createShortcut(PrevCell, 'Mod-['),\n [SupportedKeys.ExitTable]: createShortcut(BreakTable, 'Mod-Enter'),\n },\n prosePlugins: (_, ctx) => {\n return [operatorPlugin(ctx, utils), columnResizing({}), tableEditing()];\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { SupportedKeys as CommonmarkKeys } from '@milkdown/preset-commonmark';\n\nimport { SupportedKeys as TableKeys } from './table';\n\nexport const SupportedKeys = {\n ...CommonmarkKeys,\n ...TableKeys,\n StrikeThrough: 'StrikeThrough',\n TaskList: 'TaskList',\n} as const;\nexport type SupportedKeys = typeof SupportedKeys;\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core';\nimport { markRule, toggleMark } from '@milkdown/prose';\nimport { createMark, createShortcut } from '@milkdown/utils';\n\nimport { SupportedKeys } from './supported-keys';\n\ntype Keys = SupportedKeys['StrikeThrough'];\n\nexport const ToggleStrikeThrough = createCmdKey('ToggleStrikeThrough');\n\nconst id = 'strike_through';\nexport const strikeThrough = createMark<Keys>((utils) => {\n return {\n id,\n schema: () => ({\n parseDOM: [\n { tag: 'del' },\n { style: 'text-decoration', getAttrs: (value) => (value === 'line-through') as false },\n ],\n toDOM: (mark) => ['del', { class: utils.getClassName(mark.attrs, 'strike-through') }],\n parseMarkdown: {\n match: (node) => node.type === 'delete',\n runner: (state, node, markType) => {\n state.openMark(markType);\n state.next(node.children);\n state.closeMark(markType);\n },\n },\n toMarkdown: {\n match: (mark) => mark.type.name === id,\n runner: (state, mark) => {\n state.withMark(mark, 'delete');\n },\n },\n }),\n inputRules: (markType) => [\n markRule(/(?:~~)([^~]+)(?:~~)$/, markType),\n markRule(/(?:^|[^~])(~([^~]+)~)$/, markType),\n ],\n commands: (markType) => [createCmd(ToggleStrikeThrough, () => toggleMark(markType))],\n shortcuts: {\n [SupportedKeys.StrikeThrough]: createShortcut(ToggleStrikeThrough, 'Mod-Alt-x'),\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey, editorViewCtx, ThemeTaskListItemType } from '@milkdown/core';\nimport { liftListItem, sinkListItem, splitListItem, wrapIn, wrappingInputRule } from '@milkdown/prose';\nimport { createNode, createShortcut } from '@milkdown/utils';\n\nimport { SupportedKeys } from './supported-keys';\n\ntype Keys = Extract<keyof SupportedKeys, 'SinkListItem' | 'LiftListItem' | 'NextListItem' | 'TaskList'>;\n\nexport const SplitTaskListItem = createCmdKey('SplitTaskListItem');\nexport const SinkTaskListItem = createCmdKey('SinkTaskListItem');\nexport const LiftTaskListItem = createCmdKey('LiftTaskListItem');\nexport const TurnIntoTaskList = createCmdKey('TurnIntoTaskList');\n\nexport const taskListItem = createNode<Keys>((utils) => {\n const id = 'task_list_item';\n\n return {\n id,\n schema: (ctx) => ({\n group: 'listItem',\n content: 'paragraph block*',\n defining: true,\n priority: 60,\n attrs: {\n checked: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'li[data-type=\"task-item\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) {\n throw new Error();\n }\n return { checked: dom.dataset['checked'] === 'true' };\n },\n },\n ],\n toDOM: (node) => {\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.checked = node.attrs['checked'];\n checkbox.className = utils.getClassName(node.attrs, 'task-list-item_checkbox');\n checkbox.onchange = (event) => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) return;\n const view = ctx.get(editorViewCtx);\n\n if (!view.editable) {\n checkbox.checked = !checkbox.checked;\n\n return;\n }\n\n const { top, left } = target.getBoundingClientRect();\n const result = view.posAtCoords({ top, left });\n if (!result) return;\n\n const { tr } = view.state;\n\n view.dispatch(\n tr.setNodeMarkup(result.inside, undefined, {\n checked: target.checked,\n }),\n );\n };\n return [\n 'li',\n {\n 'data-type': 'task-item',\n 'data-checked': node.attrs['checked'] ? 'true' : 'false',\n class: utils.getClassName(node.attrs, 'task-list-item'),\n },\n checkbox,\n ['span', { class: utils.getClassName(node.attrs, 'task-list-item_body') }, 0],\n ];\n },\n parseMarkdown: {\n match: ({ type, checked }) => {\n return type === 'listItem' && checked !== null;\n },\n runner: (state, node, type) => {\n state.openNode(type, { checked: node['checked'] as boolean });\n state.next(node.children);\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === id,\n runner: (state, node) => {\n state.openNode('listItem', undefined, { checked: node.attrs['checked'] });\n state.next(node.content);\n state.closeNode();\n },\n },\n }),\n inputRules: (nodeType) => [\n wrappingInputRule(/^\\s*(\\[([ |x])\\])\\s$/, nodeType, (match) => ({\n checked: match[match.length - 1] === 'x',\n })),\n ],\n commands: (nodeType) => [\n createCmd(SplitTaskListItem, () => splitListItem(nodeType)),\n createCmd(SinkTaskListItem, () => sinkListItem(nodeType)),\n createCmd(LiftTaskListItem, () => liftListItem(nodeType)),\n createCmd(TurnIntoTaskList, () => wrapIn(nodeType)),\n ],\n shortcuts: {\n [SupportedKeys.NextListItem]: createShortcut(SplitTaskListItem, 'Enter'),\n [SupportedKeys.SinkListItem]: createShortcut(SinkTaskListItem, 'Mod-]'),\n [SupportedKeys.LiftListItem]: createShortcut(LiftTaskListItem, 'Mod-['),\n [SupportedKeys.TaskList]: createShortcut(TurnIntoTaskList, 'Mod-Alt-9'),\n },\n view: () => (node, view, getPos) => {\n let currNode = node;\n\n const renderer = utils.themeManager.get<ThemeTaskListItemType>('task-list-item', {\n editable: () => view.editable,\n onChange: (selected) => {\n const { tr } = view.state;\n view.dispatch(\n tr.setNodeMarkup(getPos(), undefined, {\n checked: selected,\n }),\n );\n },\n });\n\n if (!renderer) return {};\n\n const { dom, contentDOM, onUpdate } = renderer;\n onUpdate(currNode);\n\n return {\n dom,\n contentDOM,\n update: (updatedNode) => {\n if (updatedNode.type.name !== id) return false;\n\n currNode = updatedNode;\n onUpdate(currNode);\n\n return true;\n },\n };\n },\n };\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commands as commonmarkCommands, commonmark } from '@milkdown/preset-commonmark';\nimport { $remark, AtomList } from '@milkdown/utils';\nimport remarkGFM from 'remark-gfm';\n\nimport { urlPlugin } from './auto-link';\nimport { footnoteReference } from './footnote';\nimport { footnoteDefinition } from './footnote/definition';\nimport { strikeThrough, ToggleStrikeThrough } from './strike-through';\nimport { table } from './table';\nimport {\n LiftTaskListItem,\n SinkTaskListItem,\n SplitTaskListItem,\n taskListItem,\n TurnIntoTaskList,\n} from './task-list-item';\n\nexport * from './footnote';\nexport * from './strike-through';\nexport { SupportedKeys } from './supported-keys';\nexport {\n BreakTable,\n // command\n createTable,\n InsertTable,\n NextCell,\n PrevCell,\n // gather\n table,\n} from './table';\nexport * from './task-list-item';\nexport {\n blockquote,\n bulletList,\n codeFence,\n codeInline,\n commonmark,\n // gather\n commonmarkNodes,\n commonmarkPlugins,\n // node\n doc,\n em,\n hardbreak,\n heading,\n hr,\n image,\n // command\n InsertHardbreak,\n InsertHr,\n InsertImage,\n LiftListItem,\n link,\n listItem,\n ModifyImage,\n ModifyLink,\n orderedList,\n paragraph,\n SinkListItem,\n SplitListItem,\n strong,\n text,\n ToggleBold,\n ToggleInlineCode,\n ToggleItalic,\n ToggleLink,\n TurnIntoCodeFence,\n TurnIntoHeading,\n TurnIntoText,\n WrapInBlockquote,\n WrapInBulletList,\n WrapInOrderedList,\n} from '@milkdown/preset-commonmark';\n\nexport const gfm = AtomList.create([\n ...commonmark,\n $remark(() => remarkGFM),\n table(),\n urlPlugin,\n strikeThrough(),\n taskListItem(),\n footnoteReference(),\n footnoteDefinition(),\n]);\n\nexport const commands = {\n ...commonmarkCommands,\n ToggleStrikeThrough,\n TurnIntoTaskList,\n SinkTaskListItem,\n LiftTaskListItem,\n SplitTaskListItem,\n} as const;\nexport type Commands = typeof commands;\n"],"names":["key","tableNodesSpecCreator","SupportedKeys","CommonmarkKeys","TableKeys","commonmarkCommands"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milkdown/preset-gfm",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.2",
|
|
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.0.
|
|
21
|
-
"@milkdown/prose": "6.0.
|
|
22
|
-
"@milkdown/design-system": "6.0.
|
|
23
|
-
"@milkdown/preset-commonmark": "6.0.
|
|
20
|
+
"@milkdown/core": "6.0.2",
|
|
21
|
+
"@milkdown/prose": "6.0.2",
|
|
22
|
+
"@milkdown/design-system": "6.0.2",
|
|
23
|
+
"@milkdown/preset-commonmark": "6.0.2"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@milkdown/core": "^6.0.1",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@milkdown/preset-commonmark": "^6.0.1"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@milkdown/utils": "6.0.
|
|
31
|
+
"@milkdown/utils": "6.0.2",
|
|
32
32
|
"remark-gfm": "^3.0.0",
|
|
33
33
|
"tslib": "^2.3.1"
|
|
34
34
|
},
|
|
@@ -140,7 +140,9 @@ export const footnoteDefinition = createNode((utils) => {
|
|
|
140
140
|
});
|
|
141
141
|
if (!inputChipRenderer) return {};
|
|
142
142
|
const shouldDisplay = (view: EditorView) => {
|
|
143
|
-
return Boolean(
|
|
143
|
+
return Boolean(
|
|
144
|
+
view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type),
|
|
145
|
+
);
|
|
144
146
|
};
|
|
145
147
|
const getCurrentLabel = (view: EditorView) => {
|
|
146
148
|
const result = findSelectedNodeOfType(view.state.selection, type);
|
|
@@ -123,7 +123,7 @@ export const footnoteReference = createNode((utils) => {
|
|
|
123
123
|
});
|
|
124
124
|
if (!inputChipRenderer) return [];
|
|
125
125
|
const shouldDisplay = (view: EditorView) => {
|
|
126
|
-
return Boolean(type && findSelectedNodeOfType(view.state.selection, type));
|
|
126
|
+
return Boolean(view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type));
|
|
127
127
|
};
|
|
128
128
|
const getCurrentLabel = (view: EditorView) => {
|
|
129
129
|
const result = findSelectedNodeOfType(view.state.selection, type);
|