@milkdown/preset-gfm 7.3.1 → 7.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  import type { Meta, MilkdownPlugin } from '@milkdown/ctx';
2
- export declare const withMeta: <T extends MilkdownPlugin>(plugin: T, meta: Partial<Meta> & Pick<Meta, 'displayName'>) => T;
2
+ export declare function withMeta<T extends MilkdownPlugin>(plugin: T, meta: Partial<Meta> & Pick<Meta, 'displayName'>): T;
3
3
  //# sourceMappingURL=with-meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-meta.d.ts","sourceRoot":"","sources":["../../src/__internal__/with-meta.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEzD,eAAO,MAAM,QAAQ,8CAEb,QAAQ,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,aAAa,CAAC,MAUhD,CAAA"}
1
+ {"version":3,"file":"with-meta.d.ts","sourceRoot":"","sources":["../../src/__internal__/with-meta.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEzD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAShH"}
package/lib/index.es.js CHANGED
@@ -8,12 +8,15 @@ import { TableMap as h, CellSelection as y, tableNodes as Be, goToNextCell as le
8
8
  import { findParentNode as Ze, cloneTr as A, browser as U } from "@milkdown/prose";
9
9
  import { toggleMark as Ve } from "@milkdown/prose/commands";
10
10
  import Ue from "remark-gfm";
11
- const d = (e, t) => (Object.assign(e, {
12
- meta: {
13
- package: "@milkdown/preset-gfm",
14
- ...t
15
- }
16
- }), e), F = $e("strike_through");
11
+ function d(e, t) {
12
+ return Object.assign(e, {
13
+ meta: {
14
+ package: "@milkdown/preset-gfm",
15
+ ...t
16
+ }
17
+ }), e;
18
+ }
19
+ const F = $e("strike_through");
17
20
  d(F, {
18
21
  displayName: "Attr<strikethrough>",
19
22
  group: "Strikethrough"
@@ -67,10 +70,14 @@ d(H.shortcuts, {
67
70
  displayName: "Keymap<strikethrough>",
68
71
  group: "Strikethrough"
69
72
  });
70
- const ae = (e, t = 3, n = 3) => {
73
+ function ae(e, t = 3, n = 3) {
71
74
  const o = Array(n).fill(0).map(() => R.type(e).createAndFill()), l = Array(n).fill(0).map(() => I.type(e).createAndFill()), r = Array(t).fill(0).map((s, c) => S.type(e).create(null, c === 0 ? l : o));
72
75
  return T.type(e).create(null, r);
73
- }, w = (e) => Ze((t) => t.type.spec.tableRole === "table")(e), b = (e, t) => {
76
+ }
77
+ function w(e) {
78
+ return Ze((t) => t.type.spec.tableRole === "table")(e);
79
+ }
80
+ function b(e, t) {
74
81
  const n = w(t);
75
82
  if (!n)
76
83
  return;
@@ -87,7 +94,8 @@ const ae = (e, t = 3, n = 3) => {
87
94
  node: r
88
95
  };
89
96
  }).filter((l) => l != null);
90
- }, C = (e, t) => {
97
+ }
98
+ function C(e, t) {
91
99
  const n = w(t);
92
100
  if (!n)
93
101
  return;
@@ -104,7 +112,8 @@ const ae = (e, t = 3, n = 3) => {
104
112
  node: r
105
113
  };
106
114
  }).filter((l) => l != null);
107
- }, Xe = (e) => {
115
+ }
116
+ function Xe(e) {
108
117
  const t = w(e);
109
118
  if (!t)
110
119
  return;
@@ -118,7 +127,8 @@ const ae = (e, t = 3, n = 3) => {
118
127
  const r = t.node.nodeAt(l), s = l + t.start;
119
128
  return { pos: s, start: s + 1, node: r };
120
129
  });
121
- }, qe = (e) => {
130
+ }
131
+ function qe(e) {
122
132
  const t = Xe(e.selection);
123
133
  if (t && t[0]) {
124
134
  const n = e.doc.resolve(t[0].pos), o = t[t.length - 1];
@@ -128,7 +138,7 @@ const ae = (e, t = 3, n = 3) => {
128
138
  }
129
139
  }
130
140
  return e;
131
- };
141
+ }
132
142
  function se(e, t, { map: n, tableStart: o, table: l }, r) {
133
143
  const s = Array(r).fill(0).reduce((i, m, a) => i + l.child(a).nodeSize, o), c = Array(n.width).fill(0).map((i, m) => {
134
144
  const a = l.nodeAt(n.map[m]);
@@ -136,21 +146,28 @@ function se(e, t, { map: n, tableStart: o, table: l }, r) {
136
146
  });
137
147
  return t.insert(s, S.type(e).create(null, c)), t;
138
148
  }
139
- const ce = (e) => (t) => (n) => {
140
- const o = w(n.selection), l = e === "row";
141
- if (o) {
142
- const r = h.get(o.node);
143
- if (t >= 0 && t < (l ? r.height : r.width)) {
144
- const s = r.positionAt(
145
- l ? t : r.height - 1,
146
- l ? r.width - 1 : t,
147
- o.node
148
- ), c = n.doc.resolve(o.start + s), i = l ? y.rowSelection : y.colSelection, m = r.positionAt(l ? t : 0, l ? 0 : t, o.node), a = n.doc.resolve(o.start + m);
149
- return A(n.setSelection(i(c, a)));
149
+ function ce(e) {
150
+ return (t) => (n) => {
151
+ const o = w(n.selection), l = e === "row";
152
+ if (o) {
153
+ const r = h.get(o.node);
154
+ if (t >= 0 && t < (l ? r.height : r.width)) {
155
+ const s = r.positionAt(
156
+ l ? t : r.height - 1,
157
+ l ? r.width - 1 : t,
158
+ o.node
159
+ ), c = n.doc.resolve(o.start + s), i = l ? y.rowSelection : y.colSelection, m = r.positionAt(l ? t : 0, l ? 0 : t, o.node), a = n.doc.resolve(o.start + m);
160
+ return A(n.setSelection(i(c, a)));
161
+ }
150
162
  }
151
- }
152
- return n;
153
- }, Je = ce("row"), Qe = ce("col"), X = (e) => e[0].map((t, n) => e.map((o) => o[n])), ie = (e, t) => {
163
+ return n;
164
+ };
165
+ }
166
+ const Je = ce("row"), Qe = ce("col");
167
+ function X(e) {
168
+ return e[0].map((t, n) => e.map((o) => o[n]));
169
+ }
170
+ function ie(e, t) {
154
171
  const n = [], o = h.get(e);
155
172
  for (let r = 0; r < o.height; r++) {
156
173
  const s = e.child(r), c = [];
@@ -171,7 +188,8 @@ const ce = (e) => (t) => (n) => {
171
188
  n,
172
189
  e.marks
173
190
  );
174
- }, de = (e) => {
191
+ }
192
+ function de(e) {
175
193
  const t = h.get(e), n = [];
176
194
  for (let o = 0; o < t.height; o++) {
177
195
  const l = [], r = {};
@@ -186,17 +204,21 @@ const ce = (e) => (t) => (n) => {
186
204
  n.push(l);
187
205
  }
188
206
  return n;
189
- }, me = (e, t, n, o) => {
207
+ }
208
+ function me(e, t, n, o) {
190
209
  const l = t[0] > n[0] ? -1 : 1, r = e.splice(t[0], t.length), s = r.length % 2 === 0 ? 1 : 0;
191
210
  let c;
192
211
  return o === -1 && l === 1 ? c = n[0] - 1 : o === 1 && l === -1 ? c = n[n.length - 1] - s + 1 : c = l === -1 ? n[0] : n[n.length - 1] - s, e.splice(c, 0, ...r), e;
193
- }, Ye = (e, t, n, o) => {
212
+ }
213
+ function Ye(e, t, n, o) {
194
214
  let l = X(de(e.node));
195
215
  return l = me(l, t, n, o), l = X(l), ie(e.node, l);
196
- }, et = (e, t, n, o) => {
216
+ }
217
+ function et(e, t, n, o) {
197
218
  let l = de(e.node);
198
219
  return l = me(l, t, n, o), ie(e.node, l);
199
- }, q = (e, t) => {
220
+ }
221
+ function q(e, t) {
200
222
  let n = e, o = e;
201
223
  for (let a = e; a >= 0; a--) {
202
224
  const u = b(a, t.selection);
@@ -236,7 +258,8 @@ const ce = (e) => (t) => (n) => {
236
258
  }
237
259
  const m = t.doc.resolve(i.pos);
238
260
  return { $anchor: c, $head: m, indexes: l };
239
- }, J = (e, t) => {
261
+ }
262
+ function J(e, t) {
240
263
  let n = e, o = e;
241
264
  for (let a = e; a >= 0; a--)
242
265
  C(a, t.selection).forEach((p) => {
@@ -270,7 +293,7 @@ const ce = (e) => (t) => (n) => {
270
293
  }
271
294
  const m = t.doc.resolve(i.pos);
272
295
  return { $anchor: c, $head: m, indexes: l };
273
- };
296
+ }
274
297
  function tt(e, t, n, o = !0) {
275
298
  const l = w(e.selection);
276
299
  if (!l)
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/__internal__/with-meta.ts","../src/mark/strike-through.ts","../src/node/table/utils.ts","../src/node/table/index.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-zero-space-plugin.ts","../src/plugin/column-resizing-plugin.ts","../src/plugin/table-editing-plugin.ts","../src/plugin/remark-gfm-plugin.ts","../src/composed/plugins.ts","../src/composed/schema.ts","../src/composed/commands.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport const 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","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\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 { style: 'text-decoration', getAttrs: value => (value === 'line-through') as false },\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('ToggleStrikeThrough', ctx => () => {\n return toggleMark(strikethroughSchema.type(ctx))\n})\n\nwithMeta(toggleStrikethroughCommand, {\n displayName: 'Command<ToggleStrikethrough>',\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","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { ContentNodeWithPos } from '@milkdown/prose'\nimport { cloneTr, findParentNode } from '@milkdown/prose'\nimport type { Node } from '@milkdown/prose/model'\nimport type { Selection, Transaction } from '@milkdown/prose/state'\nimport type { TableRect } from '@milkdown/prose/tables'\nimport { CellSelection, TableMap } from '@milkdown/prose/tables'\n\nimport type { Ctx } from '@milkdown/ctx'\nimport { tableCellSchema, tableHeaderSchema, tableRowSchema, tableSchema } from '.'\n\n/// @internal\nexport interface CellPos {\n pos: number\n start: number\n node: Node\n}\n\n/// @internal\nexport const 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) => tableRowSchema.type(ctx).create(null, i === 0 ? headerCells : cells))\n\n return tableSchema.type(ctx).create(null, rows)\n}\n\n/// Find the table node with position information for current selection.\nexport const findTable = (selection: Selection) =>\n findParentNode(node => node.type.spec.tableRole === 'table')(selection)\n\n/// Get cells in a column of a table.\nexport const getCellsInCol = (columnIndex: number, selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection)\n if (!table)\n return undefined\n const map = TableMap.get(table.node)\n if (columnIndex < 0 || columnIndex >= map.width)\n return undefined\n\n return map\n .cellsInRect({ left: columnIndex, right: columnIndex + 1, top: 0, bottom: map.height })\n .map((pos) => {\n const node = table.node.nodeAt(pos)\n if (!node)\n 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 const getCellsInRow = (rowIndex: number, selection: Selection): CellPos[] | undefined => {\n const table = findTable(selection)\n if (!table)\n return undefined\n const map = TableMap.get(table.node)\n if (rowIndex < 0 || rowIndex >= map.height)\n return undefined\n\n return map\n .cellsInRect({ left: 0, right: map.width, top: rowIndex, bottom: rowIndex + 1 })\n .map((pos) => {\n const node = table.node.nodeAt(pos)\n if (!node)\n 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 const getAllCellsInTable = (selection: Selection) => {\n const table = findTable(selection)\n if (!table)\n return\n\n const map = TableMap.get(table.node)\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height,\n })\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos)\n const pos = nodePos + table.start\n return { pos, start: pos + 1, node }\n })\n}\n\n/// Select a possible table in current selection.\nexport const 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(ctx: Ctx, tr: Transaction, { map, tableStart, table }: TableRect, row: number) {\n const rowPos = Array(row)\n .fill(0)\n .reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize\n }, tableStart)\n\n const cells = Array(map.width)\n .fill(0)\n .map((_, col) => {\n const headerCol = table.nodeAt(map.map[col] as number)\n return tableCellSchema.type(ctx).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 const selectLine = (type: 'row' | 'col') => (index: number) => (tr: Transaction) => {\n const table = findTable(tr.selection)\n const isRowSelection = type === 'row'\n if (table) {\n const map = TableMap.get(table.node)\n\n // Check if the index is valid\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n const lastCell = map.positionAt(\n isRowSelection ? index : map.height - 1,\n isRowSelection ? map.width - 1 : index,\n table.node,\n )\n const $lastCell = tr.doc.resolve(table.start + lastCell)\n\n const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection\n\n const firstCell = map.positionAt(isRowSelection ? index : 0, isRowSelection ? 0 : index, table.node)\n const $firstCell = tr.doc.resolve(table.start + firstCell)\n return cloneTr(tr.setSelection(createCellSelection($lastCell, $firstCell) as unknown as Selection))\n }\n }\n return tr\n}\n\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\nconst transpose = <T>(array: T[][]) => {\n return array[0]!.map((_, i) => {\n return array.map(column => column[i])\n }) as T[][]\n}\n\nconst convertArrayOfRowsToTableNode = (tableNode: Node, arrayOfNodes: (Node | null)[][]) => {\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])\n 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\nconst 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\nconst 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 }\n else if (directionOverride === 1 && direction === -1) {\n target = indexesTarget[indexesTarget.length - 1]! - positionOffset + 1\n }\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\nconst 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\nconst 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\nconst 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)\n startIndex = i\n\n if (maybeEndIndex > endIndex)\n 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)\n 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)\n break\n }\n }\n\n const $head = tr.doc.resolve(headCell!.pos)\n return { $anchor, $head, indexes }\n}\n\nconst 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)\n startIndex = i\n\n if (maybeEndIndex > endIndex)\n 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)\n 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(firstSelectedRowCells[firstSelectedRowCells.length - 1]!.pos)\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)\n break\n }\n }\n\n const $head = tr.doc.resolve(headCell!.pos)\n return { $anchor, $head, indexes }\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(tr: Transaction, origin: number, target: number, select = true) {\n const table = findTable(tr.selection)\n if (!table)\n return tr\n\n const { indexes: indexesOriginColumn } = getSelectionRangeInColumn(origin, tr)\n const { indexes: indexesTargetColumn } = getSelectionRangeInColumn(target, tr)\n\n if (indexesOriginColumn.includes(target))\n 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)\n 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\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(tr: Transaction, origin: number, target: number, select = true) {\n const table = findTable(tr.selection)\n if (!table)\n return tr\n\n const { indexes: indexesOriginRow } = getSelectionRangeInRow(origin, tr)\n const { indexes: indexesTargetRow } = getSelectionRangeInRow(target, tr)\n\n if (indexesOriginRow.includes(target))\n return tr\n\n const newTable = moveTableRow(\n table,\n indexesOriginRow,\n indexesTargetRow,\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)\n 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","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MarkdownNode } from '@milkdown/transformer'\nimport { commandsCtx } from '@milkdown/core'\nimport { paragraphSchema } from '@milkdown/preset-commonmark'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport type { NodeType } from '@milkdown/prose/model'\nimport { Selection, TextSelection } from '@milkdown/prose/state'\nimport { CellSelection, addColumnAfter, addColumnBefore, deleteColumn, deleteRow, deleteTable, goToNextCell, isInTable, selectedRect, setCellAttr, tableNodes } from '@milkdown/prose/tables'\nimport { $command, $inputRule, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../../__internal__'\nimport { addRowWithAlignment, createTable, moveCol, moveRow, selectCol, selectRow, selectTable } from './utils'\n\nconst originalSchema = tableNodes({\n tableGroup: 'block',\n cellContent: 'paragraph',\n cellAttributes: {\n alignment: {\n default: 'left',\n getFromDOM: dom => (dom as HTMLElement).style.textAlign || 'left',\n setDOMAttr: (value, attrs) => {\n attrs.style = `text-align: ${value || 'left'}`\n },\n },\n },\n})\n\n/// Schema for table node.\nexport const tableSchema = $nodeSchema('table', () => ({\n ...originalSchema.table,\n parseMarkdown: {\n match: node => node.type === 'table',\n runner: (state, node, type) => {\n const align = node.align as (string | null)[]\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align,\n isHeader: i === 0,\n }))\n state.openNode(type)\n state.next(children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'table',\n runner: (state, node) => {\n const firstLine = node.content.firstChild?.content\n if (!firstLine)\n 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 row node.\nexport const tableRowSchema = $nodeSchema('table_row', () => ({\n ...originalSchema.table_row,\n parseMarkdown: {\n match: node => node.type === 'tableRow',\n runner: (state, node, type) => {\n const align = node.align as (string | null)[]\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align: align[i],\n isHeader: node.isHeader,\n }))\n state.openNode(type)\n state.next(children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'table_row',\n runner: (state, node) => {\n state.openNode('tableRow')\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\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 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 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\n/// A input rule for creating table.\n/// For example, `|2x2|` will create a 2x2 table.\nexport const insertTableInputRule = $inputRule(ctx => new InputRule(\n /^\\|(?<col>\\d+)[xX](?<row>\\d+)\\|\\s$/, (state, match, start, end) => {\n const $start = state.doc.resolve(start)\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), tableSchema.type(ctx)))\n return null\n\n const tableNode = createTable(\n ctx,\n Number(match.groups?.row),\n Number(match.groups?.col),\n )\n const tr = state.tr.replaceRangeWith(start, end, tableNode)\n return tr.setSelection(TextSelection.create(tr.doc, start + 3)).scrollIntoView()\n },\n))\n\nwithMeta(insertTableInputRule, {\n displayName: 'InputRule<insertTableInputRule>',\n group: 'Table',\n})\n\n/// A command for moving cursor to previous cell.\nexport const goToPrevTableCellCommand = $command('GoToPrevTableCell', () => () => goToNextCell(-1))\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('GoToNextTableCell', () => () => goToNextCell(1))\n\nwithMeta(goToNextTableCellCommand, {\n displayName: 'Command<goToNextTableCellCommand>',\n group: 'Table',\n})\n\n/// A command for splitting current table into two tables.\n/// If the selection is at the end of the table,\n/// it will just quit the table and insert a new paragraph node.\nexport const breakTableCommand = $command('BreakTable', ctx => () => (state, dispatch) => {\n if (!isInTable(state))\n return false\n\n const { $head } = state.selection\n const pos = $head.after()\n const tr = state.tr\n .replaceWith(pos, pos, paragraphSchema.type(ctx).createAndFill()!)\n\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1)).scrollIntoView()\n dispatch?.(tr)\n return true\n})\n\nwithMeta(breakTableCommand, {\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('InsertTable', ctx => ({ row, col }: { row?: number; col?: number } = {}) => (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)\n _tr.setSelection(sel)\n\n dispatch?.(_tr)\n\n return true\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('MoveRow', () => ({ from, to }: { from?: number; to?: number } = {}) => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(moveRow(tr, from ?? 0, to ?? 0, true))\n\n return Boolean(result)\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('MoveCol', () => ({ from, to }: { from?: number; to?: number } = {}) => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(moveCol(tr, from ?? 0, to ?? 0, true))\n\n return Boolean(result)\n})\n\nwithMeta(moveColCommand, {\n displayName: 'Command<moveColCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a row.\nexport const selectRowCommand = $command<number, 'SelectRow'>('SelectRow', () => (index = 0) => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectRow(index)(tr))\n\n return Boolean(result)\n})\n\nwithMeta(selectRowCommand, {\n displayName: 'Command<selectRowCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a column.\nexport const selectColCommand = $command<number, 'SelectCol'>('SelectCol', () => (index = 0) => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectCol(index)(tr))\n\n return Boolean(result)\n})\n\nwithMeta(selectColCommand, {\n displayName: 'Command<selectColCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a table.\nexport const selectTableCommand = $command('SelectTable', () => () => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectTable(tr))\n\n return Boolean(result)\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('DeleteSelectedCells', () => () => (state, dispatch) => {\n const { selection } = state\n if (!(selection instanceof CellSelection))\n return false\n\n const isRow = selection.isRowSelection()\n const isCol = selection.isColSelection()\n\n if (isRow && isCol)\n return deleteTable(state, dispatch)\n\n if (isCol)\n return deleteColumn(state, dispatch)\n\n else\n return deleteRow(state, dispatch)\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('AddColBefore', () => () => addColumnBefore)\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('AddColAfter', () => () => addColumnAfter)\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('AddRowBefore', ctx => () => (state, dispatch) => {\n if (!isInTable(state))\n 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\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('AddRowAfter', ctx => () => (state, dispatch) => {\n if (!isInTable(state))\n 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\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<'left' | 'center' | 'right', 'SetAlign'>('SetAlign', () => (alignment = 'left') => setCellAttr('alignment', alignment))\n\nwithMeta(setAlignCommand, {\n displayName: 'Command<setAlignCommand>',\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 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'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n\n return () => commands.call(breakTableCommand.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\nexport * from './utils'\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../../__internal__'\n\nconst id = 'footnote_definition'\nconst markdownId = 'footnoteDefinition'\n\n/// Footnote definition node schema.\nexport const footnoteDefinitionSchema = $nodeSchema('footnote_definition', () => ({\n group: 'block',\n content: 'block+',\n defining: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `dl[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n 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\nwithMeta(footnoteDefinitionSchema.ctx, {\n displayName: 'NodeSchemaCtx<footnodeDef>',\n group: 'footnote',\n})\n\nwithMeta(footnoteDefinitionSchema.node, {\n displayName: 'NodeSchema<footnodeDef>',\n group: 'footnote',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../../__internal__'\n\nconst id = 'footnote_reference'\n\n/// Footnote reference node schema.\nexport const footnoteReferenceSchema = $nodeSchema('footnote_reference', () => ({\n group: 'inline',\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw 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\nwithMeta(footnoteReferenceSchema.ctx, {\n displayName: 'NodeSchemaCtx<footnodeRef>',\n group: 'footnote',\n})\n\nwithMeta(footnoteReferenceSchema.node, {\n displayName: 'NodeSchema<footnodeRef>',\n group: 'footnote',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { listItemSchema } from '@milkdown/preset-commonmark'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $inputRule } from '@milkdown/utils'\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((prev) => {\n return (ctx) => {\n const baseSchema = prev(ctx)\n return {\n ...baseSchema,\n attrs: {\n ...baseSchema.attrs,\n checked: {\n default: null,\n },\n },\n parseDOM: [\n {\n tag: 'li[data-item-type=\"task\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset['list-type'],\n spread: dom.dataset.spread,\n checked: dom.dataset.checked ? dom.dataset.checked === 'true' : 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, { label, listType, spread, checked })\n state.next(node.content)\n state.closeNode()\n },\n },\n }\n }\n})\n\nwithMeta(extendListItemSchemaForTask, {\n displayName: 'NodeSchema<listItem>',\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(/^\\[(?<checked>\\s|x)\\]\\s$/, (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)\n 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)\n .setNodeMarkup(finPos, undefined, { ...node.attrs, checked })\n\n return tr\n })\n})\n\nwithMeta(wrapInTaskListInputRule, {\n displayName: 'InputRule<wrapInTaskListInputRule>',\n group: 'ListItem',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { strikethroughKeymap } from '../mark'\nimport { tableKeymap } from '../node'\n\n/// @internal\nexport const keymap: MilkdownPlugin[] = [\n strikethroughKeymap,\n tableKeymap,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { insertTableInputRule, wrapInTaskListInputRule } from '../node'\n\n/// @internal\nexport const inputrules: MilkdownPlugin[] = [\n insertTableInputRule,\n wrapInTaskListInputRule,\n]\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { browser } from '@milkdown/prose'\nimport type { Node } from '@milkdown/prose/model'\nimport { isInTable } from '@milkdown/prose/tables'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { paragraphSchema } from '@milkdown/preset-commonmark'\nimport { $prose } from '@milkdown/utils'\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 autoInsertZeroSpaceInTablePlugin = $prose((ctx) => {\n const pluginKey = new PluginKey('MILKDOWN_AUTO_INSERT_ZERO_SPACE')\n\n const isParagraph = (node: Node) => node.type === paragraphSchema.type(ctx)\n\n const isEmptyParagraph = (node: Node) => isParagraph(node) && node.nodeSize === 2\n\n return new Plugin({\n key: pluginKey,\n props: {\n handleDOMEvents: {\n compositionstart(view) {\n const { state, dispatch } = view\n const { tr, selection } = state\n const { $from } = selection\n if (browser.safari && isInTable(state) && selection.empty && isEmptyParagraph($from.parent))\n dispatch(tr.insertText('\\u2060', $from.start()))\n\n return false\n },\n compositionend(view) {\n const { state, dispatch } = view\n const { tr, selection } = state\n const { $from } = selection\n\n if (\n browser.safari\n && isInTable(state)\n && selection.empty\n && isParagraph($from.parent)\n && $from.parent.textContent.startsWith('\\u2060')\n )\n dispatch(tr.delete($from.start(), $from.start() + 1))\n\n return false\n },\n },\n },\n })\n})\n\nwithMeta(autoInsertZeroSpaceInTablePlugin, {\n displayName: 'Prose<autoInsertZeroSpaceInTablePlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { columnResizing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { tableEditing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\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(() => tableEditing())\n\nwithMeta(tableEditingPlugin, {\n displayName: 'Prose<tableEditingPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport remarkGFM from 'remark-gfm'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is wrapping the [remark-gfm](https://github.com/remarkjs/remark-gfm).\nexport const remarkGFMPlugin = $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","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport {\n autoInsertZeroSpaceInTablePlugin,\n columnResizingPlugin,\n remarkGFMPlugin,\n tableEditingPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n autoInsertZeroSpaceInTablePlugin,\n columnResizingPlugin,\n tableEditingPlugin,\n remarkGFMPlugin,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { strikethroughAttr, strikethroughSchema } from '../mark'\nimport { extendListItemSchemaForTask, footnoteDefinitionSchema, footnoteReferenceSchema, tableCellSchema, tableHeaderSchema, tableRowSchema, tableSchema } from '../node'\n\n/// @internal\nexport const schema: MilkdownPlugin[] = [\n extendListItemSchemaForTask,\n\n tableSchema,\n tableRowSchema,\n tableHeaderSchema,\n tableCellSchema,\n\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n\n strikethroughAttr,\n strikethroughSchema,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { toggleStrikethroughCommand } from '../mark'\nimport { addColAfterCommand, addColBeforeCommand, addRowAfterCommand, addRowBeforeCommand, breakTableCommand, deleteSelectedCellsCommand, goToNextTableCellCommand, goToPrevTableCellCommand, insertTableCommand, moveColCommand, moveRowCommand, selectColCommand, selectRowCommand, selectTableCommand, setAlignCommand } from '../node'\n\n/// @internal\nexport const commands = [\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n breakTableCommand,\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","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commands, inputrules, keymap, plugins, schema } 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 = [schema, inputrules, keymap, plugins, commands].flat()\n"],"names":["withMeta","plugin","meta","strikethroughAttr","$markAttr","strikethroughSchema","$markSchema","ctx","value","mark","node","state","markType","toggleStrikethroughCommand","$command","toggleMark","strikethroughKeymap","$useKeymap","commands","commandsCtx","createTable","rowsCount","colsCount","cells","tableCellSchema","headerCells","tableHeaderSchema","rows","_","i","tableRowSchema","tableSchema","findTable","selection","findParentNode","getCellsInCol","columnIndex","table","map","TableMap","pos","start","x","getCellsInRow","rowIndex","getAllCellsInTable","nodePos","selectTable","tr","$firstCell","last","$lastCell","cloneTr","CellSelection","addRowWithAlignment","tableStart","row","rowPos","acc","col","headerCol","selectLine","type","index","isRowSelection","lastCell","createCellSelection","firstCell","selectRow","selectCol","transpose","array","column","convertArrayOfRowsToTableNode","tableNode","arrayOfNodes","rowsPM","rowCells","colIndex","cellPos","cell","newCell","convertTableNodeToArrayOfRows","seen","rect","moveRowInArrayOfRows","indexesOrigin","indexesTarget","directionOverride","direction","rowsExtracted","positionOffset","target","moveTableColumn","moveTableRow","getSelectionRangeInColumn","startIndex","endIndex","maybeEndIndex","indexes","maybeCells","firstSelectedColumnCells","firstRowCells","$anchor","headCell","columnCells","j","$head","getSelectionRangeInRow","firstSelectedRowCells","firstColumnCells","moveCol","origin","select","indexesOriginColumn","indexesTargetColumn","newTable","_tr","moveRow","indexesOriginRow","indexesTargetRow","originalSchema","tableNodes","dom","attrs","$nodeSchema","align","children","firstLine","_a","insertTableInputRule","$inputRule","InputRule","match","end","$start","_b","TextSelection","goToPrevTableCellCommand","goToNextCell","goToNextTableCellCommand","breakTableCommand","dispatch","isInTable","paragraphSchema","Selection","insertTableCommand","from","sel","moveRowCommand","to","moveColCommand","selectRowCommand","selectColCommand","selectTableCommand","deleteSelectedCellsCommand","isRow","isCol","deleteTable","deleteColumn","deleteRow","addColBeforeCommand","addColumnBefore","addColAfterCommand","addColumnAfter","addRowBeforeCommand","selectedRect","addRowAfterCommand","setAlignCommand","alignment","setCellAttr","tableKeymap","id","markdownId","footnoteDefinitionSchema","expectDomTypeError","label","footnoteReferenceSchema","extendListItemSchemaForTask","listItemSchema","prev","baseSchema","checked","listType","spread","wrapInTaskListInputRule","depth","finPos","keymap","inputrules","autoInsertZeroSpaceInTablePlugin","$prose","pluginKey","PluginKey","isParagraph","isEmptyParagraph","Plugin","view","$from","browser","columnResizingPlugin","columnResizing","tableEditingPlugin","tableEditing","remarkGFMPlugin","$remark","remarkGFM","plugins","schema","gfm"],"mappings":";;;;;;;;;;AAGa,MAAAA,IAAW,CACtBC,GACAC,OAEA,OAAO,OAAOD,GAAQ;AAAA,EACpB,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,GAAGC;AAAA,EACL;AAAA,CACD,GAEMD,ICPIE,IAAoBC,GAAU,gBAAgB;AAE3DJ,EAASG,GAAmB;AAAA,EAC1B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGY,MAAAE,IAAsBC,GAAY,kBAAkB,CAAQC,OAAA;AAAA,EACvE,UAAU;AAAA,IACR,EAAE,KAAK,MAAM;AAAA,IACb,EAAE,OAAO,mBAAmB,UAAU,CAAAC,MAAUA,MAAU,eAAyB;AAAA,EACrF;AAAA,EACA,OAAO,CAAQC,MAAA,CAAC,OAAOF,EAAI,IAAIJ,EAAkB,GAAG,EAAEM,CAAI,CAAC;AAAA,EAC3D,eAAe;AAAA,IACb,OAAO,CAAQC,MAAAA,EAAK,SAAS;AAAA,IAC7B,QAAQ,CAACC,GAAOD,GAAME,MAAa;AACjC,MAAAD,EAAM,SAASC,CAAQ,GACjBD,EAAA,KAAKD,EAAK,QAAQ,GACxBC,EAAM,UAAUC,CAAQ;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,OAAO,CAAAH,MAAQA,EAAK,KAAK,SAAS;AAAA,IAClC,QAAQ,CAACE,GAAOF,MAAS;AACjB,MAAAE,EAAA,SAASF,GAAM,QAAQ;AAAA,IAC/B;AAAA,EACF;AACF,EAAE;AAEFT,EAASK,EAAoB,MAAM;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAEDL,EAASK,EAAoB,KAAK;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAMQ,IAA6BC,EAAS,uBAAuB,CAAAP,MAAO,MACxEQ,GAAWV,EAAoB,KAAKE,CAAG,CAAC,CAChD;AAEDP,EAASa,GAA4B;AAAA,EACnC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIY,MAAAG,IAAsBC,GAAW,uBAAuB;AAAA,EACnE,qBAAqB;AAAA,IACnB,WAAW;AAAA,IACX,SAAS,CAACV,MAAQ;AACV,YAAAW,IAAWX,EAAI,IAAIY,CAAW;AACpC,aAAO,MAAMD,EAAS,KAAKL,EAA2B,GAAG;AAAA,IAC3D;AAAA,EACF;AACF,CAAC;AAEDb,EAASgB,EAAoB,KAAK;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAEDhB,EAASgB,EAAoB,WAAW;AAAA,EACtC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACzDM,MAAMI,KAAc,CAACb,GAAUc,IAAY,GAAGC,IAAY,MAAY;AAC3E,QAAMC,IAAQ,MAAMD,CAAS,EAC1B,KAAK,CAAC,EACN,IAAI,MAAME,EAAgB,KAAKjB,CAAG,EAAE,cAAgB,CAAA,GAEjDkB,IAAc,MAAMH,CAAS,EAChC,KAAK,CAAC,EACN,IAAI,MAAMI,EAAkB,KAAKnB,CAAG,EAAE,cAAgB,CAAA,GAEnDoB,IAAO,MAAMN,CAAS,EACzB,KAAK,CAAC,EACN,IAAI,CAACO,GAAGC,MAAMC,EAAe,KAAKvB,CAAG,EAAE,OAAO,MAAMsB,MAAM,IAAIJ,IAAcF,CAAK,CAAC;AAErF,SAAOQ,EAAY,KAAKxB,CAAG,EAAE,OAAO,MAAMoB,CAAI;AAChD,GAGaK,IAAY,CAACC,MACxBC,GAAe,CAAAxB,MAAQA,EAAK,KAAK,KAAK,cAAc,OAAO,EAAEuB,CAAS,GAG3DE,IAAgB,CAACC,GAAqBH,MAAgD;AAC3F,QAAAI,IAAQL,EAAUC,CAAS;AACjC,MAAI,CAACI;AACI;AACT,QAAMC,IAAMC,EAAS,IAAIF,EAAM,IAAI;AAC/B,MAAA,EAAAD,IAAc,KAAKA,KAAeE,EAAI;AAG1C,WAAOA,EACJ,YAAY,EAAE,MAAMF,GAAa,OAAOA,IAAc,GAAG,KAAK,GAAG,QAAQE,EAAI,OAAQ,CAAA,EACrF,IAAI,CAACE,MAAQ;AACZ,YAAM9B,IAAO2B,EAAM,KAAK,OAAOG,CAAG;AAClC,UAAI,CAAC9B;AACI;AACH,YAAA+B,IAAQD,IAAMH,EAAM;AACnB,aAAA;AAAA,QACL,KAAKI;AAAA,QACL,OAAOA,IAAQ;AAAA,QACf,MAAA/B;AAAA,MAAA;AAAA,IAEH,CAAA,EACA,OAAO,CAACgC,MAAoBA,KAAK,IAAI;AAC1C,GAGaC,IAAgB,CAACC,GAAkBX,MAAgD;AACxF,QAAAI,IAAQL,EAAUC,CAAS;AACjC,MAAI,CAACI;AACI;AACT,QAAMC,IAAMC,EAAS,IAAIF,EAAM,IAAI;AAC/B,MAAA,EAAAO,IAAW,KAAKA,KAAYN,EAAI;AAGpC,WAAOA,EACJ,YAAY,EAAE,MAAM,GAAG,OAAOA,EAAI,OAAO,KAAKM,GAAU,QAAQA,IAAW,EAAG,CAAA,EAC9E,IAAI,CAACJ,MAAQ;AACZ,YAAM9B,IAAO2B,EAAM,KAAK,OAAOG,CAAG;AAClC,UAAI,CAAC9B;AACI;AACH,YAAA+B,IAAQD,IAAMH,EAAM;AACnB,aAAA;AAAA,QACL,KAAKI;AAAA,QACL,OAAOA,IAAQ;AAAA,QACf,MAAA/B;AAAA,MAAA;AAAA,IAEH,CAAA,EACA,OAAO,CAACgC,MAAoBA,KAAK,IAAI;AAC1C,GAGaG,KAAqB,CAACZ,MAAyB;AACpD,QAAAI,IAAQL,EAAUC,CAAS;AACjC,MAAI,CAACI;AACH;AAEF,QAAMC,IAAMC,EAAS,IAAIF,EAAM,IAAI;AAO5B,SANOC,EAAI,YAAY;AAAA,IAC5B,MAAM;AAAA,IACN,OAAOA,EAAI;AAAA,IACX,KAAK;AAAA,IACL,QAAQA,EAAI;AAAA,EAAA,CACb,EACY,IAAI,CAACQ,MAAY;AAC5B,UAAMpC,IAAO2B,EAAM,KAAK,OAAOS,CAAO,GAChCN,IAAMM,IAAUT,EAAM;AAC5B,WAAO,EAAE,KAAAG,GAAK,OAAOA,IAAM,GAAG,MAAA9B,EAAK;AAAA,EAAA,CACpC;AACH,GAGaqC,KAAc,CAACC,MAAoB;AACxC,QAAAzB,IAAQsB,GAAmBG,EAAG,SAAS;AACzC,MAAAzB,KAASA,EAAM,CAAC,GAAG;AACrB,UAAM0B,IAAaD,EAAG,IAAI,QAAQzB,EAAM,CAAC,EAAE,GAAG,GACxC2B,IAAO3B,EAAMA,EAAM,SAAS,CAAC;AACnC,QAAI2B,GAAM;AACR,YAAMC,IAAYH,EAAG,IAAI,QAAQE,EAAK,GAAG;AAClC,aAAAE,EAAQJ,EAAG,aAAa,IAAIK,EAAcF,GAAWF,CAAU,CAAC,CAAC;AAAA;AAAA;AAGrE,SAAAD;AACT;AAGgB,SAAAM,GAAoB/C,GAAUyC,GAAiB,EAAE,KAAAV,GAAK,YAAAiB,GAAY,OAAAlB,KAAoBmB,GAAa;AAC3G,QAAAC,IAAS,MAAMD,CAAG,EACrB,KAAK,CAAC,EACN,OAAO,CAACE,GAAK9B,GAAGC,MACR6B,IAAMrB,EAAM,MAAMR,CAAC,EAAE,UAC3B0B,CAAU,GAEThC,IAAQ,MAAMe,EAAI,KAAK,EAC1B,KAAK,CAAC,EACN,IAAI,CAACV,GAAG+B,MAAQ;AACf,UAAMC,IAAYvB,EAAM,OAAOC,EAAI,IAAIqB,CAAG,CAAW;AAC9C,WAAAnC,EAAgB,KAAKjB,CAAG,EAAE,cAAc,EAAE,WAAWqD,KAAA,gBAAAA,EAAW,MAAM,UAAA,CAAW;AAAA,EAAA,CACzF;AAEA,SAAAZ,EAAA,OAAOS,GAAQ3B,EAAe,KAAKvB,CAAG,EAAE,OAAO,MAAMgB,CAAK,CAAC,GACvDyB;AACT;AAGO,MAAMa,KAAa,CAACC,MAAwB,CAACC,MAAkB,CAACf,MAAoB;AACnF,QAAAX,IAAQL,EAAUgB,EAAG,SAAS,GAC9BgB,IAAiBF,MAAS;AAChC,MAAIzB,GAAO;AACT,UAAMC,IAAMC,EAAS,IAAIF,EAAM,IAAI;AAGnC,QAAI0B,KAAS,KAAKA,KAASC,IAAiB1B,EAAI,SAASA,EAAI,QAAQ;AACnE,YAAM2B,IAAW3B,EAAI;AAAA,QACnB0B,IAAiBD,IAAQzB,EAAI,SAAS;AAAA,QACtC0B,IAAiB1B,EAAI,QAAQ,IAAIyB;AAAA,QACjC1B,EAAM;AAAA,MAAA,GAEFc,IAAYH,EAAG,IAAI,QAAQX,EAAM,QAAQ4B,CAAQ,GAEjDC,IAAsBF,IAAiBX,EAAc,eAAeA,EAAc,cAElFc,IAAY7B,EAAI,WAAW0B,IAAiBD,IAAQ,GAAGC,IAAiB,IAAID,GAAO1B,EAAM,IAAI,GAC7FY,IAAaD,EAAG,IAAI,QAAQX,EAAM,QAAQ8B,CAAS;AACzD,aAAOf,EAAQJ,EAAG,aAAakB,EAAoBf,GAAWF,CAAU,CAAyB,CAAC;AAAA;AAAA;AAG/F,SAAAD;AACT,GAIaoB,KAAYP,GAAW,KAAK,GAI5BQ,KAAYR,GAAW,KAAK,GAEnCS,IAAY,CAAIC,MACbA,EAAM,CAAC,EAAG,IAAI,CAAC3C,GAAGC,MAChB0C,EAAM,IAAI,CAAUC,MAAAA,EAAO3C,CAAC,CAAC,CACrC,GAGG4C,KAAgC,CAACC,GAAiBC,MAAoC;AAC1F,QAAMC,IAAS,CAAA,GACTtC,IAAMC,EAAS,IAAImC,CAAS;AAClC,WAAS9B,IAAW,GAAGA,IAAWN,EAAI,QAAQM,KAAY;AAClD,UAAAY,IAAMkB,EAAU,MAAM9B,CAAQ,GAC9BiC,IAAW,CAAA;AAEjB,aAASC,IAAW,GAAGA,IAAWxC,EAAI,OAAOwC,KAAY;AACvD,UAAI,CAACH,EAAa/B,CAAQ,EAAGkC,CAAQ;AACnC;AAEF,YAAMC,IAAUzC,EAAI,IAAIM,IAAWN,EAAI,QAAQwC,CAAQ,GAEjDE,IAAOL,EAAa/B,CAAQ,EAAGkC,CAAQ,GAEvCG,IADUP,EAAU,OAAOK,CAAO,EAChB,KAAK;AAAA,QAC3B,OAAO,OAAO,IAAIC,EAAK,KAAK;AAAA,QAC5BA,EAAK;AAAA,QACLA,EAAK;AAAA,MAAA;AAEP,MAAAH,EAAS,KAAKI,CAAO;AAAA;AAGhB,IAAAL,EAAA,KAAKpB,EAAI,KAAK,cAAcA,EAAI,OAAOqB,GAAUrB,EAAI,KAAK,CAAC;AAAA;AAS7D,SANUkB,EAAU,KAAK;AAAA,IAC9BA,EAAU;AAAA,IACVE;AAAA,IACAF,EAAU;AAAA,EAAA;AAId,GAEMQ,KAAgC,CAACR,MAAoB;AACnD,QAAApC,IAAMC,EAAS,IAAImC,CAAS,GAC5B/C,IAA0B,CAAA;AAChC,WAASiB,IAAW,GAAGA,IAAWN,EAAI,QAAQM,KAAY;AACxD,UAAMiC,IAA4B,CAAA,GAC5BM,IAAgC,CAAA;AAEtC,aAASL,IAAW,GAAGA,IAAWxC,EAAI,OAAOwC,KAAY;AACvD,YAAMC,IAAUzC,EAAI,IAAIM,IAAWN,EAAI,QAAQwC,CAAQ,GACjDE,IAAON,EAAU,OAAOK,CAAO,GAC/BK,IAAO9C,EAAI,SAASyC,CAAO;AACjC,UAAII,EAAKJ,CAAO,KAAKK,EAAK,QAAQxC,GAAU;AAC1C,QAAAiC,EAAS,KAAK,IAAI;AAClB;AAAA;AAEF,MAAAM,EAAKJ,CAAO,IAAI,IAEhBF,EAAS,KAAKG,CAAI;AAAA;AAGpB,IAAArD,EAAK,KAAKkD,CAAQ;AAAA;AAGb,SAAAlD;AACT,GAEM0D,KAAuB,CAC3B1D,GACA2D,GACAC,GACAC,MACG;AACH,QAAMC,IAAYH,EAAc,CAAC,IAAKC,EAAc,CAAC,IAAK,KAAK,GAEzDG,IAAgB/D,EAAK,OAAO2D,EAAc,CAAC,GAAIA,EAAc,MAAM,GACnEK,IAAiBD,EAAc,SAAS,MAAM,IAAI,IAAI;AACxD,MAAAE;AAEA,SAAAJ,MAAsB,MAAMC,MAAc,IACnCG,IAAAL,EAAc,CAAC,IAAK,IAEtBC,MAAsB,KAAKC,MAAc,KAChDG,IAASL,EAAcA,EAAc,SAAS,CAAC,IAAKI,IAAiB,IAIjEC,IAAAH,MAAc,KACZF,EAAc,CAAC,IACfA,EAAcA,EAAc,SAAS,CAAC,IAAKI,GAGnDhE,EAAK,OAAOiE,GAAQ,GAAG,GAAGF,CAAa,GAChC/D;AACT,GAEMkE,KAAkB,CACtBxD,GACAiD,GACAC,GACAE,MACG;AACH,MAAI9D,IAAO2C,EAAUY,GAA8B7C,EAAM,IAAI,CAAC;AAE9D,SAAAV,IAAO0D,GAAqB1D,GAAM2D,GAAeC,GAAeE,CAAS,GACzE9D,IAAO2C,EAAU3C,CAAI,GAEd8C,GAA8BpC,EAAM,MAAMV,CAAI;AACvD,GAEMmE,KAAe,CACnBzD,GACAiD,GACAC,GACAE,MACG;AACC,MAAA9D,IAAOuD,GAA8B7C,EAAM,IAAI;AAEnD,SAAAV,IAAO0D,GAAqB1D,GAAM2D,GAAeC,GAAeE,CAAS,GAElEhB,GAA8BpC,EAAM,MAAMV,CAAI;AACvD,GAEMoE,IAA4B,CAAC3D,GAAqBY,MAAoB;AAC1E,MAAIgD,IAAa5D,GACb6D,IAAW7D;AAGf,WAASP,IAAIO,GAAaP,KAAK,GAAGA,KAAK;AACrC,UAAMN,IAAQY,EAAcN,GAAGmB,EAAG,SAAS;AAC3C,IAAIzB,KACIA,EAAA,QAAQ,CAACyD,MAAS;AACtB,YAAMkB,IAAgBlB,EAAK,KAAK,MAAM,UAAUnD,IAAI;AACpD,MAAIqE,KAAiBF,MACNA,IAAAnE,IAEXqE,IAAgBD,MACPA,IAAAC;AAAA,IAAA,CACd;AAAA;AAIL,WAASrE,IAAIO,GAAaP,KAAKoE,GAAUpE,KAAK;AAC5C,UAAMN,IAAQY,EAAcN,GAAGmB,EAAG,SAAS;AAC3C,IAAIzB,KACIA,EAAA,QAAQ,CAACyD,MAAS;AACtB,YAAMkB,IAAgBlB,EAAK,KAAK,MAAM,UAAUnD,IAAI;AACpD,MAAImD,EAAK,KAAK,MAAM,UAAU,KAAKkB,IAAgBD,MACtCA,IAAAC;AAAA,IAAA,CACd;AAAA;AAKL,QAAMC,IAAU,CAAA;AAChB,WAAStE,IAAImE,GAAYnE,KAAKoE,GAAUpE,KAAK;AAC3C,UAAMuE,IAAajE,EAAcN,GAAGmB,EAAG,SAAS;AAChD,IAAIoD,KAAcA,EAAW,UAC3BD,EAAQ,KAAKtE,CAAC;AAAA;AAElB,EAAAmE,IAAaG,EAAQ,CAAC,GACXF,IAAAE,EAAQA,EAAQ,SAAS,CAAC;AAErC,QAAME,IAA2BlE,EAAc6D,GAAYhD,EAAG,SAAS,GACjEsD,IAAgB3D,EAAc,GAAGK,EAAG,SAAS,GAC7CuD,IAAUvD,EAAG,IAAI;AAAA,IACrBqD,EAAyBA,EAAyB,SAAS,CAAC,EAAG;AAAA,EAAA;AAG7D,MAAAG;AACJ,WAAS3E,IAAIoE,GAAUpE,KAAKmE,GAAYnE,KAAK;AAC3C,UAAM4E,IAActE,EAAcN,GAAGmB,EAAG,SAAS;AAC7C,QAAAyD,KAAeA,EAAY,QAAQ;AACrC,eAASC,IAAIJ,EAAc,SAAS,GAAGI,KAAK,GAAGA;AAC7C,YAAIJ,EAAcI,CAAC,EAAG,QAAQD,EAAY,CAAC,EAAG,KAAK;AACjD,UAAAD,IAAWC,EAAY,CAAC;AACxB;AAAA;AAGA,UAAAD;AACF;AAAA;AAAA;AAIN,QAAMG,IAAQ3D,EAAG,IAAI,QAAQwD,EAAU,GAAG;AACnC,SAAA,EAAE,SAAAD,GAAS,OAAAI,GAAO,SAAAR;AAC3B,GAEMS,IAAyB,CAAChE,GAAkBI,MAAoB;AACpE,MAAIgD,IAAapD,GACbqD,IAAWrD;AAEf,WAASf,IAAIe,GAAUf,KAAK,GAAGA;AAEtB,IADOc,EAAcd,GAAGmB,EAAG,SAAS,EACpC,QAAQ,CAACgC,MAAS;AACvB,YAAMkB,IAAgBlB,EAAK,KAAK,MAAM,UAAUnD,IAAI;AACpD,MAAIqE,KAAiBF,MACNA,IAAAnE,IAEXqE,IAAgBD,MACPA,IAAAC;AAAA,IAAA,CACd;AAGH,WAASrE,IAAIe,GAAUf,KAAKoE,GAAUpE;AAE7B,IADOc,EAAcd,GAAGmB,EAAG,SAAS,EACpC,QAAQ,CAACgC,MAAS;AACvB,YAAMkB,IAAgBlB,EAAK,KAAK,MAAM,UAAUnD,IAAI;AACpD,MAAImD,EAAK,KAAK,MAAM,UAAU,KAAKkB,IAAgBD,MACtCA,IAAAC;AAAA,IAAA,CACd;AAIH,QAAMC,IAAU,CAAA;AAChB,WAAStE,IAAImE,GAAYnE,KAAKoE,GAAUpE,KAAK;AAC3C,UAAMuE,IAAazD,EAAcd,GAAGmB,EAAG,SAAS;AAChD,IAAIoD,KAAcA,EAAW,UAC3BD,EAAQ,KAAKtE,CAAC;AAAA;AAElB,EAAAmE,IAAaG,EAAQ,CAAC,GACXF,IAAAE,EAAQA,EAAQ,SAAS,CAAC;AAErC,QAAMU,IAAwBlE,EAAcqD,GAAYhD,EAAG,SAAS,GAC9D8D,IAAmB3E,EAAc,GAAGa,EAAG,SAAS,GAChDuD,IAAUvD,EAAG,IAAI,QAAQ6D,EAAsBA,EAAsB,SAAS,CAAC,EAAG,GAAG;AAEvF,MAAAL;AACJ,WAAS3E,IAAIoE,GAAUpE,KAAKmE,GAAYnE,KAAK;AAC3C,UAAMgD,IAAWlC,EAAcd,GAAGmB,EAAG,SAAS;AAC1C,QAAA6B,KAAYA,EAAS,QAAQ;AAC/B,eAAS6B,IAAII,EAAiB,SAAS,GAAGJ,KAAK,GAAGA;AAChD,YAAII,EAAiBJ,CAAC,EAAG,QAAQ7B,EAAS,CAAC,EAAG,KAAK;AACjD,UAAA2B,IAAW3B,EAAS,CAAC;AACrB;AAAA;AAGA,UAAA2B;AACF;AAAA;AAAA;AAIN,QAAMG,IAAQ3D,EAAG,IAAI,QAAQwD,EAAU,GAAG;AACnC,SAAA,EAAE,SAAAD,GAAS,OAAAI,GAAO,SAAAR;AAC3B;AAKO,SAASY,GAAQ/D,GAAiBgE,GAAgBpB,GAAgBqB,IAAS,IAAM;AAChF,QAAA5E,IAAQL,EAAUgB,EAAG,SAAS;AACpC,MAAI,CAACX;AACI,WAAAW;AAET,QAAM,EAAE,SAASkE,EAAA,IAAwBnB,EAA0BiB,GAAQhE,CAAE,GACvE,EAAE,SAASmE,EAAA,IAAwBpB,EAA0BH,GAAQ5C,CAAE;AAEzE,MAAAkE,EAAoB,SAAStB,CAAM;AAC9B,WAAA5C;AAET,QAAMoE,IAAWvB;AAAA,IACfxD;AAAA,IACA6E;AAAA,IACAC;AAAA,IACA;AAAA,EAAA,GAGIE,IAAMjE,EAAQJ,CAAE,EAAE;AAAA,IACtBX,EAAM;AAAA,IACNA,EAAM,MAAMA,EAAM,KAAK;AAAA,IACvB+E;AAAA,EAAA;AAGF,MAAI,CAACH;AACI,WAAAI;AAEH,QAAA/E,IAAMC,EAAS,IAAI6E,CAAQ,GAC3B3E,IAAQJ,EAAM,OACd0B,IAAQ6B,GACR3B,IAAW3B,EAAI,WAAWA,EAAI,SAAS,GAAGyB,GAAOqD,CAAQ,GACzDjE,IAAYkE,EAAI,IAAI,QAAQ5E,IAAQwB,CAAQ,GAE5CC,IAAsBb,EAAc,cAEpCc,IAAY7B,EAAI,WAAW,GAAGyB,GAAOqD,CAAQ,GAC7CnE,IAAaoE,EAAI,IAAI,QAAQ5E,IAAQ0B,CAAS;AAEpD,SAAOkD,EAAI,aAAanD,EAAoBf,GAAWF,CAAU,CAAC;AACpE;AAKO,SAASqE,GAAQtE,GAAiBgE,GAAgBpB,GAAgBqB,IAAS,IAAM;AAChF,QAAA5E,IAAQL,EAAUgB,EAAG,SAAS;AACpC,MAAI,CAACX;AACI,WAAAW;AAET,QAAM,EAAE,SAASuE,EAAA,IAAqBX,EAAuBI,GAAQhE,CAAE,GACjE,EAAE,SAASwE,EAAA,IAAqBZ,EAAuBhB,GAAQ5C,CAAE;AAEnE,MAAAuE,EAAiB,SAAS3B,CAAM;AAC3B,WAAA5C;AAET,QAAMoE,IAAWtB;AAAA,IACfzD;AAAA,IACAkF;AAAA,IACAC;AAAA,IACA;AAAA,EAAA,GAGIH,IAAMjE,EAAQJ,CAAE,EAAE;AAAA,IACtBX,EAAM;AAAA,IACNA,EAAM,MAAMA,EAAM,KAAK;AAAA,IACvB+E;AAAA,EAAA;AAGF,MAAI,CAACH;AACI,WAAAI;AAEH,QAAA/E,IAAMC,EAAS,IAAI6E,CAAQ,GAC3B3E,IAAQJ,EAAM,OACd0B,IAAQ6B,GACR3B,IAAW3B,EAAI,WAAWyB,GAAOzB,EAAI,QAAQ,GAAG8E,CAAQ,GACxDjE,IAAYkE,EAAI,IAAI,QAAQ5E,IAAQwB,CAAQ,GAE5CC,IAAsBb,EAAc,cAEpCc,IAAY7B,EAAI,WAAWyB,GAAO,GAAGqD,CAAQ,GAC7CnE,IAAaoE,EAAI,IAAI,QAAQ5E,IAAQ0B,CAAS;AAEpD,SAAOkD,EAAI,aAAanD,EAAoBf,GAAWF,CAAU,CAAC;AACpE;ACjfA,MAAMwE,IAAiBC,GAAW;AAAA,EAChC,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB;AAAA,IACd,WAAW;AAAA,MACT,SAAS;AAAA,MACT,YAAY,CAAAC,MAAQA,EAAoB,MAAM,aAAa;AAAA,MAC3D,YAAY,CAACnH,GAAOoH,MAAU;AACtB,QAAAA,EAAA,QAAQ,eAAepH,KAAS;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AACF,CAAC,GAGYuB,IAAc8F,EAAY,SAAS,OAAO;AAAA,EACrD,GAAGJ,EAAe;AAAA,EAClB,eAAe;AAAA,IACb,OAAO,CAAQ/G,MAAAA,EAAK,SAAS;AAAA,IAC7B,QAAQ,CAACC,GAAOD,GAAMoD,MAAS;AAC7B,YAAMgE,IAAQpH,EAAK,OACbqH,IAAYrH,EAAK,SAA4B,IAAI,CAACgC,GAAGb,OAAO;AAAA,QAChE,GAAGa;AAAA,QACH,OAAAoF;AAAA,QACA,UAAUjG,MAAM;AAAA,MAChB,EAAA;AACF,MAAAlB,EAAM,SAASmD,CAAI,GACnBnD,EAAM,KAAKoH,CAAQ,GACnBpH,EAAM,UAAU;AAAA,IAClB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,OAAO,CAAAD,MAAQA,EAAK,KAAK,SAAS;AAAA,IAClC,QAAQ,CAACC,GAAOD,MAAS;;AACjB,YAAAsH,KAAYC,IAAAvH,EAAK,QAAQ,eAAb,gBAAAuH,EAAyB;AAC3C,UAAI,CAACD;AACH;AAEF,YAAMF,IAA2B,CAAA;AACvB,MAAAE,EAAA,QAAQ,CAAChD,MAAS;AACpB,QAAA8C,EAAA,KAAK9C,EAAK,MAAM,SAAS;AAAA,MAAA,CAChC,GACDrE,EAAM,SAAS,SAAS,QAAW,EAAE,OAAAmH,GAAO,GACtCnH,EAAA,KAAKD,EAAK,OAAO,GACvBC,EAAM,UAAU;AAAA,IAClB;AAAA,EACF;AACF,EAAE;AAEFX,EAAS+B,EAAY,MAAM;AAAA,EACzB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED/B,EAAS+B,EAAY,KAAK;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGY,MAAAD,IAAiB+F,EAAY,aAAa,OAAO;AAAA,EAC5D,GAAGJ,EAAe;AAAA,EAClB,eAAe;AAAA,IACb,OAAO,CAAQ/G,MAAAA,EAAK,SAAS;AAAA,IAC7B,QAAQ,CAACC,GAAOD,GAAMoD,MAAS;AAC7B,YAAMgE,IAAQpH,EAAK,OACbqH,IAAYrH,EAAK,SAA4B,IAAI,CAACgC,GAAGb,OAAO;AAAA,QAChE,GAAGa;AAAA,QACH,OAAOoF,EAAMjG,CAAC;AAAA,QACd,UAAUnB,EAAK;AAAA,MACf,EAAA;AACF,MAAAC,EAAM,SAASmD,CAAI,GACnBnD,EAAM,KAAKoH,CAAQ,GACnBpH,EAAM,UAAU;AAAA,IAClB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,OAAO,CAAAD,MAAQA,EAAK,KAAK,SAAS;AAAA,IAClC,QAAQ,CAACC,GAAOD,MAAS;AACvB,MAAAC,EAAM,SAAS,UAAU,GACnBA,EAAA,KAAKD,EAAK,OAAO,GACvBC,EAAM,UAAU;AAAA,IAClB;AAAA,EACF;AACF,EAAE;AAEFX,EAAS8B,EAAe,MAAM;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED9B,EAAS8B,EAAe,KAAK;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGY,MAAAN,IAAkBqG,EAAY,cAAc,OAAO;AAAA,EAC9D,GAAGJ,EAAe;AAAA,EAClB,eAAe;AAAA,IACb,OAAO,CAAQ/G,MAAAA,EAAK,SAAS,eAAe,CAACA,EAAK;AAAA,IAClD,QAAQ,CAACC,GAAOD,GAAMoD,MAAS;AAC7B,YAAMgE,IAAQpH,EAAK;AACnB,MAAAC,EACG,SAASmD,GAAM,EAAE,WAAWgE,GAAO,EACnC,SAASnH,EAAM,OAAO,MAAM,SAAqB,EACjD,KAAKD,EAAK,QAAQ,EAClB,UAAA,EACA;IACL;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,OAAO,CAAAA,MAAQA,EAAK,KAAK,SAAS;AAAA,IAClC,QAAQ,CAACC,GAAOD,MAAS;AACvB,MAAAC,EAAM,SAAS,WAAW,EAAE,KAAKD,EAAK,OAAO,EAAE;IACjD;AAAA,EACF;AACF,EAAE;AAEFV,EAASwB,EAAgB,MAAM;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAEDxB,EAASwB,EAAgB,KAAK;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGY,MAAAE,IAAoBmG,EAAY,gBAAgB,OAAO;AAAA,EAClE,GAAGJ,EAAe;AAAA,EAClB,eAAe;AAAA,IACb,OAAO,CAAQ/G,MAAAA,EAAK,SAAS,eAAe,CAAC,CAACA,EAAK;AAAA,IACnD,QAAQ,CAACC,GAAOD,GAAMoD,MAAS;AAC7B,YAAMgE,IAAQpH,EAAK;AACnB,MAAAC,EAAM,SAASmD,GAAM,EAAE,WAAWgE,EAAO,CAAA,GACzCnH,EAAM,SAASA,EAAM,OAAO,MAAM,SAAqB,GACjDA,EAAA,KAAKD,EAAK,QAAQ,GACxBC,EAAM,UAAU,GAChBA,EAAM,UAAU;AAAA,IAClB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,OAAO,CAAAD,MAAQA,EAAK,KAAK,SAAS;AAAA,IAClC,QAAQ,CAACC,GAAOD,MAAS;AACvB,MAAAC,EAAM,SAAS,WAAW,GACpBA,EAAA,KAAKD,EAAK,OAAO,GACvBC,EAAM,UAAU;AAAA,IAClB;AAAA,EACF;AACF,EAAE;AAEFX,EAAS0B,EAAkB,MAAM;AAAA,EAC/B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED1B,EAAS0B,EAAkB,KAAK;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIY,MAAAwG,KAAuBC,GAAW,CAAA5H,MAAO,IAAI6H;AAAA,EACxD;AAAA,EAAsC,CAACzH,GAAO0H,GAAO5F,GAAO6F,MAAQ;;AAClE,UAAMC,IAAS5H,EAAM,IAAI,QAAQ8B,CAAK;AACtC,QAAI,CAAC8F,EAAO,KAAK,EAAE,EAAE,eAAeA,EAAO,MAAM,EAAE,GAAGA,EAAO,WAAW,EAAE,GAAGxG,EAAY,KAAKxB,CAAG,CAAC;AACzF,aAAA;AAET,UAAMmE,IAAYtD;AAAA,MAChBb;AAAA,MACA,QAAO0H,IAAAI,EAAM,WAAN,gBAAAJ,EAAc,GAAG;AAAA,MACxB,QAAOO,IAAAH,EAAM,WAAN,gBAAAG,EAAc,GAAG;AAAA,IAAA,GAEpBxF,IAAKrC,EAAM,GAAG,iBAAiB8B,GAAO6F,GAAK5D,CAAS;AACnD,WAAA1B,EAAG,aAAayF,GAAc,OAAOzF,EAAG,KAAKP,IAAQ,CAAC,CAAC,EAAE,eAAe;AAAA,EACjF;AACF,CAAC;AAEDzC,EAASkI,IAAsB;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAMQ,IAA2B5H,EAAS,qBAAqB,MAAM,MAAM6H,GAAa,EAAE,CAAC;AAElG3I,EAAS0I,GAA0B;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAME,IAA2B9H,EAAS,qBAAqB,MAAM,MAAM6H,GAAa,CAAC,CAAC;AAEjG3I,EAAS4I,GAA0B;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAKM,MAAMC,IAAoB/H,EAAS,cAAc,OAAO,MAAM,CAACH,GAAOmI,MAAa;AACpF,MAAA,CAACC,EAAUpI,CAAK;AACX,WAAA;AAEH,QAAA,EAAE,OAAAgG,EAAM,IAAIhG,EAAM,WAClB6B,IAAMmE,EAAM,SACZ3D,IAAKrC,EAAM,GACd,YAAY6B,GAAKA,GAAKwG,EAAgB,KAAKzI,CAAG,EAAE,cAAgB,CAAA;AAEhE,SAAAyC,EAAA,aAAaiG,GAAU,KAAKjG,EAAG,IAAI,QAAQR,CAAG,GAAG,CAAC,CAAC,EAAE,eAAe,GACvEsG,KAAA,QAAAA,EAAW9F,IACJ;AACT,CAAC;AAEDhD,EAAS6I,GAAmB;AAAA,EAC1B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAKM,MAAMK,KAAqBpI,EAAS,eAAe,CAAAP,MAAO,CAAC,EAAE,KAAAiD,GAAK,KAAAG,MAAwC,CAAA,MAAO,CAAChD,GAAOmI,MAAa;AACrI,QAAA,EAAE,WAAA7G,GAAW,IAAAe,EAAO,IAAArC,GACpB,EAAE,MAAAwI,EAAS,IAAAlH,GACXI,IAAQjB,GAAYb,GAAKiD,GAAKG,CAAG,GACjC0D,IAAMrE,EAAG,qBAAqBX,CAAK,GACnC+G,IAAMH,GAAU,SAAS5B,EAAI,IAAI,QAAQ8B,CAAI,GAAG,GAAG,EAAI;AACzD,SAAAC,KACF/B,EAAI,aAAa+B,CAAG,GAEtBN,KAAA,QAAAA,EAAWzB,IAEJ;AACT,CAAC;AAEDrH,EAASkJ,IAAoB;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAMG,KAAiBvI,EAAS,WAAW,MAAM,CAAC,EAAE,MAAAqI,GAAM,IAAAG,EAAA,IAAuC,CAAO,MAAA,CAAC3I,GAAOmI,MAAa;AAC5H,QAAA,EAAE,IAAA9F,EAAO,IAAArC;AAGf,SAAO,GAFQmI,KAAA,gBAAAA,EAAWxB,GAAQtE,GAAImG,KAAQ,GAAGG,KAAM,GAAG,EAAI;AAGhE,CAAC;AAEDtJ,EAASqJ,IAAgB;AAAA,EACvB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAME,KAAiBzI,EAAS,WAAW,MAAM,CAAC,EAAE,MAAAqI,GAAM,IAAAG,EAAA,IAAuC,CAAO,MAAA,CAAC3I,GAAOmI,MAAa;AAC5H,QAAA,EAAE,IAAA9F,EAAO,IAAArC;AAGf,SAAO,GAFQmI,KAAA,gBAAAA,EAAW/B,GAAQ/D,GAAImG,KAAQ,GAAGG,KAAM,GAAG,EAAI;AAGhE,CAAC;AAEDtJ,EAASuJ,IAAgB;AAAA,EACvB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGY,MAAAC,KAAmB1I,EAA8B,aAAa,MAAM,CAACiD,IAAQ,MAAM,CAACpD,GAAOmI,MAAa;AAC7G,QAAA,EAAE,IAAA9F,EAAO,IAAArC;AAGf,SAAO,GAFQmI,KAAA,gBAAAA,EAAW1E,GAAUL,CAAK,EAAEf,CAAE;AAG/C,CAAC;AAEDhD,EAASwJ,IAAkB;AAAA,EACzB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGY,MAAAC,KAAmB3I,EAA8B,aAAa,MAAM,CAACiD,IAAQ,MAAM,CAACpD,GAAOmI,MAAa;AAC7G,QAAA,EAAE,IAAA9F,EAAO,IAAArC;AAGf,SAAO,GAFQmI,KAAA,gBAAAA,EAAWzE,GAAUN,CAAK,EAAEf,CAAE;AAG/C,CAAC;AAEDhD,EAASyJ,IAAkB;AAAA,EACzB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAMC,KAAqB5I,EAAS,eAAe,MAAM,MAAM,CAACH,GAAOmI,MAAa;AACnF,QAAA,EAAE,IAAA9F,EAAO,IAAArC;AAGf,SAAO,GAFQmI,KAAA,gBAAAA,EAAW/F,GAAYC,CAAE;AAG1C,CAAC;AAEDhD,EAAS0J,IAAoB;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAKM,MAAMC,KAA6B7I,EAAS,uBAAuB,MAAM,MAAM,CAACH,GAAOmI,MAAa;AACnG,QAAA,EAAE,WAAA7G,EAAc,IAAAtB;AACtB,MAAI,EAAEsB,aAAqBoB;AAClB,WAAA;AAEH,QAAAuG,IAAQ3H,EAAU,kBAClB4H,IAAQ5H,EAAU;AAExB,SAAI2H,KAASC,IACJC,GAAYnJ,GAAOmI,CAAQ,IAEhCe,IACKE,GAAapJ,GAAOmI,CAAQ,IAG5BkB,GAAUrJ,GAAOmI,CAAQ;AACpC,CAAC;AAED9I,EAAS2J,IAA4B;AAAA,EACnC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAMM,KAAsBnJ,EAAS,gBAAgB,MAAM,MAAMoJ,EAAe;AAEvFlK,EAASiK,IAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAME,KAAqBrJ,EAAS,eAAe,MAAM,MAAMsJ,EAAc;AAEpFpK,EAASmK,IAAoB;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAME,KAAsBvJ,EAAS,gBAAgB,OAAO,MAAM,CAACH,GAAOmI,MAAa;AACxF,MAAA,CAACC,EAAUpI,CAAK;AACX,WAAA;AACT,MAAImI,GAAU;AACN,UAAA1D,IAAOkF,GAAa3J,CAAK;AAC/B,IAAAmI,EAASxF,GAAoB/C,GAAKI,EAAM,IAAIyE,GAAMA,EAAK,GAAG,CAAC;AAAA;AAEtD,SAAA;AACT,CAAC;AAEDpF,EAASqK,IAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAME,KAAqBzJ,EAAS,eAAe,OAAO,MAAM,CAACH,GAAOmI,MAAa;AACtF,MAAA,CAACC,EAAUpI,CAAK;AACX,WAAA;AACT,MAAImI,GAAU;AACN,UAAA1D,IAAOkF,GAAa3J,CAAK;AAC/B,IAAAmI,EAASxF,GAAoB/C,GAAKI,EAAM,IAAIyE,GAAMA,EAAK,MAAM,CAAC;AAAA;AAEzD,SAAA;AACT,CAAC;AAEDpF,EAASuK,IAAoB;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAKY,MAAAC,KAAkB1J,EAAkD,YAAY,MAAM,CAAC2J,IAAY,WAAWC,GAAY,aAAaD,CAAS,CAAC;AAE9JzK,EAASwK,IAAiB;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAMY,MAAAG,IAAc1J,GAAW,eAAe;AAAA,EACnD,UAAU;AAAA,IACR,WAAW,CAAC,SAAS,KAAK;AAAA,IAC1B,SAAS,CAACV,MAAQ;AACV,YAAAW,IAAWX,EAAI,IAAIY,CAAW;AAEpC,aAAO,MAAMD,EAAS,KAAK0H,EAAyB,GAAG;AAAA,IACzD;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,WAAW,CAAC,SAAS,WAAW;AAAA,IAChC,SAAS,CAACrI,MAAQ;AACV,YAAAW,IAAWX,EAAI,IAAIY,CAAW;AAEpC,aAAO,MAAMD,EAAS,KAAKwH,EAAyB,GAAG;AAAA,IACzD;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,WAAW,CAAC,WAAW;AAAA,IACvB,SAAS,CAACnI,MAAQ;AACV,YAAAW,IAAWX,EAAI,IAAIY,CAAW;AAEpC,aAAO,MAAMD,EAAS,KAAK2H,EAAkB,GAAG;AAAA,IAClD;AAAA,EACF;AACF,CAAC;AAED7I,EAAS2K,EAAY,KAAK;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED3K,EAAS2K,EAAY,WAAW;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC1bD,MAAMC,IAAK,uBACLC,IAAa,sBAGNC,IAA2BjD,EAAY,uBAAuB,OAAO;AAAA,EAChF,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,MACE,KAAK,iBAAiB+C;AAAAA,MACtB,UAAU,CAACjD,MAAQ;AACjB,YAAI,EAAEA,aAAe;AACnB,gBAAMoD,EAAmBpD,CAAG;AAEvB,eAAA;AAAA,UACL,OAAOA,EAAI,QAAQ;AAAA,QAAA;AAAA,MAEvB;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,EACF;AAAA,EACA,OAAO,CAACjH,MAAS;AACT,UAAAsK,IAAQtK,EAAK,MAAM;AAElB,WAAA;AAAA,MACL;AAAA,MACA;AAAA;AAAA,QAEE,cAAcsK;AAAA,QACd,aAAaJ;AAAAA,MACf;AAAA,MACA,CAAC,MAAMI,CAAK;AAAA,MACZ,CAAC,MAAM,CAAC;AAAA,IAAA;AAAA,EAEZ;AAAA,EACA,eAAe;AAAA,IACb,OAAO,CAAC,EAAE,MAAAlH,QAAWA,MAAS+G;AAAA,IAC9B,QAAQ,CAAClK,GAAOD,GAAMoD,MAAS;AAC7B,MAAAnD,EACG,SAASmD,GAAM;AAAA,QACd,OAAOpD,EAAK;AAAA,MACb,CAAA,EACA,KAAKA,EAAK,QAAQ,EAClB,UAAU;AAAA,IACf;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,OAAO,CAAAA,MAAQA,EAAK,KAAK,SAASkK;AAAAA,IAClC,QAAQ,CAACjK,GAAOD,MAAS;AAEpB,MAAAC,EAAA,SAASkK,GAAY,QAAW;AAAA,QAC/B,OAAOnK,EAAK,MAAM;AAAA,QAClB,YAAYA,EAAK,MAAM;AAAA,MACxB,CAAA,EACA,KAAKA,EAAK,OAAO,EACjB,UAAU;AAAA,IACf;AAAA,EACF;AACF,EAAE;AAEFV,EAAS8K,EAAyB,KAAK;AAAA,EACrC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED9K,EAAS8K,EAAyB,MAAM;AAAA,EACtC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC1ED,MAAMF,IAAK,sBAGEK,IAA0BpD,EAAY,sBAAsB,OAAO;AAAA,EAC9E,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,MACE,KAAK,kBAAkB+C;AAAA,MACvB,UAAU,CAACjD,MAAQ;AACjB,YAAI,EAAEA,aAAe;AACnB,gBAAMoD,EAAmBpD,CAAG;AAEvB,eAAA;AAAA,UACL,OAAOA,EAAI,QAAQ;AAAA,QAAA;AAAA,MAEvB;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,CAACjH,MAAS;AACT,UAAAsK,IAAQtK,EAAK,MAAM;AAClB,WAAA;AAAA,MACL;AAAA,MACA;AAAA;AAAA,QAEE,cAAcsK;AAAA,QACd,aAAaJ;AAAA,MACf;AAAA,MACAI;AAAA,IAAA;AAAA,EAEJ;AAAA,EACA,eAAe;AAAA,IACb,OAAO,CAAC,EAAE,MAAAlH,QAAWA,MAAS;AAAA,IAC9B,QAAQ,CAACnD,GAAOD,GAAMoD,MAAS;AAC7B,MAAAnD,EAAM,QAAQmD,GAAM;AAAA,QAClB,OAAOpD,EAAK;AAAA,MAAA,CACb;AAAA,IACH;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,OAAO,CAAAA,MAAQA,EAAK,KAAK,SAASkK;AAAA,IAClC,QAAQ,CAACjK,GAAOD,MAAS;AACjB,MAAAC,EAAA,QAAQ,qBAAqB,QAAW,QAAW;AAAA,QACvD,OAAOD,EAAK,MAAM;AAAA,QAClB,YAAYA,EAAK,MAAM;AAAA,MAAA,CACxB;AAAA,IACH;AAAA,EACF;AACF,EAAE;AAEFV,EAASiL,EAAwB,KAAK;AAAA,EACpC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAEDjL,EAASiL,EAAwB,MAAM;AAAA,EACrC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC9DM,MAAMC,KAA8BC,GAAe,aAAa,CAACC,MAC/D,CAAC7K,MAAQ;AACR,QAAA8K,IAAaD,EAAK7K,CAAG;AACpB,SAAA;AAAA,IACL,GAAG8K;AAAA,IACH,OAAO;AAAA,MACL,GAAGA,EAAW;AAAA,MACd,SAAS;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR;AAAA,QACE,KAAK;AAAA,QACL,UAAU,CAAC1D,MAAQ;AACjB,cAAI,EAAEA,aAAe;AACnB,kBAAMoD,EAAmBpD,CAAG;AAEvB,iBAAA;AAAA,YACL,OAAOA,EAAI,QAAQ;AAAA,YACnB,UAAUA,EAAI,QAAQ,WAAW;AAAA,YACjC,QAAQA,EAAI,QAAQ;AAAA,YACpB,SAASA,EAAI,QAAQ,UAAUA,EAAI,QAAQ,YAAY,SAAS;AAAA,UAAA;AAAA,QAEpE;AAAA,MACF;AAAA,MACA,IAAG0D,KAAA,gBAAAA,EAAY,aAAY,CAAC;AAAA,IAC9B;AAAA,IACA,OAAO,CAAC3K,MACF2K,EAAW,SAAS3K,EAAK,MAAM,WAAW,OACrC2K,EAAW,MAAM3K,CAAI,IAEvB;AAAA,MACL;AAAA,MACA;AAAA,QACE,kBAAkB;AAAA,QAClB,cAAcA,EAAK,MAAM;AAAA,QACzB,kBAAkBA,EAAK,MAAM;AAAA,QAC7B,eAAeA,EAAK,MAAM;AAAA,QAC1B,gBAAgBA,EAAK,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,IAAA;AAAA,IAGJ,eAAe;AAAA,MACb,OAAO,CAAC,EAAE,MAAAoD,QAAWA,MAAS;AAAA,MAC9B,QAAQ,CAACnD,GAAOD,GAAMoD,MAAS;AACzB,YAAApD,EAAK,WAAW,MAAM;AACxB,UAAA2K,EAAW,cAAc,OAAO1K,GAAOD,GAAMoD,CAAI;AACjD;AAAA;AAGF,cAAMkH,IAAQtK,EAAK,SAAS,OAAO,GAAGA,EAAK,WAAW,KAChD4K,IAAU5K,EAAK,WAAW,OAAO,EAAQA,EAAK,UAAW,MACzD6K,IAAW7K,EAAK,SAAS,OAAO,YAAY,UAC5C8K,IAAS9K,EAAK,UAAU,OAAO,GAAGA,EAAK,WAAW;AAExD,QAAAC,EAAM,SAASmD,GAAM,EAAE,OAAAkH,GAAO,UAAAO,GAAU,QAAAC,GAAQ,SAAAF,GAAS,GACnD3K,EAAA,KAAKD,EAAK,QAAQ,GACxBC,EAAM,UAAU;AAAA,MAClB;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,OAAO,CAAAD,MAAQA,EAAK,KAAK,SAAS;AAAA,MAClC,QAAQ,CAACC,GAAOD,MAAS;AACnB,YAAAA,EAAK,MAAM,WAAW,MAAM;AACnB,UAAA2K,EAAA,WAAW,OAAO1K,GAAOD,CAAI;AACxC;AAAA;AAGI,cAAAsK,IAAQtK,EAAK,MAAM,OACnB6K,IAAW7K,EAAK,MAAM,UACtB8K,IAAS9K,EAAK,MAAM,WAAW,QAC/B4K,IAAU5K,EAAK,MAAM;AAErB,QAAAC,EAAA,SAAS,YAAY,QAAW,EAAE,OAAAqK,GAAO,UAAAO,GAAU,QAAAC,GAAQ,SAAAF,GAAS,GACpE3K,EAAA,KAAKD,EAAK,OAAO,GACvBC,EAAM,UAAU;AAAA,MAClB;AAAA,IACF;AAAA,EAAA;AACF,CAEH;AAEDX,EAASkL,IAA6B;AAAA,EACpC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIY,MAAAO,KAA0BtD,GAAW,MACzC,IAAIC,GAAU,4BAA4B,CAACzH,GAAO0H,GAAO5F,GAAO6F,MAAQ;;AAC7E,QAAM9F,IAAM7B,EAAM,IAAI,QAAQ8B,CAAK;AACnC,MAAIiJ,IAAQ,GACRhL,IAAO8B,EAAI,KAAKkJ,CAAK;AACzB,SAAOhL,KAAQA,EAAK,KAAK,SAAS;AAChC,IAAAgL,KACOhL,IAAA8B,EAAI,KAAKkJ,CAAK;AAGvB,MAAI,CAAChL,KAAQA,EAAK,MAAM,WAAW;AAC1B,WAAA;AAET,QAAM4K,MAAkBrD,IAAAI,EAAM,WAAN,gBAAAJ,EAAc,aAAY,KAE5C0D,IAASnJ,EAAI,OAAOkJ,CAAK,GACzB1I,IAAKrC,EAAM;AAEjB,SAAAqC,EAAG,YAAYP,GAAO6F,CAAG,EACtB,cAAcqD,GAAQ,QAAW,EAAE,GAAGjL,EAAK,OAAO,SAAA4K,EAAS,CAAA,GAEvDtI;AAAA,CACR,CACF;AAEDhD,EAASyL,IAAyB;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACzHM,MAAMG,KAA2B;AAAA,EACtC5K;AAAA,EACA2J;AACF,EAAE,KAAK,GCJMkB,KAA+B;AAAA,EAC1C3D;AAAA,EACAuD;AACF,GCGaK,KAAmCC,EAAO,CAACxL,MAAQ;AACxD,QAAAyL,IAAY,IAAIC,GAAU,iCAAiC,GAE3DC,IAAc,CAACxL,MAAeA,EAAK,SAASsI,EAAgB,KAAKzI,CAAG,GAEpE4L,IAAmB,CAACzL,MAAewL,EAAYxL,CAAI,KAAKA,EAAK,aAAa;AAEhF,SAAO,IAAI0L,GAAO;AAAA,IAChB,KAAKJ;AAAA,IACL,OAAO;AAAA,MACL,iBAAiB;AAAA,QACf,iBAAiBK,GAAM;AACf,gBAAA,EAAE,OAAA1L,GAAO,UAAAmI,EAAa,IAAAuD,GACtB,EAAE,IAAArJ,GAAI,WAAAf,EAAc,IAAAtB,GACpB,EAAE,OAAA2L,EAAU,IAAArK;AACd,iBAAAsK,EAAQ,UAAUxD,EAAUpI,CAAK,KAAKsB,EAAU,SAASkK,EAAiBG,EAAM,MAAM,KACxFxD,EAAS9F,EAAG,WAAW,KAAUsJ,EAAM,MAAO,CAAA,CAAC,GAE1C;AAAA,QACT;AAAA,QACA,eAAeD,GAAM;AACb,gBAAA,EAAE,OAAA1L,GAAO,UAAAmI,EAAa,IAAAuD,GACtB,EAAE,IAAArJ,GAAI,WAAAf,EAAc,IAAAtB,GACpB,EAAE,OAAA2L,EAAU,IAAArK;AAElB,iBACEsK,EAAQ,UACHxD,EAAUpI,CAAK,KACfsB,EAAU,SACViK,EAAYI,EAAM,MAAM,KACxBA,EAAM,OAAO,YAAY,WAAW,GAAQ,KAExCxD,EAAA9F,EAAG,OAAOsJ,EAAM,SAASA,EAAM,MAAA,IAAU,CAAC,CAAC,GAE/C;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EAAA,CACD;AACH,CAAC;AAEDtM,EAAS8L,IAAkC;AAAA,EACzC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACjDM,MAAMU,KAAuBT,EAAO,MAAMU,GAAe,CAAE,CAAA,CAAC;AAEnEzM,EAASwM,IAAsB;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACLM,MAAME,KAAqBX,EAAO,MAAMY,IAAc;AAE7D3M,EAAS0M,IAAoB;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACLM,MAAME,IAAkBC,GAAQ,aAAa,MAAMC,EAAS;AAEnE9M,EAAS4M,EAAgB,QAAQ;AAAA,EAC/B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED5M,EAAS4M,EAAgB,SAAS;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACNM,MAAMG,KAA4B;AAAA,EACvCjB;AAAA,EACAU;AAAA,EACAE;AAAA,EACAE;AACF,EAAE,KAAK,GCTMI,KAA2B;AAAA,EACtC9B;AAAA,EAEAnJ;AAAA,EACAD;AAAA,EACAJ;AAAA,EACAF;AAAA,EAEAsJ;AAAA,EACAG;AAAA,EAEA9K;AAAA,EACAE;AACF,EAAE,KAAK,GCdMa,KAAW;AAAA,EACtB0H;AAAA,EACAF;AAAA,EACAG;AAAA,EACAK;AAAA,EACAG;AAAA,EACAE;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAU;AAAA,EACAE;AAAA,EACAN;AAAA,EACAE;AAAA,EACAK;AAAA,EAEA3J;AACF,GCbaoM,KAAM,CAACD,IAAQnB,IAAYD,IAAQmB,IAAS7L,EAAQ,EAAE,KAAK;"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/__internal__/with-meta.ts","../src/mark/strike-through.ts","../src/node/table/utils.ts","../src/node/table/index.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-zero-space-plugin.ts","../src/plugin/column-resizing-plugin.ts","../src/plugin/table-editing-plugin.ts","../src/plugin/remark-gfm-plugin.ts","../src/composed/plugins.ts","../src/composed/schema.ts","../src/composed/commands.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(plugin: T, meta: Partial<Meta> & Pick<Meta, 'displayName'>): T {\n Object.assign(plugin, {\n meta: {\n package: '@milkdown/preset-gfm',\n ...meta,\n },\n })\n\n return plugin\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\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 { style: 'text-decoration', getAttrs: value => (value === 'line-through') as false },\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('ToggleStrikeThrough', ctx => () => {\n return toggleMark(strikethroughSchema.type(ctx))\n})\n\nwithMeta(toggleStrikethroughCommand, {\n displayName: 'Command<ToggleStrikethrough>',\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","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { ContentNodeWithPos } from '@milkdown/prose'\nimport { cloneTr, findParentNode } from '@milkdown/prose'\nimport type { Node } from '@milkdown/prose/model'\nimport type { Selection, Transaction } from '@milkdown/prose/state'\nimport type { TableRect } from '@milkdown/prose/tables'\nimport { CellSelection, TableMap } from '@milkdown/prose/tables'\n\nimport type { Ctx } from '@milkdown/ctx'\nimport { tableCellSchema, tableHeaderSchema, tableRowSchema, tableSchema } from '.'\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) => tableRowSchema.type(ctx).create(null, i === 0 ? headerCells : cells))\n\n return tableSchema.type(ctx).create(null, rows)\n}\n\n/// Find the table node with position information for current selection.\nexport function findTable(selection: Selection) {\n return findParentNode(node => node.type.spec.tableRole === 'table')(selection)\n}\n\n/// Get cells in a column of a table.\nexport function getCellsInCol(columnIndex: number, selection: Selection): CellPos[] | undefined {\n const table = findTable(selection)\n if (!table)\n return undefined\n const map = TableMap.get(table.node)\n if (columnIndex < 0 || columnIndex >= map.width)\n return undefined\n\n return map\n .cellsInRect({ left: columnIndex, right: columnIndex + 1, top: 0, bottom: map.height })\n .map((pos) => {\n const node = table.node.nodeAt(pos)\n if (!node)\n 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(rowIndex: number, selection: Selection): CellPos[] | undefined {\n const table = findTable(selection)\n if (!table)\n return undefined\n const map = TableMap.get(table.node)\n if (rowIndex < 0 || rowIndex >= map.height)\n return undefined\n\n return map\n .cellsInRect({ left: 0, right: map.width, top: rowIndex, bottom: rowIndex + 1 })\n .map((pos) => {\n const node = table.node.nodeAt(pos)\n if (!node)\n 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)\n if (!table)\n return\n\n const map = TableMap.get(table.node)\n const cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height,\n })\n return cells.map((nodePos) => {\n const node = table.node.nodeAt(nodePos)\n const pos = nodePos + table.start\n return { pos, start: pos + 1, node }\n })\n}\n\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(ctx: Ctx, tr: Transaction, { map, tableStart, table }: TableRect, row: number) {\n const rowPos = Array(row)\n .fill(0)\n .reduce((acc, _, i) => {\n return acc + table.child(i).nodeSize\n }, tableStart)\n\n const cells = Array(map.width)\n .fill(0)\n .map((_, col) => {\n const headerCol = table.nodeAt(map.map[col] as number)\n return tableCellSchema.type(ctx).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) => (tr: Transaction) => {\n const table = findTable(tr.selection)\n const isRowSelection = type === 'row'\n if (table) {\n const map = TableMap.get(table.node)\n\n // Check if the index is valid\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n const lastCell = map.positionAt(\n isRowSelection ? index : map.height - 1,\n isRowSelection ? map.width - 1 : index,\n table.node,\n )\n const $lastCell = tr.doc.resolve(table.start + lastCell)\n\n const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection\n\n const firstCell = map.positionAt(isRowSelection ? index : 0, isRowSelection ? 0 : index, table.node)\n const $firstCell = tr.doc.resolve(table.start + firstCell)\n return cloneTr(tr.setSelection(createCellSelection($lastCell, $firstCell) as unknown as Selection))\n }\n }\n return tr\n }\n}\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(tableNode: Node, arrayOfNodes: (Node | null)[][]) {\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])\n 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(rows: (Node | null)[][], indexesOrigin: number[], indexesTarget: number[], directionOverride: -1 | 1 | 0) {\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 }\n else if (directionOverride === 1 && direction === -1) {\n target = indexesTarget[indexesTarget.length - 1]! - positionOffset + 1\n }\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(table: ContentNodeWithPos, indexesOrigin: number[], indexesTarget: number[], direction: -1 | 1 | 0) {\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(table: ContentNodeWithPos, indexesOrigin: number[], indexesTarget: number[], direction: -1 | 1 | 0) {\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)\n startIndex = i\n\n if (maybeEndIndex > endIndex)\n 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)\n 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)\n 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)\n startIndex = i\n\n if (maybeEndIndex > endIndex)\n 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)\n 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(firstSelectedRowCells[firstSelectedRowCells.length - 1]!.pos)\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)\n break\n }\n }\n\n const $head = tr.doc.resolve(headCell!.pos)\n return { $anchor, $head, indexes }\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(tr: Transaction, origin: number, target: number, select = true) {\n const table = findTable(tr.selection)\n if (!table)\n return tr\n\n const { indexes: indexesOriginColumn } = getSelectionRangeInColumn(origin, tr)\n const { indexes: indexesTargetColumn } = getSelectionRangeInColumn(target, tr)\n\n if (indexesOriginColumn.includes(target))\n 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)\n 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\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(tr: Transaction, origin: number, target: number, select = true) {\n const table = findTable(tr.selection)\n if (!table)\n return tr\n\n const { indexes: indexesOriginRow } = getSelectionRangeInRow(origin, tr)\n const { indexes: indexesTargetRow } = getSelectionRangeInRow(target, tr)\n\n if (indexesOriginRow.includes(target))\n return tr\n\n const newTable = moveTableRow(\n table,\n indexesOriginRow,\n indexesTargetRow,\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)\n 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","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MarkdownNode } from '@milkdown/transformer'\nimport { commandsCtx } from '@milkdown/core'\nimport { paragraphSchema } from '@milkdown/preset-commonmark'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport type { NodeType } from '@milkdown/prose/model'\nimport { Selection, TextSelection } from '@milkdown/prose/state'\nimport { CellSelection, addColumnAfter, addColumnBefore, deleteColumn, deleteRow, deleteTable, goToNextCell, isInTable, selectedRect, setCellAttr, tableNodes } from '@milkdown/prose/tables'\nimport { $command, $inputRule, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../../__internal__'\nimport { addRowWithAlignment, createTable, moveCol, moveRow, selectCol, selectRow, selectTable } from './utils'\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 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)\n 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 row node.\nexport const tableRowSchema = $nodeSchema('table_row', () => ({\n ...originalSchema.table_row,\n parseMarkdown: {\n match: node => node.type === 'tableRow',\n runner: (state, node, type) => {\n const align = node.align as (string | null)[]\n const children = (node.children as MarkdownNode[]).map((x, i) => ({\n ...x,\n align: align[i],\n isHeader: node.isHeader,\n }))\n state.openNode(type)\n state.next(children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'table_row',\n runner: (state, node) => {\n state.openNode('tableRow')\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\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 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 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\n/// A input rule for creating table.\n/// For example, `|2x2|` will create a 2x2 table.\nexport const insertTableInputRule = $inputRule(ctx => new InputRule(\n /^\\|(?<col>\\d+)[xX](?<row>\\d+)\\|\\s$/,\n (state, match, start, end) => {\n const $start = state.doc.resolve(start)\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), tableSchema.type(ctx)))\n return null\n\n const tableNode = createTable(\n ctx,\n Number(match.groups?.row),\n Number(match.groups?.col),\n )\n const tr = state.tr.replaceRangeWith(start, end, tableNode)\n return tr.setSelection(TextSelection.create(tr.doc, start + 3)).scrollIntoView()\n },\n))\n\nwithMeta(insertTableInputRule, {\n displayName: 'InputRule<insertTableInputRule>',\n group: 'Table',\n})\n\n/// A command for moving cursor to previous cell.\nexport const goToPrevTableCellCommand = $command('GoToPrevTableCell', () => () => goToNextCell(-1))\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('GoToNextTableCell', () => () => goToNextCell(1))\n\nwithMeta(goToNextTableCellCommand, {\n displayName: 'Command<goToNextTableCellCommand>',\n group: 'Table',\n})\n\n/// A command for splitting current table into two tables.\n/// If the selection is at the end of the table,\n/// it will just quit the table and insert a new paragraph node.\nexport const breakTableCommand = $command('BreakTable', ctx => () => (state, dispatch) => {\n if (!isInTable(state))\n return false\n\n const { $head } = state.selection\n const pos = $head.after()\n const tr = state.tr\n .replaceWith(pos, pos, paragraphSchema.type(ctx).createAndFill()!)\n\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1)).scrollIntoView()\n dispatch?.(tr)\n return true\n})\n\nwithMeta(breakTableCommand, {\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('InsertTable', ctx => ({ row, col }: { row?: number, col?: number } = {}) => (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)\n _tr.setSelection(sel)\n\n dispatch?.(_tr)\n\n return true\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('MoveRow', () => ({ from, to }: { from?: number, to?: number } = {}) => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(moveRow(tr, from ?? 0, to ?? 0, true))\n\n return Boolean(result)\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('MoveCol', () => ({ from, to }: { from?: number, to?: number } = {}) => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(moveCol(tr, from ?? 0, to ?? 0, true))\n\n return Boolean(result)\n})\n\nwithMeta(moveColCommand, {\n displayName: 'Command<moveColCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a row.\nexport const selectRowCommand = $command<number, 'SelectRow'>('SelectRow', () => (index = 0) => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectRow(index)(tr))\n\n return Boolean(result)\n})\n\nwithMeta(selectRowCommand, {\n displayName: 'Command<selectRowCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a column.\nexport const selectColCommand = $command<number, 'SelectCol'>('SelectCol', () => (index = 0) => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectCol(index)(tr))\n\n return Boolean(result)\n})\n\nwithMeta(selectColCommand, {\n displayName: 'Command<selectColCommand>',\n group: 'Table',\n})\n\n/// A command for selecting a table.\nexport const selectTableCommand = $command('SelectTable', () => () => (state, dispatch) => {\n const { tr } = state\n const result = dispatch?.(selectTable(tr))\n\n return Boolean(result)\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('DeleteSelectedCells', () => () => (state, dispatch) => {\n const { selection } = state\n if (!(selection instanceof CellSelection))\n return false\n\n const isRow = selection.isRowSelection()\n const isCol = selection.isColSelection()\n\n if (isRow && isCol)\n return deleteTable(state, dispatch)\n\n if (isCol)\n return deleteColumn(state, dispatch)\n\n else\n return deleteRow(state, dispatch)\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('AddColBefore', () => () => addColumnBefore)\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('AddColAfter', () => () => addColumnAfter)\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('AddRowBefore', ctx => () => (state, dispatch) => {\n if (!isInTable(state))\n 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\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('AddRowAfter', ctx => () => (state, dispatch) => {\n if (!isInTable(state))\n 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\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<'left' | 'center' | 'right', 'SetAlign'>('SetAlign', () => (alignment = 'left') => setCellAttr('alignment', alignment))\n\nwithMeta(setAlignCommand, {\n displayName: 'Command<setAlignCommand>',\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 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'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n\n return () => commands.call(breakTableCommand.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\nexport * from './utils'\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../../__internal__'\n\nconst id = 'footnote_definition'\nconst markdownId = 'footnoteDefinition'\n\n/// Footnote definition node schema.\nexport const footnoteDefinitionSchema = $nodeSchema('footnote_definition', () => ({\n group: 'block',\n content: 'block+',\n defining: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `dl[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n 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\nwithMeta(footnoteDefinitionSchema.ctx, {\n displayName: 'NodeSchemaCtx<footnodeDef>',\n group: 'footnote',\n})\n\nwithMeta(footnoteDefinitionSchema.node, {\n displayName: 'NodeSchema<footnodeDef>',\n group: 'footnote',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../../__internal__'\n\nconst id = 'footnote_reference'\n\n/// Footnote reference node schema.\nexport const footnoteReferenceSchema = $nodeSchema('footnote_reference', () => ({\n group: 'inline',\n inline: true,\n atom: true,\n attrs: {\n label: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `sup[data-type=\"${id}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw 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\nwithMeta(footnoteReferenceSchema.ctx, {\n displayName: 'NodeSchemaCtx<footnodeRef>',\n group: 'footnote',\n})\n\nwithMeta(footnoteReferenceSchema.node, {\n displayName: 'NodeSchema<footnodeRef>',\n group: 'footnote',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { listItemSchema } from '@milkdown/preset-commonmark'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $inputRule } from '@milkdown/utils'\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((prev) => {\n return (ctx) => {\n const baseSchema = prev(ctx)\n return {\n ...baseSchema,\n attrs: {\n ...baseSchema.attrs,\n checked: {\n default: null,\n },\n },\n parseDOM: [\n {\n tag: 'li[data-item-type=\"task\"]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset['list-type'],\n spread: dom.dataset.spread,\n checked: dom.dataset.checked ? dom.dataset.checked === 'true' : 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, { label, listType, spread, checked })\n state.next(node.content)\n state.closeNode()\n },\n },\n }\n }\n})\n\nwithMeta(extendListItemSchemaForTask, {\n displayName: 'NodeSchema<listItem>',\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(/^\\[(?<checked>\\s|x)\\]\\s$/, (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)\n 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)\n .setNodeMarkup(finPos, undefined, { ...node.attrs, checked })\n\n return tr\n })\n})\n\nwithMeta(wrapInTaskListInputRule, {\n displayName: 'InputRule<wrapInTaskListInputRule>',\n group: 'ListItem',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { strikethroughKeymap } from '../mark'\nimport { tableKeymap } from '../node'\n\n/// @internal\nexport const keymap: MilkdownPlugin[] = [\n strikethroughKeymap,\n tableKeymap,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { insertTableInputRule, wrapInTaskListInputRule } from '../node'\n\n/// @internal\nexport const inputrules: MilkdownPlugin[] = [\n insertTableInputRule,\n wrapInTaskListInputRule,\n]\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { browser } from '@milkdown/prose'\nimport type { Node } from '@milkdown/prose/model'\nimport { isInTable } from '@milkdown/prose/tables'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { paragraphSchema } from '@milkdown/preset-commonmark'\nimport { $prose } from '@milkdown/utils'\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 autoInsertZeroSpaceInTablePlugin = $prose((ctx) => {\n const pluginKey = new PluginKey('MILKDOWN_AUTO_INSERT_ZERO_SPACE')\n\n const isParagraph = (node: Node) => node.type === paragraphSchema.type(ctx)\n\n const isEmptyParagraph = (node: Node) => isParagraph(node) && node.nodeSize === 2\n\n return new Plugin({\n key: pluginKey,\n props: {\n handleDOMEvents: {\n compositionstart(view) {\n const { state, dispatch } = view\n const { tr, selection } = state\n const { $from } = selection\n if (browser.safari && isInTable(state) && selection.empty && isEmptyParagraph($from.parent))\n dispatch(tr.insertText('\\u2060', $from.start()))\n\n return false\n },\n compositionend(view) {\n const { state, dispatch } = view\n const { tr, selection } = state\n const { $from } = selection\n\n if (\n browser.safari\n && isInTable(state)\n && selection.empty\n && isParagraph($from.parent)\n && $from.parent.textContent.startsWith('\\u2060')\n )\n dispatch(tr.delete($from.start(), $from.start() + 1))\n\n return false\n },\n },\n },\n })\n})\n\nwithMeta(autoInsertZeroSpaceInTablePlugin, {\n displayName: 'Prose<autoInsertZeroSpaceInTablePlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { columnResizing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { tableEditing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\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(() => tableEditing())\n\nwithMeta(tableEditingPlugin, {\n displayName: 'Prose<tableEditingPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport remarkGFM from 'remark-gfm'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is wrapping the [remark-gfm](https://github.com/remarkjs/remark-gfm).\nexport const remarkGFMPlugin = $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","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport {\n autoInsertZeroSpaceInTablePlugin,\n columnResizingPlugin,\n remarkGFMPlugin,\n tableEditingPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n autoInsertZeroSpaceInTablePlugin,\n columnResizingPlugin,\n tableEditingPlugin,\n remarkGFMPlugin,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { strikethroughAttr, strikethroughSchema } from '../mark'\nimport { extendListItemSchemaForTask, footnoteDefinitionSchema, footnoteReferenceSchema, tableCellSchema, tableHeaderSchema, tableRowSchema, tableSchema } from '../node'\n\n/// @internal\nexport const schema: MilkdownPlugin[] = [\n extendListItemSchemaForTask,\n\n tableSchema,\n tableRowSchema,\n tableHeaderSchema,\n tableCellSchema,\n\n footnoteDefinitionSchema,\n footnoteReferenceSchema,\n\n strikethroughAttr,\n strikethroughSchema,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { toggleStrikethroughCommand } from '../mark'\nimport { addColAfterCommand, addColBeforeCommand, addRowAfterCommand, addRowBeforeCommand, breakTableCommand, deleteSelectedCellsCommand, goToNextTableCellCommand, goToPrevTableCellCommand, insertTableCommand, moveColCommand, moveRowCommand, selectColCommand, selectRowCommand, selectTableCommand, setAlignCommand } from '../node'\n\n/// @internal\nexport const commands = [\n goToNextTableCellCommand,\n goToPrevTableCellCommand,\n breakTableCommand,\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","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commands, inputrules, keymap, plugins, schema } 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 = [schema, inputrules, keymap, plugins, commands].flat()\n"],"names":["withMeta","plugin","meta","strikethroughAttr","$markAttr","strikethroughSchema","$markSchema","ctx","value","mark","node","state","markType","toggleStrikethroughCommand","$command","toggleMark","strikethroughKeymap","$useKeymap","commands","commandsCtx","createTable","rowsCount","colsCount","cells","tableCellSchema","headerCells","tableHeaderSchema","rows","_","i","tableRowSchema","tableSchema","findTable","selection","findParentNode","getCellsInCol","columnIndex","table","map","TableMap","pos","start","x","getCellsInRow","rowIndex","getAllCellsInTable","nodePos","selectTable","tr","$firstCell","last","$lastCell","cloneTr","CellSelection","addRowWithAlignment","tableStart","row","rowPos","acc","col","headerCol","selectLine","type","index","isRowSelection","lastCell","createCellSelection","firstCell","selectRow","selectCol","transpose","array","column","convertArrayOfRowsToTableNode","tableNode","arrayOfNodes","rowsPM","rowCells","colIndex","cellPos","cell","newCell","convertTableNodeToArrayOfRows","seen","rect","moveRowInArrayOfRows","indexesOrigin","indexesTarget","directionOverride","direction","rowsExtracted","positionOffset","target","moveTableColumn","moveTableRow","getSelectionRangeInColumn","startIndex","endIndex","maybeEndIndex","indexes","maybeCells","firstSelectedColumnCells","firstRowCells","$anchor","headCell","columnCells","j","$head","getSelectionRangeInRow","firstSelectedRowCells","firstColumnCells","moveCol","origin","select","indexesOriginColumn","indexesTargetColumn","newTable","_tr","moveRow","indexesOriginRow","indexesTargetRow","originalSchema","tableNodes","dom","attrs","$nodeSchema","align","children","firstLine","_a","insertTableInputRule","$inputRule","InputRule","match","end","$start","_b","TextSelection","goToPrevTableCellCommand","goToNextCell","goToNextTableCellCommand","breakTableCommand","dispatch","isInTable","paragraphSchema","Selection","insertTableCommand","from","sel","moveRowCommand","to","moveColCommand","selectRowCommand","selectColCommand","selectTableCommand","deleteSelectedCellsCommand","isRow","isCol","deleteTable","deleteColumn","deleteRow","addColBeforeCommand","addColumnBefore","addColAfterCommand","addColumnAfter","addRowBeforeCommand","selectedRect","addRowAfterCommand","setAlignCommand","alignment","setCellAttr","tableKeymap","id","markdownId","footnoteDefinitionSchema","expectDomTypeError","label","footnoteReferenceSchema","extendListItemSchemaForTask","listItemSchema","prev","baseSchema","checked","listType","spread","wrapInTaskListInputRule","depth","finPos","keymap","inputrules","autoInsertZeroSpaceInTablePlugin","$prose","pluginKey","PluginKey","isParagraph","isEmptyParagraph","Plugin","view","$from","browser","columnResizingPlugin","columnResizing","tableEditingPlugin","tableEditing","remarkGFMPlugin","$remark","remarkGFM","plugins","schema","gfm"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/table/index.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,WAAW,gDAgCrB,CAAA;AAaH,eAAO,MAAM,cAAc,oDAwBxB,CAAA;AAaH,eAAO,MAAM,eAAe,qDAoBzB,CAAA;AAaH,eAAO,MAAM,iBAAiB,uDAqB3B,CAAA;AAcH,eAAO,MAAM,oBAAoB,sCAc/B,CAAA;AAQF,eAAO,MAAM,wBAAwB,6CAA8D,CAAA;AAQnG,eAAO,MAAM,wBAAwB,6CAA6D,CAAA;AAUlG,eAAO,MAAM,iBAAiB,6CAY5B,CAAA;AAUF,eAAO,MAAM,kBAAkB;;;EAY7B,CAAA;AASF,eAAO,MAAM,cAAc;;;EAKzB,CAAA;AASF,eAAO,MAAM,cAAc;;;EAKzB,CAAA;AAQF,eAAO,MAAM,gBAAgB,4CAK3B,CAAA;AAQF,eAAO,MAAM,gBAAgB,4CAK3B,CAAA;AAQF,eAAO,MAAM,kBAAkB,6CAK7B,CAAA;AAUF,eAAO,MAAM,0BAA0B,6CAgBrC,CAAA;AAQF,eAAO,MAAM,mBAAmB,6CAAwD,CAAA;AAQxF,eAAO,MAAM,kBAAkB,6CAAsD,CAAA;AAQrF,eAAO,MAAM,mBAAmB,6CAQ9B,CAAA;AAQF,eAAO,MAAM,kBAAkB,6CAQ7B,CAAA;AAUF,eAAO,MAAM,eAAe,iEAAmI,CAAA;AAW/J,eAAO,MAAM,WAAW,6FAyBtB,CAAA;AAYF,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/table/index.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,WAAW,gDAgCrB,CAAA;AAaH,eAAO,MAAM,cAAc,oDAwBxB,CAAA;AAaH,eAAO,MAAM,eAAe,qDAoBzB,CAAA;AAaH,eAAO,MAAM,iBAAiB,uDAqB3B,CAAA;AAcH,eAAO,MAAM,oBAAoB,sCAe/B,CAAA;AAQF,eAAO,MAAM,wBAAwB,6CAA8D,CAAA;AAQnG,eAAO,MAAM,wBAAwB,6CAA6D,CAAA;AAUlG,eAAO,MAAM,iBAAiB,6CAY5B,CAAA;AAUF,eAAO,MAAM,kBAAkB;;;EAY7B,CAAA;AASF,eAAO,MAAM,cAAc;;;EAKzB,CAAA;AASF,eAAO,MAAM,cAAc;;;EAKzB,CAAA;AAQF,eAAO,MAAM,gBAAgB,4CAK3B,CAAA;AAQF,eAAO,MAAM,gBAAgB,4CAK3B,CAAA;AAQF,eAAO,MAAM,kBAAkB,6CAK7B,CAAA;AAUF,eAAO,MAAM,0BAA0B,6CAgBrC,CAAA;AAQF,eAAO,MAAM,mBAAmB,6CAAwD,CAAA;AAQxF,eAAO,MAAM,kBAAkB,6CAAsD,CAAA;AAQrF,eAAO,MAAM,mBAAmB,6CAQ9B,CAAA;AAQF,eAAO,MAAM,kBAAkB,6CAQ7B,CAAA;AAUF,eAAO,MAAM,eAAe,iEAAmI,CAAA;AAW/J,eAAO,MAAM,WAAW,6FAyBtB,CAAA;AAYF,cAAc,SAAS,CAAA"}
@@ -8,18 +8,18 @@ export interface CellPos {
8
8
  start: number;
9
9
  node: Node;
10
10
  }
11
- export declare const createTable: (ctx: Ctx, rowsCount?: number, colsCount?: number) => Node;
12
- export declare const findTable: (selection: Selection) => ContentNodeWithPos | undefined;
13
- export declare const getCellsInCol: (columnIndex: number, selection: Selection) => CellPos[] | undefined;
14
- export declare const getCellsInRow: (rowIndex: number, selection: Selection) => CellPos[] | undefined;
15
- export declare const getAllCellsInTable: (selection: Selection) => {
11
+ export declare function createTable(ctx: Ctx, rowsCount?: number, colsCount?: number): Node;
12
+ export declare function findTable(selection: Selection): ContentNodeWithPos | undefined;
13
+ export declare function getCellsInCol(columnIndex: number, selection: Selection): CellPos[] | undefined;
14
+ export declare function getCellsInRow(rowIndex: number, selection: Selection): CellPos[] | undefined;
15
+ export declare function getAllCellsInTable(selection: Selection): {
16
16
  pos: number;
17
17
  start: number;
18
18
  node: Node | null;
19
19
  }[] | undefined;
20
- export declare const selectTable: (tr: Transaction) => Transaction;
20
+ export declare function selectTable(tr: Transaction): Transaction;
21
21
  export declare function addRowWithAlignment(ctx: Ctx, tr: Transaction, { map, tableStart, table }: TableRect, row: number): Transaction;
22
- export declare const selectLine: (type: 'row' | 'col') => (index: number) => (tr: Transaction) => Transaction;
22
+ export declare function selectLine(type: 'row' | 'col'): (index: number) => (tr: Transaction) => Transaction;
23
23
  export declare const selectRow: (index: number) => (tr: Transaction) => Transaction;
24
24
  export declare const selectCol: (index: number) => (tr: Transaction) => Transaction;
25
25
  export declare function moveCol(tr: Transaction, origin: number, target: number, select?: boolean): Transaction;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/node/table/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAIxC,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;CACX;AAGD,eAAO,MAAM,WAAW,QAAS,GAAG,6CAAiC,IAcpE,CAAA;AAGD,eAAO,MAAM,SAAS,cAAe,SAAS,mCAC2B,CAAA;AAGzE,eAAO,MAAM,aAAa,gBAAiB,MAAM,aAAa,SAAS,KAAG,OAAO,EAAE,GAAG,SAsBrF,CAAA;AAGD,eAAO,MAAM,aAAa,aAAc,MAAM,aAAa,SAAS,KAAG,OAAO,EAAE,GAAG,SAsBlF,CAAA;AAGD,eAAO,MAAM,kBAAkB,cAAe,SAAS;;;;eAiBtD,CAAA;AAGD,eAAO,MAAM,WAAW,OAAQ,WAAW,gBAW1C,CAAA;AAGD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,eAgBhH;AAGD,eAAO,MAAM,UAAU,SAAU,KAAK,GAAG,KAAK,aAAa,MAAM,UAAU,WAAW,gBAuBrF,CAAA;AAID,eAAO,MAAM,SAAS,UA3BqC,MAAM,UAAU,WAAW,gBA2B5C,CAAA;AAI1C,eAAO,MAAM,SAAS,UA/BqC,MAAM,UAAU,WAAW,gBA+B5C,CAAA;AA2P1C,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO,eAuCrF;AAKD,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO,eAuCrF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/node/table/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAIxC,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;CACX;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,SAAI,EAAE,SAAS,SAAI,GAAG,IAAI,CAcxE;AAGD,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,kCAE7C;AAGD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE,GAAG,SAAS,CAsB9F;AAGD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE,GAAG,SAAS,CAsB3F;AAGD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS;;;;gBAiBtD;AAGD,wBAAgB,WAAW,CAAC,EAAE,EAAE,WAAW,eAW1C;AAGD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,eAgBhH;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,WAC7B,MAAM,UAAU,WAAW,iBAwB3C;AAID,eAAO,MAAM,SAAS,UA5BL,MAAM,UAAU,WAAW,gBA4BF,CAAA;AAI1C,eAAO,MAAM,SAAS,UAhCL,MAAM,UAAU,WAAW,gBAgCF,CAAA;AA4O1C,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO,eAuCrF;AAKD,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO,eAuCrF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@milkdown/preset-gfm",
3
3
  "type": "module",
4
- "version": "7.3.1",
4
+ "version": "7.3.2",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -31,15 +31,15 @@
31
31
  "dependencies": {
32
32
  "remark-gfm": "^4.0.0",
33
33
  "tslib": "^2.5.0",
34
- "@milkdown/exception": "7.3.1",
35
- "@milkdown/utils": "7.3.1"
34
+ "@milkdown/exception": "7.3.2",
35
+ "@milkdown/utils": "7.3.2"
36
36
  },
37
37
  "devDependencies": {
38
- "@milkdown/core": "7.3.1",
39
- "@milkdown/ctx": "7.3.1",
40
- "@milkdown/preset-commonmark": "7.3.1",
41
- "@milkdown/prose": "7.3.1",
42
- "@milkdown/transformer": "7.3.1"
38
+ "@milkdown/core": "7.3.2",
39
+ "@milkdown/ctx": "7.3.2",
40
+ "@milkdown/preset-commonmark": "7.3.2",
41
+ "@milkdown/prose": "7.3.2",
42
+ "@milkdown/transformer": "7.3.2"
43
43
  },
44
44
  "nx": {
45
45
  "targets": {
@@ -1,10 +1,7 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import type { Meta, MilkdownPlugin } from '@milkdown/ctx'
3
3
 
4
- export const withMeta = <T extends MilkdownPlugin>(
5
- plugin: T,
6
- meta: Partial<Meta> & Pick<Meta, 'displayName'>,
7
- ): T => {
4
+ export function withMeta<T extends MilkdownPlugin>(plugin: T, meta: Partial<Meta> & Pick<Meta, 'displayName'>): T {
8
5
  Object.assign(plugin, {
9
6
  meta: {
10
7
  package: '@milkdown/preset-gfm',
@@ -16,7 +16,7 @@ const originalSchema = tableNodes({
16
16
  cellAttributes: {
17
17
  alignment: {
18
18
  default: 'left',
19
- getFromDOM: dom => (dom as HTMLElement).style.textAlign || 'left',
19
+ getFromDOM: dom => (dom).style.textAlign || 'left',
20
20
  setDOMAttr: (value, attrs) => {
21
21
  attrs.style = `text-align: ${value || 'left'}`
22
22
  },
@@ -176,7 +176,8 @@ withMeta(tableHeaderSchema.ctx, {
176
176
  /// A input rule for creating table.
177
177
  /// For example, `|2x2|` will create a 2x2 table.
178
178
  export const insertTableInputRule = $inputRule(ctx => new InputRule(
179
- /^\|(?<col>\d+)[xX](?<row>\d+)\|\s$/, (state, match, start, end) => {
179
+ /^\|(?<col>\d+)[xX](?<row>\d+)\|\s$/,
180
+ (state, match, start, end) => {
180
181
  const $start = state.doc.resolve(start)
181
182
  if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), tableSchema.type(ctx)))
182
183
  return null
@@ -237,7 +238,7 @@ withMeta(breakTableCommand, {
237
238
  /// A command for inserting a table.
238
239
  /// You can specify the number of rows and columns.
239
240
  /// By default, it will insert a 3x3 table.
240
- export const insertTableCommand = $command('InsertTable', ctx => ({ row, col }: { row?: number; col?: number } = {}) => (state, dispatch) => {
241
+ export const insertTableCommand = $command('InsertTable', ctx => ({ row, col }: { row?: number, col?: number } = {}) => (state, dispatch) => {
241
242
  const { selection, tr } = state
242
243
  const { from } = selection
243
244
  const table = createTable(ctx, row, col)
@@ -258,7 +259,7 @@ withMeta(insertTableCommand, {
258
259
 
259
260
  /// A command for moving a row in a table.
260
261
  /// You should specify the `from` and `to` index.
261
- export const moveRowCommand = $command('MoveRow', () => ({ from, to }: { from?: number; to?: number } = {}) => (state, dispatch) => {
262
+ export const moveRowCommand = $command('MoveRow', () => ({ from, to }: { from?: number, to?: number } = {}) => (state, dispatch) => {
262
263
  const { tr } = state
263
264
  const result = dispatch?.(moveRow(tr, from ?? 0, to ?? 0, true))
264
265
 
@@ -272,7 +273,7 @@ withMeta(moveRowCommand, {
272
273
 
273
274
  /// A command for moving a column in a table.
274
275
  /// You should specify the `from` and `to` index.
275
- export const moveColCommand = $command('MoveCol', () => ({ from, to }: { from?: number; to?: number } = {}) => (state, dispatch) => {
276
+ export const moveColCommand = $command('MoveCol', () => ({ from, to }: { from?: number, to?: number } = {}) => (state, dispatch) => {
276
277
  const { tr } = state
277
278
  const result = dispatch?.(moveCol(tr, from ?? 0, to ?? 0, true))
278
279
 
@@ -18,7 +18,7 @@ export interface CellPos {
18
18
  }
19
19
 
20
20
  /// @internal
21
- export const createTable = (ctx: Ctx, rowsCount = 3, colsCount = 3): Node => {
21
+ export function createTable(ctx: Ctx, rowsCount = 3, colsCount = 3): Node {
22
22
  const cells = Array(colsCount)
23
23
  .fill(0)
24
24
  .map(() => tableCellSchema.type(ctx).createAndFill()!)
@@ -35,11 +35,12 @@ export const createTable = (ctx: Ctx, rowsCount = 3, colsCount = 3): Node => {
35
35
  }
36
36
 
37
37
  /// Find the table node with position information for current selection.
38
- export const findTable = (selection: Selection) =>
39
- findParentNode(node => node.type.spec.tableRole === 'table')(selection)
38
+ export function findTable(selection: Selection) {
39
+ return findParentNode(node => node.type.spec.tableRole === 'table')(selection)
40
+ }
40
41
 
41
42
  /// Get cells in a column of a table.
42
- export const getCellsInCol = (columnIndex: number, selection: Selection): CellPos[] | undefined => {
43
+ export function getCellsInCol(columnIndex: number, selection: Selection): CellPos[] | undefined {
43
44
  const table = findTable(selection)
44
45
  if (!table)
45
46
  return undefined
@@ -64,7 +65,7 @@ export const getCellsInCol = (columnIndex: number, selection: Selection): CellPo
64
65
  }
65
66
 
66
67
  /// Get cells in a row of a table.
67
- export const getCellsInRow = (rowIndex: number, selection: Selection): CellPos[] | undefined => {
68
+ export function getCellsInRow(rowIndex: number, selection: Selection): CellPos[] | undefined {
68
69
  const table = findTable(selection)
69
70
  if (!table)
70
71
  return undefined
@@ -89,7 +90,7 @@ export const getCellsInRow = (rowIndex: number, selection: Selection): CellPos[]
89
90
  }
90
91
 
91
92
  /// Get all cells in a table.
92
- export const getAllCellsInTable = (selection: Selection) => {
93
+ export function getAllCellsInTable(selection: Selection) {
93
94
  const table = findTable(selection)
94
95
  if (!table)
95
96
  return
@@ -109,7 +110,7 @@ export const getAllCellsInTable = (selection: Selection) => {
109
110
  }
110
111
 
111
112
  /// Select a possible table in current selection.
112
- export const selectTable = (tr: Transaction) => {
113
+ export function selectTable(tr: Transaction) {
113
114
  const cells = getAllCellsInTable(tr.selection)
114
115
  if (cells && cells[0]) {
115
116
  const $firstCell = tr.doc.resolve(cells[0].pos)
@@ -142,29 +143,31 @@ export function addRowWithAlignment(ctx: Ctx, tr: Transaction, { map, tableStart
142
143
  }
143
144
 
144
145
  /// @internal
145
- export const selectLine = (type: 'row' | 'col') => (index: number) => (tr: Transaction) => {
146
- const table = findTable(tr.selection)
147
- const isRowSelection = type === 'row'
148
- if (table) {
149
- const map = TableMap.get(table.node)
150
-
151
- // Check if the index is valid
152
- if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {
153
- const lastCell = map.positionAt(
154
- isRowSelection ? index : map.height - 1,
155
- isRowSelection ? map.width - 1 : index,
156
- table.node,
157
- )
158
- const $lastCell = tr.doc.resolve(table.start + lastCell)
159
-
160
- const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection
161
-
162
- const firstCell = map.positionAt(isRowSelection ? index : 0, isRowSelection ? 0 : index, table.node)
163
- const $firstCell = tr.doc.resolve(table.start + firstCell)
164
- return cloneTr(tr.setSelection(createCellSelection($lastCell, $firstCell) as unknown as Selection))
146
+ export function selectLine(type: 'row' | 'col') {
147
+ return (index: number) => (tr: Transaction) => {
148
+ const table = findTable(tr.selection)
149
+ const isRowSelection = type === 'row'
150
+ if (table) {
151
+ const map = TableMap.get(table.node)
152
+
153
+ // Check if the index is valid
154
+ if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {
155
+ const lastCell = map.positionAt(
156
+ isRowSelection ? index : map.height - 1,
157
+ isRowSelection ? map.width - 1 : index,
158
+ table.node,
159
+ )
160
+ const $lastCell = tr.doc.resolve(table.start + lastCell)
161
+
162
+ const createCellSelection = isRowSelection ? CellSelection.rowSelection : CellSelection.colSelection
163
+
164
+ const firstCell = map.positionAt(isRowSelection ? index : 0, isRowSelection ? 0 : index, table.node)
165
+ const $firstCell = tr.doc.resolve(table.start + firstCell)
166
+ return cloneTr(tr.setSelection(createCellSelection($lastCell, $firstCell) as unknown as Selection))
167
+ }
165
168
  }
169
+ return tr
166
170
  }
167
- return tr
168
171
  }
169
172
 
170
173
  /// If the selection is in a table,
@@ -175,13 +178,13 @@ export const selectRow = selectLine('row')
175
178
  /// select the {index} column.
176
179
  export const selectCol = selectLine('col')
177
180
 
178
- const transpose = <T>(array: T[][]) => {
181
+ function transpose<T>(array: T[][]) {
179
182
  return array[0]!.map((_, i) => {
180
183
  return array.map(column => column[i])
181
184
  }) as T[][]
182
185
  }
183
186
 
184
- const convertArrayOfRowsToTableNode = (tableNode: Node, arrayOfNodes: (Node | null)[][]) => {
187
+ function convertArrayOfRowsToTableNode(tableNode: Node, arrayOfNodes: (Node | null)[][]) {
185
188
  const rowsPM = []
186
189
  const map = TableMap.get(tableNode)
187
190
  for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
@@ -216,7 +219,7 @@ const convertArrayOfRowsToTableNode = (tableNode: Node, arrayOfNodes: (Node | nu
216
219
  return newTable
217
220
  }
218
221
 
219
- const convertTableNodeToArrayOfRows = (tableNode: Node) => {
222
+ function convertTableNodeToArrayOfRows(tableNode: Node) {
220
223
  const map = TableMap.get(tableNode)
221
224
  const rows: (Node | null)[][] = []
222
225
  for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
@@ -242,12 +245,7 @@ const convertTableNodeToArrayOfRows = (tableNode: Node) => {
242
245
  return rows
243
246
  }
244
247
 
245
- const moveRowInArrayOfRows = (
246
- rows: (Node | null)[][],
247
- indexesOrigin: number[],
248
- indexesTarget: number[],
249
- directionOverride: -1 | 1 | 0,
250
- ) => {
248
+ function moveRowInArrayOfRows(rows: (Node | null)[][], indexesOrigin: number[], indexesTarget: number[], directionOverride: -1 | 1 | 0) {
251
249
  const direction = indexesOrigin[0]! > indexesTarget[0]! ? -1 : 1
252
250
 
253
251
  const rowsExtracted = rows.splice(indexesOrigin[0]!, indexesOrigin.length)
@@ -271,12 +269,7 @@ const moveRowInArrayOfRows = (
271
269
  return rows
272
270
  }
273
271
 
274
- const moveTableColumn = (
275
- table: ContentNodeWithPos,
276
- indexesOrigin: number[],
277
- indexesTarget: number[],
278
- direction: -1 | 1 | 0,
279
- ) => {
272
+ function moveTableColumn(table: ContentNodeWithPos, indexesOrigin: number[], indexesTarget: number[], direction: -1 | 1 | 0) {
280
273
  let rows = transpose(convertTableNodeToArrayOfRows(table.node))
281
274
 
282
275
  rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction)
@@ -285,12 +278,7 @@ const moveTableColumn = (
285
278
  return convertArrayOfRowsToTableNode(table.node, rows)
286
279
  }
287
280
 
288
- const moveTableRow = (
289
- table: ContentNodeWithPos,
290
- indexesOrigin: number[],
291
- indexesTarget: number[],
292
- direction: -1 | 1 | 0,
293
- ) => {
281
+ function moveTableRow(table: ContentNodeWithPos, indexesOrigin: number[], indexesTarget: number[], direction: -1 | 1 | 0) {
294
282
  let rows = convertTableNodeToArrayOfRows(table.node)
295
283
 
296
284
  rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction)
@@ -298,7 +286,7 @@ const moveTableRow = (
298
286
  return convertArrayOfRowsToTableNode(table.node, rows)
299
287
  }
300
288
 
301
- const getSelectionRangeInColumn = (columnIndex: number, tr: Transaction) => {
289
+ function getSelectionRangeInColumn(columnIndex: number, tr: Transaction) {
302
290
  let startIndex = columnIndex
303
291
  let endIndex = columnIndex
304
292
 
@@ -363,7 +351,7 @@ const getSelectionRangeInColumn = (columnIndex: number, tr: Transaction) => {
363
351
  return { $anchor, $head, indexes }
364
352
  }
365
353
 
366
- const getSelectionRangeInRow = (rowIndex: number, tr: Transaction) => {
354
+ function getSelectionRangeInRow(rowIndex: number, tr: Transaction) {
367
355
  let startIndex = rowIndex
368
356
  let endIndex = rowIndex
369
357
  // looking for selection start row (startIndex)
@@ -36,10 +36,10 @@ export const autoInsertZeroSpaceInTablePlugin = $prose((ctx) => {
36
36
 
37
37
  if (
38
38
  browser.safari
39
- && isInTable(state)
40
- && selection.empty
41
- && isParagraph($from.parent)
42
- && $from.parent.textContent.startsWith('\u2060')
39
+ && isInTable(state)
40
+ && selection.empty
41
+ && isParagraph($from.parent)
42
+ && $from.parent.textContent.startsWith('\u2060')
43
43
  )
44
44
  dispatch(tr.delete($from.start(), $from.start() + 1))
45
45