@prosekit/core 0.2.1 → 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
  */
@@ -321,6 +330,15 @@ declare function defineMarkSpec<Mark extends string>(options: MarkSpecOptions<Ma
321
330
  export { defineMarkSpec }
322
331
  export { defineMarkSpec as defineMarkSpec_alias_1 }
323
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
+
324
342
  /**
325
343
  * @public
326
344
  */
@@ -385,12 +403,35 @@ export { defineText }
385
403
  export { defineText as defineText_alias_1 }
386
404
 
387
405
  /**
388
- * @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
389
418
  */
390
419
  declare function defineUpdateHandler(handler: UpdateHandler): Extension<ExtensionTyping<string, string, CommandArgs>>;
391
420
  export { defineUpdateHandler }
392
421
  export { defineUpdateHandler as defineUpdateHandler_alias_1 }
393
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
+
394
435
  /**
395
436
  * @public
396
437
  */
@@ -770,6 +811,17 @@ declare interface MarkSpecOptions<MarkName extends string = string> extends Mark
770
811
  export { MarkSpecOptions }
771
812
  export { MarkSpecOptions as MarkSpecOptions_alias_1 }
772
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
+
773
825
  export declare interface NodeBuilder {
774
826
  (attrs: Attrs | null, ...children: NodeChild[]): ProseMirrorNode;
775
827
  (...children: NodeChild[]): ProseMirrorNode;
@@ -1053,6 +1105,15 @@ export declare function uniqPush<T>(prev: readonly T[], next: readonly T[]): T[]
1053
1105
 
1054
1106
  export declare function uniqRemove<T>(prev: T[], next: T[]): T[];
1055
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
+
1056
1117
  export declare function updateExtension(prevInputs: Payloads, prevConverters: Converters, extension: Extension, mode: 'add' | 'remove'): {
1057
1118
  schemaInput: SchemaPayload | null;
1058
1119
  stateInput: StatePayload | null;
@@ -1060,10 +1121,17 @@ export declare function updateExtension(prevInputs: Payloads, prevConverters: Co
1060
1121
  commandInput: CommandCreators | null;
1061
1122
  };
1062
1123
 
1063
- export declare type UpdateHandler = (options: {
1064
- view: EditorView;
1065
- prevState?: EditorState;
1066
- }) => 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 }
1067
1135
 
1068
1136
  export declare const viewFacet: Facet<ViewPayload, ViewPayload>;
1069
1137
 
@@ -15,6 +15,14 @@ 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';
@@ -35,7 +43,6 @@ export { definePlugin } from './_tsup-dts-rollup';
35
43
  export { pluginFacet } from './_tsup-dts-rollup';
36
44
  export { PluginPayload } from './_tsup-dts-rollup';
37
45
  export { defineText } from './_tsup-dts-rollup';
38
- export { defineUpdateHandler } from './_tsup-dts-rollup';
39
46
  export { Facet } from './_tsup-dts-rollup';
40
47
  export { FacetOptions } from './_tsup-dts-rollup';
41
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,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/core",
3
3
  "type": "module",
4
- "version": "0.2.1",
4
+ "version": "0.2.2",
5
5
  "private": false,
6
6
  "author": {
7
7
  "name": "ocavue",
package/src/index.ts CHANGED
@@ -14,6 +14,18 @@ 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 {
@@ -37,7 +49,6 @@ export {
37
49
  type PluginPayload,
38
50
  } from './extensions/plugin'
39
51
  export { defineText } from './extensions/text'
40
- export { defineUpdateHandler } from './extensions/update-handler'
41
52
  export { Facet, type FacetOptions } from './facets/facet'
42
53
  export type { BaseNodeViewOptions } from './types/base-node-view-options'
43
54
  export { type CommandArgs } from './types/command'