@milkdown/preset-gfm 7.0.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"inputrules.d.ts","sourceRoot":"","sources":["../../src/composed/inputrules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAInD,eAAO,MAAM,UAAU,EAAE,cAAc,EAEtC,CAAA"}
1
+ {"version":3,"file":"inputrules.d.ts","sourceRoot":"","sources":["../../src/composed/inputrules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAInD,eAAO,MAAM,UAAU,EAAE,cAAc,EAGtC,CAAA"}
package/lib/index.es.js CHANGED
@@ -1,20 +1,20 @@
1
1
  import { expectDomTypeError as $ } from "@milkdown/exception";
2
- import { paragraphSchema as W, listItemSchema as le } from "@milkdown/preset-commonmark";
2
+ import { paragraphSchema as W, listItemSchema as se } from "@milkdown/preset-commonmark";
3
+ import { InputRule as K } from "@milkdown/prose/inputrules";
4
+ import { $markAttr as ce, $markSchema as ae, $command as p, $useKeymap as L, $nodeSchema as w, $inputRule as z, $prose as _, $remark as ie } from "@milkdown/utils";
3
5
  import { commandsCtx as S } from "@milkdown/core";
4
- import { InputRule as re } from "@milkdown/prose/inputrules";
5
- import { TextSelection as se, Selection as K, PluginKey as ce, Plugin as ae } from "@milkdown/prose/state";
6
- import { TableMap as h, CellSelection as C, tableNodes as ie, goToNextCell as L, isInTable as y, deleteTable as de, deleteColumn as ue, deleteRow as me, addColumnBefore as fe, addColumnAfter as pe, selectedRect as z, setCellAttr as he, columnResizing as ge, tableEditing as be } from "@milkdown/prose/tables";
7
- import { $markAttr as Ce, $markSchema as we, $command as p, $useKeymap as G, $nodeSchema as w, $inputRule as ke, $prose as _, $remark as ye } from "@milkdown/utils";
8
- import { findParentNode as Se, cloneTr as A, browser as D } from "@milkdown/prose";
9
- import { toggleMark as Ae } from "@milkdown/prose/commands";
10
- import Te from "remark-gfm";
11
- const j = Ce("strike_through"), V = we("strike_through", (e) => ({
6
+ import { TextSelection as de, Selection as G, PluginKey as ue, Plugin as me } from "@milkdown/prose/state";
7
+ import { TableMap as h, CellSelection as C, tableNodes as fe, goToNextCell as j, isInTable as y, deleteTable as pe, deleteColumn as he, deleteRow as ge, addColumnBefore as be, addColumnAfter as Ce, selectedRect as V, setCellAttr as we, columnResizing as ke, tableEditing as ye } from "@milkdown/prose/tables";
8
+ import { findParentNode as Se, cloneTr as T, browser as D } from "@milkdown/prose";
9
+ import { toggleMark as Te } from "@milkdown/prose/commands";
10
+ import Ae from "remark-gfm";
11
+ const Z = ce("strike_through"), U = ae("strike_through", (e) => ({
12
12
  inclusive: !1,
13
13
  parseDOM: [
14
14
  { tag: "del" },
15
15
  { style: "text-decoration", getAttrs: (t) => t === "line-through" }
16
16
  ],
17
- toDOM: (t) => ["del", e.get(j.key)(t)],
17
+ toDOM: (t) => ["del", e.get(Z.key)(t)],
18
18
  parseMarkdown: {
19
19
  match: (t) => t.type === "delete",
20
20
  runner: (t, n, o) => {
@@ -27,17 +27,17 @@ const j = Ce("strike_through"), V = we("strike_through", (e) => ({
27
27
  t.withMark(n, "delete");
28
28
  }
29
29
  }
30
- })), Z = p("ToggleStrikeThrough", () => () => Ae(V.type())), Me = G("strikeThroughKeymap", {
30
+ })), X = p("ToggleStrikeThrough", () => () => Te(U.type())), Me = L("strikeThroughKeymap", {
31
31
  ToggleStrikethrough: {
32
32
  shortcuts: "Mod-Alt-x",
33
33
  command: (e) => {
34
34
  const t = e.get(S);
35
- return () => t.call(Z.key);
35
+ return () => t.call(X.key);
36
36
  }
37
37
  }
38
- }), U = (e = 3, t = 3) => {
39
- const n = Array(t).fill(0).map(() => O.type().createAndFill()), o = Array(t).fill(0).map(() => ee.type().createAndFill()), l = Array(e).fill(0).map((r, s) => I.type().create(null, s === 0 ? o : n));
40
- return E.type().create(null, l);
38
+ }), q = (e = 3, t = 3) => {
39
+ const n = Array(t).fill(0).map(() => O.type().createAndFill()), o = Array(t).fill(0).map(() => oe.type().createAndFill()), l = Array(e).fill(0).map((r, s) => E.type().create(null, s === 0 ? o : n));
40
+ return I.type().create(null, l);
41
41
  }, k = (e) => Se((t) => t.type.spec.tableRole === "table")(e), g = (e, t) => {
42
42
  const n = k(t);
43
43
  if (!n)
@@ -92,19 +92,19 @@ const j = Ce("strike_through"), V = we("strike_through", (e) => ({
92
92
  const n = e.doc.resolve(t[0].pos), o = t[t.length - 1];
93
93
  if (o) {
94
94
  const l = e.doc.resolve(o.pos);
95
- return A(e.setSelection(new C(l, n)));
95
+ return T(e.setSelection(new C(l, n)));
96
96
  }
97
97
  }
98
98
  return e;
99
99
  };
100
- function X(e, { map: t, tableStart: n, table: o }, l) {
101
- const r = Array(l).fill(0).reduce((i, a, u) => i + o.child(u).nodeSize, n), s = Array(t.width).fill(0).map((i, a) => {
102
- const u = o.nodeAt(t.map[a]);
103
- return O.type().createAndFill({ alignment: u == null ? void 0 : u.attrs.alignment });
100
+ function J(e, { map: t, tableStart: n, table: o }, l) {
101
+ const r = Array(l).fill(0).reduce((i, a, d) => i + o.child(d).nodeSize, n), s = Array(t.width).fill(0).map((i, a) => {
102
+ const d = o.nodeAt(t.map[a]);
103
+ return O.type().createAndFill({ alignment: d == null ? void 0 : d.attrs.alignment });
104
104
  });
105
- return e.insert(r, I.type().create(null, s)), e;
105
+ return e.insert(r, E.type().create(null, s)), e;
106
106
  }
107
- const q = (e) => (t) => (n) => {
107
+ const Q = (e) => (t) => (n) => {
108
108
  const o = k(n.selection), l = e === "row";
109
109
  if (o) {
110
110
  const r = h.get(o.node);
@@ -113,19 +113,19 @@ const q = (e) => (t) => (n) => {
113
113
  l ? t : r.height - 1,
114
114
  l ? r.width - 1 : t,
115
115
  o.node
116
- ), i = n.doc.resolve(o.start + s), a = l ? C.rowSelection : C.colSelection, u = r.positionAt(l ? t : 0, l ? 0 : t, o.node), c = n.doc.resolve(o.start + u);
117
- return A(n.setSelection(a(i, c)));
116
+ ), i = n.doc.resolve(o.start + s), a = l ? C.rowSelection : C.colSelection, d = r.positionAt(l ? t : 0, l ? 0 : t, o.node), c = n.doc.resolve(o.start + d);
117
+ return T(n.setSelection(a(i, c)));
118
118
  }
119
119
  }
120
120
  return n;
121
- }, Ne = q("row"), xe = q("col"), P = (e) => e[0].map((t, n) => e.map((o) => o[n])), J = (e, t) => {
121
+ }, Ne = Q("row"), xe = Q("col"), P = (e) => e[0].map((t, n) => e.map((o) => o[n])), Y = (e, t) => {
122
122
  const n = [], o = h.get(e);
123
123
  for (let r = 0; r < o.height; r++) {
124
124
  const s = e.child(r), i = [];
125
125
  for (let a = 0; a < o.width; a++) {
126
126
  if (!t[r][a])
127
127
  continue;
128
- const u = o.map[r * o.width + a], c = t[r][a], m = e.nodeAt(u).type.createChecked(
128
+ const d = o.map[r * o.width + a], c = t[r][a], m = e.nodeAt(d).type.createChecked(
129
129
  Object.assign({}, c.attrs),
130
130
  c.content,
131
131
  c.marks
@@ -139,13 +139,13 @@ const q = (e) => (t) => (n) => {
139
139
  n,
140
140
  e.marks
141
141
  );
142
- }, Q = (e) => {
142
+ }, ee = (e) => {
143
143
  const t = h.get(e), n = [];
144
144
  for (let o = 0; o < t.height; o++) {
145
145
  const l = [], r = {};
146
146
  for (let s = 0; s < t.width; s++) {
147
- const i = t.map[o * t.width + s], a = e.nodeAt(i), u = t.findCell(i);
148
- if (r[i] || u.top !== o) {
147
+ const i = t.map[o * t.width + s], a = e.nodeAt(i), d = t.findCell(i);
148
+ if (r[i] || d.top !== o) {
149
149
  l.push(null);
150
150
  continue;
151
151
  }
@@ -154,36 +154,36 @@ const q = (e) => (t) => (n) => {
154
154
  n.push(l);
155
155
  }
156
156
  return n;
157
- }, Y = (e, t, n, o) => {
157
+ }, te = (e, t, n, o) => {
158
158
  const l = t[0] > n[0] ? -1 : 1, r = e.splice(t[0], t.length), s = r.length % 2 === 0 ? 1 : 0;
159
159
  let i;
160
160
  return o === -1 && l === 1 ? i = n[0] - 1 : o === 1 && l === -1 ? i = n[n.length - 1] - s + 1 : i = l === -1 ? n[0] : n[n.length - 1] - s, e.splice(i, 0, ...r), e;
161
161
  }, $e = (e, t, n, o) => {
162
- let l = P(Q(e.node));
163
- return l = Y(l, t, n, o), l = P(l), J(e.node, l);
162
+ let l = P(ee(e.node));
163
+ return l = te(l, t, n, o), l = P(l), Y(e.node, l);
164
164
  }, _e = (e, t, n, o) => {
165
- let l = Q(e.node);
166
- return l = Y(l, t, n, o), J(e.node, l);
165
+ let l = ee(e.node);
166
+ return l = te(l, t, n, o), Y(e.node, l);
167
167
  }, B = (e, t) => {
168
168
  let n = e, o = e;
169
169
  for (let c = e; c >= 0; c--) {
170
- const d = g(c, t.selection);
171
- d && d.forEach((m) => {
170
+ const u = g(c, t.selection);
171
+ u && u.forEach((m) => {
172
172
  const f = m.node.attrs.colspan + c - 1;
173
173
  f >= n && (n = c), f > o && (o = f);
174
174
  });
175
175
  }
176
176
  for (let c = e; c <= o; c++) {
177
- const d = g(c, t.selection);
178
- d && d.forEach((m) => {
177
+ const u = g(c, t.selection);
178
+ u && u.forEach((m) => {
179
179
  const f = m.node.attrs.colspan + c - 1;
180
180
  m.node.attrs.colspan > 1 && f > o && (o = f);
181
181
  });
182
182
  }
183
183
  const l = [];
184
184
  for (let c = n; c <= o; c++) {
185
- const d = g(c, t.selection);
186
- d && d.length && l.push(c);
185
+ const u = g(c, t.selection);
186
+ u && u.length && l.push(c);
187
187
  }
188
188
  n = l[0], o = l[l.length - 1];
189
189
  const r = g(n, t.selection), s = b(0, t.selection), i = t.doc.resolve(
@@ -191,19 +191,19 @@ const q = (e) => (t) => (n) => {
191
191
  );
192
192
  let a;
193
193
  for (let c = o; c >= n; c--) {
194
- const d = g(c, t.selection);
195
- if (d && d.length) {
194
+ const u = g(c, t.selection);
195
+ if (u && u.length) {
196
196
  for (let m = s.length - 1; m >= 0; m--)
197
- if (s[m].pos === d[0].pos) {
198
- a = d[0];
197
+ if (s[m].pos === u[0].pos) {
198
+ a = u[0];
199
199
  break;
200
200
  }
201
201
  if (a)
202
202
  break;
203
203
  }
204
204
  }
205
- const u = t.doc.resolve(a.pos);
206
- return { $anchor: i, $head: u, indexes: l };
205
+ const d = t.doc.resolve(a.pos);
206
+ return { $anchor: i, $head: d, indexes: l };
207
207
  }, F = (e, t) => {
208
208
  let n = e, o = e;
209
209
  for (let c = e; c >= 0; c--)
@@ -218,28 +218,28 @@ const q = (e) => (t) => (n) => {
218
218
  });
219
219
  const l = [];
220
220
  for (let c = n; c <= o; c++) {
221
- const d = b(c, t.selection);
222
- d && d.length && l.push(c);
221
+ const u = b(c, t.selection);
222
+ u && u.length && l.push(c);
223
223
  }
224
224
  n = l[0], o = l[l.length - 1];
225
225
  const r = b(n, t.selection), s = g(0, t.selection), i = t.doc.resolve(r[r.length - 1].pos);
226
226
  let a;
227
227
  for (let c = o; c >= n; c--) {
228
- const d = b(c, t.selection);
229
- if (d && d.length) {
228
+ const u = b(c, t.selection);
229
+ if (u && u.length) {
230
230
  for (let m = s.length - 1; m >= 0; m--)
231
- if (s[m].pos === d[0].pos) {
232
- a = d[0];
231
+ if (s[m].pos === u[0].pos) {
232
+ a = u[0];
233
233
  break;
234
234
  }
235
235
  if (a)
236
236
  break;
237
237
  }
238
238
  }
239
- const u = t.doc.resolve(a.pos);
240
- return { $anchor: i, $head: u, indexes: l };
239
+ const d = t.doc.resolve(a.pos);
240
+ return { $anchor: i, $head: d, indexes: l };
241
241
  };
242
- function Ee(e, t, n, o = !0) {
242
+ function Ie(e, t, n, o = !0) {
243
243
  const l = k(e.selection);
244
244
  if (!l)
245
245
  return e;
@@ -251,17 +251,17 @@ function Ee(e, t, n, o = !0) {
251
251
  r,
252
252
  s,
253
253
  0
254
- ), a = A(e).replaceWith(
254
+ ), a = T(e).replaceWith(
255
255
  l.pos,
256
256
  l.pos + l.node.nodeSize,
257
257
  i
258
258
  );
259
259
  if (!o)
260
260
  return a;
261
- const u = h.get(i), c = l.start, d = n, m = u.positionAt(u.height - 1, d, i), f = a.doc.resolve(c + m), M = C.colSelection, R = u.positionAt(0, d, i), v = a.doc.resolve(c + R);
261
+ const d = h.get(i), c = l.start, u = n, m = d.positionAt(d.height - 1, u, i), f = a.doc.resolve(c + m), M = C.colSelection, R = d.positionAt(0, u, i), v = a.doc.resolve(c + R);
262
262
  return a.setSelection(M(f, v));
263
263
  }
264
- function Ie(e, t, n, o = !0) {
264
+ function Ee(e, t, n, o = !0) {
265
265
  const l = k(e.selection);
266
266
  if (!l)
267
267
  return e;
@@ -273,17 +273,17 @@ function Ie(e, t, n, o = !0) {
273
273
  r,
274
274
  s,
275
275
  0
276
- ), a = A(e).replaceWith(
276
+ ), a = T(e).replaceWith(
277
277
  l.pos,
278
278
  l.pos + l.node.nodeSize,
279
279
  i
280
280
  );
281
281
  if (!o)
282
282
  return a;
283
- const u = h.get(i), c = l.start, d = n, m = u.positionAt(d, u.width - 1, i), f = a.doc.resolve(c + m), M = C.rowSelection, R = u.positionAt(d, 0, i), v = a.doc.resolve(c + R);
283
+ const d = h.get(i), c = l.start, u = n, m = d.positionAt(u, d.width - 1, i), f = a.doc.resolve(c + m), M = C.rowSelection, R = d.positionAt(u, 0, i), v = a.doc.resolve(c + R);
284
284
  return a.setSelection(M(f, v));
285
285
  }
286
- const T = ie({
286
+ const A = fe({
287
287
  tableGroup: "block",
288
288
  cellContent: "paragraph",
289
289
  cellAttributes: {
@@ -295,8 +295,8 @@ const T = ie({
295
295
  }
296
296
  }
297
297
  }
298
- }), E = w("table", () => ({
299
- ...T.table,
298
+ }), I = w("table", () => ({
299
+ ...A.table,
300
300
  parseMarkdown: {
301
301
  match: (e) => e.type === "table",
302
302
  runner: (e, t, n) => {
@@ -321,8 +321,8 @@ const T = ie({
321
321
  }), e.openNode("table", void 0, { align: o }), e.next(t.content), e.closeNode();
322
322
  }
323
323
  }
324
- })), I = w("table_row", () => ({
325
- ...T.table_row,
324
+ })), E = w("table_row", () => ({
325
+ ...A.table_row,
326
326
  parseMarkdown: {
327
327
  match: (e) => e.type === "tableRow",
328
328
  runner: (e, t, n) => {
@@ -341,7 +341,7 @@ const T = ie({
341
341
  }
342
342
  }
343
343
  })), O = w("table_cell", () => ({
344
- ...T.table_cell,
344
+ ...A.table_cell,
345
345
  parseMarkdown: {
346
346
  match: (e) => e.type === "tableCell" && !e.isHeader,
347
347
  runner: (e, t, n) => {
@@ -355,8 +355,8 @@ const T = ie({
355
355
  e.openNode("tableCell").next(t.content).closeNode();
356
356
  }
357
357
  }
358
- })), ee = w("table_header", () => ({
359
- ...T.table_header,
358
+ })), oe = w("table_header", () => ({
359
+ ...A.table_header,
360
360
  parseMarkdown: {
361
361
  match: (e) => e.type === "tableCell" && !!e.isHeader,
362
362
  runner: (e, t, n) => {
@@ -370,32 +370,32 @@ const T = ie({
370
370
  e.openNode("tableCell"), e.next(t.content), e.closeNode();
371
371
  }
372
372
  }
373
- })), Oe = ke(() => new re(
373
+ })), Oe = z(() => new K(
374
374
  /^\|(?<col>\d+)[xX](?<row>\d+)\|\s$/,
375
375
  (e, t, n, o) => {
376
376
  var i, a;
377
377
  const l = e.doc.resolve(n);
378
- if (!l.node(-1).canReplaceWith(l.index(-1), l.indexAfter(-1), E.type()))
378
+ if (!l.node(-1).canReplaceWith(l.index(-1), l.indexAfter(-1), I.type()))
379
379
  return null;
380
- const r = U(
380
+ const r = q(
381
381
  Number((i = t.groups) == null ? void 0 : i.row),
382
382
  Number((a = t.groups) == null ? void 0 : a.col)
383
383
  ), s = e.tr.replaceRangeWith(n, o, r).scrollIntoView();
384
- return s.setSelection(se.create(s.doc, n + 3));
384
+ return s.setSelection(de.create(s.doc, n + 3));
385
385
  }
386
- )), te = p("GoToPrevTableCell", () => () => L(-1)), oe = p("GoToNextTableCell", () => () => L(1)), ne = p("BreakTable", () => () => (e, t) => {
386
+ )), ne = p("GoToPrevTableCell", () => () => j(-1)), le = p("GoToNextTableCell", () => () => j(1)), re = p("BreakTable", () => () => (e, t) => {
387
387
  if (!y(e))
388
388
  return !1;
389
389
  const { $head: n } = e.selection, o = n.after(), l = e.tr.replaceWith(o, o, W.type().createAndFill());
390
- return l.setSelection(K.near(l.doc.resolve(o), 1)).scrollIntoView(), t == null || t(l), !0;
390
+ return l.setSelection(G.near(l.doc.resolve(o), 1)).scrollIntoView(), t == null || t(l), !0;
391
391
  }), De = p("InsertTable", () => ({ row: e, col: t } = {}) => (n, o) => {
392
- const { selection: l, tr: r } = n, { from: s } = l, i = U(e, t), a = r.replaceSelectionWith(i), u = K.findFrom(a.doc.resolve(s), 1, !0);
393
- return u && (o == null || o(a.setSelection(u))), !0;
392
+ const { selection: l, tr: r } = n, { from: s } = l, i = q(e, t), a = r.replaceSelectionWith(i), d = G.findFrom(a.doc.resolve(s), 1, !0);
393
+ return d && (o == null || o(a.setSelection(d))), !0;
394
394
  }), Pe = p("MoveRow", () => ({ from: e, to: t } = {}) => (n, o) => {
395
- const { tr: l } = n, r = o == null ? void 0 : o(Ie(l, e ?? 0, t ?? 0, !0));
395
+ const { tr: l } = n, r = o == null ? void 0 : o(Ee(l, e ?? 0, t ?? 0, !0));
396
396
  return Boolean(r);
397
397
  }), Be = p("MoveCol", () => ({ from: e, to: t } = {}) => (n, o) => {
398
- const { tr: l } = n, r = o == null ? void 0 : o(Ee(l, e ?? 0, t ?? 0, !0));
398
+ const { tr: l } = n, r = o == null ? void 0 : o(Ie(l, e ?? 0, t ?? 0, !0));
399
399
  return Boolean(r);
400
400
  }), Fe = p("SelectRow", () => (e = 0) => (t, n) => {
401
401
  const { tr: o } = t, l = n == null ? void 0 : n(Ne(e)(o));
@@ -411,43 +411,43 @@ const T = ie({
411
411
  if (!(n instanceof C))
412
412
  return !1;
413
413
  const o = n.isRowSelection(), l = n.isColSelection();
414
- return o && l ? de(e, t) : l ? ue(e, t) : me(e, t);
415
- }), Le = p("AddColBefore", () => () => fe), ze = p("AddColAfter", () => () => pe), Ge = p("AddRowBefore", () => () => (e, t) => {
414
+ return o && l ? pe(e, t) : l ? he(e, t) : ge(e, t);
415
+ }), Le = p("AddColBefore", () => () => be), ze = p("AddColAfter", () => () => Ce), Ge = p("AddRowBefore", () => () => (e, t) => {
416
416
  if (!y(e))
417
417
  return !1;
418
418
  if (t) {
419
- const n = z(e);
420
- t(X(e.tr, n, n.top));
419
+ const n = V(e);
420
+ t(J(e.tr, n, n.top));
421
421
  }
422
422
  return !0;
423
423
  }), je = p("AddRowAfter", () => () => (e, t) => {
424
424
  if (!y(e))
425
425
  return !1;
426
426
  if (t) {
427
- const n = z(e);
428
- t(X(e.tr, n, n.bottom));
427
+ const n = V(e);
428
+ t(J(e.tr, n, n.bottom));
429
429
  }
430
430
  return !0;
431
- }), Ve = p("SetAlign", () => (e = "left") => he("alignment", e)), Ze = G("tableKeymap", {
431
+ }), Ve = p("SetAlign", () => (e = "left") => we("alignment", e)), Ze = L("tableKeymap", {
432
432
  NextCell: {
433
433
  shortcuts: ["Mod-]", "Tab"],
434
434
  command: (e) => {
435
435
  const t = e.get(S);
436
- return () => t.call(oe.key);
436
+ return () => t.call(le.key);
437
437
  }
438
438
  },
439
439
  PrevCell: {
440
440
  shortcuts: ["Mod-[", "Shift-Tab"],
441
441
  command: (e) => {
442
442
  const t = e.get(S);
443
- return () => t.call(te.key);
443
+ return () => t.call(ne.key);
444
444
  }
445
445
  },
446
446
  ExitTable: {
447
447
  shortcuts: ["Mod-Enter"],
448
448
  command: (e) => {
449
449
  const t = e.get(S);
450
- return () => t.call(ne.key);
450
+ return () => t.call(re.key);
451
451
  }
452
452
  }
453
453
  }), N = "footnote_definition", H = "footnoteDefinition", Ue = w("footnote_definition", () => ({
@@ -550,7 +550,7 @@ const T = ie({
550
550
  });
551
551
  }
552
552
  }
553
- })), qe = le.extendSchema((e) => (t) => {
553
+ })), qe = se.extendSchema((e) => (t) => {
554
554
  const n = e(t);
555
555
  return {
556
556
  ...n,
@@ -594,8 +594,8 @@ const T = ie({
594
594
  n.parseMarkdown.runner(o, l, r);
595
595
  return;
596
596
  }
597
- const s = l.label != null ? `${l.label}.` : "•", i = l.checked != null ? Boolean(l.checked) : null, a = l.label != null ? "ordered" : "bullet", u = l.spread != null ? `${l.spread}` : "true";
598
- o.openNode(r, { label: s, listType: a, spread: u, checked: i }), o.next(l.children), o.closeNode();
597
+ const s = l.label != null ? `${l.label}.` : "•", i = l.checked != null ? Boolean(l.checked) : null, a = l.label != null ? "ordered" : "bullet", d = l.spread != null ? `${l.spread}` : "true";
598
+ o.openNode(r, { label: s, listType: a, spread: d, checked: i }), o.next(l.children), o.closeNode();
599
599
  }
600
600
  },
601
601
  toMarkdown: {
@@ -610,14 +610,25 @@ const T = ie({
610
610
  }
611
611
  }
612
612
  };
613
- }), Je = [
613
+ }), Je = z(() => new K(/^\[(?<checked>\s|x)\]\s$/, (e, t, n, o) => {
614
+ var c;
615
+ const l = e.doc.resolve(n);
616
+ let r = 0, s = l.node(r);
617
+ for (; s && s.type.name !== "list_item"; )
618
+ r--, s = l.node(r);
619
+ if (!s || s.attrs.checked != null)
620
+ return null;
621
+ const i = Boolean(((c = t.groups) == null ? void 0 : c.checked) === "x"), a = l.before(r), d = e.tr;
622
+ return d.deleteRange(n, o).setNodeMarkup(a, void 0, { ...s.attrs, checked: i }), d;
623
+ })), Qe = [
614
624
  Me,
615
625
  Ze
616
- ].flat(), Qe = [
617
- Oe
618
- ], Ye = _(() => {
619
- const e = new ce("MILKDOWN_AUTO_INSERT_ZERO_SPACE"), t = (o) => o.type === W.type(), n = (o) => t(o) && o.nodeSize === 2;
620
- return new ae({
626
+ ].flat(), Ye = [
627
+ Oe,
628
+ Je
629
+ ], et = _(() => {
630
+ const e = new ue("MILKDOWN_AUTO_INSERT_ZERO_SPACE"), t = (o) => o.type === W.type(), n = (o) => t(o) && o.nodeSize === 2;
631
+ return new me({
621
632
  key: e,
622
633
  props: {
623
634
  handleDOMEvents: {
@@ -632,25 +643,25 @@ const T = ie({
632
643
  }
633
644
  }
634
645
  });
635
- }), et = _(() => ge({})), tt = _(() => be()), ot = ye(() => Te), nt = [
636
- Ye,
646
+ }), tt = _(() => ke({})), ot = _(() => ye()), nt = ie(() => Ae), lt = [
637
647
  et,
638
648
  tt,
639
- ot
640
- ], lt = [
649
+ ot,
650
+ nt
651
+ ], rt = [
641
652
  qe,
642
- E,
643
653
  I,
644
- ee,
654
+ E,
655
+ oe,
645
656
  O,
646
657
  Ue,
647
658
  Xe,
648
- j,
649
- V
650
- ].flat(), rt = [
651
- oe,
652
- te,
659
+ Z,
660
+ U
661
+ ].flat(), st = [
662
+ le,
653
663
  ne,
664
+ re,
654
665
  De,
655
666
  Pe,
656
667
  Be,
@@ -663,17 +674,17 @@ const T = ie({
663
674
  Le,
664
675
  ze,
665
676
  Ve,
666
- Z
667
- ], gt = [lt, Qe, Je, nt, rt].flat();
677
+ X
678
+ ], bt = [rt, Ye, Qe, lt, st].flat();
668
679
  export {
669
680
  ze as addColAfterCommand,
670
681
  Le as addColBeforeCommand,
671
682
  je as addRowAfterCommand,
672
683
  Ge as addRowBeforeCommand,
673
- X as addRowWithAlignment,
674
- ne as breakTableCommand,
675
- rt as commands,
676
- U as createTable,
684
+ J as addRowWithAlignment,
685
+ re as breakTableCommand,
686
+ st as commands,
687
+ q as createTable,
677
688
  Ke as deleteSelectedCellsCommand,
678
689
  qe as extendListItemSchemaForTask,
679
690
  k as findTable,
@@ -682,35 +693,36 @@ export {
682
693
  Re as getAllCellsInTable,
683
694
  g as getCellsInCol,
684
695
  b as getCellsInRow,
685
- gt as gfm,
686
- oe as goToNextTableCellCommand,
687
- te as goToPrevTableCellCommand,
688
- Qe as inputrules,
696
+ bt as gfm,
697
+ le as goToNextTableCellCommand,
698
+ ne as goToPrevTableCellCommand,
699
+ Ye as inputrules,
689
700
  De as insertTableCommand,
690
701
  Oe as insertTableInputRule,
691
- Je as keymap,
692
- Ee as moveCol,
702
+ Qe as keymap,
703
+ Ie as moveCol,
693
704
  Be as moveColCommand,
694
- Ie as moveRow,
705
+ Ee as moveRow,
695
706
  Pe as moveRowCommand,
696
- nt as plugins,
697
- lt as schema,
707
+ lt as plugins,
708
+ rt as schema,
698
709
  xe as selectCol,
699
710
  He as selectColCommand,
700
- q as selectLine,
711
+ Q as selectLine,
701
712
  Ne as selectRow,
702
713
  Fe as selectRowCommand,
703
714
  ve as selectTable,
704
715
  We as selectTableCommand,
705
716
  Ve as setAlignCommand,
706
- j as strikethroughAttr,
717
+ Z as strikethroughAttr,
707
718
  Me as strikethroughKeymap,
708
- V as strikethroughSchema,
719
+ U as strikethroughSchema,
709
720
  O as tableCellSchema,
710
- ee as tableHeaderSchema,
721
+ oe as tableHeaderSchema,
711
722
  Ze as tableKeymap,
712
- I as tableRowSchema,
713
- E as tableSchema,
714
- Z as toggleStrikethroughCommand
723
+ E as tableRowSchema,
724
+ I as tableSchema,
725
+ X as toggleStrikethroughCommand,
726
+ Je as wrapInTaskListInputRule
715
727
  };
716
728
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../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 { commandsCtx } from '@milkdown/core'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\n\n/// HTML attributes for the strikethrough mark.\nexport const strikethroughAttr = $markAttr('strike_through')\n\n/// Strikethrough mark schema.\nexport const strikethroughSchema = $markSchema('strike_through', ctx => ({\n inclusive: false,\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\n/// A command to toggle the strikethrough mark.\nexport const toggleStrikethroughCommand = $command('ToggleStrikeThrough', () => () => toggleMark(strikethroughSchema.type()))\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","/* 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 { 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 = (rowsCount = 3, colsCount = 3): Node => {\n const cells = Array(colsCount)\n .fill(0)\n .map(() => tableCellSchema.type().createAndFill()!)\n\n const headerCells = Array(colsCount)\n .fill(0)\n .map(() => tableHeaderSchema.type().createAndFill()!)\n\n const rows = Array(rowsCount)\n .fill(0)\n .map((_, i) => tableRowSchema.type().create(null, i === 0 ? headerCells : cells))\n\n return tableSchema.type().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(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().createAndFill({ alignment: headerCol?.attrs.alignment }) as Node\n })\n\n tr.insert(rowPos, tableRowSchema.type().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 { 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}))\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\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\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\n/// A input rule for creating table.\n/// For example, `|2x2|` will create a 2x2 table.\nexport const insertTableInputRule = $inputRule(() => 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()))\n return null\n\n const tableNode = createTable(\n Number(match.groups?.row),\n Number(match.groups?.col),\n )\n const tr = state.tr.replaceRangeWith(start, end, tableNode).scrollIntoView()\n return tr.setSelection(TextSelection.create(tr.doc, start + 3))\n },\n))\n\n/// A command for moving cursor to previous cell.\nexport const goToPrevTableCellCommand = $command('GoToPrevTableCell', () => () => goToNextCell(-1))\n\n/// A command for moving cursor to next cell.\nexport const goToNextTableCellCommand = $command('GoToNextTableCell', () => () => goToNextCell(1))\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', () => () => (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().createAndFill()!)\n\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1)).scrollIntoView()\n dispatch?.(tr)\n return true\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', () => ({ row, col }: { row?: number; col?: number } = {}) => (state, dispatch) => {\n const { selection, tr } = state\n const { from } = selection\n const table = createTable(row, col)\n const _tr = tr.replaceSelectionWith(table)\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true)\n if (sel)\n dispatch?.(_tr.setSelection(sel))\n\n return true\n})\n\n/// 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\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\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\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\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\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\n/// A command for adding a column before the current column.\nexport const addColBeforeCommand = $command('AddColBefore', () => () => addColumnBefore)\n\n/// A command for adding a column after the current column.\nexport const addColAfterCommand = $command('AddColAfter', () => () => addColumnAfter)\n\n/// A command for adding a row before the current row.\nexport const addRowBeforeCommand = $command('AddRowBefore', () => () => (state, dispatch) => {\n if (!isInTable(state))\n return false\n if (dispatch) {\n const rect = selectedRect(state)\n dispatch(addRowWithAlignment(state.tr, rect, rect.top))\n }\n return true\n})\n\n/// A command for adding a row after the current row.\nexport const addRowAfterCommand = $command('AddRowAfter', () => () => (state, dispatch) => {\n if (!isInTable(state))\n return false\n if (dispatch) {\n const rect = selectedRect(state)\n dispatch(addRowWithAlignment(state.tr, rect, rect.bottom))\n }\n return true\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\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\nexport * from './utils'\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\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","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { listItemSchema } from '@milkdown/preset-commonmark'\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","/* 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 } from '../node'\n\n/// @internal\nexport const inputrules: MilkdownPlugin[] = [\n insertTableInputRule,\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'\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(() => {\n const pluginKey = new PluginKey('MILKDOWN_AUTO_INSERT_ZERO_SPACE')\n\n const isParagraph = (node: Node) => node.type === paragraphSchema.type()\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { columnResizing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\n\n/// This plugin is wrapping the `columnResizing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).\nexport const columnResizingPlugin = $prose(() => columnResizing({}))\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { tableEditing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\n\n/// This plugin is wrapping the `tableEditing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).\nexport const tableEditingPlugin = $prose(() => tableEditing())\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport remarkGFM from 'remark-gfm'\n\n/// This plugin is wrapping the [remark-gfm](https://github.com/remarkjs/remark-gfm).\nexport const remarkGFMPlugin = $remark(() => remarkGFM)\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { autoInsertZeroSpaceInTablePlugin, columnResizingPlugin, remarkGFMPlugin, tableEditingPlugin } from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n autoInsertZeroSpaceInTablePlugin,\n columnResizingPlugin,\n tableEditingPlugin,\n remarkGFMPlugin,\n]\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 './composed'\n\n/// The GFM preset, includes all the plugins.\nexport const gfm = [schema, inputrules, keymap, plugins, commands].flat()\n"],"names":["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","result","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","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
+ {"version":3,"file":"index.es.js","sources":["../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 { commandsCtx } from '@milkdown/core'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\n\n/// HTML attributes for the strikethrough mark.\nexport const strikethroughAttr = $markAttr('strike_through')\n\n/// Strikethrough mark schema.\nexport const strikethroughSchema = $markSchema('strike_through', ctx => ({\n inclusive: false,\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\n/// A command to toggle the strikethrough mark.\nexport const toggleStrikethroughCommand = $command('ToggleStrikeThrough', () => () => toggleMark(strikethroughSchema.type()))\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","/* 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 { 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 = (rowsCount = 3, colsCount = 3): Node => {\n const cells = Array(colsCount)\n .fill(0)\n .map(() => tableCellSchema.type().createAndFill()!)\n\n const headerCells = Array(colsCount)\n .fill(0)\n .map(() => tableHeaderSchema.type().createAndFill()!)\n\n const rows = Array(rowsCount)\n .fill(0)\n .map((_, i) => tableRowSchema.type().create(null, i === 0 ? headerCells : cells))\n\n return tableSchema.type().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(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().createAndFill({ alignment: headerCol?.attrs.alignment }) as Node\n })\n\n tr.insert(rowPos, tableRowSchema.type().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 { 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}))\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\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\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\n/// A input rule for creating table.\n/// For example, `|2x2|` will create a 2x2 table.\nexport const insertTableInputRule = $inputRule(() => 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()))\n return null\n\n const tableNode = createTable(\n Number(match.groups?.row),\n Number(match.groups?.col),\n )\n const tr = state.tr.replaceRangeWith(start, end, tableNode).scrollIntoView()\n return tr.setSelection(TextSelection.create(tr.doc, start + 3))\n },\n))\n\n/// A command for moving cursor to previous cell.\nexport const goToPrevTableCellCommand = $command('GoToPrevTableCell', () => () => goToNextCell(-1))\n\n/// A command for moving cursor to next cell.\nexport const goToNextTableCellCommand = $command('GoToNextTableCell', () => () => goToNextCell(1))\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', () => () => (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().createAndFill()!)\n\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1)).scrollIntoView()\n dispatch?.(tr)\n return true\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', () => ({ row, col }: { row?: number; col?: number } = {}) => (state, dispatch) => {\n const { selection, tr } = state\n const { from } = selection\n const table = createTable(row, col)\n const _tr = tr.replaceSelectionWith(table)\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true)\n if (sel)\n dispatch?.(_tr.setSelection(sel))\n\n return true\n})\n\n/// 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\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\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\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\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\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\n/// A command for adding a column before the current column.\nexport const addColBeforeCommand = $command('AddColBefore', () => () => addColumnBefore)\n\n/// A command for adding a column after the current column.\nexport const addColAfterCommand = $command('AddColAfter', () => () => addColumnAfter)\n\n/// A command for adding a row before the current row.\nexport const addRowBeforeCommand = $command('AddRowBefore', () => () => (state, dispatch) => {\n if (!isInTable(state))\n return false\n if (dispatch) {\n const rect = selectedRect(state)\n dispatch(addRowWithAlignment(state.tr, rect, rect.top))\n }\n return true\n})\n\n/// A command for adding a row after the current row.\nexport const addRowAfterCommand = $command('AddRowAfter', () => () => (state, dispatch) => {\n if (!isInTable(state))\n return false\n if (dispatch) {\n const rect = selectedRect(state)\n dispatch(addRowWithAlignment(state.tr, rect, rect.bottom))\n }\n return true\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\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\nexport * from './utils'\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\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","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { $nodeSchema } from '@milkdown/utils'\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","/* 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'\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\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","/* 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'\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(() => {\n const pluginKey = new PluginKey('MILKDOWN_AUTO_INSERT_ZERO_SPACE')\n\n const isParagraph = (node: Node) => node.type === paragraphSchema.type()\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { columnResizing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\n\n/// This plugin is wrapping the `columnResizing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).\nexport const columnResizingPlugin = $prose(() => columnResizing({}))\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { tableEditing } from '@milkdown/prose/tables'\nimport { $prose } from '@milkdown/utils'\n\n/// This plugin is wrapping the `tableEditing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).\nexport const tableEditingPlugin = $prose(() => tableEditing())\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport remarkGFM from 'remark-gfm'\n\n/// This plugin is wrapping the [remark-gfm](https://github.com/remarkjs/remark-gfm).\nexport const remarkGFMPlugin = $remark(() => remarkGFM)\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { autoInsertZeroSpaceInTablePlugin, columnResizingPlugin, remarkGFMPlugin, tableEditingPlugin } from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n autoInsertZeroSpaceInTablePlugin,\n columnResizingPlugin,\n tableEditingPlugin,\n remarkGFMPlugin,\n]\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 './composed'\n\n/// The GFM preset, includes all the plugins.\nexport const gfm = [schema, inputrules, keymap, plugins, commands].flat()\n"],"names":["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","result","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,2 +1,3 @@
1
1
  export declare const extendListItemSchemaForTask: import("@milkdown/ctx").MilkdownPlugin;
2
+ export declare const wrapInTaskListInputRule: import("@milkdown/utils").$InputRule;
2
3
  //# sourceMappingURL=task-list-item.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-list-item.d.ts","sourceRoot":"","sources":["../../src/node/task-list-item.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B,wCAkFtC,CAAA"}
1
+ {"version":3,"file":"task-list-item.d.ts","sourceRoot":"","sources":["../../src/node/task-list-item.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,2BAA2B,wCAkFtC,CAAA;AAIF,eAAO,MAAM,uBAAuB,sCAuBlC,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@milkdown/preset-gfm",
3
3
  "type": "module",
4
- "version": "7.0.0",
4
+ "version": "7.1.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -31,15 +31,15 @@
31
31
  "dependencies": {
32
32
  "remark-gfm": "^3.0.0",
33
33
  "tslib": "^2.4.0",
34
- "@milkdown/exception": "7.0.0",
35
- "@milkdown/utils": "7.0.0"
34
+ "@milkdown/exception": "7.1.0",
35
+ "@milkdown/utils": "7.1.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@milkdown/core": "7.0.0",
39
- "@milkdown/ctx": "7.0.0",
40
- "@milkdown/preset-commonmark": "7.0.0",
41
- "@milkdown/prose": "7.0.0",
42
- "@milkdown/transformer": "7.0.0"
38
+ "@milkdown/core": "7.1.0",
39
+ "@milkdown/ctx": "7.1.0",
40
+ "@milkdown/preset-commonmark": "7.1.0",
41
+ "@milkdown/prose": "7.1.0",
42
+ "@milkdown/transformer": "7.1.0"
43
43
  },
44
44
  "nx": {
45
45
  "targets": {
@@ -1,8 +1,9 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import type { MilkdownPlugin } from '@milkdown/ctx'
3
- import { insertTableInputRule } from '../node'
3
+ import { insertTableInputRule, wrapInTaskListInputRule } from '../node'
4
4
 
5
5
  /// @internal
6
6
  export const inputrules: MilkdownPlugin[] = [
7
7
  insertTableInputRule,
8
+ wrapInTaskListInputRule,
8
9
  ]
@@ -1,6 +1,8 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import { expectDomTypeError } from '@milkdown/exception'
3
3
  import { listItemSchema } from '@milkdown/preset-commonmark'
4
+ import { InputRule } from '@milkdown/prose/inputrules'
5
+ import { $inputRule } from '@milkdown/utils'
4
6
 
5
7
  /// This schema extends the [list item](/preset-commonmark#list-item) schema and add task list support for it.
6
8
  export const extendListItemSchemaForTask = listItemSchema.extendSchema((prev) => {
@@ -86,3 +88,30 @@ export const extendListItemSchemaForTask = listItemSchema.extendSchema((prev) =>
86
88
  }
87
89
  }
88
90
  })
91
+
92
+ /// Input rule for wrapping a block in task list node.
93
+ /// Users can type `[ ] ` or `[x] ` to wrap the block in task list node with checked status.
94
+ export const wrapInTaskListInputRule = $inputRule(() => {
95
+ return new InputRule(/^\[(?<checked>\s|x)\]\s$/, (state, match, start, end) => {
96
+ const pos = state.doc.resolve(start)
97
+ let depth = 0
98
+ let node = pos.node(depth)
99
+ while (node && node.type.name !== 'list_item') {
100
+ depth--
101
+ node = pos.node(depth)
102
+ }
103
+
104
+ if (!node || node.attrs.checked != null)
105
+ return null
106
+
107
+ const checked = Boolean(match.groups?.checked === 'x')
108
+
109
+ const finPos = pos.before(depth)
110
+ const tr = state.tr
111
+
112
+ tr.deleteRange(start, end)
113
+ .setNodeMarkup(finPos, undefined, { ...node.attrs, checked })
114
+
115
+ return tr
116
+ })
117
+ })