@prosekit/core 0.3.2 → 0.4.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.
@@ -6,6 +6,8 @@ import type { ConditionalExcept } from 'type-fest';
6
6
  import type { ContentMatch } from '@prosekit/pm/model';
7
7
  import type { DirectEditorProps } from '@prosekit/pm/view';
8
8
  import type { DOMEventMap } from '@prosekit/pm/view';
9
+ import { DOMParser as DOMParser_2 } from '@prosekit/pm/model';
10
+ import { DOMSerializer } from '@prosekit/pm/model';
9
11
  import { EditorState } from '@prosekit/pm/state';
10
12
  import type { EditorStateConfig } from '@prosekit/pm/state';
11
13
  import { EditorView } from '@prosekit/pm/view';
@@ -605,6 +607,13 @@ export declare class DOMDocumentNotFoundError extends ProseKitError {
605
607
  constructor();
606
608
  }
607
609
 
610
+ /** @public */
611
+ declare type DOMDocumentOptions = {
612
+ document?: Document;
613
+ };
614
+ export { DOMDocumentOptions }
615
+ export { DOMDocumentOptions as DOMDocumentOptions_alias_1 }
616
+
608
617
  /**
609
618
  * @internal
610
619
  */
@@ -629,6 +638,20 @@ export declare type DOMEventPayload = [event: string, handler: DOMEventHandler];
629
638
 
630
639
  export declare type DOMNode = InstanceType<typeof window.Node>;
631
640
 
641
+ /** @public */
642
+ declare type DOMParserOptions = {
643
+ DOMParser?: typeof DOMParser_2;
644
+ };
645
+ export { DOMParserOptions }
646
+ export { DOMParserOptions as DOMParserOptions_alias_1 }
647
+
648
+ /** @public */
649
+ declare type DOMSerializerOptions = {
650
+ DOMSerializer?: typeof DOMSerializer;
651
+ };
652
+ export { DOMSerializerOptions }
653
+ export { DOMSerializerOptions as DOMSerializerOptions_alias_1 }
654
+
632
655
  declare type DoubleClickHandler = (view: EditorView, pos: number, event: MouseEvent) => boolean | void;
633
656
  export { DoubleClickHandler }
634
657
  export { DoubleClickHandler as DoubleClickHandler_alias_1 }
@@ -735,18 +758,14 @@ export { EditorOptions as EditorOptions_alias_1 }
735
758
  *
736
759
  * @internal
737
760
  */
738
- export declare function elementFromHTML(html: string, options?: {
739
- document?: Document;
740
- }): HTMLElement;
761
+ export declare function elementFromHTML(html: string, options?: DOMDocumentOptions): HTMLElement;
741
762
 
742
763
  /**
743
764
  * Parse a ProseMirror document JSON object to a HTML element.
744
765
  *
745
766
  * @public
746
767
  */
747
- declare function elementFromJSON(json: NodeJSON, schema: Schema, options?: {
748
- document?: Document;
749
- }): HTMLElement;
768
+ declare function elementFromJSON(json: NodeJSON, options: JSONParserOptions & DOMSerializerOptions & DOMDocumentOptions): HTMLElement;
750
769
  export { elementFromJSON }
751
770
  export { elementFromJSON as elementFromJSON_alias_1 }
752
771
 
@@ -755,9 +774,7 @@ export { elementFromJSON as elementFromJSON_alias_1 }
755
774
  *
756
775
  * @public
757
776
  */
758
- declare function elementFromNode(node: ProseMirrorNode, options?: {
759
- document?: Document;
760
- }): HTMLElement;
777
+ declare function elementFromNode(node: ProseMirrorNode, options?: DOMSerializerOptions & DOMDocumentOptions): HTMLElement;
761
778
  export { elementFromNode }
762
779
  export { elementFromNode as elementFromNode_alias_1 }
763
780
 
@@ -993,9 +1010,7 @@ export declare function htmlFromElement(element: HTMLElement): string;
993
1010
  *
994
1011
  * @public
995
1012
  */
996
- declare function htmlFromJSON(json: NodeJSON, schema: Schema, options?: {
997
- document?: Document;
998
- }): string;
1013
+ declare function htmlFromJSON(json: NodeJSON, options: JSONParserOptions & DOMSerializerOptions & DOMDocumentOptions): string;
999
1014
  export { htmlFromJSON }
1000
1015
  export { htmlFromJSON as htmlFromJSON_alias_1 }
1001
1016
 
@@ -1004,7 +1019,7 @@ export { htmlFromJSON as htmlFromJSON_alias_1 }
1004
1019
  *
1005
1020
  * @public
1006
1021
  */
1007
- declare function htmlFromNode(node: ProseMirrorNode): string;
1022
+ declare function htmlFromNode(node: ProseMirrorNode, options?: DOMSerializerOptions & DOMDocumentOptions): string;
1008
1023
  export { htmlFromNode }
