@etrepum/lexical-builder 0.0.24-nightly.20240614.0 → 0.0.24
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/AutoFocusPlan.d.ts +1 -1
- package/dist/AutoFocusPlan.d.ts.map +1 -1
- package/dist/DragonPlan.d.ts +1 -1
- package/dist/DragonPlan.d.ts.map +1 -1
- package/dist/HistoryPlan.d.ts +1 -1
- package/dist/HistoryPlan.d.ts.map +1 -1
- package/dist/LexicalBuilder.d.ts +7 -8
- package/dist/LexicalBuilder.d.ts.map +1 -1
- package/dist/PlainTextPlan.d.ts +1 -1
- package/dist/PlainTextPlan.d.ts.map +1 -1
- package/dist/PlanRep.d.ts +6 -1
- package/dist/PlanRep.d.ts.map +1 -1
- package/dist/RichTextPlan.d.ts +1 -1
- package/dist/RichTextPlan.d.ts.map +1 -1
- package/dist/getPlanDependencyFromEditor.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -33
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/AutoFocusPlan.d.ts
CHANGED
@@ -16,5 +16,5 @@ export interface AutoFocusConfig {
|
|
16
16
|
* A Plan to focus the LexicalEditor when the root element is set
|
17
17
|
* (typically only when the editor is first created).
|
18
18
|
*/
|
19
|
-
export declare const AutoFocusPlan: import('@etrepum/lexical-builder-core').LexicalPlan<AutoFocusConfig, "@etrepum/lexical-builder/AutoFocusPlan", unknown>;
|
19
|
+
export declare const AutoFocusPlan: import('@etrepum/lexical-builder-core').LexicalPlan<AutoFocusConfig, "@etrepum/lexical-builder/AutoFocusPlan", unknown, unknown>;
|
20
20
|
//# sourceMappingURL=AutoFocusPlan.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AutoFocusPlan.d.ts","sourceRoot":"","sources":["../src/AutoFocusPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC5C;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,
|
1
|
+
{"version":3,"file":"AutoFocusPlan.d.ts","sourceRoot":"","sources":["../src/AutoFocusPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC5C;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,kIAwBxB,CAAC"}
|
package/dist/DragonPlan.d.ts
CHANGED
@@ -9,5 +9,5 @@
|
|
9
9
|
* Add Dragon speech to text input support to the editor, via the
|
10
10
|
* @lexical/dragon module.
|
11
11
|
*/
|
12
|
-
export declare const DragonPlan: import('@etrepum/lexical-builder-core').LexicalPlan<
|
12
|
+
export declare const DragonPlan: import('@etrepum/lexical-builder-core').LexicalPlan<import('@etrepum/lexical-builder-core').PlanConfigBase, "@lexical/dragon", unknown, unknown>;
|
13
13
|
//# sourceMappingURL=DragonPlan.d.ts.map
|
package/dist/DragonPlan.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DragonPlan.d.ts","sourceRoot":"","sources":["../src/DragonPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;GAGG;AACH,eAAO,MAAM,UAAU,
|
1
|
+
{"version":3,"file":"DragonPlan.d.ts","sourceRoot":"","sources":["../src/DragonPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;GAGG;AACH,eAAO,MAAM,UAAU,kJAGrB,CAAC"}
|
package/dist/HistoryPlan.d.ts
CHANGED
@@ -15,5 +15,5 @@ export interface HistoryConfig {
|
|
15
15
|
* Registers necessary listeners to manage undo/redo history stack and related
|
16
16
|
* editor commands, via the @lexical/history module.
|
17
17
|
*/
|
18
|
-
export declare const HistoryPlan: import('@etrepum/lexical-builder-core').LexicalPlan<HistoryConfig, "@etrepum/lexical-builder/HistoryPlan", unknown>;
|
18
|
+
export declare const HistoryPlan: import('@etrepum/lexical-builder-core').LexicalPlan<HistoryConfig, "@etrepum/lexical-builder/HistoryPlan", unknown, unknown>;
|
19
19
|
//# 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;AAK1B,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,
|
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;AAK1B,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,8HAStB,CAAC"}
|
package/dist/LexicalBuilder.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import { AnyLexicalPlan, AnyLexicalPlanArgument, EditorHandle,
|
2
|
-
import { LexicalEditor
|
1
|
+
import { AnyLexicalPlan, AnyLexicalPlanArgument, EditorHandle, InitialEditorConfig } from '@etrepum/lexical-builder-core';
|
2
|
+
import { LexicalEditor } from 'lexical';
|
3
3
|
import { PlanRep } from './PlanRep';
|
4
4
|
|
5
5
|
/**
|
@@ -13,7 +13,8 @@ import { PlanRep } from './PlanRep';
|
|
13
13
|
* @example A single root plan with multiple dependencies
|
14
14
|
* ```ts
|
15
15
|
* const editorHandle = buildEditorFromPlans(
|
16
|
-
*
|
16
|
+
* definePlan({
|
17
|
+
* name: "[root]",
|
17
18
|
* dependencies: [
|
18
19
|
* RichTextPlan,
|
19
20
|
* configPlan(EmojiPlan, { emojiBaseUrl: "/assets/emoji" }),
|
@@ -33,9 +34,7 @@ import { PlanRep } from './PlanRep';
|
|
33
34
|
* );
|
34
35
|
* ```
|
35
36
|
*/
|
36
|
-
export declare function buildEditorFromPlans(plan: AnyLexicalPlanArgument
|
37
|
-
/** @internal */
|
38
|
-
export declare function coerceToPlanArgument(plan: AnyLexicalPlanArgument | RootPlanArgument): AnyLexicalPlanArgument;
|
37
|
+
export declare function buildEditorFromPlans(plan: AnyLexicalPlanArgument, ...plans: AnyLexicalPlanArgument[]): EditorHandle;
|
39
38
|
/** @internal */
|
40
39
|
export declare class LexicalBuilder {
|
41
40
|
phases: Map<AnyLexicalPlan, PlanRep<AnyLexicalPlan>>[];
|
@@ -51,7 +50,7 @@ export declare class LexicalBuilder {
|
|
51
50
|
getPlanRep<Plan extends AnyLexicalPlan>(plan: Plan): PlanRep<Plan> | undefined;
|
52
51
|
addPlan(arg: AnyLexicalPlanArgument, parent?: AnyLexicalPlan): number;
|
53
52
|
sortedPlanReps(): Generator<PlanRep<AnyLexicalPlan>, void, undefined>;
|
54
|
-
registerEditor(editor: LexicalEditor): () => void;
|
55
|
-
buildCreateEditorArgs():
|
53
|
+
registerEditor(editor: LexicalEditor, controller: AbortController): () => void;
|
54
|
+
buildCreateEditorArgs(signal: AbortSignal): InitialEditorConfig;
|
56
55
|
}
|
57
56
|
//# sourceMappingURL=LexicalBuilder.d.ts.map
|
@@ -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,YAAY,
|
1
|
+
{"version":3,"file":"LexicalBuilder.d.ts","sourceRoot":"","sources":["../src/LexicalBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EAEpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,aAAa,EAOd,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,EAC5B,GAAG,KAAK,EAAE,sBAAsB,EAAE,GACjC,YAAY,CAOd;AA+BD,gBAAgB;AAChB,qBAAa,cAAc;IACzB,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAClD,YAAY,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACvD,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;IAY/B,8EAA8E;IAC9E,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,GAAG,SAAS;IAIpE,WAAW,IAAI,YAAY;IAoB3B,UAAU,CAAC,IAAI,SAAS,cAAc,EACpC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS;IAQ5B,OAAO,CAAC,GAAG,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM;IAmGpE,cAAc;IAMf,cAAc,CACZ,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,eAAe,GAC1B,MAAM,IAAI;IAqBb,qBAAqB,CAAC,MAAM,EAAE,WAAW;CAqF1C"}
|
package/dist/PlainTextPlan.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
2
|
* A plan to register @lexical/plain-text behavior
|
3
3
|
*/
|
4
|
-
export declare const PlainTextPlan: import('@etrepum/lexical-builder-core').LexicalPlan<
|
4
|
+
export declare const PlainTextPlan: import('@etrepum/lexical-builder-core').LexicalPlan<import('@etrepum/lexical-builder-core').PlanConfigBase, "@lexical/plain-text", unknown, unknown>;
|
5
5
|
//# sourceMappingURL=PlainTextPlan.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PlainTextPlan.d.ts","sourceRoot":"","sources":["../src/PlainTextPlan.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,eAAO,MAAM,aAAa,
|
1
|
+
{"version":3,"file":"PlainTextPlan.d.ts","sourceRoot":"","sources":["../src/PlainTextPlan.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,eAAO,MAAM,aAAa,sJAIxB,CAAC"}
|
package/dist/PlanRep.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { LexicalBuilder } from './LexicalBuilder';
|
2
|
-
import { AnyLexicalPlan, LexicalPlanConfig, LexicalPlanDependency, LexicalPlanOutput } from '@etrepum/lexical-builder-core';
|
2
|
+
import { AnyLexicalPlan, InitialEditorConfig, LexicalPlanConfig, LexicalPlanDependency, LexicalPlanInit, LexicalPlanOutput, RegisterState } from '@etrepum/lexical-builder-core';
|
3
3
|
import { LexicalEditor } from 'lexical';
|
4
4
|
|
5
5
|
/**
|
@@ -12,9 +12,14 @@ export declare class PlanRep<Plan extends AnyLexicalPlan> {
|
|
12
12
|
_dependency?: LexicalPlanDependency<Plan>;
|
13
13
|
_output?: LexicalPlanOutput<Plan>;
|
14
14
|
_peerNameSet?: Set<string>;
|
15
|
+
_registerState?: RegisterState<LexicalPlanInit<Plan>>;
|
16
|
+
_initResult?: LexicalPlanInit<Plan>;
|
15
17
|
plan: Plan;
|
16
18
|
constructor(builder: LexicalBuilder, plan: Plan);
|
17
19
|
register(editor: LexicalEditor, signal: AbortSignal): () => void;
|
20
|
+
init(editorConfig: InitialEditorConfig, signal: AbortSignal): void;
|
21
|
+
getInitResult(): LexicalPlanInit<Plan>;
|
22
|
+
getRegisterState(signal: AbortSignal): RegisterState<LexicalPlanInit<Plan>>;
|
18
23
|
getPeer<PeerPlan extends AnyLexicalPlan = never>(name: PeerPlan["name"]): undefined | LexicalPlanDependency<PeerPlan>;
|
19
24
|
getDependency<Dependency extends AnyLexicalPlan>(dep: Dependency): LexicalPlanDependency<Dependency>;
|
20
25
|
getDirectDependentNames(): string[];
|
package/dist/PlanRep.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PlanRep.d.ts","sourceRoot":"","sources":["../src/PlanRep.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,
|
1
|
+
{"version":3,"file":"PlanRep.d.ts","sourceRoot":"","sources":["../src/PlanRep.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG7C;;GAEG;AACH,qBAAa,OAAO,CAAC,IAAI,SAAS,cAAc;IAC9C,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,cAAc,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,WAAW,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,EAAE,IAAI,CAAC;gBACC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI;IAK/C,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI;IAiBhE,IAAI,CAAC,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAE,WAAW;IAO3D,aAAa,IAAI,eAAe,CAAC,IAAI,CAAC;IAQtC,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAa3E,OAAO,CAAC,QAAQ,SAAS,cAAc,GAAG,KAAK,EAC7C,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GACrB,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC;IAM9C,aAAa,CAAC,UAAU,SAAS,cAAc,EAC7C,GAAG,EAAE,UAAU,GACd,qBAAqB,CAAC,UAAU,CAAC;IAWpC,uBAAuB;IAOvB,cAAc;IASd,iBAAiB,IAAI,qBAAqB,CAAC,IAAI,CAAC;IAchD,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC;CAcrC"}
|
package/dist/RichTextPlan.d.ts
CHANGED
@@ -9,5 +9,5 @@
|
|
9
9
|
* A plan to register @lexical/rich-text behavior and nodes
|
10
10
|
* ({@link HeadingNode}, {@link QuoteNode})
|
11
11
|
*/
|
12
|
-
export declare const RichTextPlan: import('@etrepum/lexical-builder-core').LexicalPlan<
|
12
|
+
export declare const RichTextPlan: import('@etrepum/lexical-builder-core').LexicalPlan<import('@etrepum/lexical-builder-core').PlanConfigBase, "@lexical/rich-text", unknown, unknown>;
|
13
13
|
//# sourceMappingURL=RichTextPlan.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RichTextPlan.d.ts","sourceRoot":"","sources":["../src/RichTextPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;GAGG;AACH,eAAO,MAAM,YAAY,
|
1
|
+
{"version":3,"file":"RichTextPlan.d.ts","sourceRoot":"","sources":["../src/RichTextPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;GAGG;AACH,eAAO,MAAM,YAAY,qJAKvB,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getPlanDependencyFromEditor.d.ts","sourceRoot":"","sources":["../src/getPlanDependencyFromEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EACL,cAAc,EACd,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;
|
1
|
+
{"version":3,"file":"getPlanDependencyFromEditor.d.ts","sourceRoot":"","sources":["../src/getPlanDependencyFromEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EACL,cAAc,EACd,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AAKvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,SAAS,cAAc,EACrE,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,GACT,qBAAqB,CAAC,IAAI,CAAC,CAc7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,cAAc,EAC5D,IAAI,EAAE,IAAI,GACT,qBAAqB,CAAC,IAAI,CAAC,CAE7B"}
|
package/dist/index.d.ts
CHANGED
@@ -6,9 +6,9 @@
|
|
6
6
|
*
|
7
7
|
*/
|
8
8
|
export { PACKAGE_VERSION } from './PACKAGE_VERSION';
|
9
|
-
export { configPlan, definePlan,
|
10
|
-
export { LexicalBuilder, buildEditorFromPlans
|
11
|
-
export { type AnyLexicalPlan, type AnyLexicalPlanArgument, type EditorHandle, type InitialEditorStateType, type LexicalPlan, type LexicalPlanArgument, type LexicalPlanConfig, type LexicalPlanName, type LexicalPlanOutput, type
|
9
|
+
export { configPlan, definePlan, provideOutput, declarePeerDependency, } from '@etrepum/lexical-builder-core';
|
10
|
+
export { LexicalBuilder, buildEditorFromPlans } from './LexicalBuilder';
|
11
|
+
export { type AnyLexicalPlan, type AnyLexicalPlanArgument, type EditorHandle, type InitialEditorStateType, type LexicalPlan, type LexicalPlanArgument, type LexicalPlanConfig, type LexicalPlanName, type LexicalPlanOutput, type LexicalPlanInit, type OutputComponentPlan, type LexicalPlanDependency, type NormalizedLexicalPlanArgument, type PlanConfigBase, type RegisterState, type NormalizedPeerDependency, } from '@etrepum/lexical-builder-core';
|
12
12
|
export { safeCast } from '@etrepum/lexical-builder-core';
|
13
13
|
export { shallowMergeConfig } from '@etrepum/lexical-builder-core';
|
14
14
|
export { $getPlanDependency, getPlanDependencyFromEditor, } from './getPlanDependencyFromEditor';
|
package/dist/index.d.ts.map
CHANGED
@@ -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,
|
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,YAAY,EACjB,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,aAAa,EAClB,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,EACL,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,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"}
|
package/dist/index.js
CHANGED
@@ -4,15 +4,15 @@ var __publicField = (obj, key, value) => {
|
|
4
4
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
5
5
|
return value;
|
6
6
|
};
|
7
|
-
import { shallowMergeConfig,
|
8
|
-
import { configPlan as configPlan2, declarePeerDependency, definePlan as definePlan2,
|
7
|
+
import { shallowMergeConfig, configPlan, definePlan, safeCast } from "@etrepum/lexical-builder-core";
|
8
|
+
import { configPlan as configPlan2, declarePeerDependency, definePlan as definePlan2, provideOutput, safeCast as safeCast2, shallowMergeConfig as shallowMergeConfig2 } from "@etrepum/lexical-builder-core";
|
9
9
|
import { $getRoot, $createParagraphNode, createEditor, $getEditor } from "lexical";
|
10
10
|
import { mergeRegister } from "@lexical/utils";
|
11
11
|
import { registerDragonSupport } from "@lexical/dragon";
|
12
12
|
import { createEmptyHistoryState, registerHistory } from "@lexical/history";
|
13
13
|
import { registerPlainText } from "@lexical/plain-text";
|
14
14
|
import { HeadingNode, QuoteNode, registerRichText } from "@lexical/rich-text";
|
15
|
-
const PACKAGE_VERSION = "0.0.24
|
15
|
+
const PACKAGE_VERSION = "0.0.24";
|
16
16
|
function invariant(cond, message, ...args) {
|
17
17
|
if (cond) {
|
18
18
|
return;
|
@@ -68,6 +68,8 @@ class PlanRep {
|
|
68
68
|
__publicField(this, "_dependency");
|
69
69
|
__publicField(this, "_output");
|
70
70
|
__publicField(this, "_peerNameSet");
|
71
|
+
__publicField(this, "_registerState");
|
72
|
+
__publicField(this, "_initResult");
|
71
73
|
__publicField(this, "plan");
|
72
74
|
this.builder = builder;
|
73
75
|
this.plan = plan;
|
@@ -78,16 +80,46 @@ class PlanRep {
|
|
78
80
|
this._output = void 0;
|
79
81
|
return noop$1;
|
80
82
|
}
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
83
|
+
invariant(
|
84
|
+
this._registerState !== void 0,
|
85
|
+
"PlanRep: register called before init"
|
86
|
+
);
|
87
|
+
const cleanup = this.plan.register(
|
88
|
+
editor,
|
89
|
+
this.getConfig(),
|
90
|
+
this.getRegisterState(signal)
|
91
|
+
);
|
88
92
|
this._output = cleanup.output;
|
89
93
|
return cleanup;
|
90
94
|
}
|
95
|
+
init(editorConfig, signal) {
|
96
|
+
const config = this.getConfig();
|
97
|
+
const registerState = this.getRegisterState(signal);
|
98
|
+
if (this.plan.init) {
|
99
|
+
this._initResult = this.plan.init(editorConfig, config, registerState);
|
100
|
+
}
|
101
|
+
}
|
102
|
+
getInitResult() {
|
103
|
+
invariant(
|
104
|
+
"_initResult" in this,
|
105
|
+
"PlanRep: getInitResult() called for Plan %s but no result was set",
|
106
|
+
this.plan.name
|
107
|
+
);
|
108
|
+
return this._initResult;
|
109
|
+
}
|
110
|
+
getRegisterState(signal) {
|
111
|
+
if (!this._registerState) {
|
112
|
+
this._registerState = {
|
113
|
+
getPeer: this.getPeer.bind(this),
|
114
|
+
getDependency: this.getDependency.bind(this),
|
115
|
+
getDirectDependentNames: this.getDirectDependentNames.bind(this),
|
116
|
+
getPeerNameSet: this.getPeerNameSet.bind(this),
|
117
|
+
getInitResult: this.getInitResult.bind(this),
|
118
|
+
signal
|
119
|
+
};
|
120
|
+
}
|
121
|
+
return this._registerState;
|
122
|
+
}
|
91
123
|
getPeer(name) {
|
92
124
|
const rep = this.builder.planNameMap.get(name);
|
93
125
|
return rep ? rep.getPlanDependency() : void 0;
|
@@ -131,13 +163,14 @@ class PlanRep {
|
|
131
163
|
return this._dependency;
|
132
164
|
}
|
133
165
|
getConfig() {
|
134
|
-
if (
|
135
|
-
let config = this.plan.config;
|
166
|
+
if (this._config === void 0) {
|
167
|
+
let config = this.plan.config || {};
|
136
168
|
const mergeConfig = this.plan.mergeConfig ? this.plan.mergeConfig.bind(this.plan) : shallowMergeConfig;
|
137
169
|
for (const cfg of this.configs) {
|
138
170
|
config = mergeConfig(config, cfg);
|
139
171
|
}
|
140
172
|
this._config = config;
|
173
|
+
return config;
|
141
174
|
}
|
142
175
|
return this._config;
|
143
176
|
}
|
@@ -145,15 +178,12 @@ class PlanRep {
|
|
145
178
|
const buildersForEditors = /* @__PURE__ */ new WeakMap();
|
146
179
|
function buildEditorFromPlans(plan, ...plans) {
|
147
180
|
const builder = new LexicalBuilder();
|
148
|
-
builder.addPlan(
|
181
|
+
builder.addPlan(plan);
|
149
182
|
for (const otherPlan of plans) {
|
150
|
-
builder.addPlan(
|
183
|
+
builder.addPlan(otherPlan);
|
151
184
|
}
|
152
185
|
return builder.buildEditor();
|
153
186
|
}
|
154
|
-
function coerceToPlanArgument(plan) {
|
155
|
-
return "name" in plan || Array.isArray(plan) ? plan : defineRootPlan(plan);
|
156
|
-
}
|
157
187
|
function noop() {
|
158
188
|
}
|
159
189
|
class DisposableEditorHandle {
|
@@ -198,7 +228,8 @@ class LexicalBuilder {
|
|
198
228
|
return buildersForEditors.get(editor);
|
199
229
|
}
|
200
230
|
buildEditor() {
|
201
|
-
const
|
231
|
+
const controller = new AbortController();
|
232
|
+
const { $initialEditorState, onError, ...editorConfig } = this.buildCreateEditorArgs(controller.signal);
|
202
233
|
const editor = createEditor({
|
203
234
|
...editorConfig,
|
204
235
|
...onError ? { onError: (err) => onError(err, editor) } : {}
|
@@ -210,7 +241,7 @@ class LexicalBuilder {
|
|
210
241
|
mergeRegister(
|
211
242
|
() => buildersForEditors.delete(editor),
|
212
243
|
() => editor.setRootElement(null),
|
213
|
-
this.registerEditor(editor)
|
244
|
+
this.registerEditor(editor, controller)
|
214
245
|
)
|
215
246
|
);
|
216
247
|
}
|
@@ -230,6 +261,11 @@ class LexicalBuilder {
|
|
230
261
|
plan = arg;
|
231
262
|
configs = [];
|
232
263
|
}
|
264
|
+
invariant(
|
265
|
+
typeof plan.name === "string",
|
266
|
+
"LexicalBuilder: plan name must be string, not %s",
|
267
|
+
typeof plan.name
|
268
|
+
);
|
233
269
|
if (parent) {
|
234
270
|
let edgeSet = this.reverseEdges.get(plan);
|
235
271
|
if (!edgeSet) {
|
@@ -317,11 +353,11 @@ class LexicalBuilder {
|
|
317
353
|
yield* phase.values();
|
318
354
|
}
|
319
355
|
}
|
320
|
-
registerEditor(editor) {
|
356
|
+
registerEditor(editor, controller) {
|
321
357
|
const cleanups = [];
|
322
|
-
const
|
358
|
+
const signal = controller.signal;
|
323
359
|
for (const planRep of this.sortedPlanReps()) {
|
324
|
-
cleanups.push(planRep.register(editor,
|
360
|
+
cleanups.push(planRep.register(editor, signal));
|
325
361
|
}
|
326
362
|
return () => {
|
327
363
|
for (let i = cleanups.length - 1; i >= 0; i--) {
|
@@ -337,17 +373,15 @@ class LexicalBuilder {
|
|
337
373
|
controller.abort();
|
338
374
|
};
|
339
375
|
}
|
340
|
-
buildCreateEditorArgs() {
|
341
|
-
const config = {
|
342
|
-
// Prefer throwing errors rather than console.error by default
|
343
|
-
onError: defaultOnError
|
344
|
-
};
|
376
|
+
buildCreateEditorArgs(signal) {
|
377
|
+
const config = {};
|
345
378
|
const nodes = /* @__PURE__ */ new Set();
|
346
379
|
const replacedNodes = /* @__PURE__ */ new Map();
|
347
380
|
const htmlExport = /* @__PURE__ */ new Map();
|
348
381
|
const htmlImport = {};
|
349
382
|
const theme = {};
|
350
|
-
|
383
|
+
const planReps = [...this.sortedPlanReps()];
|
384
|
+
for (const planRep of planReps) {
|
351
385
|
const { plan } = planRep;
|
352
386
|
if (plan.onError !== void 0) {
|
353
387
|
config.onError = plan.onError;
|
@@ -413,6 +447,12 @@ class LexicalBuilder {
|
|
413
447
|
config.html.export = htmlExport;
|
414
448
|
}
|
415
449
|
}
|
450
|
+
for (const planRep of planReps) {
|
451
|
+
planRep.init(config, signal);
|
452
|
+
}
|
453
|
+
if (!config.onError) {
|
454
|
+
config.onError = defaultOnError;
|
455
|
+
}
|
416
456
|
return config;
|
417
457
|
}
|
418
458
|
}
|
@@ -465,7 +505,6 @@ const AutoFocusPlan = definePlan({
|
|
465
505
|
}
|
466
506
|
});
|
467
507
|
const DragonPlan = definePlan({
|
468
|
-
config: {},
|
469
508
|
name: "@lexical/dragon",
|
470
509
|
register: registerDragonSupport
|
471
510
|
});
|
@@ -480,13 +519,11 @@ const HistoryPlan = definePlan({
|
|
480
519
|
}
|
481
520
|
});
|
482
521
|
const PlainTextPlan = definePlan({
|
483
|
-
config: {},
|
484
522
|
conflictsWith: ["@lexical/rich-text"],
|
485
523
|
name: "@lexical/plain-text",
|
486
524
|
register: registerPlainText
|
487
525
|
});
|
488
526
|
const RichTextPlan = definePlan({
|
489
|
-
config: {},
|
490
527
|
conflictsWith: ["@lexical/plain-text"],
|
491
528
|
name: "@lexical/rich-text",
|
492
529
|
nodes: [HeadingNode, QuoteNode],
|
@@ -503,11 +540,9 @@ export {
|
|
503
540
|
PlainTextPlan,
|
504
541
|
RichTextPlan,
|
505
542
|
buildEditorFromPlans,
|
506
|
-
coerceToPlanArgument,
|
507
543
|
configPlan2 as configPlan,
|
508
544
|
declarePeerDependency,
|
509
545
|
definePlan2 as definePlan,
|
510
|
-
defineRootPlan2 as defineRootPlan,
|
511
546
|
getPeerDependencyFromEditor,
|
512
547
|
getPlanDependencyFromEditor,
|
513
548
|
provideOutput,
|
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/initializeEditor.ts","../src/PlanRep.ts","../src/LexicalBuilder.ts","../src/getPlanDependencyFromEditor.ts","../src/getPeerDependencyFromEditor.ts","../src/AutoFocusPlan.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 { InitialEditorStateType } from \"@etrepum/lexical-builder-core\";\n\nimport { $createParagraphNode, $getRoot, type LexicalEditor } 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 function initializeEditor(\n editor: LexicalEditor,\n $initialEditorState: InitialEditorStateType = $defaultInitializer,\n): void {\n switch (typeof $initialEditorState) {\n case \"function\": {\n editor.update(() => $initialEditorState(editor), HISTORY_MERGE_OPTIONS);\n break;\n }\n case \"string\": {\n const parsedEditorState = editor.parseEditorState($initialEditorState);\n editor.setEditorState(parsedEditorState, HISTORY_MERGE_OPTIONS);\n break;\n }\n case \"object\": {\n if ($initialEditorState) {\n editor.setEditorState($initialEditorState, HISTORY_MERGE_OPTIONS);\n }\n break;\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 type { LexicalBuilder } from \"./LexicalBuilder\";\nimport type {\n AnyLexicalPlan,\n LexicalPlanConfig,\n LexicalPlanDependency,\n LexicalPlanOutput,\n} from \"@etrepum/lexical-builder-core\";\n\nimport invariant from \"./shared/invariant\";\n\nimport { shallowMergeConfig } from \"@etrepum/lexical-builder-core\";\nimport type { LexicalEditor } from \"lexical\";\n\nconst noop = () => {};\n/**\n * @internal\n */\nexport class PlanRep<Plan extends AnyLexicalPlan> {\n builder: LexicalBuilder;\n configs: Set<Partial<LexicalPlanConfig<Plan>>>;\n _config?: LexicalPlanConfig<Plan>;\n _dependency?: LexicalPlanDependency<Plan>;\n _output?: LexicalPlanOutput<Plan>;\n _peerNameSet?: Set<string>;\n plan: Plan;\n constructor(builder: LexicalBuilder, plan: Plan) {\n this.builder = builder;\n this.plan = plan;\n this.configs = new Set();\n }\n register(editor: LexicalEditor, signal: AbortSignal): () => void {\n if (!this.plan.register) {\n this._output = undefined;\n return noop;\n }\n const cleanup = this.plan.register(editor, this.getConfig(), {\n getPeer: this.getPeer.bind(this),\n getDependency: this.getDependency.bind(this),\n getDirectDependentNames: this.getDirectDependentNames.bind(this),\n getPeerNameSet: this.getPeerNameSet.bind(this),\n signal,\n });\n this._output = cleanup.output as LexicalPlanOutput<Plan>;\n return cleanup;\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 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 getDirectDependentNames() {\n return Array.from(\n this.builder.reverseEdges.get(this.plan) || [],\n (plan) => plan.name,\n );\n }\n\n getPeerNameSet() {\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 invariant(\n \"_output\" in this,\n \"Plan %s used as a dependency before registration\",\n this.plan.name,\n );\n this._dependency = {\n config: this.getConfig(),\n output: this._output!,\n };\n }\n return this._dependency;\n }\n getConfig(): LexicalPlanConfig<Plan> {\n if (!this._config) {\n let config = 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 config = mergeConfig(config, cfg);\n }\n this._config = config;\n }\n return this._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 */\nimport type {\n AnyLexicalPlan,\n AnyLexicalPlanArgument,\n EditorHandle,\n LexicalPlanConfig,\n RootPlanArgument,\n} from \"@etrepum/lexical-builder-core\";\n\nimport {\n LexicalEditor,\n createEditor,\n type CreateEditorArgs,\n type EditorThemeClasses,\n type HTMLConfig,\n type KlassConstructor,\n type LexicalNode,\n} from \"lexical\";\nimport invariant from \"./shared/invariant\";\n\nimport { deepThemeMergeInPlace } from \"./deepThemeMergeInPlace\";\nimport { initializeEditor } from \"./initializeEditor\";\nimport { PlanRep } from \"./PlanRep\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { configPlan, defineRootPlan } from \"@etrepum/lexical-builder-core\";\n\nconst buildersForEditors = new WeakMap<LexicalEditor, LexicalBuilder>();\n\n/**\n * Build a LexicalEditor by combining together one or more plans, optionally\n * overriding some of their configuration.\n *\n * @param plan A plan argument (a plan, or a plan with config overrides)\n * @param plans Optional additional plan arguments\n * @returns An editor handle\n *\n * @example A single root plan with multiple dependencies\n * ```ts\n * const editorHandle = buildEditorFromPlans(\n * defineRootPlan({\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 editorHandle = buildEditorFromPlans(\n * RichTextPlan,\n * configPlan(EmojiPlan, { emojiBaseUrl: \"/assets/emoji\" }),\n * );\n * ```\n */\nexport function buildEditorFromPlans(\n plan: AnyLexicalPlanArgument | RootPlanArgument,\n ...plans: (AnyLexicalPlanArgument | RootPlanArgument)[]\n): EditorHandle {\n const builder = new LexicalBuilder();\n builder.addPlan(coerceToPlanArgument(plan));\n for (const otherPlan of plans) {\n builder.addPlan(coerceToPlanArgument(otherPlan));\n }\n return builder.buildEditor();\n}\n\n/** @internal */\nexport function coerceToPlanArgument(\n plan: AnyLexicalPlanArgument | RootPlanArgument,\n): AnyLexicalPlanArgument {\n return \"name\" in plan || Array.isArray(plan) ? plan : defineRootPlan(plan);\n}\n\n/** @internal */\nfunction noop() {}\n\n/** @internal */\nclass DisposableEditorHandle implements EditorHandle {\n editor: LexicalEditor;\n dispose: () => void;\n constructor(editor: LexicalEditor, dispose: () => void) {\n this.editor = editor;\n this.dispose = () => {\n try {\n dispose();\n } finally {\n this.dispose = noop;\n }\n };\n }\n // This should be safe even if the runtime doesn't have Symbol.dispose\n // because it will just be `handle[undefined] = dispose;`\n [Symbol.dispose]() {\n this.dispose();\n }\n}\n\n/** Throw the given Error */\nfunction defaultOnError(err: Error) {\n throw err;\n}\n\n/** @internal */\nexport class LexicalBuilder {\n phases: Map<AnyLexicalPlan, PlanRep<AnyLexicalPlan>>[];\n planMap: Map<AnyLexicalPlan, [number, PlanRep<AnyLexicalPlan>]>;\n planNameMap: Map<string, PlanRep<AnyLexicalPlan>>;\n reverseEdges: Map<AnyLexicalPlan, Set<AnyLexicalPlan>>;\n addStack: Set<AnyLexicalPlan>;\n conflicts: Map<string, string>;\n\n constructor() {\n // closure compiler can't handle class initializers\n this.phases = [new Map()];\n this.planMap = new Map();\n this.planNameMap = new Map();\n this.conflicts = new Map();\n this.reverseEdges = new Map();\n this.addStack = new Set();\n }\n\n /** Look up the editor that was created by this LexicalBuilder or undefined */\n static fromEditor(editor: LexicalEditor): LexicalBuilder | undefined {\n return buildersForEditors.get(editor);\n }\n\n buildEditor(): EditorHandle {\n const { $initialEditorState, onError, ...editorConfig } =\n this.buildCreateEditorArgs();\n const editor = createEditor({\n ...editorConfig,\n ...(onError ? { onError: (err) => onError(err, editor) } : {}),\n });\n initializeEditor(editor, $initialEditorState);\n buildersForEditors.set(editor, this);\n return new DisposableEditorHandle(\n editor,\n mergeRegister(\n () => buildersForEditors.delete(editor),\n () => editor.setRootElement(null),\n this.registerEditor(editor),\n ),\n );\n }\n\n getPlanRep<Plan extends AnyLexicalPlan>(\n plan: Plan,\n ): PlanRep<Plan> | undefined {\n const pair = this.planMap.get(plan);\n if (pair) {\n const rep: PlanRep<AnyLexicalPlan> = pair[1];\n return rep as PlanRep<Plan>;\n }\n }\n\n addPlan(arg: AnyLexicalPlanArgument, parent?: AnyLexicalPlan): number {\n let plan: AnyLexicalPlan;\n let configs: unknown[];\n if (Array.isArray(arg)) {\n [plan, ...configs] = arg;\n } else {\n plan = arg;\n configs = [];\n }\n // Track incoming dependencies\n if (parent) {\n let edgeSet = this.reverseEdges.get(plan);\n if (!edgeSet) {\n edgeSet = new Set();\n this.reverseEdges.set(plan, edgeSet);\n }\n edgeSet.add(parent);\n }\n let [phase, planRep] = this.planMap.get(plan) || [0, undefined];\n if (!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 invariant(\n !this.addStack.has(plan),\n \"LexicalBuilder: Circular dependency detected for Plan %s from %s\",\n plan.name,\n parent?.name || \"[unknown]\",\n );\n this.addStack.add(plan);\n for (const dep of plan.dependencies || []) {\n phase = Math.max(phase, 1 + this.addPlan(dep, plan));\n }\n for (const [depName, cfg] of plan.peerDependencies || []) {\n const dep = this.planNameMap.get(depName);\n if (dep) {\n phase = Math.max(\n phase,\n 1 +\n this.addPlan(\n configPlan(\n dep.plan,\n (cfg || {}) as LexicalPlanConfig<typeof dep.plan>,\n ),\n plan,\n ),\n );\n }\n }\n invariant(\n this.phases.length >= phase,\n \"LexicalBuilder: Expected phase to be no greater than phases.length\",\n );\n if (this.phases.length === phase) {\n this.phases.push(new Map());\n }\n planRep = new PlanRep(this, plan);\n invariant(\n !this.planNameMap.has(plan.name),\n \"LexicalBuilder: Multiple plans registered with name %s, names must be unique\",\n plan.name,\n );\n this.planMap.set(plan, [phase, planRep]);\n this.planNameMap.set(plan.name, planRep);\n const currentPhaseMap = this.phases[phase];\n invariant(\n currentPhaseMap !== undefined,\n \"LexicalBuilder: Expecting phase map for phase %s\",\n String(phase),\n );\n currentPhaseMap.set(plan, planRep);\n this.addStack.delete(plan);\n }\n for (const config of configs) {\n planRep.configs.add(config as Partial<LexicalPlanConfig<AnyLexicalPlan>>);\n }\n return phase;\n }\n\n *sortedPlanReps() {\n for (const phase of this.phases) {\n yield* phase.values();\n }\n }\n\n registerEditor(editor: LexicalEditor): () => void {\n const cleanups: (() => void)[] = [];\n const controller = new AbortController();\n for (const planRep of this.sortedPlanReps()) {\n cleanups.push(planRep.register(editor, controller.signal));\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() {\n const config: Pick<\n CreateEditorArgs,\n \"nodes\" | \"html\" | \"theme\" | \"disableEvents\" | \"editable\" | \"namespace\"\n > &\n Pick<AnyLexicalPlan, \"$initialEditorState\" | \"onError\"> = {\n // Prefer throwing errors rather than console.error by default\n onError: defaultOnError,\n };\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 for (const planRep of this.sortedPlanReps()) {\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 return config;\n }\n}\n","import { $getEditor, LexicalEditor } from \"lexical\";\nimport {\n AnyLexicalPlan,\n LexicalPlanDependency,\n} from \"@etrepum/lexical-builder-core\";\nimport { LexicalBuilder } from \"./LexicalBuilder\";\nimport invariant from \"./shared/invariant\";\nimport { PACKAGE_VERSION } from \"./PACKAGE_VERSION\";\nimport { PlanRep } from \"./PlanRep\";\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 RegisterState} 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 invariant(\n builder !== undefined,\n \"getPlanFromEditor: editor was not created with this build of Lexical Builder %s\",\n PACKAGE_VERSION,\n );\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\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 RegisterState} around.\n *\n * It will throw if the Editor was not built using this Plan.\n *\n * @param plan The concrete reference to a Plan used to build this editor\n * @returns The config and outputs for that Plan\n */\nexport function $getPlanDependency<Plan extends AnyLexicalPlan>(\n plan: Plan,\n): LexicalPlanDependency<Plan> {\n return getPlanDependencyFromEditor($getEditor(), plan);\n}\n","import { $getEditor, LexicalEditor } from \"lexical\";\nimport {\n AnyLexicalPlan,\n LexicalPlanDependency,\n} from \"@etrepum/lexical-builder-core\";\nimport { LexicalBuilder } from \"./LexicalBuilder\";\nimport invariant from \"./shared/invariant\";\nimport { PACKAGE_VERSION } from \"./PACKAGE_VERSION\";\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).\n *\n * Both the explicit Plan type and the name are required.\n *\n * @example\n * ```tsx\n * getPeerDependencyFromEditor<typeof import(\"@some/plan\").SomePlan>(editor, \"@some/plan\");\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 invariant(\n builder !== undefined,\n \"getPeerConfigFromEditor: editor was not created with this build of Lexical Builder %s\",\n PACKAGE_VERSION,\n );\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 * Both the explicit Plan type and the name are required.\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).\n *\n * @example\n * ```tsx\n * $getPeerDependency<typeof import(\"@some/plan\").SomePlan>(\"@some/plan\")\n * ```\n *\n * @param planName The name of the Plan\n * @returns The config and output of the Plan or undefined\n */\nexport function $getPeerDependency<Plan extends AnyLexicalPlan = never>(\n planName: Plan[\"name\"],\n): LexicalPlanDependency<Plan> | undefined {\n return getPeerDependencyFromEditor($getEditor(), planName);\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/AutoFocusPlan\",\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","/**\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\";\n\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\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 config: {},\n name: \"@lexical/dragon\",\n register: registerDragonSupport,\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\";\n\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\nimport { 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/HistoryPlan\",\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\";\n\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\n\n/**\n * A plan to register @lexical/plain-text behavior\n */\nexport const PlainTextPlan = definePlan({\n config: {},\n conflictsWith: [\"@lexical/rich-text\"],\n name: \"@lexical/plain-text\",\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\";\n\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\n\n/**\n * A plan to register @lexical/rich-text behavior and nodes\n * ({@link HeadingNode}, {@link QuoteNode})\n */\nexport const RichTextPlan = definePlan({\n config: {},\n conflictsWith: [\"@lexical/plain-text\"],\n name: \"@lexical/rich-text\",\n nodes: [HeadingNode, QuoteNode],\n register: registerRichText,\n});\n"],"names":["noop"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/PACKAGE_VERSION.ts","../src/shared/invariant.ts","../src/deepThemeMergeInPlace.ts","../src/initializeEditor.ts","../src/PlanRep.ts","../src/LexicalBuilder.ts","../src/getPlanDependencyFromEditor.ts","../src/getPeerDependencyFromEditor.ts","../src/AutoFocusPlan.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 { InitialEditorStateType } from \"@etrepum/lexical-builder-core\";\n\nimport { $createParagraphNode, $getRoot, type LexicalEditor } 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 function initializeEditor(\n editor: LexicalEditor,\n $initialEditorState: InitialEditorStateType = $defaultInitializer,\n): void {\n switch (typeof $initialEditorState) {\n case \"function\": {\n editor.update(() => $initialEditorState(editor), HISTORY_MERGE_OPTIONS);\n break;\n }\n case \"string\": {\n const parsedEditorState = editor.parseEditorState($initialEditorState);\n editor.setEditorState(parsedEditorState, HISTORY_MERGE_OPTIONS);\n break;\n }\n case \"object\": {\n if ($initialEditorState) {\n editor.setEditorState($initialEditorState, HISTORY_MERGE_OPTIONS);\n }\n break;\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 type { LexicalBuilder } from \"./LexicalBuilder\";\nimport type {\n AnyLexicalPlan,\n InitialEditorConfig,\n LexicalPlanConfig,\n LexicalPlanDependency,\n LexicalPlanInit,\n LexicalPlanOutput,\n RegisterState,\n} from \"@etrepum/lexical-builder-core\";\n\nimport invariant from \"./shared/invariant\";\n\nimport { shallowMergeConfig } from \"@etrepum/lexical-builder-core\";\nimport type { LexicalEditor } from \"lexical\";\n\nconst noop = () => {};\n/**\n * @internal\n */\nexport class PlanRep<Plan extends AnyLexicalPlan> {\n builder: LexicalBuilder;\n configs: Set<Partial<LexicalPlanConfig<Plan>>>;\n _config?: LexicalPlanConfig<Plan>;\n _dependency?: LexicalPlanDependency<Plan>;\n _output?: LexicalPlanOutput<Plan>;\n _peerNameSet?: Set<string>;\n _registerState?: RegisterState<LexicalPlanInit<Plan>>;\n _initResult?: LexicalPlanInit<Plan>;\n plan: Plan;\n constructor(builder: LexicalBuilder, plan: Plan) {\n this.builder = builder;\n this.plan = plan;\n this.configs = new Set();\n }\n register(editor: LexicalEditor, signal: AbortSignal): () => void {\n if (!this.plan.register) {\n this._output = undefined;\n return noop;\n }\n invariant(\n this._registerState !== undefined,\n \"PlanRep: register called before init\",\n );\n const cleanup = this.plan.register(\n editor,\n this.getConfig(),\n this.getRegisterState(signal),\n );\n this._output = cleanup.output as LexicalPlanOutput<Plan>;\n return cleanup;\n }\n init(editorConfig: InitialEditorConfig, signal: AbortSignal) {\n const config = this.getConfig();\n const registerState = this.getRegisterState(signal);\n if (this.plan.init) {\n this._initResult = this.plan.init(editorConfig, config, registerState);\n }\n }\n getInitResult(): LexicalPlanInit<Plan> {\n invariant(\n \"_initResult\" in this,\n \"PlanRep: getInitResult() called for Plan %s but no result was set\",\n this.plan.name,\n );\n return this._initResult!;\n }\n getRegisterState(signal: AbortSignal): RegisterState<LexicalPlanInit<Plan>> {\n if (!this._registerState) {\n this._registerState = {\n getPeer: this.getPeer.bind(this),\n getDependency: this.getDependency.bind(this),\n getDirectDependentNames: this.getDirectDependentNames.bind(this),\n getPeerNameSet: this.getPeerNameSet.bind(this),\n getInitResult: this.getInitResult.bind(this),\n signal,\n };\n }\n return this._registerState;\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 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 getDirectDependentNames() {\n return Array.from(\n this.builder.reverseEdges.get(this.plan) || [],\n (plan) => plan.name,\n );\n }\n\n getPeerNameSet() {\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 invariant(\n \"_output\" in this,\n \"Plan %s used as a dependency before registration\",\n this.plan.name,\n );\n this._dependency = {\n config: this.getConfig(),\n output: this._output!,\n };\n }\n return this._dependency;\n }\n getConfig(): LexicalPlanConfig<Plan> {\n if (this._config === undefined) {\n let config = 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 config = mergeConfig(config, cfg);\n }\n this._config = config;\n return config;\n }\n return this._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 */\nimport type {\n AnyLexicalPlan,\n AnyLexicalPlanArgument,\n EditorHandle,\n InitialEditorConfig,\n LexicalPlanConfig,\n} from \"@etrepum/lexical-builder-core\";\n\nimport {\n LexicalEditor,\n createEditor,\n type CreateEditorArgs,\n type EditorThemeClasses,\n type HTMLConfig,\n type KlassConstructor,\n type LexicalNode,\n} from \"lexical\";\nimport invariant from \"./shared/invariant\";\n\nimport { deepThemeMergeInPlace } from \"./deepThemeMergeInPlace\";\nimport { initializeEditor } from \"./initializeEditor\";\nimport { PlanRep } from \"./PlanRep\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { configPlan, definePlan } from \"@etrepum/lexical-builder-core\";\n\nconst buildersForEditors = new WeakMap<LexicalEditor, LexicalBuilder>();\n\n/**\n * Build a LexicalEditor by combining together one or more plans, optionally\n * overriding some of their configuration.\n *\n * @param plan A plan argument (a plan, or a plan with config overrides)\n * @param plans Optional additional plan arguments\n * @returns An editor handle\n *\n * @example A single root plan with multiple dependencies\n * ```ts\n * const editorHandle = 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 editorHandle = buildEditorFromPlans(\n * RichTextPlan,\n * configPlan(EmojiPlan, { emojiBaseUrl: \"/assets/emoji\" }),\n * );\n * ```\n */\nexport function buildEditorFromPlans(\n plan: AnyLexicalPlanArgument,\n ...plans: AnyLexicalPlanArgument[]\n): EditorHandle {\n const builder = new LexicalBuilder();\n builder.addPlan(plan);\n for (const otherPlan of plans) {\n builder.addPlan(otherPlan);\n }\n return builder.buildEditor();\n}\n\n/** @internal */\nfunction noop() {}\n\n/** @internal */\nclass DisposableEditorHandle implements EditorHandle {\n editor: LexicalEditor;\n dispose: () => void;\n constructor(editor: LexicalEditor, dispose: () => void) {\n this.editor = editor;\n this.dispose = () => {\n try {\n dispose();\n } finally {\n this.dispose = noop;\n }\n };\n }\n // This should be safe even if the runtime doesn't have Symbol.dispose\n // because it will just be `handle[undefined] = dispose;`\n [Symbol.dispose]() {\n this.dispose();\n }\n}\n\n/** Throw the given Error */\nfunction defaultOnError(err: Error) {\n throw err;\n}\n\n/** @internal */\nexport class LexicalBuilder {\n phases: Map<AnyLexicalPlan, PlanRep<AnyLexicalPlan>>[];\n planMap: Map<AnyLexicalPlan, [number, PlanRep<AnyLexicalPlan>]>;\n planNameMap: Map<string, PlanRep<AnyLexicalPlan>>;\n reverseEdges: Map<AnyLexicalPlan, Set<AnyLexicalPlan>>;\n addStack: Set<AnyLexicalPlan>;\n conflicts: Map<string, string>;\n\n constructor() {\n // closure compiler can't handle class initializers\n this.phases = [new Map()];\n this.planMap = new Map();\n this.planNameMap = new Map();\n this.conflicts = new Map();\n this.reverseEdges = new Map();\n this.addStack = new Set();\n }\n\n /** Look up the editor that was created by this LexicalBuilder or undefined */\n static fromEditor(editor: LexicalEditor): LexicalBuilder | undefined {\n return buildersForEditors.get(editor);\n }\n\n buildEditor(): EditorHandle {\n const controller = new AbortController();\n const { $initialEditorState, onError, ...editorConfig } =\n this.buildCreateEditorArgs(controller.signal);\n const editor = createEditor({\n ...editorConfig,\n ...(onError ? { onError: (err) => onError(err, editor) } : {}),\n });\n initializeEditor(editor, $initialEditorState);\n buildersForEditors.set(editor, this);\n return new DisposableEditorHandle(\n editor,\n mergeRegister(\n () => buildersForEditors.delete(editor),\n () => editor.setRootElement(null),\n this.registerEditor(editor, controller),\n ),\n );\n }\n\n getPlanRep<Plan extends AnyLexicalPlan>(\n plan: Plan,\n ): PlanRep<Plan> | undefined {\n const pair = this.planMap.get(plan);\n if (pair) {\n const rep: PlanRep<AnyLexicalPlan> = pair[1];\n return rep as PlanRep<Plan>;\n }\n }\n\n addPlan(arg: AnyLexicalPlanArgument, parent?: AnyLexicalPlan): number {\n let plan: AnyLexicalPlan;\n let configs: unknown[];\n if (Array.isArray(arg)) {\n [plan, ...configs] = arg;\n } else {\n plan = arg;\n configs = [];\n }\n invariant(\n typeof plan.name === \"string\",\n \"LexicalBuilder: plan name must be string, not %s\",\n typeof plan.name,\n );\n // Track incoming dependencies\n if (parent) {\n let edgeSet = this.reverseEdges.get(plan);\n if (!edgeSet) {\n edgeSet = new Set();\n this.reverseEdges.set(plan, edgeSet);\n }\n edgeSet.add(parent);\n }\n let [phase, planRep] = this.planMap.get(plan) || [0, undefined];\n if (!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 invariant(\n !this.addStack.has(plan),\n \"LexicalBuilder: Circular dependency detected for Plan %s from %s\",\n plan.name,\n parent?.name || \"[unknown]\",\n );\n this.addStack.add(plan);\n for (const dep of plan.dependencies || []) {\n phase = Math.max(phase, 1 + this.addPlan(dep, plan));\n }\n for (const [depName, cfg] of plan.peerDependencies || []) {\n const dep = this.planNameMap.get(depName);\n if (dep) {\n phase = Math.max(\n phase,\n 1 +\n this.addPlan(\n configPlan(\n dep.plan,\n (cfg || {}) as LexicalPlanConfig<typeof dep.plan>,\n ),\n plan,\n ),\n );\n }\n }\n invariant(\n this.phases.length >= phase,\n \"LexicalBuilder: Expected phase to be no greater than phases.length\",\n );\n if (this.phases.length === phase) {\n this.phases.push(new Map());\n }\n planRep = new PlanRep(this, plan);\n invariant(\n !this.planNameMap.has(plan.name),\n \"LexicalBuilder: Multiple plans registered with name %s, names must be unique\",\n plan.name,\n );\n this.planMap.set(plan, [phase, planRep]);\n this.planNameMap.set(plan.name, planRep);\n const currentPhaseMap = this.phases[phase];\n invariant(\n currentPhaseMap !== undefined,\n \"LexicalBuilder: Expecting phase map for phase %s\",\n String(phase),\n );\n currentPhaseMap.set(plan, planRep);\n this.addStack.delete(plan);\n }\n for (const config of configs) {\n planRep.configs.add(config as Partial<LexicalPlanConfig<AnyLexicalPlan>>);\n }\n return phase;\n }\n\n *sortedPlanReps() {\n for (const phase of this.phases) {\n yield* phase.values();\n }\n }\n\n registerEditor(\n editor: LexicalEditor,\n controller: AbortController,\n ): () => void {\n const cleanups: (() => void)[] = [];\n const signal = controller.signal;\n for (const planRep of this.sortedPlanReps()) {\n cleanups.push(planRep.register(editor, signal));\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 { $getEditor, LexicalEditor } from \"lexical\";\nimport {\n AnyLexicalPlan,\n LexicalPlanDependency,\n} from \"@etrepum/lexical-builder-core\";\nimport { LexicalBuilder } from \"./LexicalBuilder\";\nimport invariant from \"./shared/invariant\";\nimport { PACKAGE_VERSION } from \"./PACKAGE_VERSION\";\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 RegisterState} 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 invariant(\n builder !== undefined,\n \"getPlanFromEditor: editor was not created with this build of Lexical Builder %s\",\n PACKAGE_VERSION,\n );\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\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 RegisterState} around.\n *\n * It will throw if the Editor was not built using this Plan.\n *\n * @param plan The concrete reference to a Plan used to build this editor\n * @returns The config and outputs for that Plan\n */\nexport function $getPlanDependency<Plan extends AnyLexicalPlan>(\n plan: Plan,\n): LexicalPlanDependency<Plan> {\n return getPlanDependencyFromEditor($getEditor(), plan);\n}\n","import { $getEditor, LexicalEditor } from \"lexical\";\nimport {\n AnyLexicalPlan,\n LexicalPlanDependency,\n} from \"@etrepum/lexical-builder-core\";\nimport { LexicalBuilder } from \"./LexicalBuilder\";\nimport invariant from \"./shared/invariant\";\nimport { PACKAGE_VERSION } from \"./PACKAGE_VERSION\";\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).\n *\n * Both the explicit Plan type and the name are required.\n *\n * @example\n * ```tsx\n * getPeerDependencyFromEditor<typeof import(\"@some/plan\").SomePlan>(editor, \"@some/plan\");\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 invariant(\n builder !== undefined,\n \"getPeerConfigFromEditor: editor was not created with this build of Lexical Builder %s\",\n PACKAGE_VERSION,\n );\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 * Both the explicit Plan type and the name are required.\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).\n *\n * @example\n * ```tsx\n * $getPeerDependency<typeof import(\"@some/plan\").SomePlan>(\"@some/plan\")\n * ```\n *\n * @param planName The name of the Plan\n * @returns The config and output of the Plan or undefined\n */\nexport function $getPeerDependency<Plan extends AnyLexicalPlan = never>(\n planName: Plan[\"name\"],\n): LexicalPlanDependency<Plan> | undefined {\n return getPeerDependencyFromEditor($getEditor(), planName);\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/AutoFocusPlan\",\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","/**\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\";\n\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\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 register: registerDragonSupport,\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\";\n\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\nimport { 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/HistoryPlan\",\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\";\n\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\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 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\";\n\nimport { definePlan } from \"@etrepum/lexical-builder-core\";\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 register: registerRichText,\n});\n"],"names":["noop"],"mappings":"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"}
|