@etrepum/lexical-builder 0.0.36 → 0.0.37-nightly.20250715.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ExtensionRep.d.ts","sourceRoot":"","sources":["../src/ExtensionRep.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,oBAAoB;;;;;;;;CAQvB,CAAC;AACX,UAAU,aAAa;IACrB,EAAE,EAAE,CAAC,OAAO,oBAAoB,CAAC,CAAC,UAAU,CAAC,CAAC;CAC/C;AACD,UAAU,cAAe,SAAQ,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;IACxD,EAAE,EAAE,CAAC,OAAO,oBAAoB,CAAC,CAAC,WAAW,CAAC,CAAC;CAChD;AACD,UAAU,cAAe,SAAQ,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;IACzD,EAAE,EAAE,CAAC,OAAO,oBAAoB,CAAC,CAAC,WAAW,CAAC,CAAC;CAChD;AACD,UAAU,eAAe,CAAC,SAAS,SAAS,mBAAmB,CAC7D,SAAQ,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;IAClC,EAAE,EAAE,CAAC,OAAO,oBAAoB,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC1C,aAAa,EAAE,kBAAkB,CAAC;CACnC;AACD,UAAU,gBAAgB,CAAC,SAAS,SAAS,mBAAmB,CAC9D,SAAQ,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,eAAe,CAAC;IAChE,EAAE,EAAE,CAAC,OAAO,oBAAoB,CAAC,CAAC,aAAa,CAAC,CAAC;IACjD,UAAU,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC5C,aAAa,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;CACxE;AACD,UAAU,eAAe,CAAC,SAAS,SAAS,mBAAmB,CAC7D,SAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC/C,EAAE,EAAE,CAAC,OAAO,oBAAoB,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;CAC3C;AACD,UAAU,wBAAwB,CAAC,SAAS,SAAS,mBAAmB,CACtE,SAAQ,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC9C,EAAE,EAAE,CAAC,OAAO,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC;CAC1D;AAED,MAAM,MAAM,iBAAiB,CAAC,SAAS,SAAS,mBAAmB,IAC/D,aAAa,GACb,cAAc,GACd,cAAc,GACd,eAAe,CAAC,SAAS,CAAC,GAC1B,gBAAgB,CAAC,SAAS,CAAC,GAC3B,eAAe,CAAC,SAAS,CAAC,GAC1B,wBAAwB,CAAC,SAAS,CAAC,CAAC;AAExC,wBAAgB,kCAAkC,
|
1
|
+
{"version":3,"file":"ExtensionRep.d.ts","sourceRoot":"","sources":["../src/ExtensionRep.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getExtensionDependencyFromEditor.d.ts","sourceRoot":"","sources":["../src/getExtensionDependencyFromEditor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EACV,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AAIvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,gCAAgC,
|
1
|
+
{"version":3,"file":"getExtensionDependencyFromEditor.d.ts","sourceRoot":"","sources":["../src/getExtensionDependencyFromEditor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EACV,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AAIvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,SAAS,mBAAmB,EAErC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,GACnB,0BAA0B,CAAC,SAAS,CAAC,CASvC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getPeerDependencyFromEditor.d.ts","sourceRoot":"","sources":["../src/getPeerDependencyFromEditor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EACV,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AAIvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,SAAS,mBAAmB,GAAG,KAAK,EAE7C,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,GAC/B,0BAA0B,CAAC,SAAS,CAAC,GAAG,SAAS,CAMnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,kCAAkC,CAChD,SAAS,SAAS,mBAAmB,GAAG,KAAK,
|
1
|
+
{"version":3,"file":"getPeerDependencyFromEditor.d.ts","sourceRoot":"","sources":["../src/getPeerDependencyFromEditor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EACV,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AAIvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,SAAS,mBAAmB,GAAG,KAAK,EAE7C,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,GAC/B,0BAA0B,CAAC,SAAS,CAAC,GAAG,SAAS,CAMnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,kCAAkC,CAChD,SAAS,SAAS,mBAAmB,GAAG,KAAK,EAE7C,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,GAC/B,0BAA0B,CAAC,SAAS,CAAC,CAQvC"}
|
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.
|
12
|
+
const PACKAGE_VERSION = "0.0.37-nightly.20250715.0";
|
13
13
|
function invariant(cond, message, ...args) {
|
14
14
|
if (cond) {
|
15
15
|
return;
|
@@ -62,14 +62,18 @@ function isAfterInitializationState(state) {
|
|
62
62
|
function applyTemporaryMark(state) {
|
63
63
|
invariant(
|
64
64
|
isExactlyUnmarkedExtensionRepState(state),
|
65
|
-
"LexicalBuilder: Can not apply a temporary mark
|
65
|
+
"LexicalBuilder: Can not apply a temporary mark from state id %s (expected %s unmarked)",
|
66
|
+
String(state.id),
|
67
|
+
String(ExtensionRepStateIds.unmarked)
|
66
68
|
);
|
67
69
|
return Object.assign(state, { id: ExtensionRepStateIds.temporary });
|
68
70
|
}
|
69
71
|
function applyPermanentMark(state) {
|
70
72
|
invariant(
|
71
73
|
isExactlyTemporaryExtensionRepState(state),
|
72
|
-
"LexicalBuilder: Can not apply a permanent mark
|
74
|
+
"LexicalBuilder: Can not apply a permanent mark from state id %s (expected %s temporary)",
|
75
|
+
String(state.id),
|
76
|
+
String(ExtensionRepStateIds.temporary)
|
73
77
|
);
|
74
78
|
return Object.assign(state, { id: ExtensionRepStateIds.permanent });
|
75
79
|
}
|
@@ -153,7 +157,7 @@ class ExtensionRep {
|
|
153
157
|
const initialState = this.state;
|
154
158
|
invariant(
|
155
159
|
isExactlyPermanentExtensionRepState(initialState),
|
156
|
-
"
|
160
|
+
"ExtensionRep: Can not configure from state id %s",
|
157
161
|
String(initialState.id)
|
158
162
|
);
|
159
163
|
const initState = {
|
@@ -208,7 +212,7 @@ class ExtensionRep {
|
|
208
212
|
const state = this.state;
|
209
213
|
invariant(
|
210
214
|
isConfiguredExtensionRepState(state),
|
211
|
-
"
|
215
|
+
"ExtensionRep: getExtensionInitDependency called in state id %s (expected >= %s configured)",
|
212
216
|
String(state.id),
|
213
217
|
String(ExtensionRepStateIds.configured)
|
214
218
|
);
|
@@ -254,7 +258,9 @@ class ExtensionRep {
|
|
254
258
|
getPeerNameSet() {
|
255
259
|
let s = this._peerNameSet;
|
256
260
|
if (!s) {
|
257
|
-
s = new Set(
|
261
|
+
s = new Set(
|
262
|
+
(this.extension.peerDependencies || []).map(([name]) => name)
|
263
|
+
);
|
258
264
|
this._peerNameSet = s;
|
259
265
|
}
|
260
266
|
return s;
|
@@ -691,7 +697,7 @@ function getExtensionDependencyFromEditor(editor, extension) {
|
|
691
697
|
const rep = builder.getExtensionRep(extension);
|
692
698
|
invariant(
|
693
699
|
rep !== void 0,
|
694
|
-
"
|
700
|
+
"getExtensionDependencyFromEditor: Extension %s was not built when creating this editor",
|
695
701
|
extension.name
|
696
702
|
);
|
697
703
|
return rep.getExtensionDependency();
|
@@ -705,7 +711,7 @@ function getPeerDependencyFromEditorOrThrow(editor, extensionName) {
|
|
705
711
|
const dep = getPeerDependencyFromEditor(editor, extensionName);
|
706
712
|
invariant(
|
707
713
|
dep !== void 0,
|
708
|
-
"getPeerDependencyFromEditorOrThrow: Editor was not
|
714
|
+
"getPeerDependencyFromEditorOrThrow: Editor was not built with Extension %s",
|
709
715
|
extensionName
|
710
716
|
);
|
711
717
|
return dep;
|
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/ExtensionRep.ts","../src/InitialStateExtension.ts","../src/LexicalBuilder.ts","../src/getExtensionDependencyFromEditor.ts","../src/getPeerDependencyFromEditor.ts","../src/config.ts","../src/AutoFocusExtension.ts","../src/Store.ts","../src/registerStoreToggle.ts","../src/disabledToggle.ts","../src/DragonExtension.ts","../src/HistoryExtension.ts","../src/PlainTextExtension.ts","../src/RichTextExtension.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 AnyLexicalExtension,\n InitialEditorConfig,\n LexicalExtensionConfig,\n LexicalExtensionDependency,\n LexicalExtensionInit,\n LexicalExtensionOutput,\n RegisterCleanup,\n ExtensionInitState,\n ExtensionRegisterState,\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 ExtensionRepStateIds = {\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 ExtensionRepStateIds)[\"unmarked\"];\n}\ninterface TemporaryState extends Omit<UnmarkedState, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"temporary\"];\n}\ninterface PermanentState extends Omit<TemporaryState, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"permanent\"];\n}\ninterface ConfiguredState<Extension extends AnyLexicalExtension>\n extends Omit<PermanentState, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"configured\"];\n config: LexicalExtensionConfig<Extension>;\n registerState: ExtensionInitState;\n}\ninterface InitializedState<Extension extends AnyLexicalExtension>\n extends Omit<ConfiguredState<Extension>, \"id\" | \"registerState\"> {\n id: (typeof ExtensionRepStateIds)[\"initialized\"];\n initResult: LexicalExtensionInit<Extension>;\n registerState: ExtensionRegisterState<LexicalExtensionInit<Extension>>;\n}\ninterface RegisteredState<Extension extends AnyLexicalExtension>\n extends Omit<InitializedState<Extension>, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"registered\"];\n output: LexicalExtensionOutput<Extension>;\n}\ninterface AfterInitializationState<Extension extends AnyLexicalExtension>\n extends Omit<RegisteredState<Extension>, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"afterInitialization\"];\n}\n\nexport type ExtensionRepState<Extension extends AnyLexicalExtension> =\n | UnmarkedState\n | TemporaryState\n | PermanentState\n | ConfiguredState<Extension>\n | InitializedState<Extension>\n | RegisteredState<Extension>\n | AfterInitializationState<Extension>;\n\nexport function isExactlyUnmarkedExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is UnmarkedState {\n return state.id === ExtensionRepStateIds.unmarked;\n}\nfunction isExactlyTemporaryExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is TemporaryState {\n return state.id === ExtensionRepStateIds.temporary;\n}\nexport function isExactlyPermanentExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is PermanentState {\n return state.id === ExtensionRepStateIds.permanent;\n}\nfunction isInitializedExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is\n | InitializedState<Extension>\n | RegisteredState<Extension>\n | AfterInitializationState<Extension> {\n return state.id >= ExtensionRepStateIds.initialized;\n}\nfunction isConfiguredExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is\n | ConfiguredState<Extension>\n | InitializedState<Extension>\n | RegisteredState<Extension>\n | AfterInitializationState<Extension> {\n return state.id >= ExtensionRepStateIds.configured;\n}\nfunction isRegisteredExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is RegisteredState<Extension> | AfterInitializationState<Extension> {\n return state.id >= ExtensionRepStateIds.registered;\n}\nfunction isAfterInitializationState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is AfterInitializationState<Extension> {\n return state.id >= ExtensionRepStateIds.afterInitialization;\n}\nexport function applyTemporaryMark<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): TemporaryState {\n invariant(\n isExactlyUnmarkedExtensionRepState(state),\n \"LexicalBuilder: Can not apply a temporary mark to state\",\n );\n return Object.assign(state, { id: ExtensionRepStateIds.temporary });\n}\nexport function applyPermanentMark<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): PermanentState {\n invariant(\n isExactlyTemporaryExtensionRepState(state),\n \"LexicalBuilder: Can not apply a permanent mark to state\",\n );\n return Object.assign(state, { id: ExtensionRepStateIds.permanent });\n}\nexport function applyConfiguredState<Extension extends AnyLexicalExtension>(\n state: PermanentState,\n config: LexicalExtensionConfig<Extension>,\n registerState: ExtensionInitState,\n): ConfiguredState<Extension> {\n return Object.assign(state, {\n id: ExtensionRepStateIds.configured,\n config,\n registerState,\n });\n}\nexport function applyInitializedState<Extension extends AnyLexicalExtension>(\n state: ConfiguredState<Extension>,\n initResult: LexicalExtensionInit<Extension>,\n registerState: ExtensionRegisterState<Extension>,\n): InitializedState<Extension> {\n return Object.assign(state, {\n id: ExtensionRepStateIds.initialized,\n initResult,\n registerState,\n });\n}\nexport function applyRegisteredState<Extension extends AnyLexicalExtension>(\n state: InitializedState<Extension>,\n cleanup?: RegisterCleanup<LexicalExtensionOutput<Extension>> | undefined,\n) {\n return Object.assign(state, {\n id: ExtensionRepStateIds.registered,\n output: cleanup ? cleanup.output : undefined,\n });\n}\nexport function applyAfterInitializationState<Extension extends AnyLexicalExtension>(\n state: RegisteredState<Extension>,\n): AfterInitializationState<Extension> {\n return Object.assign(state, { id: ExtensionRepStateIds.afterInitialization });\n}\n\nconst emptySet: ReadonlySet<string> = new Set();\n\n/**\n * @internal\n */\nexport class ExtensionRep<Extension extends AnyLexicalExtension> {\n builder: LexicalBuilder;\n configs: Set<Partial<LexicalExtensionConfig<Extension>>>;\n _dependency?: LexicalExtensionDependency<Extension>;\n _output?: LexicalExtensionOutput<Extension>;\n _peerNameSet?: Set<string>;\n extension: Extension;\n state: ExtensionRepState<Extension>;\n constructor(builder: LexicalBuilder, extension: Extension) {\n this.builder = builder;\n this.extension = extension;\n this.configs = new Set();\n this.state = { id: ExtensionRepStateIds.unmarked };\n }\n\n afterInitialization(editor: LexicalEditor): undefined | (() => void) {\n const state = this.state;\n invariant(\n state.id === ExtensionRepStateIds.registered,\n \"ExtensionRep: afterInitialization called in state id %s (expected %s registered)\",\n String(state.id),\n String(ExtensionRepStateIds.registered),\n );\n let rval: undefined | (() => void);\n if (this.extension.afterInitialization) {\n rval = this.extension.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 === ExtensionRepStateIds.initialized,\n \"ExtensionRep: register called in state id %s (expected %s initialized)\",\n String(state.id),\n String(ExtensionRepStateIds.initialized),\n );\n let cleanup: undefined | RegisterCleanup<LexicalExtensionOutput<Extension>>;\n if (this.extension.register) {\n cleanup = this.extension.register(\n editor,\n state.config,\n state.registerState,\n ) as RegisterCleanup<LexicalExtensionOutput<Extension>>;\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 isExactlyPermanentExtensionRepState(initialState),\n \"LexicalBuilder: Can not configure from state id %s\",\n String(initialState.id),\n );\n const initState: ExtensionInitState = {\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: ExtensionRegisterState<Extension> = {\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: LexicalExtensionInit<Extension> | undefined;\n if (this.extension.init) {\n initResult = this.extension.init(\n editorConfig,\n state.config,\n initState,\n ) as LexicalExtensionInit<Extension>;\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- false positive\n this.state = applyInitializedState(state, initResult!, registerState);\n }\n getInitResult(): LexicalExtensionInit<Extension> {\n invariant(\n this.extension.init !== undefined,\n \"ExtensionRep: getInitResult() called for Extension %s that does not define init\",\n this.extension.name,\n );\n const state = this.state;\n invariant(\n isInitializedExtensionRepState(state),\n \"ExtensionRep: getInitResult() called for ExtensionRep in state id %s < %s (initialized)\",\n String(state.id),\n String(ExtensionRepStateIds.initialized),\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- any\n return state.initResult;\n }\n\n getInitPeer<PeerExtension extends AnyLexicalExtension = never>(\n name: PeerExtension[\"name\"],\n ): undefined | Omit<LexicalExtensionDependency<PeerExtension>, \"output\"> {\n const rep = this.builder.extensionNameMap.get(name);\n return rep ? rep.getExtensionInitDependency() : undefined;\n }\n\n getExtensionInitDependency(): Omit<LexicalExtensionDependency<Extension>, \"output\"> {\n const state = this.state;\n invariant(\n isConfiguredExtensionRepState(state),\n \"LexicalExtensionBuilder: getExtensionInitDependency called in state id %s (expected >= %s configured)\",\n String(state.id),\n String(ExtensionRepStateIds.configured),\n );\n return { config: state.config };\n }\n\n getPeer<PeerExtension extends AnyLexicalExtension = never>(\n name: PeerExtension[\"name\"],\n ): undefined | LexicalExtensionDependency<PeerExtension> {\n const rep = this.builder.extensionNameMap.get(name);\n return rep\n ? (rep.getExtensionDependency() as LexicalExtensionDependency<PeerExtension>)\n : undefined;\n }\n\n getInitDependency<Dependency extends AnyLexicalExtension>(\n dep: Dependency,\n ): Omit<LexicalExtensionDependency<Dependency>, \"output\"> {\n const rep = this.builder.getExtensionRep(dep);\n invariant(\n rep !== undefined,\n \"LexicalExtensionBuilder: Extension %s missing dependency extension %s to be in registry\",\n this.extension.name,\n dep.name,\n );\n return rep.getExtensionInitDependency();\n }\n\n getDependency<Dependency extends AnyLexicalExtension>(\n dep: Dependency,\n ): LexicalExtensionDependency<Dependency> {\n const rep = this.builder.getExtensionRep(dep);\n invariant(\n rep !== undefined,\n \"LexicalExtensionBuilder: Extension %s missing dependency extension %s to be in registry\",\n this.extension.name,\n dep.name,\n );\n return rep.getExtensionDependency();\n }\n\n getState(): AfterInitializationState<Extension> {\n const state = this.state;\n invariant(\n isAfterInitializationState(state),\n \"ExtensionRep getState called in state id %s (expected %s afterInitialization)\",\n String(state.id),\n String(ExtensionRepStateIds.afterInitialization),\n );\n return state;\n }\n\n getDirectDependentNames(): ReadonlySet<string> {\n return this.builder.incomingEdges.get(this.extension.name) || emptySet;\n }\n\n getPeerNameSet(): ReadonlySet<string> {\n let s = this._peerNameSet;\n if (!s) {\n s = new Set((this.extension.peerDependencies || []).map(([name]) => name));\n this._peerNameSet = s;\n }\n return s;\n }\n\n getExtensionDependency(): LexicalExtensionDependency<Extension> {\n if (!this._dependency) {\n const state = this.state;\n invariant(\n isRegisteredExtensionRepState(state),\n \"Extension %s used as a dependency before registration\",\n this.extension.name,\n );\n this._dependency = {\n config: state.config,\n output: state.output,\n };\n }\n return this._dependency;\n }\n mergeConfigs(): LexicalExtensionConfig<Extension> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- LexicalExtensionConfig<Extension> is any\n let config: LexicalExtensionConfig<Extension> = this.extension.config || {};\n const mergeConfig = this.extension.mergeConfig\n ? this.extension.mergeConfig.bind(this.extension)\n : shallowMergeConfig;\n for (const cfg of this.configs) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- LexicalExtensionConfig<Extension> 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 { defineExtension, 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 InitialStateExtension = defineExtension({\n name: \"@etrepum/lexical-builder/InitialState\",\n // These are automatically added by createEditor, we add them here so they are\n // visible during extensionRep.init so extensions 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 AnyLexicalExtension,\n AnyLexicalExtensionArgument,\n LexicalEditorWithDispose,\n InitialEditorConfig,\n LexicalExtensionConfig,\n AnyNormalizedLexicalExtensionArgument,\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 invariant from \"./shared/invariant\";\nimport { deepThemeMergeInPlace } from \"./deepThemeMergeInPlace\";\nimport {\n ExtensionRep,\n applyPermanentMark,\n applyTemporaryMark,\n isExactlyPermanentExtensionRepState,\n isExactlyUnmarkedExtensionRepState,\n} from \"./ExtensionRep\";\nimport { PACKAGE_VERSION } from \"./PACKAGE_VERSION\";\nimport { InitialStateExtension } from \"./InitialStateExtension\";\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 extensions, optionally\n * overriding some of their configuration.\n *\n * @param extensions - Extension arguments (extensions or extensions with config overrides)\n * @returns An editor handle\n *\n * @example A single root extension with multiple dependencies\n * ```ts\n * const editor = buildEditorFromExtensions(\n * defineExtension({\n * name: \"[root]\",\n * dependencies: [\n * RichTextExtension,\n * configExtension(EmojiExtension, { 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 = buildEditorFromExtensions(\n * RichTextExtension,\n * configExtension(EmojiExtension, { emojiBaseUrl: \"/assets/emoji\" }),\n * );\n * ```\n */\nexport function buildEditorFromExtensions(\n ...extensions: AnyLexicalExtensionArgument[]\n): LexicalEditorWithDispose {\n return LexicalBuilder.fromExtensions(extensions).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\nfunction normalizeExtensionArgument(\n arg: AnyLexicalExtensionArgument,\n): AnyNormalizedLexicalExtensionArgument {\n return Array.isArray(arg) ? arg : [arg];\n}\n\n/** @internal */\nexport class LexicalBuilder {\n roots: readonly AnyNormalizedLexicalExtensionArgument[];\n extensionNameMap: Map<string, ExtensionRep<AnyLexicalExtension>>;\n outgoingConfigEdges: Map<\n string,\n Map<string, LexicalExtensionConfig<AnyLexicalExtension>[]>\n >;\n incomingEdges: Map<string, Set<string>>;\n conflicts: Map<string, string>;\n _sortedExtensionReps?: readonly ExtensionRep<AnyLexicalExtension>[];\n PACKAGE_VERSION: string;\n\n constructor(roots: AnyNormalizedLexicalExtensionArgument[]) {\n this.outgoingConfigEdges = new Map();\n this.incomingEdges = new Map();\n this.extensionNameMap = new Map();\n this.conflicts = new Map();\n this.PACKAGE_VERSION = PACKAGE_VERSION;\n this.roots = roots;\n for (const extension of roots) {\n this.addExtension(extension);\n }\n }\n\n static fromExtensions(extensions: AnyLexicalExtensionArgument[]): LexicalBuilder {\n const roots = [normalizeExtensionArgument(InitialStateExtension)];\n for (const extension of extensions) {\n roots.push(normalizeExtensionArgument(extension));\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 getExtensionRep<Extension extends AnyLexicalExtension>(\n extension: Extension,\n ): ExtensionRep<Extension> | undefined {\n const rep = this.extensionNameMap.get(extension.name);\n if (rep) {\n invariant(\n rep.extension === extension,\n \"LexicalBuilder: A registered extension with name %s exists but does not match the given extension\",\n extension.name,\n );\n return rep as ExtensionRep<Extension>;\n }\n }\n\n addEdge(\n fromExtensionName: string,\n toExtensionName: string,\n configs: LexicalExtensionConfig<AnyLexicalExtension>[],\n ) {\n const outgoing = this.outgoingConfigEdges.get(fromExtensionName);\n if (outgoing) {\n outgoing.set(toExtensionName, configs);\n } else {\n this.outgoingConfigEdges.set(\n fromExtensionName,\n new Map([[toExtensionName, configs]]),\n );\n }\n const incoming = this.incomingEdges.get(toExtensionName);\n if (incoming) {\n incoming.add(fromExtensionName);\n } else {\n this.incomingEdges.set(toExtensionName, new Set([fromExtensionName]));\n }\n }\n\n addExtension(arg: AnyLexicalExtensionArgument) {\n invariant(\n this._sortedExtensionReps === undefined,\n \"LexicalBuilder: addExtension called after finalization\",\n );\n const normalized = normalizeExtensionArgument(arg);\n const [extension] = normalized;\n invariant(\n typeof extension.name === \"string\",\n \"LexicalBuilder: extension name must be string, not %s\",\n typeof extension.name,\n );\n let extensionRep = this.extensionNameMap.get(extension.name);\n invariant(\n extensionRep === undefined || extensionRep.extension === extension,\n \"LexicalBuilder: Multiple extensions registered with name %s, names must be unique\",\n extension.name,\n );\n if (!extensionRep) {\n extensionRep = new ExtensionRep(this, extension);\n this.extensionNameMap.set(extension.name, extensionRep);\n const hasConflict = this.conflicts.get(extension.name);\n if (typeof hasConflict === \"string\") {\n invariant(\n false,\n \"LexicalBuilder: extension %s conflicts with %s\",\n extension.name,\n hasConflict,\n );\n }\n for (const name of extension.conflictsWith || []) {\n invariant(\n !this.extensionNameMap.has(name),\n \"LexicalBuilder: extension %s conflicts with %s\",\n extension.name,\n name,\n );\n this.conflicts.set(name, extension.name);\n }\n for (const dep of extension.dependencies || []) {\n const normDep = normalizeExtensionArgument(dep);\n this.addEdge(extension.name, normDep[0].name, normDep.slice(1));\n this.addExtension(normDep);\n }\n for (const [depName, config] of extension.peerDependencies || []) {\n this.addEdge(extension.name, depName, config ? [config] : []);\n }\n }\n }\n\n sortedExtensionReps(): readonly ExtensionRep<AnyLexicalExtension>[] {\n if (this._sortedExtensionReps) {\n return this._sortedExtensionReps;\n }\n // depth-first search based topological DAG sort\n // https://en.wikipedia.org/wiki/Topological_sorting\n const sortedExtensionReps: ExtensionRep<AnyLexicalExtension>[] = [];\n const visit = (rep: ExtensionRep<AnyLexicalExtension>, fromExtensionName?: string) => {\n let mark = rep.state;\n if (isExactlyPermanentExtensionRepState(mark)) {\n return;\n }\n const extensionName = rep.extension.name;\n invariant(\n isExactlyUnmarkedExtensionRepState(mark),\n \"LexicalBuilder: Circular dependency detected for Extension %s from %s\",\n extensionName,\n fromExtensionName || \"[unknown]\",\n );\n mark = applyTemporaryMark(mark);\n rep.state = mark;\n const outgoingConfigEdges = this.outgoingConfigEdges.get(extensionName);\n if (outgoingConfigEdges) {\n for (const toExtensionName of outgoingConfigEdges.keys()) {\n const toRep = this.extensionNameMap.get(toExtensionName);\n // may be undefined for an optional peer dependency\n if (toRep) {\n visit(toRep, extensionName);\n }\n }\n }\n mark = applyPermanentMark(mark);\n rep.state = mark;\n sortedExtensionReps.push(rep);\n };\n for (const rep of this.extensionNameMap.values()) {\n if (isExactlyUnmarkedExtensionRepState(rep.state)) {\n visit(rep);\n }\n }\n for (const rep of sortedExtensionReps) {\n for (const [toExtensionName, configs] of this.outgoingConfigEdges.get(\n rep.extension.name,\n ) || []) {\n if (configs.length > 0) {\n const toRep = this.extensionNameMap.get(toExtensionName);\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 [extension, ...configs] of this.roots) {\n if (configs.length > 0) {\n const toRep = this.extensionNameMap.get(extension.name);\n invariant(\n toRep !== undefined,\n \"LexicalBuilder: Expecting existing ExtensionRep for %s\",\n extension.name,\n );\n for (const config of configs) {\n toRep.configs.add(config);\n }\n }\n }\n this._sortedExtensionReps = sortedExtensionReps;\n return this._sortedExtensionReps;\n }\n\n registerEditor(\n editor: LexicalEditor,\n controller: AbortController,\n ): () => void {\n const cleanups: (() => void)[] = [];\n const extensionReps = this.sortedExtensionReps();\n for (const extensionRep of extensionReps) {\n const cleanup = extensionRep.register(editor);\n if (cleanup) {\n cleanups.push(cleanup);\n }\n }\n for (const extensionRep of extensionReps) {\n const cleanup = extensionRep.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 ExtensionRep<AnyLexicalExtension>\n >();\n const htmlExport: NonNullable<HTMLConfig[\"export\"]> = new Map();\n const htmlImport: NonNullable<HTMLConfig[\"import\"]> = {};\n const theme: EditorThemeClasses = {};\n const extensionReps = this.sortedExtensionReps();\n for (const extensionRep of extensionReps) {\n const { extension } = extensionRep;\n if (extension.onError !== undefined) {\n config.onError = extension.onError;\n }\n if (extension.disableEvents !== undefined) {\n config.disableEvents = extension.disableEvents;\n }\n if (extension.parentEditor !== undefined) {\n config.parentEditor = extension.parentEditor;\n }\n if (extension.editable !== undefined) {\n config.editable = extension.editable;\n }\n if (extension.namespace !== undefined) {\n config.namespace = extension.namespace;\n }\n if (extension.$initialEditorState !== undefined) {\n config.$initialEditorState = extension.$initialEditorState;\n }\n if (extension.nodes) {\n for (const node of extension.nodes) {\n if (typeof node !== \"function\") {\n const conflictExtension = replacedNodes.get(node.replace);\n if (conflictExtension) {\n invariant(\n false,\n \"LexicalBuilder: Extension %s can not register replacement for node %s because %s already did\",\n extension.name,\n node.replace.name,\n conflictExtension.extension.name,\n );\n }\n replacedNodes.set(node.replace, extensionRep);\n }\n nodes.add(node);\n }\n }\n if (extension.html) {\n if (extension.html.export) {\n for (const [k, v] of extension.html.export.entries()) {\n htmlExport.set(k, v);\n }\n }\n if (extension.html.import) {\n Object.assign(htmlImport, extension.html.import);\n }\n }\n if (extension.theme) {\n deepThemeMergeInPlace(theme, extension.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 extensionRep of extensionReps) {\n extensionRep.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 AnyLexicalExtension,\n LexicalExtensionDependency,\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 an Extension 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 ExtensionRegisterState} around.\n *\n * It will throw if the Editor was not built using this Extension.\n *\n * @param editor - The editor that was built using extension\n * @param extension - The concrete reference to an Extension used to build this editor\n * @returns The config and output for that Extension\n */\nexport function getExtensionDependencyFromEditor<Extension extends AnyLexicalExtension>(\n editor: LexicalEditor,\n extension: Extension,\n): LexicalExtensionDependency<Extension> {\n const builder = LexicalBuilder.fromEditor(editor);\n const rep = builder.getExtensionRep(extension);\n invariant(\n rep !== undefined,\n \"getExtensionFromEditor: Extension %s was not built when creating this editor\",\n extension.name,\n );\n return rep.getExtensionDependency();\n}\n","import type { LexicalEditor } from \"lexical\";\nimport type {\n AnyLexicalExtension,\n LexicalExtensionDependency,\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 an Extension 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 Extension for some reason (e.g. it is an optional peer dependency, or you\n * are avoiding a circular import).\n *\n * Both the explicit Extension type and the name are required.\n *\n * @example\n * ```tsx\n * import type { EmojiExtension } from \"@etrepum/lexical-emoji-extension\";\n * getPeerDependencyFromEditor<typeof EmojiExtension>(editor, \"@etrepum/lexical-emoji-extension/Emoji\");\n * ```\n\n * @param editor - The editor that may have been built using extension\n * @param extensionName - The name of the Extension\n * @returns The config and output of the Extension or undefined\n */\nexport function getPeerDependencyFromEditor<\n Extension extends AnyLexicalExtension = never,\n>(\n editor: LexicalEditor,\n extensionName: Extension[\"name\"],\n): LexicalExtensionDependency<Extension> | undefined {\n const builder = LexicalBuilder.fromEditor(editor);\n const peer = builder.extensionNameMap.get(extensionName);\n return peer\n ? (peer.getExtensionDependency() as LexicalExtensionDependency<Extension>)\n : undefined;\n}\n\n/**\n * Get the finalized config and output of an Extension 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 Extension for some reason (e.g. it is an optional peer dependency, or you\n * are avoiding a circular import).\n *\n * Both the explicit Extension type and the name are required.\n *\n * @example\n * ```tsx\n * import type { EmojiExtension } from \"./EmojiExtension\";\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 EmojiExtension>(\n * editor || $getEditor(),\n * \"@etrepum/lexical-emoji-extension/Emoji\",\n * ).config.emojiClass,\n * );\n * return dom;\n * }\n * }\n * ```\n\n * @param editor - The editor that may have been built using extension\n * @param extensionName - The name of the Extension\n * @returns The config and output of the Extension\n */\nexport function getPeerDependencyFromEditorOrThrow<\n Extension extends AnyLexicalExtension = never,\n>(editor: LexicalEditor, extensionName: Extension[\"name\"]): LexicalExtensionDependency<Extension> {\n const dep = getPeerDependencyFromEditor<Extension>(editor, extensionName);\n invariant(\n dep !== undefined,\n \"getPeerDependencyFromEditorOrThrow: Editor was not build with Extension %s\",\n extensionName,\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 { defineExtension, 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 * An Extension to focus the LexicalEditor when the root element is set\n * (typically only when the editor is first created).\n */\nexport const AutoFocusExtension = defineExtension({\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 type { ReadableStore } from \"./Store\";\n\nexport function registerStoreToggle<T>(\n store: ReadableStore<T>,\n isEnabled: (value: T) => boolean,\n register: () => () => void,\n): () => void {\n let cleanup: null | (() => void) = null;\n const performCleanup = () => {\n cleanup?.();\n cleanup = null;\n };\n return mergeRegister(\n performCleanup,\n store.subscribe((value) => {\n performCleanup();\n if (isEnabled(value)) {\n cleanup = register();\n }\n }),\n );\n}\n","import { Store, type WritableStore } from \"./Store\";\nimport { registerStoreToggle } from \"./registerStoreToggle\";\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 [\n { disabled },\n registerStoreToggle(disabled, (v) => !v, opts.register),\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 defineExtension,\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 DragonExtension = defineExtension({\n name: \"@lexical/dragon\",\n config: safeCast<DragonConfig>({ disabled: typeof window === \"undefined\" }),\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 configExtension,\n defineExtension,\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 HistoryExtension = defineExtension({\n config: safeCast<HistoryConfig>({\n createInitialHistoryState: createEmptyHistoryState,\n delay: 300,\n disabled: typeof window === \"undefined\",\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 HistoryExtension>(editor, HistoryExtension.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 SharedHistoryExtension = defineExtension({\n name: \"@etrepum/lexical-builder/SharedHistory\",\n dependencies: [configExtension(HistoryExtension, { disabled: true })],\n init(editorConfig, _config, state) {\n // Configure the peer dependency based on the parent editor's history\n const { config } = state.getDependency(HistoryExtension);\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 extension\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(HistoryExtension).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 { defineExtension } from \"@etrepum/lexical-builder-core\";\nimport { DragonExtension } from \"./DragonExtension\";\n\n/**\n * An extension to register \\@lexical/plain-text behavior\n */\nexport const PlainTextExtension = defineExtension({\n conflictsWith: [\"@lexical/rich-text\"],\n name: \"@lexical/plain-text\",\n dependencies: [DragonExtension],\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 { defineExtension } from \"@etrepum/lexical-builder-core\";\nimport { DragonExtension } from \"./DragonExtension\";\n\n/**\n * An extension to register \\@lexical/rich-text behavior and nodes\n * ({@link HeadingNode}, {@link QuoteNode})\n */\nexport const RichTextExtension = defineExtension({\n conflictsWith: [\"@lexical/plain-text\"],\n name: \"@lexical/rich-text\",\n nodes: [HeadingNode, QuoteNode],\n dependencies: [DragonExtension],\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/ExtensionRep.ts","../src/InitialStateExtension.ts","../src/LexicalBuilder.ts","../src/getExtensionDependencyFromEditor.ts","../src/getPeerDependencyFromEditor.ts","../src/config.ts","../src/AutoFocusExtension.ts","../src/Store.ts","../src/registerStoreToggle.ts","../src/disabledToggle.ts","../src/DragonExtension.ts","../src/HistoryExtension.ts","../src/PlainTextExtension.ts","../src/RichTextExtension.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 AnyLexicalExtension,\n InitialEditorConfig,\n LexicalExtensionConfig,\n LexicalExtensionDependency,\n LexicalExtensionInit,\n LexicalExtensionOutput,\n RegisterCleanup,\n ExtensionInitState,\n ExtensionRegisterState,\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 ExtensionRepStateIds = {\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 ExtensionRepStateIds)[\"unmarked\"];\n}\ninterface TemporaryState extends Omit<UnmarkedState, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"temporary\"];\n}\ninterface PermanentState extends Omit<TemporaryState, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"permanent\"];\n}\ninterface ConfiguredState<Extension extends AnyLexicalExtension>\n extends Omit<PermanentState, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"configured\"];\n config: LexicalExtensionConfig<Extension>;\n registerState: ExtensionInitState;\n}\ninterface InitializedState<Extension extends AnyLexicalExtension>\n extends Omit<ConfiguredState<Extension>, \"id\" | \"registerState\"> {\n id: (typeof ExtensionRepStateIds)[\"initialized\"];\n initResult: LexicalExtensionInit<Extension>;\n registerState: ExtensionRegisterState<LexicalExtensionInit<Extension>>;\n}\ninterface RegisteredState<Extension extends AnyLexicalExtension>\n extends Omit<InitializedState<Extension>, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"registered\"];\n output: LexicalExtensionOutput<Extension>;\n}\ninterface AfterInitializationState<Extension extends AnyLexicalExtension>\n extends Omit<RegisteredState<Extension>, \"id\"> {\n id: (typeof ExtensionRepStateIds)[\"afterInitialization\"];\n}\n\nexport type ExtensionRepState<Extension extends AnyLexicalExtension> =\n | UnmarkedState\n | TemporaryState\n | PermanentState\n | ConfiguredState<Extension>\n | InitializedState<Extension>\n | RegisteredState<Extension>\n | AfterInitializationState<Extension>;\n\nexport function isExactlyUnmarkedExtensionRepState<\n Extension extends AnyLexicalExtension,\n>(state: ExtensionRepState<Extension>): state is UnmarkedState {\n return state.id === ExtensionRepStateIds.unmarked;\n}\nfunction isExactlyTemporaryExtensionRepState<\n Extension extends AnyLexicalExtension,\n>(state: ExtensionRepState<Extension>): state is TemporaryState {\n return state.id === ExtensionRepStateIds.temporary;\n}\nexport function isExactlyPermanentExtensionRepState<\n Extension extends AnyLexicalExtension,\n>(state: ExtensionRepState<Extension>): state is PermanentState {\n return state.id === ExtensionRepStateIds.permanent;\n}\nfunction isInitializedExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is\n | InitializedState<Extension>\n | RegisteredState<Extension>\n | AfterInitializationState<Extension> {\n return state.id >= ExtensionRepStateIds.initialized;\n}\nfunction isConfiguredExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is\n | ConfiguredState<Extension>\n | InitializedState<Extension>\n | RegisteredState<Extension>\n | AfterInitializationState<Extension> {\n return state.id >= ExtensionRepStateIds.configured;\n}\nfunction isRegisteredExtensionRepState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is RegisteredState<Extension> | AfterInitializationState<Extension> {\n return state.id >= ExtensionRepStateIds.registered;\n}\nfunction isAfterInitializationState<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): state is AfterInitializationState<Extension> {\n return state.id >= ExtensionRepStateIds.afterInitialization;\n}\nexport function applyTemporaryMark<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): TemporaryState {\n invariant(\n isExactlyUnmarkedExtensionRepState(state),\n \"LexicalBuilder: Can not apply a temporary mark from state id %s (expected %s unmarked)\",\n String(state.id),\n String(ExtensionRepStateIds.unmarked),\n );\n return Object.assign(state, { id: ExtensionRepStateIds.temporary });\n}\nexport function applyPermanentMark<Extension extends AnyLexicalExtension>(\n state: ExtensionRepState<Extension>,\n): PermanentState {\n invariant(\n isExactlyTemporaryExtensionRepState(state),\n \"LexicalBuilder: Can not apply a permanent mark from state id %s (expected %s temporary)\",\n String(state.id),\n String(ExtensionRepStateIds.temporary),\n );\n return Object.assign(state, { id: ExtensionRepStateIds.permanent });\n}\nexport function applyConfiguredState<Extension extends AnyLexicalExtension>(\n state: PermanentState,\n config: LexicalExtensionConfig<Extension>,\n registerState: ExtensionInitState,\n): ConfiguredState<Extension> {\n return Object.assign(state, {\n id: ExtensionRepStateIds.configured,\n config,\n registerState,\n });\n}\nexport function applyInitializedState<Extension extends AnyLexicalExtension>(\n state: ConfiguredState<Extension>,\n initResult: LexicalExtensionInit<Extension>,\n registerState: ExtensionRegisterState<Extension>,\n): InitializedState<Extension> {\n return Object.assign(state, {\n id: ExtensionRepStateIds.initialized,\n initResult,\n registerState,\n });\n}\nexport function applyRegisteredState<Extension extends AnyLexicalExtension>(\n state: InitializedState<Extension>,\n cleanup?: RegisterCleanup<LexicalExtensionOutput<Extension>> | undefined,\n) {\n return Object.assign(state, {\n id: ExtensionRepStateIds.registered,\n output: cleanup ? cleanup.output : undefined,\n });\n}\nexport function applyAfterInitializationState<\n Extension extends AnyLexicalExtension,\n>(state: RegisteredState<Extension>): AfterInitializationState<Extension> {\n return Object.assign(state, { id: ExtensionRepStateIds.afterInitialization });\n}\n\nconst emptySet: ReadonlySet<string> = new Set();\n\n/**\n * @internal\n */\nexport class ExtensionRep<Extension extends AnyLexicalExtension> {\n builder: LexicalBuilder;\n configs: Set<Partial<LexicalExtensionConfig<Extension>>>;\n _dependency?: LexicalExtensionDependency<Extension>;\n _output?: LexicalExtensionOutput<Extension>;\n _peerNameSet?: Set<string>;\n extension: Extension;\n state: ExtensionRepState<Extension>;\n constructor(builder: LexicalBuilder, extension: Extension) {\n this.builder = builder;\n this.extension = extension;\n this.configs = new Set();\n this.state = { id: ExtensionRepStateIds.unmarked };\n }\n\n afterInitialization(editor: LexicalEditor): undefined | (() => void) {\n const state = this.state;\n invariant(\n state.id === ExtensionRepStateIds.registered,\n \"ExtensionRep: afterInitialization called in state id %s (expected %s registered)\",\n String(state.id),\n String(ExtensionRepStateIds.registered),\n );\n let rval: undefined | (() => void);\n if (this.extension.afterInitialization) {\n rval = this.extension.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 === ExtensionRepStateIds.initialized,\n \"ExtensionRep: register called in state id %s (expected %s initialized)\",\n String(state.id),\n String(ExtensionRepStateIds.initialized),\n );\n let cleanup: undefined | RegisterCleanup<LexicalExtensionOutput<Extension>>;\n if (this.extension.register) {\n cleanup = this.extension.register(\n editor,\n state.config,\n state.registerState,\n ) as RegisterCleanup<LexicalExtensionOutput<Extension>>;\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 isExactlyPermanentExtensionRepState(initialState),\n \"ExtensionRep: Can not configure from state id %s\",\n String(initialState.id),\n );\n const initState: ExtensionInitState = {\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: ExtensionRegisterState<Extension> = {\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: LexicalExtensionInit<Extension> | undefined;\n if (this.extension.init) {\n initResult = this.extension.init(\n editorConfig,\n state.config,\n initState,\n ) as LexicalExtensionInit<Extension>;\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- false positive\n this.state = applyInitializedState(state, initResult!, registerState);\n }\n getInitResult(): LexicalExtensionInit<Extension> {\n invariant(\n this.extension.init !== undefined,\n \"ExtensionRep: getInitResult() called for Extension %s that does not define init\",\n this.extension.name,\n );\n const state = this.state;\n invariant(\n isInitializedExtensionRepState(state),\n \"ExtensionRep: getInitResult() called for ExtensionRep in state id %s < %s (initialized)\",\n String(state.id),\n String(ExtensionRepStateIds.initialized),\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- any\n return state.initResult;\n }\n\n getInitPeer<PeerExtension extends AnyLexicalExtension = never>(\n name: PeerExtension[\"name\"],\n ): undefined | Omit<LexicalExtensionDependency<PeerExtension>, \"output\"> {\n const rep = this.builder.extensionNameMap.get(name);\n return rep ? rep.getExtensionInitDependency() : undefined;\n }\n\n getExtensionInitDependency(): Omit<\n LexicalExtensionDependency<Extension>,\n \"output\"\n > {\n const state = this.state;\n invariant(\n isConfiguredExtensionRepState(state),\n \"ExtensionRep: getExtensionInitDependency called in state id %s (expected >= %s configured)\",\n String(state.id),\n String(ExtensionRepStateIds.configured),\n );\n return { config: state.config };\n }\n\n getPeer<PeerExtension extends AnyLexicalExtension = never>(\n name: PeerExtension[\"name\"],\n ): undefined | LexicalExtensionDependency<PeerExtension> {\n const rep = this.builder.extensionNameMap.get(name);\n return rep\n ? (rep.getExtensionDependency() as LexicalExtensionDependency<PeerExtension>)\n : undefined;\n }\n\n getInitDependency<Dependency extends AnyLexicalExtension>(\n dep: Dependency,\n ): Omit<LexicalExtensionDependency<Dependency>, \"output\"> {\n const rep = this.builder.getExtensionRep(dep);\n invariant(\n rep !== undefined,\n \"LexicalExtensionBuilder: Extension %s missing dependency extension %s to be in registry\",\n this.extension.name,\n dep.name,\n );\n return rep.getExtensionInitDependency();\n }\n\n getDependency<Dependency extends AnyLexicalExtension>(\n dep: Dependency,\n ): LexicalExtensionDependency<Dependency> {\n const rep = this.builder.getExtensionRep(dep);\n invariant(\n rep !== undefined,\n \"LexicalExtensionBuilder: Extension %s missing dependency extension %s to be in registry\",\n this.extension.name,\n dep.name,\n );\n return rep.getExtensionDependency();\n }\n\n getState(): AfterInitializationState<Extension> {\n const state = this.state;\n invariant(\n isAfterInitializationState(state),\n \"ExtensionRep getState called in state id %s (expected %s afterInitialization)\",\n String(state.id),\n String(ExtensionRepStateIds.afterInitialization),\n );\n return state;\n }\n\n getDirectDependentNames(): ReadonlySet<string> {\n return this.builder.incomingEdges.get(this.extension.name) || emptySet;\n }\n\n getPeerNameSet(): ReadonlySet<string> {\n let s = this._peerNameSet;\n if (!s) {\n s = new Set(\n (this.extension.peerDependencies || []).map(([name]) => name),\n );\n this._peerNameSet = s;\n }\n return s;\n }\n\n getExtensionDependency(): LexicalExtensionDependency<Extension> {\n if (!this._dependency) {\n const state = this.state;\n invariant(\n isRegisteredExtensionRepState(state),\n \"Extension %s used as a dependency before registration\",\n this.extension.name,\n );\n this._dependency = {\n config: state.config,\n output: state.output,\n };\n }\n return this._dependency;\n }\n mergeConfigs(): LexicalExtensionConfig<Extension> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- LexicalExtensionConfig<Extension> is any\n let config: LexicalExtensionConfig<Extension> = this.extension.config || {};\n const mergeConfig = this.extension.mergeConfig\n ? this.extension.mergeConfig.bind(this.extension)\n : shallowMergeConfig;\n for (const cfg of this.configs) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- LexicalExtensionConfig<Extension> 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 { defineExtension, 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 InitialStateExtension = defineExtension({\n name: \"@etrepum/lexical-builder/InitialState\",\n // These are automatically added by createEditor, we add them here so they are\n // visible during extensionRep.init so extensions 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 AnyLexicalExtension,\n AnyLexicalExtensionArgument,\n LexicalEditorWithDispose,\n InitialEditorConfig,\n LexicalExtensionConfig,\n AnyNormalizedLexicalExtensionArgument,\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 invariant from \"./shared/invariant\";\nimport { deepThemeMergeInPlace } from \"./deepThemeMergeInPlace\";\nimport {\n ExtensionRep,\n applyPermanentMark,\n applyTemporaryMark,\n isExactlyPermanentExtensionRepState,\n isExactlyUnmarkedExtensionRepState,\n} from \"./ExtensionRep\";\nimport { PACKAGE_VERSION } from \"./PACKAGE_VERSION\";\nimport { InitialStateExtension } from \"./InitialStateExtension\";\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 extensions, optionally\n * overriding some of their configuration.\n *\n * @param extensions - Extension arguments (extensions or extensions with config overrides)\n * @returns An editor handle\n *\n * @example A single root extension with multiple dependencies\n * ```ts\n * const editor = buildEditorFromExtensions(\n * defineExtension({\n * name: \"[root]\",\n * dependencies: [\n * RichTextExtension,\n * configExtension(EmojiExtension, { 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 = buildEditorFromExtensions(\n * RichTextExtension,\n * configExtension(EmojiExtension, { emojiBaseUrl: \"/assets/emoji\" }),\n * );\n * ```\n */\nexport function buildEditorFromExtensions(\n ...extensions: AnyLexicalExtensionArgument[]\n): LexicalEditorWithDispose {\n return LexicalBuilder.fromExtensions(extensions).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\nfunction normalizeExtensionArgument(\n arg: AnyLexicalExtensionArgument,\n): AnyNormalizedLexicalExtensionArgument {\n return Array.isArray(arg) ? arg : [arg];\n}\n\n/** @internal */\nexport class LexicalBuilder {\n roots: readonly AnyNormalizedLexicalExtensionArgument[];\n extensionNameMap: Map<string, ExtensionRep<AnyLexicalExtension>>;\n outgoingConfigEdges: Map<\n string,\n Map<string, LexicalExtensionConfig<AnyLexicalExtension>[]>\n >;\n incomingEdges: Map<string, Set<string>>;\n conflicts: Map<string, string>;\n _sortedExtensionReps?: readonly ExtensionRep<AnyLexicalExtension>[];\n PACKAGE_VERSION: string;\n\n constructor(roots: AnyNormalizedLexicalExtensionArgument[]) {\n this.outgoingConfigEdges = new Map();\n this.incomingEdges = new Map();\n this.extensionNameMap = new Map();\n this.conflicts = new Map();\n this.PACKAGE_VERSION = PACKAGE_VERSION;\n this.roots = roots;\n for (const extension of roots) {\n this.addExtension(extension);\n }\n }\n\n static fromExtensions(extensions: AnyLexicalExtensionArgument[]): LexicalBuilder {\n const roots = [normalizeExtensionArgument(InitialStateExtension)];\n for (const extension of extensions) {\n roots.push(normalizeExtensionArgument(extension));\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 getExtensionRep<Extension extends AnyLexicalExtension>(\n extension: Extension,\n ): ExtensionRep<Extension> | undefined {\n const rep = this.extensionNameMap.get(extension.name);\n if (rep) {\n invariant(\n rep.extension === extension,\n \"LexicalBuilder: A registered extension with name %s exists but does not match the given extension\",\n extension.name,\n );\n return rep as ExtensionRep<Extension>;\n }\n }\n\n addEdge(\n fromExtensionName: string,\n toExtensionName: string,\n configs: LexicalExtensionConfig<AnyLexicalExtension>[],\n ) {\n const outgoing = this.outgoingConfigEdges.get(fromExtensionName);\n if (outgoing) {\n outgoing.set(toExtensionName, configs);\n } else {\n this.outgoingConfigEdges.set(\n fromExtensionName,\n new Map([[toExtensionName, configs]]),\n );\n }\n const incoming = this.incomingEdges.get(toExtensionName);\n if (incoming) {\n incoming.add(fromExtensionName);\n } else {\n this.incomingEdges.set(toExtensionName, new Set([fromExtensionName]));\n }\n }\n\n addExtension(arg: AnyLexicalExtensionArgument) {\n invariant(\n this._sortedExtensionReps === undefined,\n \"LexicalBuilder: addExtension called after finalization\",\n );\n const normalized = normalizeExtensionArgument(arg);\n const [extension] = normalized;\n invariant(\n typeof extension.name === \"string\",\n \"LexicalBuilder: extension name must be string, not %s\",\n typeof extension.name,\n );\n let extensionRep = this.extensionNameMap.get(extension.name);\n invariant(\n extensionRep === undefined || extensionRep.extension === extension,\n \"LexicalBuilder: Multiple extensions registered with name %s, names must be unique\",\n extension.name,\n );\n if (!extensionRep) {\n extensionRep = new ExtensionRep(this, extension);\n this.extensionNameMap.set(extension.name, extensionRep);\n const hasConflict = this.conflicts.get(extension.name);\n if (typeof hasConflict === \"string\") {\n invariant(\n false,\n \"LexicalBuilder: extension %s conflicts with %s\",\n extension.name,\n hasConflict,\n );\n }\n for (const name of extension.conflictsWith || []) {\n invariant(\n !this.extensionNameMap.has(name),\n \"LexicalBuilder: extension %s conflicts with %s\",\n extension.name,\n name,\n );\n this.conflicts.set(name, extension.name);\n }\n for (const dep of extension.dependencies || []) {\n const normDep = normalizeExtensionArgument(dep);\n this.addEdge(extension.name, normDep[0].name, normDep.slice(1));\n this.addExtension(normDep);\n }\n for (const [depName, config] of extension.peerDependencies || []) {\n this.addEdge(extension.name, depName, config ? [config] : []);\n }\n }\n }\n\n sortedExtensionReps(): readonly ExtensionRep<AnyLexicalExtension>[] {\n if (this._sortedExtensionReps) {\n return this._sortedExtensionReps;\n }\n // depth-first search based topological DAG sort\n // https://en.wikipedia.org/wiki/Topological_sorting\n const sortedExtensionReps: ExtensionRep<AnyLexicalExtension>[] = [];\n const visit = (rep: ExtensionRep<AnyLexicalExtension>, fromExtensionName?: string) => {\n let mark = rep.state;\n if (isExactlyPermanentExtensionRepState(mark)) {\n return;\n }\n const extensionName = rep.extension.name;\n invariant(\n isExactlyUnmarkedExtensionRepState(mark),\n \"LexicalBuilder: Circular dependency detected for Extension %s from %s\",\n extensionName,\n fromExtensionName || \"[unknown]\",\n );\n mark = applyTemporaryMark(mark);\n rep.state = mark;\n const outgoingConfigEdges = this.outgoingConfigEdges.get(extensionName);\n if (outgoingConfigEdges) {\n for (const toExtensionName of outgoingConfigEdges.keys()) {\n const toRep = this.extensionNameMap.get(toExtensionName);\n // may be undefined for an optional peer dependency\n if (toRep) {\n visit(toRep, extensionName);\n }\n }\n }\n mark = applyPermanentMark(mark);\n rep.state = mark;\n sortedExtensionReps.push(rep);\n };\n for (const rep of this.extensionNameMap.values()) {\n if (isExactlyUnmarkedExtensionRepState(rep.state)) {\n visit(rep);\n }\n }\n for (const rep of sortedExtensionReps) {\n for (const [toExtensionName, configs] of this.outgoingConfigEdges.get(\n rep.extension.name,\n ) || []) {\n if (configs.length > 0) {\n const toRep = this.extensionNameMap.get(toExtensionName);\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 [extension, ...configs] of this.roots) {\n if (configs.length > 0) {\n const toRep = this.extensionNameMap.get(extension.name);\n invariant(\n toRep !== undefined,\n \"LexicalBuilder: Expecting existing ExtensionRep for %s\",\n extension.name,\n );\n for (const config of configs) {\n toRep.configs.add(config);\n }\n }\n }\n this._sortedExtensionReps = sortedExtensionReps;\n return this._sortedExtensionReps;\n }\n\n registerEditor(\n editor: LexicalEditor,\n controller: AbortController,\n ): () => void {\n const cleanups: (() => void)[] = [];\n const extensionReps = this.sortedExtensionReps();\n for (const extensionRep of extensionReps) {\n const cleanup = extensionRep.register(editor);\n if (cleanup) {\n cleanups.push(cleanup);\n }\n }\n for (const extensionRep of extensionReps) {\n const cleanup = extensionRep.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 ExtensionRep<AnyLexicalExtension>\n >();\n const htmlExport: NonNullable<HTMLConfig[\"export\"]> = new Map();\n const htmlImport: NonNullable<HTMLConfig[\"import\"]> = {};\n const theme: EditorThemeClasses = {};\n const extensionReps = this.sortedExtensionReps();\n for (const extensionRep of extensionReps) {\n const { extension } = extensionRep;\n if (extension.onError !== undefined) {\n config.onError = extension.onError;\n }\n if (extension.disableEvents !== undefined) {\n config.disableEvents = extension.disableEvents;\n }\n if (extension.parentEditor !== undefined) {\n config.parentEditor = extension.parentEditor;\n }\n if (extension.editable !== undefined) {\n config.editable = extension.editable;\n }\n if (extension.namespace !== undefined) {\n config.namespace = extension.namespace;\n }\n if (extension.$initialEditorState !== undefined) {\n config.$initialEditorState = extension.$initialEditorState;\n }\n if (extension.nodes) {\n for (const node of extension.nodes) {\n if (typeof node !== \"function\") {\n const conflictExtension = replacedNodes.get(node.replace);\n if (conflictExtension) {\n invariant(\n false,\n \"LexicalBuilder: Extension %s can not register replacement for node %s because %s already did\",\n extension.name,\n node.replace.name,\n conflictExtension.extension.name,\n );\n }\n replacedNodes.set(node.replace, extensionRep);\n }\n nodes.add(node);\n }\n }\n if (extension.html) {\n if (extension.html.export) {\n for (const [k, v] of extension.html.export.entries()) {\n htmlExport.set(k, v);\n }\n }\n if (extension.html.import) {\n Object.assign(htmlImport, extension.html.import);\n }\n }\n if (extension.theme) {\n deepThemeMergeInPlace(theme, extension.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 extensionRep of extensionReps) {\n extensionRep.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 AnyLexicalExtension,\n LexicalExtensionDependency,\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 an Extension 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 ExtensionRegisterState} around.\n *\n * It will throw if the Editor was not built using this Extension.\n *\n * @param editor - The editor that was built using extension\n * @param extension - The concrete reference to an Extension used to build this editor\n * @returns The config and output for that Extension\n */\nexport function getExtensionDependencyFromEditor<\n Extension extends AnyLexicalExtension,\n>(\n editor: LexicalEditor,\n extension: Extension,\n): LexicalExtensionDependency<Extension> {\n const builder = LexicalBuilder.fromEditor(editor);\n const rep = builder.getExtensionRep(extension);\n invariant(\n rep !== undefined,\n \"getExtensionDependencyFromEditor: Extension %s was not built when creating this editor\",\n extension.name,\n );\n return rep.getExtensionDependency();\n}\n","import type { LexicalEditor } from \"lexical\";\nimport type {\n AnyLexicalExtension,\n LexicalExtensionDependency,\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 an Extension 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 Extension for some reason (e.g. it is an optional peer dependency, or you\n * are avoiding a circular import).\n *\n * Both the explicit Extension type and the name are required.\n *\n * @example\n * ```tsx\n * import type { EmojiExtension } from \"@etrepum/lexical-emoji-extension\";\n * getPeerDependencyFromEditor<typeof EmojiExtension>(editor, \"@etrepum/lexical-emoji-extension/Emoji\");\n * ```\n\n * @param editor - The editor that may have been built using extension\n * @param extensionName - The name of the Extension\n * @returns The config and output of the Extension or undefined\n */\nexport function getPeerDependencyFromEditor<\n Extension extends AnyLexicalExtension = never,\n>(\n editor: LexicalEditor,\n extensionName: Extension[\"name\"],\n): LexicalExtensionDependency<Extension> | undefined {\n const builder = LexicalBuilder.fromEditor(editor);\n const peer = builder.extensionNameMap.get(extensionName);\n return peer\n ? (peer.getExtensionDependency() as LexicalExtensionDependency<Extension>)\n : undefined;\n}\n\n/**\n * Get the finalized config and output of an Extension 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 Extension for some reason (e.g. it is an optional peer dependency, or you\n * are avoiding a circular import).\n *\n * Both the explicit Extension type and the name are required.\n *\n * @example\n * ```tsx\n * import type { EmojiExtension } from \"./EmojiExtension\";\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 EmojiExtension>(\n * editor || $getEditor(),\n * \"@etrepum/lexical-emoji-extension/Emoji\",\n * ).config.emojiClass,\n * );\n * return dom;\n * }\n * }\n * ```\n\n * @param editor - The editor that may have been built using extension\n * @param extensionName - The name of the Extension\n * @returns The config and output of the Extension\n */\nexport function getPeerDependencyFromEditorOrThrow<\n Extension extends AnyLexicalExtension = never,\n>(\n editor: LexicalEditor,\n extensionName: Extension[\"name\"],\n): LexicalExtensionDependency<Extension> {\n const dep = getPeerDependencyFromEditor<Extension>(editor, extensionName);\n invariant(\n dep !== undefined,\n \"getPeerDependencyFromEditorOrThrow: Editor was not built with Extension %s\",\n extensionName,\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 { defineExtension, 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 * An Extension to focus the LexicalEditor when the root element is set\n * (typically only when the editor is first created).\n */\nexport const AutoFocusExtension = defineExtension({\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 type { ReadableStore } from \"./Store\";\n\nexport function registerStoreToggle<T>(\n store: ReadableStore<T>,\n isEnabled: (value: T) => boolean,\n register: () => () => void,\n): () => void {\n let cleanup: null | (() => void) = null;\n const performCleanup = () => {\n cleanup?.();\n cleanup = null;\n };\n return mergeRegister(\n performCleanup,\n store.subscribe((value) => {\n performCleanup();\n if (isEnabled(value)) {\n cleanup = register();\n }\n }),\n );\n}\n","import { Store, type WritableStore } from \"./Store\";\nimport { registerStoreToggle } from \"./registerStoreToggle\";\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 [\n { disabled },\n registerStoreToggle(disabled, (v) => !v, opts.register),\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 defineExtension,\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 DragonExtension = defineExtension({\n name: \"@lexical/dragon\",\n config: safeCast<DragonConfig>({ disabled: typeof window === \"undefined\" }),\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 configExtension,\n defineExtension,\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 HistoryExtension = defineExtension({\n config: safeCast<HistoryConfig>({\n createInitialHistoryState: createEmptyHistoryState,\n delay: 300,\n disabled: typeof window === \"undefined\",\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 HistoryExtension>(editor, HistoryExtension.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 SharedHistoryExtension = defineExtension({\n name: \"@etrepum/lexical-builder/SharedHistory\",\n dependencies: [configExtension(HistoryExtension, { disabled: true })],\n init(editorConfig, _config, state) {\n // Configure the peer dependency based on the parent editor's history\n const { config } = state.getDependency(HistoryExtension);\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 extension\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(HistoryExtension).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 { defineExtension } from \"@etrepum/lexical-builder-core\";\nimport { DragonExtension } from \"./DragonExtension\";\n\n/**\n * An extension to register \\@lexical/plain-text behavior\n */\nexport const PlainTextExtension = defineExtension({\n conflictsWith: [\"@lexical/rich-text\"],\n name: \"@lexical/plain-text\",\n dependencies: [DragonExtension],\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 { defineExtension } from \"@etrepum/lexical-builder-core\";\nimport { DragonExtension } from \"./DragonExtension\";\n\n/**\n * An extension to register \\@lexical/rich-text behavior and nodes\n * ({@link HeadingNode}, {@link QuoteNode})\n */\nexport const RichTextExtension = defineExtension({\n conflictsWith: [\"@lexical/plain-text\"],\n name: \"@lexical/rich-text\",\n nodes: [HeadingNode, QuoteNode],\n dependencies: [DragonExtension],\n register: registerRichText,\n});\n"],"names":[],"mappings":"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"}
|