@prosekit/core 0.8.3 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/editor-CfkZ4TNU.d.ts +748 -0
  2. package/dist/editor-CfkZ4TNU.d.ts.map +1 -0
  3. package/dist/{editor-DlGlYOp-.js → editor-CizSwUN8.js} +76 -168
  4. package/dist/editor-CizSwUN8.js.map +1 -0
  5. package/dist/prosekit-core-test.d.ts +20 -19
  6. package/dist/prosekit-core-test.d.ts.map +1 -0
  7. package/dist/prosekit-core-test.js +4 -5
  8. package/dist/prosekit-core-test.js.map +1 -0
  9. package/dist/prosekit-core.d.ts +766 -743
  10. package/dist/prosekit-core.d.ts.map +1 -0
  11. package/dist/prosekit-core.js +26 -43
  12. package/dist/prosekit-core.js.map +1 -0
  13. package/package.json +12 -9
  14. package/src/commands/add-mark.ts +53 -0
  15. package/src/commands/expand-mark.ts +96 -0
  16. package/src/commands/insert-default-block.spec.ts +102 -0
  17. package/src/commands/insert-default-block.ts +49 -0
  18. package/src/commands/insert-node.ts +71 -0
  19. package/src/commands/insert-text.ts +24 -0
  20. package/src/commands/remove-mark.ts +54 -0
  21. package/src/commands/remove-node.ts +43 -0
  22. package/src/commands/select-all.ts +16 -0
  23. package/src/commands/set-block-type.ts +64 -0
  24. package/src/commands/set-node-attrs.ts +68 -0
  25. package/src/commands/toggle-mark.ts +65 -0
  26. package/src/commands/toggle-node.ts +47 -0
  27. package/src/commands/toggle-wrap.spec.ts +35 -0
  28. package/src/commands/toggle-wrap.ts +42 -0
  29. package/src/commands/unset-block-type.spec.ts +49 -0
  30. package/src/commands/unset-block-type.ts +84 -0
  31. package/src/commands/unset-mark.spec.ts +35 -0
  32. package/src/commands/unset-mark.ts +38 -0
  33. package/src/commands/wrap.ts +50 -0
  34. package/src/editor/action.spec.ts +143 -0
  35. package/src/editor/action.ts +248 -0
  36. package/src/editor/editor.spec.ts +186 -0
  37. package/src/editor/editor.ts +563 -0
  38. package/src/editor/union.spec.ts +108 -0
  39. package/src/editor/union.ts +47 -0
  40. package/src/editor/with-priority.ts +25 -0
  41. package/src/error.ts +28 -0
  42. package/src/extensions/clipboard-serializer.ts +107 -0
  43. package/src/extensions/command.ts +121 -0
  44. package/src/extensions/default-state.spec.ts +60 -0
  45. package/src/extensions/default-state.ts +76 -0
  46. package/src/extensions/doc.ts +31 -0
  47. package/src/extensions/events/doc-change.ts +34 -0
  48. package/src/extensions/events/dom-event.spec.ts +70 -0
  49. package/src/extensions/events/dom-event.ts +117 -0
  50. package/src/extensions/events/editor-event.ts +293 -0
  51. package/src/extensions/events/focus.spec.ts +50 -0
  52. package/src/extensions/events/focus.ts +28 -0
  53. package/src/extensions/events/plugin-view.ts +132 -0
  54. package/src/extensions/history.ts +81 -0
  55. package/src/extensions/keymap-base.ts +60 -0
  56. package/src/extensions/keymap.spec.ts +89 -0
  57. package/src/extensions/keymap.ts +96 -0
  58. package/src/extensions/mark-spec.spec.ts +177 -0
  59. package/src/extensions/mark-spec.ts +181 -0
  60. package/src/extensions/mark-view-effect.ts +85 -0
  61. package/src/extensions/mark-view.ts +43 -0
  62. package/src/extensions/node-spec.spec.ts +224 -0
  63. package/src/extensions/node-spec.ts +199 -0
  64. package/src/extensions/node-view-effect.ts +85 -0
  65. package/src/extensions/node-view.ts +43 -0
  66. package/src/extensions/paragraph.ts +61 -0
  67. package/src/extensions/plugin.ts +91 -0
  68. package/src/extensions/text.ts +34 -0
  69. package/src/facets/base-extension.ts +54 -0
  70. package/src/facets/command.ts +21 -0
  71. package/src/facets/facet-extension.spec.ts +173 -0
  72. package/src/facets/facet-extension.ts +53 -0
  73. package/src/facets/facet-node.spec.ts +265 -0
  74. package/src/facets/facet-node.ts +185 -0
  75. package/src/facets/facet-types.ts +9 -0
  76. package/src/facets/facet.spec.ts +76 -0
  77. package/src/facets/facet.ts +84 -0
  78. package/src/facets/root.ts +44 -0
  79. package/src/facets/schema-spec.ts +30 -0
  80. package/src/facets/schema.ts +26 -0
  81. package/src/facets/state.ts +57 -0
  82. package/src/facets/union-extension.ts +41 -0
  83. package/src/index.ts +302 -0
  84. package/src/test/index.ts +4 -0
  85. package/src/test/test-builder.ts +68 -0
  86. package/src/test/test-editor.spec.ts +104 -0
  87. package/src/test/test-editor.ts +113 -0
  88. package/src/testing/index.ts +283 -0
  89. package/src/testing/keyboard.ts +5 -0
  90. package/src/types/any-function.ts +4 -0
  91. package/src/types/assert-type-equal.ts +8 -0
  92. package/src/types/attrs.ts +32 -0
  93. package/src/types/base-node-view-options.ts +33 -0
  94. package/src/types/dom-node.ts +1 -0
  95. package/src/types/extension-command.ts +52 -0
  96. package/src/types/extension-mark.ts +15 -0
  97. package/src/types/extension-node.ts +15 -0
  98. package/src/types/extension.spec.ts +56 -0
  99. package/src/types/extension.ts +168 -0
  100. package/src/types/model.ts +54 -0
  101. package/src/types/object-entries.ts +13 -0
  102. package/src/types/pick-string-literal.spec.ts +10 -0
  103. package/src/types/pick-string-literal.ts +6 -0
  104. package/src/types/pick-sub-type.spec.ts +20 -0
  105. package/src/types/pick-sub-type.ts +6 -0
  106. package/src/types/priority.ts +12 -0
  107. package/src/types/setter.ts +4 -0
  108. package/src/types/simplify-deeper.spec.ts +40 -0
  109. package/src/types/simplify-deeper.ts +6 -0
  110. package/src/types/simplify-union.spec.ts +21 -0
  111. package/src/types/simplify-union.ts +11 -0
  112. package/src/utils/array-grouping.spec.ts +29 -0
  113. package/src/utils/array-grouping.ts +25 -0
  114. package/src/utils/array.ts +21 -0
  115. package/src/utils/assert.ts +13 -0
  116. package/src/utils/attrs-match.ts +20 -0
  117. package/src/utils/can-use-regex-lookbehind.ts +12 -0
  118. package/src/utils/clsx.spec.ts +14 -0
  119. package/src/utils/clsx.ts +12 -0
  120. package/src/utils/collect-children.ts +21 -0
  121. package/src/utils/collect-nodes.ts +37 -0
  122. package/src/utils/combine-event-handlers.spec.ts +27 -0
  123. package/src/utils/combine-event-handlers.ts +27 -0
  124. package/src/utils/contains-inline-node.ts +17 -0
  125. package/src/utils/deep-equals.spec.ts +26 -0
  126. package/src/utils/deep-equals.ts +29 -0
  127. package/src/utils/default-block-at.ts +15 -0
  128. package/src/utils/editor-content.spec.ts +47 -0
  129. package/src/utils/editor-content.ts +77 -0
  130. package/src/utils/env.ts +6 -0
  131. package/src/utils/find-parent-node-of-type.ts +29 -0
  132. package/src/utils/find-parent-node.spec.ts +68 -0
  133. package/src/utils/find-parent-node.ts +55 -0
  134. package/src/utils/get-custom-selection.ts +19 -0
  135. package/src/utils/get-dom-api.ts +56 -0
  136. package/src/utils/get-id.spec.ts +14 -0
  137. package/src/utils/get-id.ts +13 -0
  138. package/src/utils/get-mark-type.ts +20 -0
  139. package/src/utils/get-node-type.ts +20 -0
  140. package/src/utils/get-node-types.ts +19 -0
  141. package/src/utils/includes-mark.ts +18 -0
  142. package/src/utils/is-at-block-start.ts +26 -0
  143. package/src/utils/is-in-code-block.ts +18 -0
  144. package/src/utils/is-mark-absent.spec.ts +53 -0
  145. package/src/utils/is-mark-absent.ts +42 -0
  146. package/src/utils/is-mark-active.ts +27 -0
  147. package/src/utils/is-node-active.ts +25 -0
  148. package/src/utils/is-subset.spec.ts +12 -0
  149. package/src/utils/is-subset.ts +11 -0
  150. package/src/utils/maybe-run.spec.ts +39 -0
  151. package/src/utils/maybe-run.ts +11 -0
  152. package/src/utils/merge-objects.spec.ts +30 -0
  153. package/src/utils/merge-objects.ts +11 -0
  154. package/src/utils/merge-specs.ts +35 -0
  155. package/src/utils/object-equal.spec.ts +26 -0
  156. package/src/utils/object-equal.ts +28 -0
  157. package/src/utils/output-spec.test.ts +95 -0
  158. package/src/utils/output-spec.ts +130 -0
  159. package/src/utils/parse.spec.ts +46 -0
  160. package/src/utils/parse.ts +321 -0
  161. package/src/utils/remove-undefined-values.spec.ts +15 -0
  162. package/src/utils/remove-undefined-values.ts +9 -0
  163. package/src/utils/set-selection-around.ts +11 -0
  164. package/src/utils/type-assertion.ts +91 -0
  165. package/src/utils/unicode.spec.ts +10 -0
  166. package/src/utils/unicode.ts +4 -0
  167. package/src/utils/with-skip-code-block.ts +15 -0
  168. package/dist/editor-OUH5V8BA.d.ts +0 -754
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prosekit-core.d.ts","names":[],"sources":["../src/commands/add-mark.ts","../src/commands/expand-mark.ts","../src/commands/insert-default-block.ts","../src/commands/insert-node.ts","../src/commands/remove-mark.ts","../src/commands/remove-node.ts","../src/commands/set-block-type.ts","../src/commands/set-node-attrs.ts","../src/commands/toggle-mark.ts","../src/commands/toggle-node.ts","../src/commands/toggle-wrap.ts","../src/commands/unset-block-type.ts","../src/commands/unset-mark.ts","../src/commands/wrap.ts","../src/editor/union.ts","../src/editor/with-priority.ts","../src/error.ts","../src/types/any-function.ts","../src/extensions/clipboard-serializer.ts","../src/commands/insert-text.ts","../src/extensions/command.ts","../src/extensions/default-state.ts","../src/extensions/doc.ts","../src/extensions/events/doc-change.ts","../src/extensions/events/dom-event.ts","../src/facets/facet-types.ts","../src/facets/facet.ts","../src/types/object-entries.ts","../src/facets/state.ts","../src/extensions/plugin.ts","../src/extensions/events/editor-event.ts","../src/extensions/events/focus.ts","../src/extensions/events/plugin-view.ts","../src/extensions/history.ts","../src/extensions/keymap.ts","../src/extensions/keymap-base.ts","../src/extensions/mark-spec.ts","../src/extensions/mark-view.ts","../src/extensions/mark-view-effect.ts","../src/extensions/node-spec.ts","../src/extensions/node-view.ts","../src/extensions/node-view-effect.ts","../src/extensions/paragraph.ts","../src/extensions/text.ts","../src/facets/facet-extension.ts","../src/types/base-node-view-options.ts","../src/utils/assert.ts","../src/utils/can-use-regex-lookbehind.ts","../src/utils/clsx.ts","../src/utils/collect-children.ts","../src/utils/collect-nodes.ts","../src/utils/contains-inline-node.ts","../src/utils/default-block-at.ts","../src/utils/env.ts","../src/utils/find-parent-node.ts","../src/utils/find-parent-node-of-type.ts","../src/utils/get-id.ts","../src/utils/get-mark-type.ts","../src/utils/get-node-type.ts","../src/utils/is-at-block-start.ts","../src/utils/is-in-code-block.ts","../src/utils/is-mark-absent.ts","../src/utils/is-mark-active.ts","../src/utils/maybe-run.ts","../src/utils/set-selection-around.ts","../src/utils/type-assertion.ts","../src/utils/unicode.ts","../src/utils/with-skip-code-block.ts"],"sourcesContent":[],"mappings":"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B3FH;;;;AChCxD;;AAIiB,iB0B+HD,0BAAA,C1B/HC,OAAA,E0BgIN,oB1BhIM,CAAA,E0BiId,c1BjIc;;;AAuBjB;;;AAAwD,iB0BkHxC,wBAAA,C1BlHwC,OAAA,E0BmH7C,kB1BnH6C,CAAA,E0BoHrD,c1BpHqD;;;;;AC9BxD;AAkBgB,iByBwIA,0BAAA,CzBxIU,OAAA,EyByIf,oBzBzIe,CAAA,EyB0IvB,czB1IuB;;;;;;iByBkJV,wBAAA,UACL,qBACR;;AxBnKH;;;;AAEe,iBwByKC,kBAAA,CxBzKD,OAAA,EwByK6B,YxBzK7B,CAAA,EwByK4C,cxBzK5C;AAWf;;;;;iBwBsKgB,iBAAA,UAA2B,cAAc;;;AvBpLzD;;;AAMuC,iBuBsLvB,8BAAA,CvBtLuB,OAAA,EuBuL5B,wBvBvL4B,CAAA,EuBwLpC,cvBxLoC;UuB4L7B,cAAA,CvBvLD;EAAK,OAAA,EuBwLH,cvBxLG;EAcE,QAAA,EuB2KJ,evB3KgB;EAAA,SAAA,EuB4Kf,gBvB5Ke;SAAU,EuB6K3B,cvB7K2B;OAAsB,EuB8KnD,YvB9KmD;EAAO,aAAA,EuB+KlD,oBvB/KkD;euBgLpD;iBACE;eACF;EtBzME,KAAA,EsB0MR,YtB1MQ;EAAiB,IAAA,EsB2M1B,WtB3M0B;mBAIjB,EsBwMI,wBtBxMJ;;;AAiCjB;;AACE,KsB4KU,kBAAA,GAAqB,atB5K/B,CsB4K6C,ctB5K7C,CAAA;;;;AAIC,csB6KU,gBtB7KV,EsB6K4B,KtB7K5B,CsB6KkC,kBtB7KlC,EsB6KsD,atB7KtD,CAAA;;;;;;;;AR3CH;;AAIiB,K+BLL,kBAAA,G/BKK,CAAA,QAAA,EAAA,OAAA,EAAA,GAAA,IAAA;;;AAuBjB;;;AAAkD,iB+BrBlC,wBAAA,C/BqBkC,OAAA,E+BpBvC,kB/BoBuC,CAAA,E+BnB/C,c/BmB+C;;;;;;AA3BlD;;;;AASe,KgCCH,YAAA,GhCDG,CAAA,IAAA,EgCCmB,UhCDnB,EAAA,GAAA,IAAA;AAkBf;;;;;;;;ACxBiB,K+BiBL,aAAA,G/BjBsB,CAAA,IAAA,E+BiBC,U/BbV,EAAA,SAAA,E+BaiC,W/BbjC,EAAA,GAAA,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"}
@@ -1,4 +1,4 @@
1
- import { Editor, EditorNotFoundError, Priority, ProseKitError, assert, createEditor, defineDefaultState, defineFacet, defineFacetPayload, elementFromJSON, elementFromNode, getMarkType, getNodeType, htmlFromJSON, htmlFromNode, isAllSelection, isFragment, isMark, isMarkAbsent, isMarkActive, isNodeActive, isNodeSelection, isNotNullish, isProseMirrorNode, isSelection, isSlice, isTextSelection, jsonFromHTML, jsonFromNode, jsonFromState, nodeFromElement, nodeFromHTML, nodeFromJSON, rootFacet, schemaFacet, stateFacet, stateFromJSON, toReversed, union } from "./editor-DlGlYOp-.js";
1
+ import { Editor, EditorNotFoundError, Priority, ProseKitError, assert, createEditor, defineDefaultState, defineFacet, defineFacetPayload, elementFromJSON, elementFromNode, getMarkType, getNodeType, htmlFromJSON, htmlFromNode, isAllSelection, isFragment, isMark, isMarkAbsent, isMarkActive, isNodeActive, isNodeSelection, isNotNullish, isProseMirrorNode, isSelection, isSlice, isTextSelection, jsonFromHTML, jsonFromNode, jsonFromState, nodeFromElement, nodeFromHTML, nodeFromJSON, rootFacet, schemaFacet, stateFacet, stateFromJSON, toReversed, union } from "./editor-CizSwUN8.js";
2
2
  import { AllSelection, Plugin, PluginKey, ProseMirrorPlugin, TextSelection } from "@prosekit/pm/state";
