@prosekit/core 0.2.0 → 0.2.2

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.
@@ -277,6 +277,15 @@ NODES: "doc";
277
277
  export { defineDoc }
278
278
  export { defineDoc as defineDoc_alias_1 }
279
279
 
280
+ /**
281
+ * Registers a event handler that is called when the editor document is changed.
282
+ *
283
+ * @public
284
+ */
285
+ declare function defineDocChangeHandler(handler: DocChangeHandler): Extension<ExtensionTyping<string, string, CommandArgs>>;
286
+ export { defineDocChangeHandler }
287
+ export { defineDocChangeHandler as defineDocChangeHandler_alias_1 }
288
+
280
289
  /**
281
290
  * Add undo/redo history to the editor.
282
291
  */
@@ -296,6 +305,8 @@ export { defineHistory as defineHistory_alias_1 }
296
305
  * or a function that returns one or multiple input rules.
297
306
  *
298
307
  * @public
308
+ *
309
+ * @deprecated Use `prosekit/extensions/input-rule` instead.
299
310
  */
300
311
  declare function defineInputRule(rule: InputRule | InputRule[] | ((context: {
301
312
  schema: Schema;
@@ -319,6 +330,15 @@ declare function defineMarkSpec<Mark extends string>(options: MarkSpecOptions<Ma
319
330
  export { defineMarkSpec }
320
331
  export { defineMarkSpec as defineMarkSpec_alias_1 }
321
332
 
333
+ /**
334
+ * Registers a event handler that is called when the editor view is mounted.
335
+ *
336
+ * @public
337
+ */
338
+ declare function defineMountHandler(handler: MountHandler): Extension<ExtensionTyping<string, string, CommandArgs>>;
339
+ export { defineMountHandler }
340
+ export { defineMountHandler as defineMountHandler_alias_1 }
341
+
322
342
  /**
323
343
  * @public
324
344
  */
@@ -383,12 +403,35 @@ export { defineText }
383
403
  export { defineText as defineText_alias_1 }
384
404
 
385
405
  /**
386
- * @internal
406
+ * Registers a event handler that is called when the editor view is unmounted.
407
+ *
408
+ * @public
409
+ */
410
+ declare function defineUnmountHandler(handler: UnmountHandler): Extension<ExtensionTyping<string, string, CommandArgs>>;
411
+ export { defineUnmountHandler }
412
+ export { defineUnmountHandler as defineUnmountHandler_alias_1 }
413
+
414
+ /**
415
+ * Registers a event handler that is called when the editor state is updated.
416
+ *
417
+ * @public
387
418
  */
388
419
  declare function defineUpdateHandler(handler: UpdateHandler): Extension<ExtensionTyping<string, string, CommandArgs>>;
389
420
  export { defineUpdateHandler }
390
421
  export { defineUpdateHandler as defineUpdateHandler_alias_1 }
391
422
 
423
+ /**
424
+ * A function that is called when the editor document is changed.
425
+ *
426
+ * @param view - The editor view.
427
+ * @param prevState - The previous editor state.
428
+ *
429
+ * @public
430
+ */
431
+ declare type DocChangeHandler = (view: EditorView, prevState: EditorState) => void;
432
+ export { DocChangeHandler }
433
+ export { DocChangeHandler as DocChangeHandler_alias_1 }
434
+
392
435
  /**
393
436
  * @public
394
437
  */
@@ -739,6 +782,20 @@ declare interface Keymap {
739
782
  export { Keymap }
740
783
  export { Keymap as Keymap_alias_1 }
741
784
 
785
+ /**
786
+ * @internal
787
+ */
788
+ declare const keymapFacet: Facet<Keymap, PluginPayload>;
789
+ export { keymapFacet }
790
+ export { keymapFacet as keymapFacet_alias_1 }
791
+
792
+ /**
793
+ * @internal
794
+ */
795
+ declare type KeymapPayload = Keymap;
796
+ export { KeymapPayload }
797
+ export { KeymapPayload as KeymapPayload_alias_1 }
798
+
742
799
  export declare interface MarkBuilder {
743
800
  (attrs: Attrs | null, ...children: NodeChild[]): ProseMirrorNode[];
744
801
  (...children: NodeChild[]): ProseMirrorNode[];
@@ -754,6 +811,17 @@ declare interface MarkSpecOptions<MarkName extends string = string> extends Mark
754
811
  export { MarkSpecOptions }
755
812
  export { MarkSpecOptions as MarkSpecOptions_alias_1 }
756
813
 
814
+ /**
815
+ * A function that is called when the editor view is mounted.
816
+ *
817
+ * @param view - The editor view.
818
+ *
819
+ * @public
820
+ */
821
+ declare type MountHandler = (view: EditorView) => void;
822
+ export { MountHandler }
823
+ export { MountHandler as MountHandler_alias_1 }
824
+
757
825
  export declare interface NodeBuilder {
758
826
  (attrs: Attrs | null, ...children: NodeChild[]): ProseMirrorNode;
759
827
  (...children: NodeChild[]): ProseMirrorNode;
@@ -1037,6 +1105,15 @@ export declare function uniqPush<T>(prev: readonly T[], next: readonly T[]): T[]
1037
1105
 
1038
1106
  export declare function uniqRemove<T>(prev: T[], next: T[]): T[];
1039
1107
 
1108
+ /**
1109
+ * A function that is called when the editor view is unmounted.
1110
+ *
1111
+ * @public
1112
+ */
1113
+ declare type UnmountHandler = () => void;
1114
+ export { UnmountHandler }
1115
+ export { UnmountHandler as UnmountHandler_alias_1 }
1116
+
1040
1117
  export declare function updateExtension(prevInputs: Payloads, prevConverters: Converters, extension: Extension, mode: 'add' | 'remove'): {
1041
1118
  schemaInput: SchemaPayload | null;
1042
1119
  stateInput: StatePayload | null;
@@ -1044,10 +1121,17 @@ export declare function updateExtension(prevInputs: Payloads, prevConverters: Co
1044
1121
  commandInput: CommandCreators | null;
1045
1122
  };
1046
1123
 
1047
- export declare type UpdateHandler = (options: {
1048
- view: EditorView;
1049
- prevState?: EditorState;
1050
- }) => void;
1124
+ /**
1125
+ * A function that is called when the editor state is updated.
1126
+ *
1127
+ * @param view - The editor view.
1128
+ * @param prevState - The previous editor state.
1129
+ *
1130
+ * @public
1131
+ */
1132
+ declare type UpdateHandler = (view: EditorView, prevState: EditorState) => void;
1133
+ export { UpdateHandler }
1134
+ export { UpdateHandler as UpdateHandler_alias_1 }
1051
1135
 
1052
1136
  export declare const viewFacet: Facet<ViewPayload, ViewPayload>;
1053
1137
 
@@ -15,11 +15,21 @@ export { defineCommands } from './_tsup-dts-rollup';
15
15
  export { defineDefaultState } from './_tsup-dts-rollup';
16
16
  export { DefaultStateOptions } from './_tsup-dts-rollup';
17
17
  export { defineDoc } from './_tsup-dts-rollup';
18
+ export { defineMountHandler } from './_tsup-dts-rollup';
19
+ export { defineUnmountHandler } from './_tsup-dts-rollup';
20
+ export { defineUpdateHandler } from './_tsup-dts-rollup';
21
+ export { MountHandler } from './_tsup-dts-rollup';
22
+ export { UnmountHandler } from './_tsup-dts-rollup';
23
+ export { UpdateHandler } from './_tsup-dts-rollup';
24
+ export { defineDocChangeHandler } from './_tsup-dts-rollup';
25
+ export { DocChangeHandler } from './_tsup-dts-rollup';
18
26
  export { defineHistory } from './_tsup-dts-rollup';
19
27
  export { defineInputRule } from './_tsup-dts-rollup';
20
28
  export { defineBaseKeymap } from './_tsup-dts-rollup';
21
29
  export { defineKeymap } from './_tsup-dts-rollup';
30
+ export { keymapFacet } from './_tsup-dts-rollup';
22
31
  export { Keymap } from './_tsup-dts-rollup';
32
+ export { KeymapPayload } from './_tsup-dts-rollup';
23
33
  export { defineMarkSpec } from './_tsup-dts-rollup';
24
34
  export { MarkSpecOptions } from './_tsup-dts-rollup';
25
35
  export { defineNodeSpec } from './_tsup-dts-rollup';
@@ -33,7 +43,6 @@ export { definePlugin } from './_tsup-dts-rollup';
33
43
  export { pluginFacet } from './_tsup-dts-rollup';
34
44
  export { PluginPayload } from './_tsup-dts-rollup';
35
45
  export { defineText } from './_tsup-dts-rollup';
36
- export { defineUpdateHandler } from './_tsup-dts-rollup';
37
46
  export { Facet } from './_tsup-dts-rollup';
38
47
  export { FacetOptions } from './_tsup-dts-rollup';
39
48
  export { BaseNodeViewOptions } from './_tsup-dts-rollup';
@@ -1130,16 +1130,8 @@ function defineDoc() {
1130
1130
  });
1131
1131
  }
1132
1132
 
1133
- // src/extensions/history.ts
1134
- import { history, redo, undo } from "@prosekit/pm/history";
1135
-
1136
- // src/utils/env.ts
1137
- var isMac = typeof navigator !== "undefined" ? /Mac|iP(hone|[ao]d)/.test(navigator.platform) : false;
1138
-
1139
- // src/extensions/keymap.ts
1140
- import { baseKeymap, chainCommands } from "@prosekit/pm/commands";
1141
- import { keydownHandler } from "@prosekit/pm/keymap";
1142
- import { Plugin as Plugin3, PluginKey } from "@prosekit/pm/state";
1133
+ // src/extensions/events/plugin-view.ts
1134
+ import { PluginKey, ProseMirrorPlugin } from "@prosekit/pm/state";
1143
1135
 
1144
1136
  // src/extensions/plugin.ts
1145
1137
  import "@prosekit/pm/model";
@@ -1177,7 +1169,89 @@ var pluginFacet = Facet.define({
1177
1169
  next: stateFacet
1178
1170
  });
1179
1171
 
1172
+ // src/extensions/events/plugin-view.ts
1173
+ function defineMountHandler(handler) {
1174
+ return pluginViewFacet.extension([["mount", handler]]);
1175
+ }
1176
+ function defineUpdateHandler(handler) {
1177
+ return pluginViewFacet.extension([["update", handler]]);
1178
+ }
1179
+ function defineUnmountHandler(handler) {
1180
+ return pluginViewFacet.extension([["unmount", handler]]);
1181
+ }
1182
+ var pluginViewFacet = Facet.define({
1183
+ converter: () => {
1184
+ let mountHandlers = [];
1185
+ let updateHandlers = [];
1186
+ let unmountHandlers = [];
1187
+ const plugin = new ProseMirrorPlugin({
1188
+ key: pluginKey,
1189
+ view: (view) => {
1190
+ mountHandlers.forEach((fn) => fn(view));
1191
+ return {
1192
+ update: (view2, prevState) => {
1193
+ updateHandlers.forEach((fn) => fn(view2, prevState));
1194
+ },
1195
+ destroy: () => {
1196
+ unmountHandlers.forEach((fn) => fn());
1197
+ }
1198
+ };
1199
+ }
1200
+ });
1201
+ const pluginFunc = () => [plugin];
1202
+ const register = (input) => {
1203
+ mountHandlers = [];
1204
+ updateHandlers = [];
1205
+ unmountHandlers = [];
1206
+ for (const args of input) {
1207
+ switch (args[0]) {
1208
+ case "mount":
1209
+ mountHandlers.push(args[1]);
1210
+ break;
1211
+ case "update":
1212
+ updateHandlers.push(args[1]);
1213
+ break;
1214
+ case "unmount":
1215
+ unmountHandlers.push(args[1]);
1216
+ break;
1217
+ }
1218
+ }
1219
+ };
1220
+ return {
1221
+ create: (input) => {
1222
+ register(input);
1223
+ return pluginFunc;
1224
+ },
1225
+ update: (input) => {
1226
+ register(input);
1227
+ return null;
1228
+ }
1229
+ };
1230
+ },
1231
+ next: pluginFacet,
1232
+ singleton: true
1233
+ });
1234
+ var pluginKey = new PluginKey("prosekit-plugin-view-handler");
1235
+
1236
+ // src/extensions/events/doc-change.ts
1237
+ function defineDocChangeHandler(handler) {
1238
+ return defineUpdateHandler((view, prevState) => {
1239
+ if (!view.state.doc.eq(prevState.doc)) {
1240
+ handler(view, prevState);
1241
+ }
1242
+ });
1243
+ }
1244
+
1245
+ // src/extensions/history.ts
1246
+ import { history, redo, undo } from "@prosekit/pm/history";
1247
+
1248
+ // src/utils/env.ts
1249
+ var isMac = typeof navigator !== "undefined" ? /Mac|iP(hone|[ao]d)/.test(navigator.platform) : false;
1250
+
1180
1251
  // src/extensions/keymap.ts
1252
+ import { baseKeymap, chainCommands } from "@prosekit/pm/commands";
1253
+ import { keydownHandler } from "@prosekit/pm/keymap";
1254
+ import { Plugin as Plugin3, PluginKey as PluginKey2 } from "@prosekit/pm/state";
1181
1255
  function defineKeymap(keymap) {
1182
1256
  return keymapFacet.extension([keymap]);
1183
1257
  }
@@ -1228,7 +1302,7 @@ function mergeKeymaps(keymaps) {
1228
1302
  ])
1229
1303
  );
1230
1304
  }
1231
- var keymapPluginKey = new PluginKey("prosekit-keymap");
1305
+ var keymapPluginKey = new PluginKey2("prosekit-keymap");
1232
1306
 
1233
1307
  // src/extensions/history.ts
1234
1308
  function defineHistory() {
@@ -1294,7 +1368,7 @@ var markSpecFacet = Facet.define({
1294
1368
  });
1295
1369
 
1296
1370
  // src/extensions/node-view.ts
1297
- import { ProseMirrorPlugin } from "@prosekit/pm/state";
1371
+ import { ProseMirrorPlugin as ProseMirrorPlugin2 } from "@prosekit/pm/state";
1298
1372
  import "@prosekit/pm/view";
1299
1373
  function defineNodeView(options) {
1300
1374
  return nodeViewFacet.extension([options]);
@@ -1307,13 +1381,13 @@ var nodeViewFacet = Facet.define({
1307
1381
  nodeViews[input.name] = input.constructor;
1308
1382
  }
1309
1383
  }
1310
- return () => [new ProseMirrorPlugin({ props: { nodeViews } })];
1384
+ return () => [new ProseMirrorPlugin2({ props: { nodeViews } })];
1311
1385
  },
1312
1386
  next: pluginFacet
1313
1387
  });
1314
1388
 
1315
1389
  // src/extensions/node-view-effect.ts
1316
- import { ProseMirrorPlugin as ProseMirrorPlugin2 } from "@prosekit/pm/state";
1390
+ import { ProseMirrorPlugin as ProseMirrorPlugin3 } from "@prosekit/pm/state";
1317
1391
  import "@prosekit/pm/view";
1318
1392
  function defineNodeViewFactory(options) {
1319
1393
  return nodeViewFactoryFacet.extension([options]);
@@ -1341,7 +1415,7 @@ var nodeViewFactoryFacet = Facet.define({
1341
1415
  nodeViews[name] = factory(args);
1342
1416
  }
1343
1417
  }
1344
- return () => [new ProseMirrorPlugin2({ props: { nodeViews } })];
1418
+ return () => [new ProseMirrorPlugin3({ props: { nodeViews } })];
1345
1419
  },
1346
1420
  next: pluginFacet
1347
1421
  });
@@ -1370,49 +1444,6 @@ function defineText() {
1370
1444
  });
