@prosekit/core 0.3.1 → 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.
- package/dist/_tsup-dts-rollup.d.ts +103 -13
- package/dist/prosekit-core.d.ts +8 -1
- package/dist/prosekit-core.js +81 -35
- package/package.json +1 -1
@@ -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';
|
@@ -598,6 +600,20 @@ declare type DocChangeHandler = (view: EditorView, prevState: EditorState) => vo
|
|
598
600
|
export { DocChangeHandler }
|
599
601
|
export { DocChangeHandler as DocChangeHandler_alias_1 }
|
600
602
|
|
603
|
+
/**
|
604
|
+
* @internal
|
605
|
+
*/
|
606
|
+
export declare class DOMDocumentNotFoundError extends ProseKitError {
|
607
|
+
constructor();
|
608
|
+
}
|
609
|
+
|
610
|
+
/** @public */
|
611
|
+
declare type DOMDocumentOptions = {
|
612
|
+
document?: Document;
|
613
|
+
};
|
614
|
+
export { DOMDocumentOptions }
|
615
|
+
export { DOMDocumentOptions as DOMDocumentOptions_alias_1 }
|
616
|
+
|
601
617
|
/**
|
602
618
|
* @internal
|
603
619
|
*/
|
@@ -620,6 +636,22 @@ export { DOMEventHandler as DOMEventHandler_alias_1 }
|
|
620
636
|
*/
|
621
637
|
export declare type DOMEventPayload = [event: string, handler: DOMEventHandler];
|
622
638
|
|
639
|
+
export declare type DOMNode = InstanceType<typeof window.Node>;
|
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
|
+
|
623
655
|
declare type DoubleClickHandler = (view: EditorView, pos: number, event: MouseEvent) => boolean | void;
|
624
656
|
export { DoubleClickHandler }
|
625
657
|
export { DoubleClickHandler as DoubleClickHandler_alias_1 }
|
@@ -726,7 +758,25 @@ export { EditorOptions as EditorOptions_alias_1 }
|
|
726
758
|
*
|
727
759
|
* @internal
|
728
760
|
*/
|
729
|
-
export declare function elementFromHTML(html: string): HTMLElement;
|
761
|
+
export declare function elementFromHTML(html: string, options?: DOMDocumentOptions): HTMLElement;
|
762
|
+
|
763
|
+
/**
|
764
|
+
* Parse a ProseMirror document JSON object to a HTML element.
|
765
|
+
*
|
766
|
+
* @public
|
767
|
+
*/
|
768
|
+
declare function elementFromJSON(json: NodeJSON, options: JSONParserOptions & DOMSerializerOptions & DOMDocumentOptions): HTMLElement;
|
769
|
+
export { elementFromJSON }
|
770
|
+
export { elementFromJSON as elementFromJSON_alias_1 }
|
771
|
+
|
772
|
+
/**
|
773
|
+
* Serialize a ProseMirror node to a HTML element.
|
774
|
+
*
|
775
|
+
* @public
|
776
|
+
*/
|
777
|
+
declare function elementFromNode(node: ProseMirrorNode, options?: DOMSerializerOptions & DOMDocumentOptions): HTMLElement;
|
778
|
+
export { elementFromNode }
|
779
|
+
export { elementFromNode as elementFromNode_alias_1 }
|
730
780
|
|
731
781
|
declare type EmptyValue = undefined | null | EmptyObject;
|
732
782
|
|
@@ -890,6 +940,14 @@ declare interface FacetOptions<Input, Output> {
|
|
890
940
|
export { FacetOptions }
|
891
941
|
export { FacetOptions as FacetOptions_alias_1 }
|
892
942
|
|
943
|
+
export declare function findBrowserDocument(options?: {
|
944
|
+
document?: Document;
|
945
|
+
}): Document | undefined;
|
946
|
+
|
947
|
+
export declare function findBrowserWindow(options?: {
|
948
|
+
document?: Document;
|
949
|
+
}): (Window & typeof globalThis) | null | undefined;
|
950
|
+
|
893
951
|
/**
|
894
952
|
* A function that is called when the editor gains or loses focus.
|
895
953
|
*
|
@@ -901,9 +959,13 @@ declare type FocusChangeHandler = (hasFocus: boolean) => void;
|
|
901
959
|
export { FocusChangeHandler }
|
902
960
|
export { FocusChangeHandler as FocusChangeHandler_alias_1 }
|
903
961
|
|
904
|
-
export declare function getBrowserDocument(
|
962
|
+
export declare function getBrowserDocument(options?: {
|
963
|
+
document?: Document;
|
964
|
+
}): Document;
|
905
965
|
|
906
|
-
export declare function getBrowserWindow(
|
966
|
+
export declare function getBrowserWindow(options?: {
|
967
|
+
document?: Document;
|
968
|
+
}): Window & typeof globalThis;
|
907
969
|
|
908
970
|
export declare function getCustomSelection(state: EditorState, from?: number | null, to?: number | null): Selection_3;
|
909
971
|
|
@@ -938,6 +1000,29 @@ export declare type GroupedEntries<T extends Record<string, any>> = {
|
|
938
1000
|
|
939
1001
|
export declare function groupEntries<T extends Record<string, any>>(entries: ObjectEntries<T>[]): GroupedEntries<T>;
|
940
1002
|
|
1003
|
+
/**
|
1004
|
+
* @internal
|
1005
|
+
*/
|
1006
|
+
export declare function htmlFromElement(element: HTMLElement): string;
|
1007
|
+
|
1008
|
+
/**
|
1009
|
+
* Parse a ProseMirror document JSON object to a HTML string.
|
1010
|
+
*
|
1011
|
+
* @public
|
1012
|
+
*/
|
1013
|
+
declare function htmlFromJSON(json: NodeJSON, options: JSONParserOptions & DOMSerializerOptions & DOMDocumentOptions): string;
|
1014
|
+
export { htmlFromJSON }
|
1015
|
+
export { htmlFromJSON as htmlFromJSON_alias_1 }
|
1016
|
+
|
1017
|
+
/**
|
1018
|
+
* Serialize a ProseMirror node to a HTML string
|
1019
|
+
*
|
1020
|
+
* @public
|
1021
|
+
*/
|
1022
|
+
declare function htmlFromNode(node: ProseMirrorNode, options?: DOMSerializerOptions & DOMDocumentOptions): string;
|
1023
|
+
export { htmlFromNode }
|
1024
|
+
export { htmlFromNode as htmlFromNode_alias_1 }
|
1025
|
+
|
941
1026
|
/**
|
942
1027
|
* Returns a command that inserts the given node at the current selection or at
|
943
1028
|
* the given position.
|
@@ -1032,20 +1117,18 @@ export { isTextSelection }
|
|
1032
1117
|
export { isTextSelection as isTextSelection_alias_1 }
|
1033
1118
|
|
1034
1119
|
/**
|
1035
|
-
*
|
1120
|
+
* Serialize a HTML element to a ProseMirror document JSON object.
|
1036
1121
|
*
|
1037
1122
|
* @public
|
1038
1123
|
*/
|
1039
|
-
declare function jsonFromElement(element:
|
1040
|
-
export { jsonFromElement }
|
1041
|
-
export { jsonFromElement as jsonFromElement_alias_1 }
|
1124
|
+
export declare function jsonFromElement(element: DOMNode, options: DOMParserOptions & JSONParserOptions): NodeJSON;
|
1042
1125
|
|
1043
1126
|
/**
|
1044
|
-
* Parse a HTML string to a ProseMirror document JSON.
|
1127
|
+
* Parse a HTML string to a ProseMirror document JSON object.
|
1045
1128
|
*
|
1046
1129
|
* @public
|
1047
1130
|
*/
|
1048
|
-
declare function jsonFromHTML(html: string,
|
1131
|
+
declare function jsonFromHTML(html: string, options: DOMDocumentOptions & DOMParserOptions & JSONParserOptions): NodeJSON;
|
1049
1132
|
export { jsonFromHTML }
|
1050
1133
|
export { jsonFromHTML as jsonFromHTML_alias_1 }
|
1051
1134
|
|
@@ -1067,6 +1150,13 @@ declare function jsonFromState(state: EditorState): StateJSON;
|
|
1067
1150
|
export { jsonFromState }
|
1068
1151
|
export { jsonFromState as jsonFromState_alias_1 }
|
1069
1152
|
|
1153
|
+
/** @public */
|
1154
|
+
declare type JSONParserOptions = {
|
1155
|
+
schema: Schema;
|
1156
|
+
};
|
1157
|
+
export { JSONParserOptions }
|
1158
|
+
export { JSONParserOptions as JSONParserOptions_alias_1 }
|
1159
|
+
|
1070
1160
|
declare type KeyDownHandler = (view: EditorView, event: KeyboardEvent) => boolean | void;
|
1071
1161
|
export { KeyDownHandler }
|
1072
1162
|
export { KeyDownHandler as KeyDownHandler_alias_1 }
|
@@ -1199,7 +1289,7 @@ export declare type NodeContent = ProseMirrorNode | ProseMirrorFragment | NodeCo
|
|
1199
1289
|
*
|
1200
1290
|
* @public
|
1201
1291
|
*/
|
1202
|
-
declare function nodeFromElement(element:
|
1292
|
+
declare function nodeFromElement(element: DOMNode, options: DOMParserOptions & JSONParserOptions): ProseMirrorNode;
|
1203
1293
|
export { nodeFromElement }
|
1204
1294
|
export { nodeFromElement as nodeFromElement_alias_1 }
|
1205
1295
|
|
@@ -1208,7 +1298,7 @@ export { nodeFromElement as nodeFromElement_alias_1 }
|
|
1208
1298
|
*
|
1209
1299
|
* @public
|
1210
1300
|
*/
|
1211
|
-
declare function nodeFromHTML(html: string,
|
1301
|
+
declare function nodeFromHTML(html: string, options: DOMParserOptions & JSONParserOptions & DOMDocumentOptions): ProseMirrorNode;
|
1212
1302
|
export { nodeFromHTML }
|
1213
1303
|
export { nodeFromHTML as nodeFromHTML_alias_1 }
|
1214
1304
|
|
@@ -1217,7 +1307,7 @@ export { nodeFromHTML as nodeFromHTML_alias_1 }
|
|
1217
1307
|
*
|
1218
1308
|
* @public
|
1219
1309
|
*/
|
1220
|
-
declare function nodeFromJSON(json: NodeJSON,
|
1310
|
+
declare function nodeFromJSON(json: NodeJSON, options: JSONParserOptions): ProseMirrorNode;
|
1221
1311
|
export { nodeFromJSON }
|
1222
1312
|
export { nodeFromJSON as nodeFromJSON_alias_1 }
|
1223
1313
|
|
@@ -1469,7 +1559,7 @@ export declare const stateFacet: Facet<StatePayload, StatePayload>;
|
|
1469
1559
|
*
|
1470
1560
|
* @public
|
1471
1561
|
*/
|
1472
|
-
declare function stateFromJSON(json: StateJSON,
|
1562
|
+
declare function stateFromJSON(json: StateJSON, options: JSONParserOptions): EditorState;
|
1473
1563
|
export { stateFromJSON }
|
1474
1564
|
export { stateFromJSON as stateFromJSON_alias_1 }
|
1475
1565
|
|
package/dist/prosekit-core.d.ts
CHANGED
@@ -99,7 +99,10 @@ export { _getId } from './_tsup-dts-rollup';
|
|
99
99
|
export { getMarkType } from './_tsup-dts-rollup';
|
100
100
|
export { getNodeType } from './_tsup-dts-rollup';
|
101
101
|
export { isInCodeBlock } from './_tsup-dts-rollup';
|
102
|
-
export {
|
102
|
+
export { elementFromJSON } from './_tsup-dts-rollup';
|
103
|
+
export { elementFromNode } from './_tsup-dts-rollup';
|
104
|
+
export { htmlFromJSON } from './_tsup-dts-rollup';
|
105
|
+
export { htmlFromNode } from './_tsup-dts-rollup';
|
103
106
|
export { jsonFromHTML } from './_tsup-dts-rollup';
|
104
107
|
export { jsonFromNode } from './_tsup-dts-rollup';
|
105
108
|
export { jsonFromState } from './_tsup-dts-rollup';
|
@@ -107,6 +110,10 @@ export { nodeFromElement } from './_tsup-dts-rollup';
|
|
107
110
|
export { nodeFromHTML } from './_tsup-dts-rollup';
|
108
111
|
export { nodeFromJSON } from './_tsup-dts-rollup';
|
109
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';
|
110
117
|
export { isAllSelection } from './_tsup-dts-rollup';
|
111
118
|
export { isMark } from './_tsup-dts-rollup';
|
112
119
|
export { isNodeSelection } from './_tsup-dts-rollup';
|
package/dist/prosekit-core.js
CHANGED
@@ -15,6 +15,13 @@ var EditorNotFoundError = class extends ProseKitError {
|
|
15
15
|
);
|
16
16
|
}
|
17
17
|
};
|
18
|
+
var DOMDocumentNotFoundError = class extends ProseKitError {
|
19
|
+
constructor() {
|
20
|
+
super(
|
21
|
+
"Unable to find browser Document. When not in the browser environment, you need to pass a DOM Document."
|
22
|
+
);
|
23
|
+
}
|
24
|
+
};
|
18
25
|
|
19
26
|
// src/utils/get-mark-type.ts
|
20
27
|
function getMarkType(schema, type) {
|
@@ -433,11 +440,11 @@ var stateFacet = Facet.defineRootFacet({
|
|
433
440
|
});
|
434
441
|
|
435
442
|
// src/utils/parse.ts
|
436
|
-
import { DOMParser } from "@prosekit/pm/model";
|
443
|
+
import { DOMParser, DOMSerializer } from "@prosekit/pm/model";
|
437
444
|
import { EditorState } from "@prosekit/pm/state";
|
438
445
|
|
439
446
|
// src/utils/get-dom-api.ts
|
440
|
-
function
|
447
|
+
function findGlobalBrowserDocument() {
|
441
448
|
if (typeof document !== "undefined") {
|
442
449
|
return document;
|
443
450
|
}
|
@@ -445,7 +452,7 @@ function getGlobalBrowserDocument() {
|
|
445
452
|
return globalThis.document;
|
446
453
|
}
|
447
454
|
}
|
448
|
-
function
|
455
|
+
function findGlobalBrowserWindow() {
|
449
456
|
if (typeof window !== "undefined") {
|
450
457
|
return window;
|
451
458
|
}
|
@@ -453,49 +460,85 @@ function getGlobalBrowserWindow() {
|
|
453
460
|
return globalThis.window;
|
454
461
|
}
|
455
462
|
}
|
456
|
-
function
|
457
|
-
var _a;
|
458
|
-
|
459
|
-
|
463
|
+
function findBrowserDocument(options) {
|
464
|
+
var _a, _b, _c;
|
465
|
+
return (_c = (_a = options == null ? void 0 : options.document) != null ? _a : findGlobalBrowserDocument()) != null ? _c : (_b = findGlobalBrowserWindow()) == null ? void 0 : _b.document;
|
466
|
+
}
|
467
|
+
function findBrowserWindow(options) {
|
468
|
+
var _a, _b, _c, _d;
|
469
|
+
return (_d = (_b = (_a = options == null ? void 0 : options.document) == null ? void 0 : _a.defaultView) != null ? _b : findGlobalBrowserWindow()) != null ? _d : (_c = findBrowserDocument(options)) == null ? void 0 : _c.defaultView;
|
470
|
+
}
|
471
|
+
function getBrowserDocument(options) {
|
472
|
+
const doc = findBrowserDocument(options);
|
473
|
+
if (doc)
|
474
|
+
return doc;
|
475
|
+
throw new DOMDocumentNotFoundError();
|
476
|
+
}
|
477
|
+
function getBrowserWindow(options) {
|
478
|
+
const win = findBrowserWindow(options);
|
479
|
+
if (win)
|
460
480
|
return win;
|
461
|
-
|
462
|
-
return (_a = getGlobalBrowserDocument()) == null ? void 0 : _a.defaultView;
|
481
|
+
throw new DOMDocumentNotFoundError();
|
463
482
|
}
|
464
483
|
|
465
484
|
// src/utils/parse.ts
|
466
|
-
function
|
467
|
-
return
|
468
|
-
}
|
469
|
-
function jsonFromElement(element, schema) {
|
470
|
-
return jsonFromNode(nodeFromElement(element, schema));
|
485
|
+
function jsonFromState(state) {
|
486
|
+
return state.toJSON();
|
471
487
|
}
|
472
|
-
function
|
473
|
-
return
|
488
|
+
function stateFromJSON(json, options) {
|
489
|
+
return EditorState.fromJSON({ schema: options.schema }, json);
|
474
490
|
}
|
475
|
-
function
|
476
|
-
return
|
491
|
+
function jsonFromNode(node) {
|
492
|
+
return node.toJSON();
|
477
493
|
}
|
478
|
-
function
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
494
|
+
function nodeFromJSON(json, options) {
|
495
|
+
return options.schema.nodeFromJSON(json);
|
496
|
+
}
|
497
|
+
function nodeFromElement(element, options) {
|
498
|
+
const Parser = options.DOMParser || DOMParser;
|
499
|
+
const schema = options.schema;
|
500
|
+
return Parser.fromSchema(schema).parse(element);
|
501
|
+
}
|
502
|
+
function elementFromNode(node, options) {
|
503
|
+
const Serializer = (options == null ? void 0 : options.DOMSerializer) || DOMSerializer;
|
504
|
+
const document2 = getBrowserDocument(options);
|
505
|
+
const schema = node.type.schema;
|
506
|
+
const serializer = Serializer.fromSchema(schema);
|
507
|
+
if (schema.topNodeType !== node.type) {
|
508
|
+
return serializer.serializeNode(node, { document: document2 });
|
509
|
+
} else {
|
510
|
+
return serializer.serializeFragment(
|
511
|
+
node.content,
|
512
|
+
{ document: document2 },
|
513
|
+
document2.createElement("div")
|
483
514
|
);
|
484
515
|
}
|
516
|
+
}
|
517
|
+
function elementFromHTML(html, options) {
|
518
|
+
const win = getBrowserWindow(options);
|
485
519
|
const parser = new win.DOMParser();
|
486
|
-
return parser.parseFromString(`<body>${html}</body>`, "text/html").body;
|
520
|
+
return parser.parseFromString(`<body><div>${html}</div></body>`, "text/html").body.firstElementChild;
|
487
521
|
}
|
488
|
-
function
|
489
|
-
return
|
522
|
+
function htmlFromElement(element) {
|
523
|
+
return element.outerHTML;
|
490
524
|
}
|
491
|
-
function
|
492
|
-
return
|
525
|
+
function nodeFromHTML(html, options) {
|
526
|
+
return nodeFromElement(elementFromHTML(html, options), options);
|
527
|
+
}
|
528
|
+
function htmlFromNode(node, options) {
|
529
|
+
return elementFromNode(node, options).outerHTML;
|
530
|
+
}
|
531
|
+
function jsonFromElement(element, options) {
|
532
|
+
return jsonFromNode(nodeFromElement(element, options));
|
533
|
+
}
|
534
|
+
function elementFromJSON(json, options) {
|
535
|
+
return elementFromNode(nodeFromJSON(json, options), options);
|
493
536
|
}
|
494
|
-
function
|
495
|
-
return
|
537
|
+
function jsonFromHTML(html, options) {
|
538
|
+
return jsonFromElement(elementFromHTML(html, options), options);
|
496
539
|
}
|
497
|
-
function
|
498
|
-
return
|
540
|
+
function htmlFromJSON(json, options) {
|
541
|
+
return htmlFromElement(elementFromJSON(json, options));
|
499
542
|
}
|
500
543
|
|
501
544
|
// src/extensions/default-state.ts
|
@@ -514,9 +557,9 @@ function defineDefaultState({
|
|
514
557
|
const config = {};
|
515
558
|
if (defaultHTML) {
|
516
559
|
if (typeof defaultHTML === "string") {
|
517
|
-
defaultDoc = jsonFromHTML(defaultHTML, schema);
|
560
|
+
defaultDoc = jsonFromHTML(defaultHTML, { schema });
|
518
561
|
} else {
|
519
|
-
defaultDoc = jsonFromElement(defaultHTML, schema);
|
562
|
+
defaultDoc = jsonFromElement(defaultHTML, { schema });
|
520
563
|
}
|
521
564
|
}
|
522
565
|
if (defaultDoc) {
|
@@ -1975,9 +2018,13 @@ export {
|
|
1975
2018
|
defineTripleClickOnHandler,
|
1976
2019
|
defineUnmountHandler,
|
1977
2020
|
defineUpdateHandler,
|
2021
|
+
elementFromJSON,
|
2022
|
+
elementFromNode,
|
1978
2023
|
expandMark,
|
1979
2024
|
getMarkType,
|
1980
2025
|
getNodeType,
|
2026
|
+
htmlFromJSON,
|
2027
|
+
htmlFromNode,
|
1981
2028
|
insertNode,
|
1982
2029
|
isAllSelection,
|
1983
2030
|
isInCodeBlock,
|
@@ -1985,7 +2032,6 @@ export {
|
|
1985
2032
|
isNodeSelection,
|
1986
2033
|
isProseMirrorNode,
|
1987
2034
|
isTextSelection,
|
1988
|
-
jsonFromElement,
|
1989
2035
|
jsonFromHTML,
|
1990
2036
|
jsonFromNode,
|
1991
2037
|
jsonFromState,
|