3
3
  import { ReplaceAroundStep, findWrapping, insertPoint } from "@prosekit/pm/transform";
4
4
  import { baseKeymap, chainCommands, createParagraphNear, deleteSelection, joinTextblockBackward, lift, liftEmptyBlock, newlineInCode, selectNodeBackward, setBlockType as setBlockType$1, toggleMark as toggleMark$1 } from "@prosekit/pm/commands";
@@ -52,11 +52,8 @@ function expandMarkBefore($pos, predicate) {
52
52
  if (!$pos.marks().some(predicate)) return $pos.pos;
53
53
  const index = $pos.index();
54
54
  let boundaryIndex = index;
55
- for (let i = index; i >= 0; i--) {
56
- const node = parent.child(i);
57
- if (node.marks.some(predicate)) boundaryIndex = i;
58
- else break;
59
- }
55
+ for (let i = index; i >= 0; i--) if (parent.child(i).marks.some(predicate)) boundaryIndex = i;
56
+ else break;
60
57
  return $pos.posAtIndex(boundaryIndex);
61
58
  }
62
59
  function expandMarkAfter($pos, predicate) {
@@ -65,11 +62,8 @@ function expandMarkAfter($pos, predicate) {
65
62
  const index = Math.max(0, $pos.indexAfter() - 1);
66
63
  const childCount = parent.childCount;
67
64
  let boundaryIndex = index;
68
- for (let i = index; i < childCount; i++) {
69
- const node = parent.child(i);
70
- if (node.marks.some(predicate)) boundaryIndex = i;
71
- else break;
72
- }
65
+ for (let i = index; i < childCount; i++) if (parent.child(i).marks.some(predicate)) boundaryIndex = i;
66
+ else break;
73
67
  return $pos.posAtIndex(boundaryIndex) + parent.child(boundaryIndex).nodeSize;
74
68
  }
75
69
 
@@ -591,8 +585,7 @@ function selectAll() {
591
585
  //#region src/facets/command.ts
592
586
  const commandFacet = defineFacet({
593
587
  reducer: (inputs) => {
594
- const commands$1 = Object.assign({}, ...inputs);
595
- return { commands: commands$1 };
588
+ return { commands: Object.assign({}, ...inputs) };
596
589
  },
597
590
  parent: rootFacet,
598
591
  singleton: true
@@ -654,17 +647,13 @@ function groupBy(items, keySelector) {
654
647
  const result = {};
655
648
  for (const item of items) {
656
649
  const key = keySelector(item);
657
- const values = result[key] ||= [];
658
- values.push(item);
650
+ (result[key] ||= []).push(item);
659
651
  }
660
652
  return result;
661
653
  }
662
654
  function groupEntries(entries) {
663
655
  const result = {};
664
- for (const [key, value] of entries) {
665
- const values = result[key] ||= [];
666
- values.push(value);
667
- }
656
+ for (const [key, value] of entries) (result[key] ||= []).push(value);
668
657
  return result;
669
658
  }
670
659
 
@@ -752,8 +741,7 @@ function setObjectAttributes(obj, attrs) {
752
741
  obj = { ...obj };
753
742
  for (const [key, value] of attrs) {
754
743
  const oldValue = obj[key];
755
- const newValue = key === "style" ? joinStyles(value, typeof oldValue === "string" ? oldValue : "") : value;
756
- obj[key] = newValue;
744
+ obj[key] = key === "style" ? joinStyles(value, typeof oldValue === "string" ? oldValue : "") : value;
757
745
  }
758
746
  return obj;
759
747
  }
@@ -778,8 +766,7 @@ function joinStyles(...styles) {
778
766
  * @public
779
767
  */
780
768
  function defineNodeSpec(options) {
781
- const payload = [options, void 0];
782
- return defineFacetPayload(nodeSpecFacet, [payload]);
769
+ return defineFacetPayload(nodeSpecFacet, [[options, void 0]]);
783
770
  }
784
771
  /**
785
772
  * Defines an attribute for a node type.
@@ -787,8 +774,7 @@ function defineNodeSpec(options) {
787
774
  * @public
788
775
  */
789
776
  function defineNodeAttr(options) {
790
- const payload = [void 0, options];
791
- return defineFacetPayload(nodeSpecFacet, [payload]);
777
+ return defineFacetPayload(nodeSpecFacet, [[void 0, options]]);
792
778
  }
793
779
  const nodeSpecFacet = defineFacet({
794
780
  reducer: (payloads) => {
@@ -1181,7 +1167,7 @@ function defineFocusChangeHandler(handler) {
1181
1167
  //#endregion
1182
1168
  //#region src/utils/env.ts
1183
1169
  /**
1184
- * @private
1170
+ * @internal
1185
1171
  */
1186
1172
  const isApple = typeof navigator !== "undefined" ? /Mac|iP(hone|[ao]d)/.test(navigator.platform) : false;
1187
1173
 
@@ -1217,10 +1203,7 @@ const keymapFacet = defineFacet({
1217
1203
  });
1218
1204
  function mergeKeymaps(keymaps) {
1219
1205
  const bindings = {};
1220
- for (const keymap$1 of keymaps) for (const [key, command] of Object.entries(keymap$1)) {
1221
- const commands$1 = bindings[key] || (bindings[key] = []);
1222
- commands$1.push(command);
1223
- }
1206
+ for (const keymap$1 of keymaps) for (const [key, command] of Object.entries(keymap$1)) (bindings[key] || (bindings[key] = [])).push(command);
1224
1207
  return mapValues(bindings, mergeCommands);
1225
1208
  }
1226
1209
  function mergeCommands(commands$1) {
@@ -1278,15 +1261,13 @@ function defineBaseKeymap(options) {
1278
1261
  * @public
1279
1262
  */
1280
1263
  function defineMarkSpec(options) {
1281
- const payload = [options, void 0];
1282
- return defineFacetPayload(markSpecFacet, [payload]);
1264
+ return defineFacetPayload(markSpecFacet, [[options, void 0]]);
1283
1265
  }
1284
1266
  /**
1285
1267
  * @public
1286
1268
  */
1287
1269
  function defineMarkAttr(options) {
1288
- const payload = [void 0, options];
1289
- return defineFacetPayload(markSpecFacet, [payload]);
1270
+ return defineFacetPayload(markSpecFacet, [[void 0, options]]);
1290
1271
  }
1291
1272
  const markSpecFacet = defineFacet({
1292
1273
  reducer: (payloads) => {
@@ -1349,15 +1330,13 @@ const markViewFacet = defineFacet({
1349
1330
  * @internal
1350
1331
  */
1351
1332
  function defineMarkViewFactory(options) {
1352
- const input = [options, null];
1353
- return defineFacetPayload(markViewFactoryFacet, [input]);
1333
+ return defineFacetPayload(markViewFactoryFacet, [[options, null]]);
1354
1334
  }
1355
1335
  /**
1356
1336
  * @internal
1357
1337
  */
1358
1338
  function defineMarkViewComponent(options) {
1359
- const input = [null, options];
1360
- return defineFacetPayload(markViewFactoryFacet, [input]);
1339
+ return defineFacetPayload(markViewFactoryFacet, [[null, options]]);
1361
1340
  }
1362
1341
  const isServer$1 = typeof window === "undefined";
1363
1342
  const markViewFactoryFacet = defineFacet({
@@ -1402,15 +1381,13 @@ const nodeViewFacet = defineFacet({
1402
1381
  * @internal
1403
1382
  */
1404
1383
  function defineNodeViewFactory(options) {
1405
- const input = [options, null];
1406
- return defineFacetPayload(nodeViewFactoryFacet, [input]);
1384
+ return defineFacetPayload(nodeViewFactoryFacet, [[options, null]]);
1407
1385
  }
1408
1386
  /**
1409
1387
  * @internal
1410
1388
  */
1411
1389
  function defineNodeViewComponent(options) {
1412
- const input = [null, options];
1413
- return defineFacetPayload(nodeViewFactoryFacet, [input]);
1390
+ return defineFacetPayload(nodeViewFactoryFacet, [[null, options]]);
1414
1391
  }
1415
1392
  const isServer = typeof window === "undefined";
1416
1393
  const nodeViewFactoryFacet = defineFacet({
@@ -1485,6 +1462,9 @@ function defineText() {
1485
1462
 
1486
1463
  //#endregion
1487
1464
  //#region src/utils/can-use-regex-lookbehind.ts
1465
+ /**
1466
+ * Checks if the browser supports [regex lookbehind assertion](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion).
1467
+ */
1488
1468
  const canUseRegexLookbehind = once(() => {
1489
1469
  try {
1490
1470
  return "ab".replace(new RegExp("(?<=a)b", "g"), "c") === "ac";
@@ -1560,6 +1540,8 @@ let id = 0;
1560
1540
  * Returns a unique id in the current process that can be used in various places.
1561
1541
  *
1562
1542
  * @internal
1543
+ *
1544
+ * @deprecated Import `getId` from `@ocavue/utils` package instead. Remove it in a future version.
1563
1545
  */
1564
1546
  function getId() {
1565
1547
  id = (id + 1) % Number.MAX_SAFE_INTEGER;
@@ -1622,4 +1604,5 @@ function withSkipCodeBlock(command) {
1622
1604
  }
1623
1605
 
1624
1606
  //#endregion
1625
- export { Editor, EditorNotFoundError, OBJECT_REPLACEMENT_CHARACTER, Priority, ProseKitError, getId as _getId, addMark, assert, canUseRegexLookbehind, clsx, collectChildren, collectNodes, containsInlineNode, createEditor, defaultBlockAt, defineBaseCommands, defineBaseKeymap, defineClickHandler, defineClickOnHandler, defineClipboardSerializer, defineCommands, defineDOMEventHandler, defineDefaultState, defineDoc, defineDocChangeHandler, defineDoubleClickHandler, defineDoubleClickOnHandler, defineDropHandler, defineFacet, defineFacetPayload, defineFocusChangeHandler, defineHistory, defineKeyDownHandler, defineKeyPressHandler, defineKeymap, defineMarkAttr, defineMarkSpec, defineMarkView, defineMarkViewComponent, defineMarkViewFactory, defineMountHandler, defineNodeAttr, defineNodeSpec, defineNodeView, defineNodeViewComponent, defineNodeViewFactory, defineParagraph, definePasteHandler, definePlugin, defineScrollToSelectionHandler, defineText, defineTextInputHandler, defineTripleClickHandler, defineTripleClickOnHandler, defineUnmountHandler, defineUpdateHandler, editorEventFacet, elementFromJSON, elementFromNode, expandMark, findParentNode, findParentNodeOfType, getMarkType, getNodeType, htmlFromJSON, htmlFromNode, insertDefaultBlock, insertNode, isAllSelection, isApple, isAtBlockStart, isFragment, isInCodeBlock, isMark, isMarkAbsent, isMarkActive, isNodeSelection, isProseMirrorNode, isSelection, isSlice, isTextSelection, jsonFromHTML, jsonFromNode, jsonFromState, keymapFacet, maybeRun, nodeFromElement, nodeFromHTML, nodeFromJSON, pluginFacet, removeMark, removeNode, setBlockType, setNodeAttrs, setSelectionAround, stateFromJSON, toggleMark, toggleNode, toggleWrap, union, unsetBlockType, unsetMark, withPriority, withSkipCodeBlock, wrap };
1607
+ export { Editor, EditorNotFoundError, OBJECT_REPLACEMENT_CHARACTER, Priority, ProseKitError, getId as _getId, addMark, assert, canUseRegexLookbehind, clsx, collectChildren, collectNodes, containsInlineNode, createEditor, defaultBlockAt, defineBaseCommands, defineBaseKeymap, defineClickHandler, defineClickOnHandler, defineClipboardSerializer, defineCommands, defineDOMEventHandler, defineDefaultState, defineDoc, defineDocChangeHandler, defineDoubleClickHandler, defineDoubleClickOnHandler, defineDropHandler, defineFacet, defineFacetPayload, defineFocusChangeHandler, defineHistory, defineKeyDownHandler, defineKeyPressHandler, defineKeymap, defineMarkAttr, defineMarkSpec, defineMarkView, defineMarkViewComponent, defineMarkViewFactory, defineMountHandler, defineNodeAttr, defineNodeSpec, defineNodeView, defineNodeViewComponent, defineNodeViewFactory, defineParagraph, definePasteHandler, definePlugin, defineScrollToSelectionHandler, defineText, defineTextInputHandler, defineTripleClickHandler, defineTripleClickOnHandler, defineUnmountHandler, defineUpdateHandler, editorEventFacet, elementFromJSON, elementFromNode, expandMark, findParentNode, findParentNodeOfType, getMarkType, getNodeType, htmlFromJSON, htmlFromNode, insertDefaultBlock, insertNode, isAllSelection, isApple, isAtBlockStart, isFragment, isInCodeBlock, isMark, isMarkAbsent, isMarkActive, isNodeSelection, isProseMirrorNode, isSelection, isSlice, isTextSelection, jsonFromHTML, jsonFromNode, jsonFromState, keymapFacet, maybeRun, nodeFromElement, nodeFromHTML, nodeFromJSON, pluginFacet, removeMark, removeNode, setBlockType, setNodeAttrs, setSelectionAround, stateFromJSON, toggleMark, toggleNode, toggleWrap, union, unsetBlockType, unsetMark, withPriority, withSkipCodeBlock, wrap };
1608
+ //# sourceMappingURL=prosekit-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prosekit-core.js","names":["positions: number[]","baseToggleMark","setBlockType","pluginFacet: Facet<PluginPayload, StatePayload>","plugins: ProseMirrorPlugin[]","fn","serializeFragmentWrapper?: FunctionWrapper<SerializeFragmentFunction>","serializeNodeWrapper?: FunctionWrapper<SerializeNodeFunction>","fn: SerializeFragmentFunction","args","fn: SerializeNodeFunction","nodesFromSchema: NodesFromSchemaFunction","marksFromSchema: MarksFromSchemaFunction","options: ClipboardSerializerOptions","commandFacet: Facet<CommandPayload, RootPayload>","commands","schemaSpecFacet: Facet<SchemaSpec, SchemaSpec>","topNode: string | undefined","result: Partial<Record<K, T[]>>","result: { [K in keyof T]?: T[K][] }","attrs: T['attrs']","parseDOM: T['parseDOM']","insertedAttrs: Record<string, unknown>","oldAttrs: Record<string, unknown>","topNodeName: string | undefined","mountHandlers: MountHandler[]","updateHandlers: UpdateHandler[]","unmountHandlers: UnmountHandler[]","view","handlers: Handler[]","domEventFacet: Facet<DOMEventPayload, PluginPayload>","setHandlersMap: Record<string, Setter<DOMEventHandler[]>>","combinedHandlerMap: Record<string, DOMEventHandler>","plugin: ProseMirrorPlugin | undefined","e: DOMEventHandler","map: Record<string, DOMEventHandler[] | undefined>","editorEventFacet: Facet<EditorEventPayload, PluginPayload>","isApple: boolean","keymap","keymapFacet: Facet<KeymapPayload, PluginPayload>","handler: Handler | undefined","handlerWrapper: Handler","bindings: Record<string, Command[]>","commands","keymap: Keymap","markViews: { [markName: string]: MarkViewConstructor }","isServer","markViews: { [markName: string]: MarkViewConstructor }","factory","nodeViews: { [nodeName: string]: NodeViewConstructor }","nodeViews: { [nodeName: string]: NodeViewConstructor }","factory","canUseRegexLookbehind: () => boolean","clsx: (\n ...args: Array<string | boolean | null | undefined>\n) => string","children: ProseMirrorNode[]","nodes: ProseMirrorNode[]"],"sources":["../src/commands/add-mark.ts","../src/commands/expand-mark.ts","../src/utils/default-block-at.ts","../src/commands/insert-default-block.ts","../src/utils/set-selection-around.ts","../src/commands/insert-node.ts","../src/commands/remove-mark.ts","../src/utils/find-parent-node.ts","../src/utils/find-parent-node-of-type.ts","../src/commands/remove-node.ts","../src/utils/get-custom-selection.ts","../src/commands/set-block-type.ts","../src/utils/get-node-types.ts","../src/commands/set-node-attrs.ts","../src/commands/toggle-mark.ts","../src/commands/toggle-node.ts","../src/commands/wrap.ts","../src/commands/toggle-wrap.ts","../src/commands/unset-block-type.ts","../src/commands/unset-mark.ts","../src/editor/with-priority.ts","../src/extensions/plugin.ts","../src/extensions/clipboard-serializer.ts","../src/commands/insert-text.ts","../src/commands/select-all.ts","../src/facets/command.ts","../src/extensions/command.ts","../src/facets/schema-spec.ts","../src/utils/array-grouping.ts","../src/utils/remove-undefined-values.ts","../src/utils/merge-objects.ts","../src/utils/merge-specs.ts","../src/utils/output-spec.ts","../src/extensions/node-spec.ts","../src/extensions/doc.ts","../src/extensions/events/plugin-view.ts","../src/extensions/events/doc-change.ts","../src/utils/combine-event-handlers.ts","../src/extensions/events/dom-event.ts","../src/extensions/events/editor-event.ts","../src/extensions/events/focus.ts","../src/utils/env.ts","../src/extensions/keymap.ts","../src/extensions/history.ts","../src/extensions/keymap-base.ts","../src/extensions/mark-spec.ts","../src/extensions/mark-view.ts","../src/extensions/mark-view-effect.ts","../src/extensions/node-view.ts","../src/extensions/node-view-effect.ts","../src/extensions/paragraph.ts","../src/extensions/text.ts","../src/utils/can-use-regex-lookbehind.ts","../src/utils/clsx.ts","../src/utils/collect-children.ts","../src/utils/collect-nodes.ts","../src/utils/contains-inline-node.ts","../src/utils/get-id.ts","../src/utils/is-at-block-start.ts","../src/utils/is-in-code-block.ts","../src/utils/maybe-run.ts","../src/utils/unicode.ts","../src/utils/with-skip-code-block.ts"],"sourcesContent":["import type {\n Attrs,\n MarkType,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\n\nimport type { CommandCreator } from '../types/extension-command'\nimport { getMarkType } from '../utils/get-mark-type'\n\n/**\n * @public\n */\nexport interface AddMarkOptions {\n /**\n * The type of the mark to add.\n */\n type: string | MarkType\n\n /**\n * The attributes of the mark to add.\n */\n attrs?: Attrs | null\n\n /**\n * The start position of the document. By default it will be the start position of current selection.\n */\n from?: number\n\n /**\n * The end position of the document. By default it will be the end position of current selection.\n */\n to?: number\n}\n\n/**\n * Returns a command that adds the given mark with the given attributes.\n *\n * @public\n */\nexport function addMark(options: AddMarkOptions): Command {\n return (state, dispatch) => {\n const mark = getMarkType(state.schema, options.type).create(options.attrs)\n const from = options.from ?? state.selection.from\n const to = options.to ?? state.selection.to\n if (from > to) {\n return false\n }\n dispatch?.(state.tr.addMark(from, to, mark))\n return true\n }\n}\n\naddMark satisfies CommandCreator\n","import type {\n Mark,\n MarkType,\n ResolvedPos,\n} from '@prosekit/pm/model'\nimport {\n TextSelection,\n type Command,\n} from '@prosekit/pm/state'\n\nimport { getMarkType } from '../utils/get-mark-type'\n\n/**\n * @public\n */\nexport interface ExpandMarkOptions {\n /**\n * The type of the mark to expand.\n */\n type: string | MarkType\n}\n\n/**\n * Expands the selection to include the entire mark at the current position.\n *\n * @public\n */\nexport function expandMark(options: ExpandMarkOptions): Command {\n return (state, dispatch) => {\n const markType = getMarkType(state.schema, options.type)\n const predicate = (mark: Mark) => mark.type === markType\n\n const from = expandMarkBefore(state.selection.$from, predicate)\n const to = expandMarkAfter(state.selection.$to, predicate)\n\n if (from === state.selection.from && to === state.selection.to) {\n return false\n }\n\n if (dispatch) {\n dispatch(state.tr.setSelection(TextSelection.create(state.doc, from, to)))\n }\n return true\n }\n}\n\nfunction expandMarkBefore(\n $pos: ResolvedPos,\n predicate: (mark: Mark) => boolean,\n): number {\n const { parent } = $pos\n\n if (!$pos.marks().some(predicate)) {\n return $pos.pos\n }\n\n const index = $pos.index()\n let boundaryIndex = index\n\n for (let i = index; i >= 0; i--) {\n const node = parent.child(i)\n if (node.marks.some(predicate)) {\n boundaryIndex = i\n } else {\n break\n }\n }\n\n return $pos.posAtIndex(boundaryIndex)\n}\n\nfunction expandMarkAfter(\n $pos: ResolvedPos,\n predicate: (mark: Mark) => boolean,\n): number {\n const { parent } = $pos\n\n if (!$pos.marks().some(predicate)) {\n return $pos.pos\n }\n\n const index = Math.max(0, $pos.indexAfter() - 1)\n const childCount = parent.childCount\n let boundaryIndex = index\n\n for (let i = index; i < childCount; i++) {\n const node = parent.child(i)\n if (node.marks.some(predicate)) {\n boundaryIndex = i\n } else {\n break\n }\n }\n\n return $pos.posAtIndex(boundaryIndex) + parent.child(boundaryIndex).nodeSize\n}\n","import type {\n ContentMatch,\n NodeType,\n} from '@prosekit/pm/model'\n\n/**\n * @internal\n */\nexport function defaultBlockAt(match: ContentMatch): NodeType | null {\n for (let i = 0; i < match.edgeCount; i++) {\n const { type } = match.edge(i)\n if (type.isTextblock && !type.hasRequiredAttrs()) return type\n }\n return null\n}\n","import {\n TextSelection,\n type Command,\n} from '@prosekit/pm/state'\n\nimport { defaultBlockAt } from '../utils/default-block-at'\n\n/**\n * @public\n */\nexport interface InsertDefaultBlockOptions {\n /**\n * The position to insert the node at. By default it will insert after the\n * current selection.\n */\n pos?: number\n}\n\n/**\n * Returns a command that inserts a default block after current selection or at\n * the given position.\n *\n * @public\n */\nexport function insertDefaultBlock(\n options?: InsertDefaultBlockOptions,\n): Command {\n return (state, dispatch) => {\n const $pos = options?.pos == null\n ? state.selection.$to\n : state.doc.resolve(options.pos)\n const depth = $pos.parent.isTextblock ? $pos.depth - 1 : $pos.depth\n const parent = $pos.node(depth)\n const index = $pos.indexAfter(depth)\n const type = defaultBlockAt(parent.contentMatchAt(index))\n if (!type) return false\n if (dispatch) {\n const pos = $pos.posAtIndex(index, depth)\n const node = type.createAndFill()\n if (!node) return false\n const tr = state.tr.insert(pos, node)\n const selection = TextSelection.findFrom(tr.doc.resolve(pos), 1)\n if (!selection) return false\n tr.setSelection(selection)\n dispatch(tr.scrollIntoView())\n }\n return true\n }\n}\n","import {\n TextSelection,\n type Transaction,\n} from '@prosekit/pm/state'\n\nexport function setSelectionAround(tr: Transaction, pos: number): void {\n const docSize = tr.doc.content.size\n const $pos = tr.doc.resolve(pos > docSize ? docSize : pos < 0 ? 0 : pos)\n const selection = TextSelection.between($pos, $pos)\n tr.setSelection(selection)\n}\n","import type {\n Attrs,\n NodeType,\n ProseMirrorNode,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\nimport { insertPoint } from '@prosekit/pm/transform'\n\nimport { assert } from '../utils/assert'\nimport { getNodeType } from '../utils/get-node-type'\nimport { setSelectionAround } from '../utils/set-selection-around'\n\n/**\n * @public\n */\nexport interface InsertNodeOptions {\n /**\n * The node to insert. Either this or `type` must be provided.\n */\n node?: ProseMirrorNode\n\n /**\n * The type of the node to insert. Either this or `node` must be provided.\n */\n type?: string | NodeType\n\n /**\n * When `type` is provided, the attributes of the node to insert.\n */\n attrs?: Attrs\n\n /**\n * The position to insert the node at. By default it will be the anchor\n * position of current selection.\n */\n pos?: number\n}\n\n/**\n * Returns a command that inserts the given node at the current selection or at\n * the given position.\n *\n * @public\n */\nfunction insertNode(options: InsertNodeOptions): Command {\n return (state, dispatch) => {\n const node = options.node\n ? options.node\n : options.type\n ? getNodeType(state.schema, options.type).createAndFill(options.attrs)\n : null\n\n assert(node, 'You must provide either a node or a type')\n\n const insertPos = insertPoint(\n state.doc,\n options.pos ?? state.selection.anchor,\n node.type,\n )\n if (insertPos == null) return false\n\n if (dispatch) {\n const tr = state.tr.insert(insertPos, node)\n setSelectionAround(tr, insertPos + node.nodeSize)\n dispatch(tr)\n }\n return true\n }\n}\n\nexport { insertNode }\n","import type {\n Attrs,\n MarkType,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\n\nimport type { CommandCreator } from '../types/extension-command'\nimport { getMarkType } from '../utils/get-mark-type'\n\n/**\n * @public\n */\nexport interface RemoveMarkOptions {\n /**\n * The type of the mark to remove.\n */\n type: string | MarkType\n\n /**\n * If attrs is given, remove precisely the mark with the given attrs. Otherwise, remove all marks of the given type.\n */\n attrs?: Attrs | null\n\n /**\n * The start position of the document. By default it will be the start position of current selection.\n */\n from?: number\n\n /**\n * The end position of the document. By default it will be the end position of current selection.\n */\n to?: number\n}\n\n/**\n * Returns a command that removes the given mark.\n *\n * @public\n */\nexport function removeMark(options: RemoveMarkOptions): Command {\n return (state, dispatch) => {\n const markType = getMarkType(state.schema, options.type)\n const mark = options.attrs ? markType.create(options.attrs) : markType\n const from = options.from ?? state.selection.from\n const to = options.to ?? state.selection.to\n if (from > to) {\n return false\n }\n dispatch?.(state.tr.removeMark(from, to, mark))\n return true\n }\n}\n\nremoveMark satisfies CommandCreator\n","import type {\n ProseMirrorNode,\n ResolvedPos,\n} from '@prosekit/pm/model'\n\n/**\n * @public\n */\nexport interface FindParentNodeResult {\n /**\n * The closest parent node that satisfies the predicate.\n */\n node: ProseMirrorNode\n\n /**\n * The position directly before the node.\n */\n pos: number\n\n /**\n * The position at the start of the node.\n */\n start: number\n\n /**\n * The depth of the node.\n */\n depth: number\n}\n\n/**\n * Find the closest parent node that satisfies the predicate.\n *\n * @public\n */\nexport function findParentNode(\n /**\n * The predicate to test the parent node.\n */\n predicate: (node: ProseMirrorNode) => boolean,\n /**\n * The position to start searching from.\n */\n $pos: ResolvedPos,\n): FindParentNodeResult | undefined {\n for (let depth = $pos.depth; depth >= 0; depth -= 1) {\n const node = $pos.node(depth)\n\n if (predicate(node)) {\n const pos = depth === 0 ? 0 : $pos.before(depth)\n const start = $pos.start(depth)\n return { node, pos, start, depth }\n }\n }\n}\n","import type {\n NodeType,\n ResolvedPos,\n} from '@prosekit/pm/model'\n\nimport {\n findParentNode,\n type FindParentNodeResult,\n} from './find-parent-node'\nimport { getNodeType } from './get-node-type'\n\n/**\n * Finds the closest parent node that matches the given node type.\n *\n * @public\n */\nexport function findParentNodeOfType(\n /**\n * The type of the node to find.\n */\n type: NodeType | string,\n /**\n * The position to start searching from.\n */\n $pos: ResolvedPos,\n): FindParentNodeResult | undefined {\n const nodeType = getNodeType($pos.doc.type.schema, type)\n return findParentNode((node) => node.type === nodeType, $pos)\n}\n","import type { NodeType } from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\n\nimport type { CommandCreator } from '../types/extension-command'\nimport { findParentNodeOfType } from '../utils/find-parent-node-of-type'\n\n/**\n * @public\n */\nexport interface RemoveNodeOptions {\n /**\n * The type of the node to remove.\n */\n type: string | NodeType\n\n /**\n * The document position to start searching node. By default it will be the\n * anchor position of current selection.\n */\n pos?: number\n}\n\n/**\n * Returns a command to remove the nearest ancestor node of a specific type from the current position.\n *\n * @public\n */\nexport function removeNode(options: RemoveNodeOptions): Command {\n return (state, dispatch) => {\n const $pos = typeof options.pos === 'number'\n ? state.doc.resolve(options.pos)\n : state.selection.$anchor\n\n const found = findParentNodeOfType(options.type, $pos)\n if (!found) return false\n\n const { pos, node } = found\n dispatch?.(state.tr.delete(pos, pos + node.nodeSize))\n return true\n }\n}\n\nremoveNode satisfies CommandCreator\n","import {\n TextSelection,\n type EditorState,\n type Selection,\n} from '@prosekit/pm/state'\n\nexport function getCustomSelection(\n state: EditorState,\n from?: number | null,\n to?: number | null,\n): Selection {\n const pos = from ?? to\n if (pos != null) {\n const $from = state.doc.resolve(from ?? pos)\n const $to = state.doc.resolve(to ?? pos)\n return TextSelection.between($from, $to)\n }\n return state.selection\n}\n","import type {\n Attrs,\n NodeType,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\n\nimport { getCustomSelection } from '../utils/get-custom-selection'\nimport { getNodeType } from '../utils/get-node-type'\n\n/**\n * @public\n */\nexport interface SetBlockTypeOptions {\n type: NodeType | string\n attrs?: Attrs | null\n from?: number\n to?: number\n}\n\n/**\n * Returns a command that tries to set the selected textblocks to the given node\n * type with the given attributes.\n *\n * @public\n */\nexport function setBlockType(options: SetBlockTypeOptions): Command {\n return (state, dispatch) => {\n const nodeType = getNodeType(state.schema, options.type)\n const selection = getCustomSelection(state, options.from, options.to)\n const attrs = options.attrs\n\n let applicable = false\n for (let i = 0; i < selection.ranges.length && !applicable; i++) {\n const {\n $from: { pos: from },\n $to: { pos: to },\n } = selection.ranges[i]\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (applicable) return false\n if (!node.isTextblock || node.hasMarkup(nodeType, attrs)) return\n if (node.type == nodeType) {\n applicable = true\n } else {\n const $pos = state.doc.resolve(pos),\n index = $pos.index()\n applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType)\n }\n })\n }\n if (!applicable) return false\n if (dispatch) {\n const tr = state.tr\n for (const range of selection.ranges) {\n const {\n $from: { pos: from },\n $to: { pos: to },\n } = range\n tr.setBlockType(from, to, nodeType, attrs)\n }\n dispatch(tr.scrollIntoView())\n }\n return true\n }\n}\n","import type {\n NodeType,\n Schema,\n} from '@prosekit/pm/model'\n\nimport { getNodeType } from './get-node-type'\n\n/**\n * @internal\n */\nexport function getNodeTypes(\n schema: Schema,\n types: string | NodeType | string[] | NodeType[],\n): NodeType[] {\n if (Array.isArray(types)) {\n return types.map((type) => getNodeType(schema, type))\n }\n return [getNodeType(schema, types)]\n}\n","import type {\n Attrs,\n NodeType,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\n\nimport { getNodeTypes } from '../utils/get-node-types'\n\n/**\n * @public\n */\nexport interface SetNodeAttrsOptions {\n /**\n * The type of node to set the attributes of.\n *\n * If current node is not of this type, the command will do nothing.\n */\n type: string | NodeType | string[] | NodeType[]\n\n /**\n * The attributes to set.\n */\n attrs: Attrs\n\n /**\n * The position of the node. Defaults to the position of the wrapping node\n * containing the current selection.\n */\n pos?: number\n}\n\n/**\n * Returns a command that set the attributes of the current node.\n *\n * @public\n */\nexport function setNodeAttrs(options: SetNodeAttrsOptions): Command {\n return (state, dispatch) => {\n const nodeTypes = getNodeTypes(state.schema, options.type)\n const from = options.pos ?? state.selection.from\n const to = options.pos ?? state.selection.to\n const positions: number[] = []\n\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (nodeTypes.includes(node.type)) {\n positions.push(pos)\n }\n if (!dispatch && positions.length > 0) {\n return false\n }\n })\n\n if (positions.length === 0) {\n return false\n }\n\n if (dispatch) {\n const { tr } = state\n for (const pos of positions) {\n for (const [key, value] of Object.entries(options.attrs)) {\n tr.setNodeAttribute(pos, key, value)\n }\n }\n dispatch(tr)\n }\n return true\n }\n}\n","import { toggleMark as baseToggleMark } from '@prosekit/pm/commands'\nimport type {\n Attrs,\n MarkType,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\n\nimport type { CommandCreator } from '../types/extension-command'\nimport { getMarkType } from '../utils/get-mark-type'\n\n/**\n * @public\n */\nexport interface ToggleMarkOptions {\n /**\n * The mark type to toggle.\n */\n type: string | MarkType\n\n /**\n * The optional attributes to set on the mark.\n */\n attrs?: Attrs | null\n\n /**\n * Controls whether, when part of the selected range has the mark\n * already and part doesn't, the mark is removed (`true`) or added\n * (`false`).\n *\n * @default false\n */\n removeWhenPresent?: boolean\n\n /**\n * Whether the command should act on the content of inline nodes marked as\n * [atoms](https://prosemirror.net/docs/ref/#model.NodeSpec.atom) that are\n * completely covered by a selection range.\n *\n * @default true\n */\n enterInlineAtoms?: boolean\n}\n\n/**\n * Returns a command that toggles the given mark with the given attributes.\n *\n * @param options\n *\n * @public\n */\nexport function toggleMark({\n type,\n attrs,\n removeWhenPresent = false,\n enterInlineAtoms = true,\n}: ToggleMarkOptions): Command {\n return (state, dispatch, view) => {\n return baseToggleMark(getMarkType(state.schema, type), attrs, {\n removeWhenPresent,\n enterInlineAtoms,\n })(state, dispatch, view)\n }\n}\n\ntoggleMark satisfies CommandCreator\n","import { setBlockType } from '@prosekit/pm/commands'\nimport type {\n Attrs,\n NodeType,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\n\nimport { getNodeType } from '../utils/get-node-type'\nimport { isNodeActive } from '../utils/is-node-active'\n\n/**\n * @public\n */\nexport interface ToggleNodeOptions {\n /**\n * The type of the node to toggle.\n */\n type: string | NodeType\n\n /**\n * The attributes of the node to toggle.\n */\n attrs?: Attrs | null\n}\n\n/**\n * Returns a command that set the selected textblocks to the given node type\n * with the given attributes.\n *\n * @param options\n *\n * @public\n */\nexport function toggleNode({ type, attrs }: ToggleNodeOptions): Command {\n return (state, dispatch, view) => {\n if (isNodeActive(state, type, attrs)) {\n const defaultType = state.schema.topNodeType.contentMatch.defaultType\n if (!defaultType) {\n return false\n }\n return setBlockType(defaultType)(state, dispatch, view)\n } else {\n const nodeType = getNodeType(state.schema, type)\n return setBlockType(nodeType, attrs)(state, dispatch, view)\n }\n }\n}\n","import type {\n Attrs,\n NodeType,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\nimport { findWrapping } from '@prosekit/pm/transform'\n\nimport { getNodeType } from '../utils/get-node-type'\n\n/**\n * @public\n */\nexport interface WrapOptions {\n /**\n * The node type to wrap the selected textblock with.\n */\n type: NodeType | string\n\n /**\n * @deprecated Use `nodeSpec` instead.\n */\n nodeType?: NodeType\n\n /**\n * Optional attributes to apply to the node.\n */\n attrs?: Attrs | null\n}\n\n/**\n * Returns a command that wraps the selected textblock with the given node type.\n *\n * @param options\n *\n * @public\n */\nexport function wrap(options: WrapOptions): Command {\n return (state, dispatch) => {\n const { $from, $to } = state.selection\n const range = $from.blockRange($to)\n if (!range) return false\n\n const nodeType = getNodeType(state.schema, options.nodeType || options.type)\n const wrapping = findWrapping(range, nodeType, options.attrs)\n if (!wrapping) return false\n\n dispatch?.(state.tr.wrap(range, wrapping))\n return true\n }\n}\n","import { lift } from '@prosekit/pm/commands'\nimport type {\n Attrs,\n NodeType,\n} from '@prosekit/pm/model'\nimport type { Command } from '@prosekit/pm/state'\n\nimport { isNodeActive } from '../utils/is-node-active'\n\nimport { wrap } from './wrap'\n\nexport interface ToggleWrapOptions {\n /**\n * The type of the node to toggle.\n */\n type: string | NodeType\n\n /**\n * The attributes of the node to toggle.\n */\n attrs?: Attrs | null\n}\n\n/**\n * Toggle between wrapping an inactive node with the provided node type, and\n * lifting it up into its parent.\n *\n * @param options\n *\n * @public\n */\nexport function toggleWrap(options: ToggleWrapOptions): Command {\n const { type, attrs } = options\n\n return (state, dispatch) => {\n if (isNodeActive(state, type, attrs)) {\n return lift(state, dispatch)\n }\n\n return wrap({ type, attrs })(state, dispatch)\n }\n}\n","import {\n Fragment,\n Slice,\n} from '@prosekit/pm/model'\nimport type {\n Command,\n Transaction,\n} from '@prosekit/pm/state'\nimport { ReplaceAroundStep } from '@prosekit/pm/transform'\n\nimport type { CommandCreator } from '../types/extension-command'\n\n/**\n * @public\n */\nexport interface UnsetBlockTypeOptions {\n /**\n * The start position of the document. By default it will be the start position of current selection.\n */\n from?: number\n\n /**\n * The end position of the document. By default it will be the end position of current selection.\n */\n to?: number\n}\n\n/**\n * Returns a command that set the type of all textblocks between the given range\n * to the default type (usually `paragraph`).\n *\n * @public\n */\nexport function unsetBlockType(options?: UnsetBlockTypeOptions): Command {\n return (state, dispatch) => {\n const from = options?.from ?? state.selection.from\n const to = options?.to ?? state.selection.to\n if (from > to) return false\n\n const tr = state.tr\n if (unsetTextBlockType(tr, from, to)) {\n dispatch?.(tr)\n return true\n }\n return false\n }\n}\n\nfunction unsetTextBlockType(\n tr: Transaction,\n from: number,\n to: number,\n): boolean {\n const mapFrom = tr.steps.length\n tr.doc.nodesBetween(from, to, (node, pos, parent, index): boolean => {\n if (!parent || !node.isTextblock) return true\n\n const defaultType = parent.contentMatchAt(index).defaultType\n if (\n defaultType\n && defaultType.isTextblock\n && node.type !== defaultType\n && defaultType.validContent(node.content)\n ) {\n const mapping = tr.mapping.slice(mapFrom)\n const start = mapping.map(pos, 1)\n const end = mapping.map(pos + node.nodeSize, 1)\n const step = new ReplaceAroundStep(\n start,\n end,\n start + 1,\n end - 1,\n new Slice(Fragment.from(defaultType.create()), 0, 0),\n 1,\n true,\n )\n tr.step(step)\n }\n return false\n })\n return tr.steps.length > mapFrom\n}\n\nunsetBlockType satisfies CommandCreator\n","import type { Command } from '@prosekit/pm/state'\n\nimport type { CommandCreator } from '../types/extension-command'\n\n/**\n * @public\n *\n * Options for {@link unsetMark}.\n */\nexport interface UnsetMarkOptions {\n /**\n * The start position of the document. By default it will be the start position of current selection.\n */\n from?: number\n\n /**\n * The end position of the document. By default it will be the end position of current selection.\n */\n to?: number\n}\n\n/**\n * Returns a command that removes all marks.\n *\n * @public\n */\nexport function unsetMark(options?: UnsetMarkOptions): Command {\n return (state, dispatch) => {\n const from = options?.from ?? state.selection.from\n const to = options?.to ?? state.selection.to\n if (from > to) return false\n\n dispatch?.(state.tr.removeMark(from, to))\n return true\n }\n}\n\nunsetMark satisfies CommandCreator\n","import type { Extension } from '../types/extension'\nimport type { Priority } from '../types/priority'\n\nimport { union } from './union'\n\n/**\n * Return an new extension with the given priority.\n *\n * @example\n * ```ts\n * import { Priority, withPriority } from 'prosekit/core'\n *\n * const extension = withPriority(defineMyExtension(), Priority.high)\n * ```\n *\n * @public\n */\nexport function withPriority<T extends Extension>(\n extension: T,\n priority: Priority,\n): T {\n const result = union(extension)\n result.priority = priority\n return result as T\n}\n","import type { Schema } from '@prosekit/pm/model'\nimport {\n Plugin,\n type ProseMirrorPlugin,\n} from '@prosekit/pm/state'\n\nimport { ProseKitError } from '../error'\nimport {\n defineFacet,\n type Facet,\n} from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport {\n stateFacet,\n type StatePayload,\n} from '../facets/state'\nimport type { PlainExtension } from '../types/extension'\n\n/**\n * Adds a ProseMirror plugin to the editor.\n *\n * @param plugin - The ProseMirror plugin to add, or an array of plugins, or a\n * function that returns one or multiple plugins.\n *\n * @public\n */\nexport function definePlugin(\n plugin:\n | Plugin\n | Plugin[]\n | ((context: { schema: Schema }) => Plugin | Plugin[]),\n): PlainExtension {\n if (\n plugin instanceof Plugin\n || (Array.isArray(plugin) && plugin.every((p) => p instanceof Plugin))\n ) {\n return definePluginPayload(() => plugin)\n }\n\n if (typeof plugin === 'function') {\n return definePluginPayload(plugin)\n }\n\n throw new TypeError('Invalid plugin')\n}\n\nfunction definePluginPayload(payload: PluginPayload): PlainExtension {\n return defineFacetPayload(pluginFacet, [payload]) as PlainExtension\n}\n\n/**\n * @internal\n */\nexport type PluginPayload =\n | Plugin\n | Plugin[]\n | ((context: { schema: Schema }) => Plugin | Plugin[])\n\n/**\n * @internal\n */\nexport const pluginFacet: Facet<PluginPayload, StatePayload> = defineFacet({\n reducer: (payloads): StatePayload => {\n return ({ schema }) => {\n const plugins: ProseMirrorPlugin[] = []\n\n for (const payload of payloads) {\n if (payload instanceof Plugin) {\n plugins.push(payload)\n } else if (\n Array.isArray(payload)\n && payload.every((p) => p instanceof Plugin)\n ) {\n plugins.push(...payload)\n } else if (typeof payload === 'function') {\n plugins.push(...[payload({ schema })].flat())\n } else {\n throw new ProseKitError('Invalid plugin')\n }\n }\n\n // In ProseMirror, the plugins at the beginning have a higher priority.\n // However, in ProseKit, the extensions at the end have a higher priority\n // because we want to easily override the default behaviors by appending\n // new extensions. Therefore, we need to reverse plugins here.\n plugins.reverse()\n return { plugins }\n }\n },\n parent: stateFacet,\n})\n","import {\n DOMSerializer,\n type DOMOutputSpec,\n type Mark,\n type ProseMirrorNode,\n type Schema,\n} from '@prosekit/pm/model'\nimport {\n PluginKey,\n ProseMirrorPlugin,\n} from '@prosekit/pm/state'\n\nimport { defineFacet } from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport type { AnyFunction } from '../types/any-function'\nimport type { PlainExtension } from '../types/extension'\nimport { isNotNullish } from '../utils/type-assertion'\n\nimport {\n pluginFacet,\n type PluginPayload,\n} from './plugin'\n\ntype SerializeFragmentFunction = typeof DOMSerializer.prototype.serializeFragment\ntype SerializeNodeFunction = typeof DOMSerializer.prototype.serializeNode\ntype NodesFromSchemaFunction = typeof DOMSerializer.nodesFromSchema\ntype MarksFromSchemaFunction = typeof DOMSerializer.marksFromSchema\n\ntype FunctionWrapper<T extends AnyFunction> = (fn: T) => T\n\n/**\n * @internal\n */\nexport interface ClipboardSerializerOptions {\n serializeFragmentWrapper?: FunctionWrapper<SerializeFragmentFunction>\n serializeNodeWrapper?: FunctionWrapper<SerializeNodeFunction>\n nodesFromSchemaWrapper?: FunctionWrapper<NodesFromSchemaFunction>\n marksFromSchemaWrapper?: FunctionWrapper<MarksFromSchemaFunction>\n}\n\nfunction mergeWrappers<T extends AnyFunction>(wrappers: Array<FunctionWrapper<T> | undefined | null>): FunctionWrapper<T> {\n return (fn: T) => wrappers.filter(isNotNullish).reduce((fn, wrapper) => wrapper(fn), fn)\n}\n\nfunction wrapFunction<T extends AnyFunction>(fn: T, wrapper?: FunctionWrapper<T>): T {\n return wrapper ? wrapper(fn) : fn\n}\n\nclass CustomDOMSerializer extends DOMSerializer {\n constructor(\n nodes: Record<string, (node: ProseMirrorNode) => DOMOutputSpec>,\n marks: Record<string, (mark: Mark, inline: boolean) => DOMOutputSpec>,\n private serializeFragmentWrapper?: FunctionWrapper<SerializeFragmentFunction>,\n private serializeNodeWrapper?: FunctionWrapper<SerializeNodeFunction>,\n ) {\n super(nodes, marks)\n }\n\n override serializeFragment(...args: Parameters<SerializeFragmentFunction>): ReturnType<SerializeFragmentFunction> {\n const fn: SerializeFragmentFunction = (...args) => super.serializeFragment(...args)\n return wrapFunction(fn, this.serializeFragmentWrapper)(...args)\n }\n\n override serializeNode(...args: Parameters<SerializeNodeFunction>): ReturnType<SerializeNodeFunction> {\n const fn: SerializeNodeFunction = (...args) => super.serializeNode(...args)\n return wrapFunction(fn, this.serializeNodeWrapper)(...args)\n }\n}\n\nfunction createCustomDOMSerializer(schema: Schema, options: ClipboardSerializerOptions) {\n const nodesFromSchema: NodesFromSchemaFunction = (...args) => DOMSerializer.nodesFromSchema(...args)\n const marksFromSchema: MarksFromSchemaFunction = (...args) => DOMSerializer.marksFromSchema(...args)\n const nodes = wrapFunction(nodesFromSchema, options.nodesFromSchemaWrapper)(schema)\n const marks = wrapFunction(marksFromSchema, options.marksFromSchemaWrapper)(schema)\n return new CustomDOMSerializer(nodes, marks, options.serializeFragmentWrapper, options.serializeNodeWrapper)\n}\n\nconst clipboardSerializerFacet = defineFacet<ClipboardSerializerOptions, PluginPayload>({\n reducer: (inputs: ClipboardSerializerOptions[]): PluginPayload => {\n const options: ClipboardSerializerOptions = {\n serializeFragmentWrapper: mergeWrappers(inputs.map((input) => input.serializeFragmentWrapper)),\n serializeNodeWrapper: mergeWrappers(inputs.map((input) => input.serializeNodeWrapper)),\n nodesFromSchemaWrapper: mergeWrappers(inputs.map((input) => input.nodesFromSchemaWrapper)),\n marksFromSchemaWrapper: mergeWrappers(inputs.map((input) => input.marksFromSchemaWrapper)),\n }\n\n return ({ schema }) => {\n const clipboardSerializer = createCustomDOMSerializer(schema, options)\n\n return [\n new ProseMirrorPlugin({\n key: new PluginKey('prosekit-clipboard-serializer'),\n props: { clipboardSerializer },\n }),\n ]\n }\n },\n singleton: true,\n parent: pluginFacet,\n})\n\n/**\n * @internal\n */\nexport function defineClipboardSerializer(options: ClipboardSerializerOptions): PlainExtension {\n return defineFacetPayload(clipboardSerializerFacet, [options]) as PlainExtension\n}\n","import type { Command } from '@prosekit/pm/state'\n\n/**\n * @public\n */\nexport type InsertTextOptions = {\n text: string\n from?: number\n to?: number\n}\n\n/**\n * Returns a command that inserts the given text.\n *\n * @public\n */\nexport function insertText({ text, from, to }: InsertTextOptions): Command {\n return (state, dispatch) => {\n if (text) {\n dispatch?.(state.tr.insertText(text, from, to))\n }\n return true\n }\n}\n","import {\n AllSelection,\n type Command,\n} from '@prosekit/pm/state'\n\n/**\n * Returns a command that selects the whole document.\n *\n * @public\n */\nexport function selectAll(): Command {\n return (state, dispatch) => {\n dispatch?.(state.tr.setSelection(new AllSelection(state.doc)))\n return true\n }\n}\n","import type { CommandCreators } from '../types/extension-command'\n\nimport {\n defineFacet,\n type Facet,\n} from './facet'\nimport {\n rootFacet,\n type RootPayload,\n} from './root'\n\ntype CommandPayload = CommandCreators\n\nexport const commandFacet: Facet<CommandPayload, RootPayload> = defineFacet({\n reducer: (inputs) => {\n const commands = Object.assign({}, ...inputs) as CommandPayload\n return { commands }\n },\n parent: rootFacet,\n singleton: true,\n})\n","import {\n addMark,\n type AddMarkOptions,\n} from '../commands/add-mark'\nimport {\n insertDefaultBlock,\n type InsertDefaultBlockOptions,\n} from '../commands/insert-default-block'\nimport {\n insertNode,\n type InsertNodeOptions,\n} from '../commands/insert-node'\nimport {\n insertText,\n type InsertTextOptions,\n} from '../commands/insert-text'\nimport {\n removeMark,\n type RemoveMarkOptions,\n} from '../commands/remove-mark'\nimport {\n removeNode,\n type RemoveNodeOptions,\n} from '../commands/remove-node'\nimport { selectAll } from '../commands/select-all'\nimport {\n setBlockType,\n type SetBlockTypeOptions,\n} from '../commands/set-block-type'\nimport {\n setNodeAttrs,\n type SetNodeAttrsOptions,\n} from '../commands/set-node-attrs'\nimport {\n toggleWrap,\n type ToggleWrapOptions,\n} from '../commands/toggle-wrap'\nimport {\n unsetBlockType,\n type UnsetBlockTypeOptions,\n} from '../commands/unset-block-type'\nimport {\n unsetMark,\n type UnsetMarkOptions,\n} from '../commands/unset-mark'\nimport {\n wrap,\n type WrapOptions,\n} from '../commands/wrap'\nimport { commandFacet } from '../facets/command'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport type { Extension } from '../types/extension'\nimport type { CommandCreator } from '../types/extension-command'\n\nexport function defineCommands<\n T extends Record<string, CommandCreator> = Record<string, CommandCreator>,\n>(\n commands: T,\n): Extension<{\n Commands: { [K in keyof T]: Parameters<T[K]> }\n}> {\n return defineFacetPayload(commandFacet, [commands]) as Extension<{\n Commands: { [K in keyof T]: Parameters<T[K]> }\n }>\n}\n\n/**\n * @internal\n */\nexport type BaseCommandsExtension = Extension<{\n Commands: {\n insertText: [options: InsertTextOptions]\n insertNode: [options: InsertNodeOptions]\n removeNode: [options: RemoveNodeOptions]\n wrap: [options: WrapOptions]\n toggleWrap: [options: ToggleWrapOptions]\n setBlockType: [options: SetBlockTypeOptions]\n setNodeAttrs: [options: SetNodeAttrsOptions]\n insertDefaultBlock: [options?: InsertDefaultBlockOptions]\n selectAll: []\n addMark: [options: AddMarkOptions]\n removeMark: [options: RemoveMarkOptions]\n unsetBlockType: [options?: UnsetBlockTypeOptions]\n unsetMark: [options?: UnsetMarkOptions]\n }\n}>\n\n/**\n * Add some base commands\n *\n * @public\n */\nexport function defineBaseCommands(): BaseCommandsExtension {\n return defineCommands({\n insertText,\n\n insertNode,\n\n removeNode,\n\n wrap,\n\n toggleWrap,\n\n setBlockType,\n\n setNodeAttrs,\n\n insertDefaultBlock,\n\n selectAll,\n\n addMark,\n\n removeMark,\n\n unsetBlockType,\n\n unsetMark,\n })\n}\n","import type {\n MarkSpec,\n NodeSpec,\n SchemaSpec,\n} from '@prosekit/pm/model'\nimport OrderedMap from 'orderedmap'\n\nimport {\n defineFacet,\n type Facet,\n} from './facet'\nimport { schemaFacet } from './schema'\n\nexport const schemaSpecFacet: Facet<SchemaSpec, SchemaSpec> = defineFacet({\n reducer: (specs): SchemaSpec => {\n let nodes = OrderedMap.from<NodeSpec>({})\n let marks = OrderedMap.from<MarkSpec>({})\n let topNode: string | undefined = undefined\n\n for (const spec of specs) {\n nodes = nodes.append(spec.nodes)\n marks = marks.append(spec.marks ?? {})\n topNode = topNode ?? spec.topNode\n }\n\n return { nodes, marks, topNode }\n },\n parent: schemaFacet,\n singleton: true,\n})\n","import type { ObjectEntries } from '../types/object-entries'\n\nexport function groupBy<K extends PropertyKey, T>(\n items: Iterable<T>,\n keySelector: (item: T) => K,\n): Partial<Record<K, T[]>> {\n const result: Partial<Record<K, T[]>> = {}\n for (const item of items) {\n const key = keySelector(item)\n const values = (result[key] ||= [])\n values.push(item)\n }\n return result\n}\n\nexport function groupEntries<T extends Record<string, any>>(\n entries: ObjectEntries<T>[],\n): { [K in keyof T]?: T[K][] } {\n const result: { [K in keyof T]?: T[K][] } = {}\n for (const [key, value] of entries) {\n const values = (result[key] ||= [])\n values.push(value)\n }\n return result\n}\n","export function removeUndefinedValues<T extends object>(obj: T): T {\n const result = {} as Record<string, unknown>\n for (const [key, value] of Object.entries(obj)) {\n if (value !== undefined) {\n result[key] = value\n }\n }\n return result as T\n}\n","import { removeUndefinedValues } from './remove-undefined-values'\nimport { isNotNullish } from './type-assertion'\n\nexport function mergeObjects<T extends object>(\n ...objects: Array<Partial<T> | null | undefined>\n): Partial<T> {\n const filteredObjects = objects\n .filter(isNotNullish)\n .map(removeUndefinedValues)\n return Object.assign({}, ...filteredObjects) as Partial<T>\n}\n","import type {\n MarkSpec,\n NodeSpec,\n} from '@prosekit/pm/model'\n\nimport { mergeObjects } from './merge-objects'\n\nfunction mergeSpecs(a: NodeSpec, b: NodeSpec): NodeSpec\nfunction mergeSpecs(a: MarkSpec, b: MarkSpec): MarkSpec\nfunction mergeSpecs(\n a: NodeSpec | MarkSpec,\n b: NodeSpec | MarkSpec,\n): NodeSpec | MarkSpec {\n type T = typeof a\n\n const attrs: T['attrs'] = {}\n const attrNames = new Set([\n ...Object.keys(a.attrs ?? {}),\n ...Object.keys(b.attrs ?? {}),\n ])\n for (const name of attrNames) {\n const attrSpecA = a.attrs?.[name]\n const attrSpecB = b.attrs?.[name]\n const attrSpecMerged = mergeObjects(attrSpecA, attrSpecB)\n if (attrSpecMerged) {\n attrs[name] = attrSpecMerged\n }\n }\n\n const parseDOM: T['parseDOM'] = [...(a.parseDOM ?? []), ...(b.parseDOM ?? [])]\n\n return mergeObjects<T>(a, b, { attrs, parseDOM })\n}\n\nexport { mergeSpecs }\n","import { isElementLike } from '@ocavue/utils'\nimport type {\n DOMOutputSpec,\n Mark,\n ProseMirrorNode,\n TagParseRule,\n} from '@prosekit/pm/model'\n\nimport { isNotNullish } from './type-assertion'\n\ninterface AttrOptions {\n attr: string\n toDOM?: (value: unknown) => [key: string, value: string] | null | undefined\n parseDOM?: (node: HTMLElement) => unknown\n}\n\nexport function wrapOutputSpecAttrs<\n T extends ProseMirrorNode | Mark,\n Args extends readonly unknown[],\n>(\n toDOM: (node: T, ...args: Args) => DOMOutputSpec,\n options: AttrOptions[],\n): (node: T, ...args: Args) => DOMOutputSpec {\n return (node, ...args) => {\n const dom = toDOM(node, ...args)\n const pairs = options\n .map((option) => option.toDOM?.(node.attrs[option.attr]))\n .filter(isNotNullish)\n return insertOutputSpecAttrs(dom, pairs)\n }\n}\n\nexport function wrapTagParseRuleAttrs(\n rule: TagParseRule,\n options: AttrOptions[],\n): TagParseRule {\n const existingGetAttrs = rule.getAttrs\n const existingAttrs = rule.attrs\n\n return {\n ...rule,\n getAttrs: (dom) => {\n const baseAttrs = existingGetAttrs?.(dom) ?? existingAttrs ?? {}\n\n if (baseAttrs === false || !dom || !isElementLike(dom)) {\n return baseAttrs ?? null\n }\n\n const insertedAttrs: Record<string, unknown> = {}\n\n for (const option of options) {\n if (option.parseDOM) {\n insertedAttrs[option.attr] = option.parseDOM(dom)\n }\n }\n\n return { ...baseAttrs, ...insertedAttrs }\n },\n }\n}\n\nexport function insertOutputSpecAttrs(\n dom: DOMOutputSpec,\n attrs: Array<[key: string, value: string]>,\n): DOMOutputSpec {\n if (!dom) {\n return dom\n }\n\n if (Array.isArray(dom)) {\n const rest = dom.slice(1) as Array<unknown>\n let oldAttrs: Record<string, unknown>\n\n if (rest.length > 0 && (rest[0] == null || typeof rest[0] === 'object')) {\n oldAttrs = rest.shift() as Record<string, unknown>\n } else {\n oldAttrs = {}\n }\n\n const newAttrs = setObjectAttributes(oldAttrs, attrs)\n return [dom[0], newAttrs, ...rest]\n }\n\n if (isElementLike(dom)) {\n return setElementAttributes(dom, attrs)\n }\n\n if (typeof dom === 'object' && 'dom' in dom && isElementLike(dom.dom)) {\n return { ...dom, dom: setElementAttributes(dom.dom, attrs) }\n }\n\n return dom\n}\n\nfunction setObjectAttributes(\n obj: Record<string, unknown>,\n attrs: Array<[key: string, value: string]>,\n): Record<string, unknown> {\n obj = { ...obj }\n for (const [key, value] of attrs) {\n const oldValue = obj[key]\n const newValue = key === 'style'\n ? joinStyles(value, typeof oldValue === 'string' ? oldValue : '')\n : value\n obj[key] = newValue\n }\n return obj\n}\n\nfunction setElementAttributes(\n element: Element,\n attrs: Array<[key: string, value: string]>,\n): Element {\n element = element.cloneNode(true) as Element\n for (const [key, value] of attrs) {\n const oldValue = element.getAttribute(key)\n const newValue = key === 'style'\n ? joinStyles(value, typeof oldValue === 'string' ? oldValue : '')\n : value\n element.setAttribute(key, newValue)\n }\n return element\n}\n\nfunction joinStyles(...styles: string[]) {\n return styles\n .map((style) => style.trim().replace(/;$/, ''))\n .filter(Boolean)\n .join('; ')\n}\n","import type {\n AttributeSpec,\n NodeSpec,\n SchemaSpec,\n} from '@prosekit/pm/model'\nimport clone from 'just-clone'\nimport OrderedMap from 'orderedmap'\n\nimport { defineFacet } from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport { schemaSpecFacet } from '../facets/schema-spec'\nimport type {\n AnyAttrs,\n AttrSpec,\n} from '../types/attrs'\nimport type { Extension } from '../types/extension'\nimport { groupBy } from '../utils/array-grouping'\nimport { assert } from '../utils/assert'\nimport { mergeSpecs } from '../utils/merge-specs'\nimport {\n wrapOutputSpecAttrs,\n wrapTagParseRuleAttrs,\n} from '../utils/output-spec'\nimport { isNotNullish } from '../utils/type-assertion'\n\n/**\n * @public\n */\nexport interface NodeSpecOptions<\n NodeName extends string = string,\n Attrs extends AnyAttrs = AnyAttrs,\n> extends NodeSpec {\n /**\n * The name of the node type.\n */\n name: NodeName\n\n /**\n * Whether this is the top-level node type. Only one node type can be the\n * top-level node type in a schema.\n */\n topNode?: boolean\n\n /**\n * The attributes that nodes of this type get.\n */\n attrs?: {\n [key in keyof Attrs]: AttrSpec<Attrs[key]>\n }\n}\n\n/**\n * @public\n */\nexport interface NodeAttrOptions<\n NodeName extends string = string,\n AttrName extends string = string,\n AttrType = any,\n> extends AttrSpec<AttrType> {\n /**\n * The name of the node type.\n */\n type: NodeName\n\n /**\n * The name of the attribute.\n */\n attr: AttrName\n\n /**\n * Whether the attribute should be kept when the node is split. Set it to\n * `true` if you want to inherit the attribute from the previous node when\n * splitting the node by pressing `Enter`.\n *\n * @default undefined\n */\n splittable?: boolean\n\n /**\n * Returns the attribute key and value to be set on the HTML element.\n *\n * If the returned `key` is `\"style\"`, the value is a string of CSS properties and will\n * be prepended to the existing `style` attribute on the DOM node.\n *\n * @param value - The value of the attribute of current ProseMirror node.\n */\n toDOM?: (value: AttrType) => [key: string, value: string] | null | undefined\n\n /**\n * Parses the attribute value from the DOM.\n */\n parseDOM?: (node: HTMLElement) => AttrType\n}\n\n/**\n * Defines a node type.\n *\n * @public\n */\nexport function defineNodeSpec<\n Node extends string,\n Attrs extends AnyAttrs = AnyAttrs,\n>(\n options: NodeSpecOptions<Node, Attrs>,\n): Extension<{\n Nodes: { [K in Node]: Attrs }\n}> {\n const payload: NodeSpecPayload = [options, undefined]\n return defineFacetPayload(nodeSpecFacet, [payload]) as Extension<{\n Nodes: any\n }>\n}\n\n/**\n * Defines an attribute for a node type.\n *\n * @public\n */\nexport function defineNodeAttr<\n NodeType extends string = string,\n AttrName extends string = string,\n AttrType = any,\n>(\n options: NodeAttrOptions<NodeType, AttrName, AttrType>,\n): Extension<{\n Nodes: { [K in NodeType]: { [K in AttrName]: AttrType } }\n}> {\n const payload: NodeSpecPayload = [undefined, options]\n return defineFacetPayload(nodeSpecFacet, [payload]) as Extension<{\n Nodes: any\n }>\n}\n\ntype NodeSpecPayload = [\n NodeSpecOptions | undefined,\n NodeAttrOptions | undefined,\n]\n\nconst nodeSpecFacet = defineFacet<NodeSpecPayload, SchemaSpec>({\n reducer: (payloads: NodeSpecPayload[]): SchemaSpec => {\n let specs = OrderedMap.from<NodeSpec>({})\n let topNodeName: string | undefined = undefined\n\n const specPayloads = payloads.map((input) => input[0]).filter(isNotNullish)\n const attrPayloads = payloads.map((input) => input[1]).filter(isNotNullish)\n\n for (const { name, topNode, ...spec } of specPayloads) {\n if (topNode) {\n topNodeName = name\n }\n\n const prevSpec = specs.get(name)\n if (prevSpec) {\n specs = specs.update(name, mergeSpecs(prevSpec, spec))\n } else {\n // The latest spec has the highest priority, so we put it at the start\n // of the map.\n specs = specs.addToStart(name, spec)\n }\n }\n\n const groupedAttrs = groupBy(attrPayloads, (payload) => payload.type)\n\n for (const [type, attrs] of Object.entries(groupedAttrs)) {\n if (!attrs) continue\n\n const maybeSpec = specs.get(type)\n assert(maybeSpec, `Node type ${type} must be defined`)\n\n const spec = clone(maybeSpec)\n\n if (!spec.attrs) {\n spec.attrs = {}\n }\n\n for (const attr of attrs) {\n spec.attrs[attr.attr] = {\n default: attr.default as unknown,\n validate: attr.validate,\n splittable: attr.splittable,\n } as AttributeSpec\n }\n\n if (spec.toDOM) {\n spec.toDOM = wrapOutputSpecAttrs(spec.toDOM, attrs)\n }\n\n if (spec.parseDOM) {\n spec.parseDOM = spec.parseDOM.map((rule) => wrapTagParseRuleAttrs(rule, attrs))\n }\n\n specs = specs.update(type, spec)\n }\n\n return { nodes: specs, topNode: topNodeName }\n },\n parent: schemaSpecFacet,\n singleton: true,\n})\n","import type { Attrs } from '@prosekit/pm/model'\n\nimport type { Extension } from '../types/extension'\n\nimport { defineNodeSpec } from './node-spec'\n\n/**\n * @internal\n */\nexport type DocExtension = Extension<{ Nodes: { doc: Attrs } }>\n\n/**\n * @public\n *\n * @deprecated Use the following import instead:\n *\n * ```ts\n * import { defineDoc } from 'prosekit/extensions/doc'\n * ```\n */\nexport function defineDoc(): DocExtension {\n console.warn(\n '[prosekit] The `defineDoc` function from `prosekit/core` is deprecated. Use the following import instead: `import { defineDoc } from \"prosekit/extensions/doc\"`.',\n )\n\n return defineNodeSpec({\n name: 'doc',\n content: 'block+',\n topNode: true,\n })\n}\n","import {\n PluginKey,\n ProseMirrorPlugin,\n type EditorState,\n} from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { defineFacet } from '../../facets/facet'\nimport { defineFacetPayload } from '../../facets/facet-extension'\nimport type { PlainExtension } from '../../types/extension'\nimport {\n pluginFacet,\n type PluginPayload,\n} from '../plugin'\n\n/**\n * A function that is called when the editor view is mounted.\n *\n * @param view - The editor view.\n *\n * @public\n */\nexport type MountHandler = (view: EditorView) => void\n\n/**\n * A function that is called when the editor state is updated.\n *\n * @param view - The editor view.\n * @param prevState - The previous editor state.\n *\n * @public\n */\nexport type UpdateHandler = (view: EditorView, prevState: EditorState) => void\n\n/**\n * A function that is called when the editor view is unmounted.\n *\n * @public\n */\nexport type UnmountHandler = () => void\n\n/**\n * Registers a event handler that is called when the editor view is mounted.\n *\n * @public\n */\nexport function defineMountHandler(handler: MountHandler): PlainExtension {\n return definePluginViewFacetPayload(['mount', handler])\n}\n\n/**\n * Registers a event handler that is called when the editor state is updated.\n *\n * @public\n */\nexport function defineUpdateHandler(handler: UpdateHandler): PlainExtension {\n return definePluginViewFacetPayload(['update', handler])\n}\n\n/**\n * Registers a event handler that is called when the editor view is unmounted.\n *\n * @public\n */\nexport function defineUnmountHandler(handler: UnmountHandler): PlainExtension {\n return definePluginViewFacetPayload(['unmount', handler])\n}\n\nfunction definePluginViewFacetPayload(\n input: PluginViewHandlerArgs,\n): PlainExtension {\n return defineFacetPayload(pluginViewFacet, [input]) as PlainExtension\n}\n\ntype PluginViewHandlerArgs =\n | ['mount', MountHandler]\n | ['update', UpdateHandler]\n | ['unmount', UnmountHandler]\n\nconst pluginViewFacet = defineFacet<PluginViewHandlerArgs, PluginPayload>({\n reduce: () => {\n let mountHandlers: MountHandler[] = []\n let updateHandlers: UpdateHandler[] = []\n let unmountHandlers: UnmountHandler[] = []\n\n const plugin = new ProseMirrorPlugin({\n key: pluginKey,\n view: (view) => {\n // Run all handlers after the view is mounted\n mountHandlers.forEach((fn) => fn(view))\n\n return {\n update: (view, prevState) => {\n updateHandlers.forEach((fn) => fn(view, prevState))\n },\n destroy: () => {\n unmountHandlers.forEach((fn) => fn())\n },\n }\n },\n })\n\n const register = (input: PluginViewHandlerArgs[]) => {\n mountHandlers = []\n updateHandlers = []\n unmountHandlers = []\n\n for (const args of input) {\n switch (args[0]) {\n case 'mount':\n mountHandlers.push(args[1])\n break\n case 'update':\n updateHandlers.push(args[1])\n break\n case 'unmount':\n unmountHandlers.push(args[1])\n break\n }\n }\n }\n\n return function reducer(input: PluginViewHandlerArgs[]) {\n register(input)\n return plugin\n }\n },\n parent: pluginFacet,\n singleton: true,\n})\n\nconst pluginKey = new PluginKey('prosekit-plugin-view-handler')\n","import type { EditorState } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport type { PlainExtension } from '../../types/extension'\n\nimport { defineUpdateHandler } from './plugin-view'\n\n/**\n * A function that is called when the editor document is changed.\n *\n * @param view - The editor view.\n * @param prevState - The previous editor state.\n *\n * @public\n */\nexport type DocChangeHandler = (\n view: EditorView,\n prevState: EditorState,\n) => void\n\n/**\n * Registers a event handler that is called when the editor document is changed.\n *\n * @public\n */\nexport function defineDocChangeHandler(\n handler: DocChangeHandler,\n): PlainExtension {\n return defineUpdateHandler((view, prevState) => {\n if (!view.state.doc.eq(prevState.doc)) {\n handler(view, prevState)\n }\n })\n}\n","import { toReversed } from './array'\n\nexport function combineEventHandlers<\n Handler extends (...args: any[]) => boolean | void,\n Args extends Parameters<Handler> = Parameters<Handler>,\n>(): [\n setHandlers: (eventHandlers: Handler[]) => void,\n combinedEventHandler: (...args: Args) => boolean,\n] {\n let handlers: Handler[] = []\n\n function setHandlers(eventHandlers: Handler[]): void {\n // The handlers at the end have a higher priority.\n handlers = toReversed(eventHandlers)\n }\n\n function combinedEventHandler(...args: Args): boolean {\n for (const handler of handlers) {\n if (handler(...args)) {\n return true\n }\n }\n return false\n }\n\n return [setHandlers, combinedEventHandler] as const\n}\n","import {\n PluginKey,\n ProseMirrorPlugin,\n} from '@prosekit/pm/state'\nimport type {\n DOMEventMap,\n EditorView,\n} from '@prosekit/pm/view'\n\nimport {\n defineFacet,\n type Facet,\n} from '../../facets/facet'\nimport { defineFacetPayload } from '../../facets/facet-extension'\nimport type { PlainExtension } from '../../types/extension'\nimport type { Setter } from '../../types/setter'\nimport { groupEntries } from '../../utils/array-grouping'\nimport { combineEventHandlers } from '../../utils/combine-event-handlers'\nimport {\n pluginFacet,\n type PluginPayload,\n} from '../plugin'\n\n/**\n * A function to handle the events fired on the editable DOM element. Returns\n * `true` to indicate that it handled the given event. When returning `true`,\n * you are responsible for calling `event.preventDefault()` yourself (or not, if\n * you want to allow the default behavior).\n *\n * @public\n */\nexport type DOMEventHandler<Event extends keyof DOMEventMap = string> = (\n view: EditorView,\n event: DOMEventMap[Event],\n) => boolean | void\n\n/**\n * @internal\n */\nexport function defineDomEventFacetPayload(\n ...payloads: DOMEventPayload[]\n): PlainExtension {\n return defineFacetPayload<DOMEventPayload>(\n domEventFacet,\n payloads,\n ) as PlainExtension\n}\n\n/**\n * Register a new event handler for the given event type.\n *\n * @public\n */\nexport function defineDOMEventHandler<Event extends keyof DOMEventMap = string>(\n event: Event,\n handler: DOMEventHandler<Event>,\n): PlainExtension {\n return defineDomEventFacetPayload([\n event as string,\n handler as DOMEventHandler,\n ])\n}\n\n/**\n * @internal\n */\ntype DOMEventPayload = [event: string, handler: DOMEventHandler]\n\n/**\n * @internal\n */\nconst domEventFacet: Facet<DOMEventPayload, PluginPayload> = defineFacet(\n {\n reduce: () => {\n const setHandlersMap: Record<string, Setter<DOMEventHandler[]>> = {}\n const combinedHandlerMap: Record<string, DOMEventHandler> = {}\n\n let plugin: ProseMirrorPlugin | undefined\n\n const update = (payloads: DOMEventPayload[]): void => {\n let hasNewEvent = false\n\n for (const [event] of payloads) {\n if (!setHandlersMap[event]) {\n hasNewEvent = true\n const [setHandlers, combinedHandler] = combineEventHandlers<DOMEventHandler>()\n setHandlersMap[event] = setHandlers\n const e: DOMEventHandler = (view, eventObject) => {\n return combinedHandler(view, eventObject)\n }\n combinedHandlerMap[event] = e\n }\n }\n\n const map: Record<string, DOMEventHandler[] | undefined> = groupEntries<DOMEventMap>(payloads)\n for (const [event, setHandlers] of Object.entries(setHandlersMap)) {\n const handlers = map[event] ?? []\n setHandlers(handlers)\n }\n\n if (hasNewEvent) {\n plugin = new ProseMirrorPlugin({\n key: new PluginKey('prosekit-dom-event-handler'),\n props: { handleDOMEvents: combinedHandlerMap },\n })\n }\n }\n\n return function reducer(inputs) {\n update(inputs)\n return plugin ?? []\n }\n },\n parent: pluginFacet,\n singleton: true,\n },\n)\n","import type {\n Node,\n Slice,\n} from '@prosekit/pm/model'\nimport {\n PluginKey,\n ProseMirrorPlugin,\n} from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport {\n defineFacet,\n type Facet,\n} from '../../facets/facet'\nimport { defineFacetPayload } from '../../facets/facet-extension'\nimport type { PlainExtension } from '../../types/extension'\nimport type { ObjectEntries } from '../../types/object-entries'\nimport { groupEntries } from '../../utils/array-grouping'\nimport { combineEventHandlers } from '../../utils/combine-event-handlers'\nimport {\n pluginFacet,\n type PluginPayload,\n} from '../plugin'\n\nexport type KeyDownHandler = (\n view: EditorView,\n event: KeyboardEvent,\n) => boolean | void\nexport type KeyPressHandler = (\n view: EditorView,\n event: KeyboardEvent,\n) => boolean | void\nexport type TextInputHandler = (\n view: EditorView,\n from: number,\n to: number,\n text: string,\n) => boolean | void\nexport type ClickOnHandler = (\n view: EditorView,\n pos: number,\n node: Node,\n nodePos: number,\n event: MouseEvent,\n direct: boolean,\n) => boolean | void\nexport type ClickHandler = (\n view: EditorView,\n pos: number,\n event: MouseEvent,\n) => boolean | void\nexport type DoubleClickOnHandler = (\n view: EditorView,\n pos: number,\n node: Node,\n nodePos: number,\n event: MouseEvent,\n direct: boolean,\n) => boolean | void\nexport type DoubleClickHandler = (\n view: EditorView,\n pos: number,\n event: MouseEvent,\n) => boolean | void\nexport type TripleClickOnHandler = (\n view: EditorView,\n pos: number,\n node: Node,\n nodePos: number,\n event: MouseEvent,\n direct: boolean,\n) => boolean | void\nexport type TripleClickHandler = (\n view: EditorView,\n pos: number,\n event: MouseEvent,\n) => boolean | void\nexport type PasteHandler = (\n view: EditorView,\n event: ClipboardEvent,\n slice: Slice,\n) => boolean | void\nexport type DropHandler = (\n view: EditorView,\n event: DragEvent,\n slice: Slice,\n moved: boolean,\n) => boolean | void\nexport type ScrollToSelectionHandler = (view: EditorView) => boolean\n\nfunction defineEventFacetPayload(payload: EditorEventPayload): PlainExtension {\n return defineFacetPayload(editorEventFacet, [payload]) as PlainExtension\n}\n\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown}\n */\nexport function defineKeyDownHandler(handler: KeyDownHandler): PlainExtension {\n return defineEventFacetPayload(['keyDown', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyPress}\n */\nexport function defineKeyPressHandler(\n handler: KeyPressHandler,\n): PlainExtension {\n return defineEventFacetPayload(['keyPress', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleTextInput}\n */\nexport function defineTextInputHandler(\n handler: TextInputHandler,\n): PlainExtension {\n return defineEventFacetPayload(['textInput', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleClickOn}\n */\nexport function defineClickOnHandler(handler: ClickOnHandler): PlainExtension {\n return defineEventFacetPayload(['clickOn', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleClick}\n */\nexport function defineClickHandler(handler: ClickHandler): PlainExtension {\n return defineEventFacetPayload(['click', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleDoubleClickOn}\n */\nexport function defineDoubleClickOnHandler(\n handler: DoubleClickOnHandler,\n): PlainExtension {\n return defineEventFacetPayload(['doubleClickOn', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleDoubleClick}\n */\nexport function defineDoubleClickHandler(\n handler: DoubleClickHandler,\n): PlainExtension {\n return defineEventFacetPayload(['doubleClick', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleTripleClickOn}\n */\nexport function defineTripleClickOnHandler(\n handler: TripleClickOnHandler,\n): PlainExtension {\n return defineEventFacetPayload(['tripleClickOn', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleTripleClick}\n */\nexport function defineTripleClickHandler(\n handler: TripleClickHandler,\n): PlainExtension {\n return defineEventFacetPayload(['tripleClick', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handlePaste}\n */\nexport function definePasteHandler(handler: PasteHandler): PlainExtension {\n return defineEventFacetPayload(['paste', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleDrop}\n */\nexport function defineDropHandler(handler: DropHandler): PlainExtension {\n return defineEventFacetPayload(['drop', handler])\n}\n/**\n * @public\n *\n * See {@link https://prosemirror.net/docs/ref/#view.EditorProps.handleScrollToSelection}\n */\nexport function defineScrollToSelectionHandler(\n handler: ScrollToSelectionHandler,\n): PlainExtension {\n return defineEventFacetPayload(['scrollToSelection', handler])\n}\n\ninterface EditorEventMap {\n keyDown: KeyDownHandler\n keyPress: KeyPressHandler\n textInput: TextInputHandler\n clickOn: ClickOnHandler\n click: ClickHandler\n doubleClickOn: DoubleClickOnHandler\n doubleClick: DoubleClickHandler\n tripleClickOn: TripleClickOnHandler\n tripleClick: TripleClickHandler\n paste: PasteHandler\n drop: DropHandler\n scrollToSelection: ScrollToSelectionHandler\n}\n\n/**\n * @internal\n */\nexport type EditorEventPayload = ObjectEntries<EditorEventMap>\n\n/**\n * @internal\n */\nexport const editorEventFacet: Facet<EditorEventPayload, PluginPayload> = defineFacet<EditorEventPayload, PluginPayload>({\n reduce: () => {\n const [update, plugin] = setupEditorEventPlugin()\n\n return (entries) => {\n update(entries)\n return plugin\n }\n },\n parent: pluginFacet,\n singleton: true,\n})\n\n// dprint-ignore\nfunction setupEditorEventPlugin() {\n const [setKeyDownHandlers, handleKeyDown] = combineEventHandlers<KeyDownHandler>()\n const [setKeyPressHandlers, handleKeyPress] = combineEventHandlers<KeyPressHandler>()\n const [setTextInputHandlers, handleTextInput] = combineEventHandlers<TextInputHandler>()\n const [setClickOnHandlers, handleClickOn] = combineEventHandlers<ClickOnHandler>()\n const [setClickHandlers, handleClick] = combineEventHandlers<ClickHandler>()\n const [setDoubleClickOnHandlers, handleDoubleClickOn] = combineEventHandlers<DoubleClickOnHandler>()\n const [setDoubleClickHandlers, handleDoubleClick] = combineEventHandlers<DoubleClickHandler>()\n const [setTripleClickOnHandlers, handleTripleClickOn] = combineEventHandlers<TripleClickOnHandler>()\n const [setTripleClickHandlers, handleTripleClick] = combineEventHandlers<TripleClickHandler>()\n const [setPasteHandlers, handlePaste] = combineEventHandlers<PasteHandler>()\n const [setDropHandlers, handleDrop] = combineEventHandlers<DropHandler>()\n const [setScrollToSelectionHandlers, handleScrollToSelection] = combineEventHandlers<ScrollToSelectionHandler>()\n\n const update = (entries: EditorEventPayload[]) => {\n const map = groupEntries<EditorEventMap>(entries)\n\n setKeyDownHandlers(map.keyDown ?? [])\n setKeyPressHandlers(map.keyPress ?? [])\n setTextInputHandlers(map.textInput ?? [])\n setClickOnHandlers(map.clickOn ?? [])\n setClickHandlers(map.click ?? [])\n setDoubleClickOnHandlers(map.doubleClickOn ?? [])\n setDoubleClickHandlers(map.doubleClick ?? [])\n setTripleClickOnHandlers(map.tripleClickOn ?? [])\n setTripleClickHandlers(map.tripleClick ?? [])\n setPasteHandlers(map.paste ?? [])\n setDropHandlers(map.drop ?? [])\n setScrollToSelectionHandlers(map.scrollToSelection ?? []) \n }\n\n const plugin = new ProseMirrorPlugin({\n key: new PluginKey('prosekit-editor-event'),\n props: {\n handleKeyDown,\n handleKeyPress,\n handleTextInput,\n handleClickOn,\n handleClick,\n handleDoubleClickOn,\n handleDoubleClick,\n handleTripleClickOn,\n handleTripleClick,\n handlePaste,\n handleDrop,\n handleScrollToSelection,\n },\n })\n\n return [update, plugin] as const \n}\n","import type { PlainExtension } from '../../types/extension'\n\nimport { defineDomEventFacetPayload } from './dom-event'\n\n/**\n * A function that is called when the editor gains or loses focus.\n *\n * @param hasFocus - Whether the editor has focus.\n *\n * @public\n */\nexport type FocusChangeHandler = (hasFocus: boolean) => void\n\n/**\n * Registers a event handler that is called when the editor gains or loses focus.\n *\n * @public\n */\nexport function defineFocusChangeHandler(\n handler: FocusChangeHandler,\n): PlainExtension {\n const handleFocus = () => handler(true)\n const handleBlur = () => handler(false)\n return defineDomEventFacetPayload(\n ['focus', handleFocus],\n ['blur', handleBlur],\n )\n}\n","/**\n * @internal\n */\nexport const isApple: boolean = typeof navigator !== 'undefined'\n ? /Mac|iP(hone|[ao]d)/.test(navigator.platform)\n : false\n","import { chainCommands } from '@prosekit/pm/commands'\nimport { keydownHandler } from '@prosekit/pm/keymap'\nimport {\n Plugin,\n PluginKey,\n type Command,\n} from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\nimport mapValues from 'just-map-values'\n\nimport {\n defineFacet,\n type Facet,\n} from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport type { PlainExtension } from '../types/extension'\nimport { toReversed } from '../utils/array'\n\nimport {\n pluginFacet,\n type PluginPayload,\n} from './plugin'\n\n/**\n * @public\n */\nexport interface Keymap {\n [key: string]: Command\n}\n\n/**\n * @public\n */\nexport function defineKeymap(keymap: Keymap): PlainExtension {\n return defineFacetPayload(keymapFacet, [keymap]) as PlainExtension\n}\n\n/**\n * @internal\n */\nexport type KeymapPayload = Keymap\n\n/**\n * @internal\n */\nexport const keymapFacet: Facet<KeymapPayload, PluginPayload> = defineFacet<\n KeymapPayload,\n PluginPayload\n>({\n reduce: () => {\n type Handler = (view: EditorView, event: KeyboardEvent) => boolean\n\n let handler: Handler | undefined\n\n const handlerWrapper: Handler = (view, event) => {\n if (handler) return handler(view, event)\n return false\n }\n\n const plugin = new Plugin({\n key: keymapPluginKey,\n props: { handleKeyDown: handlerWrapper },\n })\n\n return (keymaps: Keymap[]) => {\n handler = keydownHandler(\n mergeKeymaps(\n // The keymap at the end have a higher priority.\n toReversed(keymaps),\n ),\n )\n return plugin\n }\n },\n parent: pluginFacet,\n singleton: true,\n})\n\nfunction mergeKeymaps(keymaps: Keymap[]): Keymap {\n const bindings: Record<string, Command[]> = {}\n\n for (const keymap of keymaps) {\n for (const [key, command] of Object.entries(keymap)) {\n const commands = bindings[key] || (bindings[key] = [])\n commands.push(command)\n }\n }\n\n return mapValues(bindings, mergeCommands)\n}\n\nfunction mergeCommands(commands: Command[]): Command {\n return chainCommands(...commands)\n}\n\nconst keymapPluginKey = new PluginKey('prosekit-keymap')\n","import {\n history,\n redo,\n undo,\n} from '@prosekit/pm/history'\n\nimport { union } from '../editor/union'\nimport type { Extension } from '../types/extension'\nimport { isApple } from '../utils/env'\n\nimport { defineCommands } from './command'\nimport {\n defineKeymap,\n type Keymap,\n} from './keymap'\nimport { definePlugin } from './plugin'\n\nconst keymap: Keymap = {\n 'Mod-z': undo,\n 'Shift-Mod-z': redo,\n}\n\nif (!isApple) {\n keymap['Mod-y'] = redo\n}\n\nconst commands = {\n undo: () => undo,\n redo: () => redo,\n} as const\n\n/**\n * Options for {@link defineHistory}.\n *\n * @public\n */\nexport interface HistoryOptions {\n /**\n * The amount of history events that are collected before the oldest events\n * are discarded.\n *\n * @default 200\n */\n depth?: number\n\n /**\n * The delay in milliseconds between changes after which a new group should be\n * started.\n *\n * @default 250\n */\n newGroupDelay?: number\n}\n\n/**\n * @internal\n */\nexport type HistoryExtension = Extension<{\n Commands: {\n undo: []\n redo: []\n }\n}>\n\n/**\n * Add undo/redo history to the editor.\n *\n * @param options\n *\n * @public\n */\nexport function defineHistory({\n depth = 200,\n newGroupDelay = 250,\n}: HistoryOptions = {}): HistoryExtension {\n return union(\n definePlugin(history({ depth, newGroupDelay })),\n defineKeymap(keymap),\n defineCommands(commands),\n )\n}\n","import {\n baseKeymap,\n chainCommands,\n createParagraphNear,\n deleteSelection,\n joinTextblockBackward,\n liftEmptyBlock,\n newlineInCode,\n selectNodeBackward,\n} from '@prosekit/pm/commands'\nimport { splitSplittableBlock } from 'prosemirror-splittable'\n\nimport { withPriority } from '../editor/with-priority'\nimport type { PlainExtension } from '../types/extension'\nimport { Priority } from '../types/priority'\n\nimport { defineKeymap } from './keymap'\n\n// Replace `splitBlock` with `splitSplittableBlock`\nconst customEnter = chainCommands(\n newlineInCode,\n createParagraphNear,\n liftEmptyBlock,\n splitSplittableBlock,\n)\n\n// Replace `joinBackward` with `joinTextblockBackward`\nconst customBackspace = chainCommands(\n deleteSelection,\n joinTextblockBackward,\n selectNodeBackward,\n)\n\nconst customBaseKeymap = {\n ...baseKeymap,\n Enter: customEnter,\n Backspace: customBackspace,\n}\n\n/**\n * @internal\n */\nexport type BaseKeymapExtension = PlainExtension\n\n/**\n * Defines some basic key bindings.\n *\n * @public\n */\nexport function defineBaseKeymap(options?: {\n /**\n * The priority of the keymap.\n *\n * @default Priority.low\n */\n priority?: Priority\n}): BaseKeymapExtension {\n const priority = options?.priority ?? Priority.low\n return withPriority(defineKeymap(customBaseKeymap), priority)\n}\n","import type {\n MarkSpec,\n ParseRule,\n SchemaSpec,\n} from '@prosekit/pm/model'\nimport clone from 'just-clone'\nimport OrderedMap from 'orderedmap'\n\nimport { defineFacet } from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport { schemaSpecFacet } from '../facets/schema-spec'\nimport type {\n AnyAttrs,\n AttrSpec,\n} from '../types/attrs'\nimport type { Extension } from '../types/extension'\nimport { groupBy } from '../utils/array-grouping'\nimport { assert } from '../utils/assert'\nimport { mergeSpecs } from '../utils/merge-specs'\nimport {\n wrapOutputSpecAttrs,\n wrapTagParseRuleAttrs,\n} from '../utils/output-spec'\nimport { isNotNullish } from '../utils/type-assertion'\n\n/**\n * @public\n */\nexport interface MarkSpecOptions<\n MarkName extends string = string,\n Attrs extends AnyAttrs = AnyAttrs,\n> extends MarkSpec {\n /**\n * The name of the mark type.\n */\n name: MarkName\n\n /**\n * The attributes that marks of this type get.\n */\n attrs?: { [K in keyof Attrs]: AttrSpec<Attrs[K]> }\n}\n\n/**\n * @public\n */\nexport interface MarkAttrOptions<\n MarkName extends string = string,\n AttrName extends string = string,\n AttrType = any,\n> extends AttrSpec<AttrType> {\n /**\n * The name of the mark type.\n */\n type: MarkName\n\n /**\n * The name of the attribute.\n */\n attr: AttrName\n\n /**\n * Returns the attribute key and value to be set on the HTML element.\n *\n * If the returned `key` is `\"style\"`, the value is a string of CSS properties and will\n * be prepended to the existing `style` attribute on the DOM node.\n *\n * @param value - The value of the attribute of current ProseMirror node.\n */\n toDOM?: (value: AttrType) => [key: string, value: string] | null | undefined\n\n /**\n * Parses the attribute value from the DOM.\n */\n parseDOM?: (node: HTMLElement) => AttrType\n}\n\n/**\n * @public\n */\nexport function defineMarkSpec<\n Mark extends string,\n Attrs extends AnyAttrs = AnyAttrs,\n>(\n options: MarkSpecOptions<Mark, Attrs>,\n): Extension<{\n Marks: { [K in Mark]: Attrs }\n}> {\n const payload: MarkSpecPayload = [options, undefined]\n return defineFacetPayload(markSpecFacet, [payload]) as Extension<{\n Marks: any\n }>\n}\n\n/**\n * @public\n */\nexport function defineMarkAttr<\n MarkType extends string = string,\n AttrName extends string = string,\n AttrType = any,\n>(\n options: MarkAttrOptions<MarkType, AttrName, AttrType>,\n): Extension<{\n Marks: { [K in MarkType]: AttrType }\n}> {\n const payload: MarkSpecPayload = [undefined, options]\n return defineFacetPayload(markSpecFacet, [payload]) as Extension<{\n Marks: any\n }>\n}\n\ntype MarkSpecPayload = [\n MarkSpecOptions | undefined,\n MarkAttrOptions | undefined,\n]\n\nconst markSpecFacet = defineFacet<MarkSpecPayload, SchemaSpec>({\n reducer: (payloads: MarkSpecPayload[]): SchemaSpec => {\n let specs = OrderedMap.from<MarkSpec>({})\n\n const specPayloads = payloads.map((input) => input[0]).filter(isNotNullish)\n const attrPayloads = payloads.map((input) => input[1]).filter(isNotNullish)\n\n for (const { name, ...spec } of specPayloads) {\n const prevSpec = specs.get(name)\n if (prevSpec) {\n specs = specs.update(name, mergeSpecs(prevSpec, spec))\n } else {\n // The latest spec has the highest priority, so we put it at the start\n // of the map.\n specs = specs.addToStart(name, spec)\n }\n }\n\n const groupedAttrs = groupBy(attrPayloads, (payload) => payload.type)\n\n for (const [type, attrs] of Object.entries(groupedAttrs)) {\n if (!attrs) continue\n\n const maybeSpec = specs.get(type)\n assert(maybeSpec, `Mark type ${type} must be defined`)\n const spec = clone(maybeSpec)\n\n if (!spec.attrs) {\n spec.attrs = {}\n }\n\n for (const attr of attrs) {\n spec.attrs[attr.attr] = {\n default: attr.default as unknown,\n validate: attr.validate,\n }\n }\n\n if (spec.toDOM) {\n spec.toDOM = wrapOutputSpecAttrs(spec.toDOM, attrs)\n }\n\n if (spec.parseDOM) {\n spec.parseDOM = spec.parseDOM.map((rule) => wrapParseRuleAttrs(rule, attrs))\n }\n\n specs = specs.update(type, spec)\n }\n\n return { marks: specs, nodes: {} }\n },\n parent: schemaSpecFacet,\n singleton: true,\n})\n\nfunction wrapParseRuleAttrs(\n rule: ParseRule,\n attrs: MarkAttrOptions[],\n): ParseRule {\n if (rule.tag) {\n return wrapTagParseRuleAttrs(rule, attrs)\n }\n return rule\n}\n","import {\n PluginKey,\n ProseMirrorPlugin,\n} from '@prosekit/pm/state'\nimport type { MarkViewConstructor } from '@prosekit/pm/view'\n\nimport { defineFacet } from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport type { Extension } from '../types/extension'\n\nimport {\n pluginFacet,\n type PluginPayload,\n} from './plugin'\n\nexport interface MarkViewOptions {\n name: string\n constructor: MarkViewConstructor\n}\n\nexport function defineMarkView(options: MarkViewOptions): Extension {\n return defineFacetPayload(markViewFacet, [options])\n}\n\nconst markViewFacet = defineFacet<MarkViewOptions, PluginPayload>({\n reducer: (inputs: MarkViewOptions[]): PluginPayload => {\n const markViews: { [markName: string]: MarkViewConstructor } = {}\n\n for (const input of inputs) {\n if (!markViews[input.name]) {\n markViews[input.name] = input.constructor\n }\n }\n\n return () => [\n new ProseMirrorPlugin({\n key: new PluginKey('prosekit-mark-view'),\n props: { markViews },\n }),\n ]\n },\n parent: pluginFacet,\n})\n","import {\n PluginKey,\n ProseMirrorPlugin,\n} from '@prosekit/pm/state'\nimport type { MarkViewConstructor } from '@prosekit/pm/view'\n\nimport { defineFacet } from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport type { Extension } from '../types/extension'\nimport { isNotNullish } from '../utils/type-assertion'\n\nimport {\n pluginFacet,\n type PluginPayload,\n} from './plugin'\n\n/**\n * @internal\n */\nexport type MarkViewFactoryOptions<T> = {\n group: string\n factory: (args: T) => MarkViewConstructor\n}\n\n/**\n * @internal\n */\nexport type MarkViewComponentOptions<T> = {\n group: string\n name: string\n args: T\n}\n\ntype MarkViewFactoryInput = [\n MarkViewFactoryOptions<any> | null,\n MarkViewComponentOptions<any> | null,\n]\n\n/**\n * @internal\n */\nexport function defineMarkViewFactory<T>(\n options: MarkViewFactoryOptions<T>,\n): Extension {\n const input: MarkViewFactoryInput = [options, null]\n return defineFacetPayload(markViewFactoryFacet, [input])\n}\n\n/**\n * @internal\n */\nexport function defineMarkViewComponent<T>(\n options: MarkViewComponentOptions<T>,\n): Extension {\n const input: MarkViewFactoryInput = [null, options]\n return defineFacetPayload(markViewFactoryFacet, [input])\n}\n\nconst isServer = typeof window === 'undefined'\n\nconst markViewFactoryFacet = defineFacet<MarkViewFactoryInput, PluginPayload>({\n reducer: (inputs: MarkViewFactoryInput[]): PluginPayload => {\n // Don't register mark views on the server\n if (isServer) return []\n\n const markViews: { [markName: string]: MarkViewConstructor } = {}\n\n const factories = inputs.map((x) => x[0]).filter(isNotNullish)\n const options = inputs.map((x) => x[1]).filter(isNotNullish)\n\n for (const { group, name, args } of options) {\n const factory = factories.find((factory) => factory.group === group)\n if (!factory) continue\n markViews[name] = factory.factory(args)\n }\n\n return () => [\n new ProseMirrorPlugin({\n key: new PluginKey('prosekit-mark-view-effect'),\n props: { markViews },\n }),\n ]\n },\n parent: pluginFacet,\n})\n","import {\n PluginKey,\n ProseMirrorPlugin,\n} from '@prosekit/pm/state'\nimport type { NodeViewConstructor } from '@prosekit/pm/view'\n\nimport { defineFacet } from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport type { Extension } from '../types/extension'\n\nimport {\n pluginFacet,\n type PluginPayload,\n} from './plugin'\n\nexport interface NodeViewOptions {\n name: string\n constructor: NodeViewConstructor\n}\n\nexport function defineNodeView(options: NodeViewOptions): Extension {\n return defineFacetPayload(nodeViewFacet, [options])\n}\n\nconst nodeViewFacet = defineFacet<NodeViewOptions, PluginPayload>({\n reducer: (inputs: NodeViewOptions[]): PluginPayload => {\n const nodeViews: { [nodeName: string]: NodeViewConstructor } = {}\n\n for (const input of inputs) {\n if (!nodeViews[input.name]) {\n nodeViews[input.name] = input.constructor\n }\n }\n\n return () => [\n new ProseMirrorPlugin({\n key: new PluginKey('prosekit-node-view'),\n props: { nodeViews },\n }),\n ]\n },\n parent: pluginFacet,\n})\n","import {\n PluginKey,\n ProseMirrorPlugin,\n} from '@prosekit/pm/state'\nimport type { NodeViewConstructor } from '@prosekit/pm/view'\n\nimport { defineFacet } from '../facets/facet'\nimport { defineFacetPayload } from '../facets/facet-extension'\nimport type { Extension } from '../types/extension'\nimport { isNotNullish } from '../utils/type-assertion'\n\nimport {\n pluginFacet,\n type PluginPayload,\n} from './plugin'\n\n/**\n * @internal\n */\nexport type NodeViewFactoryOptions<T> = {\n group: string\n factory: (args: T) => NodeViewConstructor\n}\n\n/**\n * @internal\n */\nexport type NodeViewComponentOptions<T> = {\n group: string\n name: string\n args: T\n}\n\ntype NodeViewFactoryInput = [\n NodeViewFactoryOptions<any> | null,\n NodeViewComponentOptions<any> | null,\n]\n\n/**\n * @internal\n */\nexport function defineNodeViewFactory<T>(\n options: NodeViewFactoryOptions<T>,\n): Extension {\n const input: NodeViewFactoryInput = [options, null]\n return defineFacetPayload(nodeViewFactoryFacet, [input])\n}\n\n/**\n * @internal\n */\nexport function defineNodeViewComponent<T>(\n options: NodeViewComponentOptions<T>,\n): Extension {\n const input: NodeViewFactoryInput = [null, options]\n return defineFacetPayload(nodeViewFactoryFacet, [input])\n}\n\nconst isServer = typeof window === 'undefined'\n\nconst nodeViewFactoryFacet = defineFacet<NodeViewFactoryInput, PluginPayload>({\n reducer: (inputs: NodeViewFactoryInput[]): PluginPayload => {\n // Don't register node views on the server\n if (isServer) return []\n\n const nodeViews: { [nodeName: string]: NodeViewConstructor } = {}\n\n const factories = inputs.map((x) => x[0]).filter(isNotNullish)\n const options = inputs.map((x) => x[1]).filter(isNotNullish)\n\n for (const { group, name, args } of options) {\n const factory = factories.find((factory) => factory.group === group)\n if (!factory) continue\n nodeViews[name] = factory.factory(args)\n }\n\n return () => [\n new ProseMirrorPlugin({\n key: new PluginKey('prosekit-node-view-effect'),\n props: { nodeViews },\n }),\n ]\n },\n parent: pluginFacet,\n})\n","import type { Attrs } from '@prosekit/pm/model'\n\nimport { withPriority } from '../editor/with-priority'\nimport type { Extension } from '../types/extension'\nimport { Priority } from '../types/priority'\n\nimport { defineNodeSpec } from './node-spec'\n\n/**\n * @internal\n */\ntype ParagraphSpecExtension = Extension<{\n Nodes: {\n paragraph: Attrs\n }\n}>\n\n/**\n * Defines a paragraph node spec.\n */\nfunction defineParagraphSpec(): ParagraphSpecExtension {\n return defineNodeSpec({\n name: 'paragraph',\n content: 'inline*',\n group: 'block',\n parseDOM: [{ tag: 'p' }],\n toDOM() {\n return ['p', 0]\n },\n })\n}\n\n/**\n * @internal\n *\n * @deprecated Use the following import instead:\n *\n * ```ts\n * import type { ParagraphExtension } from 'prosekit/extensions/paragraph'\n * ```\n */\nexport type ParagraphExtension = ParagraphSpecExtension\n\n/**\n * @public\n *\n * Defines a paragraph node spec as the highest priority, because it should be the default block node for most cases.\n *\n * @deprecated Use the following import instead:\n *\n * ```ts\n * import { defineParagraph } from 'prosekit/extensions/paragraph'\n * ```\n */\nexport function defineParagraph(): ParagraphExtension {\n console.warn(\n '[prosekit] The `defineParagraph` function from `prosekit/core` is deprecated. Use the following import instead: `import { defineParagraph } from \"prosekit/extensions/paragraph\"`.',\n )\n\n return withPriority(defineParagraphSpec(), Priority.highest)\n}\n","import type { Attrs } from '@prosekit/pm/model'\n\nimport type { Extension } from '../types/extension'\n\nimport { defineNodeSpec } from './node-spec'\n\n/**\n * @internal\n */\nexport type TextExtension = Extension<{\n Nodes: {\n text: Attrs\n }\n}>\n\n/**\n * @public\n *\n * @deprecated Use the following import instead:\n *\n * ```ts\n * import { defineText } from 'prosekit/extensions/text'\n * ```\n */\nexport function defineText(): TextExtension {\n console.warn(\n '[prosekit] The `defineText` function from `prosekit/core` is deprecated. Use the following import instead: `import { defineText } from \"prosekit/extensions/text\"`.',\n )\n\n return defineNodeSpec({\n name: 'text',\n group: 'inline',\n })\n}\n","import { once } from '@ocavue/utils'\n\n/**\n * Checks if the browser supports [regex lookbehind assertion](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion).\n */\nexport const canUseRegexLookbehind: () => boolean = once(() => {\n try {\n return 'ab'.replace(new RegExp('(?<=a)b', 'g'), 'c') === 'ac'\n } catch {\n return false\n }\n})\n","import clsxLite from 'clsx/lite'\n\n/**\n * A utility for constructing `className` strings conditionally.\n *\n * It is a re-export of [clsx/lite](https://www.npmjs.com/package/clsx) with stricter types.\n *\n * @public\n */\nexport const clsx: (\n ...args: Array<string | boolean | null | undefined>\n) => string = clsxLite\n","import type {\n Fragment,\n ProseMirrorNode,\n} from '@prosekit/pm/model'\n\n/**\n * Collects all children of a node or a fragment, and returns them as an array.\n *\n * @deprecated Use `node.children` or `fragment.content` instead.\n *\n * @hidden\n */\nexport function collectChildren(\n parent: ProseMirrorNode | Fragment,\n): ProseMirrorNode[] {\n const children: ProseMirrorNode[] = []\n for (let i = 0; i < parent.childCount; i++) {\n children.push(parent.child(i))\n }\n return children\n}\n","import {\n ProseMirrorFragment,\n ProseMirrorNode,\n} from '@prosekit/pm/model'\n\nimport { ProseKitError } from '../error'\n\n/**\n * @hidden\n *\n * @deprecated\n */\nexport type NodeContent = ProseMirrorNode | ProseMirrorFragment | NodeContent[]\n\n/**\n * Collects all nodes from a given content.\n *\n * @deprecated Use `collectChildren` instead.\n *\n * @hidden\n */\nexport function collectNodes(content: NodeContent): ProseMirrorNode[] {\n if (Array.isArray(content)) {\n return content.flatMap(collectNodes)\n }\n if (content instanceof ProseMirrorNode) {\n return [content]\n }\n if (content instanceof ProseMirrorFragment) {\n const nodes: ProseMirrorNode[] = []\n for (let i = 0; i < content.childCount; i++) {\n nodes.push(content.child(i))\n }\n return nodes\n }\n throw new ProseKitError(`Invalid node content: ${typeof content}`)\n}\n","import type { ProseMirrorNode } from '@prosekit/pm/model'\n\n/**\n * @internal\n */\nexport function containsInlineNode(\n doc: ProseMirrorNode,\n from: number,\n to: number,\n): boolean {\n let found = false\n doc.nodesBetween(from, to, (node) => {\n if (found) return false\n if (node.isInline) found = true\n })\n return found\n}\n","let id = 0\n\n/**\n * Returns a unique id in the current process that can be used in various places.\n *\n * @internal\n *\n * @deprecated Import `getId` from `@ocavue/utils` package instead. Remove it in a future version.\n */\nexport function getId(): string {\n id = (id + 1) % Number.MAX_SAFE_INTEGER\n return `id:${id}`\n}\n","import type { ResolvedPos } from '@prosekit/pm/model'\nimport type {\n EditorState,\n TextSelection,\n} from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\n/**\n * Whether the selection is an empty text selection at the start of a block.\n *\n * @internal\n */\nexport function isAtBlockStart(\n state: EditorState,\n view?: EditorView,\n): ResolvedPos | null {\n // Copy from https://github.com/ProseMirror/prosemirror-commands/blob/1.5.2/src/commands.ts#L15\n const { $cursor } = state.selection as TextSelection\n if (\n !$cursor\n || (view ? !view.endOfTextblock('backward', state) : $cursor.parentOffset > 0)\n ) {\n return null\n }\n return $cursor\n}\n","import type { NodeType } from '@prosekit/pm/model'\nimport type { Selection } from '@prosekit/pm/state'\n\nfunction isCodeBlockType(type: NodeType): boolean {\n return !!(type.spec.code && type.isBlock)\n}\n\n/**\n * Check if the selection is in a code block.\n *\n * @internal\n */\nexport function isInCodeBlock(selection: Selection): boolean {\n return (\n isCodeBlockType(selection.$from.parent.type)\n || isCodeBlockType(selection.$to.parent.type)\n )\n}\n","/**\n * @internal\n */\nexport function maybeRun<\n Value,\n Args extends unknown[],\n>(value: Value | ((...args: Args) => Value), ...args: Args): Value {\n return typeof value === 'function'\n ? (value as (...args: Args) => Value)(...args)\n : value\n}\n","/**\n * @internal\n */\nexport const OBJECT_REPLACEMENT_CHARACTER = '\\uFFFC'\n","import type { Command } from '@prosekit/pm/state'\n\nimport { isInCodeBlock } from './is-in-code-block'\n\n/**\n * @internal\n */\nexport function withSkipCodeBlock(command: Command): Command {\n return (state, dispatch, view) => {\n if (isInCodeBlock(state.selection)) {\n return false\n }\n return command(state, dispatch, view)\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/core",
3
3
  "type": "module",
4
- "version": "0.8.3",
4
+ "version": "0.8.4",
5
5
  "private": false,
6
6
  "description": "Core features for ProseKit",
7
7
  "author": {
@@ -10,14 +10,14 @@
10
10
  },
11
11
  "license": "MIT",
12
12
  "funding": "https://github.com/sponsors/ocavue",
13
- "homepage": "https://github.com/ocavue/prosekit#readme",
13
+ "homepage": "https://github.com/prosekit/prosekit#readme",
14
14
  "repository": {
15
15
  "type": "git",
16
- "url": "git+https://github.com/ocavue/prosekit.git",
16
+ "url": "git+https://github.com/prosekit/prosekit.git",
17
17
  "directory": "packages/core"
18
18
  },
19
19
  "bugs": {
20
- "url": "https://github.com/ocavue/prosekit/issues"
20
+ "url": "https://github.com/prosekit/prosekit/issues"
21
21
  },
22
22
  "keywords": [
23
23
  "ProseMirror"
@@ -36,22 +36,25 @@
36
36
  }
37
37
  },
38
38
  "files": [
39
- "dist"
39
+ "dist",
40
+ "src"
40
41
  ],
41
42
  "dependencies": {
42
- "@ocavue/utils": "^0.5.0",
43
+ "@ocavue/utils": "^0.7.1",
43
44
  "clsx": "^2.1.1",
44
45
  "just-clone": "^6.2.0",
45
46
  "just-map-values": "^3.2.0",
46
47
  "orderedmap": "^2.1.1",
47
48
  "prosemirror-splittable": "^0.1.1",
48
49
  "type-fest": "^4.41.0",
49
- "@prosekit/pm": "^0.1.11"
50
+ "@prosekit/pm": "^0.1.12"
50
51
  },
51
52
  "devDependencies": {
53
+ "@types/diffable-html": "^5.0.2",
52
54
  "@vitest/browser": "^3.2.4",
53
- "tsdown": "^0.12.9",
54
- "typescript": "~5.8.3",
55
+ "diffable-html": "^6.0.1",
56
+ "tsdown": "^0.14.2",
57
+ "typescript": "~5.9.2",
55
58
  "vitest": "^3.2.4",
56
59
  "@prosekit/config-tsdown": "0.0.0",
57
60
  "@prosekit/config-vitest": "0.0.0"