@milkdown/preset-gfm 7.15.1 → 7.15.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.
Files changed (65) hide show
  1. package/lib/index.js +265 -205
  2. package/lib/index.js.map +1 -1
  3. package/lib/mark/strike-through.d.ts.map +1 -1
  4. package/lib/node/table/command.d.ts.map +1 -1
  5. package/lib/node/table/utils/add-row-with-alignment.d.ts +5 -0
  6. package/lib/node/table/utils/add-row-with-alignment.d.ts.map +1 -0
  7. package/lib/node/table/utils/convert-rows-to-table.d.ts +3 -0
  8. package/lib/node/table/utils/convert-rows-to-table.d.ts.map +1 -0
  9. package/lib/node/table/utils/convert-table-to-rows.d.ts +3 -0
  10. package/lib/node/table/utils/convert-table-to-rows.d.ts.map +1 -0
  11. package/lib/node/table/utils/create-table.d.ts +4 -0
  12. package/lib/node/table/utils/create-table.d.ts.map +1 -0
  13. package/lib/node/table/utils/find-table.d.ts +3 -0
  14. package/lib/node/table/utils/find-table.d.ts.map +1 -0
  15. package/lib/node/table/utils/get-all-cells-in-table.d.ts +7 -0
  16. package/lib/node/table/utils/get-all-cells-in-table.d.ts.map +1 -0
  17. package/lib/node/table/utils/get-cells-in-col.d.ts +4 -0
  18. package/lib/node/table/utils/get-cells-in-col.d.ts.map +1 -0
  19. package/lib/node/table/utils/get-cells-in-row.d.ts +4 -0
  20. package/lib/node/table/utils/get-cells-in-row.d.ts.map +1 -0
  21. package/lib/node/table/utils/get-selection-range-in-col.d.ts +4 -0
  22. package/lib/node/table/utils/get-selection-range-in-col.d.ts.map +1 -0
  23. package/lib/node/table/utils/get-selection-range-in-row.d.ts +4 -0
  24. package/lib/node/table/utils/get-selection-range-in-row.d.ts.map +1 -0
  25. package/lib/node/table/utils/index.d.ts +12 -0
  26. package/lib/node/table/utils/index.d.ts.map +1 -0
  27. package/lib/node/table/utils/move-col.d.ts +10 -0
  28. package/lib/node/table/utils/move-col.d.ts.map +1 -0
  29. package/lib/node/table/utils/move-row-in-array-of-rows.d.ts +3 -0
  30. package/lib/node/table/utils/move-row-in-array-of-rows.d.ts.map +1 -0
  31. package/lib/node/table/utils/move-row.d.ts +10 -0
  32. package/lib/node/table/utils/move-row.d.ts.map +1 -0
  33. package/lib/node/table/utils/select-line.d.ts +5 -0
  34. package/lib/node/table/utils/select-line.d.ts.map +1 -0
  35. package/lib/node/table/utils/select-table.d.ts +3 -0
  36. package/lib/node/table/utils/select-table.d.ts.map +1 -0
  37. package/lib/node/table/utils/transpose.d.ts +2 -0
  38. package/lib/node/table/utils/transpose.d.ts.map +1 -0
  39. package/lib/node/table/utils/types.d.ts +12 -0
  40. package/lib/node/table/utils/types.d.ts.map +1 -0
  41. package/lib/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +8 -8
  43. package/src/mark/strike-through.ts +4 -1
  44. package/src/node/table/command.ts +28 -10
  45. package/src/node/table/utils/add-row-with-alignment.ts +32 -0
  46. package/src/node/table/utils/convert-rows-to-table.ts +43 -0
  47. package/src/node/table/utils/convert-table-to-rows.ts +65 -0
  48. package/src/node/table/utils/create-table.ts +31 -0
  49. package/src/node/table/utils/find-table.ts +10 -0
  50. package/src/node/table/utils/get-all-cells-in-table.ts +24 -0
  51. package/src/node/table/utils/get-cells-in-col.ts +35 -0
  52. package/src/node/table/utils/get-cells-in-row.ts +37 -0
  53. package/src/node/table/utils/get-selection-range-in-col.ts +86 -0
  54. package/src/node/table/utils/get-selection-range-in-row.ts +86 -0
  55. package/src/node/table/utils/index.ts +11 -0
  56. package/src/node/table/utils/move-col.ts +73 -0
  57. package/src/node/table/utils/move-row-in-array-of-rows.ts +29 -0
  58. package/src/node/table/utils/move-row.ts +71 -0
  59. package/src/node/table/utils/select-line.ts +61 -0
  60. package/src/node/table/utils/select-table.ts +20 -0
  61. package/src/node/table/utils/transpose.ts +26 -0
  62. package/src/node/table/utils/types.ts +16 -0
  63. package/lib/node/table/utils.d.ts +0 -41
  64. package/lib/node/table/utils.d.ts.map +0 -1
  65. package/src/node/table/utils.ts +0 -564
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/__internal__/with-meta.ts","../src/mark/strike-through.ts","../src/node/table/schema.ts","../src/node/table/utils.ts","../src/node/table/command.ts","../src/node/table/input.ts","../src/node/footnote/definition.ts","../src/node/footnote/reference.ts","../src/node/task-list-item.ts","../src/composed/keymap.ts","../src/composed/inputrules.ts","../src/plugin/auto-insert-span-plugin.ts","../src/plugin/column-resizing-plugin.ts","../src/plugin/table-editing-plugin.ts","../src/plugin/remark-gfm-plugin.ts","../src/plugin/keep-table-align-plugin.ts","../src/composed/plugins.ts","../src/composed/schema.ts","../src/composed/commands.ts","../src/index.ts"],"sourcesContent":["import type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@milkdown/preset-gfm',\n ...meta,\n },\n })\n\n return plugin\n}\n","import { commandsCtx } from '@milkdown/core'\nimport { markRule } from '@milkdown/prose'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport {\n $command,\n $inputRule,\n $markAttr,\n $markSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the strikethrough mark.\nexport const strikethroughAttr = $markAttr('strike_through')\n\nwithMeta(strikethroughAttr, {\n displayName: 'Attr<strikethrough>',\n group: 'Strikethrough',\n})\n\n/// Strikethrough mark schema.\nexport const strikethroughSchema = $markSchema('strike_through', (ctx) => ({\n parseDOM: [\n { tag: 'del' },\n {\n style: 'text-decoration',\n getAttrs: (value) => (value === 'line-through') as false,\n },\n ],\n toDOM: (mark) => ['del', ctx.get(strikethroughAttr.key)(mark)],\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 === 'strike_through',\n runner: (state, mark) => {\n state.withMark(mark, 'delete')\n },\n },\n}))\n\nwithMeta(strikethroughSchema.mark, {\n displayName: 'MarkSchema<strikethrough>',\n group: 'Strikethrough',\n})\n\nwithMeta(strikethroughSchema.ctx, {\n displayName: 'MarkSchemaCtx<strikethrough>',\n group: 'Strikethrough',\n})\n\n/// A command to toggle the strikethrough mark.\nexport const toggleStrikethroughCommand = $command(\n 'ToggleStrikeThrough',\n (ctx) => () => {\n return toggleMark(strikethroughSchema.type(ctx))\n }\n)\n\nwithMeta(toggleStrikethroughCommand, {\n displayName: 'Command<ToggleStrikethrough>',\n group: 'Strikethrough',\n})\n\n/// Input rule to create the strikethrough mark.\nexport const strikethroughInputRule = $inputRule((ctx) => {\n return markRule(/~([^~]+)~$/, strikethroughSchema.type(ctx))\n})\n\nwithMeta(strikethroughInputRule, {\n displayName: 'InputRule<strikethrough>',\n group: 'Strikethrough',\n})\n\n/// Keymap for the strikethrough mark.\n/// - `Mod-Alt-x` - Toggle the strikethrough mark.\nexport const strikethroughKeymap = $useKeymap('strikeThroughKeymap', {\n ToggleStrikethrough: {\n shortcuts: 'Mod-Alt-x',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleStrikethroughCommand.key)\n },\n },\n})\n\nwithMeta(strikethroughKeymap.ctx, {\n displayName: 'KeymapCtx<strikethrough>',\n group: 'Strikethrough',\n})\n\nwithMeta(strikethroughKeymap.shortcuts, {\n displayName: 'Keymap<strikethrough>',\n group: 'Strikethrough',\n})\n","import type { NodeType } from '@milkdown/prose/model'\nimport type { MarkdownNode } from '@milkdown/transformer'\n\nimport { tableNodes } from '@milkdown/prose/tables'\nimport { $nodeSchema } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\n\nconst originalSchema = tableNodes({\n tableGroup: 'block',\n cellContent: 'paragraph',\n cellAttributes: {\n alignment: {\n default: 'left',\n getFromDOM: (dom) => dom.style.textAlign || 'left',\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || 'left'}`\n },\n },\n },\n})\n\n/// Schema for table node.\nexport const tableSchema = $nodeSchema('table', () => ({\n ...originalSchema.table,\n content: 'table_header_row table_row+',\n disableDropCursor: true,\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\nwithMeta(tableSchema.node, {\n displayName: 'NodeSchema<table>',\n group: 'Table',\n})\n\nwithMeta(tableSchema.ctx, {\n displayName: 'NodeSchemaCtx<table>',\n group: 'Table',\n})\n\n/// Schema for table header row node.\nexport const tableHeaderRowSchema = $nodeSchema('table_header_row', () => ({\n ...originalSchema.table_row,\n disableDropCursor: true,\n content: '(table_header)*',\n parseDOM: [{ tag: 'tr[data-is-header]' }],\n toDOM() {\n return ['tr', { 'data-is-header': true }, 0]\n },\n parseMarkdown: {\n match: (node) => Boolean(node.type === 'tableRow' && node.isHeader),\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_header_row',\n runner: (state, node) => {\n state.openNode('tableRow', undefined, { isHeader: true })\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(tableHeaderRowSchema.node, {\n displayName: 'NodeSchema<tableHeaderRow>',\n group: 'Table',\n})\n\nwithMeta(tableHeaderRowSchema.ctx, {\n displayName: 'NodeSchemaCtx<tableHeaderRow>',\n group: 'Table',\n})\n\n/// Schema for table row node.\nexport const tableRowSchema = $nodeSchema('table_row', () => ({\n ...originalSchema.table_row,\n disableDropCursor: true,\n content: '(table_cell)*',\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 }))\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 // if the row is empty, we don't need to create a table row\n // prevent remark from crashing\n if (node.content.size === 0) {\n return\n }\n state.openNode('tableRow')\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(tableRowSchema.node, {\n displayName: 'NodeSchema<tableRow>',\n group: 'Table',\n})\n\nwithMeta(tableRowSchema.ctx, {\n displayName: 'NodeSchemaCtx<tableRow>',\n group: 'Table',\n})\n\n/// Schema for table cell node.\nexport const tableCellSchema = $nodeSchema('table_cell', () => ({\n ...originalSchema.table_cell,\n disableDropCursor: true,\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\nwithMeta(tableCellSchema.node, {\n displayName: 'NodeSchema<tableCell>',\n group: 'Table',\n})\n\nwithMeta(tableCellSchema.ctx, {\n displayName: 'NodeSchemaCtx<tableCell>',\n group: 'Table',\n})\n\n/// Schema for table header node.\nexport const tableHeaderSchema = $nodeSchema('table_header', () => ({\n ...originalSchema.table_header,\n disableDropCursor: true,\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\nwithMeta(tableHeaderSchema.node, {\n displayName: 'NodeSchema<tableHeader>',\n group: 'Table',\n})\n\nwithMeta(tableHeaderSchema.ctx, {\n displayName: 'NodeSchemaCtx<tableHeader>',\n group: 'Table',\n})\n","import type { Ctx } from '@milkdown/ctx'\nimport type { ContentNodeWithPos } from '@milkdown/prose'\nimport type { Node, ResolvedPos } from '@milkdown/prose/model'\nimport type { Selection, Transaction } from '@milkdown/prose/state'\nimport type { TableRect } from '@milkdown/prose/tables'\n\nimport { cloneTr, findParentNodeClosestToPos } from '@milkdown/prose'\nimport { CellSelection, TableMap } from '@milkdown/prose/tables'\n\nimport {\n tableCellSchema,\n tableHeaderRowSchema,\n tableHeaderSchema,\n tableRowSchema,\n tableSchema,\n} from './schema'\n\n/// @internal\nexport interface CellPos {\n pos: number\n start: number\n node: Node\n}\n\n/// @internal\nexport function createTable(ctx: Ctx, rowsCount = 3, colsCount = 3): Node {\n const cells = Array(colsCount)\n .fill(0)\n .map(() => tableCellSchema.type(ctx).createAndFill()!)\n\n const headerCells = Array(colsCount)\n .fill(0)\n .map(() => tableHeaderSchema.type(ctx).createAndFill()!)\n\n const rows = Array(rowsCount)\n .fill(0)\n .map((_, i) =>\n i === 0\n ? tableHeaderRowSchema.type(ctx).create(null, headerCells)\n : tableRowSchema.type(ctx).create(null, cells)\n )\n\n return tableSchema.type(ctx).create(null, rows)\n}\n\n/// Find the table node with position information for target pos.\nexport function findTable($pos: ResolvedPos) {\n return findParentNodeClosestToPos(\n (node) => node.type.spec.tableRole === 'table'\n )($pos)\n}\n\n/// Get cells in a column of a table.\nexport function getCellsInCol(\n columnIndex: number,\n selection: Selection\n): CellPos[] | undefined {\n const table = findTable(selection.$from)\n if (!table) return undefined\n const map = TableMap.get(table.node)\n if (columnIndex < 0 || columnIndex >= map.width) return undefined\n\n return map\n .cellsInRect({\n left: columnIndex,\n right: columnIndex + 1,\n top: 0,\n bottom: map.height,\n })\n .map((pos) => {\n const node = table.node.nodeAt(pos)\n if (!node) return undefined\n const start = pos + table.start\n return {\n pos: start,\n start: start + 1,\n node,\n }\n })\n .filter((x): x is CellPos => x != null)\n}\n\n/// Get cells in a row of a table.\nexport function getCellsInRow(\n rowIndex: number,\n selection: Selection\n): CellPos[] | undefined {\n const table = findTable(selection.$from)\n if (!table) return undefined\n const map = TableMap.get(table.node)\n if (rowIndex < 0 || rowIndex >= map.height) return undefined\n\n return map\n .cellsInRect({\n left: 0,\n right: map.width,\n top: rowIndex,\n bottom: rowIndex + 1,\n })\n .map((pos) => {\n const node = table.node.nodeAt(pos)\n if (!node) return undefined\n const start = pos + table.start\n return {\n pos: start,\n start: start + 1,\n node,\n }\n })\n .filter((x): x is CellPos => x != null)\n}\n\n/// Get all cells in a table.\nexport function getAllCellsInTable(selection: Selection) {\n const table = findTable(selection.$from)\n if (!table) 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\n/// Select a possible table in current selection.\nexport function selectTable(tr: Transaction) {\n const cells = getAllCellsInTable(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)))\n }\n }\n return tr\n}\n\n/// @internal\nexport function addRowWithAlignment(\n ctx: Ctx,\n tr: Transaction,\n { map, tableStart, table }: TableRect,\n row: number\n) {\n const rowPos = Array(row)\n .fill(0)\n .reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize\n }, tableStart)\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 tableCellSchema\n .type(ctx)\n .createAndFill({ alignment: headerCol?.attrs.alignment }) as Node\n })\n\n tr.insert(rowPos, tableRowSchema.type(ctx).create(null, cells))\n return tr\n}\n\n/// @internal\nexport function selectLine(type: 'row' | 'col') {\n return (index: number, pos?: number) => (tr: Transaction) => {\n pos = pos ?? tr.selection.from\n const $pos = tr.doc.resolve(pos)\n const $node = findParentNodeClosestToPos(\n (node) => node.type.name === 'table'\n )($pos)\n const table = $node\n ? {\n node: $node.node,\n from: $node.start,\n }\n : undefined\n\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.from + lastCell)\n\n const createCellSelection = isRowSelection\n ? CellSelection.rowSelection\n : CellSelection.colSelection\n\n const firstCell = map.positionAt(\n isRowSelection ? index : 0,\n isRowSelection ? 0 : index,\n table.node\n )\n const $firstCell = tr.doc.resolve(table.from + firstCell)\n return cloneTr(\n tr.setSelection(\n createCellSelection($lastCell, $firstCell) as unknown as Selection\n )\n )\n }\n }\n return tr\n }\n}\n\n/// If the selection is in a table,\n/// select the {index} row.\nexport const selectRow = selectLine('row')\n\n/// If the selection is in a table,\n/// select the {index} column.\nexport const selectCol = selectLine('col')\n\nfunction transpose<T>(array: T[][]) {\n return array[0]!.map((_, i) => {\n return array.map((column) => column[i])\n }) as T[][]\n}\n\nfunction convertArrayOfRowsToTableNode(\n tableNode: Node,\n arrayOfNodes: (Node | null)[][]\n) {\n const rowsPM = []\n const map = TableMap.get(tableNode)\n for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {\n const row = tableNode.child(rowIndex)\n const rowCells = []\n\n for (let colIndex = 0; colIndex < map.width; colIndex++) {\n if (!arrayOfNodes[rowIndex]![colIndex]) continue\n\n const cellPos = map.map[rowIndex * map.width + colIndex]!\n\n const cell = arrayOfNodes[rowIndex]![colIndex]!\n const oldCell = tableNode.nodeAt(cellPos)!\n const newCell = oldCell.type.createChecked(\n Object.assign({}, cell.attrs),\n cell.content,\n cell.marks\n )\n rowCells.push(newCell)\n }\n\n rowsPM.push(row.type.createChecked(row.attrs, rowCells, row.marks))\n }\n\n const newTable = tableNode.type.createChecked(\n tableNode.attrs,\n rowsPM,\n tableNode.marks\n )\n\n return newTable\n}\n\nfunction convertTableNodeToArrayOfRows(tableNode: Node) {\n const map = TableMap.get(tableNode)\n const rows: (Node | null)[][] = []\n for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {\n const rowCells: (Node | null)[] = []\n const seen: Record<number, boolean> = {}\n\n for (let colIndex = 0; colIndex < map.width; colIndex++) {\n const cellPos = map.map[rowIndex * map.width + colIndex]!\n const cell = tableNode.nodeAt(cellPos)\n const rect = map.findCell(cellPos)\n if (seen[cellPos] || rect.top !== rowIndex) {\n rowCells.push(null)\n continue\n }\n seen[cellPos] = true\n\n rowCells.push(cell)\n }\n\n rows.push(rowCells)\n }\n\n return rows\n}\n\nfunction moveRowInArrayOfRows(\n rows: (Node | null)[][],\n indexesOrigin: number[],\n indexesTarget: number[],\n directionOverride: -1 | 1 | 0\n) {\n const direction = indexesOrigin[0]! > indexesTarget[0]! ? -1 : 1\n\n const rowsExtracted = rows.splice(indexesOrigin[0]!, indexesOrigin.length)\n const positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0\n let target: number\n\n if (directionOverride === -1 && direction === 1) {\n target = indexesTarget[0]! - 1\n } else if (directionOverride === 1 && direction === -1) {\n target = indexesTarget[indexesTarget.length - 1]! - positionOffset + 1\n } else {\n target =\n direction === -1\n ? indexesTarget[0]!\n : indexesTarget[indexesTarget.length - 1]! - positionOffset\n }\n\n rows.splice(target, 0, ...rowsExtracted)\n return rows\n}\n\nfunction moveTableColumn(\n table: ContentNodeWithPos,\n indexesOrigin: number[],\n indexesTarget: number[],\n direction: -1 | 1 | 0\n) {\n let rows = transpose(convertTableNodeToArrayOfRows(table.node))\n\n rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction)\n rows = transpose(rows)\n\n return convertArrayOfRowsToTableNode(table.node, rows)\n}\n\nfunction moveTableRow(\n table: ContentNodeWithPos,\n indexesOrigin: number[],\n indexesTarget: number[],\n direction: -1 | 1 | 0\n) {\n let rows = convertTableNodeToArrayOfRows(table.node)\n\n rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction)\n\n return convertArrayOfRowsToTableNode(table.node, rows)\n}\n\nfunction getSelectionRangeInColumn(columnIndex: number, tr: Transaction) {\n let startIndex = columnIndex\n let endIndex = columnIndex\n\n // looking for selection start column (startIndex)\n for (let i = columnIndex; i >= 0; i--) {\n const cells = getCellsInCol(i, tr.selection)\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.colspan + i - 1\n if (maybeEndIndex >= startIndex) startIndex = i\n\n if (maybeEndIndex > endIndex) endIndex = maybeEndIndex\n })\n }\n }\n // looking for selection end column (endIndex)\n for (let i = columnIndex; i <= endIndex; i++) {\n const cells = getCellsInCol(i, tr.selection)\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.colspan + i - 1\n if (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex)\n endIndex = maybeEndIndex\n })\n }\n }\n\n // filter out columns without cells (where all rows have colspan > 1 in the same column)\n const indexes = []\n for (let i = startIndex; i <= endIndex; i++) {\n const maybeCells = getCellsInCol(i, tr.selection)\n if (maybeCells && maybeCells.length) indexes.push(i)\n }\n startIndex = indexes[0]!\n endIndex = indexes[indexes.length - 1]!\n\n const firstSelectedColumnCells = getCellsInCol(startIndex, tr.selection)!\n const firstRowCells = getCellsInRow(0, tr.selection)!\n const $anchor = tr.doc.resolve(\n firstSelectedColumnCells[firstSelectedColumnCells.length - 1]!.pos\n )\n\n let headCell: CellPos | undefined\n for (let i = endIndex; i >= startIndex; i--) {\n const columnCells = getCellsInCol(i, tr.selection)\n if (columnCells && columnCells.length) {\n for (let j = firstRowCells.length - 1; j >= 0; j--) {\n if (firstRowCells[j]!.pos === columnCells[0]!.pos) {\n headCell = columnCells[0]\n break\n }\n }\n if (headCell) break\n }\n }\n\n const $head = tr.doc.resolve(headCell!.pos)\n return { $anchor, $head, indexes }\n}\n\nfunction getSelectionRangeInRow(rowIndex: number, tr: Transaction) {\n let startIndex = rowIndex\n let endIndex = rowIndex\n // looking for selection start row (startIndex)\n for (let i = rowIndex; i >= 0; i--) {\n const cells = getCellsInRow(i, tr.selection)\n cells!.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.rowspan + i - 1\n if (maybeEndIndex >= startIndex) startIndex = i\n\n if (maybeEndIndex > endIndex) endIndex = maybeEndIndex\n })\n }\n // looking for selection end row (endIndex)\n for (let i = rowIndex; i <= endIndex; i++) {\n const cells = getCellsInRow(i, tr.selection)\n cells!.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.rowspan + i - 1\n if (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex)\n endIndex = maybeEndIndex\n })\n }\n\n // filter out rows without cells (where all columns have rowspan > 1 in the same row)\n const indexes = []\n for (let i = startIndex; i <= endIndex; i++) {\n const maybeCells = getCellsInRow(i, tr.selection)\n if (maybeCells && maybeCells.length) indexes.push(i)\n }\n startIndex = indexes[0]!\n endIndex = indexes[indexes.length - 1]!\n\n const firstSelectedRowCells = getCellsInRow(startIndex, tr.selection)!\n const firstColumnCells = getCellsInCol(0, tr.selection)!\n const $anchor = tr.doc.resolve(\n firstSelectedRowCells[firstSelectedRowCells.length - 1]!.pos\n )\n\n let headCell: CellPos | undefined\n for (let i = endIndex; i >= startIndex; i--) {\n const rowCells = getCellsInRow(i, tr.selection)\n if (rowCells && rowCells.length) {\n for (let j = firstColumnCells.length - 1; j >= 0; j--) {\n if (firstColumnCells[j]!.pos === rowCells[0]!.pos) {\n headCell = rowCells[0]!\n break\n }\n }\n if (headCell) break\n }\n }\n\n const $head = tr.doc.resolve(headCell!.pos)\n return { $anchor, $head, indexes }\n}\n\nexport interface MoveColParams {\n tr: Transaction\n origin: number\n target: number\n select?: boolean\n pos?: number\n}\n\n/// If the selection is in a table,\n/// Move the columns at `origin` to `target` in current table.\n/// The `select` is true by default, which means the selection will be set to the moved column.\nexport function moveCol(moveColParams: MoveColParams) {\n const { tr, origin, target, select = true, pos } = moveColParams\n const $pos = pos != null ? tr.doc.resolve(pos) : tr.selection.$from\n const table = findTable($pos)\n if (!table) return tr\n\n const { indexes: indexesOriginColumn } = getSelectionRangeInColumn(origin, tr)\n const { indexes: indexesTargetColumn } = getSelectionRangeInColumn(target, tr)\n\n if (indexesOriginColumn.includes(target)) return tr\n\n const newTable = moveTableColumn(\n table,\n indexesOriginColumn,\n indexesTargetColumn,\n 0\n )\n\n const _tr = cloneTr(tr).replaceWith(\n table.pos,\n table.pos + table.node.nodeSize,\n newTable\n )\n\n if (!select) return _tr\n\n const map = TableMap.get(newTable)\n const start = table.start\n const index = target\n const lastCell = map.positionAt(map.height - 1, index, newTable)\n const $lastCell = _tr.doc.resolve(start + lastCell)\n\n const createCellSelection = CellSelection.colSelection\n\n const firstCell = map.positionAt(0, index, newTable)\n const $firstCell = _tr.doc.resolve(start + firstCell)\n\n return _tr.setSelection(createCellSelection($lastCell, $firstCell))\n}\n\nexport interface MoveRowParams {\n tr: Transaction\n origin: number\n target: number\n select?: boolean\n pos?: number\n}\n\n/// If the selection is in a table,\n/// Move the rows at `origin` and `target` in current table.\n/// The `select` is true by default, which means the selection will be set to the moved row.\nexport function moveRow(moveRowParams: MoveRowParams) {\n const { tr, origin, target, select = true, pos } = moveRowParams\n const $pos = pos != null ? tr.doc.resolve(pos) : tr.selection.$from\n const table = findTable($pos)\n if (!table) return tr\n\n const { indexes: indexesOriginRow } = getSelectionRangeInRow(origin, tr)\n const { indexes: indexesTargetRow } = getSelectionRangeInRow(target, tr)\n\n if (indexesOriginRow.includes(target)) return tr\n\n const newTable = moveTableRow(table, indexesOriginRow, indexesTargetRow, 0)\n\n const _tr = cloneTr(tr).replaceWith(\n table.pos,\n table.pos + table.node.nodeSize,\n newTable\n )\n\n if (!select) return _tr\n\n const map = TableMap.get(newTable)\n const start = table.start\n const index = target\n const lastCell = map.positionAt(index, map.width - 1, newTable)\n const $lastCell = _tr.doc.resolve(start + lastCell)\n\n const createCellSelection = CellSelection.rowSelection\n\n const firstCell = map.positionAt(index, 0, newTable)\n const $firstCell = _tr.doc.resolve(start + firstCell)\n\n return _tr.setSelection(createCellSelection($lastCell, $firstCell))\n}\n","import { paragraphSchema } from '@milkdown/preset-commonmark'\nimport { findParentNodeType } from '@milkdown/prose'\nimport { Selection } from '@milkdown/prose/state'\nimport {\n CellSelection,\n addColumnAfter,\n addColumnBefore,\n deleteColumn,\n deleteRow,\n deleteTable,\n goToNextCell,\n isInTable,\n selectedRect,\n setCellAttr,\n} from '@milkdown/prose/tables'\nimport { $command } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\nimport { tableSchema } from './schema'\nimport {\n addRowWithAlignment,\n createTable,\n moveCol,\n moveRow,\n selectCol,\n selectRow,\n selectTable,\n} from './utils'\n\n/// A command for moving cursor to previous cell.\nexport const goToPrevTableCellCommand = $command(\n 'GoToPrevTableCell',\n () => () => goToNextCell(-1)\n)\n\nwithMeta(goToPrevTableCellCommand, {\n displayName: 'Command<goToPrevTableCellCommand>',\n group: 'Table',\n})\n\n/// A command for moving cursor to next cell.\nexport const goToNextTableCellCommand = $command(\n 'GoToNextTableCell',\n () => () => goToNextCell(1)\n)\n\nwithMeta(goToNextTableCellCommand, {\n displayName: 'Command<goToNextTableCellCommand>',\n group: 'Table',\n})\n\n/// A command for quitting current table and insert a new paragraph node.\nexport const exitTable = $command(\n 'ExitTable',\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false\n\n const { $head } = state.selection\n const table = findParentNodeType($head, tableSchema.type(ctx))\n if (!table) return false\n\n const { to } = table\n\n const tr = state.tr.replaceWith(\n to,\n to,\n paragraphSchema.type(ctx).createAndFill()!\n )\n\n tr.setSelection(Selection.near(tr.doc.resolve(to), 1)).scrollIntoView()\n dispatch?.(tr)\n return true\n }\n)\n\nwithMeta(exitTable, {\n displayName: 'Command<breakTableCommand>',\n group: 'Table',\n})\n\n/// A command for inserting a table.\n/// You can specify the number of rows and columns.\n/// By default, it will insert a 3x3 table.\nexport const insertTableCommand = $command(\n 'InsertTable',\n (ctx) =>\n ({ row, col }: { row?: number; col?: number } = {}) =>\n (state, dispatch) => {\n const { selection, tr } = state\n const { from } = selection\n const table = createTable(ctx, row, col)\n const _tr = tr.replaceSelectionWith(table)\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true)\n if (sel) _tr.setSelection(sel)\n\n dispatch?.(_tr)\n\n return true\n }\n)\n\nwithMeta(insertTableCommand, {\n displayName: 'Command<insertTableCommand>',\n group: 'Table',\n})\n\n/// A command for moving a row in a table.\n/// You should specify the `from` and `to` index.\nexport const moveRowCommand = $command(\n 'MoveRow',\n () =>\n ({ from, to, pos }: { from?: number; to?: number; pos?: number } = {}) =>\n (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(\n moveRow({ tr, origin: from ?? 0, target: to ?? 0, pos, select: true })\n )\n\n return Boolean(result)\n }\n)\n\nwithMeta(moveRowCommand, {\n displayName: 'Command<moveRowCommand>',\n group: 'Table',\n})\n\n/// A command for moving a column in a table.\n/// You should specify the `from` and `to` index.\nexport const moveColCommand = $command(\n 'MoveCol',\n () =>\n ({ from, to, pos }: { from?: number; to?: number; pos?: number } = {}) =>\n (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(\n moveCol({ tr, origin: from ?? 0, target: to ?? 0, pos, select: true })\n )\n\n return Boolean(result)\n }\n)\n\nwithMeta(moveColCommand, {\n displayName: 'Command<moveColCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a row.\nexport const selectRowCommand = $command<\n { index: number; pos?: number },\n 'SelectRow'\n>(\n 'SelectRow',\n () =>\n (payload: { index: number; pos?: number } = { index: 0 }) =>\n (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectRow(payload.index, payload.pos)(tr))\n\n return Boolean(result)\n }\n)\n\nwithMeta(selectRowCommand, {\n displayName: 'Command<selectRowCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a column.\nexport const selectColCommand = $command<\n { index: number; pos?: number },\n 'SelectCol'\n>(\n 'SelectCol',\n () =>\n (payload: { index: number; pos?: number } = { index: 0 }) =>\n (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectCol(payload.index, payload.pos)(tr))\n\n return Boolean(result)\n }\n)\n\nwithMeta(selectColCommand, {\n displayName: 'Command<selectColCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a table.\nexport const selectTableCommand = $command(\n 'SelectTable',\n () => () => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectTable(tr))\n\n return Boolean(result)\n }\n)\n\nwithMeta(selectTableCommand, {\n displayName: 'Command<selectTableCommand>',\n group: 'Table',\n})\n\n/// A command for deleting selected cells.\n/// If the selection is a row or column, the row or column will be deleted.\n/// If all cells are selected, the table will be deleted.\nexport const deleteSelectedCellsCommand = $command(\n 'DeleteSelectedCells',\n () => () => (state, dispatch) => {\n const { selection } = state\n if (!(selection instanceof CellSelection)) return false\n\n const isRow = selection.isRowSelection()\n const isCol = selection.isColSelection()\n\n if (isRow && isCol) return deleteTable(state, dispatch)\n\n if (isCol) return deleteColumn(state, dispatch)\n else return deleteRow(state, dispatch)\n }\n)\n\nwithMeta(deleteSelectedCellsCommand, {\n displayName: 'Command<deleteSelectedCellsCommand>',\n group: 'Table',\n})\n\n/// A command for adding a column before the current column.\nexport const addColBeforeCommand = $command(\n 'AddColBefore',\n () => () => addColumnBefore\n)\n\nwithMeta(addColBeforeCommand, {\n displayName: 'Command<addColBeforeCommand>',\n group: 'Table',\n})\n\n/// A command for adding a column after the current column.\nexport const addColAfterCommand = $command(\n 'AddColAfter',\n () => () => addColumnAfter\n)\n\nwithMeta(addColAfterCommand, {\n displayName: 'Command<addColAfterCommand>',\n group: 'Table',\n})\n\n/// A command for adding a row before the current row.\nexport const addRowBeforeCommand = $command(\n 'AddRowBefore',\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false\n if (dispatch) {\n const rect = selectedRect(state)\n dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.top))\n }\n return true\n }\n)\n\nwithMeta(addRowBeforeCommand, {\n displayName: 'Command<addRowBeforeCommand>',\n group: 'Table',\n})\n\n/// A command for adding a row after the current row.\nexport const addRowAfterCommand = $command(\n 'AddRowAfter',\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false\n if (dispatch) {\n const rect = selectedRect(state)\n dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.bottom))\n }\n return true\n }\n)\n\nwithMeta(addRowAfterCommand, {\n displayName: 'Command<addRowAfterCommand>',\n group: 'Table',\n})\n\n/// A command for setting alignment property for selected cells.\n/// You can specify the alignment as `left`, `center`, or `right`.\n/// It's `left` by default.\nexport const setAlignCommand = $command<\n 'left' | 'center' | 'right',\n 'SetAlign'\n>(\n 'SetAlign',\n () =>\n (alignment = 'left') =>\n setCellAttr('alignment', alignment)\n)\n\nwithMeta(setAlignCommand, {\n displayName: 'Command<setAlignCommand>',\n group: 'Table',\n})\n","import { commandsCtx } from '@milkdown/core'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { $inputRule, $useKeymap } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\nimport {\n exitTable,\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n} from './command'\nimport { tableSchema } from './schema'\nimport { createTable } from './utils'\n\n/// A input rule for creating table.\n/// For example, `|2x2|` will create a 2x2 table.\nexport const insertTableInputRule = $inputRule(\n (ctx) =>\n new InputRule(\n /^\\|(?<col>\\d+)[xX](?<row>\\d+)\\|\\s$/,\n (state, match, start, end) => {\n const $start = state.doc.resolve(start)\n if (\n !$start\n .node(-1)\n .canReplaceWith(\n $start.index(-1),\n $start.indexAfter(-1),\n tableSchema.type(ctx)\n )\n )\n return null\n\n const row = Math.max(Number(match.groups?.row ?? 0), 2)\n\n const tableNode = createTable(ctx, row, Number(match.groups?.col))\n const tr = state.tr.replaceRangeWith(start, end, tableNode)\n return tr\n .setSelection(TextSelection.create(tr.doc, start + 3))\n .scrollIntoView()\n }\n )\n)\n\nwithMeta(insertTableInputRule, {\n displayName: 'InputRule<insertTableInputRule>',\n group: 'Table',\n})\n\n/// Keymap for table commands.\n/// - `<Mod-]>`/`<Tab>`: Move to the next cell.\n/// - `<Mod-[>`/`<Shift-Tab>`: Move to the previous cell.\n/// - `<Mod-Enter>`: Exit the table, and break it if possible.\nexport const tableKeymap = $useKeymap('tableKeymap', {\n NextCell: {\n priority: 100,\n shortcuts: ['Mod-]', 'Tab'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n\n return () => commands.call(goToNextTableCellCommand.key)\n },\n },\n PrevCell: {\n shortcuts: ['Mod-[', 'Shift-Tab'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n\n return () => commands.call(goToPrevTableCellCommand.key)\n },\n },\n ExitTable: {\n shortcuts: ['Mod-Enter', 'Enter'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n\n return () => commands.call(exitTable.key)\n },\n },\n})\n\nwithMeta(tableKeymap.ctx, {\n displayName: 'KeymapCtx<table>',\n group: 'Table',\n})\n\nwithMeta(tableKeymap.shortcuts, {\n displayName: 'Keymap<table>',\n group: 'Table',\n})\n","import { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\n\nconst id = 'footnote_definition'\nconst markdownId = 'footnoteDefinition'\n\n/// Footnote definition node schema.\nexport const footnoteDefinitionSchema = $nodeSchema(\n 'footnote_definition',\n () => ({\n group: 'block',\n content: 'block+',\n defining: true,\n attrs: {\n label: {\n default: '',\n validate: 'string',\n },\n },\n parseDOM: [\n {\n tag: `dl[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n }\n },\n contentElement: 'dd',\n },\n ],\n toDOM: (node) => {\n const label = node.attrs.label\n\n return [\n 'dl',\n {\n // TODO: add a prosemirror plugin to sync label on change\n 'data-label': label,\n 'data-type': id,\n },\n ['dt', label],\n ['dd', 0],\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)\n\nwithMeta(footnoteDefinitionSchema.ctx, {\n displayName: 'NodeSchemaCtx<footnodeDef>',\n group: 'footnote',\n})\n\nwithMeta(footnoteDefinitionSchema.node, {\n displayName: 'NodeSchema<footnodeDef>',\n group: 'footnote',\n})\n","import { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\n\nconst id = 'footnote_reference'\n\n/// Footnote reference node schema.\nexport const footnoteReferenceSchema = $nodeSchema(\n 'footnote_reference',\n () => ({\n group: 'inline',\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: '',\n validate: 'string',\n },\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n }\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs.label\n return [\n 'sup',\n {\n // TODO: add a prosemirror plugin to sync label on change\n 'data-label': label,\n 'data-type': id,\n },\n label,\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)\n\nwithMeta(footnoteReferenceSchema.ctx, {\n displayName: 'NodeSchemaCtx<footnodeRef>',\n group: 'footnote',\n})\n\nwithMeta(footnoteReferenceSchema.node, {\n displayName: 'NodeSchema<footnodeRef>',\n group: 'footnote',\n})\n","import { expectDomTypeError } from '@milkdown/exception'\nimport { listItemSchema } from '@milkdown/preset-commonmark'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $inputRule } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// This schema extends the [list item](/preset-commonmark#list-item) schema and add task list support for it.\nexport const extendListItemSchemaForTask = listItemSchema.extendSchema(\n (prev) => {\n return (ctx) => {\n const baseSchema = prev(ctx)\n return {\n ...baseSchema,\n attrs: {\n ...baseSchema.attrs,\n checked: {\n default: null,\n validate: 'boolean|null',\n },\n },\n parseDOM: [\n {\n tag: 'li[data-item-type=\"task\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset.listType,\n spread: dom.dataset.spread,\n checked: dom.dataset.checked\n ? dom.dataset.checked === 'true'\n : null,\n }\n },\n },\n ...(baseSchema?.parseDOM || []),\n ],\n toDOM: (node) => {\n if (baseSchema.toDOM && node.attrs.checked == null)\n return baseSchema.toDOM(node)\n\n return [\n 'li',\n {\n 'data-item-type': 'task',\n 'data-label': node.attrs.label,\n 'data-list-type': node.attrs.listType,\n 'data-spread': node.attrs.spread,\n 'data-checked': node.attrs.checked,\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'listItem',\n runner: (state, node, type) => {\n if (node.checked == null) {\n baseSchema.parseMarkdown.runner(state, node, type)\n return\n }\n\n const label = node.label != null ? `${node.label}.` : '•'\n const checked = node.checked != null ? Boolean(node.checked) : null\n const listType = node.label != null ? 'ordered' : 'bullet'\n const spread = node.spread != null ? `${node.spread}` : 'true'\n\n state.openNode(type, { label, listType, spread, checked })\n state.next(node.children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'list_item',\n runner: (state, node) => {\n if (node.attrs.checked == null) {\n baseSchema.toMarkdown.runner(state, node)\n return\n }\n\n const label = node.attrs.label\n const listType = node.attrs.listType\n const spread = node.attrs.spread === 'true'\n const checked = node.attrs.checked\n\n state.openNode('listItem', undefined, {\n label,\n listType,\n spread,\n checked,\n })\n state.next(node.content)\n state.closeNode()\n },\n },\n }\n }\n }\n)\n\nwithMeta(extendListItemSchemaForTask.node, {\n displayName: 'NodeSchema<taskListItem>',\n group: 'ListItem',\n})\n\nwithMeta(extendListItemSchemaForTask.ctx, {\n displayName: 'NodeSchemaCtx<taskListItem>',\n group: 'ListItem',\n})\n\n/// Input rule for wrapping a block in task list node.\n/// Users can type `[ ] ` or `[x] ` to wrap the block in task list node with checked status.\nexport const wrapInTaskListInputRule = $inputRule(() => {\n return new InputRule(\n /^\\[(?<checked>\\s|x)\\]\\s$/,\n (state, match, start, end) => {\n const pos = state.doc.resolve(start)\n let depth = 0\n let node = pos.node(depth)\n while (node && node.type.name !== 'list_item') {\n depth--\n node = pos.node(depth)\n }\n\n if (!node || node.attrs.checked != null) return null\n\n const checked = Boolean(match.groups?.checked === 'x')\n\n const finPos = pos.before(depth)\n const tr = state.tr\n\n tr.deleteRange(start, end).setNodeMarkup(finPos, undefined, {\n ...node.attrs,\n checked,\n })\n\n return tr\n }\n )\n})\n\nwithMeta(wrapInTaskListInputRule, {\n displayName: 'InputRule<wrapInTaskListInputRule>',\n group: 'ListItem',\n})\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport { strikethroughKeymap } from '../mark'\nimport { tableKeymap } from '../node'\n\n/// @internal\nexport const keymap: MilkdownPlugin[] = [\n strikethroughKeymap,\n tableKeymap,\n].flat()\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport { strikethroughInputRule } from '../mark'\nimport { insertTableInputRule, wrapInTaskListInputRule } from '../node'\n\n/// @internal\nexport const inputRules: MilkdownPlugin[] = [\n insertTableInputRule,\n wrapInTaskListInputRule,\n]\n\nexport const markInputRules: MilkdownPlugin[] = [strikethroughInputRule]\n","import { $prose } from '@milkdown/utils'\nimport { imeSpan } from 'prosemirror-safari-ime-span'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to fix the bug of IME composing in table in Safari browser.\n/// original discussion in https://discuss.prosemirror.net/t/ime-composing-problems-on-td-or-th-element-in-safari-browser/4501\nexport const autoInsertSpanPlugin = $prose(() => imeSpan)\n\nwithMeta(autoInsertSpanPlugin, {\n displayName: 'Prose<autoInsertSpanPlugin>',\n group: 'Prose',\n})\n","import { columnResizing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is wrapping the `columnResizing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).\nexport const columnResizingPlugin = $prose(() => columnResizing({}))\n\nwithMeta(columnResizingPlugin, {\n displayName: 'Prose<columnResizingPlugin>',\n group: 'Prose',\n})\n","import { tableEditing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is wrapping the `tableEditing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).\nexport const tableEditingPlugin = $prose(() =>\n tableEditing({ allowTableNodeSelection: true })\n)\n\nwithMeta(tableEditingPlugin, {\n displayName: 'Prose<tableEditingPlugin>',\n group: 'Prose',\n})\n","import type { $Remark } from '@milkdown/utils'\nimport type { Options } from 'remark-gfm'\n\nimport { $remark } from '@milkdown/utils'\nimport remarkGFM from 'remark-gfm'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is wrapping the [remark-gfm](https://github.com/remarkjs/remark-gfm).\nexport const remarkGFMPlugin: $Remark<'remarkGFM', Options | null | undefined> =\n $remark('remarkGFM', () => remarkGFM)\n\nwithMeta(remarkGFMPlugin.plugin, {\n displayName: 'Remark<remarkGFMPlugin>',\n group: 'Remark',\n})\n\nwithMeta(remarkGFMPlugin.options, {\n displayName: 'RemarkConfig<remarkGFMPlugin>',\n group: 'Remark',\n})\n","import type { Node } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\n\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\nconst pluginKey = new PluginKey('MILKDOWN_KEEP_TABLE_ALIGN_PLUGIN')\n\nfunction getChildIndex(node: Node, parent: Node) {\n let index = 0\n parent.forEach((child, _offset, i) => {\n if (child === node) index = i\n })\n return index\n}\n\nexport const keepTableAlignPlugin = $prose(() => {\n return new Plugin({\n key: pluginKey,\n appendTransaction: (_tr, oldState, state) => {\n let tr: Transaction | undefined\n const check = (node: Node, pos: number) => {\n if (!tr) tr = state.tr\n\n if (node.type.name !== 'table_cell') return\n\n const $pos = state.doc.resolve(pos)\n const tableRow = $pos.node($pos.depth)\n const table = $pos.node($pos.depth - 1)\n const tableHeaderRow = table.firstChild\n // TODO: maybe consider add a header row\n if (!tableHeaderRow) return\n\n const index = getChildIndex(node, tableRow)\n const headerCell = tableHeaderRow.maybeChild(index)\n if (!headerCell) return\n const align = headerCell.attrs.alignment\n const currentAlign = node.attrs.alignment\n if (align === currentAlign) return\n\n tr.setNodeMarkup(pos, undefined, { ...node.attrs, alignment: align })\n }\n if (oldState.doc !== state.doc) state.doc.descendants(check)\n\n return tr\n },\n })\n})\n\nwithMeta(keepTableAlignPlugin, {\n displayName: 'Prose<keepTableAlignPlugin>',\n group: 'Prose',\n})\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n autoInsertSpanPlugin,\n keepTableAlignPlugin,\n remarkGFMPlugin,\n tableEditingPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n keepTableAlignPlugin,\n autoInsertSpanPlugin,\n remarkGFMPlugin,\n tableEditingPlugin,\n].flat()\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport { strikethroughAttr, strikethroughSchema } from '../mark'\nimport {\n extendListItemSchemaForTask,\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n tableCellSchema,\n tableHeaderRowSchema,\n tableHeaderSchema,\n tableRowSchema,\n tableSchema,\n} from '../node'\n\n/// @internal\nexport const schema: MilkdownPlugin[] = [\n extendListItemSchemaForTask,\n\n tableSchema,\n tableHeaderRowSchema,\n tableRowSchema,\n tableHeaderSchema,\n tableCellSchema,\n\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n\n strikethroughAttr,\n strikethroughSchema,\n].flat()\n","import { toggleStrikethroughCommand } from '../mark'\nimport {\n addColAfterCommand,\n addColBeforeCommand,\n addRowAfterCommand,\n addRowBeforeCommand,\n deleteSelectedCellsCommand,\n exitTable,\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n insertTableCommand,\n moveColCommand,\n moveRowCommand,\n selectColCommand,\n selectRowCommand,\n selectTableCommand,\n setAlignCommand,\n} from '../node'\n\n/// @internal\nexport const commands = [\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n exitTable,\n insertTableCommand,\n moveRowCommand,\n moveColCommand,\n selectRowCommand,\n selectColCommand,\n selectTableCommand,\n deleteSelectedCellsCommand,\n addRowBeforeCommand,\n addRowAfterCommand,\n addColBeforeCommand,\n addColAfterCommand,\n setAlignCommand,\n\n toggleStrikethroughCommand,\n]\n","import {\n commands,\n inputRules,\n keymap,\n markInputRules,\n plugins,\n schema,\n} from './composed'\n\nexport * from './node'\nexport * from './mark'\nexport * from './plugin'\nexport * from './composed'\n\n/// The GFM preset, includes all the plugins.\nexport const gfm = [\n schema,\n inputRules,\n markInputRules,\n keymap,\n commands,\n plugins,\n].flat()\n"],"names":["commands","id"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/__internal__/with-meta.ts","../src/mark/strike-through.ts","../src/node/table/schema.ts","../src/node/table/utils/create-table.ts","../src/node/table/utils/find-table.ts","../src/node/table/utils/get-cells-in-col.ts","../src/node/table/utils/get-cells-in-row.ts","../src/node/table/utils/select-line.ts","../src/node/table/utils/add-row-with-alignment.ts","../src/node/table/utils/convert-rows-to-table.ts","../src/node/table/utils/convert-table-to-rows.ts","../src/node/table/utils/get-selection-range-in-row.ts","../src/node/table/utils/move-row-in-array-of-rows.ts","../src/node/table/utils/move-row.ts","../src/node/table/utils/get-selection-range-in-col.ts","../src/node/table/utils/transpose.ts","../src/node/table/utils/move-col.ts","../src/node/table/utils/get-all-cells-in-table.ts","../src/node/table/utils/select-table.ts","../src/node/table/command.ts","../src/node/table/input.ts","../src/node/footnote/definition.ts","../src/node/footnote/reference.ts","../src/node/task-list-item.ts","../src/composed/keymap.ts","../src/composed/inputrules.ts","../src/plugin/auto-insert-span-plugin.ts","../src/plugin/column-resizing-plugin.ts","../src/plugin/table-editing-plugin.ts","../src/plugin/remark-gfm-plugin.ts","../src/plugin/keep-table-align-plugin.ts","../src/composed/plugins.ts","../src/composed/schema.ts","../src/composed/commands.ts","../src/index.ts"],"sourcesContent":["import type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@milkdown/preset-gfm',\n ...meta,\n },\n })\n\n return plugin\n}\n","import { commandsCtx } from '@milkdown/core'\nimport { markRule } from '@milkdown/prose'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport {\n $command,\n $inputRule,\n $markAttr,\n $markSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the strikethrough mark.\nexport const strikethroughAttr = $markAttr('strike_through')\n\nwithMeta(strikethroughAttr, {\n displayName: 'Attr<strikethrough>',\n group: 'Strikethrough',\n})\n\n/// Strikethrough mark schema.\nexport const strikethroughSchema = $markSchema('strike_through', (ctx) => ({\n parseDOM: [\n { tag: 'del' },\n {\n style: 'text-decoration',\n getAttrs: (value) => (value === 'line-through') as false,\n },\n ],\n toDOM: (mark) => ['del', ctx.get(strikethroughAttr.key)(mark)],\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 === 'strike_through',\n runner: (state, mark) => {\n state.withMark(mark, 'delete')\n },\n },\n}))\n\nwithMeta(strikethroughSchema.mark, {\n displayName: 'MarkSchema<strikethrough>',\n group: 'Strikethrough',\n})\n\nwithMeta(strikethroughSchema.ctx, {\n displayName: 'MarkSchemaCtx<strikethrough>',\n group: 'Strikethrough',\n})\n\n/// A command to toggle the strikethrough mark.\nexport const toggleStrikethroughCommand = $command(\n 'ToggleStrikeThrough',\n (ctx) => () => {\n return toggleMark(strikethroughSchema.type(ctx))\n }\n)\n\nwithMeta(toggleStrikethroughCommand, {\n displayName: 'Command<ToggleStrikethrough>',\n group: 'Strikethrough',\n})\n\n/// Input rule to create the strikethrough mark.\nexport const strikethroughInputRule = $inputRule((ctx) => {\n return markRule(\n /(?<![\\w:/])(~{1,2})(.+?)\\1(?!\\w|\\/)/,\n strikethroughSchema.type(ctx)\n )\n})\n\nwithMeta(strikethroughInputRule, {\n displayName: 'InputRule<strikethrough>',\n group: 'Strikethrough',\n})\n\n/// Keymap for the strikethrough mark.\n/// - `Mod-Alt-x` - Toggle the strikethrough mark.\nexport const strikethroughKeymap = $useKeymap('strikeThroughKeymap', {\n ToggleStrikethrough: {\n shortcuts: 'Mod-Alt-x',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleStrikethroughCommand.key)\n },\n },\n})\n\nwithMeta(strikethroughKeymap.ctx, {\n displayName: 'KeymapCtx<strikethrough>',\n group: 'Strikethrough',\n})\n\nwithMeta(strikethroughKeymap.shortcuts, {\n displayName: 'Keymap<strikethrough>',\n group: 'Strikethrough',\n})\n","import type { NodeType } from '@milkdown/prose/model'\nimport type { MarkdownNode } from '@milkdown/transformer'\n\nimport { tableNodes } from '@milkdown/prose/tables'\nimport { $nodeSchema } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\n\nconst originalSchema = tableNodes({\n tableGroup: 'block',\n cellContent: 'paragraph',\n cellAttributes: {\n alignment: {\n default: 'left',\n getFromDOM: (dom) => dom.style.textAlign || 'left',\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || 'left'}`\n },\n },\n },\n})\n\n/// Schema for table node.\nexport const tableSchema = $nodeSchema('table', () => ({\n ...originalSchema.table,\n content: 'table_header_row table_row+',\n disableDropCursor: true,\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\nwithMeta(tableSchema.node, {\n displayName: 'NodeSchema<table>',\n group: 'Table',\n})\n\nwithMeta(tableSchema.ctx, {\n displayName: 'NodeSchemaCtx<table>',\n group: 'Table',\n})\n\n/// Schema for table header row node.\nexport const tableHeaderRowSchema = $nodeSchema('table_header_row', () => ({\n ...originalSchema.table_row,\n disableDropCursor: true,\n content: '(table_header)*',\n parseDOM: [{ tag: 'tr[data-is-header]' }],\n toDOM() {\n return ['tr', { 'data-is-header': true }, 0]\n },\n parseMarkdown: {\n match: (node) => Boolean(node.type === 'tableRow' && node.isHeader),\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_header_row',\n runner: (state, node) => {\n state.openNode('tableRow', undefined, { isHeader: true })\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(tableHeaderRowSchema.node, {\n displayName: 'NodeSchema<tableHeaderRow>',\n group: 'Table',\n})\n\nwithMeta(tableHeaderRowSchema.ctx, {\n displayName: 'NodeSchemaCtx<tableHeaderRow>',\n group: 'Table',\n})\n\n/// Schema for table row node.\nexport const tableRowSchema = $nodeSchema('table_row', () => ({\n ...originalSchema.table_row,\n disableDropCursor: true,\n content: '(table_cell)*',\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 }))\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 // if the row is empty, we don't need to create a table row\n // prevent remark from crashing\n if (node.content.size === 0) {\n return\n }\n state.openNode('tableRow')\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(tableRowSchema.node, {\n displayName: 'NodeSchema<tableRow>',\n group: 'Table',\n})\n\nwithMeta(tableRowSchema.ctx, {\n displayName: 'NodeSchemaCtx<tableRow>',\n group: 'Table',\n})\n\n/// Schema for table cell node.\nexport const tableCellSchema = $nodeSchema('table_cell', () => ({\n ...originalSchema.table_cell,\n disableDropCursor: true,\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\nwithMeta(tableCellSchema.node, {\n displayName: 'NodeSchema<tableCell>',\n group: 'Table',\n})\n\nwithMeta(tableCellSchema.ctx, {\n displayName: 'NodeSchemaCtx<tableCell>',\n group: 'Table',\n})\n\n/// Schema for table header node.\nexport const tableHeaderSchema = $nodeSchema('table_header', () => ({\n ...originalSchema.table_header,\n disableDropCursor: true,\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\nwithMeta(tableHeaderSchema.node, {\n displayName: 'NodeSchema<tableHeader>',\n group: 'Table',\n})\n\nwithMeta(tableHeaderSchema.ctx, {\n displayName: 'NodeSchemaCtx<tableHeader>',\n group: 'Table',\n})\n","import type { Ctx } from '@milkdown/ctx'\nimport type { Node } from '@milkdown/prose/model'\n\nimport {\n tableCellSchema,\n tableHeaderRowSchema,\n tableHeaderSchema,\n tableRowSchema,\n tableSchema,\n} from '../schema'\n\n/// @internal\nexport function createTable(ctx: Ctx, rowsCount = 3, colsCount = 3): Node {\n const cells = Array(colsCount)\n .fill(0)\n .map(() => tableCellSchema.type(ctx).createAndFill()!)\n\n const headerCells = Array(colsCount)\n .fill(0)\n .map(() => tableHeaderSchema.type(ctx).createAndFill()!)\n\n const rows = Array(rowsCount)\n .fill(0)\n .map((_, i) =>\n i === 0\n ? tableHeaderRowSchema.type(ctx).create(null, headerCells)\n : tableRowSchema.type(ctx).create(null, cells)\n )\n\n return tableSchema.type(ctx).create(null, rows)\n}\n","import type { ResolvedPos } from '@milkdown/prose/model'\n\nimport { findParentNodeClosestToPos } from '@milkdown/prose'\n\n/// Find the table node with position information for target pos.\nexport function findTable($pos: ResolvedPos) {\n return findParentNodeClosestToPos(\n (node) => node.type.spec.tableRole === 'table'\n )($pos)\n}\n","import type { Selection } from '@milkdown/prose/state'\n\nimport { TableMap } from '@milkdown/prose/tables'\n\nimport type { CellPos } from './types'\n\nimport { findTable } from './find-table'\n\n/// Get cells in a column of a table.\nexport function getCellsInCol(\n columnIndexes: number | number[],\n selection: Selection\n): CellPos[] | undefined {\n const table = findTable(selection.$from)\n if (!table) return undefined\n\n const map = TableMap.get(table.node)\n const indexes = Array.isArray(columnIndexes) ? columnIndexes : [columnIndexes]\n\n return indexes\n .filter((index) => index >= 0 && index <= map.width - 1)\n .flatMap((index) => {\n const cells = map.cellsInRect({\n left: index,\n right: index + 1,\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, depth: table.depth + 2 }\n })\n })\n}\n","import type { Selection } from '@milkdown/prose/state'\n\nimport { TableMap } from '@milkdown/prose/tables'\n\nimport type { CellPos } from './types'\n\nimport { findTable } from './find-table'\n\n/// Get cells in a row of a table.\nexport function getCellsInRow(\n rowIndex: number | number[],\n selection: Selection\n): CellPos[] | undefined {\n const table = findTable(selection.$from)\n if (!table) {\n return\n }\n\n const map = TableMap.get(table.node)\n const indexes = Array.isArray(rowIndex) ? rowIndex : [rowIndex]\n\n return indexes\n .filter((index) => index >= 0 && index <= map.height - 1)\n .flatMap((index) => {\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: index,\n bottom: index + 1,\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, depth: table.depth + 2 }\n })\n })\n}\n","import type { Selection, Transaction } from '@milkdown/prose/state'\n\nimport { cloneTr, findParentNodeClosestToPos } from '@milkdown/prose'\nimport { CellSelection, TableMap } from '@milkdown/prose/tables'\n\n/// @internal\nexport function selectLine(type: 'row' | 'col') {\n return (index: number, pos?: number) => (tr: Transaction) => {\n pos = pos ?? tr.selection.from\n const $pos = tr.doc.resolve(pos)\n const $node = findParentNodeClosestToPos(\n (node) => node.type.name === 'table'\n )($pos)\n const table = $node\n ? {\n node: $node.node,\n from: $node.start,\n }\n : undefined\n\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.from + lastCell)\n\n const createCellSelection = isRowSelection\n ? CellSelection.rowSelection\n : CellSelection.colSelection\n\n const firstCell = map.positionAt(\n isRowSelection ? index : 0,\n isRowSelection ? 0 : index,\n table.node\n )\n const $firstCell = tr.doc.resolve(table.from + firstCell)\n return cloneTr(\n tr.setSelection(\n createCellSelection($lastCell, $firstCell) as unknown as Selection\n )\n )\n }\n }\n return tr\n }\n}\n\n/// If the selection is in a table,\n/// select the {index} row.\nexport const selectRow = selectLine('row')\n\n/// If the selection is in a table,\n/// select the {index} column.\nexport const selectCol = selectLine('col')\n","import type { Ctx } from '@milkdown/ctx'\nimport type { Node } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\nimport type { TableRect } from '@milkdown/prose/tables'\n\nimport { tableCellSchema, tableRowSchema } from '../schema'\n\n/// @internal\nexport function addRowWithAlignment(\n ctx: Ctx,\n tr: Transaction,\n { map, tableStart, table }: TableRect,\n row: number\n) {\n const rowPos = Array(row)\n .fill(0)\n .reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize\n }, tableStart)\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 tableCellSchema\n .type(ctx)\n .createAndFill({ alignment: headerCol?.attrs.alignment }) as Node\n })\n\n tr.insert(rowPos, tableRowSchema.type(ctx).create(null, cells))\n return tr\n}\n","import type { Node } from '@milkdown/prose/model'\n\nimport { TableMap } from '@milkdown/prose/tables'\n\n/// @internal\n///\n/// Convert an array of rows to a table node.\nexport function convertRowsToTable(\n tableNode: Node,\n arrayOfNodes: (Node | null)[][]\n) {\n const rowsPM = []\n const map = TableMap.get(tableNode)\n for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {\n const row = tableNode.child(rowIndex)\n const rowCells = []\n\n for (let colIndex = 0; colIndex < map.width; colIndex++) {\n if (!arrayOfNodes[rowIndex]![colIndex]) continue\n\n const cellPos = map.map[rowIndex * map.width + colIndex]!\n\n const cell = arrayOfNodes[rowIndex]![colIndex]!\n const oldCell = tableNode.nodeAt(cellPos)!\n const newCell = oldCell.type.createChecked(\n Object.assign({}, cell.attrs),\n cell.content,\n cell.marks\n )\n rowCells.push(newCell)\n }\n\n rowsPM.push(row.type.createChecked(row.attrs, rowCells, row.marks))\n }\n\n const newTable = tableNode.type.createChecked(\n tableNode.attrs,\n rowsPM,\n tableNode.marks\n )\n\n return newTable\n}\n","import type { Node } from '@milkdown/prose/model'\n\nimport { TableMap } from '@milkdown/prose/tables'\n\n/// @internal\n///\n/// This function will transform the table node into a matrix of rows and columns\n/// respecting merged cells, for example this table:\n///\n/// ```\n/// ┌──────┬──────┬─────────────┐\n/// │ A1 │ B1 │ C1 │\n/// ├──────┼──────┴──────┬──────┤\n/// │ A2 │ B2 │ │\n/// ├──────┼─────────────┤ D1 │\n/// │ A3 │ B3 │ C3 │ │\n/// └──────┴──────┴──────┴──────┘\n/// ```\n///\n/// will be converted to the below:\n///\n/// ```javascript\n/// [\n/// [A1, B1, C1, null],\n/// [A2, B2, null, D1],\n/// [A3, B3, C3, null],\n/// ]\n/// ```\nexport function convertTableToRows(tableNode: Node): (Node | null)[][] {\n const map = TableMap.get(tableNode)\n const rows: (Node | null)[][] = []\n const rowCount = map.height\n const colCount = map.width\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row: (Node | null)[] = []\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\n let cellIndex = rowIndex * colCount + colIndex\n let cellPos = map.map[cellIndex]\n if (rowIndex > 0) {\n const topCellIndex = cellIndex - colCount\n const topCellPos = map.map[topCellIndex]\n if (cellPos === topCellPos) {\n row.push(null)\n continue\n }\n }\n if (colIndex > 0) {\n const leftCellIndex = cellIndex - 1\n const leftCellPos = map.map[leftCellIndex]\n if (cellPos === leftCellPos) {\n row.push(null)\n continue\n }\n }\n if (!cellPos) {\n row.push(null)\n } else {\n row.push(tableNode.nodeAt(cellPos))\n }\n }\n rows.push(row)\n }\n\n return rows\n}\n","import type { Transaction } from '@milkdown/prose/state'\n\nimport type { CellSelectionRange } from './types'\n\nimport { getCellsInCol } from './get-cells-in-col'\nimport { getCellsInRow } from './get-cells-in-row'\n\nexport function getSelectionRangeInRow(\n tr: Transaction,\n startRowIndex: number,\n endRowIndex: number = startRowIndex\n): CellSelectionRange | undefined {\n let startIndex = startRowIndex\n let endIndex = endRowIndex\n\n // looking for selection start row (startIndex)\n for (let i = startRowIndex; i >= 0; i--) {\n const cells = getCellsInRow(i, tr.selection)\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.rowspan + i - 1\n if (maybeEndIndex >= startIndex) {\n startIndex = i\n }\n if (maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex\n }\n })\n }\n }\n // looking for selection end row (endIndex)\n for (let i = startRowIndex; i <= endIndex; i++) {\n const cells = getCellsInRow(i, tr.selection)\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.rowspan + i - 1\n if (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex\n }\n })\n }\n }\n\n // filter out rows without cells (where all columns have rowspan > 1 in the same row)\n const indexes = []\n for (let i = startIndex; i <= endIndex; i++) {\n const maybeCells = getCellsInRow(i, tr.selection)\n if (maybeCells && maybeCells.length > 0) {\n indexes.push(i)\n }\n }\n startIndex = indexes[0]!\n endIndex = indexes[indexes.length - 1]!\n\n const firstSelectedRowCells = getCellsInRow(startIndex, tr.selection)\n const firstColumnCells = getCellsInCol(0, tr.selection)\n if (!firstSelectedRowCells || !firstColumnCells) {\n return\n }\n\n const $anchor = tr.doc.resolve(\n firstSelectedRowCells[firstSelectedRowCells.length - 1]!.pos\n )\n\n let headCell\n for (let i = endIndex; i >= startIndex; i--) {\n const rowCells = getCellsInRow(i, tr.selection)\n if (rowCells && rowCells.length > 0) {\n for (let j = firstColumnCells.length - 1; j >= 0; j--) {\n if (firstColumnCells[j]!.pos === rowCells[0]!.pos) {\n headCell = rowCells[0]\n break\n }\n }\n if (headCell) {\n break\n }\n }\n }\n if (!headCell) {\n return\n }\n\n const $head = tr.doc.resolve(headCell.pos)\n return { $anchor, $head, indexes }\n}\n","import type { Node } from '@milkdown/prose/model'\n\n/// @internal\nexport function moveRowInArrayOfRows(\n rows: (Node | null)[][],\n indexesOrigin: number[],\n indexesTarget: number[],\n directionOverride: -1 | 1 | 0\n) {\n const direction = indexesOrigin[0]! > indexesTarget[0]! ? -1 : 1\n\n const rowsExtracted = rows.splice(indexesOrigin[0]!, indexesOrigin.length)\n const positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0\n let target: number\n\n if (directionOverride === -1 && direction === 1) {\n target = indexesTarget[0]! - 1\n } else if (directionOverride === 1 && direction === -1) {\n target = indexesTarget[indexesTarget.length - 1]! - positionOffset + 1\n } else {\n target =\n direction === -1\n ? indexesTarget[0]!\n : indexesTarget[indexesTarget.length - 1]! - positionOffset\n }\n\n rows.splice(target, 0, ...rowsExtracted)\n return rows\n}\n","import type { Node } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\n\nimport { CellSelection, TableMap } from '@milkdown/prose/tables'\n\nimport { convertRowsToTable } from './convert-rows-to-table'\nimport { convertTableToRows } from './convert-table-to-rows'\nimport { findTable } from './find-table'\nimport { getSelectionRangeInRow } from './get-selection-range-in-row'\nimport { moveRowInArrayOfRows } from './move-row-in-array-of-rows'\n\nexport interface MoveRowParams {\n tr: Transaction\n origin: number\n target: number\n pos: number\n select?: boolean\n}\n\n/// If the selection is in a table,\n/// Move the rows at `origin` and `target` in current table.\n/// The `select` is true by default, which means the selection will be set to the moved row.\nexport function moveRow(moveRowParams: MoveRowParams) {\n const { tr, origin, target, select, pos } = moveRowParams\n const $pos = tr.doc.resolve(pos)\n const table = findTable($pos)\n if (!table) return false\n\n const indexesOriginRow = getSelectionRangeInRow(tr, origin)?.indexes\n const indexesTargetRow = getSelectionRangeInRow(tr, target)?.indexes\n\n if (!indexesOriginRow || !indexesTargetRow) return false\n\n if (indexesOriginRow.includes(target)) return false\n\n const newTable = moveTableRow(\n table.node,\n indexesOriginRow,\n indexesTargetRow,\n 0\n )\n\n tr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable)\n\n if (!select) return true\n\n const map = TableMap.get(newTable)\n const start = table.start\n const index = target\n const lastCell = map.positionAt(index, map.width - 1, newTable)\n const $lastCell = tr.doc.resolve(start + lastCell)\n\n const firstCell = map.positionAt(index, 0, newTable)\n const $firstCell = tr.doc.resolve(start + firstCell)\n\n tr.setSelection(CellSelection.rowSelection($lastCell, $firstCell))\n return true\n}\n\nfunction moveTableRow(\n table: Node,\n indexesOrigin: number[],\n indexesTarget: number[],\n direction: -1 | 1 | 0\n) {\n let rows = convertTableToRows(table)\n\n rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction)\n\n return convertRowsToTable(table, rows)\n}\n","import type { Transaction } from '@milkdown/prose/state'\n\nimport type { CellSelectionRange } from './types'\n\nimport { getCellsInCol } from './get-cells-in-col'\nimport { getCellsInRow } from './get-cells-in-row'\n\nexport function getSelectionRangeInCol(\n tr: Transaction,\n startColIndex: number,\n endColIndex: number = startColIndex\n): CellSelectionRange | undefined {\n let startIndex = startColIndex\n let endIndex = endColIndex\n\n // looking for selection start column (startIndex)\n for (let i = startColIndex; i >= 0; i--) {\n const cells = getCellsInCol(i, tr.selection)\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.colspan + i - 1\n if (maybeEndIndex >= startIndex) {\n startIndex = i\n }\n if (maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex\n }\n })\n }\n }\n // looking for selection end column (endIndex)\n for (let i = startColIndex; i <= endIndex; i++) {\n const cells = getCellsInCol(i, tr.selection)\n if (cells) {\n cells.forEach((cell) => {\n const maybeEndIndex = cell.node.attrs.colspan + i - 1\n if (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex\n }\n })\n }\n }\n\n // filter out columns without cells (where all rows have colspan > 1 in the same column)\n const indexes = []\n for (let i = startIndex; i <= endIndex; i++) {\n const maybeCells = getCellsInCol(i, tr.selection)\n if (maybeCells && maybeCells.length > 0) {\n indexes.push(i)\n }\n }\n startIndex = indexes[0]!\n endIndex = indexes[indexes.length - 1]!\n\n const firstSelectedColumnCells = getCellsInCol(startIndex, tr.selection)\n const firstRowCells = getCellsInRow(0, tr.selection)\n if (!firstSelectedColumnCells || !firstRowCells) {\n return\n }\n\n const $anchor = tr.doc.resolve(\n firstSelectedColumnCells[firstSelectedColumnCells.length - 1]!.pos\n )\n\n let headCell\n for (let i = endIndex; i >= startIndex; i--) {\n const columnCells = getCellsInCol(i, tr.selection)\n if (columnCells && columnCells.length > 0) {\n for (let j = firstRowCells.length - 1; j >= 0; j--) {\n if (firstRowCells[j]!.pos === columnCells[0]!.pos) {\n headCell = columnCells[0]\n break\n }\n }\n if (headCell) {\n break\n }\n }\n }\n if (!headCell) {\n return\n }\n\n const $head = tr.doc.resolve(headCell.pos)\n return { $anchor, $head, indexes }\n}\n","/// @internal\n///\n/// Transposes a 2D array by flipping columns to rows.\n///\n/// Transposition is a familiar algebra concept where the matrix is flipped\n/// along its diagonal. For more details, see:\n/// https://en.wikipedia.org/wiki/Transpose\n///\n/// ```typescript\n/// const arr = [\n/// ['a1', 'a2', 'a3'],\n/// ['b1', 'b2', 'b3'],\n/// ['c1', 'c2', 'c3'],\n/// ['d1', 'd2', 'd3'],\n/// ];\n///\n/// const result = transpose(arr);\n/// result === [\n/// ['a1', 'b1', 'c1', 'd1'],\n/// ['a2', 'b2', 'c2', 'd2'],\n/// ['a3', 'b3', 'c3', 'd3'],\n/// ]\n/// ```\nexport function transpose<T>(array: T[][]) {\n return array[0]!.map((_, i) => array.map((column) => column[i])) as T[][]\n}\n","import type { Node } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\n\nimport { CellSelection, TableMap } from '@milkdown/prose/tables'\n\nimport { convertRowsToTable } from './convert-rows-to-table'\nimport { convertTableToRows } from './convert-table-to-rows'\nimport { findTable } from './find-table'\nimport { getSelectionRangeInCol } from './get-selection-range-in-col'\nimport { moveRowInArrayOfRows } from './move-row-in-array-of-rows'\nimport { transpose } from './transpose'\n\nexport interface MoveColParams {\n tr: Transaction\n origin: number\n target: number\n pos: number\n select?: boolean\n}\n\n/// If the selection is in a table,\n/// Move the columns at `origin` to `target` in current table.\n/// The `select` is true by default, which means the selection will be set to the moved column.\nexport function moveCol(moveColParams: MoveColParams) {\n const { tr, origin, target, select, pos } = moveColParams\n const $pos = tr.doc.resolve(pos)\n const table = findTable($pos)\n if (!table) return false\n\n const indexesOriginColumn = getSelectionRangeInCol(tr, origin)?.indexes\n const indexesTargetColumn = getSelectionRangeInCol(tr, target)?.indexes\n\n if (!indexesOriginColumn || !indexesTargetColumn) return false\n\n if (indexesOriginColumn.includes(target)) return false\n\n const newTable = moveTableCol(\n table.node,\n indexesOriginColumn,\n indexesTargetColumn,\n 0\n )\n\n tr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable)\n\n if (!select) return true\n\n const map = TableMap.get(newTable)\n const start = table.start\n const index = target\n const lastCell = map.positionAt(map.height - 1, index, newTable)\n const $lastCell = tr.doc.resolve(start + lastCell)\n\n const firstCell = map.positionAt(0, index, newTable)\n const $firstCell = tr.doc.resolve(start + firstCell)\n\n tr.setSelection(CellSelection.colSelection($lastCell, $firstCell))\n return true\n}\n\nfunction moveTableCol(\n table: Node,\n indexesOrigin: number[],\n indexesTarget: number[],\n direction: -1 | 1 | 0\n) {\n let rows = transpose(convertTableToRows(table))\n\n rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction)\n rows = transpose(rows)\n\n return convertRowsToTable(table, rows)\n}\n","import type { Selection } from '@milkdown/prose/state'\n\nimport { TableMap } from '@milkdown/prose/tables'\n\nimport { findTable } from './find-table'\n\n/// Get all cells in a table.\nexport function getAllCellsInTable(selection: Selection) {\n const table = findTable(selection.$from)\n if (!table) 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","import type { Transaction } from '@milkdown/prose/state'\n\nimport { cloneTr } from '@milkdown/prose'\nimport { CellSelection } from '@milkdown/prose/tables'\n\nimport { getAllCellsInTable } from './get-all-cells-in-table'\n\n/// Select a possible table in current selection.\nexport function selectTable(tr: Transaction) {\n const cells = getAllCellsInTable(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)))\n }\n }\n return tr\n}\n","import { paragraphSchema } from '@milkdown/preset-commonmark'\nimport { findParentNodeType } from '@milkdown/prose'\nimport { Selection } from '@milkdown/prose/state'\nimport {\n CellSelection,\n addColumnAfter,\n addColumnBefore,\n deleteColumn,\n deleteRow,\n deleteTable,\n goToNextCell,\n isInTable,\n selectedRect,\n setCellAttr,\n} from '@milkdown/prose/tables'\nimport { $command } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\nimport { tableSchema } from './schema'\nimport {\n addRowWithAlignment,\n createTable,\n moveCol,\n moveRow,\n selectCol,\n selectRow,\n selectTable,\n} from './utils'\n\n/// A command for moving cursor to previous cell.\nexport const goToPrevTableCellCommand = $command(\n 'GoToPrevTableCell',\n () => () => goToNextCell(-1)\n)\n\nwithMeta(goToPrevTableCellCommand, {\n displayName: 'Command<goToPrevTableCellCommand>',\n group: 'Table',\n})\n\n/// A command for moving cursor to next cell.\nexport const goToNextTableCellCommand = $command(\n 'GoToNextTableCell',\n () => () => goToNextCell(1)\n)\n\nwithMeta(goToNextTableCellCommand, {\n displayName: 'Command<goToNextTableCellCommand>',\n group: 'Table',\n})\n\n/// A command for quitting current table and insert a new paragraph node.\nexport const exitTable = $command(\n 'ExitTable',\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false\n\n const { $head } = state.selection\n const table = findParentNodeType($head, tableSchema.type(ctx))\n if (!table) return false\n\n const { to } = table\n\n const tr = state.tr.replaceWith(\n to,\n to,\n paragraphSchema.type(ctx).createAndFill()!\n )\n\n tr.setSelection(Selection.near(tr.doc.resolve(to), 1)).scrollIntoView()\n dispatch?.(tr)\n return true\n }\n)\n\nwithMeta(exitTable, {\n displayName: 'Command<breakTableCommand>',\n group: 'Table',\n})\n\n/// A command for inserting a table.\n/// You can specify the number of rows and columns.\n/// By default, it will insert a 3x3 table.\nexport const insertTableCommand = $command(\n 'InsertTable',\n (ctx) =>\n ({ row, col }: { row?: number; col?: number } = {}) =>\n (state, dispatch) => {\n const { selection, tr } = state\n const { from } = selection\n const table = createTable(ctx, row, col)\n const _tr = tr.replaceSelectionWith(table)\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true)\n if (sel) _tr.setSelection(sel)\n\n dispatch?.(_tr)\n\n return true\n }\n)\n\nwithMeta(insertTableCommand, {\n displayName: 'Command<insertTableCommand>',\n group: 'Table',\n})\n\n/// A command for moving a row in a table.\n/// You should specify the `from` and `to` index.\nexport const moveRowCommand = $command(\n 'MoveRow',\n () =>\n ({ from, to, pos }: { from?: number; to?: number; pos?: number } = {}) =>\n (state, dispatch) => {\n const { tr } = state\n if (\n moveRow({\n tr,\n origin: from ?? 0,\n target: to ?? 0,\n pos: pos ?? state.selection.from,\n select: true,\n })\n ) {\n dispatch?.(tr)\n return true\n }\n\n return false\n }\n)\n\nwithMeta(moveRowCommand, {\n displayName: 'Command<moveRowCommand>',\n group: 'Table',\n})\n\n/// A command for moving a column in a table.\n/// You should specify the `from` and `to` index.\nexport const moveColCommand = $command(\n 'MoveCol',\n () =>\n ({ from, to, pos }: { from?: number; to?: number; pos?: number } = {}) =>\n (state, dispatch) => {\n const { tr } = state\n if (\n moveCol({\n tr,\n origin: from ?? 0,\n target: to ?? 0,\n pos: pos ?? state.selection.from,\n select: true,\n })\n ) {\n dispatch?.(tr)\n return true\n }\n\n return false\n }\n)\n\nwithMeta(moveColCommand, {\n displayName: 'Command<moveColCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a row.\nexport const selectRowCommand = $command<\n { index: number; pos?: number },\n 'SelectRow'\n>(\n 'SelectRow',\n () =>\n (payload: { index: number; pos?: number } = { index: 0 }) =>\n (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectRow(payload.index, payload.pos)(tr))\n\n return Boolean(result)\n }\n)\n\nwithMeta(selectRowCommand, {\n displayName: 'Command<selectRowCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a column.\nexport const selectColCommand = $command<\n { index: number; pos?: number },\n 'SelectCol'\n>(\n 'SelectCol',\n () =>\n (payload: { index: number; pos?: number } = { index: 0 }) =>\n (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectCol(payload.index, payload.pos)(tr))\n\n return Boolean(result)\n }\n)\n\nwithMeta(selectColCommand, {\n displayName: 'Command<selectColCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a table.\nexport const selectTableCommand = $command(\n 'SelectTable',\n () => () => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectTable(tr))\n\n return Boolean(result)\n }\n)\n\nwithMeta(selectTableCommand, {\n displayName: 'Command<selectTableCommand>',\n group: 'Table',\n})\n\n/// A command for deleting selected cells.\n/// If the selection is a row or column, the row or column will be deleted.\n/// If all cells are selected, the table will be deleted.\nexport const deleteSelectedCellsCommand = $command(\n 'DeleteSelectedCells',\n () => () => (state, dispatch) => {\n const { selection } = state\n if (!(selection instanceof CellSelection)) return false\n\n const isRow = selection.isRowSelection()\n const isCol = selection.isColSelection()\n\n if (isRow && isCol) return deleteTable(state, dispatch)\n\n if (isCol) return deleteColumn(state, dispatch)\n else return deleteRow(state, dispatch)\n }\n)\n\nwithMeta(deleteSelectedCellsCommand, {\n displayName: 'Command<deleteSelectedCellsCommand>',\n group: 'Table',\n})\n\n/// A command for adding a column before the current column.\nexport const addColBeforeCommand = $command(\n 'AddColBefore',\n () => () => addColumnBefore\n)\n\nwithMeta(addColBeforeCommand, {\n displayName: 'Command<addColBeforeCommand>',\n group: 'Table',\n})\n\n/// A command for adding a column after the current column.\nexport const addColAfterCommand = $command(\n 'AddColAfter',\n () => () => addColumnAfter\n)\n\nwithMeta(addColAfterCommand, {\n displayName: 'Command<addColAfterCommand>',\n group: 'Table',\n})\n\n/// A command for adding a row before the current row.\nexport const addRowBeforeCommand = $command(\n 'AddRowBefore',\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false\n if (dispatch) {\n const rect = selectedRect(state)\n dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.top))\n }\n return true\n }\n)\n\nwithMeta(addRowBeforeCommand, {\n displayName: 'Command<addRowBeforeCommand>',\n group: 'Table',\n})\n\n/// A command for adding a row after the current row.\nexport const addRowAfterCommand = $command(\n 'AddRowAfter',\n (ctx) => () => (state, dispatch) => {\n if (!isInTable(state)) return false\n if (dispatch) {\n const rect = selectedRect(state)\n dispatch(addRowWithAlignment(ctx, state.tr, rect, rect.bottom))\n }\n return true\n }\n)\n\nwithMeta(addRowAfterCommand, {\n displayName: 'Command<addRowAfterCommand>',\n group: 'Table',\n})\n\n/// A command for setting alignment property for selected cells.\n/// You can specify the alignment as `left`, `center`, or `right`.\n/// It's `left` by default.\nexport const setAlignCommand = $command<\n 'left' | 'center' | 'right',\n 'SetAlign'\n>(\n 'SetAlign',\n () =>\n (alignment = 'left') =>\n setCellAttr('alignment', alignment)\n)\n\nwithMeta(setAlignCommand, {\n displayName: 'Command<setAlignCommand>',\n group: 'Table',\n})\n","import { commandsCtx } from '@milkdown/core'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { $inputRule, $useKeymap } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\nimport {\n exitTable,\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n} from './command'\nimport { tableSchema } from './schema'\nimport { createTable } from './utils'\n\n/// A input rule for creating table.\n/// For example, `|2x2|` will create a 2x2 table.\nexport const insertTableInputRule = $inputRule(\n (ctx) =>\n new InputRule(\n /^\\|(?<col>\\d+)[xX](?<row>\\d+)\\|\\s$/,\n (state, match, start, end) => {\n const $start = state.doc.resolve(start)\n if (\n !$start\n .node(-1)\n .canReplaceWith(\n $start.index(-1),\n $start.indexAfter(-1),\n tableSchema.type(ctx)\n )\n )\n return null\n\n const row = Math.max(Number(match.groups?.row ?? 0), 2)\n\n const tableNode = createTable(ctx, row, Number(match.groups?.col))\n const tr = state.tr.replaceRangeWith(start, end, tableNode)\n return tr\n .setSelection(TextSelection.create(tr.doc, start + 3))\n .scrollIntoView()\n }\n )\n)\n\nwithMeta(insertTableInputRule, {\n displayName: 'InputRule<insertTableInputRule>',\n group: 'Table',\n})\n\n/// Keymap for table commands.\n/// - `<Mod-]>`/`<Tab>`: Move to the next cell.\n/// - `<Mod-[>`/`<Shift-Tab>`: Move to the previous cell.\n/// - `<Mod-Enter>`: Exit the table, and break it if possible.\nexport const tableKeymap = $useKeymap('tableKeymap', {\n NextCell: {\n priority: 100,\n shortcuts: ['Mod-]', 'Tab'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n\n return () => commands.call(goToNextTableCellCommand.key)\n },\n },\n PrevCell: {\n shortcuts: ['Mod-[', 'Shift-Tab'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n\n return () => commands.call(goToPrevTableCellCommand.key)\n },\n },\n ExitTable: {\n shortcuts: ['Mod-Enter', 'Enter'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n\n return () => commands.call(exitTable.key)\n },\n },\n})\n\nwithMeta(tableKeymap.ctx, {\n displayName: 'KeymapCtx<table>',\n group: 'Table',\n})\n\nwithMeta(tableKeymap.shortcuts, {\n displayName: 'Keymap<table>',\n group: 'Table',\n})\n","import { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\n\nconst id = 'footnote_definition'\nconst markdownId = 'footnoteDefinition'\n\n/// Footnote definition node schema.\nexport const footnoteDefinitionSchema = $nodeSchema(\n 'footnote_definition',\n () => ({\n group: 'block',\n content: 'block+',\n defining: true,\n attrs: {\n label: {\n default: '',\n validate: 'string',\n },\n },\n parseDOM: [\n {\n tag: `dl[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n }\n },\n contentElement: 'dd',\n },\n ],\n toDOM: (node) => {\n const label = node.attrs.label\n\n return [\n 'dl',\n {\n // TODO: add a prosemirror plugin to sync label on change\n 'data-label': label,\n 'data-type': id,\n },\n ['dt', label],\n ['dd', 0],\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)\n\nwithMeta(footnoteDefinitionSchema.ctx, {\n displayName: 'NodeSchemaCtx<footnodeDef>',\n group: 'footnote',\n})\n\nwithMeta(footnoteDefinitionSchema.node, {\n displayName: 'NodeSchema<footnodeDef>',\n group: 'footnote',\n})\n","import { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\n\nconst id = 'footnote_reference'\n\n/// Footnote reference node schema.\nexport const footnoteReferenceSchema = $nodeSchema(\n 'footnote_reference',\n () => ({\n group: 'inline',\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: '',\n validate: 'string',\n },\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n }\n },\n },\n ],\n toDOM: (node) => {\n const label = node.attrs.label\n return [\n 'sup',\n {\n // TODO: add a prosemirror plugin to sync label on change\n 'data-label': label,\n 'data-type': id,\n },\n label,\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)\n\nwithMeta(footnoteReferenceSchema.ctx, {\n displayName: 'NodeSchemaCtx<footnodeRef>',\n group: 'footnote',\n})\n\nwithMeta(footnoteReferenceSchema.node, {\n displayName: 'NodeSchema<footnodeRef>',\n group: 'footnote',\n})\n","import { expectDomTypeError } from '@milkdown/exception'\nimport { listItemSchema } from '@milkdown/preset-commonmark'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $inputRule } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// This schema extends the [list item](/preset-commonmark#list-item) schema and add task list support for it.\nexport const extendListItemSchemaForTask = listItemSchema.extendSchema(\n (prev) => {\n return (ctx) => {\n const baseSchema = prev(ctx)\n return {\n ...baseSchema,\n attrs: {\n ...baseSchema.attrs,\n checked: {\n default: null,\n validate: 'boolean|null',\n },\n },\n parseDOM: [\n {\n tag: 'li[data-item-type=\"task\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset.listType,\n spread: dom.dataset.spread,\n checked: dom.dataset.checked\n ? dom.dataset.checked === 'true'\n : null,\n }\n },\n },\n ...(baseSchema?.parseDOM || []),\n ],\n toDOM: (node) => {\n if (baseSchema.toDOM && node.attrs.checked == null)\n return baseSchema.toDOM(node)\n\n return [\n 'li',\n {\n 'data-item-type': 'task',\n 'data-label': node.attrs.label,\n 'data-list-type': node.attrs.listType,\n 'data-spread': node.attrs.spread,\n 'data-checked': node.attrs.checked,\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'listItem',\n runner: (state, node, type) => {\n if (node.checked == null) {\n baseSchema.parseMarkdown.runner(state, node, type)\n return\n }\n\n const label = node.label != null ? `${node.label}.` : '•'\n const checked = node.checked != null ? Boolean(node.checked) : null\n const listType = node.label != null ? 'ordered' : 'bullet'\n const spread = node.spread != null ? `${node.spread}` : 'true'\n\n state.openNode(type, { label, listType, spread, checked })\n state.next(node.children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'list_item',\n runner: (state, node) => {\n if (node.attrs.checked == null) {\n baseSchema.toMarkdown.runner(state, node)\n return\n }\n\n const label = node.attrs.label\n const listType = node.attrs.listType\n const spread = node.attrs.spread === 'true'\n const checked = node.attrs.checked\n\n state.openNode('listItem', undefined, {\n label,\n listType,\n spread,\n checked,\n })\n state.next(node.content)\n state.closeNode()\n },\n },\n }\n }\n }\n)\n\nwithMeta(extendListItemSchemaForTask.node, {\n displayName: 'NodeSchema<taskListItem>',\n group: 'ListItem',\n})\n\nwithMeta(extendListItemSchemaForTask.ctx, {\n displayName: 'NodeSchemaCtx<taskListItem>',\n group: 'ListItem',\n})\n\n/// Input rule for wrapping a block in task list node.\n/// Users can type `[ ] ` or `[x] ` to wrap the block in task list node with checked status.\nexport const wrapInTaskListInputRule = $inputRule(() => {\n return new InputRule(\n /^\\[(?<checked>\\s|x)\\]\\s$/,\n (state, match, start, end) => {\n const pos = state.doc.resolve(start)\n let depth = 0\n let node = pos.node(depth)\n while (node && node.type.name !== 'list_item') {\n depth--\n node = pos.node(depth)\n }\n\n if (!node || node.attrs.checked != null) return null\n\n const checked = Boolean(match.groups?.checked === 'x')\n\n const finPos = pos.before(depth)\n const tr = state.tr\n\n tr.deleteRange(start, end).setNodeMarkup(finPos, undefined, {\n ...node.attrs,\n checked,\n })\n\n return tr\n }\n )\n})\n\nwithMeta(wrapInTaskListInputRule, {\n displayName: 'InputRule<wrapInTaskListInputRule>',\n group: 'ListItem',\n})\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport { strikethroughKeymap } from '../mark'\nimport { tableKeymap } from '../node'\n\n/// @internal\nexport const keymap: MilkdownPlugin[] = [\n strikethroughKeymap,\n tableKeymap,\n].flat()\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport { strikethroughInputRule } from '../mark'\nimport { insertTableInputRule, wrapInTaskListInputRule } from '../node'\n\n/// @internal\nexport const inputRules: MilkdownPlugin[] = [\n insertTableInputRule,\n wrapInTaskListInputRule,\n]\n\nexport const markInputRules: MilkdownPlugin[] = [strikethroughInputRule]\n","import { $prose } from '@milkdown/utils'\nimport { imeSpan } from 'prosemirror-safari-ime-span'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to fix the bug of IME composing in table in Safari browser.\n/// original discussion in https://discuss.prosemirror.net/t/ime-composing-problems-on-td-or-th-element-in-safari-browser/4501\nexport const autoInsertSpanPlugin = $prose(() => imeSpan)\n\nwithMeta(autoInsertSpanPlugin, {\n displayName: 'Prose<autoInsertSpanPlugin>',\n group: 'Prose',\n})\n","import { columnResizing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is wrapping the `columnResizing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).\nexport const columnResizingPlugin = $prose(() => columnResizing({}))\n\nwithMeta(columnResizingPlugin, {\n displayName: 'Prose<columnResizingPlugin>',\n group: 'Prose',\n})\n","import { tableEditing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is wrapping the `tableEditing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).\nexport const tableEditingPlugin = $prose(() =>\n tableEditing({ allowTableNodeSelection: true })\n)\n\nwithMeta(tableEditingPlugin, {\n displayName: 'Prose<tableEditingPlugin>',\n group: 'Prose',\n})\n","import type { $Remark } from '@milkdown/utils'\nimport type { Options } from 'remark-gfm'\n\nimport { $remark } from '@milkdown/utils'\nimport remarkGFM from 'remark-gfm'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is wrapping the [remark-gfm](https://github.com/remarkjs/remark-gfm).\nexport const remarkGFMPlugin: $Remark<'remarkGFM', Options | null | undefined> =\n $remark('remarkGFM', () => remarkGFM)\n\nwithMeta(remarkGFMPlugin.plugin, {\n displayName: 'Remark<remarkGFMPlugin>',\n group: 'Remark',\n})\n\nwithMeta(remarkGFMPlugin.options, {\n displayName: 'RemarkConfig<remarkGFMPlugin>',\n group: 'Remark',\n})\n","import type { Node } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\n\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\nconst pluginKey = new PluginKey('MILKDOWN_KEEP_TABLE_ALIGN_PLUGIN')\n\nfunction getChildIndex(node: Node, parent: Node) {\n let index = 0\n parent.forEach((child, _offset, i) => {\n if (child === node) index = i\n })\n return index\n}\n\nexport const keepTableAlignPlugin = $prose(() => {\n return new Plugin({\n key: pluginKey,\n appendTransaction: (_tr, oldState, state) => {\n let tr: Transaction | undefined\n const check = (node: Node, pos: number) => {\n if (!tr) tr = state.tr\n\n if (node.type.name !== 'table_cell') return\n\n const $pos = state.doc.resolve(pos)\n const tableRow = $pos.node($pos.depth)\n const table = $pos.node($pos.depth - 1)\n const tableHeaderRow = table.firstChild\n // TODO: maybe consider add a header row\n if (!tableHeaderRow) return\n\n const index = getChildIndex(node, tableRow)\n const headerCell = tableHeaderRow.maybeChild(index)\n if (!headerCell) return\n const align = headerCell.attrs.alignment\n const currentAlign = node.attrs.alignment\n if (align === currentAlign) return\n\n tr.setNodeMarkup(pos, undefined, { ...node.attrs, alignment: align })\n }\n if (oldState.doc !== state.doc) state.doc.descendants(check)\n\n return tr\n },\n })\n})\n\nwithMeta(keepTableAlignPlugin, {\n displayName: 'Prose<keepTableAlignPlugin>',\n group: 'Prose',\n})\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n autoInsertSpanPlugin,\n keepTableAlignPlugin,\n remarkGFMPlugin,\n tableEditingPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n keepTableAlignPlugin,\n autoInsertSpanPlugin,\n remarkGFMPlugin,\n tableEditingPlugin,\n].flat()\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport { strikethroughAttr, strikethroughSchema } from '../mark'\nimport {\n extendListItemSchemaForTask,\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n tableCellSchema,\n tableHeaderRowSchema,\n tableHeaderSchema,\n tableRowSchema,\n tableSchema,\n} from '../node'\n\n/// @internal\nexport const schema: MilkdownPlugin[] = [\n extendListItemSchemaForTask,\n\n tableSchema,\n tableHeaderRowSchema,\n tableRowSchema,\n tableHeaderSchema,\n tableCellSchema,\n\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n\n strikethroughAttr,\n strikethroughSchema,\n].flat()\n","import { toggleStrikethroughCommand } from '../mark'\nimport {\n addColAfterCommand,\n addColBeforeCommand,\n addRowAfterCommand,\n addRowBeforeCommand,\n deleteSelectedCellsCommand,\n exitTable,\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n insertTableCommand,\n moveColCommand,\n moveRowCommand,\n selectColCommand,\n selectRowCommand,\n selectTableCommand,\n setAlignCommand,\n} from '../node'\n\n/// @internal\nexport const commands = [\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n exitTable,\n insertTableCommand,\n moveRowCommand,\n moveColCommand,\n selectRowCommand,\n selectColCommand,\n selectTableCommand,\n deleteSelectedCellsCommand,\n addRowBeforeCommand,\n addRowAfterCommand,\n addColBeforeCommand,\n addColAfterCommand,\n setAlignCommand,\n\n toggleStrikethroughCommand,\n]\n","import {\n commands,\n inputRules,\n keymap,\n markInputRules,\n plugins,\n schema,\n} from './composed'\n\nexport * from './node'\nexport * from './mark'\nexport * from './plugin'\nexport * from './composed'\n\n/// The GFM preset, includes all the plugins.\nexport const gfm = [\n schema,\n inputRules,\n markInputRules,\n keymap,\n commands,\n plugins,\n].flat()\n"],"names":["commands","id"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"strike-through.d.ts","sourceRoot":"","sources":["../../src/mark/strike-through.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,iBAAiB,qCAA8B,CAAA;AAQ5D,eAAO,MAAM,mBAAmB,yDAuB7B,CAAA;AAaH,eAAO,MAAM,0BAA0B,6CAKtC,CAAA;AAQD,eAAO,MAAM,sBAAsB,sCAEjC,CAAA;AASF,eAAO,MAAM,mBAAmB,qFAQ9B,CAAA"}
1
+ {"version":3,"file":"strike-through.d.ts","sourceRoot":"","sources":["../../src/mark/strike-through.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,iBAAiB,qCAA8B,CAAA;AAQ5D,eAAO,MAAM,mBAAmB,yDAuB7B,CAAA;AAaH,eAAO,MAAM,0BAA0B,6CAKtC,CAAA;AAQD,eAAO,MAAM,sBAAsB,sCAKjC,CAAA;AASF,eAAO,MAAM,mBAAmB,qFAQ9B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/node/table/command.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,wBAAwB,6CAGpC,CAAA;AAQD,eAAO,MAAM,wBAAwB,6CAGpC,CAAA;AAQD,eAAO,MAAM,SAAS,6CAqBrB,CAAA;AAUD,eAAO,MAAM,kBAAkB;UAGJ,MAAM;UAAQ,MAAM;EAa9C,CAAA;AASD,eAAO,MAAM,cAAc;WAGM,MAAM;SAAO,MAAM;UAAQ,MAAM;EASjE,CAAA;AASD,eAAO,MAAM,cAAc;WAGM,MAAM;SAAO,MAAM;UAAQ,MAAM;EASjE,CAAA;AAQD,eAAO,MAAM,gBAAgB;WAClB,MAAM;UAAQ,MAAM;EAY9B,CAAA;AAQD,eAAO,MAAM,gBAAgB;WAClB,MAAM;UAAQ,MAAM;EAY9B,CAAA;AAQD,eAAO,MAAM,kBAAkB,6CAQ9B,CAAA;AAUD,eAAO,MAAM,0BAA0B,6CActC,CAAA;AAQD,eAAO,MAAM,mBAAmB,6CAG/B,CAAA;AAQD,eAAO,MAAM,kBAAkB,6CAG9B,CAAA;AAQD,eAAO,MAAM,mBAAmB,6CAU/B,CAAA;AAQD,eAAO,MAAM,kBAAkB,6CAU9B,CAAA;AAUD,eAAO,MAAM,eAAe,iEAQ3B,CAAA"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/node/table/command.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,wBAAwB,6CAGpC,CAAA;AAQD,eAAO,MAAM,wBAAwB,6CAGpC,CAAA;AAQD,eAAO,MAAM,SAAS,6CAqBrB,CAAA;AAUD,eAAO,MAAM,kBAAkB;UAGJ,MAAM;UAAQ,MAAM;EAa9C,CAAA;AASD,eAAO,MAAM,cAAc;WAGM,MAAM;SAAO,MAAM;UAAQ,MAAM;EAkBjE,CAAA;AASD,eAAO,MAAM,cAAc;WAGM,MAAM;SAAO,MAAM;UAAQ,MAAM;EAkBjE,CAAA;AAQD,eAAO,MAAM,gBAAgB;WAClB,MAAM;UAAQ,MAAM;EAY9B,CAAA;AAQD,eAAO,MAAM,gBAAgB;WAClB,MAAM;UAAQ,MAAM;EAY9B,CAAA;AAQD,eAAO,MAAM,kBAAkB,6CAQ9B,CAAA;AAUD,eAAO,MAAM,0BAA0B,6CActC,CAAA;AAQD,eAAO,MAAM,mBAAmB,6CAG/B,CAAA;AAQD,eAAO,MAAM,kBAAkB,6CAG9B,CAAA;AAQD,eAAO,MAAM,mBAAmB,6CAU/B,CAAA;AAQD,eAAO,MAAM,kBAAkB,6CAU9B,CAAA;AAUD,eAAO,MAAM,eAAe,iEAQ3B,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { Ctx } from '@milkdown/ctx';
2
+ import type { Transaction } from '@milkdown/prose/state';
3
+ import type { TableRect } from '@milkdown/prose/tables';
4
+ export declare function addRowWithAlignment(ctx: Ctx, tr: Transaction, { map, tableStart, table }: TableRect, row: number): Transaction;
5
+ //# sourceMappingURL=add-row-with-alignment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-row-with-alignment.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/add-row-with-alignment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKvD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,WAAW,EACf,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,SAAS,EACrC,GAAG,EAAE,MAAM,eAmBZ"}
@@ -0,0 +1,3 @@
1
+ import type { Node } from '@milkdown/prose/model';
2
+ export declare function convertRowsToTable(tableNode: Node, arrayOfNodes: (Node | null)[][]): Node;
3
+ //# sourceMappingURL=convert-rows-to-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-rows-to-table.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/convert-rows-to-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAOjD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,IAAI,EACf,YAAY,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,QAiChC"}
@@ -0,0 +1,3 @@
1
+ import type { Node } from '@milkdown/prose/model';
2
+ export declare function convertTableToRows(tableNode: Node): (Node | null)[][];
3
+ //# sourceMappingURL=convert-table-to-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-table-to-rows.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/convert-table-to-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AA4BjD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAoCrE"}
@@ -0,0 +1,4 @@
1
+ import type { Ctx } from '@milkdown/ctx';
2
+ import type { Node } from '@milkdown/prose/model';
3
+ export declare function createTable(ctx: Ctx, rowsCount?: number, colsCount?: number): Node;
4
+ //# sourceMappingURL=create-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-table.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/create-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAWjD,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,SAAI,EAAE,SAAS,SAAI,GAAG,IAAI,CAkBxE"}
@@ -0,0 +1,3 @@
1
+ import type { ResolvedPos } from '@milkdown/prose/model';
2
+ export declare function findTable($pos: ResolvedPos): import("@milkdown/prose").ContentNodeWithPos | undefined;
3
+ //# sourceMappingURL=find-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-table.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/find-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAKxD,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,4DAI1C"}
@@ -0,0 +1,7 @@
1
+ import type { Selection } from '@milkdown/prose/state';
2
+ export declare function getAllCellsInTable(selection: Selection): {
3
+ pos: number;
4
+ start: number;
5
+ node: import("prosemirror-model").Node | null;
6
+ }[] | undefined;
7
+ //# sourceMappingURL=get-all-cells-in-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-all-cells-in-table.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/get-all-cells-in-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAOtD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS;;;;gBAgBtD"}
@@ -0,0 +1,4 @@
1
+ import type { Selection } from '@milkdown/prose/state';
2
+ import type { CellPos } from './types';
3
+ export declare function getCellsInCol(columnIndexes: number | number[], selection: Selection): CellPos[] | undefined;
4
+ //# sourceMappingURL=get-cells-in-col.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cells-in-col.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/get-cells-in-col.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAItD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAKtC,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,EAChC,SAAS,EAAE,SAAS,GACnB,OAAO,EAAE,GAAG,SAAS,CAsBvB"}
@@ -0,0 +1,4 @@
1
+ import type { Selection } from '@milkdown/prose/state';
2
+ import type { CellPos } from './types';
3
+ export declare function getCellsInRow(rowIndex: number | number[], selection: Selection): CellPos[] | undefined;
4
+ //# sourceMappingURL=get-cells-in-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cells-in-row.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/get-cells-in-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAItD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAKtC,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,SAAS,EAAE,SAAS,GACnB,OAAO,EAAE,GAAG,SAAS,CAwBvB"}
@@ -0,0 +1,4 @@
1
+ import type { Transaction } from '@milkdown/prose/state';
2
+ import type { CellSelectionRange } from './types';
3
+ export declare function getSelectionRangeInCol(tr: Transaction, startColIndex: number, endColIndex?: number): CellSelectionRange | undefined;
4
+ //# sourceMappingURL=get-selection-range-in-col.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-selection-range-in-col.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/get-selection-range-in-col.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAKjD,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,WAAW,EACf,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAsB,GAClC,kBAAkB,GAAG,SAAS,CA0EhC"}
@@ -0,0 +1,4 @@
1
+ import type { Transaction } from '@milkdown/prose/state';
2
+ import type { CellSelectionRange } from './types';
3
+ export declare function getSelectionRangeInRow(tr: Transaction, startRowIndex: number, endRowIndex?: number): CellSelectionRange | undefined;
4
+ //# sourceMappingURL=get-selection-range-in-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-selection-range-in-row.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/get-selection-range-in-row.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAKjD,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,WAAW,EACf,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAsB,GAClC,kBAAkB,GAAG,SAAS,CA0EhC"}
@@ -0,0 +1,12 @@
1
+ export * from './create-table';
2
+ export * from './find-table';
3
+ export * from './get-cells-in-col';
4
+ export * from './get-cells-in-row';
5
+ export * from './select-line';
6
+ export * from './types';
7
+ export * from './add-row-with-alignment';
8
+ export * from './move-row';
9
+ export * from './move-col';
10
+ export * from './select-table';
11
+ export * from './get-all-cells-in-table';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,0BAA0B,CAAA;AACxC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { Transaction } from '@milkdown/prose/state';
2
+ export interface MoveColParams {
3
+ tr: Transaction;
4
+ origin: number;
5
+ target: number;
6
+ pos: number;
7
+ select?: boolean;
8
+ }
9
+ export declare function moveCol(moveColParams: MoveColParams): boolean;
10
+ //# sourceMappingURL=move-col.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-col.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/move-col.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAWxD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,WAAW,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAKD,wBAAgB,OAAO,CAAC,aAAa,EAAE,aAAa,WAmCnD"}
@@ -0,0 +1,3 @@
1
+ import type { Node } from '@milkdown/prose/model';
2
+ export declare function moveRowInArrayOfRows(rows: (Node | null)[][], indexesOrigin: number[], indexesTarget: number[], directionOverride: -1 | 1 | 0): (Node | null)[][];
3
+ //# sourceMappingURL=move-row-in-array-of-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-row-in-array-of-rows.d.ts","sourceRoot":"","sources":["../../../../src/node/table/utils/move-row-in-array-of-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAGjD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,EACvB,aAAa,EAAE,MAAM,EAAE,EACvB,aAAa,EAAE,MAAM,EAAE,EACvB,iBAAiB,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,qBAqB9B"}
@@ -0,0 +1,10 @@
1
+ import type { Transaction } from '@milkdown/prose/state';
2
+ export interface MoveRowParams {
3
+ tr: Transaction;
4
+ origin: number;
5
+ target: number;
6
+ pos: number;
7
+ select?: boolean;
8
+ }
9
+ export declare function moveRow(moveRowParams: MoveRowParams): boolean;
10
+ //# sourceMappingURL=move-row.d.ts.map