@domternal/core 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1017,6 +1017,27 @@ var deleteSelection = () => ({ tr, dispatch }) => {
1017
1017
  dispatch(tr);
1018
1018
  return true;
1019
1019
  };
1020
+ var LIST_WRAPPER_TYPES = /* @__PURE__ */ new Set(["bulletList", "orderedList", "taskList"]);
1021
+ function isEmptyPlaceholderList(node) {
1022
+ if (!LIST_WRAPPER_TYPES.has(node.type.name) || node.childCount !== 1) return false;
1023
+ const item = node.child(0);
1024
+ return item.childCount === 1 && item.child(0).type.name === "paragraph" && item.child(0).content.size === 0;
1025
+ }
1026
+ function stripFitterArtifacts(node) {
1027
+ if (!node.isBlock || node.isLeaf) return node;
1028
+ const children = [];
1029
+ node.forEach((child) => children.push(stripFitterArtifacts(child)));
1030
+ const kept = [];
1031
+ children.forEach((cur, i) => {
1032
+ const next = children[i + 1];
1033
+ if (isEmptyPlaceholderList(cur) && next && LIST_WRAPPER_TYPES.has(next.type.name) && next.type !== cur.type) {
1034
+ return;
1035
+ }
1036
+ kept.push(cur);
1037
+ });
1038
+ const unchanged = kept.length === node.childCount && kept.every((c, i) => c === node.child(i));
1039
+ return unchanged ? node : node.copy(Fragment.fromArray(kept));
1040
+ }
1020
1041
  function isJSONContent(content) {
1021
1042
  return typeof content === "object" && content !== null && "type" in content && typeof content.type === "string";
1022
1043
  }
@@ -1039,7 +1060,7 @@ function parseHTMLContent(html, schema, options) {
1039
1060
  const element = document.createElement("div");
1040
1061
  element.innerHTML = html;
1041
1062
  const parser = DOMParser.fromSchema(schema);
1042
- return parser.parse(element, options?.parseOptions);
1063
+ return stripFitterArtifacts(parser.parse(element, options?.parseOptions));
1043
1064
  }
