@etrepum/lexical-builder 0.0.31-nightly.20240724.0 → 0.0.32-nightly.20240725.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,20 +1,12 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- */
1
+ import { DisabledToggleOutput } from './disabledToggle';
2
+
8
3
  export interface DragonConfig {
9
4
  disabled: boolean;
10
5
  }
11
- export interface DragonOutput {
12
- isDisabled: () => boolean;
13
- setDisabled: (disabled: boolean) => void;
14
- }
6
+ export type DragonOutput = DisabledToggleOutput;
15
7
  /**
16
8
  * Add Dragon speech to text input support to the editor, via the
17
9
  * \@lexical/dragon module.
18
10
  */
19
- export declare const DragonPlan: import('@etrepum/lexical-builder-core').LexicalPlan<DragonConfig, "@lexical/dragon", DragonOutput, unknown>;
11
+ export declare const DragonPlan: import('@etrepum/lexical-builder-core').LexicalPlan<DragonConfig, "@lexical/dragon", DisabledToggleOutput, unknown>;
20
12
  //# sourceMappingURL=DragonPlan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DragonPlan.d.ts","sourceRoot":"","sources":["../src/DragonPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AACD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,6GAUrB,CAAC"}
1
+ {"version":3,"file":"DragonPlan.d.ts","sourceRoot":"","sources":["../src/DragonPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AACD,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,UAAU,qHAUrB,CAAC"}
@@ -1,4 +1,6 @@
1
+ import { LexicalEditor } from 'lexical';
1
2
  import { HistoryState } from '@lexical/history';
3
+ import { DisabledToggleOutput } from './disabledToggle';
2
4
 
3
5
  export interface HistoryConfig {
4
6
  /**
@@ -9,11 +11,24 @@ export interface HistoryConfig {
9
11
  /**
10
12
  * The initial history state, the default is {@link createEmptyHistoryState}.
11
13
  */
12
- createInitialHistoryState: () => HistoryState;
14
+ createInitialHistoryState: (editor: LexicalEditor) => HistoryState;
15
+ /**
16
+ * Whether history is disabled or not
17
+ */
18
+ disabled: boolean;
19
+ }
20
+ export interface HistoryOutput extends DisabledToggleOutput {
21
+ getHistoryState: () => HistoryState;
13
22
  }
14
23
  /**
15
24
  * Registers necessary listeners to manage undo/redo history stack and related
16
25
  * editor commands, via the \@lexical/history module.
17
26
  */
18
- export declare const HistoryPlan: import('@etrepum/lexical-builder-core').LexicalPlan<HistoryConfig, "@etrepum/lexical-builder/History", unknown, unknown>;
27
+ export declare const HistoryPlan: import('@etrepum/lexical-builder-core').LexicalPlan<HistoryConfig, "@etrepum/lexical-builder/History", HistoryOutput, unknown>;
28
+ /**
29
+ * Registers necessary listeners to manage undo/redo history stack and related
30
+ * editor commands, via the \@lexical/history module, only if the parent editor
31
+ * has a history plugin implementation.
32
+ */
33
+ export declare const SharedHistoryPlan: import('@etrepum/lexical-builder-core').LexicalPlan<import('@etrepum/lexical-builder-core').PlanConfigBase, "@etrepum/lexical-builder/SharedHistory", unknown, import('@etrepum/lexical-builder-core').LexicalPlanDependency<import('@etrepum/lexical-builder-core').LexicalPlan<HistoryConfig, "@etrepum/lexical-builder/History", HistoryOutput, unknown>> | null | undefined>;
19
34
  //# sourceMappingURL=HistoryPlan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryPlan.d.ts","sourceRoot":"","sources":["../src/HistoryPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,yBAAyB,EAAE,MAAM,YAAY,CAAC;CAC/C;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,0HAStB,CAAC"}
1
+ {"version":3,"file":"HistoryPlan.d.ts","sourceRoot":"","sources":["../src/HistoryPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7E,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,yBAAyB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,YAAY,CAAC;IACnE;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACzD,eAAe,EAAE,MAAM,YAAY,CAAC;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,gIAkBtB,CAAC;AAQH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,kXA0B5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"LexicalBuilder.d.ts","sourceRoot":"","sources":["../src/LexicalBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,aAAa,EAOnB,MAAM,SAAS,CAAC;AAKjB,OAAO,EACL,OAAO,EAKR,MAAM,WAAW,CAAC;AAInB,+DAA+D;AAC/D,eAAO,MAAM,aAAa,eAAyC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,KAAK,EAAE,sBAAsB,EAAE,GACjC,wBAAwB,CAE1B;AAqBD,KAAK,gCAAgC,GAAG,UAAU,CAChD,OAAO,qBAAqB,CAC7B,CAAC;AACF,iBAAS,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,2GAEzD;AAED,gBAAgB;AAChB,qBAAa,cAAc;IACzB,KAAK,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACnD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAClD,mBAAmB,EAAE,GAAG,CACtB,MAAM,EACN,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC,CACjD,CAAC;IACF,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,SAAS,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;IACrD,eAAe,EAAE,MAAM,CAAC;gBAEZ,KAAK,EAAE,gCAAgC,EAAE;IAYrD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAsB,EAAE,GAAG,cAAc;IAQjE,0EAA0E;IAC1E,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc;IAoBxD,WAAW,IAAI,wBAAwB;IAwCvC,UAAU,CAAC,IAAI,SAAS,cAAc,EACpC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS;IAY5B,OAAO,CACL,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE;IAmB9C,OAAO,CAAC,GAAG,EAAE,sBAAsB;IAkDnC,cAAc,IAAI,SAAS,OAAO,CAAC,cAAc,CAAC,EAAE;IAwEpD,cAAc,CACZ,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,eAAe,GAC1B,MAAM,IAAI;IA8Bb,qBAAqB,CAAC,MAAM,EAAE,WAAW;CAqF1C"}
1
+ {"version":3,"file":"LexicalBuilder.d.ts","sourceRoot":"","sources":["../src/LexicalBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,aAAa,EAOnB,MAAM,SAAS,CAAC;AAKjB,OAAO,EACL,OAAO,EAKR,MAAM,WAAW,CAAC;AAInB,+DAA+D;AAC/D,eAAO,MAAM,aAAa,eAAyC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,KAAK,EAAE,sBAAsB,EAAE,GACjC,wBAAwB,CAE1B;AAqBD,KAAK,gCAAgC,GAAG,UAAU,CAChD,OAAO,qBAAqB,CAC7B,CAAC;AACF,iBAAS,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,2GAEzD;AAED,gBAAgB;AAChB,qBAAa,cAAc;IACzB,KAAK,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACnD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAClD,mBAAmB,EAAE,GAAG,CACtB,MAAM,EACN,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC,CACjD,CAAC;IACF,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,SAAS,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;IACrD,eAAe,EAAE,MAAM,CAAC;gBAEZ,KAAK,EAAE,gCAAgC,EAAE;IAYrD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAsB,EAAE,GAAG,cAAc;IAQjE,0EAA0E;IAC1E,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc;IAoBxD,WAAW,IAAI,wBAAwB;IAwCvC,UAAU,CAAC,IAAI,SAAS,cAAc,EACpC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS;IAY5B,OAAO,CACL,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE;IAmB9C,OAAO,CAAC,GAAG,EAAE,sBAAsB;IAkDnC,cAAc,IAAI,SAAS,OAAO,CAAC,cAAc,CAAC,EAAE;IAwEpD,cAAc,CACZ,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,eAAe,GAC1B,MAAM,IAAI;IA8Bb,qBAAqB,CAAC,MAAM,EAAE,WAAW;CAwF1C"}
@@ -0,0 +1,20 @@
1
+ export type StoreSubscriber<T> = (value: T) => void;
2
+ export interface ReadableStore<T> {
3
+ get: () => T;
4
+ subscribe: (callback: StoreSubscriber<T>) => () => void;
5
+ }
6
+ export interface WritableStore<T> extends ReadableStore<T> {
7
+ set: (value: T) => void;
8
+ }
9
+ export declare class Store<T> implements WritableStore<T>, Disposable {
10
+ __value: T;
11
+ __listeners: Map<symbol, StoreSubscriber<T>>;
12
+ __eq?: (a: T, b: T) => boolean;
13
+ constructor(value: T, eq?: (a: T, b: T) => boolean);
14
+ get(): T;
15
+ set(value: T): void;
16
+ [Symbol.dispose](): void;
17
+ dispose(): void;
18
+ subscribe(callback: StoreSubscriber<T>, skipInitialization?: boolean): () => void;
19
+ }
20
+ //# sourceMappingURL=Store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../src/Store.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AACpD,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,SAAS,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC;CACzD;AACD,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACxD,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CACzB;AAED,qBAAa,KAAK,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU;IAC3D,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;gBACnB,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO;IAKlD,GAAG;IAGH,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAQnB,CAAC,MAAM,CAAC,OAAO,CAAC;IAGhB,OAAO;IAGP,SAAS,CACP,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAC5B,kBAAkB,UAAQ,GACzB,MAAM,IAAI;CAUd"}
@@ -1,10 +1,12 @@
1
+ import { WritableStore, ReadableStore } from './Store';
2
+
1
3
  export interface DisabledToggleOptions {
2
4
  disabled?: boolean;
3
5
  register: () => () => void;
4
6
  }
5
7
  export interface DisabledToggleOutput {
6
- isDisabled: () => boolean;
7
- setDisabled: (disabled: boolean) => void;
8
+ disabled: WritableStore<boolean>;
8
9
  }
9
10
  export declare function disabledToggle(opts: DisabledToggleOptions): [DisabledToggleOutput, () => void];
11
+ export declare function registerDisabled(disabledStore: ReadableStore<boolean>, register: () => () => void): () => void;
10
12
  //# sourceMappingURL=disabledToggle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"disabledToggle.d.ts","sourceRoot":"","sources":["../src/disabledToggle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,MAAM,IAAI,CAAC;CAC5B;AACD,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AACD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,qBAAqB,GAC1B,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC,CAoBpC"}
1
+ {"version":3,"file":"disabledToggle.d.ts","sourceRoot":"","sources":["../src/disabledToggle.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,MAAM,IAAI,CAAC;CAC5B;AACD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAClC;AACD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,qBAAqB,GAC1B,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC,CAGpC;AAED,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,EACrC,QAAQ,EAAE,MAAM,MAAM,IAAI,GACzB,MAAM,IAAI,CAmBZ"}
package/dist/index.d.ts CHANGED
@@ -17,8 +17,9 @@ export { getKnownTypesAndNodes, type KnownTypesAndNodes } from './config';
17
17
  export { InitialStatePlan, type InitialStateConfig } from './InitialStatePlan';
18
18
  export { type AutoFocusConfig, AutoFocusPlan } from './AutoFocusPlan';
19
19
  export { type DragonConfig, type DragonOutput, DragonPlan } from './DragonPlan';
20
- export { type HistoryConfig, HistoryPlan } from './HistoryPlan';
20
+ export { type HistoryConfig, type HistoryOutput, HistoryPlan, SharedHistoryPlan, } from './HistoryPlan';
21
21
  export { PlainTextPlan } from './PlainTextPlan';
22
22
  export { RichTextPlan } from './RichTextPlan';
23
- export { disabledToggle, type DisabledToggleOutput, type DisabledToggleOptions, } from './disabledToggle';
23
+ export { disabledToggle, registerDisabled, type DisabledToggleOutput, type DisabledToggleOptions, } from './disabledToggle';
24
+ export { type WritableStore, type ReadableStore, type StoreSubscriber, Store, } from './Store';
24
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,KAAK,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,GACN,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import { registerDragonSupport } from "@lexical/dragon";
9
9
  import { createEmptyHistoryState, registerHistory } from "@lexical/history";
10
10
  import { registerPlainText } from "@lexical/plain-text";
11
11
  import { HeadingNode, QuoteNode, registerRichText } from "@lexical/rich-text";
12
- const PACKAGE_VERSION = "0.0.31-nightly.20240724.0";
12
+ const PACKAGE_VERSION = "0.0.32-nightly.20240725.0";
13
13
  function invariant(cond, message, ...args) {
14
14
  if (cond) {
15
15
  return;
@@ -616,6 +616,9 @@ class LexicalBuilder {
616
616
  if (plan.disableEvents !== void 0) {
617
617
  config.disableEvents = plan.disableEvents;
618
618
  }
619
+ if (plan.parentEditor !== void 0) {
620
+ config.parentEditor = plan.parentEditor;
621
+ }
619
622
  if (plan.editable !== void 0) {
620
623
  config.editable = plan.editable;
621
624
  }
@@ -734,26 +737,66 @@ const AutoFocusPlan = definePlan({
734
737
  });
735
738
  }
736
739
  });
737
- function disabledToggle(opts) {
738
- let cleanup = null;
739
- function isDisabled() {
740
- return cleanup !== null;
741
- }
742
- function setDisabled(disabled) {
743
- if (!disabled && cleanup === null) {
744
- cleanup = opts.register();
745
- } else if (disabled && cleanup !== null) {
746
- cleanup();
747
- cleanup = null;
740
+ class Store {
741
+ constructor(value, eq) {
742
+ __publicField(this, "__value");
743
+ __publicField(this, "__listeners");
744
+ __publicField(this, "__eq");
745
+ this.__value = value;
746
+ this.__listeners = /* @__PURE__ */ new Map();
747
+ this.__eq = eq;
748
+ }
749
+ get() {
750
+ return this.__value;
751
+ }
752
+ set(value) {
753
+ if (this.__eq ? !this.__eq(this.__value, value) : this.__value !== value) {
754
+ this.__value = value;
755
+ for (const cb of this.__listeners.values()) {
756
+ cb(value);
757
+ }
748
758
  }
749
759
  }
750
- setDisabled(Boolean(opts.disabled));
751
- return [
752
- { isDisabled, setDisabled },
753
- () => {
754
- setDisabled(false);
760
+ [Symbol.dispose]() {
761
+ this.dispose();
762
+ }
763
+ dispose() {
764
+ this.__listeners.clear();
765
+ }
766
+ subscribe(callback, skipInitialization = false) {
767
+ const key = Symbol("unsubscribe");
768
+ this.__listeners.set(key, callback);
769
+ if (!skipInitialization) {
770
+ callback(this.__value);
755
771
  }
756
- ];
772
+ return () => {
773
+ this.__listeners.delete(key);
774
+ };
775
+ }
776
+ }
777
+ function disabledToggle(opts) {
778
+ const disabled = new Store(Boolean(opts.disabled));
779
+ return [{ disabled }, registerDisabled(disabled, opts.register)];
780
+ }
781
+ function registerDisabled(disabledStore, register) {
782
+ let cleanup = null;
783
+ return mergeRegister(
784
+ () => {
785
+ if (cleanup) {
786
+ cleanup();
787
+ cleanup = null;
788
+ }
789
+ },
790
+ disabledStore.subscribe((isDisabled) => {
791
+ if (cleanup) {
792
+ cleanup();
793
+ cleanup = null;
794
+ }
795
+ if (!isDisabled) {
796
+ cleanup = register();
797
+ }
798
+ })
799
+ );
757
800
  }
758
801
  const DragonPlan = definePlan({
759
802
  name: "@lexical/dragon",
@@ -768,11 +811,45 @@ const DragonPlan = definePlan({
768
811
  const HistoryPlan = definePlan({
769
812
  config: safeCast({
770
813
  createInitialHistoryState: createEmptyHistoryState,
771
- delay: 300
814
+ delay: 300,
815
+ disabled: false
772
816
  }),
773
817
  name: "@etrepum/lexical-builder/History",
774
- register(editor, { delay, createInitialHistoryState }) {
775
- return registerHistory(editor, createInitialHistoryState(), delay);
818
+ register: (editor, { delay, createInitialHistoryState, disabled }) => {
819
+ const historyState = createInitialHistoryState(editor);
820
+ const [output, cleanup] = disabledToggle({
821
+ disabled,
822
+ register: () => registerHistory(editor, historyState, delay)
823
+ });
824
+ return provideOutput(
825
+ { ...output, getHistoryState: () => historyState },
826
+ cleanup
827
+ );
828
+ }
829
+ });
830
+ function getHistoryPeer(editor) {
831
+ return editor ? getPeerDependencyFromEditor(editor, HistoryPlan.name) : null;
832
+ }
833
+ const SharedHistoryPlan = definePlan({
834
+ name: "@etrepum/lexical-builder/SharedHistory",
835
+ dependencies: [configPlan(HistoryPlan, { disabled: true })],
836
+ init(editorConfig, _config, state) {
837
+ const { config } = state.getDependency(HistoryPlan);
838
+ const parentPeer = getHistoryPeer(editorConfig.parentEditor);
839
+ if (parentPeer) {
840
+ config.delay = parentPeer.config.delay;
841
+ config.createInitialHistoryState = () => parentPeer.output.getHistoryState();
842
+ }
843
+ return parentPeer;
844
+ },
845
+ register(_editor, _config, state) {
846
+ const parentPeer = state.getInitResult();
847
+ if (!parentPeer) {
848
+ return () => {
849
+ };
850
+ }
851
+ const disabled = state.getDependency(HistoryPlan).output.disabled;
852
+ return parentPeer.output.disabled.subscribe(disabled.set.bind(disabled));
776
853
  }
777
854
  });
778
855
  const PlainTextPlan = definePlan({
@@ -797,6 +874,8 @@ export {
797
874
  PACKAGE_VERSION,
798
875
  PlainTextPlan,
799
876
  RichTextPlan,
877
+ SharedHistoryPlan,
878
+ Store,
800
879
  buildEditorFromPlans,
801
880
  configPlan2 as configPlan,
802
881
  declarePeerDependency,
@@ -807,6 +886,7 @@ export {
807
886
  getPeerDependencyFromEditorOrThrow,
808
887
  getPlanDependencyFromEditor,
809
888
  provideOutput2 as provideOutput,
889
+ registerDisabled,
810
890
  safeCast2 as safeCast,
811
891
  shallowMergeConfig2 as shallowMergeConfig
812
892
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/PACKAGE_VERSION.ts","../src/shared/invariant.ts","../src/deepThemeMergeInPlace.ts","../src/PlanRep.ts","../src/InitialStatePlan.ts","../src/LexicalBuilder.ts","../src/getPlanDependencyFromEditor.ts","../src/getPeerDependencyFromEditor.ts","../src/config.ts","../src/AutoFocusPlan.ts","../src/disabledToggle.ts","../src/DragonPlan.ts","../src/HistoryPlan.ts","../src/PlainTextPlan.ts","../src/RichTextPlan.ts"],"sourcesContent":["/** The build version of this package (e.g. \"0.16.0\") */\nexport const PACKAGE_VERSION: string = import.meta.env.PACKAGE_VERSION;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n// invariant(condition, message) will refine types based on \"condition\", and\n// if \"condition\" is false will throw an error. This function is special-cased\n// in flow itself, so we can't name it anything else.\nexport default function invariant(\n cond?: boolean,\n message?: string,\n ...args: string[]\n): asserts cond {\n if (cond) {\n return;\n }\n\n throw new Error(\n args.reduce((msg, arg) => msg.replace(\"%s\", String(arg)), message || \"\"),\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n/**\n * Recursively merge the given theme configuration in-place.\n *\n * @returns If `a` and `b` are both objects (and `b` is not an Array) then\n * all keys in `b` are merged into `a` then `a` is returned.\n * Otherwise `b` is returned.\n *\n * @example\n * ```ts\n * const a = { a: \"a\", nested: { a: 1 } };\n * const b = { b: \"b\", nested: { b: 2 } };\n * const rval = deepThemeMergeInPlace(a, b);\n * expect(a).toBe(rval);\n * expect(a).toEqual({ a: \"a\", b: \"b\", nested: { a: 1, b: 2 } });\n * ```\n */\nexport function deepThemeMergeInPlace(a: unknown, b: unknown) {\n if (\n a &&\n b &&\n !Array.isArray(b) &&\n typeof a === \"object\" &&\n typeof b === \"object\"\n ) {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n for (const k in bObj) {\n aObj[k] = deepThemeMergeInPlace(aObj[k], bObj[k]);\n }\n return a;\n }\n return b;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type {\n AnyLexicalPlan,\n InitialEditorConfig,\n LexicalPlanConfig,\n LexicalPlanDependency,\n LexicalPlanInit,\n LexicalPlanOutput,\n RegisterCleanup,\n PlanInitState,\n PlanRegisterState,\n} from \"@etrepum/lexical-builder-core\";\nimport { shallowMergeConfig } from \"@etrepum/lexical-builder-core\";\nimport type { LexicalEditor } from \"lexical\";\nimport invariant from \"./shared/invariant\";\nimport type { LexicalBuilder } from \"./LexicalBuilder\";\n\nexport const PlanRepStateIds = {\n unmarked: 0,\n temporary: 1,\n permanent: 2,\n configured: 3,\n initialized: 4,\n registered: 5,\n afterInitialization: 6,\n} as const;\ninterface UnmarkedState {\n id: (typeof PlanRepStateIds)[\"unmarked\"];\n}\ninterface TemporaryState extends Omit<UnmarkedState, \"id\"> {\n id: (typeof PlanRepStateIds)[\"temporary\"];\n}\ninterface PermanentState extends Omit<TemporaryState, \"id\"> {\n id: (typeof PlanRepStateIds)[\"permanent\"];\n}\ninterface ConfiguredState<Plan extends AnyLexicalPlan>\n extends Omit<PermanentState, \"id\"> {\n id: (typeof PlanRepStateIds)[\"configured\"];\n config: LexicalPlanConfig<Plan>;\n registerState: PlanInitState;\n}\ninterface InitializedState<Plan extends AnyLexicalPlan>\n extends Omit<ConfiguredState<Plan>, \"id\" | \"registerState\"> {\n id: (typeof PlanRepStateIds)[\"initialized\"];\n initResult: LexicalPlanInit<Plan>;\n registerState: PlanRegisterState<LexicalPlanInit<Plan>>;\n}\ninterface RegisteredState<Plan extends AnyLexicalPlan>\n extends Omit<InitializedState<Plan>, \"id\"> {\n id: (typeof PlanRepStateIds)[\"registered\"];\n output: LexicalPlanOutput<Plan>;\n}\ninterface AfterInitializationState<Plan extends AnyLexicalPlan>\n extends Omit<RegisteredState<Plan>, \"id\"> {\n id: (typeof PlanRepStateIds)[\"afterInitialization\"];\n}\n\nexport type PlanRepState<Plan extends AnyLexicalPlan> =\n | UnmarkedState\n | TemporaryState\n | PermanentState\n | ConfiguredState<Plan>\n | InitializedState<Plan>\n | RegisteredState<Plan>\n | AfterInitializationState<Plan>;\n\nexport function isExactlyUnmarkedPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is UnmarkedState {\n return state.id === PlanRepStateIds.unmarked;\n}\nfunction isExactlyTemporaryPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is TemporaryState {\n return state.id === PlanRepStateIds.temporary;\n}\nexport function isExactlyPermanentPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is PermanentState {\n return state.id === PlanRepStateIds.permanent;\n}\nfunction isInitializedPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is\n | InitializedState<Plan>\n | RegisteredState<Plan>\n | AfterInitializationState<Plan> {\n return state.id >= PlanRepStateIds.initialized;\n}\nfunction isConfiguredPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is\n | ConfiguredState<Plan>\n | InitializedState<Plan>\n | RegisteredState<Plan>\n | AfterInitializationState<Plan> {\n return state.id >= PlanRepStateIds.configured;\n}\nfunction isRegisteredPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is RegisteredState<Plan> | AfterInitializationState<Plan> {\n return state.id >= PlanRepStateIds.registered;\n}\nfunction isAfterInitializationState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is AfterInitializationState<Plan> {\n return state.id >= PlanRepStateIds.afterInitialization;\n}\nexport function applyTemporaryMark<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): TemporaryState {\n invariant(\n isExactlyUnmarkedPlanRepState(state),\n \"LexicalBuilder: Can not apply a temporary mark to state\",\n );\n return Object.assign(state, { id: PlanRepStateIds.temporary });\n}\nexport function applyPermanentMark<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): PermanentState {\n invariant(\n isExactlyTemporaryPlanRepState(state),\n \"LexicalBuilder: Can not apply a permanent mark to state\",\n );\n return Object.assign(state, { id: PlanRepStateIds.permanent });\n}\nexport function applyConfiguredState<Plan extends AnyLexicalPlan>(\n state: PermanentState,\n config: LexicalPlanConfig<Plan>,\n registerState: PlanInitState,\n): ConfiguredState<Plan> {\n return Object.assign(state, {\n id: PlanRepStateIds.configured,\n config,\n registerState,\n });\n}\nexport function applyInitializedState<Plan extends AnyLexicalPlan>(\n state: ConfiguredState<Plan>,\n initResult: LexicalPlanInit<Plan>,\n registerState: PlanRegisterState<Plan>,\n): InitializedState<Plan> {\n return Object.assign(state, {\n id: PlanRepStateIds.initialized,\n initResult,\n registerState,\n });\n}\nexport function applyRegisteredState<Plan extends AnyLexicalPlan>(\n state: InitializedState<Plan>,\n cleanup?: RegisterCleanup<LexicalPlanOutput<Plan>> | undefined,\n) {\n return Object.assign(state, {\n id: PlanRepStateIds.registered,\n output: cleanup ? cleanup.output : undefined,\n });\n}\nexport function applyAfterInitializationState<Plan extends AnyLexicalPlan>(\n state: RegisteredState<Plan>,\n): AfterInitializationState<Plan> {\n return Object.assign(state, { id: PlanRepStateIds.afterInitialization });\n}\n\nconst emptySet: ReadonlySet<string> = new Set();\n\n/**\n * @internal\n */\nexport class PlanRep<Plan extends AnyLexicalPlan> {\n builder: LexicalBuilder;\n configs: Set<Partial<LexicalPlanConfig<Plan>>>;\n _dependency?: LexicalPlanDependency<Plan>;\n _output?: LexicalPlanOutput<Plan>;\n _peerNameSet?: Set<string>;\n plan: Plan;\n state: PlanRepState<Plan>;\n constructor(builder: LexicalBuilder, plan: Plan) {\n this.builder = builder;\n this.plan = plan;\n this.configs = new Set();\n this.state = { id: PlanRepStateIds.unmarked };\n }\n\n afterInitialization(editor: LexicalEditor): undefined | (() => void) {\n const state = this.state;\n invariant(\n state.id === PlanRepStateIds.registered,\n \"PlanRep: afterInitialization called in state id %s (expected %s registered)\",\n String(state.id),\n String(PlanRepStateIds.registered),\n );\n let rval: undefined | (() => void);\n if (this.plan.afterInitialization) {\n rval = this.plan.afterInitialization(\n editor,\n state.config,\n state.registerState,\n );\n }\n this.state = applyAfterInitializationState(state);\n return rval;\n }\n register(editor: LexicalEditor): undefined | (() => void) {\n const state = this.state;\n invariant(\n state.id === PlanRepStateIds.initialized,\n \"PlanRep: register called in state id %s (expected %s initialized)\",\n String(state.id),\n String(PlanRepStateIds.initialized),\n );\n let cleanup: undefined | RegisterCleanup<LexicalPlanOutput<Plan>>;\n if (this.plan.register) {\n cleanup = this.plan.register(\n editor,\n state.config,\n state.registerState,\n ) as RegisterCleanup<LexicalPlanOutput<Plan>>;\n }\n this.state = applyRegisteredState(state, cleanup);\n return cleanup;\n }\n init(editorConfig: InitialEditorConfig, signal: AbortSignal) {\n const initialState = this.state;\n invariant(\n isExactlyPermanentPlanRepState(initialState),\n \"LexicalBuilder: Can not configure from state id %s\",\n String(initialState.id),\n );\n const initState: PlanInitState = {\n signal,\n getDirectDependentNames: this.getDirectDependentNames.bind(this),\n getPeerNameSet: this.getPeerNameSet.bind(this),\n getPeer: this.getInitPeer.bind(this),\n getDependency: this.getInitDependency.bind(this),\n };\n const registerState: PlanRegisterState<Plan> = {\n ...initState,\n getPeer: this.getPeer.bind(this),\n getDependency: this.getDependency.bind(this),\n getInitResult: this.getInitResult.bind(this),\n };\n const state = applyConfiguredState(\n initialState,\n this.mergeConfigs(),\n initState,\n );\n this.state = state;\n let initResult: LexicalPlanInit<Plan> | undefined;\n if (this.plan.init) {\n initResult = this.plan.init(\n editorConfig,\n state.config,\n initState,\n ) as LexicalPlanInit<Plan>;\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- false positive\n this.state = applyInitializedState(state, initResult!, registerState);\n }\n getInitResult(): LexicalPlanInit<Plan> {\n invariant(\n this.plan.init !== undefined,\n \"PlanRep: getInitResult() called for Plan %s that does not define init\",\n this.plan.name,\n );\n const state = this.state;\n invariant(\n isInitializedPlanRepState(state),\n \"PlanRep: getInitResult() called for PlanRep in state id %s < %s (initialized)\",\n String(state.id),\n String(PlanRepStateIds.initialized),\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- any\n return state.initResult;\n }\n\n getInitPeer<PeerPlan extends AnyLexicalPlan = never>(\n name: PeerPlan[\"name\"],\n ): undefined | Omit<LexicalPlanDependency<PeerPlan>, \"output\"> {\n const rep = this.builder.planNameMap.get(name);\n return rep ? rep.getPlanInitDependency() : undefined;\n }\n\n getPlanInitDependency(): Omit<LexicalPlanDependency<Plan>, \"output\"> {\n const state = this.state;\n invariant(\n isConfiguredPlanRepState(state),\n \"LexicalPlanBuilder: getPlanInitDependency called in state id %s (expected >= %s configured)\",\n String(state.id),\n String(PlanRepStateIds.configured),\n );\n return { config: state.config };\n }\n\n getPeer<PeerPlan extends AnyLexicalPlan = never>(\n name: PeerPlan[\"name\"],\n ): undefined | LexicalPlanDependency<PeerPlan> {\n const rep = this.builder.planNameMap.get(name);\n return rep\n ? (rep.getPlanDependency() as LexicalPlanDependency<PeerPlan>)\n : undefined;\n }\n\n getInitDependency<Dependency extends AnyLexicalPlan>(\n dep: Dependency,\n ): Omit<LexicalPlanDependency<Dependency>, \"output\"> {\n const rep = this.builder.getPlanRep(dep);\n invariant(\n rep !== undefined,\n \"LexicalPlanBuilder: Plan %s missing dependency plan %s to be in registry\",\n this.plan.name,\n dep.name,\n );\n return rep.getPlanInitDependency();\n }\n\n getDependency<Dependency extends AnyLexicalPlan>(\n dep: Dependency,\n ): LexicalPlanDependency<Dependency> {\n const rep = this.builder.getPlanRep(dep);\n invariant(\n rep !== undefined,\n \"LexicalPlanBuilder: Plan %s missing dependency plan %s to be in registry\",\n this.plan.name,\n dep.name,\n );\n return rep.getPlanDependency();\n }\n\n getState(): AfterInitializationState<Plan> {\n const state = this.state;\n invariant(\n isAfterInitializationState(state),\n \"PlanRep getState called in state id %s (expected %s afterInitialization)\",\n String(state.id),\n String(PlanRepStateIds.afterInitialization),\n );\n return state;\n }\n\n getDirectDependentNames(): ReadonlySet<string> {\n return this.builder.incomingEdges.get(this.plan.name) || emptySet;\n }\n\n getPeerNameSet(): ReadonlySet<string> {\n let s = this._peerNameSet;\n if (!s) {\n s = new Set((this.plan.peerDependencies || []).map(([name]) => name));\n this._peerNameSet = s;\n }\n return s;\n }\n\n getPlanDependency(): LexicalPlanDependency<Plan> {\n if (!this._dependency) {\n const state = this.state;\n invariant(\n isRegisteredPlanRepState(state),\n \"Plan %s used as a dependency before registration\",\n this.plan.name,\n );\n this._dependency = {\n config: state.config,\n output: state.output,\n };\n }\n return this._dependency;\n }\n mergeConfigs(): LexicalPlanConfig<Plan> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- LexicalPlanConfig<Plan> is any\n let config: LexicalPlanConfig<Plan> = this.plan.config || {};\n const mergeConfig = this.plan.mergeConfig\n ? this.plan.mergeConfig.bind(this.plan)\n : shallowMergeConfig;\n for (const cfg of this.configs) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- LexicalPlanConfig<Plan> is any\n config = mergeConfig(config, cfg);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- any\n return config;\n }\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { definePlan, safeCast } from \"@etrepum/lexical-builder-core\";\nimport {\n $createParagraphNode,\n $getRoot,\n LineBreakNode,\n ParagraphNode,\n RootNode,\n TabNode,\n TextNode,\n type EditorSetOptions,\n type EditorUpdateOptions,\n} from \"lexical\";\n\nconst HISTORY_MERGE_OPTIONS = { tag: \"history-merge\" };\n\nfunction $defaultInitializer() {\n const root = $getRoot();\n if (root.isEmpty()) {\n root.append($createParagraphNode());\n }\n}\n\nexport interface InitialStateConfig {\n updateOptions: EditorUpdateOptions;\n setOptions: EditorSetOptions;\n}\n\nexport const InitialStatePlan = definePlan({\n name: \"@etrepum/lexical-builder/InitialState\",\n // These are automatically added by createEditor, we add them here so they are\n // visible during planRep.init so plans can see all known types before the\n // editor is created.\n // (excluding ArtificialNode__DO_NOT_USE because it isn't really public API\n // and shouldn't change anything)\n nodes: [RootNode, TextNode, LineBreakNode, TabNode, ParagraphNode],\n config: safeCast<InitialStateConfig>({\n updateOptions: HISTORY_MERGE_OPTIONS,\n setOptions: HISTORY_MERGE_OPTIONS,\n }),\n init({ $initialEditorState = $defaultInitializer }) {\n return $initialEditorState;\n },\n afterInitialization(editor, { updateOptions, setOptions }, state) {\n const $initialEditorState = state.getInitResult();\n switch (typeof $initialEditorState) {\n case \"function\": {\n editor.update(() => {\n $initialEditorState(editor);\n }, updateOptions);\n break;\n }\n case \"string\": {\n const parsedEditorState = editor.parseEditorState($initialEditorState);\n editor.setEditorState(parsedEditorState, setOptions);\n break;\n }\n case \"object\": {\n if ($initialEditorState) {\n editor.setEditorState($initialEditorState, setOptions);\n }\n break;\n }\n default: {\n /* noop */\n }\n }\n return () => {\n /* noop */\n };\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport type {\n AnyLexicalPlan,\n AnyLexicalPlanArgument,\n LexicalEditorWithDispose,\n InitialEditorConfig,\n LexicalPlanConfig,\n} from \"@etrepum/lexical-builder-core\";\nimport {\n type LexicalEditor,\n createEditor,\n type CreateEditorArgs,\n type EditorThemeClasses,\n type HTMLConfig,\n type KlassConstructor,\n type LexicalNode,\n} from \"lexical\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { configPlan } from \"@etrepum/lexical-builder-core\";\nimport invariant from \"./shared/invariant\";\nimport { deepThemeMergeInPlace } from \"./deepThemeMergeInPlace\";\nimport {\n PlanRep,\n applyPermanentMark,\n applyTemporaryMark,\n isExactlyPermanentPlanRepState,\n isExactlyUnmarkedPlanRepState,\n} from \"./PlanRep\";\nimport { PACKAGE_VERSION } from \"./PACKAGE_VERSION\";\nimport { InitialStatePlan } from \"./InitialStatePlan\";\n\n/** @internal Use a well-known symbol for dev tools purposes */\nexport const builderSymbol = Symbol.for(\"@etrepum/lexical-builder\");\n\n/**\n * Build a LexicalEditor by combining together one or more plans, optionally\n * overriding some of their configuration.\n *\n * @param plans - Plan arguments (plans or plans with config overrides)\n * @returns An editor handle\n *\n * @example A single root plan with multiple dependencies\n * ```ts\n * const editor = buildEditorFromPlans(\n * definePlan({\n * name: \"[root]\",\n * dependencies: [\n * RichTextPlan,\n * configPlan(EmojiPlan, { emojiBaseUrl: \"/assets/emoji\" }),\n * ],\n * register: (editor: LexicalEditor) => {\n * console.log(\"Editor Created\");\n * return () => console.log(\"Editor Disposed\");\n * },\n * }),\n * );\n * ```\n * @example A very similar minimal configuration without the register hook\n * ```ts\n * const editor = buildEditorFromPlans(\n * RichTextPlan,\n * configPlan(EmojiPlan, { emojiBaseUrl: \"/assets/emoji\" }),\n * );\n * ```\n */\nexport function buildEditorFromPlans(\n ...plans: AnyLexicalPlanArgument[]\n): LexicalEditorWithDispose {\n return LexicalBuilder.fromPlans(plans).buildEditor();\n}\n\n/** @internal */\nfunction noop() {\n /*empty*/\n}\n\n/** Throw the given Error */\nfunction defaultOnError(err: Error) {\n throw err;\n}\n\ninterface WithBuilder {\n [builderSymbol]?: LexicalBuilder | undefined;\n}\n\n/** @internal */\nfunction maybeWithBuilder(editor: LexicalEditor): LexicalEditor & WithBuilder {\n return editor;\n}\n\ntype AnyNormalizedLexicalPlanArgument = ReturnType<\n typeof normalizePlanArgument\n>;\nfunction normalizePlanArgument(arg: AnyLexicalPlanArgument) {\n return Array.isArray(arg) ? arg : configPlan(arg);\n}\n\n/** @internal */\nexport class LexicalBuilder {\n roots: readonly AnyNormalizedLexicalPlanArgument[];\n planNameMap: Map<string, PlanRep<AnyLexicalPlan>>;\n outgoingConfigEdges: Map<\n string,\n Map<string, LexicalPlanConfig<AnyLexicalPlan>[]>\n >;\n incomingEdges: Map<string, Set<string>>;\n conflicts: Map<string, string>;\n _sortedPlanReps?: readonly PlanRep<AnyLexicalPlan>[];\n PACKAGE_VERSION: string;\n\n constructor(roots: AnyNormalizedLexicalPlanArgument[]) {\n this.outgoingConfigEdges = new Map();\n this.incomingEdges = new Map();\n this.planNameMap = new Map();\n this.conflicts = new Map();\n this.PACKAGE_VERSION = PACKAGE_VERSION;\n this.roots = roots;\n for (const plan of roots) {\n this.addPlan(plan);\n }\n }\n\n static fromPlans(plans: AnyLexicalPlanArgument[]): LexicalBuilder {\n const roots = [normalizePlanArgument(InitialStatePlan)];\n for (const plan of plans) {\n roots.push(normalizePlanArgument(plan));\n }\n return new LexicalBuilder(roots);\n }\n\n /** Look up the editor that was created by this LexicalBuilder or throw */\n static fromEditor(editor: LexicalEditor): LexicalBuilder {\n const builder = maybeWithBuilder(editor)[builderSymbol];\n invariant(\n builder && typeof builder === \"object\",\n \"LexicalBuilder.fromEditor: The given editor was not created with LexicalBuilder, or has been disposed\",\n );\n // The dev tools variant of this will relax some of these invariants\n invariant(\n builder.PACKAGE_VERSION === PACKAGE_VERSION,\n \"LexicalBuilder.fromEditor: The given editor was created with LexicalBuilder %s but this version is %s. A project should have exactly one copy of LexicalBuilder\",\n builder.PACKAGE_VERSION,\n PACKAGE_VERSION,\n );\n invariant(\n builder instanceof LexicalBuilder,\n \"LexicalBuilder.fromEditor: There are multiple copies of the same version of LexicalBuilder in your project, and this editor was created with another one. Your project, or one of its dependencies, has its package.json and/or bundler configured incorrectly.\",\n );\n return builder;\n }\n\n buildEditor(): LexicalEditorWithDispose {\n const controller = new AbortController();\n const {\n $initialEditorState: _$initialEditorState,\n onError,\n ...editorConfig\n } = this.buildCreateEditorArgs(controller.signal);\n let disposeOnce = noop;\n function dispose() {\n try {\n disposeOnce();\n } finally {\n disposeOnce = noop;\n }\n }\n const editor: LexicalEditorWithDispose & WithBuilder = Object.assign(\n createEditor({\n ...editorConfig,\n ...(onError\n ? {\n onError: (err) => {\n onError(err, editor);\n },\n }\n : {}),\n }),\n { [builderSymbol]: this, dispose, [Symbol.dispose]: dispose },\n );\n disposeOnce = mergeRegister(\n () => {\n maybeWithBuilder(editor)[builderSymbol] = undefined;\n },\n () => {\n editor.setRootElement(null);\n },\n this.registerEditor(editor, controller),\n );\n return editor;\n }\n\n getPlanRep<Plan extends AnyLexicalPlan>(\n plan: Plan,\n ): PlanRep<Plan> | undefined {\n const rep = this.planNameMap.get(plan.name);\n if (rep) {\n invariant(\n rep.plan === plan,\n \"LexicalBuilder: A registered plan with name %s exists but does not match the given plan\",\n plan.name,\n );\n return rep as PlanRep<Plan>;\n }\n }\n\n addEdge(\n fromPlanName: string,\n toPlanName: string,\n configs: LexicalPlanConfig<AnyLexicalPlan>[],\n ) {\n const outgoing = this.outgoingConfigEdges.get(fromPlanName);\n if (outgoing) {\n outgoing.set(toPlanName, configs);\n } else {\n this.outgoingConfigEdges.set(\n fromPlanName,\n new Map([[toPlanName, configs]]),\n );\n }\n const incoming = this.incomingEdges.get(toPlanName);\n if (incoming) {\n incoming.add(fromPlanName);\n } else {\n this.incomingEdges.set(toPlanName, new Set([fromPlanName]));\n }\n }\n\n addPlan(arg: AnyLexicalPlanArgument) {\n invariant(\n this._sortedPlanReps === undefined,\n \"LexicalBuilder: addPlan called after finalization\",\n );\n const normalized = normalizePlanArgument(arg);\n const [plan] = normalized;\n invariant(\n typeof plan.name === \"string\",\n \"LexicalBuilder: plan name must be string, not %s\",\n typeof plan.name,\n );\n let planRep = this.planNameMap.get(plan.name);\n invariant(\n planRep === undefined || planRep.plan === plan,\n \"LexicalBuilder: Multiple plans registered with name %s, names must be unique\",\n plan.name,\n );\n if (!planRep) {\n planRep = new PlanRep(this, plan);\n this.planNameMap.set(plan.name, planRep);\n const hasConflict = this.conflicts.get(plan.name);\n if (typeof hasConflict === \"string\") {\n invariant(\n false,\n \"LexicalBuilder: plan %s conflicts with %s\",\n plan.name,\n hasConflict,\n );\n }\n for (const name of plan.conflictsWith || []) {\n invariant(\n !this.planNameMap.has(name),\n \"LexicalBuilder: plan %s conflicts with %s\",\n plan.name,\n name,\n );\n this.conflicts.set(name, plan.name);\n }\n for (const dep of plan.dependencies || []) {\n const normDep = normalizePlanArgument(dep);\n this.addEdge(plan.name, normDep[0].name, normDep.slice(1));\n this.addPlan(normDep);\n }\n for (const [depName, config] of plan.peerDependencies || []) {\n this.addEdge(plan.name, depName, config ? [config] : []);\n }\n }\n }\n\n sortedPlanReps(): readonly PlanRep<AnyLexicalPlan>[] {\n if (this._sortedPlanReps) {\n return this._sortedPlanReps;\n }\n // depth-first search based topological DAG sort\n // https://en.wikipedia.org/wiki/Topological_sorting\n const sortedPlanReps: PlanRep<AnyLexicalPlan>[] = [];\n const visit = (rep: PlanRep<AnyLexicalPlan>, fromPlanName?: string) => {\n let mark = rep.state;\n if (isExactlyPermanentPlanRepState(mark)) {\n return;\n }\n const planName = rep.plan.name;\n invariant(\n isExactlyUnmarkedPlanRepState(mark),\n \"LexicalBuilder: Circular dependency detected for Plan %s from %s\",\n planName,\n fromPlanName || \"[unknown]\",\n );\n mark = applyTemporaryMark(mark);\n rep.state = mark;\n const outgoingConfigEdges = this.outgoingConfigEdges.get(planName);\n if (outgoingConfigEdges) {\n for (const toPlanName of outgoingConfigEdges.keys()) {\n const toRep = this.planNameMap.get(toPlanName);\n // may be undefined for an optional peer dependency\n if (toRep) {\n visit(toRep, planName);\n }\n }\n }\n mark = applyPermanentMark(mark);\n rep.state = mark;\n sortedPlanReps.push(rep);\n };\n for (const rep of this.planNameMap.values()) {\n if (isExactlyUnmarkedPlanRepState(rep.state)) {\n visit(rep);\n }\n }\n for (const rep of sortedPlanReps) {\n for (const [toPlanName, configs] of this.outgoingConfigEdges.get(\n rep.plan.name,\n ) || []) {\n if (configs.length > 0) {\n const toRep = this.planNameMap.get(toPlanName);\n if (toRep) {\n for (const config of configs) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- any\n toRep.configs.add(config);\n }\n }\n }\n }\n }\n for (const [plan, ...configs] of this.roots) {\n if (configs.length > 0) {\n const toRep = this.planNameMap.get(plan.name);\n invariant(\n toRep !== undefined,\n \"LexicalBuilder: Expecting existing PlanRep for %s\",\n plan.name,\n );\n for (const config of configs) {\n toRep.configs.add(config);\n }\n }\n }\n this._sortedPlanReps = sortedPlanReps;\n return this._sortedPlanReps;\n }\n\n registerEditor(\n editor: LexicalEditor,\n controller: AbortController,\n ): () => void {\n const cleanups: (() => void)[] = [];\n const planReps = this.sortedPlanReps();\n for (const planRep of planReps) {\n const cleanup = planRep.register(editor);\n if (cleanup) {\n cleanups.push(cleanup);\n }\n }\n for (const planRep of planReps) {\n const cleanup = planRep.afterInitialization(editor);\n if (cleanup) {\n cleanups.push(cleanup);\n }\n }\n return () => {\n for (let i = cleanups.length - 1; i >= 0; i--) {\n const cleanupFun = cleanups[i];\n invariant(\n cleanupFun !== undefined,\n \"LexicalBuilder: Expecting cleanups[%s] to be defined\",\n String(i),\n );\n cleanupFun();\n }\n cleanups.length = 0;\n controller.abort();\n };\n }\n\n buildCreateEditorArgs(signal: AbortSignal) {\n const config: InitialEditorConfig = {};\n const nodes = new Set<NonNullable<CreateEditorArgs[\"nodes\"]>[number]>();\n const replacedNodes = new Map<\n KlassConstructor<typeof LexicalNode>,\n PlanRep<AnyLexicalPlan>\n >();\n const htmlExport: NonNullable<HTMLConfig[\"export\"]> = new Map();\n const htmlImport: NonNullable<HTMLConfig[\"import\"]> = {};\n const theme: EditorThemeClasses = {};\n const planReps = this.sortedPlanReps();\n for (const planRep of planReps) {\n const { plan } = planRep;\n if (plan.onError !== undefined) {\n config.onError = plan.onError;\n }\n if (plan.disableEvents !== undefined) {\n config.disableEvents = plan.disableEvents;\n }\n if (plan.editable !== undefined) {\n config.editable = plan.editable;\n }\n if (plan.namespace !== undefined) {\n config.namespace = plan.namespace;\n }\n if (plan.$initialEditorState !== undefined) {\n config.$initialEditorState = plan.$initialEditorState;\n }\n if (plan.nodes) {\n for (const node of plan.nodes) {\n if (typeof node !== \"function\") {\n const conflictPlan = replacedNodes.get(node.replace);\n if (conflictPlan) {\n invariant(\n false,\n \"LexicalBuilder: Plan %s can not register replacement for node %s because %s already did\",\n plan.name,\n node.replace.name,\n conflictPlan.plan.name,\n );\n }\n replacedNodes.set(node.replace, planRep);\n }\n nodes.add(node);\n }\n }\n if (plan.html) {\n if (plan.html.export) {\n for (const [k, v] of plan.html.export.entries()) {\n htmlExport.set(k, v);\n }\n }\n if (plan.html.import) {\n Object.assign(htmlImport, plan.html.import);\n }\n }\n if (plan.theme) {\n deepThemeMergeInPlace(theme, plan.theme);\n }\n }\n if (Object.keys(theme).length > 0) {\n config.theme = theme;\n }\n if (nodes.size) {\n config.nodes = [...nodes];\n }\n const hasImport = Object.keys(htmlImport).length > 0;\n const hasExport = htmlExport.size > 0;\n if (hasImport || hasExport) {\n config.html = {};\n if (hasImport) {\n config.html.import = htmlImport;\n }\n if (hasExport) {\n config.html.export = htmlExport;\n }\n }\n for (const planRep of planReps) {\n planRep.init(config, signal);\n }\n if (!config.onError) {\n config.onError = defaultOnError;\n }\n return config;\n }\n}\n","import type { LexicalEditor } from \"lexical\";\nimport type {\n AnyLexicalPlan,\n LexicalPlanDependency,\n} from \"@etrepum/lexical-builder-core\";\nimport { LexicalBuilder } from \"./LexicalBuilder\";\nimport invariant from \"./shared/invariant\";\n\n/**\n * Get the finalized config and output of a Plan that was used to build the editor.\n *\n * This is useful in the implementation of a LexicalNode or in other\n * situations where you have an editor reference but it's not easy to\n * pass the config or {@link PlanRegisterState} around.\n *\n * It will throw if the Editor was not built using this Plan.\n *\n * @param editor - The editor that was built using plan\n * @param plan - The concrete reference to a Plan used to build this editor\n * @returns The config and output for that Plan\n */\nexport function getPlanDependencyFromEditor<Plan extends AnyLexicalPlan>(\n editor: LexicalEditor,\n plan: Plan,\n): LexicalPlanDependency<Plan> {\n const builder = LexicalBuilder.fromEditor(editor);\n const rep = builder.getPlanRep(plan);\n invariant(\n rep !== undefined,\n \"getPlanFromEditor: Plan %s was not built when creating this editor\",\n plan.name,\n );\n return rep.getPlanDependency();\n}\n","import type { LexicalEditor } from \"lexical\";\nimport type {\n AnyLexicalPlan,\n LexicalPlanDependency,\n} from \"@etrepum/lexical-builder-core\";\nimport { LexicalBuilder } from \"./LexicalBuilder\";\nimport invariant from \"./shared/invariant\";\n\n/**\n * Get the finalized config and output of a Plan that was used to build the\n * editor by name.\n *\n * This can be used from the implementation of a LexicalNode or in other\n * situation where you have an editor reference but it's not easy to pass the\n * config around. Use this version if you do not have a concrete reference to\n * the Plan for some reason (e.g. it is an optional peer dependency, or you\n * are avoiding a circular import).\n *\n * Both the explicit Plan type and the name are required.\n *\n * @example\n * ```tsx\n * import type { EmojiPlan } from \"@etrepum/lexical-emoji-plan\";\n * getPeerDependencyFromEditor<typeof EmojiPlan>(editor, \"@etrepum/lexical-emoji-plan/Emoji\");\n * ```\n\n * @param editor - The editor that may have been built using plan\n * @param planName - The name of the Plan\n * @returns The config and output of the Plan or undefined\n */\nexport function getPeerDependencyFromEditor<\n Plan extends AnyLexicalPlan = never,\n>(\n editor: LexicalEditor,\n planName: Plan[\"name\"],\n): LexicalPlanDependency<Plan> | undefined {\n const builder = LexicalBuilder.fromEditor(editor);\n const peer = builder.planNameMap.get(planName);\n return peer\n ? (peer.getPlanDependency() as LexicalPlanDependency<Plan>)\n : undefined;\n}\n\n/**\n * Get the finalized config and output of a Plan that was used to build the\n * editor by name.\n *\n * This can be used from the implementation of a LexicalNode or in other\n * situation where you have an editor reference but it's not easy to pass the\n * config around. Use this version if you do not have a concrete reference to\n * the Plan for some reason (e.g. it is an optional peer dependency, or you\n * are avoiding a circular import).\n *\n * Both the explicit Plan type and the name are required.\n *\n * @example\n * ```tsx\n * import type { EmojiPlan } from \"./EmojiPlan\";\n * export class EmojiNode extends TextNode {\n * // other implementation details not included\n * createDOM(\n * config: EditorConfig,\n * editor?: LexicalEditor | undefined\n * ): HTMLElement {\n * const dom = super.createDOM(config, editor);\n * addClassNamesToElement(\n * dom,\n * getPeerDependencyFromEditorOrThrow<typeof EmojiPlan>(\n * editor || $getEditor(),\n * \"@etrepum/lexical-emoji-plan/Emoji\",\n * ).config.emojiClass,\n * );\n * return dom;\n * }\n * }\n * ```\n\n * @param editor - The editor that may have been built using plan\n * @param planName - The name of the Plan\n * @returns The config and output of the Plan\n */\nexport function getPeerDependencyFromEditorOrThrow<\n Plan extends AnyLexicalPlan = never,\n>(editor: LexicalEditor, planName: Plan[\"name\"]): LexicalPlanDependency<Plan> {\n const dep = getPeerDependencyFromEditor<Plan>(editor, planName);\n invariant(\n dep !== undefined,\n \"getPeerDependencyFromEditorOrThrow: Editor was not build with Plan %s\",\n planName,\n );\n return dep;\n}\n","import type { InitialEditorConfig } from \"@etrepum/lexical-builder-core\";\nimport type { KlassConstructor, LexicalNode } from \"lexical\";\n\nexport interface KnownTypesAndNodes {\n types: Set<string>;\n nodes: Set<KlassConstructor<typeof LexicalNode>>;\n}\nexport function getKnownTypesAndNodes(config: InitialEditorConfig) {\n const types: KnownTypesAndNodes[\"types\"] = new Set();\n const nodes: KnownTypesAndNodes[\"nodes\"] = new Set();\n for (const klassOrReplacement of config.nodes ?? []) {\n const klass =\n typeof klassOrReplacement === \"function\"\n ? klassOrReplacement\n : klassOrReplacement.replace;\n types.add(klass.getType());\n nodes.add(klass);\n }\n return { types, nodes };\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { definePlan, safeCast } from \"@etrepum/lexical-builder-core\";\n\nexport interface AutoFocusConfig {\n /**\n * Where to move the selection when the editor is focused and there is no\n * existing selection. Can be \"rootStart\" or \"rootEnd\" (the default).\n */\n defaultSelection?: \"rootStart\" | \"rootEnd\";\n}\n\n/**\n * A Plan to focus the LexicalEditor when the root element is set\n * (typically only when the editor is first created).\n */\nexport const AutoFocusPlan = definePlan({\n config: safeCast<AutoFocusConfig>({}),\n name: \"@etrepum/lexical-builder/AutoFocus\",\n register(editor, { defaultSelection }) {\n return editor.registerRootListener((rootElement) => {\n editor.focus(\n () => {\n // If we try and move selection to the same point with setBaseAndExtent, it won't\n // trigger a re-focus on the element. So in the case this occurs, we'll need to correct it.\n // Normally this is fine, Selection API !== Focus API, but fore the intents of the naming\n // of this plugin, which should preserve focus too.\n const activeElement = document.activeElement;\n if (\n rootElement !== null &&\n (activeElement === null || !rootElement.contains(activeElement))\n ) {\n // Note: preventScroll won't work in Webkit.\n rootElement.focus({ preventScroll: true });\n }\n },\n { defaultSelection },\n );\n });\n },\n});\n","export interface DisabledToggleOptions {\n disabled?: boolean;\n register: () => () => void;\n}\nexport interface DisabledToggleOutput {\n isDisabled: () => boolean;\n setDisabled: (disabled: boolean) => void;\n}\nexport function disabledToggle(\n opts: DisabledToggleOptions,\n): [DisabledToggleOutput, () => void] {\n let cleanup: null | (() => void) = null;\n function isDisabled(): boolean {\n return cleanup !== null;\n }\n function setDisabled(disabled: boolean): void {\n if (!disabled && cleanup === null) {\n cleanup = opts.register();\n } else if (disabled && cleanup !== null) {\n cleanup();\n cleanup = null;\n }\n }\n setDisabled(Boolean(opts.disabled));\n return [\n { isDisabled, setDisabled },\n () => {\n setDisabled(false);\n },\n ];\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { registerDragonSupport } from \"@lexical/dragon\";\nimport {\n definePlan,\n provideOutput,\n safeCast,\n} from \"@etrepum/lexical-builder-core\";\nimport { disabledToggle } from \"./disabledToggle\";\n\nexport interface DragonConfig {\n disabled: boolean;\n}\nexport interface DragonOutput {\n isDisabled: () => boolean;\n setDisabled: (disabled: boolean) => void;\n}\n\n/**\n * Add Dragon speech to text input support to the editor, via the\n * \\@lexical/dragon module.\n */\nexport const DragonPlan = definePlan({\n name: \"@lexical/dragon\",\n config: safeCast<DragonConfig>({ disabled: false }),\n register: (editor, config) =>\n provideOutput<DragonOutput>(\n ...disabledToggle({\n disabled: config.disabled,\n register: () => registerDragonSupport(editor),\n }),\n ),\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport {\n createEmptyHistoryState,\n type HistoryState,\n registerHistory,\n} from \"@lexical/history\";\nimport { definePlan, safeCast } from \"@etrepum/lexical-builder-core\";\n\nexport interface HistoryConfig {\n /**\n * The time (in milliseconds) the editor should delay generating a new history stack,\n * instead of merging the current changes with the current stack. The default is 300ms.\n */\n delay: number;\n /**\n * The initial history state, the default is {@link createEmptyHistoryState}.\n */\n createInitialHistoryState: () => HistoryState;\n}\n\n/**\n * Registers necessary listeners to manage undo/redo history stack and related\n * editor commands, via the \\@lexical/history module.\n */\nexport const HistoryPlan = definePlan({\n config: safeCast<HistoryConfig>({\n createInitialHistoryState: createEmptyHistoryState,\n delay: 300,\n }),\n name: \"@etrepum/lexical-builder/History\",\n register(editor, { delay, createInitialHistoryState }) {\n return registerHistory(editor, createInitialHistoryState(), delay);\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { registerPlainText } from \"@lexical/plain-text\";\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\nimport { DragonPlan } from \"./DragonPlan\";\n\n/**\n * A plan to register \\@lexical/plain-text behavior\n */\nexport const PlainTextPlan = definePlan({\n conflictsWith: [\"@lexical/rich-text\"],\n name: \"@lexical/plain-text\",\n dependencies: [DragonPlan],\n register: registerPlainText,\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { HeadingNode, QuoteNode, registerRichText } from \"@lexical/rich-text\";\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\nimport { DragonPlan } from \"./DragonPlan\";\n\n/**\n * A plan to register \\@lexical/rich-text behavior and nodes\n * ({@link HeadingNode}, {@link QuoteNode})\n */\nexport const RichTextPlan = definePlan({\n conflictsWith: [\"@lexical/plain-text\"],\n name: \"@lexical/rich-text\",\n nodes: [HeadingNode, QuoteNode],\n dependencies: [DragonPlan],\n register: registerRichText,\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/PACKAGE_VERSION.ts","../src/shared/invariant.ts","../src/deepThemeMergeInPlace.ts","../src/PlanRep.ts","../src/InitialStatePlan.ts","../src/LexicalBuilder.ts","../src/getPlanDependencyFromEditor.ts","../src/getPeerDependencyFromEditor.ts","../src/config.ts","../src/AutoFocusPlan.ts","../src/Store.ts","../src/disabledToggle.ts","../src/DragonPlan.ts","../src/HistoryPlan.ts","../src/PlainTextPlan.ts","../src/RichTextPlan.ts"],"sourcesContent":["/** The build version of this package (e.g. \"0.16.0\") */\nexport const PACKAGE_VERSION: string = import.meta.env.PACKAGE_VERSION;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n// invariant(condition, message) will refine types based on \"condition\", and\n// if \"condition\" is false will throw an error. This function is special-cased\n// in flow itself, so we can't name it anything else.\nexport default function invariant(\n cond?: boolean,\n message?: string,\n ...args: string[]\n): asserts cond {\n if (cond) {\n return;\n }\n\n throw new Error(\n args.reduce((msg, arg) => msg.replace(\"%s\", String(arg)), message || \"\"),\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n/**\n * Recursively merge the given theme configuration in-place.\n *\n * @returns If `a` and `b` are both objects (and `b` is not an Array) then\n * all keys in `b` are merged into `a` then `a` is returned.\n * Otherwise `b` is returned.\n *\n * @example\n * ```ts\n * const a = { a: \"a\", nested: { a: 1 } };\n * const b = { b: \"b\", nested: { b: 2 } };\n * const rval = deepThemeMergeInPlace(a, b);\n * expect(a).toBe(rval);\n * expect(a).toEqual({ a: \"a\", b: \"b\", nested: { a: 1, b: 2 } });\n * ```\n */\nexport function deepThemeMergeInPlace(a: unknown, b: unknown) {\n if (\n a &&\n b &&\n !Array.isArray(b) &&\n typeof a === \"object\" &&\n typeof b === \"object\"\n ) {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n for (const k in bObj) {\n aObj[k] = deepThemeMergeInPlace(aObj[k], bObj[k]);\n }\n return a;\n }\n return b;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type {\n AnyLexicalPlan,\n InitialEditorConfig,\n LexicalPlanConfig,\n LexicalPlanDependency,\n LexicalPlanInit,\n LexicalPlanOutput,\n RegisterCleanup,\n PlanInitState,\n PlanRegisterState,\n} from \"@etrepum/lexical-builder-core\";\nimport { shallowMergeConfig } from \"@etrepum/lexical-builder-core\";\nimport type { LexicalEditor } from \"lexical\";\nimport invariant from \"./shared/invariant\";\nimport type { LexicalBuilder } from \"./LexicalBuilder\";\n\nexport const PlanRepStateIds = {\n unmarked: 0,\n temporary: 1,\n permanent: 2,\n configured: 3,\n initialized: 4,\n registered: 5,\n afterInitialization: 6,\n} as const;\ninterface UnmarkedState {\n id: (typeof PlanRepStateIds)[\"unmarked\"];\n}\ninterface TemporaryState extends Omit<UnmarkedState, \"id\"> {\n id: (typeof PlanRepStateIds)[\"temporary\"];\n}\ninterface PermanentState extends Omit<TemporaryState, \"id\"> {\n id: (typeof PlanRepStateIds)[\"permanent\"];\n}\ninterface ConfiguredState<Plan extends AnyLexicalPlan>\n extends Omit<PermanentState, \"id\"> {\n id: (typeof PlanRepStateIds)[\"configured\"];\n config: LexicalPlanConfig<Plan>;\n registerState: PlanInitState;\n}\ninterface InitializedState<Plan extends AnyLexicalPlan>\n extends Omit<ConfiguredState<Plan>, \"id\" | \"registerState\"> {\n id: (typeof PlanRepStateIds)[\"initialized\"];\n initResult: LexicalPlanInit<Plan>;\n registerState: PlanRegisterState<LexicalPlanInit<Plan>>;\n}\ninterface RegisteredState<Plan extends AnyLexicalPlan>\n extends Omit<InitializedState<Plan>, \"id\"> {\n id: (typeof PlanRepStateIds)[\"registered\"];\n output: LexicalPlanOutput<Plan>;\n}\ninterface AfterInitializationState<Plan extends AnyLexicalPlan>\n extends Omit<RegisteredState<Plan>, \"id\"> {\n id: (typeof PlanRepStateIds)[\"afterInitialization\"];\n}\n\nexport type PlanRepState<Plan extends AnyLexicalPlan> =\n | UnmarkedState\n | TemporaryState\n | PermanentState\n | ConfiguredState<Plan>\n | InitializedState<Plan>\n | RegisteredState<Plan>\n | AfterInitializationState<Plan>;\n\nexport function isExactlyUnmarkedPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is UnmarkedState {\n return state.id === PlanRepStateIds.unmarked;\n}\nfunction isExactlyTemporaryPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is TemporaryState {\n return state.id === PlanRepStateIds.temporary;\n}\nexport function isExactlyPermanentPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is PermanentState {\n return state.id === PlanRepStateIds.permanent;\n}\nfunction isInitializedPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is\n | InitializedState<Plan>\n | RegisteredState<Plan>\n | AfterInitializationState<Plan> {\n return state.id >= PlanRepStateIds.initialized;\n}\nfunction isConfiguredPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is\n | ConfiguredState<Plan>\n | InitializedState<Plan>\n | RegisteredState<Plan>\n | AfterInitializationState<Plan> {\n return state.id >= PlanRepStateIds.configured;\n}\nfunction isRegisteredPlanRepState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is RegisteredState<Plan> | AfterInitializationState<Plan> {\n return state.id >= PlanRepStateIds.registered;\n}\nfunction isAfterInitializationState<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): state is AfterInitializationState<Plan> {\n return state.id >= PlanRepStateIds.afterInitialization;\n}\nexport function applyTemporaryMark<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): TemporaryState {\n invariant(\n isExactlyUnmarkedPlanRepState(state),\n \"LexicalBuilder: Can not apply a temporary mark to state\",\n );\n return Object.assign(state, { id: PlanRepStateIds.temporary });\n}\nexport function applyPermanentMark<Plan extends AnyLexicalPlan>(\n state: PlanRepState<Plan>,\n): PermanentState {\n invariant(\n isExactlyTemporaryPlanRepState(state),\n \"LexicalBuilder: Can not apply a permanent mark to state\",\n );\n return Object.assign(state, { id: PlanRepStateIds.permanent });\n}\nexport function applyConfiguredState<Plan extends AnyLexicalPlan>(\n state: PermanentState,\n config: LexicalPlanConfig<Plan>,\n registerState: PlanInitState,\n): ConfiguredState<Plan> {\n return Object.assign(state, {\n id: PlanRepStateIds.configured,\n config,\n registerState,\n });\n}\nexport function applyInitializedState<Plan extends AnyLexicalPlan>(\n state: ConfiguredState<Plan>,\n initResult: LexicalPlanInit<Plan>,\n registerState: PlanRegisterState<Plan>,\n): InitializedState<Plan> {\n return Object.assign(state, {\n id: PlanRepStateIds.initialized,\n initResult,\n registerState,\n });\n}\nexport function applyRegisteredState<Plan extends AnyLexicalPlan>(\n state: InitializedState<Plan>,\n cleanup?: RegisterCleanup<LexicalPlanOutput<Plan>> | undefined,\n) {\n return Object.assign(state, {\n id: PlanRepStateIds.registered,\n output: cleanup ? cleanup.output : undefined,\n });\n}\nexport function applyAfterInitializationState<Plan extends AnyLexicalPlan>(\n state: RegisteredState<Plan>,\n): AfterInitializationState<Plan> {\n return Object.assign(state, { id: PlanRepStateIds.afterInitialization });\n}\n\nconst emptySet: ReadonlySet<string> = new Set();\n\n/**\n * @internal\n */\nexport class PlanRep<Plan extends AnyLexicalPlan> {\n builder: LexicalBuilder;\n configs: Set<Partial<LexicalPlanConfig<Plan>>>;\n _dependency?: LexicalPlanDependency<Plan>;\n _output?: LexicalPlanOutput<Plan>;\n _peerNameSet?: Set<string>;\n plan: Plan;\n state: PlanRepState<Plan>;\n constructor(builder: LexicalBuilder, plan: Plan) {\n this.builder = builder;\n this.plan = plan;\n this.configs = new Set();\n this.state = { id: PlanRepStateIds.unmarked };\n }\n\n afterInitialization(editor: LexicalEditor): undefined | (() => void) {\n const state = this.state;\n invariant(\n state.id === PlanRepStateIds.registered,\n \"PlanRep: afterInitialization called in state id %s (expected %s registered)\",\n String(state.id),\n String(PlanRepStateIds.registered),\n );\n let rval: undefined | (() => void);\n if (this.plan.afterInitialization) {\n rval = this.plan.afterInitialization(\n editor,\n state.config,\n state.registerState,\n );\n }\n this.state = applyAfterInitializationState(state);\n return rval;\n }\n register(editor: LexicalEditor): undefined | (() => void) {\n const state = this.state;\n invariant(\n state.id === PlanRepStateIds.initialized,\n \"PlanRep: register called in state id %s (expected %s initialized)\",\n String(state.id),\n String(PlanRepStateIds.initialized),\n );\n let cleanup: undefined | RegisterCleanup<LexicalPlanOutput<Plan>>;\n if (this.plan.register) {\n cleanup = this.plan.register(\n editor,\n state.config,\n state.registerState,\n ) as RegisterCleanup<LexicalPlanOutput<Plan>>;\n }\n this.state = applyRegisteredState(state, cleanup);\n return cleanup;\n }\n init(editorConfig: InitialEditorConfig, signal: AbortSignal) {\n const initialState = this.state;\n invariant(\n isExactlyPermanentPlanRepState(initialState),\n \"LexicalBuilder: Can not configure from state id %s\",\n String(initialState.id),\n );\n const initState: PlanInitState = {\n signal,\n getDirectDependentNames: this.getDirectDependentNames.bind(this),\n getPeerNameSet: this.getPeerNameSet.bind(this),\n getPeer: this.getInitPeer.bind(this),\n getDependency: this.getInitDependency.bind(this),\n };\n const registerState: PlanRegisterState<Plan> = {\n ...initState,\n getPeer: this.getPeer.bind(this),\n getDependency: this.getDependency.bind(this),\n getInitResult: this.getInitResult.bind(this),\n };\n const state = applyConfiguredState(\n initialState,\n this.mergeConfigs(),\n initState,\n );\n this.state = state;\n let initResult: LexicalPlanInit<Plan> | undefined;\n if (this.plan.init) {\n initResult = this.plan.init(\n editorConfig,\n state.config,\n initState,\n ) as LexicalPlanInit<Plan>;\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- false positive\n this.state = applyInitializedState(state, initResult!, registerState);\n }\n getInitResult(): LexicalPlanInit<Plan> {\n invariant(\n this.plan.init !== undefined,\n \"PlanRep: getInitResult() called for Plan %s that does not define init\",\n this.plan.name,\n );\n const state = this.state;\n invariant(\n isInitializedPlanRepState(state),\n \"PlanRep: getInitResult() called for PlanRep in state id %s < %s (initialized)\",\n String(state.id),\n String(PlanRepStateIds.initialized),\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- any\n return state.initResult;\n }\n\n getInitPeer<PeerPlan extends AnyLexicalPlan = never>(\n name: PeerPlan[\"name\"],\n ): undefined | Omit<LexicalPlanDependency<PeerPlan>, \"output\"> {\n const rep = this.builder.planNameMap.get(name);\n return rep ? rep.getPlanInitDependency() : undefined;\n }\n\n getPlanInitDependency(): Omit<LexicalPlanDependency<Plan>, \"output\"> {\n const state = this.state;\n invariant(\n isConfiguredPlanRepState(state),\n \"LexicalPlanBuilder: getPlanInitDependency called in state id %s (expected >= %s configured)\",\n String(state.id),\n String(PlanRepStateIds.configured),\n );\n return { config: state.config };\n }\n\n getPeer<PeerPlan extends AnyLexicalPlan = never>(\n name: PeerPlan[\"name\"],\n ): undefined | LexicalPlanDependency<PeerPlan> {\n const rep = this.builder.planNameMap.get(name);\n return rep\n ? (rep.getPlanDependency() as LexicalPlanDependency<PeerPlan>)\n : undefined;\n }\n\n getInitDependency<Dependency extends AnyLexicalPlan>(\n dep: Dependency,\n ): Omit<LexicalPlanDependency<Dependency>, \"output\"> {\n const rep = this.builder.getPlanRep(dep);\n invariant(\n rep !== undefined,\n \"LexicalPlanBuilder: Plan %s missing dependency plan %s to be in registry\",\n this.plan.name,\n dep.name,\n );\n return rep.getPlanInitDependency();\n }\n\n getDependency<Dependency extends AnyLexicalPlan>(\n dep: Dependency,\n ): LexicalPlanDependency<Dependency> {\n const rep = this.builder.getPlanRep(dep);\n invariant(\n rep !== undefined,\n \"LexicalPlanBuilder: Plan %s missing dependency plan %s to be in registry\",\n this.plan.name,\n dep.name,\n );\n return rep.getPlanDependency();\n }\n\n getState(): AfterInitializationState<Plan> {\n const state = this.state;\n invariant(\n isAfterInitializationState(state),\n \"PlanRep getState called in state id %s (expected %s afterInitialization)\",\n String(state.id),\n String(PlanRepStateIds.afterInitialization),\n );\n return state;\n }\n\n getDirectDependentNames(): ReadonlySet<string> {\n return this.builder.incomingEdges.get(this.plan.name) || emptySet;\n }\n\n getPeerNameSet(): ReadonlySet<string> {\n let s = this._peerNameSet;\n if (!s) {\n s = new Set((this.plan.peerDependencies || []).map(([name]) => name));\n this._peerNameSet = s;\n }\n return s;\n }\n\n getPlanDependency(): LexicalPlanDependency<Plan> {\n if (!this._dependency) {\n const state = this.state;\n invariant(\n isRegisteredPlanRepState(state),\n \"Plan %s used as a dependency before registration\",\n this.plan.name,\n );\n this._dependency = {\n config: state.config,\n output: state.output,\n };\n }\n return this._dependency;\n }\n mergeConfigs(): LexicalPlanConfig<Plan> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- LexicalPlanConfig<Plan> is any\n let config: LexicalPlanConfig<Plan> = this.plan.config || {};\n const mergeConfig = this.plan.mergeConfig\n ? this.plan.mergeConfig.bind(this.plan)\n : shallowMergeConfig;\n for (const cfg of this.configs) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- LexicalPlanConfig<Plan> is any\n config = mergeConfig(config, cfg);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- any\n return config;\n }\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { definePlan, safeCast } from \"@etrepum/lexical-builder-core\";\nimport {\n $createParagraphNode,\n $getRoot,\n LineBreakNode,\n ParagraphNode,\n RootNode,\n TabNode,\n TextNode,\n type EditorSetOptions,\n type EditorUpdateOptions,\n} from \"lexical\";\n\nconst HISTORY_MERGE_OPTIONS = { tag: \"history-merge\" };\n\nfunction $defaultInitializer() {\n const root = $getRoot();\n if (root.isEmpty()) {\n root.append($createParagraphNode());\n }\n}\n\nexport interface InitialStateConfig {\n updateOptions: EditorUpdateOptions;\n setOptions: EditorSetOptions;\n}\n\nexport const InitialStatePlan = definePlan({\n name: \"@etrepum/lexical-builder/InitialState\",\n // These are automatically added by createEditor, we add them here so they are\n // visible during planRep.init so plans can see all known types before the\n // editor is created.\n // (excluding ArtificialNode__DO_NOT_USE because it isn't really public API\n // and shouldn't change anything)\n nodes: [RootNode, TextNode, LineBreakNode, TabNode, ParagraphNode],\n config: safeCast<InitialStateConfig>({\n updateOptions: HISTORY_MERGE_OPTIONS,\n setOptions: HISTORY_MERGE_OPTIONS,\n }),\n init({ $initialEditorState = $defaultInitializer }) {\n return $initialEditorState;\n },\n afterInitialization(editor, { updateOptions, setOptions }, state) {\n const $initialEditorState = state.getInitResult();\n switch (typeof $initialEditorState) {\n case \"function\": {\n editor.update(() => {\n $initialEditorState(editor);\n }, updateOptions);\n break;\n }\n case \"string\": {\n const parsedEditorState = editor.parseEditorState($initialEditorState);\n editor.setEditorState(parsedEditorState, setOptions);\n break;\n }\n case \"object\": {\n if ($initialEditorState) {\n editor.setEditorState($initialEditorState, setOptions);\n }\n break;\n }\n default: {\n /* noop */\n }\n }\n return () => {\n /* noop */\n };\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport type {\n AnyLexicalPlan,\n AnyLexicalPlanArgument,\n LexicalEditorWithDispose,\n InitialEditorConfig,\n LexicalPlanConfig,\n} from \"@etrepum/lexical-builder-core\";\nimport {\n type LexicalEditor,\n createEditor,\n type CreateEditorArgs,\n type EditorThemeClasses,\n type HTMLConfig,\n type KlassConstructor,\n type LexicalNode,\n} from \"lexical\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { configPlan } from \"@etrepum/lexical-builder-core\";\nimport invariant from \"./shared/invariant\";\nimport { deepThemeMergeInPlace } from \"./deepThemeMergeInPlace\";\nimport {\n PlanRep,\n applyPermanentMark,\n applyTemporaryMark,\n isExactlyPermanentPlanRepState,\n isExactlyUnmarkedPlanRepState,\n} from \"./PlanRep\";\nimport { PACKAGE_VERSION } from \"./PACKAGE_VERSION\";\nimport { InitialStatePlan } from \"./InitialStatePlan\";\n\n/** @internal Use a well-known symbol for dev tools purposes */\nexport const builderSymbol = Symbol.for(\"@etrepum/lexical-builder\");\n\n/**\n * Build a LexicalEditor by combining together one or more plans, optionally\n * overriding some of their configuration.\n *\n * @param plans - Plan arguments (plans or plans with config overrides)\n * @returns An editor handle\n *\n * @example A single root plan with multiple dependencies\n * ```ts\n * const editor = buildEditorFromPlans(\n * definePlan({\n * name: \"[root]\",\n * dependencies: [\n * RichTextPlan,\n * configPlan(EmojiPlan, { emojiBaseUrl: \"/assets/emoji\" }),\n * ],\n * register: (editor: LexicalEditor) => {\n * console.log(\"Editor Created\");\n * return () => console.log(\"Editor Disposed\");\n * },\n * }),\n * );\n * ```\n * @example A very similar minimal configuration without the register hook\n * ```ts\n * const editor = buildEditorFromPlans(\n * RichTextPlan,\n * configPlan(EmojiPlan, { emojiBaseUrl: \"/assets/emoji\" }),\n * );\n * ```\n */\nexport function buildEditorFromPlans(\n ...plans: AnyLexicalPlanArgument[]\n): LexicalEditorWithDispose {\n return LexicalBuilder.fromPlans(plans).buildEditor();\n}\n\n/** @internal */\nfunction noop() {\n /*empty*/\n}\n\n/** Throw the given Error */\nfunction defaultOnError(err: Error) {\n throw err;\n}\n\ninterface WithBuilder {\n [builderSymbol]?: LexicalBuilder | undefined;\n}\n\n/** @internal */\nfunction maybeWithBuilder(editor: LexicalEditor): LexicalEditor & WithBuilder {\n return editor;\n}\n\ntype AnyNormalizedLexicalPlanArgument = ReturnType<\n typeof normalizePlanArgument\n>;\nfunction normalizePlanArgument(arg: AnyLexicalPlanArgument) {\n return Array.isArray(arg) ? arg : configPlan(arg);\n}\n\n/** @internal */\nexport class LexicalBuilder {\n roots: readonly AnyNormalizedLexicalPlanArgument[];\n planNameMap: Map<string, PlanRep<AnyLexicalPlan>>;\n outgoingConfigEdges: Map<\n string,\n Map<string, LexicalPlanConfig<AnyLexicalPlan>[]>\n >;\n incomingEdges: Map<string, Set<string>>;\n conflicts: Map<string, string>;\n _sortedPlanReps?: readonly PlanRep<AnyLexicalPlan>[];\n PACKAGE_VERSION: string;\n\n constructor(roots: AnyNormalizedLexicalPlanArgument[]) {\n this.outgoingConfigEdges = new Map();\n this.incomingEdges = new Map();\n this.planNameMap = new Map();\n this.conflicts = new Map();\n this.PACKAGE_VERSION = PACKAGE_VERSION;\n this.roots = roots;\n for (const plan of roots) {\n this.addPlan(plan);\n }\n }\n\n static fromPlans(plans: AnyLexicalPlanArgument[]): LexicalBuilder {\n const roots = [normalizePlanArgument(InitialStatePlan)];\n for (const plan of plans) {\n roots.push(normalizePlanArgument(plan));\n }\n return new LexicalBuilder(roots);\n }\n\n /** Look up the editor that was created by this LexicalBuilder or throw */\n static fromEditor(editor: LexicalEditor): LexicalBuilder {\n const builder = maybeWithBuilder(editor)[builderSymbol];\n invariant(\n builder && typeof builder === \"object\",\n \"LexicalBuilder.fromEditor: The given editor was not created with LexicalBuilder, or has been disposed\",\n );\n // The dev tools variant of this will relax some of these invariants\n invariant(\n builder.PACKAGE_VERSION === PACKAGE_VERSION,\n \"LexicalBuilder.fromEditor: The given editor was created with LexicalBuilder %s but this version is %s. A project should have exactly one copy of LexicalBuilder\",\n builder.PACKAGE_VERSION,\n PACKAGE_VERSION,\n );\n invariant(\n builder instanceof LexicalBuilder,\n \"LexicalBuilder.fromEditor: There are multiple copies of the same version of LexicalBuilder in your project, and this editor was created with another one. Your project, or one of its dependencies, has its package.json and/or bundler configured incorrectly.\",\n );\n return builder;\n }\n\n buildEditor(): LexicalEditorWithDispose {\n const controller = new AbortController();\n const {\n $initialEditorState: _$initialEditorState,\n onError,\n ...editorConfig\n } = this.buildCreateEditorArgs(controller.signal);\n let disposeOnce = noop;\n function dispose() {\n try {\n disposeOnce();\n } finally {\n disposeOnce = noop;\n }\n }\n const editor: LexicalEditorWithDispose & WithBuilder = Object.assign(\n createEditor({\n ...editorConfig,\n ...(onError\n ? {\n onError: (err) => {\n onError(err, editor);\n },\n }\n : {}),\n }),\n { [builderSymbol]: this, dispose, [Symbol.dispose]: dispose },\n );\n disposeOnce = mergeRegister(\n () => {\n maybeWithBuilder(editor)[builderSymbol] = undefined;\n },\n () => {\n editor.setRootElement(null);\n },\n this.registerEditor(editor, controller),\n );\n return editor;\n }\n\n getPlanRep<Plan extends AnyLexicalPlan>(\n plan: Plan,\n ): PlanRep<Plan> | undefined {\n const rep = this.planNameMap.get(plan.name);\n if (rep) {\n invariant(\n rep.plan === plan,\n \"LexicalBuilder: A registered plan with name %s exists but does not match the given plan\",\n plan.name,\n );\n return rep as PlanRep<Plan>;\n }\n }\n\n addEdge(\n fromPlanName: string,\n toPlanName: string,\n configs: LexicalPlanConfig<AnyLexicalPlan>[],\n ) {\n const outgoing = this.outgoingConfigEdges.get(fromPlanName);\n if (outgoing) {\n outgoing.set(toPlanName, configs);\n } else {\n this.outgoingConfigEdges.set(\n fromPlanName,\n new Map([[toPlanName, configs]]),\n );\n }\n const incoming = this.incomingEdges.get(toPlanName);\n if (incoming) {\n incoming.add(fromPlanName);\n } else {\n this.incomingEdges.set(toPlanName, new Set([fromPlanName]));\n }\n }\n\n addPlan(arg: AnyLexicalPlanArgument) {\n invariant(\n this._sortedPlanReps === undefined,\n \"LexicalBuilder: addPlan called after finalization\",\n );\n const normalized = normalizePlanArgument(arg);\n const [plan] = normalized;\n invariant(\n typeof plan.name === \"string\",\n \"LexicalBuilder: plan name must be string, not %s\",\n typeof plan.name,\n );\n let planRep = this.planNameMap.get(plan.name);\n invariant(\n planRep === undefined || planRep.plan === plan,\n \"LexicalBuilder: Multiple plans registered with name %s, names must be unique\",\n plan.name,\n );\n if (!planRep) {\n planRep = new PlanRep(this, plan);\n this.planNameMap.set(plan.name, planRep);\n const hasConflict = this.conflicts.get(plan.name);\n if (typeof hasConflict === \"string\") {\n invariant(\n false,\n \"LexicalBuilder: plan %s conflicts with %s\",\n plan.name,\n hasConflict,\n );\n }\n for (const name of plan.conflictsWith || []) {\n invariant(\n !this.planNameMap.has(name),\n \"LexicalBuilder: plan %s conflicts with %s\",\n plan.name,\n name,\n );\n this.conflicts.set(name, plan.name);\n }\n for (const dep of plan.dependencies || []) {\n const normDep = normalizePlanArgument(dep);\n this.addEdge(plan.name, normDep[0].name, normDep.slice(1));\n this.addPlan(normDep);\n }\n for (const [depName, config] of plan.peerDependencies || []) {\n this.addEdge(plan.name, depName, config ? [config] : []);\n }\n }\n }\n\n sortedPlanReps(): readonly PlanRep<AnyLexicalPlan>[] {\n if (this._sortedPlanReps) {\n return this._sortedPlanReps;\n }\n // depth-first search based topological DAG sort\n // https://en.wikipedia.org/wiki/Topological_sorting\n const sortedPlanReps: PlanRep<AnyLexicalPlan>[] = [];\n const visit = (rep: PlanRep<AnyLexicalPlan>, fromPlanName?: string) => {\n let mark = rep.state;\n if (isExactlyPermanentPlanRepState(mark)) {\n return;\n }\n const planName = rep.plan.name;\n invariant(\n isExactlyUnmarkedPlanRepState(mark),\n \"LexicalBuilder: Circular dependency detected for Plan %s from %s\",\n planName,\n fromPlanName || \"[unknown]\",\n );\n mark = applyTemporaryMark(mark);\n rep.state = mark;\n const outgoingConfigEdges = this.outgoingConfigEdges.get(planName);\n if (outgoingConfigEdges) {\n for (const toPlanName of outgoingConfigEdges.keys()) {\n const toRep = this.planNameMap.get(toPlanName);\n // may be undefined for an optional peer dependency\n if (toRep) {\n visit(toRep, planName);\n }\n }\n }\n mark = applyPermanentMark(mark);\n rep.state = mark;\n sortedPlanReps.push(rep);\n };\n for (const rep of this.planNameMap.values()) {\n if (isExactlyUnmarkedPlanRepState(rep.state)) {\n visit(rep);\n }\n }\n for (const rep of sortedPlanReps) {\n for (const [toPlanName, configs] of this.outgoingConfigEdges.get(\n rep.plan.name,\n ) || []) {\n if (configs.length > 0) {\n const toRep = this.planNameMap.get(toPlanName);\n if (toRep) {\n for (const config of configs) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- any\n toRep.configs.add(config);\n }\n }\n }\n }\n }\n for (const [plan, ...configs] of this.roots) {\n if (configs.length > 0) {\n const toRep = this.planNameMap.get(plan.name);\n invariant(\n toRep !== undefined,\n \"LexicalBuilder: Expecting existing PlanRep for %s\",\n plan.name,\n );\n for (const config of configs) {\n toRep.configs.add(config);\n }\n }\n }\n this._sortedPlanReps = sortedPlanReps;\n return this._sortedPlanReps;\n }\n\n registerEditor(\n editor: LexicalEditor,\n controller: AbortController,\n ): () => void {\n const cleanups: (() => void)[] = [];\n const planReps = this.sortedPlanReps();\n for (const planRep of planReps) {\n const cleanup = planRep.register(editor);\n if (cleanup) {\n cleanups.push(cleanup);\n }\n }\n for (const planRep of planReps) {\n const cleanup = planRep.afterInitialization(editor);\n if (cleanup) {\n cleanups.push(cleanup);\n }\n }\n return () => {\n for (let i = cleanups.length - 1; i >= 0; i--) {\n const cleanupFun = cleanups[i];\n invariant(\n cleanupFun !== undefined,\n \"LexicalBuilder: Expecting cleanups[%s] to be defined\",\n String(i),\n );\n cleanupFun();\n }\n cleanups.length = 0;\n controller.abort();\n };\n }\n\n buildCreateEditorArgs(signal: AbortSignal) {\n const config: InitialEditorConfig = {};\n const nodes = new Set<NonNullable<CreateEditorArgs[\"nodes\"]>[number]>();\n const replacedNodes = new Map<\n KlassConstructor<typeof LexicalNode>,\n PlanRep<AnyLexicalPlan>\n >();\n const htmlExport: NonNullable<HTMLConfig[\"export\"]> = new Map();\n const htmlImport: NonNullable<HTMLConfig[\"import\"]> = {};\n const theme: EditorThemeClasses = {};\n const planReps = this.sortedPlanReps();\n for (const planRep of planReps) {\n const { plan } = planRep;\n if (plan.onError !== undefined) {\n config.onError = plan.onError;\n }\n if (plan.disableEvents !== undefined) {\n config.disableEvents = plan.disableEvents;\n }\n if (plan.parentEditor !== undefined) {\n config.parentEditor = plan.parentEditor;\n }\n if (plan.editable !== undefined) {\n config.editable = plan.editable;\n }\n if (plan.namespace !== undefined) {\n config.namespace = plan.namespace;\n }\n if (plan.$initialEditorState !== undefined) {\n config.$initialEditorState = plan.$initialEditorState;\n }\n if (plan.nodes) {\n for (const node of plan.nodes) {\n if (typeof node !== \"function\") {\n const conflictPlan = replacedNodes.get(node.replace);\n if (conflictPlan) {\n invariant(\n false,\n \"LexicalBuilder: Plan %s can not register replacement for node %s because %s already did\",\n plan.name,\n node.replace.name,\n conflictPlan.plan.name,\n );\n }\n replacedNodes.set(node.replace, planRep);\n }\n nodes.add(node);\n }\n }\n if (plan.html) {\n if (plan.html.export) {\n for (const [k, v] of plan.html.export.entries()) {\n htmlExport.set(k, v);\n }\n }\n if (plan.html.import) {\n Object.assign(htmlImport, plan.html.import);\n }\n }\n if (plan.theme) {\n deepThemeMergeInPlace(theme, plan.theme);\n }\n }\n if (Object.keys(theme).length > 0) {\n config.theme = theme;\n }\n if (nodes.size) {\n config.nodes = [...nodes];\n }\n const hasImport = Object.keys(htmlImport).length > 0;\n const hasExport = htmlExport.size > 0;\n if (hasImport || hasExport) {\n config.html = {};\n if (hasImport) {\n config.html.import = htmlImport;\n }\n if (hasExport) {\n config.html.export = htmlExport;\n }\n }\n for (const planRep of planReps) {\n planRep.init(config, signal);\n }\n if (!config.onError) {\n config.onError = defaultOnError;\n }\n return config;\n }\n}\n","import type { LexicalEditor } from \"lexical\";\nimport type {\n AnyLexicalPlan,\n LexicalPlanDependency,\n} from \"@etrepum/lexical-builder-core\";\nimport { LexicalBuilder } from \"./LexicalBuilder\";\nimport invariant from \"./shared/invariant\";\n\n/**\n * Get the finalized config and output of a Plan that was used to build the editor.\n *\n * This is useful in the implementation of a LexicalNode or in other\n * situations where you have an editor reference but it's not easy to\n * pass the config or {@link PlanRegisterState} around.\n *\n * It will throw if the Editor was not built using this Plan.\n *\n * @param editor - The editor that was built using plan\n * @param plan - The concrete reference to a Plan used to build this editor\n * @returns The config and output for that Plan\n */\nexport function getPlanDependencyFromEditor<Plan extends AnyLexicalPlan>(\n editor: LexicalEditor,\n plan: Plan,\n): LexicalPlanDependency<Plan> {\n const builder = LexicalBuilder.fromEditor(editor);\n const rep = builder.getPlanRep(plan);\n invariant(\n rep !== undefined,\n \"getPlanFromEditor: Plan %s was not built when creating this editor\",\n plan.name,\n );\n return rep.getPlanDependency();\n}\n","import type { LexicalEditor } from \"lexical\";\nimport type {\n AnyLexicalPlan,\n LexicalPlanDependency,\n} from \"@etrepum/lexical-builder-core\";\nimport { LexicalBuilder } from \"./LexicalBuilder\";\nimport invariant from \"./shared/invariant\";\n\n/**\n * Get the finalized config and output of a Plan that was used to build the\n * editor by name.\n *\n * This can be used from the implementation of a LexicalNode or in other\n * situation where you have an editor reference but it's not easy to pass the\n * config around. Use this version if you do not have a concrete reference to\n * the Plan for some reason (e.g. it is an optional peer dependency, or you\n * are avoiding a circular import).\n *\n * Both the explicit Plan type and the name are required.\n *\n * @example\n * ```tsx\n * import type { EmojiPlan } from \"@etrepum/lexical-emoji-plan\";\n * getPeerDependencyFromEditor<typeof EmojiPlan>(editor, \"@etrepum/lexical-emoji-plan/Emoji\");\n * ```\n\n * @param editor - The editor that may have been built using plan\n * @param planName - The name of the Plan\n * @returns The config and output of the Plan or undefined\n */\nexport function getPeerDependencyFromEditor<\n Plan extends AnyLexicalPlan = never,\n>(\n editor: LexicalEditor,\n planName: Plan[\"name\"],\n): LexicalPlanDependency<Plan> | undefined {\n const builder = LexicalBuilder.fromEditor(editor);\n const peer = builder.planNameMap.get(planName);\n return peer\n ? (peer.getPlanDependency() as LexicalPlanDependency<Plan>)\n : undefined;\n}\n\n/**\n * Get the finalized config and output of a Plan that was used to build the\n * editor by name.\n *\n * This can be used from the implementation of a LexicalNode or in other\n * situation where you have an editor reference but it's not easy to pass the\n * config around. Use this version if you do not have a concrete reference to\n * the Plan for some reason (e.g. it is an optional peer dependency, or you\n * are avoiding a circular import).\n *\n * Both the explicit Plan type and the name are required.\n *\n * @example\n * ```tsx\n * import type { EmojiPlan } from \"./EmojiPlan\";\n * export class EmojiNode extends TextNode {\n * // other implementation details not included\n * createDOM(\n * config: EditorConfig,\n * editor?: LexicalEditor | undefined\n * ): HTMLElement {\n * const dom = super.createDOM(config, editor);\n * addClassNamesToElement(\n * dom,\n * getPeerDependencyFromEditorOrThrow<typeof EmojiPlan>(\n * editor || $getEditor(),\n * \"@etrepum/lexical-emoji-plan/Emoji\",\n * ).config.emojiClass,\n * );\n * return dom;\n * }\n * }\n * ```\n\n * @param editor - The editor that may have been built using plan\n * @param planName - The name of the Plan\n * @returns The config and output of the Plan\n */\nexport function getPeerDependencyFromEditorOrThrow<\n Plan extends AnyLexicalPlan = never,\n>(editor: LexicalEditor, planName: Plan[\"name\"]): LexicalPlanDependency<Plan> {\n const dep = getPeerDependencyFromEditor<Plan>(editor, planName);\n invariant(\n dep !== undefined,\n \"getPeerDependencyFromEditorOrThrow: Editor was not build with Plan %s\",\n planName,\n );\n return dep;\n}\n","import type { InitialEditorConfig } from \"@etrepum/lexical-builder-core\";\nimport type { KlassConstructor, LexicalNode } from \"lexical\";\n\nexport interface KnownTypesAndNodes {\n types: Set<string>;\n nodes: Set<KlassConstructor<typeof LexicalNode>>;\n}\nexport function getKnownTypesAndNodes(config: InitialEditorConfig) {\n const types: KnownTypesAndNodes[\"types\"] = new Set();\n const nodes: KnownTypesAndNodes[\"nodes\"] = new Set();\n for (const klassOrReplacement of config.nodes ?? []) {\n const klass =\n typeof klassOrReplacement === \"function\"\n ? klassOrReplacement\n : klassOrReplacement.replace;\n types.add(klass.getType());\n nodes.add(klass);\n }\n return { types, nodes };\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { definePlan, safeCast } from \"@etrepum/lexical-builder-core\";\n\nexport interface AutoFocusConfig {\n /**\n * Where to move the selection when the editor is focused and there is no\n * existing selection. Can be \"rootStart\" or \"rootEnd\" (the default).\n */\n defaultSelection?: \"rootStart\" | \"rootEnd\";\n}\n\n/**\n * A Plan to focus the LexicalEditor when the root element is set\n * (typically only when the editor is first created).\n */\nexport const AutoFocusPlan = definePlan({\n config: safeCast<AutoFocusConfig>({}),\n name: \"@etrepum/lexical-builder/AutoFocus\",\n register(editor, { defaultSelection }) {\n return editor.registerRootListener((rootElement) => {\n editor.focus(\n () => {\n // If we try and move selection to the same point with setBaseAndExtent, it won't\n // trigger a re-focus on the element. So in the case this occurs, we'll need to correct it.\n // Normally this is fine, Selection API !== Focus API, but fore the intents of the naming\n // of this plugin, which should preserve focus too.\n const activeElement = document.activeElement;\n if (\n rootElement !== null &&\n (activeElement === null || !rootElement.contains(activeElement))\n ) {\n // Note: preventScroll won't work in Webkit.\n rootElement.focus({ preventScroll: true });\n }\n },\n { defaultSelection },\n );\n });\n },\n});\n","export type StoreSubscriber<T> = (value: T) => void;\nexport interface ReadableStore<T> {\n get: () => T;\n subscribe: (callback: StoreSubscriber<T>) => () => void;\n}\nexport interface WritableStore<T> extends ReadableStore<T> {\n set: (value: T) => void;\n}\n\nexport class Store<T> implements WritableStore<T>, Disposable {\n __value: T;\n __listeners: Map<symbol, StoreSubscriber<T>>;\n __eq?: (a: T, b: T) => boolean;\n constructor(value: T, eq?: (a: T, b: T) => boolean) {\n this.__value = value;\n this.__listeners = new Map();\n this.__eq = eq;\n }\n get() {\n return this.__value;\n }\n set(value: T): void {\n if (this.__eq ? !this.__eq(this.__value, value) : this.__value !== value) {\n this.__value = value;\n for (const cb of this.__listeners.values()) {\n cb(value);\n }\n }\n }\n [Symbol.dispose]() {\n this.dispose();\n }\n dispose() {\n this.__listeners.clear();\n }\n subscribe(\n callback: StoreSubscriber<T>,\n skipInitialization = false,\n ): () => void {\n const key = Symbol(\"unsubscribe\");\n this.__listeners.set(key, callback);\n if (!skipInitialization) {\n callback(this.__value);\n }\n return () => {\n this.__listeners.delete(key);\n };\n }\n}\n","import { mergeRegister } from \"@lexical/utils\";\nimport { Store, type WritableStore, type ReadableStore } from \"./Store\";\n\nexport interface DisabledToggleOptions {\n disabled?: boolean;\n register: () => () => void;\n}\nexport interface DisabledToggleOutput {\n disabled: WritableStore<boolean>;\n}\nexport function disabledToggle(\n opts: DisabledToggleOptions,\n): [DisabledToggleOutput, () => void] {\n const disabled = new Store(Boolean(opts.disabled));\n return [{ disabled }, registerDisabled(disabled, opts.register)];\n}\n\nexport function registerDisabled(\n disabledStore: ReadableStore<boolean>,\n register: () => () => void,\n): () => void {\n let cleanup: null | (() => void) = null;\n return mergeRegister(\n () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n },\n disabledStore.subscribe((isDisabled) => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n if (!isDisabled) {\n cleanup = register();\n }\n }),\n );\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { registerDragonSupport } from \"@lexical/dragon\";\nimport {\n definePlan,\n provideOutput,\n safeCast,\n} from \"@etrepum/lexical-builder-core\";\nimport { disabledToggle, type DisabledToggleOutput } from \"./disabledToggle\";\n\nexport interface DragonConfig {\n disabled: boolean;\n}\nexport type DragonOutput = DisabledToggleOutput;\n\n/**\n * Add Dragon speech to text input support to the editor, via the\n * \\@lexical/dragon module.\n */\nexport const DragonPlan = definePlan({\n name: \"@lexical/dragon\",\n config: safeCast<DragonConfig>({ disabled: false }),\n register: (editor, config) =>\n provideOutput<DragonOutput>(\n ...disabledToggle({\n disabled: config.disabled,\n register: () => registerDragonSupport(editor),\n }),\n ),\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { type LexicalEditor } from \"lexical\";\nimport {\n createEmptyHistoryState,\n type HistoryState,\n registerHistory,\n} from \"@lexical/history\";\nimport {\n configPlan,\n definePlan,\n provideOutput,\n safeCast,\n} from \"@etrepum/lexical-builder-core\";\nimport { disabledToggle, type DisabledToggleOutput } from \"./disabledToggle\";\nimport { getPeerDependencyFromEditor } from \"./getPeerDependencyFromEditor\";\n\nexport interface HistoryConfig {\n /**\n * The time (in milliseconds) the editor should delay generating a new history stack,\n * instead of merging the current changes with the current stack. The default is 300ms.\n */\n delay: number;\n /**\n * The initial history state, the default is {@link createEmptyHistoryState}.\n */\n createInitialHistoryState: (editor: LexicalEditor) => HistoryState;\n /**\n * Whether history is disabled or not\n */\n disabled: boolean;\n}\n\nexport interface HistoryOutput extends DisabledToggleOutput {\n getHistoryState: () => HistoryState;\n}\n\n/**\n * Registers necessary listeners to manage undo/redo history stack and related\n * editor commands, via the \\@lexical/history module.\n */\nexport const HistoryPlan = definePlan({\n config: safeCast<HistoryConfig>({\n createInitialHistoryState: createEmptyHistoryState,\n delay: 300,\n disabled: false,\n }),\n name: \"@etrepum/lexical-builder/History\",\n register: (editor, { delay, createInitialHistoryState, disabled }) => {\n const historyState = createInitialHistoryState(editor);\n const [output, cleanup] = disabledToggle({\n disabled,\n register: () => registerHistory(editor, historyState, delay),\n });\n return provideOutput<HistoryOutput>(\n { ...output, getHistoryState: () => historyState },\n cleanup,\n );\n },\n});\n\nfunction getHistoryPeer(editor: LexicalEditor | null | undefined) {\n return editor\n ? getPeerDependencyFromEditor<typeof HistoryPlan>(editor, HistoryPlan.name)\n : null;\n}\n\n/**\n * Registers necessary listeners to manage undo/redo history stack and related\n * editor commands, via the \\@lexical/history module, only if the parent editor\n * has a history plugin implementation.\n */\nexport const SharedHistoryPlan = definePlan({\n name: \"@etrepum/lexical-builder/SharedHistory\",\n dependencies: [configPlan(HistoryPlan, { disabled: true })],\n init(editorConfig, _config, state) {\n // Configure the peer dependency based on the parent editor's history\n const { config } = state.getDependency(HistoryPlan);\n const parentPeer = getHistoryPeer(editorConfig.parentEditor);\n // Default is disabled by config above, we will enable it based\n // on the parent editor's history plan\n if (parentPeer) {\n config.delay = parentPeer.config.delay;\n config.createInitialHistoryState = () =>\n parentPeer.output.getHistoryState();\n }\n return parentPeer;\n },\n register(_editor, _config, state) {\n const parentPeer = state.getInitResult();\n if (!parentPeer) {\n return () => {\n /* noop */\n };\n }\n const disabled = state.getDependency(HistoryPlan).output.disabled;\n return parentPeer.output.disabled.subscribe(disabled.set.bind(disabled));\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { registerPlainText } from \"@lexical/plain-text\";\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\nimport { DragonPlan } from \"./DragonPlan\";\n\n/**\n * A plan to register \\@lexical/plain-text behavior\n */\nexport const PlainTextPlan = definePlan({\n conflictsWith: [\"@lexical/rich-text\"],\n name: \"@lexical/plain-text\",\n dependencies: [DragonPlan],\n register: registerPlainText,\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { HeadingNode, QuoteNode, registerRichText } from \"@lexical/rich-text\";\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\nimport { DragonPlan } from \"./DragonPlan\";\n\n/**\n * A plan to register \\@lexical/rich-text behavior and nodes\n * ({@link HeadingNode}, {@link QuoteNode})\n */\nexport const RichTextPlan = definePlan({\n conflictsWith: [\"@lexical/plain-text\"],\n name: \"@lexical/rich-text\",\n nodes: [HeadingNode, QuoteNode],\n dependencies: [DragonPlan],\n register: registerRichText,\n});\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "test:watch": "vitest",
19
19
  "lint": "eslint"
20
20
  },
21
- "version": "0.0.31-nightly.20240724.0",
21
+ "version": "0.0.32-nightly.20240725.0",
22
22
  "license": "MIT",
23
23
  "repository": {
24
24
  "type": "git",
@@ -33,13 +33,13 @@
33
33
  "@etrepum/lexical-builder-core": "*"
34
34
  },
35
35
  "peerDependencies": {
36
- "@lexical/dragon": ">=0.16.2-nightly.20240716",
37
- "@lexical/history": ">=0.16.2-nightly.20240716",
38
- "@lexical/plain-text": ">=0.16.2-nightly.20240716",
39
- "@lexical/rich-text": ">=0.16.2-nightly.20240716",
40
- "@lexical/text": ">=0.16.2-nightly.20240716",
41
- "@lexical/utils": ">=0.16.2-nightly.20240716",
42
- "lexical": ">=0.16.2-nightly.20240716"
36
+ "@lexical/dragon": ">=0.16.2-nightly.20240724",
37
+ "@lexical/history": ">=0.16.2-nightly.20240724",
38
+ "@lexical/plain-text": ">=0.16.2-nightly.20240724",
39
+ "@lexical/rich-text": ">=0.16.2-nightly.20240724",
40
+ "@lexical/text": ">=0.16.2-nightly.20240724",
41
+ "@lexical/utils": ">=0.16.2-nightly.20240724",
42
+ "lexical": ">=0.16.2-nightly.20240724"
43
43
  },
44
44
  "sideEffects": false,
45
45
  "devDependencies": {
@@ -53,9 +53,9 @@
53
53
  "tslib": "^2.6.2",
54
54
  "typescript": "^5.4.5",
55
55
  "vite": "^5.2.11",
56
- "vite-plugin-dts": "^3.9.1",
57
- "vite-plugin-package-version": "^1.1.0",
58
- "vitest": "^1.6.0"
56
+ "vite-plugin-dts": "*",
57
+ "vite-plugin-package-version": "*",
58
+ "vitest": "*"
59
59
  },
60
60
  "module": "dist/index.js",
61
61
  "types": "dist/index.d.ts",