1009
1024
  export { htmlFromNode as htmlFromNode_alias_1 }
1010
1025
 
@@ -1106,16 +1121,14 @@ export { isTextSelection as isTextSelection_alias_1 }
1106
1121
  *
1107
1122
  * @public
1108
1123
  */
1109
- export declare function jsonFromElement(element: DOMNode, schema: Schema): NodeJSON;
1124
+ export declare function jsonFromElement(element: DOMNode, options: DOMParserOptions & JSONParserOptions): NodeJSON;
1110
1125
 
1111
1126
  /**
1112
1127
  * Parse a HTML string to a ProseMirror document JSON object.
1113
1128
  *
1114
1129
  * @public
1115
1130
  */
1116
- declare function jsonFromHTML(html: string, schema: Schema, options?: {
1117
- document?: Document;
1118
- }): NodeJSON;
1131
+ declare function jsonFromHTML(html: string, options: DOMDocumentOptions & DOMParserOptions & JSONParserOptions): NodeJSON;
1119
1132
  export { jsonFromHTML }
1120
1133
  export { jsonFromHTML as jsonFromHTML_alias_1 }
1121
1134
 
@@ -1137,6 +1150,13 @@ declare function jsonFromState(state: EditorState): StateJSON;
1137
1150
  export { jsonFromState }
1138
1151
  export { jsonFromState as jsonFromState_alias_1 }
1139
1152
 
1153
+ /** @public */
1154
+ declare type JSONParserOptions = {
1155
+ schema: Schema;
1156
+ };
1157
+ export { JSONParserOptions }
1158
+ export { JSONParserOptions as JSONParserOptions_alias_1 }
1159
+
1140
1160
  declare type KeyDownHandler = (view: EditorView, event: KeyboardEvent) => boolean | void;
1141
1161
  export { KeyDownHandler }
1142
1162
  export { KeyDownHandler as KeyDownHandler_alias_1 }
@@ -1269,7 +1289,7 @@ export declare type NodeContent = ProseMirrorNode | ProseMirrorFragment | NodeCo
1269
1289
  *
1270
1290
  * @public
1271
1291
  */
1272
- declare function nodeFromElement(element: DOMNode, schema: Schema): ProseMirrorNode;
1292
+ declare function nodeFromElement(element: DOMNode, options: DOMParserOptions & JSONParserOptions): ProseMirrorNode;
1273
1293
  export { nodeFromElement }
1274
1294
  export { nodeFromElement as nodeFromElement_alias_1 }
1275
1295
 
@@ -1278,9 +1298,7 @@ export { nodeFromElement as nodeFromElement_alias_1 }
1278
1298
  *
1279
1299
  * @public
1280
1300
  */
1281
- declare function nodeFromHTML(html: string, schema: Schema, options?: {
1282
- document?: Document;
1283
- }): ProseMirrorNode;
1301
+ declare function nodeFromHTML(html: string, options: DOMParserOptions & JSONParserOptions & DOMDocumentOptions): ProseMirrorNode;
1284
1302
  export { nodeFromHTML }
1285
1303
  export { nodeFromHTML as nodeFromHTML_alias_1 }
1286
1304
 
@@ -1289,7 +1307,7 @@ export { nodeFromHTML as nodeFromHTML_alias_1 }
1289
1307
  *
1290
1308
  * @public
1291
1309
  */
1292
- declare function nodeFromJSON(json: NodeJSON, schema: Schema): ProseMirrorNode;
1310
+ declare function nodeFromJSON(json: NodeJSON, options: JSONParserOptions): ProseMirrorNode;
1293
1311
  export { nodeFromJSON }
1294
1312
  export { nodeFromJSON as nodeFromJSON_alias_1 }
1295
1313
 
@@ -1541,7 +1559,7 @@ export declare const stateFacet: Facet<StatePayload, StatePayload>;
1541
1559
  *
1542
1560
  * @public
1543
1561
  */
1544
- declare function stateFromJSON(json: StateJSON, schema: Schema): EditorState;
1562
+ declare function stateFromJSON(json: StateJSON, options: JSONParserOptions): EditorState;
1545
1563
  export { stateFromJSON }
1546
1564
  export { stateFromJSON as stateFromJSON_alias_1 }
1547
1565
 
@@ -110,6 +110,10 @@ export { nodeFromElement } from './_tsup-dts-rollup';
110
110
  export { nodeFromHTML } from './_tsup-dts-rollup';
111
111
  export { nodeFromJSON } from './_tsup-dts-rollup';
112
112
  export { stateFromJSON } from './_tsup-dts-rollup';
113
+ export { DOMDocumentOptions } from './_tsup-dts-rollup';
114
+ export { DOMParserOptions } from './_tsup-dts-rollup';
115
+ export { DOMSerializerOptions } from './_tsup-dts-rollup';
116
+ export { JSONParserOptions } from './_tsup-dts-rollup';
113
117
  export { isAllSelection } from './_tsup-dts-rollup';