1044
1065
  function createDocument(content, schema, options) {
1045
1066
  if (content === null || content === void 0 || content === "") {
@@ -4142,12 +4163,12 @@ function defaultBubbleContexts(editor) {
4142
4163
 
4143
4164
  // src/utils/insertAsListItemChild.ts
4144
4165
  var LIST_ITEM_TYPES3 = /* @__PURE__ */ new Set(["listItem", "taskItem"]);
4145
- var LIST_WRAPPER_TYPES = /* @__PURE__ */ new Set(["bulletList", "orderedList", "taskList"]);
4166
+ var LIST_WRAPPER_TYPES2 = /* @__PURE__ */ new Set(["bulletList", "orderedList", "taskList"]);
4146
4167
  function insertAsListItemChild(args) {
4147
4168
  const { tr, wrapperPos, targetItemPos, blockNode, sourceRange, childIndex } = args;
4148
4169
  if (wrapperPos < 0 || wrapperPos >= tr.doc.content.size) return { ok: false };
4149
4170
  const wrapper = tr.doc.nodeAt(wrapperPos);
4150
- if (!wrapper || !LIST_WRAPPER_TYPES.has(wrapper.type.name)) return { ok: false };
4171
+ if (!wrapper || !LIST_WRAPPER_TYPES2.has(wrapper.type.name)) return { ok: false };
4151
4172
  if (wrapper.childCount === 0) return { ok: false };
4152
4173
  let targetItem;
4153
4174
  let targetItemStart;
@@ -5928,6 +5949,50 @@ var CodeBlock = Node2.create({
5928
5949
  ];
5929
5950
  }
5930
5951
  });
5952
+ var LIST_ITEM_TYPES4 = /* @__PURE__ */ new Set(["listItem", "taskItem"]);
5953
+ function liftCrossTypeListItem(state, dispatch) {
5954
+ const { $from } = state.selection;
5955
+ if (!state.selection.empty) return false;
5956
+ let itemDepth = -1;
5957
+ for (let d = $from.depth; d > 0; d--) {
5958
+ if (LIST_ITEM_TYPES4.has($from.node(d).type.name)) {
5959
+ itemDepth = d;
5960
+ break;
5961
+ }
5962
+ }
5963
+ if (itemDepth < 4) return false;
5964
+ const item = $from.node(itemDepth);
5965
+ const wrapper = $from.node(itemDepth - 1);
5966
+ const parentItem = $from.node(itemDepth - 2);
5967
+ if (!LIST_ITEM_TYPES4.has(parentItem.type.name)) return false;
5968
+ if (parentItem.type === item.type) return false;
5969
+ const parentWrapper = $from.node(itemDepth - 3);
5970
+ const grandParent = $from.node(itemDepth - 4);
5971
+ const gpIndex = $from.index(itemDepth - 4);
5972
+ if (!grandParent.canReplaceWith(gpIndex + 1, gpIndex + 1, wrapper.type)) return false;
5973
+ if (!dispatch) return true;
5974
+ const onlyChild = wrapper.childCount === 1;
5975
+ const removeFrom = onlyChild ? $from.before(itemDepth - 1) : $from.before(itemDepth);
5976
+ const removeTo = onlyChild ? $from.after(itemDepth - 1) : $from.after(itemDepth);
5977
+ const parentIsLast = $from.index(itemDepth - 3) === parentWrapper.childCount - 1;
5978
+ const tr = state.tr;
5979
+ tr.delete(removeFrom, removeTo);
5980
+ const newList = wrapper.type.create(wrapper.attrs, item);
5981
+ if (parentIsLast) {
5982
+ const insertAt = tr.mapping.map($from.after(itemDepth - 3));
5983
+ tr.insert(insertAt, newList);
5984
+ tr.setSelection(Selection.near(tr.doc.resolve(insertAt + 2)));
5985
+ } else {
5986
+ const splitAt = tr.mapping.map($from.after(itemDepth - 2));
5987
+ tr.split(splitAt, 1);
5988
+ tr.insert(splitAt + 1, newList);
5989
+ tr.setSelection(Selection.near(tr.doc.resolve(splitAt + 2)));
5990
+ }
5991
+ dispatch(tr.scrollIntoView());
5992
+ return true;
5993
+ }
5994
+
5995
+ // src/extensions/ListKeymap.ts
5931
5996
  var LIST_GROUP_TYPES = /* @__PURE__ */ new Set(["bulletList", "orderedList", "taskList"]);
5932
5997
  function getListItemContext(editor, listItemName) {
5933
5998
  const { state, view } = editor;
@@ -5969,6 +6034,7 @@ var ListKeymap = Extension.create({
5969
6034
  if (!this.editor) return false;
5970
6035
  const ctx = getListItemContext(this.editor, this.options.listItem);
5971
6036
  if (!ctx) return false;
6037
+ if (liftCrossTypeListItem(ctx.state, ctx.view.dispatch)) return true;
5972
6038
  return liftListItem(ctx.listItemType)(ctx.state, ctx.view.dispatch);
5973
6039
  },
5974
6040
  // Backspace at start of list item to lift
@@ -6022,6 +6088,7 @@ var ListKeymap = Extension.create({
6022
6088
  if (firstChild?.isTextblock) {
6023
6089
  const posInListItem = $from.pos - $from.start(listItemDepth);
6024
6090
  if (posInListItem <= 1) {
6091
+ if (liftCrossTypeListItem(state, view.dispatch)) return true;
6025
6092
  return liftListItem(listItemType)(state, view.dispatch);
6026
6093
  }
6027
6094
  }
@@ -6068,7 +6135,22 @@ var ListItem = Node2.create({
6068
6135
  if (splitBlock(state, view.dispatch)) return true;
6069
6136
  }
6070
6137
  }
6071
- if (splitListItem(this.nodeType)(state, view.dispatch)) return true;
6138
+ const item = $from.node(-1);
6139
+ const hasChildren = item.childCount > 1;
6140
+ const atEnd = $from.parentOffset === $from.parent.content.size;
6141
+ const labelEmpty = $from.parent.content.size === 0;
6142
+ if (!ctx?.isInChildrenZone && hasChildren && atEnd && !labelEmpty) {
6143
+ const newItem = this.nodeType.createAndFill();
6144
+ if (newItem) {
6145
+ const insertAt = $from.after($from.depth - 1);
6146
+ const tr = state.tr.insert(insertAt, newItem);
6147
+ tr.setSelection(Selection.near(tr.doc.resolve(insertAt + 2)));
6148
+ view.dispatch(tr.scrollIntoView());
6149
+ return true;
6150
+ }
6151
+ }
6152
+ const skipSplit = !ctx?.isInChildrenZone && labelEmpty && hasChildren;
6153
+ if (!skipSplit && splitListItem(this.nodeType)(state, view.dispatch)) return true;
6072
6154
  const listDepth = $from.depth - 2;
6073
6155
  const taskItemType = state.schema.nodes["taskItem"];
6074
6156
  if ($from.parent.content.size === 0 && listDepth > 0 && taskItemType && $from.node(listDepth - 1).type === taskItemType) {
@@ -6077,9 +6159,9 @@ var ListItem = Node2.create({
6077
6159
  tr.delete($from.before(delDepth), $from.after(delDepth));
6078
6160
  const taskItemDepth = listDepth - 1;
6079
6161
  const end = tr.mapping.map($from.after(taskItemDepth));
6080
- const item = taskItemType.createAndFill();
6081
- if (item) {
6082
- tr.insert(end, item);
6162
+ const item2 = taskItemType.createAndFill();
6163
+ if (item2) {
6164
+ tr.insert(end, item2);
6083
6165
  tr.setSelection(Selection.near(tr.doc.resolve(end + 2)));
6084
6166
  view.dispatch(tr.scrollIntoView());
6085
6167
  return true;
@@ -6208,16 +6290,20 @@ var OrderedList = Node2.create({
6208
6290
  return {
6209
6291
  start: {
6210
6292
  default: 1,
6293
+ // Clamp to a finite integer >= 1. Without this, a malformed
6294
+ // `start="abc"` parses to NaN; `JSON.stringify(NaN)` is `null`, so
6295
+ // getJSON() serializes `start: null` and a save/load cycle
6296
+ // permanently dirties the document (reloads as `<ol start="null">`).
6211
6297
  parseHTML: (element) => {
6212
- const start = element.getAttribute("start");
6213
- return start ? parseInt(start, 10) : 1;
6298
+ const n = parseInt(element.getAttribute("start") ?? "", 10);
6299
+ return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 1;
6214
6300
  },
6215
6301
  renderHTML: (attributes) => {
6216
6302
  const start = attributes["start"];
6217
- if (start === 1) {
6303
+ if (!Number.isFinite(start) || start <= 1) {
6218
6304
  return {};
6219
6305
  }
6220
- return { start: String(start) };
6306
+ return { start: String(Math.floor(start)) };
6221
6307
  }
6222
6308
  }
6223
6309
  };
@@ -6296,8 +6382,8 @@ var OrderedList = Node2.create({
6296
6382
  guard: notInsideList,
6297
6383
  joinForward: true,
6298
6384
  getAttributes: (match) => {
6299
- const num = match[1];
6300
- return { start: num ? parseInt(num, 10) : 1 };
6385
+ const n = parseInt(match[1] ?? "", 10);
6386
+ return { start: Number.isFinite(n) && n >= 1 ? Math.floor(n) : 1 };
6301
6387
  }
6302
6388
  })
6303
6389
  ];
@@ -6569,7 +6655,10 @@ var TaskItem = Node2.create({
6569
6655
  keepOnSplit: false,
6570
6656
  parseHTML: (element) => {
6571
6657
  const dataChecked = element.getAttribute("data-checked");
6572
- return dataChecked === "true" || dataChecked === "";
6658
+ if (dataChecked !== null) {
6659
+ return dataChecked.toLowerCase() === "true" || dataChecked === "";
6660
+ }
6661
+ return element.querySelector('input[type="checkbox"]')?.hasAttribute("checked") ?? false;
6573
6662
  },
6574
6663
  renderHTML: (attributes) => ({
6575
6664
  "data-checked": attributes["checked"] ? "true" : "false"
@@ -6582,6 +6671,14 @@ var TaskItem = Node2.create({
6582
6671
  {
6583
6672
  tag: `li[data-type="${this.name}"]`,
6584
6673
  priority: 51
6674
+ },
6675
+ // GFM / markdown task lists: `<li class="task-list-item">` carries no
6676
+ // data-type. Priority 51 keeps it ahead of the generic `li` (listItem,
6677
+ // 50); class-scoped so it never swallows ordinary bullet items. The
6678
+ // `checked` attribute is derived from the descendant `<input>` above.
6679
+ {
6680
+ tag: "li.task-list-item",
6681
+ priority: 51
6585
6682
  }
6586
6683
  ];
6587
6684
  },
@@ -6667,7 +6764,22 @@ var TaskItem = Node2.create({
6667
6764
  return true;
6668
6765
  }
6669
6766
  }
6670
- if (splitListItem(this.nodeType, { checked: false })(state, view.dispatch)) return true;
6767
+ const item = $from.node(-1);
6768
+ const hasChildren = item.childCount > 1;
6769
+ const labelEmpty = $from.parent.content.size === 0;
6770
+ const atEnd = $from.parentOffset === $from.parent.content.size;
6771
+ if (!ctx?.isInChildrenZone && hasChildren && atEnd && !labelEmpty) {
6772
+ const newItem = this.nodeType.createAndFill({ checked: false });
6773
+ if (newItem) {
6774
+ const insertAt = $from.after($from.depth - 1);
6775
+ const tr = state.tr.insert(insertAt, newItem);
6776
+ tr.setSelection(Selection.near(tr.doc.resolve(insertAt + 2)));
6777
+ view.dispatch(tr.scrollIntoView());
6778
+ return true;
6779
+ }
6780
+ }
6781
+ const skipSplit = !ctx?.isInChildrenZone && labelEmpty && hasChildren;
6782
+ if (!skipSplit && splitListItem(this.nodeType, { checked: false })(state, view.dispatch)) return true;
6671
6783
  if ($from.parent.content.size === 0) {
6672
6784
  const listItemType = state.schema.nodes["listItem"];
6673
6785
  if (listItemType) {
@@ -6714,9 +6826,11 @@ var TaskItem = Node2.create({
6714
6826
  },
6715
6827
  "Shift-Tab": () => {
6716
6828
  if (!this.editor || !this.nodeType) return false;
6717
- const { $from } = this.editor.state.selection;
6829
+ const { state, view } = this.editor;
6830
+ const { $from } = state.selection;
6718
6831
  if ($from.depth < 1 || $from.node(-1).type !== this.nodeType) return false;
6719
- return liftListItem(this.nodeType)(this.editor.state, this.editor.view.dispatch);
6832
+ if (liftCrossTypeListItem(state, view.dispatch)) return true;
6833
+ return liftListItem(this.nodeType)(state, view.dispatch);
6720
6834
  },
6721
6835
  Backspace: () => {
6722
6836
  if (!this.editor || !this.nodeType) return false;
@@ -6738,6 +6852,7 @@ var TaskItem = Node2.create({
6738
6852
  }
6739
6853
  if (taskItemDepth === -1) return false;
6740
6854
  if ($from.index(taskItemDepth) !== 0) return false;
6855
+ if (liftCrossTypeListItem(state, view.dispatch)) return true;
6741
6856
  return liftListItem(this.nodeType)(state, view.dispatch);
6742
6857
  },
6743
6858
  "Mod-Enter": () => {
@@ -6764,6 +6879,13 @@ var TaskList = Node2.create({
6764
6879
  tag: `ul[data-type="${this.name}"]`,
6765
6880
  priority: 51
6766
6881
  // Higher priority than regular bulletList
6882
+ },
6883
+ // GFM / markdown task lists: `<ul class="contains-task-list">`. Priority
6884
+ // 51 keeps it ahead of the generic `ul` (bulletList, 50); class-scoped so
6885
+ // it only matches real GFM task-list containers, not ordinary bullets.
6886
+ {
6887
+ tag: "ul.contains-task-list",
6888
+ priority: 51
6767
6889
  }
6768
6890
  ];
6769
6891
  },
@@ -8024,12 +8146,12 @@ var Placeholder = Extension.create({
8024
8146
  ];
8025
8147
  }
8026
8148
  });
8027
- var LIST_ITEM_TYPES4 = /* @__PURE__ */ new Set(["listItem", "taskItem"]);
8028
- var LIST_WRAPPER_TYPES2 = /* @__PURE__ */ new Set(["bulletList", "orderedList", "taskList"]);
8149
+ var LIST_ITEM_TYPES5 = /* @__PURE__ */ new Set(["listItem", "taskItem"]);
8150
+ var LIST_WRAPPER_TYPES3 = /* @__PURE__ */ new Set(["bulletList", "orderedList", "taskList"]);
8029
8151
  function isCursorInsideListItem(state) {
8030
8152
  const { $from } = state.selection;
8031
8153
  for (let d = $from.depth; d > 0; d--) {
8032
- if (LIST_ITEM_TYPES4.has($from.node(d).type.name)) return true;
8154
+ if (LIST_ITEM_TYPES5.has($from.node(d).type.name)) return true;
8033
8155
  }
8034
8156
  return false;
8035
8157
  }
@@ -8060,7 +8182,7 @@ function indentBlockAsListChild(state, dispatch) {
8060
8182
  }
8061
8183
  if (blockIndex === 0) return false;
8062
8184
  const prevSibling = state.doc.child(blockIndex - 1);
8063
- if (!LIST_WRAPPER_TYPES2.has(prevSibling.type.name)) return false;
8185
+ if (!LIST_WRAPPER_TYPES3.has(prevSibling.type.name)) return false;
8064
8186
  let wrapperPos = 0;
8065
8187
  for (let i = 0; i < blockIndex - 1; i++) {
8066
8188
  wrapperPos += state.doc.child(i).nodeSize;
@@ -8084,7 +8206,7 @@ function outdentBlockFromListItem(state, dispatch) {
8084
8206
  const { $from } = selection;
8085
8207
  let listItemDepth = -1;
8086
8208
  for (let d = $from.depth; d > 0; d--) {
8087
- if (LIST_ITEM_TYPES4.has($from.node(d).type.name)) {
8209
+ if (LIST_ITEM_TYPES5.has($from.node(d).type.name)) {
8088
8210
  listItemDepth = d;
8089
8211
  break;
8090
8212
  }
@@ -8864,7 +8986,7 @@ var BlockColor = Extension.create({
8864
8986
  };
8865
8987
  }
8866
8988
  });
8867
- var Selection4 = Extension.create({
8989
+ var Selection5 = Extension.create({
8868
8990
  name: "selection",
8869
8991
  addStorage() {
8870
8992
  return {
@@ -10363,6 +10485,6 @@ var StarterKit = Extension.create({
10363
10485
  // src/index.ts
10364
10486
  var VERSION = "0.1.0";
10365
10487
 
10366
- export { BaseKeymap, BlockColor, Blockquote, Bold, BubbleMenu, BulletList, CanChecker, ChainBuilder, CharacterCount, ClearFormatting, Code, CodeBlock, CommandManager, DEFAULT_BLOCK_COLORS, DEFAULT_BLOCK_COLOR_TYPES, DEFAULT_HIGHLIGHT_COLORS, DEFAULT_NOTION_COLOR_PALETTE, DEFAULT_TEXT_COLORS, Document, Dropcursor, Editor, EventEmitter, Extension, ExtensionManager, FLOATING_MENU_META, FLOATING_MENU_NO_FOCUS, FloatingMenuController, Focus, FontFamily, FontSize, Gapcursor, HardBreak, Heading, Highlight, History, HorizontalRule, InvisibleChars, Italic, LIST_ITEM_TYPE_NAMES, LineHeight, Link, LinkPopover, ListIndent, ListItem, ListKeymap, Mark, Node2 as Node, NotionColorPicker, OrderedList, Paragraph, Placeholder, Selection4 as Selection, SelectionDecoration, StarterKit, Strike, Subscript, Superscript, TaskItem, TaskList, Text, TextAlign, TextColor, TextStyle, ToolbarController, TrailingNode, Typography, Underline, UniqueID, VERSION, applyInlineStyles, autolinkPlugin, autolinkPluginKey, blur, bubbleMenuPluginKey, buildCommandProps, builtInCommands, callOrReturn, characterCountPluginKey, clearContent, copyThemeClass, createAccumulatingDispatch, createBubbleMenuPlugin, createCanChecker, createChainBuilder, createDocument, createFloatingMenuPlugin, defaultBlockAt, defaultBubbleContexts, defaultFloatingMenuShouldShow, defaultIcons, deleteSelection, findChildren, findListItemAncestorDepth, findParentNode, floatingMenuPluginKey, focus, focusPluginKey, generateHTML, generateJSON, generateText, getListItemCursorContext, getMarkRange, groupFloatingMenuItems, hideFloatingMenu, indentBlockAsListChild, inlineStyles, insertAsListItemChild, insertChildrenZoneSibling, insertContent, insertText, invisibleCharsPluginKey, isDocumentEmpty, isInListItemLabel, isInsideListItem, isNodeEmpty, isValidUrl, lift, liftCurrentListItem, liftEmptyChildrenZoneParagraph, linkClickPlugin, linkClickPluginKey, linkExitPlugin, linkExitPluginKey, linkPastePlugin, linkPastePluginKey, markInputRule, markInputRulePatterns, nodeInputRule, outdentBlockFromListItem, placeholderPluginKey, positionFloating, positionFloatingOnce, resetAttributes, selectAll, selectNodeBackward, selectionDecorationPluginKey, setBlockType, setContent, setMark, showFloatingMenu, splitListForInsert, stripInlineColorConflicts, textInputRule, textblockTypeInputRule, toggleBlockType, toggleList, toggleMark, toggleWrap, uniqueIDPluginKey, unsetAllMarks, unsetMark, updateAttributes, wrapIn, wrappingInputRule, writeToClipboard };
10488
+ export { BaseKeymap, BlockColor, Blockquote, Bold, BubbleMenu, BulletList, CanChecker, ChainBuilder, CharacterCount, ClearFormatting, Code, CodeBlock, CommandManager, DEFAULT_BLOCK_COLORS, DEFAULT_BLOCK_COLOR_TYPES, DEFAULT_HIGHLIGHT_COLORS, DEFAULT_NOTION_COLOR_PALETTE, DEFAULT_TEXT_COLORS, Document, Dropcursor, Editor, EventEmitter, Extension, ExtensionManager, FLOATING_MENU_META, FLOATING_MENU_NO_FOCUS, FloatingMenuController, Focus, FontFamily, FontSize, Gapcursor, HardBreak, Heading, Highlight, History, HorizontalRule, InvisibleChars, Italic, LIST_ITEM_TYPE_NAMES, LineHeight, Link, LinkPopover, ListIndent, ListItem, ListKeymap, Mark, Node2 as Node, NotionColorPicker, OrderedList, Paragraph, Placeholder, Selection5 as Selection, SelectionDecoration, StarterKit, Strike, Subscript, Superscript, TaskItem, TaskList, Text, TextAlign, TextColor, TextStyle, ToolbarController, TrailingNode, Typography, Underline, UniqueID, VERSION, applyInlineStyles, autolinkPlugin, autolinkPluginKey, blur, bubbleMenuPluginKey, buildCommandProps, builtInCommands, callOrReturn, characterCountPluginKey, clearContent, copyThemeClass, createAccumulatingDispatch, createBubbleMenuPlugin, createCanChecker, createChainBuilder, createDocument, createFloatingMenuPlugin, defaultBlockAt, defaultBubbleContexts, defaultFloatingMenuShouldShow, defaultIcons, deleteSelection, findChildren, findListItemAncestorDepth, findParentNode, floatingMenuPluginKey, focus, focusPluginKey, generateHTML, generateJSON, generateText, getListItemCursorContext, getMarkRange, groupFloatingMenuItems, hideFloatingMenu, indentBlockAsListChild, inlineStyles, insertAsListItemChild, insertChildrenZoneSibling, insertContent, insertText, invisibleCharsPluginKey, isDocumentEmpty, isInListItemLabel, isInsideListItem, isNodeEmpty, isValidUrl, lift, liftCurrentListItem, liftEmptyChildrenZoneParagraph, linkClickPlugin, linkClickPluginKey, linkExitPlugin, linkExitPluginKey, linkPastePlugin, linkPastePluginKey, markInputRule, markInputRulePatterns, nodeInputRule, outdentBlockFromListItem, placeholderPluginKey, positionFloating, positionFloatingOnce, resetAttributes, selectAll, selectNodeBackward, selectionDecorationPluginKey, setBlockType, setContent, setMark, showFloatingMenu, splitListForInsert, stripInlineColorConflicts, textInputRule, textblockTypeInputRule, toggleBlockType, toggleList, toggleMark, toggleWrap, uniqueIDPluginKey, unsetAllMarks, unsetMark, updateAttributes, wrapIn, wrappingInputRule, writeToClipboard };
10367
10489
  //# sourceMappingURL=index.js.map
10368
10490
  //# sourceMappingURL=index.js.map