@prosekit/core 0.0.10 → 0.0.11

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.
@@ -95,6 +95,18 @@ declare function addEventHandler(options: {
95
95
  export { addEventHandler }
96
96
  export { addEventHandler as addEventHandler_alias_1 }
97
97
 
98
+ /**
99
+ * Add undo/redo history to the editor.
100
+ */
101
+ declare function addHistory(): Extension< {
102
+ COMMAND_ARGS: {
103
+ undo: [];
104
+ redo: [];
105
+ };
106
+ }>;
107
+ export { addHistory }
108
+ export { addHistory as addHistory_alias_1 }
109
+
98
110
  /**
99
111
  * @public
100
112
  */
@@ -189,6 +201,11 @@ export declare function assertTypeEqual<T, U>(_val: IsEqual<T, U>): void;
189
201
 
190
202
  export declare function collectNodes(content: NodeContent): ProseMirrorNode[];
191
203
 
204
+ export declare interface CommandApplier<Args extends any[] = any[]> {
205
+ (...args: Args): boolean;
206
+ canApply(...args: Args): boolean;
207
+ }
208
+
192
209
  /** @internal */
193
210
  declare interface CommandArgs {
194
211
  [name: string]: any[];
@@ -202,8 +219,6 @@ export declare interface CommandCreators {
202
219
  [name: string]: CommandCreator;
203
220
  }
204
221
 
205
- export declare type CommandDispatcher<Args extends any[] = any[]> = (...arg: Args) => boolean;
206
-
207
222
  export declare const commandSlot: Facet<CommandSlotInput, CommandSlotInput>;
208
223
 
209
224
  export declare type CommandSlotInput = Record<string, CommandCreator<any>>;
@@ -248,7 +263,7 @@ declare class Editor<E extends Extension = any> {
248
263
  get mounted(): boolean;
249
264
  get view(): EditorView;
250
265
  get schema(): Schema<ExtractNodes<E>, ExtractMarks<E>>;
251
- get commands(): ExtractCommandDispatchers<E>;
266
+ get commands(): ExtractCommandAppliers<E>;
252
267
  mount(place: HTMLElement | null | undefined | void): void;
253
268
  unmount(): void;
254
269
  use(extension: Extension): VoidFunction;
@@ -312,6 +327,13 @@ declare interface ExtensionTyping<Node extends string = string, Mark extends str
312
327
  export { ExtensionTyping }
313
328
  export { ExtensionTyping as ExtensionTyping_alias_1 }
314
329
 
330
+ /**
331
+ * @public
332
+ */
333
+ declare type ExtractCommandAppliers<E extends Extension> = ToCommandApplier<ExtractCommandArgs<E>>;
334
+ export { ExtractCommandAppliers }
335
+ export { ExtractCommandAppliers as ExtractCommandAppliers_alias_1 }
336
+
315
337
  /**
316
338
  * @internal
317
339
  */
@@ -326,13 +348,6 @@ declare type ExtractCommandCreators<E extends Extension> = ToCommandCreators<Ext
326
348
  export { ExtractCommandCreators }
327
349
  export { ExtractCommandCreators as ExtractCommandCreators_alias_1 }
328
350
 
329
- /**
330
- * @public
331
- */
332
- declare type ExtractCommandDispatchers<E extends Extension> = ToCommandDispatcher<ExtractCommandArgs<E>>;
333
- export { ExtractCommandDispatchers }
334
- export { ExtractCommandDispatchers as ExtractCommandDispatchers_alias_1 }
335
-
336
351
  /**
337
352
  * @intneral
338
353
  */
@@ -421,6 +436,8 @@ export declare function insertNode({ node, pos, }: {
421
436
  pos?: number;
422
437
  }): Action;
423
438
 
439
+ export declare const isMac: boolean;
440
+
424
441
  export declare function isMark(mark: unknown): mark is Mark;
425
442
 
426
443
  export declare function isMarkActive(state: EditorState, type: string | MarkType, attrs?: Attrs | null): boolean;
@@ -611,6 +628,10 @@ export { StateJson as StateJson_alias_1 }
611
628
 
612
629
  export declare const stateSlot: Facet<StateConfigCallback, StateConfigCallback>;
613
630
 
631
+ export declare type ToCommandApplier<T extends CommandArgs> = {
632
+ [K in keyof T]: CommandApplier<T[K]>;
633
+ };
634
+
614
635
  export declare type ToCommandArgs<T extends CommandCreators> = {
615
636
  [K in keyof T]: Parameters<T[K]>;
616
637
  };
@@ -619,10 +640,6 @@ export declare type ToCommandCreators<T extends CommandArgs> = {
619
640
  [K in keyof T]: CommandCreator<T[K]>;
620
641
  };
621
642
 
622
- export declare type ToCommandDispatcher<T extends CommandArgs> = {
623
- [K in keyof T]: CommandDispatcher<T[K]>;
624
- };
625
-
626
643
  declare function toggleMark(options: ToggleMarkOptions): Command;
627
644
  export { toggleMark }
628
645
  export { toggleMark as toggleMark_alias_1 }
@@ -19,6 +19,7 @@ export { addDefaultState } from './_tsup-dts-rollup';
19
19
  export { DefaultStateOptions } from './_tsup-dts-rollup';
20
20
  export { addDoc } from './_tsup-dts-rollup';
21
21
  export { addEventHandler } from './_tsup-dts-rollup';
22
+ export { addHistory } from './_tsup-dts-rollup';
22
23
  export { addInputRule } from './_tsup-dts-rollup';
23
24
  export { addBaseKeymap } from './_tsup-dts-rollup';
24
25
  export { addKeymap } from './_tsup-dts-rollup';
@@ -36,8 +37,8 @@ export { PluginFacetInput } from './_tsup-dts-rollup';
36
37
  export { addText } from './_tsup-dts-rollup';
37
38
  export { CommandArgs } from './_tsup-dts-rollup';
38
39
  export { Extension } from './_tsup-dts-rollup';
40
+ export { ExtractCommandAppliers } from './_tsup-dts-rollup';
39
41
  export { ExtractCommandCreators } from './_tsup-dts-rollup';
40
- export { ExtractCommandDispatchers } from './_tsup-dts-rollup';
41
42
  export { ExtractMarks } from './_tsup-dts-rollup';
42
43
  export { ExtractNodes } from './_tsup-dts-rollup';
43
44
  export { SimplifyExtension } from './_tsup-dts-rollup';
@@ -624,7 +624,7 @@ function createEditor({
624
624
  var EditorInstance = class {
625
625
  constructor(extension) {
626
626
  this.view = null;
627
- this.commandDispatchers = {};
627
+ this.commandAppliers = {};
628
628
  this.inputs = [];
629
629
  this.slots = [];
630
630
  this.mount = this.mount.bind(this);
@@ -724,15 +724,26 @@ var EditorInstance = class {
724
724
  view.setProps({ state: newState });
725
725
  }
726
726
  addCommand(name, commandCreator) {
727
- const dispatcher = (...args) => {
728
- const view = this.assertView;
727
+ const applier = (...args) => {
728
+ const view = this.view;
729
+ if (!view) {
730
+ return false;
731
+ }
729
732
  const command = commandCreator(...args);
730
733
  return command(view.state, view.dispatch.bind(view), view);
731
734
  };
732
- this.commandDispatchers[name] = dispatcher;
735
+ applier.canApply = (...args) => {
736
+ const view = this.view;
737
+ if (!view) {
738
+ return false;
739
+ }
740
+ const command = commandCreator(...args);
741
+ return command(view.state, void 0, view);
742
+ };
743
+ this.commandAppliers[name] = applier;
733
744
  }
734
745
  removeCommand(name) {
735
- delete this.commandDispatchers[name];
746
+ delete this.commandAppliers[name];
736
747
  }
737
748
  };
738
749
  var Editor = class _Editor {
@@ -760,7 +771,7 @@ var Editor = class _Editor {
760
771
  return this.instance.schema;
761
772
  }
762
773
  get commands() {
763
- return this.instance.commandDispatchers;
774
+ return this.instance.commandAppliers;
764
775
  }
765
776
  mount(place) {
766
777
  if (!place) {
@@ -986,27 +997,16 @@ var eventFacet = Facet.define({
986
997
  });
987
998
  var pluginKey = new PluginKey("prosekit-event-handler");
988
999
 
989
- // src/extensions/input-rules.ts
990
- import { inputRules } from "@prosekit/pm/inputrules";
991
- import "@prosekit/pm/model";
992
- import "@prosekit/pm/state";
993
- function addInputRule(rules) {
994
- return inputRuleFacet.extension([rules]);
995
- }
996
- var inputRuleFacet = Facet.define({
997
- combine: (inputs) => {
998
- return (context) => {
999
- const rules = inputs.flatMap((callback) => callback(context));
1000
- return [inputRules({ rules })];
1001
- };
1002
- },
1003
- next: pluginFacet
1004
- });
1000
+ // src/extensions/history.ts
1001
+ import { history, redo, undo } from "@prosekit/pm/history";
1002
+
1003
+ // src/utils/env.ts
1004
+ var isMac = typeof navigator !== "undefined" ? /Mac|iP(hone|[ao]d)/.test(navigator.platform) : false;
1005
1005
 
1006
1006
  // src/extensions/keymap.ts
1007
1007
  import { baseKeymap, chainCommands } from "@prosekit/pm/commands";
1008
1008
  import { keydownHandler } from "@prosekit/pm/keymap";
1009
- import { Plugin as Plugin4, PluginKey as PluginKey2 } from "@prosekit/pm/state";
1009
+ import { Plugin as Plugin3, PluginKey as PluginKey2 } from "@prosekit/pm/state";
1010
1010
  function addKeymap(keymap) {
1011
1011
  return keymapFacet.extension([keymap]);
1012
1012
  }
@@ -1021,7 +1021,7 @@ var keymapFacet = Facet.define({
1021
1021
  return handler(view, event);
1022
1022
  return false;
1023
1023
  };
1024
- const plugin = new Plugin4({
1024
+ const plugin = new Plugin3({
1025
1025
  key: keymapPluginKey,
1026
1026
  props: { handleKeyDown: handlerWrapper }
1027
1027
  });
@@ -1057,6 +1057,42 @@ function mergeKeymaps(keymaps) {
1057
1057
  }
1058
1058
  var keymapPluginKey = new PluginKey2("prosekit-keymap");
1059
1059
 
1060
+ // src/extensions/history.ts
1061
+ function addHistory() {
1062
+ const keymap = {
1063
+ "Mod-z": undo,
1064
+ "Shift-Mod-z": redo
1065
+ };
1066
+ if (!isMac) {
1067
+ keymap["Mod-y"] = redo;
1068
+ }
1069
+ return defineExtension([
1070
+ addPlugin(history()),
1071
+ addKeymap(keymap),
1072
+ addCommands({
1073
+ undo: () => undo,
1074
+ redo: () => redo
1075
+ })
1076
+ ]);
1077
+ }
1078
+
1079
+ // src/extensions/input-rules.ts
1080
+ import { inputRules } from "@prosekit/pm/inputrules";
1081
+ import "@prosekit/pm/model";
1082
+ import "@prosekit/pm/state";
1083
+ function addInputRule(rules) {
1084
+ return inputRuleFacet.extension([rules]);
1085
+ }
1086
+ var inputRuleFacet = Facet.define({
1087
+ combine: (inputs) => {
1088
+ return (context) => {
1089
+ const rules = inputs.flatMap((callback) => callback(context));
1090
+ return [inputRules({ rules })];
1091
+ };
1092
+ },
1093
+ next: pluginFacet
1094
+ });
1095
+
1060
1096
  // src/extensions/mark-spec.ts
1061
1097
  function addMarkSpec(options) {
1062
1098
  return markSpecFacet.extension([options]);
@@ -1126,6 +1162,7 @@ export {
1126
1162
  addDefaultState,
1127
1163
  addDoc,
1128
1164
  addEventHandler,
1165
+ addHistory,
1129
1166
  addInputRule,
1130
1167
  addKeymap,
1131
1168
  addMark,
package/dist/style.css CHANGED
@@ -1,4 +1,4 @@
1
- /* ../../node_modules/.pnpm/prosemirror-view@1.31.7/node_modules/prosemirror-view/style/prosemirror.css */
1
+ /* ../../node_modules/.pnpm/prosemirror-view@1.31.8/node_modules/prosemirror-view/style/prosemirror.css */
2
2
  .ProseMirror {
3
3
  position: relative;
4
4
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/core",
3
3
  "type": "module",
4
- "version": "0.0.10",
4
+ "version": "0.0.11",
5
5
  "private": false,
6
6
  "author": {
7
7
  "name": "ocavue",
@@ -38,7 +38,7 @@
38
38
  "dist"
39
39
  ],
40
40
  "dependencies": {
41
- "@prosekit/pm": "^0.0.5",
41
+ "@prosekit/pm": "^0.0.6",
42
42
  "orderedmap": "^2.1.1",
43
43
  "type-fest": "^4.3.1"
44
44
  },
@@ -46,7 +46,7 @@
46
46
  "@prosekit/dev": "*",
47
47
  "tsup": "^7.2.0",
48
48
  "typescript": "^5.2.2",
49
- "vitest": "^0.34.3"
49
+ "vitest": "^0.34.5"
50
50
  },
51
51
  "scripts": {
52
52
  "build:tsup": "tsup",
package/src/index.ts CHANGED
@@ -13,6 +13,7 @@ export {
13
13
  } from './extensions/default-state'
14
14
  export { addDoc } from './extensions/doc'
15
15
  export { addEventHandler } from './extensions/event-handler'
16
+ export { addHistory } from './extensions/history'
16
17
  export { addInputRule } from './extensions/input-rules'
17
18
  export { addBaseKeymap, addKeymap, type Keymap } from './extensions/keymap'
18
19
  export { addMarkSpec, type MarkSpecOptions } from './extensions/mark-spec'
@@ -29,8 +30,8 @@ export { type CommandArgs as CommandArgs } from './types/command'
29
30
  export * from './types/editor'
30
31
  export {
31
32
  type Extension,
33
+ type ExtractCommandAppliers,
32
34
  type ExtractCommandCreators,
33
- type ExtractCommandDispatchers,
34
35
  type ExtractMarks,
35
36
  type ExtractNodes,
36
37
  type SimplifyExtension,