114
118
  export { isMark } from './_tsup-dts-rollup';
115
119
  export { isNodeSelection } from './_tsup-dts-rollup';
@@ -485,27 +485,34 @@ function getBrowserWindow(options) {
485
485
  function jsonFromState(state) {
486
486
  return state.toJSON();
487
487
  }
488
- function stateFromJSON(json, schema) {
489
- return EditorState.fromJSON({ schema }, json);
488
+ function stateFromJSON(json, options) {
489
+ return EditorState.fromJSON({ schema: options.schema }, json);
490
490
  }
491
491
  function jsonFromNode(node) {
492
492
  return node.toJSON();
493
493
  }
494
- function nodeFromJSON(json, schema) {
495
- return schema.nodeFromJSON(json);
494
+ function nodeFromJSON(json, options) {
495
+ return options.schema.nodeFromJSON(json);
496
496
  }
497
- function nodeFromElement(element, schema) {
498
- return DOMParser.fromSchema(schema).parse(element);
497
+ function nodeFromElement(element, options) {
498
+ const Parser = options.DOMParser || DOMParser;
499
+ const schema = options.schema;
500
+ return Parser.fromSchema(schema).parse(element);
499
501
  }
500
502
  function elementFromNode(node, options) {
503
+ const Serializer = (options == null ? void 0 : options.DOMSerializer) || DOMSerializer;
504
+ const document2 = getBrowserDocument(options);
501
505
  const schema = node.type.schema;
502
- const serializer = DOMSerializer.fromSchema(schema);
506
+ const serializer = Serializer.fromSchema(schema);
503
507
  if (schema.topNodeType !== node.type) {
504
- return serializer.serializeNode(node, options);
508
+ return serializer.serializeNode(node, { document: document2 });
509
+ } else {
510
+ return serializer.serializeFragment(
511
+ node.content,
512
+ { document: document2 },
513
+ document2.createElement("div")
514
+ );
505
515
  }
506
- const doc = getBrowserDocument();
507
- const div = doc.createElement("div");
508
- return serializer.serializeFragment(node.content, options, div);
509
516
  }
510
517
  function elementFromHTML(html, options) {
511
518
  const win = getBrowserWindow(options);
@@ -515,23 +522,23 @@ function elementFromHTML(html, options) {
515
522
  function htmlFromElement(element) {
516
523
  return element.outerHTML;
517
524
  }
518
- function nodeFromHTML(html, schema, options) {
519
- return nodeFromElement(elementFromHTML(html, options), schema);
525
+ function nodeFromHTML(html, options) {
526
+ return nodeFromElement(elementFromHTML(html, options), options);
520
527
  }
521
- function htmlFromNode(node) {
522
- return elementFromNode(node).outerHTML;
528
+ function htmlFromNode(node, options) {
529
+ return elementFromNode(node, options).outerHTML;
523
530
  }
524
- function jsonFromElement(element, schema) {
525
- return jsonFromNode(nodeFromElement(element, schema));
531
+ function jsonFromElement(element, options) {
532
+ return jsonFromNode(nodeFromElement(element, options));
526
533
  }
527
- function elementFromJSON(json, schema, options) {
528
- return elementFromNode(nodeFromJSON(json, schema), options);
534
+ function elementFromJSON(json, options) {
535
+ return elementFromNode(nodeFromJSON(json, options), options);
529
536
  }
530
- function jsonFromHTML(html, schema, options) {
531
- return jsonFromElement(elementFromHTML(html, options), schema);
537
+ function jsonFromHTML(html, options) {
538
+ return jsonFromElement(elementFromHTML(html, options), options);
532
539
  }
533
- function htmlFromJSON(json, schema, options) {
534
- return htmlFromElement(elementFromJSON(json, schema, options));
540
+ function htmlFromJSON(json, options) {
541
+ return htmlFromElement(elementFromJSON(json, options));
535
542
  }
536
543
 
537
544
  // src/extensions/default-state.ts
@@ -550,9 +557,9 @@ function defineDefaultState({
550
557
  const config = {};
551
558
  if (defaultHTML) {
552
559
  if (typeof defaultHTML === "string") {
553
- defaultDoc = jsonFromHTML(defaultHTML, schema);
560
+ defaultDoc = jsonFromHTML(defaultHTML, { schema });
554
561
  } else {
555
- defaultDoc = jsonFromElement(defaultHTML, schema);
562
+ defaultDoc = jsonFromElement(defaultHTML, { schema });
556
563
  }
557
564
  }
558
565
  if (defaultDoc) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/core",
3
3
  "type": "module",
4
- "version": "0.3.2",
4
+ "version": "0.4.0",
5
5
  "private": false,
6
6
  "author": {
7
7
  "name": "ocavue",