1371
1445
  }
1372
1446
 
1373
- // src/extensions/update-handler.ts
1374
- import { PluginKey as PluginKey2, ProseMirrorPlugin as ProseMirrorPlugin3 } from "@prosekit/pm/state";
1375
-
1376
- // src/utils/is-not-null.ts
1377
- function isNotNull(value) {
1378
- return value != null;
1379
- }
1380
-
1381
- // src/extensions/update-handler.ts
1382
- function defineUpdateHandler(handler) {
1383
- return updateHandlerFacet.extension([handler]);
1384
- }
1385
- var updateHandlerFacet = Facet.define({
1386
- converter: () => {
1387
- let updateHandlers = [];
1388
- const plugin = new ProseMirrorPlugin3({
1389
- key: pluginKey,
1390
- view: (view) => {
1391
- updateHandlers.forEach((fn) => fn({ view }));
1392
- return {
1393
- update: (view2, prevState) => {
1394
- updateHandlers.forEach((fn) => fn({ view: view2, prevState }));
1395
- }
1396
- };
1397
- }
1398
- });
1399
- const pluginFunc = () => [plugin];
1400
- return {
1401
- create: (handlers) => {
1402
- updateHandlers = handlers.filter(isNotNull);
1403
- return pluginFunc;
1404
- },
1405
- update: (handlers) => {
1406
- updateHandlers = handlers.filter(isNotNull);
1407
- return null;
1408
- }
1409
- };
1410
- },
1411
- next: pluginFacet,
1412
- singleton: true
1413
- });
1414
- var pluginKey = new PluginKey2("prosekit-event-handler");
1415
-
1416
1447
  // src/utils/get-id.ts
