@prosekit/core 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/{editor-4lgGc3CY.d.ts → editor.d.ts} +58 -18
  2. package/dist/editor.d.ts.map +1 -0
  3. package/dist/{editor-DGNUXn-u.js → editor.js} +40 -81
  4. package/dist/editor.js.map +1 -0
  5. package/dist/prosekit-core-test.d.ts +1 -2
  6. package/dist/prosekit-core-test.d.ts.map +1 -1
  7. package/dist/prosekit-core-test.js +2 -4
  8. package/dist/prosekit-core-test.js.map +1 -1
  9. package/dist/prosekit-core.d.ts +148 -68
  10. package/dist/prosekit-core.d.ts.map +1 -1
  11. package/dist/prosekit-core.js +184 -138
  12. package/dist/prosekit-core.js.map +1 -1
  13. package/package.json +9 -9
  14. package/src/commands/add-mark.ts +3 -6
  15. package/src/commands/expand-mark.ts +4 -11
  16. package/src/commands/insert-default-block.spec.ts +4 -8
  17. package/src/commands/insert-default-block.ts +2 -5
  18. package/src/commands/insert-node.ts +7 -11
  19. package/src/commands/remove-mark.ts +3 -6
  20. package/src/commands/remove-node.ts +4 -4
  21. package/src/commands/select-block.spec.ts +6 -8
  22. package/src/commands/select-block.ts +2 -5
  23. package/src/commands/set-block-type.ts +3 -6
  24. package/src/commands/set-node-attrs-between.spec.ts +221 -0
  25. package/src/commands/set-node-attrs-between.ts +77 -0
  26. package/src/commands/set-node-attrs.spec.ts +129 -0
  27. package/src/commands/set-node-attrs.ts +26 -27
  28. package/src/commands/toggle-mark.ts +3 -6
  29. package/src/commands/toggle-node.ts +4 -7
  30. package/src/commands/toggle-wrap.spec.ts +2 -6
  31. package/src/commands/toggle-wrap.ts +3 -6
  32. package/src/commands/unset-block-type.spec.ts +2 -6
  33. package/src/commands/unset-block-type.ts +3 -9
  34. package/src/commands/unset-mark.spec.ts +2 -6
  35. package/src/commands/unset-mark.ts +1 -1
  36. package/src/commands/wrap.ts +2 -5
  37. package/src/editor/action.spec.ts +5 -9
  38. package/src/editor/action.ts +7 -14
  39. package/src/editor/editor.spec.ts +8 -15
  40. package/src/editor/editor.ts +18 -52
  41. package/src/editor/union.spec.ts +8 -12
  42. package/src/editor/union.ts +4 -7
  43. package/src/editor/with-priority.ts +3 -3
  44. package/src/error.ts +8 -1
  45. package/src/extensions/clipboard-serializer.ts +22 -26
  46. package/src/extensions/command.ts +22 -54
  47. package/src/extensions/default-state.spec.ts +4 -8
  48. package/src/extensions/default-state.ts +6 -12
  49. package/src/extensions/events/doc-change.ts +2 -2
  50. package/src/extensions/events/dom-event.spec.ts +4 -9
  51. package/src/extensions/events/dom-event.ts +9 -21
  52. package/src/extensions/events/editor-event.ts +8 -20
  53. package/src/extensions/events/focus.spec.ts +7 -12
  54. package/src/extensions/events/focus.ts +2 -2
  55. package/src/extensions/events/plugin-view.ts +5 -12
  56. package/src/extensions/history.ts +7 -14
  57. package/src/extensions/keymap-base.spec.ts +6 -15
  58. package/src/extensions/keymap-base.ts +6 -9
  59. package/src/extensions/keymap.spec.ts +10 -24
  60. package/src/extensions/keymap.ts +5 -15
  61. package/src/extensions/mark-spec.spec.ts +6 -21
  62. package/src/extensions/mark-spec.ts +10 -21
  63. package/src/extensions/mark-view-effect.ts +6 -12
  64. package/src/extensions/mark-view.ts +5 -11
  65. package/src/extensions/node-spec.spec.ts +10 -26
  66. package/src/extensions/node-spec.ts +10 -21
  67. package/src/extensions/node-view-effect.ts +6 -12
  68. package/src/extensions/node-view.ts +5 -11
  69. package/src/extensions/plugin.spec.ts +9 -22
  70. package/src/extensions/plugin.ts +6 -15
  71. package/src/facets/base-extension.ts +7 -10
  72. package/src/facets/command.ts +3 -9
  73. package/src/facets/facet-extension.spec.ts +10 -21
  74. package/src/facets/facet-extension.ts +12 -8
  75. package/src/facets/facet-node.spec.ts +4 -11
  76. package/src/facets/facet-node.ts +27 -22
  77. package/src/facets/facet.spec.ts +2 -5
  78. package/src/facets/facet.ts +14 -7
  79. package/src/facets/root.ts +2 -2
  80. package/src/facets/schema-spec.ts +3 -10
  81. package/src/facets/schema.ts +4 -13
  82. package/src/facets/state.spec.ts +8 -15
  83. package/src/facets/state.ts +5 -19
  84. package/src/facets/union-extension.ts +10 -13
  85. package/src/index.ts +74 -200
  86. package/src/test/index.ts +1 -4
  87. package/src/test/test-builder.ts +2 -5
  88. package/src/test/test-editor.spec.ts +2 -6
  89. package/src/test/test-editor.ts +7 -26
  90. package/src/testing/index.ts +26 -22
  91. package/src/types/extension-mark.ts +1 -1
  92. package/src/types/extension-node.ts +1 -1
  93. package/src/types/extension.spec.ts +2 -5
  94. package/src/types/extension.ts +8 -18
  95. package/src/types/pick-string-literal.spec.ts +2 -2
  96. package/src/types/pick-string-literal.ts +1 -1
  97. package/src/types/pick-sub-type.spec.ts +2 -2
  98. package/src/types/priority.ts +50 -7
  99. package/src/types/simplify-deeper.spec.ts +2 -2
  100. package/src/types/simplify-union.spec.ts +2 -2
  101. package/src/types/simplify-union.ts +1 -4
  102. package/src/utils/array-grouping.spec.ts +2 -5
  103. package/src/utils/assert.ts +1 -1
  104. package/src/utils/attrs-match.ts +1 -5
  105. package/src/utils/can-use-regex-lookbehind.ts +2 -8
  106. package/src/utils/clsx.spec.ts +2 -5
  107. package/src/utils/combine-event-handlers.spec.ts +2 -6
  108. package/src/utils/default-block-at.ts +1 -4
  109. package/src/utils/editor-content.spec.ts +3 -6
  110. package/src/utils/editor-content.ts +5 -17
  111. package/src/utils/find-node.ts +65 -0
  112. package/src/utils/find-parent-node-of-type.ts +6 -12
  113. package/src/utils/find-parent-node.spec.ts +3 -7
  114. package/src/utils/find-parent-node.ts +1 -4
  115. package/src/utils/get-custom-selection.ts +1 -5
  116. package/src/utils/get-dom-api.ts +1 -1
  117. package/src/utils/get-mark-type.ts +2 -5
  118. package/src/utils/get-node-type.ts +2 -5
  119. package/src/utils/get-node-types.ts +2 -5
  120. package/src/utils/includes-mark.ts +2 -6
  121. package/src/utils/is-at-block-start.ts +1 -4
  122. package/src/utils/is-mark-absent.spec.ts +3 -6
  123. package/src/utils/is-mark-absent.ts +2 -6
  124. package/src/utils/is-mark-active.ts +4 -7
  125. package/src/utils/is-node-active.spec.ts +109 -0
  126. package/src/utils/is-node-active.ts +19 -10
  127. package/src/utils/is-subset.spec.ts +2 -5
  128. package/src/utils/maybe-run.spec.ts +2 -6
  129. package/src/utils/merge-objects.spec.ts +2 -5
  130. package/src/utils/merge-objects.ts +3 -2
  131. package/src/utils/merge-specs.ts +2 -5
  132. package/src/utils/object-equal.spec.ts +2 -5
  133. package/src/utils/output-spec.test.ts +2 -6
  134. package/src/utils/output-spec.ts +2 -10
  135. package/src/utils/parse.spec.ts +6 -15
  136. package/src/utils/parse.ts +4 -16
  137. package/src/utils/remove-undefined-values.spec.ts +2 -5
  138. package/src/utils/set-selection-around.ts +1 -4
  139. package/src/utils/type-assertion.ts +2 -21
  140. package/src/utils/unicode.spec.ts +2 -5
  141. package/src/utils/with-skip-code-block.ts +1 -1
  142. package/dist/editor-4lgGc3CY.d.ts.map +0 -1
  143. package/dist/editor-DGNUXn-u.js.map +0 -1
@@ -49,11 +49,11 @@ type NodeChild = ProseMirrorNode | string | NodeChild[];
49
49
  *
50
50
  * @public
51
51
  */
52
- interface NodeAction<Attrs$1 extends AnyAttrs = AnyAttrs> {
52
+ interface NodeAction<Attrs extends AnyAttrs = AnyAttrs> {
53
53
  /**
54
54
  * Creates a node with attributes and any number of children.
55
55
  */
56
- (attrs: Attrs$1 | null, ...children: NodeChild[]): ProseMirrorNode;
56
+ (attrs: Attrs | null, ...children: NodeChild[]): ProseMirrorNode;
57
57
  /**
58
58
  * Creates a node with any number of children.
59
59
  */
@@ -63,7 +63,7 @@ interface NodeAction<Attrs$1 extends AnyAttrs = AnyAttrs> {
63
63
  * optional `attrs` parameter is provided, it will check if the node is active
64
64
  * with the given attributes.
65
65
  */
66
- isActive: (attrs?: Attrs$1) => boolean;
66
+ isActive: (attrs?: Attrs) => boolean;
67
67
  }
68
68
  /**
69
69
  * A function for applying a mark with optional attributes and any number of
@@ -74,11 +74,11 @@ interface NodeAction<Attrs$1 extends AnyAttrs = AnyAttrs> {
74
74
  *
75
75
  * @public
76
76
  */
77
- interface MarkAction<Attrs$1 extends AnyAttrs = AnyAttrs> {
77
+ interface MarkAction<Attrs extends AnyAttrs = AnyAttrs> {
78
78
  /**
79
79
  * Applies a mark with attributes and any number of children.
80
80
  */
81
- (attrs: Attrs$1 | null, ...children: NodeChild[]): ProseMirrorNode[];
81
+ (attrs: Attrs | null, ...children: NodeChild[]): ProseMirrorNode[];
82
82
  /**
83
83
  * Applies a mark with any number of children.
84
84
  */
@@ -88,7 +88,7 @@ interface MarkAction<Attrs$1 extends AnyAttrs = AnyAttrs> {
88
88
  * optional `attrs` parameter is provided, it will check if the mark is active
89
89
  * with the given attributes.
90
90
  */
91
- isActive: (attrs?: Attrs$1) => boolean;
91
+ isActive: (attrs?: Attrs) => boolean;
92
92
  }
93
93
  //#endregion
94
94
  //#region src/types/extension-command.d.ts
@@ -161,15 +161,55 @@ type PickStringLiteral<T> = PickSubType<T, string>;
161
161
  /**
162
162
  * ProseKit extension priority.
163
163
  *
164
+ * There are five priority levels available:
165
+ *
166
+ * - `Priority.lowest`
167
+ * - `Priority.low`
168
+ * - `Priority.default`
169
+ * - `Priority.high`
170
+ * - `Priority.highest`
171
+ *
172
+ * @example
173
+ *
174
+ * ```ts
175
+ * import { withPriority, Priority } from 'prosekit/core'
176
+ * import { myExtension } from './my-extension.js'
177
+ *
178
+ * const myExtensionWithHighPriority = withPriority(myExtension, Priority.high)
179
+ * ```
180
+ *
164
181
  * @public
165
182
  */
166
- declare enum Priority {
167
- lowest = 0,
168
- low = 1,
169
- default = 2,
170
- high = 3,
171
- highest = 4,
172
- }
183
+ declare const Priority: {
184
+ readonly lowest: 0;
185
+ readonly low: 1;
186
+ readonly default: 2;
187
+ readonly high: 3;
188
+ readonly highest: 4;
189
+ };
190
+ /**
191
+ * ProseKit extension priority.
192
+ *
193
+ * There are five priority levels available:
194
+ *
195
+ * - `Priority.lowest`
196
+ * - `Priority.low`
197
+ * - `Priority.default`
198
+ * - `Priority.high`
199
+ * - `Priority.highest`
200
+ *
201
+ * @example
202
+ *
203
+ * ```ts
204
+ * import { withPriority, Priority } from 'prosekit/core'
205
+ * import { myExtension } from './my-extension.js'
206
+ *
207
+ * const myExtensionWithHighPriority = withPriority(myExtension, Priority.high)
208
+ * ```
209
+ *
210
+ * @public
211
+ */
212
+ type Priority = typeof Priority[keyof typeof Priority];
173
213
  //#endregion
174
214
  //#region src/types/simplify-deeper.d.ts
175
215
  /**
@@ -187,10 +227,10 @@ type SimplifyUnion<T> = Simplify<UnionToIntersection<T extends undefined ? never
187
227
  /**
188
228
  * @internal
189
229
  */
190
- interface ExtensionTyping<N$1 extends NodeTyping = never, M$1 extends MarkTyping = never, C$1 extends CommandTyping = never> {
191
- Nodes?: N$1;
192
- Marks?: M$1;
193
- Commands?: C$1;
230
+ interface ExtensionTyping<N extends NodeTyping = never, M extends MarkTyping = never, C extends CommandTyping = never> {
231
+ Nodes?: N;
232
+ Marks?: M;
233
+ Commands?: C;
194
234
  }
195
235
  /**
196
236
  * @public
@@ -679,4 +719,4 @@ declare class Editor<E extends Extension = any> {
679
719
  }
680
720
  //#endregion
681
721
  export { ExtractMarks as A, NodeTyping as B, StepJSON as C, ExtractCommandCreators as D, ExtractCommandActions as E, Union as F, CommandCreator as G, MarkTyping as H, SimplifyUnion as I, NodeAction as J, CommandTyping as K, SimplifyDeeper as L, ExtractNodes as M, ExtractTyping as N, ExtractCommands as O, PlainExtension as P, Priority as R, StateJSON as S, ExtensionTyping as T, ToMarkAction as U, ToNodeAction as V, CommandAction as W, AnyAttrs as X, NodeChild as Y, AttrSpec as Z, nodeFromHTML as _, DOMDocumentOptions as a, NodeJSON as b, JSONParserOptions as c, htmlFromJSON as d, htmlFromNode as f, nodeFromElement as g, jsonFromState as h, createEditor as i, ExtractNodeActions as j, ExtractMarkActions as k, elementFromJSON as l, jsonFromNode as m, EditorInstance as n, DOMParserOptions as o, jsonFromHTML as p, MarkAction as q, EditorOptions as r, DOMSerializerOptions as s, Editor as t, elementFromNode as u, nodeFromJSON as v, Extension as w, SelectionJSON as x, stateFromJSON as y, PickSubType as z };
682
- //# sourceMappingURL=editor-4lgGc3CY.d.ts.map
722
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","names":[],"sources":["../src/types/attrs.ts","../src/editor/action.ts","../src/types/extension-command.ts","../src/types/extension-mark.ts","../src/types/extension-node.ts","../src/types/pick-sub-type.ts","../src/types/pick-string-literal.ts","../src/types/priority.ts","../src/types/simplify-deeper.ts","../src/types/simplify-union.ts","../src/types/extension.ts","../src/types/model.ts","../src/types/dom-node.ts","../src/utils/parse.ts","../src/editor/editor.ts"],"mappings":";;;;;;;;;;;KAOY,QAAA,GAAW,KAAA;;;;KAKX,QAAA;EAAA;;;;;EAMV,OAAA,GAAU,QAAA;EAAA;;;;;;;;ACFZ;;EDcE,QAAA,cAAsB,KAAA;AAAA;;;;;;AAvBxB;;KCSY,SAAA,GAAY,eAAA,YAA2B,SAAA;;;ADJnD;;;;;;;UCeiB,UAAA,eAAyB,QAAA,GAAW,QAAA;EDG7B;;;EAAA,CCCrB,KAAA,EAAO,KAAA,YAAiB,QAAA,EAAU,SAAA,KAAc,eAAA;;;AAfnD;MAoBM,QAAA,EAAU,SAAA,KAAc,eAAA;;;;AAT9B;;EAgBE,QAAA,GAAW,KAAA,GAAQ,KAAA;AAAA;;;;;;;;;;UAYJ,UAAA,eAAyB,QAAA,GAAW,QAAA;EA5BX;;;EAAA,CAgCvC,KAAA,EAAO,KAAA,YAAiB,QAAA,EAAU,SAAA,KAAc,eAAA;EA5BxB;;;EAAA,IAiCrB,QAAA,EAAU,SAAA,KAAc,eAAA;EA5Bd;;;;;EAmCd,QAAA,GAAW,KAAA,GAAQ,KAAA;AAAA;;;;;;;;ADhErB;;UEEiB,aAAA;EFFM;;AAKvB;;EALuB,IEOjB,IAAA,EAAM,IAAA;EFIQ;;;;EEElB,OAAA,IAAW,IAAA,EAAM,IAAA;AAAA;AAAA,KAGP,cAAA,mCACP,GAAA,EAAK,IAAA,KACL,OAAA;;;;UAKY,aAAA;EAAA,CACd,IAAA;AAAA;AAAA,KAOS,iBAAA,WAA4B,aAAA,kBAC1B,CAAA,GAAI,cAAA,CAAe,CAAA,CAAE,CAAA;AAAA,KAGvB,eAAA,WAA0B,aAAA,kBACxB,CAAA,GAAI,aAAA,CAAc,CAAA,CAAE,CAAA;;;;;;UCtCjB,UAAA;EAAA,CACd,IAAA,WAAe,MAAA;AAAA;;;;KAMN,YAAA,WAAuB,UAAA,kBACrB,CAAA,GAAI,UAAA,CAAW,CAAA,CAAE,CAAA;;;;;;UCRd,UAAA;EAAA,CACd,IAAA,WAAe,MAAA;AAAA;;;;KAMN,YAAA,WAAuB,UAAA,kBACrB,CAAA,GAAI,UAAA,CAAW,CAAA,CAAE,CAAA;;;;;;KCVnB,WAAA,qBAAgC,IAAA,SAAa,UAAA,IAAc,UAAA,WAAqB,IAAA,YACxF,IAAA;;;;;;KCCQ,iBAAA,MAAuB,WAAA,CAAY,CAAA;;;;;;;;;ANE/C;;;;;AAKA;;;;;;;;;;;cOUM,QAAA;EAAA;;;;;;;ANKN;;;;;;;;;;;;;;;;;;;;;KMyBK,QAAA,UAAkB,QAAA,cAAsB,QAAA;;;;;;KC/CjC,cAAA,0BAAwC,CAAA,GAAI,QAAA,CAAS,CAAA,CAAE,OAAA;;;;;;KCAvD,aAAA,MAAmB,QAAA,CAC7B,mBAAA,CAAoB,CAAA,6BAA8B,CAAA;;;;;ATMpD;UUEiB,eAAA,WACL,UAAA,oBACA,UAAA,oBACA,aAAA;EAEV,KAAA,GAAQ,CAAA;EACR,KAAA,GAAQ,CAAA;EACR,QAAA,GAAW,CAAA;AAAA;;;;UAMI,SAAA,WACL,eAAA,kBAAiC,eAAA;EAE3C,SAAA,EAAW,SAAA,GAAY,SAAA;EACvB,QAAA,GAAW,QAAA;;;ATfb;;;ESsBE,MAAA,EAAQ,MAAA;ETtBkD;ESyB1D,KAAA,GAAQ,CAAA;AAAA;;;;KAME,aAAA,WAAwB,SAAA,IAAa,CAAA,SAAU,SAAA,CAAU,eAAA,+BAA8C,eAAA,CAC/G,WAAA,CAAY,CAAA,EAAG,UAAA,GACf,WAAA,CAAY,CAAA,EAAG,UAAA,GACf,WAAA,CAAY,CAAA,EAAG,aAAA;;;;;;KASP,cAAA,GAAiB,SAAA;EAC3B,KAAA;EACA,KAAA;EACA,QAAA;AAAA;;;;KAMU,YAAA,WAAuB,SAAA,IAAa,cAAA,CAC9C,aAAA,CAAc,aAAA,CAAc,CAAA;;;;KAMlB,gBAAA,WAA2B,SAAA,IAAa,iBAAA,OAC5C,YAAA,CAAa,CAAA;;;;KAMT,YAAA,WAAuB,SAAA,IAAa,cAAA,CAC9C,aAAA,CAAc,aAAA,CAAc,CAAA;;AT5B9B;;KSkCY,gBAAA,WAA2B,SAAA,IAAa,iBAAA,OAC5C,YAAA,CAAa,CAAA;;;;KAMT,eAAA,WAA0B,SAAA,IAAa,aAAA,CACjD,aAAA,CAAc,CAAA;;;;KAMJ,sBAAA,WAAiC,SAAA,IAAa,iBAAA,CACxD,eAAA,CAAgB,CAAA;;;;;;KAQN,qBAAA,WAAgC,SAAA,IAAa,eAAA,CACvD,eAAA,CAAgB,CAAA;;;;;;KAQN,kBAAA,WAA6B,SAAA,IAAa,YAAA,CACpD,YAAA,CAAa,CAAA;;;;;;KAQH,kBAAA,WAA6B,SAAA,IAAa,YAAA,CACpD,YAAA,CAAa,CAAA;;;;KAMH,KAAA,oBAAyB,SAAA,MAAe,SAAA;EAClD,KAAA,EAAO,YAAA,CAAa,CAAA;EACpB,KAAA,EAAO,YAAA,CAAa,CAAA;EACpB,QAAA,EAAU,eAAA,CAAgB,CAAA;AAAA;;;;;;;;UCvIX,QAAA;EACf,IAAA;EACA,KAAA,GAAQ,KAAA;IAAQ,IAAA;IAAc,KAAA,GAAQ,MAAA;EAAA;EACtC,IAAA;EACA,OAAA,GAAU,QAAA;EACV,KAAA,GAAQ,MAAA;AAAA;;;;;;UAQO,aAAA;EACf,MAAA;EACA,IAAA;EACA,IAAA;AAAA;AVLF;;;;;AAAA,UUaiB,SAAA;EVFU;;;EUMzB,GAAA,EAAK,QAAA;EVFG;;;EUOR,SAAA,EAAW,aAAA;AAAA;;;;;;UAQI,QAAA;EVfP;;;EUmBR,QAAA;EAAA,CAEC,CAAA;AAAA;;;KCpDS,OAAA,GAAU,YAAA,QAAoB,MAAA,CAAO,IAAA;;;;UCShC,gBAAA,SAAyB,YAAA;EACxC,SAAA,UAAmB,SAAA;AAAA;;UAIJ,oBAAA;EACf,aAAA;IAAkB,UAAA,SAAmB,aAAA,CAAc,UAAA;EAAA;AAAA;;UAIpC,kBAAA;EbDf;;;;;EaOA,QAAA,GAAW,QAAA;AAAA;;UAII,iBAAA;EZbL;;;EYiBV,MAAA,EAAQ,MAAA;AAAA;AZNV;;;;;;;;;;;;AAAA,iBYuBgB,aAAA,CAAc,KAAA,EAAO,WAAA,GAAc,SAAA;;;;;;;;;;;;;iBAgBnC,aAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA,EAAS,iBAAA,GACR,WAAA;;;;AZdH;;;;;;;;;iBYgCgB,YAAA,CAAa,IAAA,EAAM,eAAA,GAAkB,QAAA;;;;;;;;;;;;;iBAgBrC,YAAA,CACd,IAAA,EAAM,QAAA,EACN,OAAA,EAAS,iBAAA,GACR,eAAA;;;;;;;;;;AXjGH;;;iBWmHgB,eAAA,CACd,OAAA,EAAS,OAAA,EACT,OAAA,EAAS,gBAAA,GAAmB,iBAAA,GAC3B,eAAA;;;;;;;;;AXxGH;;;;iBW2HgB,eAAA,CACd,IAAA,EAAM,eAAA,EACN,OAAA,GAAU,oBAAA,GAAuB,kBAAA,GAChC,WAAA;;;;;AX/GH;;;;;;;;iBWsKgB,YAAA,CACd,IAAA,UACA,OAAA,EAAS,gBAAA,GAAmB,iBAAA,GAAoB,kBAAA,GAC/C,eAAA;;;;;;;;;;;AXrKH;;iBWqLgB,YAAA,CACd,IAAA,EAAM,eAAA,EACN,OAAA,GAAU,oBAAA,GAAuB,kBAAA;;;;;;;AV5NnC;;;;;AAOA;iBU2PgB,eAAA,CACd,IAAA,EAAM,QAAA,EACN,OAAA,EAAS,iBAAA,GAAoB,oBAAA,GAAuB,kBAAA,GACnD,WAAA;;;;;;;;;;;;;iBAkBa,YAAA,CACd,IAAA,UACA,OAAA,EAAS,kBAAA,GAAqB,gBAAA,GAAmB,iBAAA,GAChD,QAAA;;;;;;;;AT1RH;;;;;iBS0SgB,YAAA,CACd,IAAA,EAAM,QAAA,EACN,OAAA,EAAS,iBAAA,GAAoB,oBAAA,GAAuB,kBAAA;;;;;;UCpRrC,aAAA,WAAwB,SAAA;EdjBrB;;;EcqBlB,SAAA,EAAW,CAAA;EdfX;;;;EcqBA,cAAA,GAAiB,QAAA,YAAoB,OAAA;EdTD;;;;EcepC,gBAAA,GAAmB,aAAA;AAAA;;;;UAMJ,iBAAA,SAA0B,kBAAA;;;;iBAoB3B,YAAA,WAAuB,SAAA,CAAA,CACrC,OAAA,EAAS,aAAA,CAAc,CAAA,IACtB,MAAA,CAAO,CAAA;;;;;;cAWG,cAAA;EACX,IAAA,EAAM,UAAA;EACN,MAAA,EAAQ,MAAA;EACR,KAAA,EAAO,MAAA,SAAe,UAAA;EACtB,KAAA,EAAO,MAAA,SAAe,UAAA;EACtB,QAAA,EAAU,MAAA,SAAe,aAAA;EAAA,QAEjB,IAAA;EAAA,QACA,iBAAA;EAAA,QACA,YAAA;cAEI,SAAA,EAAW,SAAA;EAwBhB,QAAA,QAAe,WAAA;EAAA,QAId,MAAA;EAAA,QAIA,OAAA;EAID,WAAA,CAAY,KAAA,EAAO,WAAA;EAAA,QAQlB,QAAA;EAQD,UAAA,CACL,OAAA,EAAS,QAAA,YAAoB,OAAA,GAAU,eAAA,EACvC,SAAA,GAAY,aAAA,GAAgB,SAAA;Eb9FL;;;EaoHlB,UAAA,QAAiB,QAAA;EbhHW;;;EawH5B,UAAA,GAAc,OAAA,GAAU,iBAAA;EAAA,QAOvB,eAAA;EA8CD,GAAA,CAAI,SAAA,EAAW,SAAA,GAAY,YAAA;EAuB3B,KAAA,CAAM,KAAA,EAAO,WAAA;EAYb,OAAA,CAAA;EAAA,IASH,OAAA,CAAA;EAAA,IAIO,UAAA,CAAA,GAAc,UAAA;EAOlB,aAAA,CAAc,OAAA,WAAkB,MAAA;EAQhC,aAAA,CAAc,OAAA,WAAkB,MAAA;EAUvC,IAAA,CAAK,OAAA,EAAS,OAAA;EAKd,OAAA,CAAQ,OAAA,EAAS,OAAA;EAKV,aAAA,4BAAA,CACL,IAAA,UACA,cAAA,EAAgB,cAAA,CAAe,IAAA;EAiB1B,aAAA,CAAc,IAAA;AAAA;;;;cAQV,MAAA,WAAiB,SAAA;EAAA,QACpB,QAAA;EbhRgB;;;caqRZ,QAAA,EAAU,cAAA;EZnVP;;;EAAA,IY6VX,OAAA,CAAA;EZ7VyB;;;EAAA,IYoWzB,IAAA,CAAA,GAAQ,UAAA;EZzVD;;;EAAA,IYgWP,MAAA,CAAA,GAAU,MAAA,CAAO,gBAAA,CAAiB,CAAA,GAAI,gBAAA,CAAiB,CAAA;EZ7VjD;;;EAAA,IYoWN,KAAA,CAAA,GAAS,WAAA;EZpWY;;;EAAA,IY2WrB,OAAA,CAAA;EZzWM;;AAKZ;;;EY6WE,KAAA,GAAS,KAAA,EAAO,WAAA,+BAAwC,YAAA;EZ5W3C;AAOf;;EYiXE,OAAA;EZjXsC;;;EYwXtC,KAAA;EZvXgB;;;EY8XhB,IAAA;EZ/XsC;;;;EYuYtC,GAAA,GAAO,SAAA,EAAW,SAAA,KAAY,YAAA;EZtYG;;;AAGnC;;;;;EY+YE,WAAA,GAAe,KAAA,EAAO,WAAA;EZ9YU;;;;;;;;;;;;;;EYgahC,UAAA,GACE,OAAA,EAAS,eAAA,GAAkB,QAAA,YAAoB,OAAA,EAC/C,SAAA,GAAY,aAAA,GAAgB,SAAA;;AXxchC;;EWgdS,UAAA,QAAiB,QAAA;EX/cvB;;AAMH;EWgdS,UAAA,GAAc,OAAA,GAAU,iBAAA;EXhdT;;;;EWwdtB,IAAA,GAAQ,OAAA,EAAS,OAAA;EXvdD;;;;EW+dhB,OAAA,GAAW,OAAA,EAAS,OAAA;EX/dnB;;;EAAA,IWseG,QAAA,CAAA,GAAY,qBAAA,CAAsB,CAAA;EXteT;;;EAAA,IW6ezB,KAAA,CAAA,GAAS,kBAAA,CAAmB,CAAA;;;AVrflC;MU4fM,KAAA,CAAA,GAAS,kBAAA,CAAmB,CAAA;AAAA"}
@@ -1,15 +1,19 @@
1
1
  import { AllSelection, EditorState, NodeSelection, Selection, TextSelection } from "@prosekit/pm/state";
2
2
  import { DOMParser, DOMSerializer, Fragment, Mark, ProseMirrorNode, Schema, Slice } from "@prosekit/pm/model";
3
- import { isDeepEqual, isElementLike, mapValues } from "@ocavue/utils";
3
+ import { isDeepEqual, isElementLike, isNotNullish, mapValues } from "@ocavue/utils";
4
4
  import { EditorView } from "@prosekit/pm/view";
5
-
6
5
  //#region src/error.ts
7
6
  /**
8
7
  * Base class for all ProseKit errors.
9
8
  *
10
9
  * @internal
11
10
  */
12
- var ProseKitError = class extends Error {};
11
+ var ProseKitError = class extends Error {
12
+ constructor(message, options) {
13
+ if (typeof message === "string" && !message.startsWith("[")) message = `[prosekit] ${message}`;
14
+ super(message, options);
15
+ }
16
+ };
13
17
  /**
14
18
  * @internal
15
19
  */
@@ -26,7 +30,6 @@ var DOMDocumentNotFoundError = class extends ProseKitError {
26
30
  super("Unable to find browser Document. When not in the browser environment, you need to pass a DOM Document.");
27
31
  }
28
32
  };
29
-
30
33
  //#endregion
31
34
  //#region src/utils/get-mark-type.ts
32
35
  /**
@@ -40,7 +43,6 @@ function getMarkType(schema, type) {
40
43
  }
41
44
  return type;
42
45
  }
43
-
44
46
  //#endregion
45
47
  //#region src/utils/assert.ts
46
48
  /**
@@ -49,7 +51,6 @@ function getMarkType(schema, type) {
49
51
  function assert(condition, message = "Assertion failed") {
50
52
  if (!condition) throw new ProseKitError(message);
51
53
  }
52
-
53
54
  //#endregion
54
55
  //#region src/utils/get-node-type.ts
55
56
  /**
@@ -63,7 +64,6 @@ function getNodeType(schema, type) {
63
64
  }
64
65
  return type;
65
66
  }
66
-
67
67
  //#endregion
68
68
  //#region src/utils/type-assertion.ts
69
69
  /**
@@ -128,13 +128,6 @@ function isNodeSelection(value) {
128
128
  function isAllSelection(value) {
129
129
  return value instanceof AllSelection;
130
130
  }
131
- /**
132
- * @internal
133
- */
134
- function isNotNullish(value) {
135
- return value != null;
136
- }
137
-
138
131
  //#endregion
139
132
  //#region src/utils/attrs-match.ts
140
133
  function attrsMatch(nodeOrMark, attrs) {
@@ -142,35 +135,22 @@ function attrsMatch(nodeOrMark, attrs) {
142
135
  for (const [key, value] of Object.entries(attrs)) if (currentAttrs[key] !== value) return false;
143
136
  return true;
144
137
  }
145
-
146
138
  //#endregion
147
139
  //#region src/utils/is-node-active.ts
140
+ /**
141
+ * @internal
142
+ */
148
143
  function isNodeActive(state, type, attrs) {
149
- const $pos = state.selection.$from;
150
- const nodeType = getNodeType(state.schema, type);
151
- for (let depth = $pos.depth; depth >= 0; depth--) {
152
- const node = $pos.node(depth);
153
- if (node.type === nodeType && (!attrs || attrsMatch(node, attrs))) return true;
154
- }
144
+ const { selection, schema } = state;
145
+ const $pos = selection.$from;
146
+ const nodeType = getNodeType(schema, type);
147
+ if (isNodeSelection(selection) && checkNode(selection.node, nodeType, attrs)) return true;
148
+ for (let depth = $pos.depth; depth >= 0; depth--) if (checkNode($pos.node(depth), nodeType, attrs)) return true;
155
149
  return false;
156
150
  }
157
-
158
- //#endregion
159
- //#region src/types/priority.ts
160
- /**
161
- * ProseKit extension priority.
162
- *
163
- * @public
164
- */
165
- let Priority = /* @__PURE__ */ function(Priority$1) {
166
- Priority$1[Priority$1["lowest"] = 0] = "lowest";
167
- Priority$1[Priority$1["low"] = 1] = "low";
168
- Priority$1[Priority$1["default"] = 2] = "default";
169
- Priority$1[Priority$1["high"] = 3] = "high";
170
- Priority$1[Priority$1["highest"] = 4] = "highest";
171
- return Priority$1;
172
- }({});
173
-
151
+ function checkNode(node, nodeType, attrs) {
152
+ return node.type === nodeType && (!attrs || attrsMatch(node, attrs));
153
+ }
174
154
  //#endregion
175
155
  //#region src/facets/facet.ts
176
156
  let facetCount = 0;
@@ -181,17 +161,17 @@ var Facet = class {
181
161
  /**
182
162
  * @internal
183
163
  */
184
- constructor(parent, singleton, _reducer, _reduce) {
185
- this._reducer = _reducer;
186
- this._reduce = _reduce;
164
+ constructor(parent, singleton, reducer, reduce) {
187
165
  this.index = facetCount++;
188
- assert((_reduce || _reducer) && !(_reduce && _reducer));
166
+ if (reduce && !reducer) this.reduce = reduce;
167
+ else if (reducer && !reduce) this.reduce = () => reducer;
168
+ else throw new ProseKitError("Incorrect reducer");
189
169
  this.parent = parent;
190
170
  this.singleton = singleton;
191
171
  this.path = parent ? [...parent.path, this.index] : [];
192
172
  }
193
173
  get reducer() {
194
- return this._reducer ?? this._reduce?.();
174
+ return this.reduce();
195
175
  }
196
176
  };
197
177
  /**
@@ -200,7 +180,6 @@ var Facet = class {
200
180
  function defineFacet(options) {
201
181
  return new Facet(options.parent, options.singleton ?? false, options.reducer, options.reduce);
202
182
  }
203
-
204
183
  //#endregion
205
184
  //#region src/facets/root.ts
206
185
  function rootReducer(inputs) {
@@ -223,7 +202,6 @@ function rootReducer(inputs) {
223
202
  };
224
203
  }
225
204
  const rootFacet = new Facet(null, true, rootReducer);
226
-
227
205
  //#endregion
228
206
  //#region src/facets/schema.ts
229
207
  const schemaFacet = defineFacet({
@@ -235,7 +213,6 @@ const schemaFacet = defineFacet({
235
213
  parent: rootFacet,
236
214
  singleton: true
237
215
  });
238
-
239
216
  //#endregion
240
217
  //#region src/facets/base-extension.ts
241
218
  /**
@@ -255,7 +232,7 @@ var BaseExtension = class {
255
232
  * @internal
256
233
  */
257
234
  getTree(priority) {
258
- const pri = priority ?? this.priority ?? Priority.default;
235
+ const pri = priority ?? this.priority ?? 2;
259
236
  return this.trees[pri] ||= this.createTree(pri);
260
237
  }
261
238
  /**
@@ -270,7 +247,6 @@ var BaseExtension = class {
270
247
  return this.findFacetOutput(schemaFacet)?.find(Boolean)?.schema ?? null;
271
248
  }
272
249
  };
273
-
274
250
  //#endregion
275
251
  //#region src/utils/array.ts
276
252
  function uniqPush(prev, next) {
@@ -284,7 +260,6 @@ function uniqPush(prev, next) {
284
260
  function arraySubtract(a, b) {
285
261
  return a.filter((x) => !b.includes(x));
286
262
  }
287
-
288
263
  //#endregion
289
264
  //#region src/facets/facet-node.ts
290
265
  function zip5(a, b, mapper) {
@@ -359,11 +334,11 @@ var FacetNode = class {
359
334
  null,
360
335
  null
361
336
  ]) {
337
+ this.output = null;
362
338
  this.facet = facet;
363
339
  this.inputs = inputs;
364
340
  this.children = children;
365
341
  this.reducers = reducers;
366
- this.output = null;
367
342
  }
368
343
  calcOutput() {
369
344
  const inputs = [
@@ -388,11 +363,8 @@ var FacetNode = class {
388
363
  const childOutput = child.getOutput();
389
364
  for (let pri = 0; pri < 5; pri++) if (childOutput[pri]) (inputs[pri] ||= []).push(childOutput[pri]);
390
365
  }
391
- if (this.facet.singleton) {
392
- const reducer = this.reducers[Priority.default] ||= this.facet.reducer;
393
- const input = inputs.filter(isNotNullish).flat();
394
- output[Priority.default] = reducer(input);
395
- } else for (let pri = 0; pri < 5; pri++) {
366
+ if (this.facet.singleton) output[2] = (this.reducers[2] ||= this.facet.reducer)(inputs.filter(isNotNullish).flat());
367
+ else for (let pri = 0; pri < 5; pri++) {
396
368
  const input = inputs[pri];
397
369
  if (input) output[pri] = (this.reducers[pri] ||= this.facet.reducer)(input);
398
370
  }
@@ -404,7 +376,7 @@ var FacetNode = class {
404
376
  }
405
377
  getSingletonOutput() {
406
378
  assert(this.facet.singleton);
407
- return this.getOutput()[Priority.default];
379
+ return this.getOutput()[2];
408
380
  }
409
381
  getRootOutput() {
410
382
  assert(this.isRoot());
@@ -416,7 +388,6 @@ var FacetNode = class {
416
388
  return !this.facet.parent;
417
389
  }
418
390
  };
419
-
420
391
  //#endregion
421
392
  //#region src/facets/facet-extension.ts
422
393
  /**
@@ -458,7 +429,6 @@ var FacetExtensionImpl = class extends BaseExtension {
458
429
  function defineFacetPayload(facet, payloads) {
459
430
  return new FacetExtensionImpl(facet, payloads);
460
431
  }
461
-
462
432
  //#endregion
463
433
  //#region src/facets/state.ts
464
434
  const stateFacet = defineFacet({
@@ -497,7 +467,6 @@ const stateFacet = defineFacet({
497
467
  singleton: true,
498
468
  parent: rootFacet
499
469
  });
500
-
501
470
  //#endregion
502
471
  //#region src/utils/get-dom-api.ts
503
472
  function findGlobalBrowserDocument() {
@@ -524,7 +493,6 @@ function getBrowserWindow(options) {
524
493
  if (win) return win;
525
494
  throw new DOMDocumentNotFoundError();
526
495
  }
527
-
528
496
  //#endregion
529
497
  //#region src/utils/parse.ts
530
498
  /**
@@ -617,11 +585,11 @@ function nodeFromElement(element, options) {
617
585
  */
618
586
  function elementFromNode(node, options) {
619
587
  const Serializer = options?.DOMSerializer || DOMSerializer;
620
- const document$1 = getBrowserDocument(options);
588
+ const document = getBrowserDocument(options);
621
589
  const schema = node.type.schema;
622
590
  const serializer = Serializer.fromSchema(schema);
623
- if (schema.topNodeType !== node.type) return serializer.serializeNode(node, { document: document$1 });
624
- else return serializer.serializeFragment(node.content, { document: document$1 }, document$1.createElement("div"));
591
+ if (schema.topNodeType !== node.type) return serializer.serializeNode(node, { document });
592
+ else return serializer.serializeFragment(node.content, { document }, document.createElement("div"));
625
593
  }
626
594
  /**
627
595
  * Parse an HTML string to an HTML element.
@@ -727,7 +695,6 @@ function jsonFromHTML(html, options) {
727
695
  function htmlFromJSON(json, options) {
728
696
  return htmlFromElement(elementFromJSON(json, options));
729
697
  }
730
-
731
698
  //#endregion
732
699
  //#region src/utils/editor-content.ts
733
700
  function getEditorContentJSON(schema, content) {
@@ -754,7 +721,6 @@ function getEditorSelection(doc, selection) {
754
721
  if (selection === "end") return Selection.atEnd(doc);
755
722
  return Selection.fromJSON(doc, selection);
756
723
  }
757
-
758
724
  //#endregion
759
725
  //#region src/extensions/default-state.ts
760
726
  /**
@@ -775,7 +741,6 @@ function defineDefaultState({ defaultSelection, defaultContent }) {
775
741
  return config;
776
742
  }]);
777
743
  }
778
-
779
744
  //#endregion
780
745
  //#region src/utils/is-subset.ts
781
746
  /**
@@ -786,7 +751,6 @@ function defineDefaultState({ defaultSelection, defaultContent }) {
786
751
  function isSubset(subset, superset) {
787
752
  return Object.keys(subset).every((key) => subset[key] === superset[key]);
788
753
  }
789
-
790
754
  //#endregion
791
755
  //#region src/utils/includes-mark.ts
792
756
  function includesMark(marks, markType, attrs) {
@@ -795,7 +759,6 @@ function includesMark(marks, markType, attrs) {
795
759
  return mark.type === markType && isSubset(attrs, mark.attrs);
796
760
  });
797
761
  }
798
-
799
762
  //#endregion
800
763
  //#region src/utils/is-mark-absent.ts
801
764
  /**
@@ -808,16 +771,15 @@ function includesMark(marks, markType, attrs) {
808
771
  function isMarkAbsent(node, from, to, markType, attrs) {
809
772
  let missing = false;
810
773
  let available = false;
811
- node.nodesBetween(from, to, (node$1, pos, parent) => {
774
+ node.nodesBetween(from, to, (node, pos, parent) => {
812
775
  if (missing) return false;
813
- if (parent?.type.allowsMarkType(markType) && !node$1.marks.some((m) => m.type !== markType && m.type.excludes(markType))) {
776
+ if (parent?.type.allowsMarkType(markType) && !node.marks.some((m) => m.type !== markType && m.type.excludes(markType))) {
814
777
  available = true;
815
- if (!includesMark(node$1.marks, markType, attrs)) missing = true;
778
+ if (!includesMark(node.marks, markType, attrs)) missing = true;
816
779
  }
817
780
  });
818
781
  return available ? missing : true;
819
782
  }
820
-
821
783
  //#endregion
822
784
  //#region src/utils/is-mark-active.ts
823
785
  /**
@@ -829,7 +791,6 @@ function isMarkActive(state, type, attrs) {
829
791
  if (empty) return includesMark(state.storedMarks || $from.marks(), markType, attrs);
830
792
  else return !isMarkAbsent(state.doc, from, to, markType, attrs);
831
793
  }
832
-
833
794
  //#endregion
834
795
  //#region src/editor/action.ts
835
796
  /**
@@ -897,7 +858,6 @@ function isNodeChild(value) {
897
858
  if (!value) return false;
898
859
  return typeof value === "string" || Array.isArray(value) || isProseMirrorNode(value);
899
860
  }
900
-
901
861
  //#endregion
902
862
  //#region src/facets/union-extension.ts
903
863
  var UnionExtensionImpl = class extends BaseExtension {
@@ -922,7 +882,6 @@ var UnionExtensionImpl = class extends BaseExtension {
922
882
  return node;
923
883
  }
924
884
  };
925
-
926
885
  //#endregion
927
886
  //#region src/editor/union.ts
928
887
  function union(...exts) {
@@ -930,7 +889,6 @@ function union(...exts) {
930
889
  assert(extensions.length > 0, "At least one extension is required");
931
890
  return new UnionExtensionImpl(extensions);
932
891
  }
933
-
934
892
  //#endregion
935
893
  //#region src/editor/editor.ts
936
894
  /**
@@ -968,10 +926,10 @@ var EditorInstance = class {
968
926
  };
969
927
  this.getDocHTML = (options) => {
970
928
  const serializer = this.getProp("clipboardSerializer");
971
- const DOMSerializer$1 = serializer ? { fromSchema: () => serializer } : void 0;
929
+ const DOMSerializer = serializer ? { fromSchema: () => serializer } : void 0;
972
930
  return htmlFromNode(this.getDoc(), {
973
931
  ...options,
974
- DOMSerializer: DOMSerializer$1
932
+ DOMSerializer
975
933
  });
976
934
  };
977
935
  this.tree = extension.getTree();
@@ -1057,6 +1015,7 @@ var EditorInstance = class {
1057
1015
  }
1058
1016
  this.view = new EditorView({ mount: place }, this.directEditorProps);
1059
1017
  this.afterMounted.forEach((callback) => callback());
1018
+ this.afterMounted.length = 0;
1060
1019
  }
1061
1020
  unmount() {
1062
1021
  if (!this.view) return;
@@ -1204,7 +1163,7 @@ var Editor = class {
1204
1163
  return this.instance.marks;
1205
1164
  }
1206
1165
  };
1207
-
1208
1166
  //#endregion
1209
- export { isFragment as A, getMarkType as B, defineFacetPayload as C, Priority as D, defineFacet as E, isSelection as F, ProseKitError as H, isSlice as I, isTextSelection as L, isNodeSelection as M, isNotNullish as N, isNodeActive as O, isProseMirrorNode as P, getNodeType as R, stateFacet as S, rootFacet as T, EditorNotFoundError as V, jsonFromState as _, union as a, nodeFromJSON as b, isMarkActive as c, elementFromJSON as d, elementFromNode as f, jsonFromNode as g, jsonFromHTML as h, setupEditorExtension as i, isMark as j, isAllSelection as k, isMarkAbsent as l, htmlFromNode as m, EditorInstance as n, createMarkActions as o, htmlFromJSON as p, createEditor as r, createNodeActions as s, Editor as t, defineDefaultState as u, nodeFromElement as v, schemaFacet as w, stateFromJSON as x, nodeFromHTML as y, assert as z };
1210
- //# sourceMappingURL=editor-DGNUXn-u.js.map
1167
+ export { isMark as A, ProseKitError as B, defineFacetPayload as C, isNodeActive as D, defineFacet as E, isTextSelection as F, getNodeType as I, assert as L, isProseMirrorNode as M, isSelection as N, isAllSelection as O, isSlice as P, getMarkType as R, stateFacet as S, rootFacet as T, jsonFromState as _, union as a, nodeFromJSON as b, isMarkActive as c, elementFromJSON as d, elementFromNode as f, jsonFromNode as g, jsonFromHTML as h, setupEditorExtension as i, isNodeSelection as j, isFragment as k, isMarkAbsent as l, htmlFromNode as m, EditorInstance as n, createMarkActions as o, htmlFromJSON as p, createEditor as r, createNodeActions as s, Editor as t, defineDefaultState as u, nodeFromElement as v, schemaFacet as w, stateFromJSON as x, nodeFromHTML as y, EditorNotFoundError as z };
1168
+
1169
+ //# sourceMappingURL=editor.js.map