1417
1448
  var id = 0;
1418
1449
  function getId() {
@@ -1432,16 +1463,19 @@ export {
1432
1463
  defineCommands,
1433
1464
  defineDefaultState,
1434
1465
  defineDoc,
1466
+ defineDocChangeHandler,
1435
1467
  defineHistory,
1436
1468
  defineInputRule,
1437
1469
  defineKeymap,
1438
1470
  defineMarkSpec,
1471
+ defineMountHandler,
1439
1472
  defineNodeSpec,
1440
1473
  defineNodeView,
1441
1474
  defineNodeViewFactory,
1442
1475
  defineParagraph,
1443
1476
  definePlugin,
1444
1477
  defineText,
1478
+ defineUnmountHandler,
1445
1479
  defineUpdateHandler,
1446
1480
  getMarkType,
1447
1481
  getNodeType,
@@ -1455,6 +1489,7 @@ export {
1455
1489
  jsonFromHTML,
1456
1490
  jsonFromNode,
1457
1491
  jsonFromState,
1492
+ keymapFacet,
1458
1493
  nodeFromElement,
1459
1494
  nodeFromHTML,
1460
1495
  nodeFromJSON,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/core",
3
3
  "type": "module",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "private": false,
6
6
  "author": {
7
7
  "name": "ocavue",
@@ -37,13 +37,13 @@
37
37
  "dependencies": {
38
38
  "@prosekit/pm": "^0.1.1",
39
39
  "orderedmap": "^2.1.1",
40
- "type-fest": "^4.8.3"
40
+ "type-fest": "^4.9.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@prosekit/dev": "*",
44
44
  "tsup": "^8.0.1",
45
45
  "typescript": "^5.3.3",
46
- "vitest": "^1.1.0"
46
+ "vitest": "^1.1.1"
47
47
  },
48
48
  "scripts": {
49
49
  "build:tsup": "tsup",
package/src/index.ts CHANGED
@@ -14,12 +14,26 @@ export {
14
14
  type DefaultStateOptions,
15
15
  } from './extensions/default-state'
16
16
  export { defineDoc } from './extensions/doc'
17
+ export {
18
+ defineMountHandler,
19
+ defineUnmountHandler,
20
+ defineUpdateHandler,
21
+ type MountHandler,
22
+ type UnmountHandler,
23
+ type UpdateHandler,
24
+ } from './extensions/events/plugin-view'
25
+ export {
26
+ defineDocChangeHandler,
27
+ type DocChangeHandler,
28
+ } from './extensions/events/doc-change'
17
29
  export { defineHistory } from './extensions/history'
18
30
  export { defineInputRule } from './extensions/input-rules'
19
31
  export {
20
32
  defineBaseKeymap,
21
33
  defineKeymap,
34
+ keymapFacet,
22
35
  type Keymap,
36
+ type KeymapPayload,
23
37
  } from './extensions/keymap'
24
38
  export { defineMarkSpec, type MarkSpecOptions } from './extensions/mark-spec'
25
39
  export { defineNodeSpec, type NodeSpecOptions } from './extensions/node-spec'
@@ -35,7 +49,6 @@ export {
35
49
  type PluginPayload,
36
50
  } from './extensions/plugin'
37
51
  export { defineText } from './extensions/text'
38
- export { defineUpdateHandler } from './extensions/update-handler'
39
52
  export { Facet, type FacetOptions } from './facets/facet'
40
53
  export type { BaseNodeViewOptions } from './types/base-node-view-options'
41
54
  export { type CommandArgs } from './types/command'