@etrepum/lexical-builder 0.0.6-nightly.20240603.0 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,6 +5,11 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  */
8
+ declare module "@etrepum/lexical-builder" {
9
+ interface LexicalPlanRegistry {
10
+ [AutoFocusPlan.name]: typeof AutoFocusPlan;
11
+ }
12
+ }
8
13
  export interface AutoFocusConfig {
9
14
  defaultSelection?: "rootStart" | "rootEnd";
10
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AutoFocusPlan.d.ts","sourceRoot":"","sources":["../src/AutoFocusPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC5C;AAED,eAAO,MAAM,aAAa,0FAwBxB,CAAC"}
1
+ {"version":3,"file":"AutoFocusPlan.d.ts","sourceRoot":"","sources":["../src/AutoFocusPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,QAAQ,0BAA0B,CAAC;IACxC,UAAU,mBAAmB;QAC3B,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,aAAa,CAAC;KAC5C;CACF;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC5C;AAED,eAAO,MAAM,aAAa,0FAwBxB,CAAC"}
@@ -1,5 +1,10 @@
1
1
  import { HistoryState } from '@lexical/history';
2
2
 
3
+ declare module "@etrepum/lexical-builder" {
4
+ interface LexicalPlanRegistry {
5
+ [HistoryPlan.name]: typeof HistoryPlan;
6
+ }
7
+ }
3
8
  export interface HistoryConfig {
4
9
  delay: number;
5
10
  createInitialHistoryState: () => HistoryState;
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryPlan.d.ts","sourceRoot":"","sources":["../src/HistoryPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAK1B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB,EAAE,MAAM,YAAY,CAAC;CAC/C;AAED,eAAO,MAAM,WAAW,sFAStB,CAAC"}
1
+ {"version":3,"file":"HistoryPlan.d.ts","sourceRoot":"","sources":["../src/HistoryPlan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,QAAQ,0BAA0B,CAAC;IACxC,UAAU,mBAAmB;QAC3B,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,WAAW,CAAC;KACxC;CACF;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB,EAAE,MAAM,YAAY,CAAC;CAC/C;AAED,eAAO,MAAM,WAAW,sFAStB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"LexicalBuilder.d.ts","sourceRoot":"","sources":["../src/LexicalBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,aAAa,EAEb,KAAK,gBAAgB,EAKtB,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,EAC5B,GAAG,KAAK,EAAE,sBAAsB,EAAE,GACjC,YAAY,CAOd;AAED,gBAAgB;AAChB,qBAAa,cAAc;IACzB,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAClD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;IAU/B,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc;IASxD,WAAW,IAAI,YAAY;IAgB3B,OAAO,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM;IAsE3C,cAAc;IAMf,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,IAAI;IA6BjD,qBAAqB;CAmFtB"}
1
+ {"version":3,"file":"LexicalBuilder.d.ts","sourceRoot":"","sources":["../src/LexicalBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,aAAa,EAEb,KAAK,gBAAgB,EAKtB,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,EAC5B,GAAG,KAAK,EAAE,sBAAsB,EAAE,GACjC,YAAY,CAOd;AA2BD,gBAAgB;AAChB,qBAAa,cAAc;IACzB,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAClD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;IAU/B,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc;IASxD,WAAW,IAAI,YAAY;IAmB3B,OAAO,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM;IAsE3C,cAAc;IAMf,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,IAAI;IA6BjD,qBAAqB;CAsFtB"}
package/dist/PlanRep.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { LexicalBuilder } from './LexicalBuilder';
2
- import { AnyLexicalPlan, LexicalPlanConfig } from './types';
3
- import { LexicalPlanRegistry } from '@etrepum/lexical-builder';
2
+ import { AnyLexicalPlan, LexicalPlanConfig, LexicalPlanRegistry } from './types';
4
3
 
5
4
  export declare class PlanRep<Plan extends AnyLexicalPlan> {
6
5
  builder: LexicalBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"PlanRep.d.ts","sourceRoot":"","sources":["../src/PlanRep.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE,qBAAa,OAAO,CAAC,IAAI,SAAS,cAAc;IAC9C,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;gBACC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI;IAK/C,aAAa,CAAC,IAAI,SAAS,MAAM,mBAAmB,EAClD,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAI3D,mBAAmB,CAAC,UAAU,SAAS,cAAc,EACnD,GAAG,EAAE,UAAU,GACd,iBAAiB,CAAC,UAAU,CAAC;IAUhC,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC;CAcrC"}
1
+ {"version":3,"file":"PlanRep.d.ts","sourceRoot":"","sources":["../src/PlanRep.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAMnD,qBAAa,OAAO,CAAC,IAAI,SAAS,cAAc;IAC9C,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;gBACC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI;IAK/C,aAAa,CAAC,IAAI,SAAS,MAAM,mBAAmB,EAClD,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAI3D,mBAAmB,CAAC,UAAU,SAAS,cAAc,EACnD,GAAG,EAAE,UAAU,GACd,iBAAiB,CAAC,UAAU,CAAC;IAUhC,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC;CAcrC"}
package/dist/index.d.ts CHANGED
@@ -5,20 +5,15 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  */
8
- /** An open interface for Name -> Config mappings */
9
- export interface LexicalPlanRegistry {
10
- }
11
8
  export declare const PACKAGE_VERSION: any;
12
- export { type AutoFocusConfig, AutoFocusPlan } from './AutoFocusPlan';
13
9
  export { configPlan, definePlan, defineRootPlan } from './definePlan';
10
+ export { LexicalBuilder, buildEditorFromPlans } from './LexicalBuilder';
11
+ export { type AnyLexicalPlan, type AnyLexicalPlanArgument, type EditorHandle, type InitialEditorStateType, type LexicalPeerConfig, type LexicalPlan, type LexicalPlanArgument, type LexicalPlanConfig, type LexicalPlanName, type NormalizedLexicalPlanArgument, type PlanConfigBase, type RegisterState, } from './types';
12
+ export { safeCast } from './safeCast';
13
+ export { shallowMergeConfig } from './shallowMergeConfig';
14
+ export { type AutoFocusConfig, AutoFocusPlan } from './AutoFocusPlan';
14
15
  export { DragonPlan } from './DragonPlan';
15
16
  export { type HistoryConfig, HistoryPlan } from './HistoryPlan';
16
- export { LexicalBuilder, buildEditorFromPlans } from './LexicalBuilder';
17
17
  export { PlainTextPlan } from './PlainTextPlan';
18
- export { type DecoratorComponentProps, type DecoratorComponentType, type EditorChildrenComponentProps, type EditorChildrenComponentType, type EditorComponentProps, type EditorComponentType, LexicalPlanComposer, type LexicalPlanComposerProps, type ReactConfig, ReactPlan, } from './ReactPlan';
19
- export { type HostMountCommandArg, type MountPluginCommandArg, type Container, mountReactPluginComponent, mountReactPluginElement, mountReactPluginHost, REACT_MOUNT_PLUGIN_COMMAND, REACT_PLUGIN_HOST_MOUNT_COMMAND, ReactPluginHostPlan, } from './ReactPluginHostPlan';
20
18
  export { RichTextPlan } from './RichTextPlan';
21
- export { type AnyLexicalPlan, type AnyLexicalPlanArgument, type EditorHandle, type InitialEditorStateType, type LexicalPeerConfig, type LexicalPlan, type LexicalPlanArgument, type LexicalPlanConfig, type LexicalPlanName, type NormalizedLexicalPlanArgument, type PlanConfigBase, type RegisterState, } from './types';
22
- export { type ErrorBoundaryType, type ErrorBoundaryProps, } from './useReactDecorators';
23
- export { safeCast } from './safeCast';
24
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oDAAoD;AACpD,MAAM,WAAW,mBAAmB;CAAG;AACvC,eAAO,MAAM,eAAe,KAAkC,CAAC;AAE/D,OAAO,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,eAAe,KAAkC,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -4,21 +4,11 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
6
  };
7
+ import { $getRoot, $createParagraphNode, createEditor } from "lexical";
8
+ import { mergeRegister } from "@lexical/utils";
7
9
  import { registerDragonSupport } from "@lexical/dragon";
8
10
  import { createEmptyHistoryState, registerHistory } from "@lexical/history";
9
- import { $getRoot, $createParagraphNode, createEditor, createCommand, COMMAND_PRIORITY_CRITICAL, COMMAND_PRIORITY_EDITOR } from "lexical";
10
- import { mergeRegister, CAN_USE_DOM } from "@lexical/utils";
11
11
  import { registerPlainText } from "@lexical/plain-text";
12
- import { jsx, jsxs, Fragment } from "react/jsx-runtime";
13
- import { LexicalComposerContext } from "@lexical/react/LexicalComposerContext";
14
- import { ContentEditable } from "@lexical/react/LexicalContentEditable";
15
- import LexicalErrorBoundary from "@lexical/react/LexicalErrorBoundary";
16
- import useLexicalEditable from "@lexical/react/useLexicalEditable";
17
- import { useLayoutEffect, useEffect, useState, useMemo, Suspense, useCallback, useRef } from "react";
18
- import { $canShowPlaceholderCurry } from "@lexical/text";
19
- import { flushSync, createPortal } from "react-dom";
20
- import useLexicalSubscription from "@lexical/react/useLexicalSubscription";
21
- import { createRoot } from "react-dom/client";
22
12
  import { HeadingNode, QuoteNode, registerRichText } from "@lexical/rich-text";
23
13
  function definePlan(plan) {
24
14
  return plan;
@@ -29,41 +19,6 @@ function defineRootPlan(plan) {
29
19
  function configPlan(plan, config) {
30
20
  return [plan, config];
31
21
  }
32
- function safeCast(value) {
33
- return value;
34
- }
35
- const AutoFocusPlan = definePlan({
36
- config: safeCast({}),
37
- name: "@etrepum/lexical-builder/AutoFocusPlan",
38
- register(editor, { defaultSelection }) {
39
- return editor.registerRootListener((rootElement) => {
40
- editor.focus(
41
- () => {
42
- const activeElement = document.activeElement;
43
- if (rootElement !== null && (activeElement === null || !rootElement.contains(activeElement))) {
44
- rootElement.focus({ preventScroll: true });
45
- }
46
- },
47
- { defaultSelection }
48
- );
49
- });
50
- }
51
- });
52
- const DragonPlan = definePlan({
53
- config: {},
54
- name: "@lexical/dragon",
55
- register: registerDragonSupport
56
- });
57
- const HistoryPlan = definePlan({
58
- config: safeCast({
59
- createInitialHistoryState: createEmptyHistoryState,
60
- delay: 300
61
- }),
62
- name: "@etrepum/lexical-builder/HistoryPlan",
63
- register(editor, { delay, createInitialHistoryState }) {
64
- return registerHistory(editor, createInitialHistoryState(), delay);
65
- }
66
- });
67
22
  function invariant(cond, message, ...args) {
68
23
  if (cond) {
69
24
  return;
@@ -166,6 +121,30 @@ function buildEditorFromPlans(plan, ...plans) {
166
121
  }
167
122
  return builder.buildEditor();
168
123
  }
124
+ function noop() {
125
+ }
126
+ class DisposableEditorHandle {
127
+ constructor(editor, dispose) {
128
+ __publicField(this, "editor");
129
+ __publicField(this, "dispose");
130
+ this.editor = editor;
131
+ this.dispose = () => {
132
+ try {
133
+ dispose();
134
+ } finally {
135
+ this.dispose = noop;
136
+ }
137
+ };
138
+ }
139
+ // This should be safe even if the runtime doesn't have Symbol.dispose
140
+ // because it will just be `handle[undefined] = dispose;`
141
+ [Symbol.dispose]() {
142
+ this.dispose();
143
+ }
144
+ }
145
+ function defaultOnError(err) {
146
+ throw err;
147
+ }
169
148
  class LexicalBuilder {
170
149
  constructor() {
171
150
  __publicField(this, "phases");
@@ -193,11 +172,14 @@ class LexicalBuilder {
193
172
  });
194
173
  initializeEditor(editor, $initialEditorState);
195
174
  buildersForEditors.set(editor, this);
196
- const dispose = mergeRegister(
197
- () => buildersForEditors.delete(editor),
198
- this.registerEditor(editor)
175
+ return new DisposableEditorHandle(
176
+ editor,
177
+ mergeRegister(
178
+ () => buildersForEditors.delete(editor),
179
+ () => editor.setRootElement(null),
180
+ this.registerEditor(editor)
181
+ )
199
182
  );
200
- return { dispose, editor };
201
183
  }
202
184
  addPlan(arg) {
203
185
  let plan;
@@ -301,7 +283,10 @@ class LexicalBuilder {
301
283
  };
302
284
  }
303
285
  buildCreateEditorArgs() {
304
- const config = {};
286
+ const config = {
287
+ // Prefer throwing errors rather than console.error by default
288
+ onError: defaultOnError
289
+ };
305
290
  const nodes = /* @__PURE__ */ new Set();
306
291
  const replacedNodes = /* @__PURE__ */ new Map();
307
292
  const htmlExport = /* @__PURE__ */ new Map();
@@ -376,293 +361,47 @@ class LexicalBuilder {
376
361
  return config;
377
362
  }
378
363
  }
379
- const PlainTextPlan = definePlan({
380
- config: {},
381
- conflictsWith: ["@lexical/rich-text"],
382
- name: "@lexical/plain-text",
383
- register: registerPlainText
384
- });
385
- function canShowPlaceholderFromCurrentEditorState(editor) {
386
- const currentCanShowPlaceholder = editor.getEditorState().read($canShowPlaceholderCurry(editor.isComposing()));
387
- return currentCanShowPlaceholder;
388
- }
389
- function subscribe(editor, onChange) {
390
- const resetCanShowPlaceholder = () => onChange(canShowPlaceholderFromCurrentEditorState(editor));
391
- return mergeRegister(
392
- editor.registerUpdateListener(resetCanShowPlaceholder),
393
- editor.registerEditableListener(resetCanShowPlaceholder)
394
- );
364
+ function safeCast(value) {
365
+ return value;
395
366
  }
396
- const canShowPlaceholder = {
397
- initialValueFn: canShowPlaceholderFromCurrentEditorState,
398
- subscribe
399
- };
400
- const useLayoutEffectImpl = CAN_USE_DOM ? useLayoutEffect : useEffect;
401
- function useReactDecorators(editor, ErrorBoundary) {
402
- const [decorators, setDecorators] = useState(
403
- () => editor.getDecorators()
404
- );
405
- useLayoutEffectImpl(() => {
406
- return editor.registerDecoratorListener((nextDecorators) => {
407
- flushSync(() => {
408
- setDecorators(nextDecorators);
409
- });
410
- });
411
- }, [editor]);
412
- useEffect(() => {
413
- setDecorators(editor.getDecorators());
414
- }, [editor]);
415
- return useMemo(() => {
416
- const decoratedPortals = [];
417
- const decoratorKeys = Object.keys(decorators);
418
- for (let i = 0; i < decoratorKeys.length; i++) {
419
- const nodeKey = decoratorKeys[i];
420
- invariant(
421
- nodeKey !== void 0,
422
- "useReactDecorators: decoratorKeys[%s] must be defined",
423
- String(i)
367
+ const AutoFocusPlan = definePlan({
368
+ config: safeCast({}),
369
+ name: "@etrepum/lexical-builder/AutoFocusPlan",
370
+ register(editor, { defaultSelection }) {
371
+ return editor.registerRootListener((rootElement) => {
372
+ editor.focus(
373
+ () => {
374
+ const activeElement = document.activeElement;
375
+ if (rootElement !== null && (activeElement === null || !rootElement.contains(activeElement))) {
376
+ rootElement.focus({ preventScroll: true });
377
+ }
378
+ },
379
+ { defaultSelection }
424
380
  );
425
- const element = editor.getElementByKey(nodeKey);
426
- if (element !== null) {
427
- const reactDecorator = /* @__PURE__ */ jsx(ErrorBoundary, { onError: (e) => editor._onError(e), children: /* @__PURE__ */ jsx(Suspense, { fallback: null, children: decorators[nodeKey] }) });
428
- decoratedPortals.push(createPortal(reactDecorator, element, nodeKey));
429
- }
430
- }
431
- return decoratedPortals;
432
- }, [ErrorBoundary, decorators, editor]);
433
- }
434
- function useRegisterSubscription(subscription) {
435
- const sub = useCallback(
436
- (editor) => {
437
- return {
438
- initialValueFn: subscription.initialValueFn.bind(subscription, editor),
439
- subscribe: subscription.subscribe.bind(subscription, editor)
440
- };
441
- },
442
- [subscription]
443
- );
444
- return useLexicalSubscription(sub);
445
- }
446
- const scheduleMicrotask = "queueMicrotask" in globalThis ? queueMicrotask : (fn) => Promise.resolve().then(fn);
447
- function LexicalPlanComposer({
448
- plan,
449
- children
450
- }) {
451
- const componentRef = useRef(void 0);
452
- const handle = useMemo(() => {
453
- return buildEditorFromPlans(
454
- definePlan({
455
- name: "@lexical/builder/LexicalPlanComposer",
456
- config: {},
457
- dependencies: [ReactPlan],
458
- register(_editor, _config, state) {
459
- componentRef.current = state.getDependencyConfig(ReactPlan).Component;
460
- return () => {
461
- componentRef.current = void 0;
462
- };
463
- }
464
- }),
465
- plan
466
- );
467
- }, [plan]);
468
- useEffect(() => {
469
- let didMount = false;
470
- scheduleMicrotask(() => {
471
- didMount = true;
472
381
  });
473
- return () => {
474
- if (didMount) {
475
- handle.dispose();
476
- }
477
- };
478
- }, [handle]);
479
- const EditorComponent = componentRef.current;
480
- return EditorComponent ? /* @__PURE__ */ jsx(EditorComponent, { children }) : null;
481
- }
482
- function DefaultEditorChildrenComponent({
483
- contentEditable,
484
- placeholder,
485
- children
486
- }) {
487
- return /* @__PURE__ */ jsxs(Fragment, { children: [
488
- contentEditable,
489
- placeholder && /* @__PURE__ */ jsx(Placeholder, { content: placeholder }),
490
- children
491
- ] });
492
- }
493
- function buildEditorComponent(config) {
494
- const context = config.getContext();
495
- const [editor] = context;
496
- const rawConfigDecorators = config.decorators.map(
497
- (El) => typeof El === "function" ? /* @__PURE__ */ jsx(El, { context }) : El
498
- );
499
- return function EditorComponent(props) {
500
- const {
501
- EditorChildrenComponent = config.EditorChildrenComponent,
502
- ErrorBoundary = config.ErrorBoundary,
503
- contentEditable = config.contentEditable,
504
- placeholder = config.placeholder,
505
- children
506
- } = props;
507
- const decorators = useReactDecorators(editor, ErrorBoundary);
508
- const configDecorators = useMemo(
509
- () => rawConfigDecorators.map((decorator, i) => /* @__PURE__ */ jsx(ErrorBoundary, { onError: (e) => editor._onError(e), children: /* @__PURE__ */ jsx(Suspense, { fallback: null, children: decorator }) }, i)),
510
- [ErrorBoundary]
511
- );
512
- return /* @__PURE__ */ jsx(LexicalComposerContext.Provider, { value: context, children: /* @__PURE__ */ jsxs(
513
- EditorChildrenComponent,
514
- {
515
- context,
516
- contentEditable,
517
- placeholder: placeholder && /* @__PURE__ */ jsx(Placeholder, { content: placeholder }),
518
- children: [
519
- children,
520
- configDecorators,
521
- decorators
522
- ]
523
- }
524
- ) });
525
- };
526
- }
527
- function WithEditable({
528
- content
529
- }) {
530
- return content(useLexicalEditable());
531
- }
532
- function Placeholder({
533
- content
534
- }) {
535
- const showPlaceholder = useRegisterSubscription(canShowPlaceholder);
536
- if (!showPlaceholder) {
537
- return null;
538
- } else if (typeof content === "function") {
539
- return /* @__PURE__ */ jsx(WithEditable, { content });
540
- } else {
541
- return content;
542
- }
543
- }
544
- const initialConfig = {
545
- EditorChildrenComponent: DefaultEditorChildrenComponent,
546
- ErrorBoundary: LexicalErrorBoundary,
547
- contentEditable: /* @__PURE__ */ jsx(ContentEditable, {}),
548
- decorators: [],
549
- placeholder: null,
550
- // Initialized on registration
551
- Component() {
552
- invariant(false, "ReactPlan used before register");
553
- },
554
- // Initialized on registration
555
- getContext() {
556
- invariant(false, "ReactPlan used before register");
557
- }
558
- };
559
- const ReactPlan = definePlan({
560
- config: initialConfig,
561
- mergeConfig(a, b) {
562
- const config = shallowMergeConfig(a, b);
563
- if (b && b.decorators && b.decorators.length > 0) {
564
- config.decorators = [...a.decorators, ...b.decorators];
565
- }
566
- return config;
567
- },
568
- name: "@etrepum/lexical-builder/ReactPlan",
569
- register(editor, config) {
570
- const context = [
571
- editor,
572
- { getTheme: () => editor._config.theme }
573
- ];
574
- config.getContext = () => context;
575
- config.Component = buildEditorComponent(config);
576
- return () => {
577
- config.getContext = initialConfig.getContext;
578
- config.Component = initialConfig.Component;
579
- };
580
382
  }
581
383
  });
582
- function mountReactPluginComponent(editor, opts) {
583
- const { Component, props, ...rest } = opts;
584
- return mountReactPluginElement(editor, {
585
- ...rest,
586
- element: Component && props ? /* @__PURE__ */ jsx(Component, { ...props }) : null
587
- });
588
- }
589
- function mountReactPluginElement(editor, opts) {
590
- editor.dispatchCommand(REACT_MOUNT_PLUGIN_COMMAND, opts);
591
- }
592
- function mountReactPluginHost(editor, container) {
593
- editor.dispatchCommand(REACT_PLUGIN_HOST_MOUNT_COMMAND, {
594
- root: createRoot(container)
595
- });
596
- }
597
- const REACT_PLUGIN_HOST_MOUNT_COMMAND = createCommand("REACT_PLUGIN_HOST_MOUNT_COMMAND");
598
- const REACT_MOUNT_PLUGIN_COMMAND = createCommand(
599
- "REACT_MOUNT_PLUGIN_COMMAND"
600
- );
601
- const ReactPluginHostPlan = definePlan({
384
+ const DragonPlan = definePlan({
602
385
  config: {},
603
- dependencies: [
604
- configPlan(ReactPlan, {
605
- contentEditable: null
606
- })
607
- ],
608
- name: "@etrepum/lexical-builder/ReactPluginHostPlan",
609
- register(editor, _config, state) {
610
- let root;
611
- const mountedPlugins = /* @__PURE__ */ new Map();
612
- const { ErrorBoundary, Component } = state.getDependencyConfig(ReactPlan);
613
- function renderMountedPlugins() {
614
- const children = [];
615
- for (const { key, element, domNode } of mountedPlugins.values()) {
616
- if (!element) {
617
- continue;
618
- }
619
- const wrapped = /* @__PURE__ */ jsx(ErrorBoundary, { onError: (e) => editor._onError(e), children: /* @__PURE__ */ jsx(Suspense, { fallback: null, children: element }) }, key);
620
- children.push(domNode ? createPortal(wrapped, domNode, key) : wrapped);
621
- }
622
- return children.length > 0 ? /* @__PURE__ */ jsx(Fragment, { children }) : null;
623
- }
624
- function PluginHost() {
625
- const [children, setChildren] = useState(renderMountedPlugins);
626
- useEffect(() => {
627
- return editor.registerCommand(
628
- REACT_MOUNT_PLUGIN_COMMAND,
629
- () => {
630
- setChildren(renderMountedPlugins);
631
- return true;
632
- },
633
- COMMAND_PRIORITY_EDITOR
634
- );
635
- }, []);
636
- return children;
637
- }
638
- return mergeRegister(
639
- () => {
640
- if (root) {
641
- root.unmount();
642
- }
643
- },
644
- editor.registerCommand(
645
- REACT_MOUNT_PLUGIN_COMMAND,
646
- (arg) => {
647
- mountedPlugins.set(arg.key, arg);
648
- return false;
649
- },
650
- COMMAND_PRIORITY_CRITICAL
651
- ),
652
- editor.registerCommand(
653
- REACT_PLUGIN_HOST_MOUNT_COMMAND,
654
- (arg) => {
655
- root = arg.root;
656
- root.render(
657
- /* @__PURE__ */ jsx(Component, { children: /* @__PURE__ */ jsx(PluginHost, {}) })
658
- );
659
- return true;
660
- },
661
- COMMAND_PRIORITY_EDITOR
662
- )
663
- );
386
+ name: "@lexical/dragon",
387
+ register: registerDragonSupport
388
+ });
389
+ const HistoryPlan = definePlan({
390
+ config: safeCast({
391
+ createInitialHistoryState: createEmptyHistoryState,
392
+ delay: 300
393
+ }),
394
+ name: "@etrepum/lexical-builder/HistoryPlan",
395
+ register(editor, { delay, createInitialHistoryState }) {
396
+ return registerHistory(editor, createInitialHistoryState(), delay);
664
397
  }
665
398
  });
399
+ const PlainTextPlan = definePlan({
400
+ config: {},
401
+ conflictsWith: ["@lexical/rich-text"],
402
+ name: "@lexical/plain-text",
403
+ register: registerPlainText
404
+ });
666
405
  const RichTextPlan = definePlan({
667
406
  config: {},
668
407
  conflictsWith: ["@lexical/plain-text"],
@@ -670,27 +409,20 @@ const RichTextPlan = definePlan({
670
409
  nodes: [HeadingNode, QuoteNode],
671
410
  register: registerRichText
672
411
  });
673
- const PACKAGE_VERSION = "0.0.6-nightly.20240603.0";
412
+ const PACKAGE_VERSION = "0.0.8";
674
413
  export {
675
414
  AutoFocusPlan,
676
415
  DragonPlan,
677
416
  HistoryPlan,
678
417
  LexicalBuilder,
679
- LexicalPlanComposer,
680
418
  PACKAGE_VERSION,
681
419
  PlainTextPlan,
682
- REACT_MOUNT_PLUGIN_COMMAND,
683
- REACT_PLUGIN_HOST_MOUNT_COMMAND,
684
- ReactPlan,
685
- ReactPluginHostPlan,
686
420
  RichTextPlan,
687
421
  buildEditorFromPlans,
688
422
  configPlan,
689
423
  definePlan,
690
424
  defineRootPlan,
691
- mountReactPluginComponent,
692
- mountReactPluginElement,
693
- mountReactPluginHost,
694
- safeCast
425
+ safeCast,
426
+ shallowMergeConfig
695
427
  };
696
428
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/definePlan.ts","../src/safeCast.ts","../src/AutoFocusPlan.ts","../src/DragonPlan.ts","../src/HistoryPlan.ts","../src/shared/invariant.ts","../src/deepThemeMergeInPlace.ts","../src/initializeEditor.ts","../src/shallowMergeConfig.ts","../src/PlanRep.ts","../src/LexicalBuilder.ts","../src/PlainTextPlan.ts","../src/registerShowPlaceholder.ts","../src/shared/useLayoutEffect.ts","../src/useReactDecorators.tsx","../src/useRegisterSubscription.ts","../src/ReactPlan.tsx","../src/ReactPluginHostPlan.tsx","../src/RichTextPlan.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type {\n AnyLexicalPlan,\n LexicalPlan,\n LexicalPlanConfig,\n PlanConfigBase,\n} from \"./types\";\n\nexport function definePlan<Config extends PlanConfigBase, Name extends string>(\n plan: LexicalPlan<Config, Name>,\n): LexicalPlan<Config, Name> {\n return plan;\n}\n\nexport function defineRootPlan(\n plan: Omit<LexicalPlan<PlanConfigBase, string>, \"config\" | \"name\">,\n): LexicalPlan<PlanConfigBase, \"[root]\"> {\n return { ...plan, name: \"[root]\", config: {} };\n}\n\nexport function configPlan<Plan extends AnyLexicalPlan>(\n plan: Plan,\n config: Partial<LexicalPlanConfig<Plan>>,\n): [Plan, Partial<LexicalPlanConfig<Plan>>] {\n return [plan, config];\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// TypeScript 4.9's satisfies operator is not supported by our version of prettier\nexport function safeCast<T>(value: T): T {\n return value;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { definePlan } from \"./definePlan\";\nimport { safeCast } from \"./safeCast\";\n\nexport interface AutoFocusConfig {\n defaultSelection?: \"rootStart\" | \"rootEnd\";\n}\n\nexport const AutoFocusPlan = definePlan({\n config: safeCast<AutoFocusConfig>({}),\n name: \"@etrepum/lexical-builder/AutoFocusPlan\",\n register(editor, { defaultSelection }) {\n return editor.registerRootListener((rootElement) => {\n editor.focus(\n () => {\n // If we try and move selection to the same point with setBaseAndExtent, it won't\n // trigger a re-focus on the element. So in the case this occurs, we'll need to correct it.\n // Normally this is fine, Selection API !== Focus API, but fore the intents of the naming\n // of this plugin, which should preserve focus too.\n const activeElement = document.activeElement;\n if (\n rootElement !== null &&\n (activeElement === null || !rootElement.contains(activeElement))\n ) {\n // Note: preventScroll won't work in Webkit.\n rootElement.focus({ preventScroll: true });\n }\n },\n { defaultSelection },\n );\n });\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { registerDragonSupport } from \"@lexical/dragon\";\n\nimport { definePlan } from \"./definePlan\";\n\nexport const DragonPlan = definePlan({\n config: {},\n name: \"@lexical/dragon\",\n register: registerDragonSupport,\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport {\n createEmptyHistoryState,\n type HistoryState,\n registerHistory,\n} from \"@lexical/history\";\n\nimport { definePlan } from \"./definePlan\";\nimport { safeCast } from \"./safeCast\";\n\nexport interface HistoryConfig {\n delay: number;\n createInitialHistoryState: () => HistoryState;\n}\n\nexport const HistoryPlan = definePlan({\n config: safeCast<HistoryConfig>({\n createInitialHistoryState: createEmptyHistoryState,\n delay: 300,\n }),\n name: \"@etrepum/lexical-builder/HistoryPlan\",\n register(editor, { delay, createInitialHistoryState }) {\n return registerHistory(editor, createInitialHistoryState(), delay);\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\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\nexport function deepThemeMergeInPlace(a: unknown, b: unknown) {\n if (\n a &&\n b &&\n !Array.isArray(b) &&\n typeof a === \"object\" &&\n typeof b === \"object\"\n ) {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n for (const k in bObj) {\n aObj[k] = deepThemeMergeInPlace(aObj[k], bObj[k]);\n }\n return a;\n }\n return b;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type { InitialEditorStateType } from \"./types\";\n\nimport { $createParagraphNode, $getRoot, type LexicalEditor } from \"lexical\";\n\nconst HISTORY_MERGE_OPTIONS = { tag: \"history-merge\" };\n\nfunction $defaultInitializer() {\n const root = $getRoot();\n if (root.isEmpty()) {\n root.append($createParagraphNode());\n }\n}\n\nexport function initializeEditor(\n editor: LexicalEditor,\n $initialEditorState: InitialEditorStateType = $defaultInitializer,\n): void {\n switch (typeof $initialEditorState) {\n case \"function\": {\n editor.update(() => $initialEditorState(editor), HISTORY_MERGE_OPTIONS);\n break;\n }\n case \"string\": {\n const parsedEditorState = editor.parseEditorState($initialEditorState);\n editor.setEditorState(parsedEditorState, HISTORY_MERGE_OPTIONS);\n break;\n }\n case \"object\": {\n if ($initialEditorState) {\n editor.setEditorState($initialEditorState, HISTORY_MERGE_OPTIONS);\n }\n break;\n }\n }\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport type { PlanConfigBase } from \"./types\";\n\nexport function shallowMergeConfig<T extends PlanConfigBase>(\n a: T,\n b?: Partial<T>,\n): T {\n if (!b || a === b) {\n return a;\n }\n for (const k in b) {\n if (b[k] !== a[k]) {\n return { ...a, ...b };\n }\n }\n return a;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type { LexicalBuilder } from \"./LexicalBuilder\";\nimport type {\n AnyLexicalPlan,\n LexicalPlanConfig,\n} from \"./types\";\nimport type { LexicalPlanRegistry } from \"@etrepum/lexical-builder\";\n\nimport invariant from \"./shared/invariant\";\n\nimport { shallowMergeConfig } from \"./shallowMergeConfig\";\n\nexport class PlanRep<Plan extends AnyLexicalPlan> {\n builder: LexicalBuilder;\n configs: Set<LexicalPlanConfig<Plan>>;\n _config?: LexicalPlanConfig<Plan>;\n plan: Plan;\n constructor(builder: LexicalBuilder, plan: Plan) {\n this.builder = builder;\n this.plan = plan;\n this.configs = new Set();\n }\n getPeerConfig<Name extends keyof LexicalPlanRegistry>(\n name: string,\n ): undefined | LexicalPlanConfig<LexicalPlanRegistry[Name]> {\n const rep = this.builder.planNameMap.get(name);\n return rep && rep.getConfig();\n }\n getDependencyConfig<Dependency extends AnyLexicalPlan>(\n dep: Dependency,\n ): LexicalPlanConfig<Dependency> {\n const pair = this.builder.planMap.get(dep);\n invariant(\n pair !== undefined,\n \"LexicalPlanBuilder: Plan %s missing dependency plan %s to be in registry\",\n this.plan.name,\n dep.name,\n );\n return pair[1].getConfig();\n }\n getConfig(): LexicalPlanConfig<Plan> {\n if (this._config) {\n return this._config;\n }\n let config = this.plan.config;\n const mergeConfig = this.plan.mergeConfig\n ? this.plan.mergeConfig.bind(this.plan)\n : shallowMergeConfig;\n for (const cfg of this.configs) {\n config = mergeConfig(config, cfg);\n }\n this._config = config;\n return config;\n }\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport type {\n AnyLexicalPlan,\n AnyLexicalPlanArgument,\n EditorHandle,\n} from \"./types\";\n\nimport {\n LexicalEditor,\n createEditor,\n type CreateEditorArgs,\n type EditorThemeClasses,\n type HTMLConfig,\n type KlassConstructor,\n type LexicalNode,\n} from \"lexical\";\nimport invariant from \"./shared/invariant\";\n\nimport { deepThemeMergeInPlace } from \"./deepThemeMergeInPlace\";\nimport { initializeEditor } from \"./initializeEditor\";\nimport { PlanRep } from \"./PlanRep\";\nimport { mergeRegister } from \"@lexical/utils\";\n\nconst buildersForEditors = new WeakMap<LexicalEditor, LexicalBuilder>();\n\nexport function buildEditorFromPlans(\n plan: AnyLexicalPlanArgument,\n ...plans: AnyLexicalPlanArgument[]\n): EditorHandle {\n const builder = new LexicalBuilder();\n builder.addPlan(plan);\n for (const otherPlan of plans) {\n builder.addPlan(otherPlan);\n }\n return builder.buildEditor();\n}\n\n/** @internal */\nexport class LexicalBuilder {\n phases: Map<AnyLexicalPlan, PlanRep<AnyLexicalPlan>>[];\n planMap: Map<AnyLexicalPlan, [number, PlanRep<AnyLexicalPlan>]>;\n planNameMap: Map<string, PlanRep<AnyLexicalPlan>>;\n conflicts: Map<string, string>;\n\n constructor() {\n // closure compiler can't handle class initializers\n this.phases = [new Map()];\n this.planMap = new Map();\n this.planNameMap = new Map();\n this.conflicts = new Map();\n }\n\n static fromEditor(editor: LexicalEditor): LexicalBuilder {\n const builder = buildersForEditors.get(editor);\n invariant(\n builder !== undefined,\n \"LexicalBuilder.fromEditor: editor was not created with this version of LexicalBuilder\",\n );\n return builder;\n }\n\n buildEditor(): EditorHandle {\n const { $initialEditorState, onError, ...editorConfig } =\n this.buildCreateEditorArgs();\n const editor = createEditor({\n ...editorConfig,\n ...(onError ? { onError: (err) => onError(err, editor) } : {}),\n });\n initializeEditor(editor, $initialEditorState);\n buildersForEditors.set(editor, this);\n const dispose = mergeRegister(\n () => buildersForEditors.delete(editor),\n this.registerEditor(editor),\n );\n return { dispose, editor };\n }\n\n addPlan(arg: AnyLexicalPlanArgument): number {\n let plan: AnyLexicalPlan;\n let configs: unknown[];\n if (Array.isArray(arg)) {\n [plan, ...configs] = arg;\n } else {\n plan = arg;\n configs = [];\n }\n let [phase, planRep] = this.planMap.get(plan) || [0, undefined];\n if (!planRep) {\n const hasConflict = this.conflicts.get(plan.name);\n if (typeof hasConflict === \"string\") {\n invariant(\n false,\n \"LexicalBuilder: plan %s conflicts with %s\",\n plan.name,\n hasConflict,\n );\n }\n for (const name of plan.conflictsWith || []) {\n invariant(\n !this.planNameMap.has(name),\n \"LexicalBuilder: plan %s conflicts with %s\",\n plan.name,\n name,\n );\n this.conflicts.set(name, plan.name);\n }\n // TODO detect circular dependencies\n for (const dep of plan.dependencies || []) {\n phase = Math.max(phase, 1 + this.addPlan(dep));\n }\n for (const [depName, cfg] of Object.entries(\n plan.peerDependencies || {},\n )) {\n const dep = this.planNameMap.get(depName);\n if (dep) {\n phase = Math.max(phase, 1 + this.addPlan([dep.plan, cfg]));\n }\n }\n invariant(\n this.phases.length >= phase,\n \"LexicalBuilder: Expected phase to be no greater than phases.length\",\n );\n if (this.phases.length === phase) {\n this.phases.push(new Map());\n }\n planRep = new PlanRep(this, plan);\n invariant(\n !this.planNameMap.has(plan.name),\n \"LexicalBuilder: Multiple plans registered with name %s, names must be unique\",\n plan.name,\n );\n this.planMap.set(plan, [phase, planRep]);\n this.planNameMap.set(plan.name, planRep);\n const currentPhaseMap = this.phases[phase];\n invariant(\n currentPhaseMap !== undefined,\n \"LexicalBuilder: Expecting phase map for phase %s\",\n String(phase),\n );\n currentPhaseMap.set(plan, planRep);\n }\n for (const config of configs) {\n planRep.configs.add(config);\n }\n return phase;\n }\n\n *sortedPlanReps() {\n for (const phase of this.phases) {\n yield* phase.values();\n }\n }\n\n registerEditor(editor: LexicalEditor): () => void {\n const cleanups: (() => void)[] = [];\n const controller = new AbortController();\n for (const planRep of this.sortedPlanReps()) {\n if (planRep.plan.register) {\n cleanups.push(\n planRep.plan.register(editor, planRep.getConfig(), {\n getDependencyConfig: planRep.getDependencyConfig.bind(planRep),\n getPeerConfig: planRep.getPeerConfig.bind(planRep),\n signal: controller.signal,\n }),\n );\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() {\n const config: Pick<\n CreateEditorArgs,\n \"nodes\" | \"html\" | \"theme\" | \"disableEvents\" | \"editable\" | \"namespace\"\n > &\n Pick<AnyLexicalPlan, \"$initialEditorState\" | \"onError\"> = {};\n const nodes = new Set<NonNullable<CreateEditorArgs[\"nodes\"]>[number]>();\n const replacedNodes = new Map<\n KlassConstructor<typeof LexicalNode>,\n PlanRep<AnyLexicalPlan>\n >();\n const htmlExport: NonNullable<HTMLConfig[\"export\"]> = new Map();\n const htmlImport: NonNullable<HTMLConfig[\"import\"]> = {};\n const theme: EditorThemeClasses = {};\n for (const planRep of this.sortedPlanReps()) {\n const { plan } = planRep;\n if (plan.onError !== undefined) {\n config.onError = plan.onError;\n }\n if (plan.disableEvents !== undefined) {\n config.disableEvents = plan.disableEvents;\n }\n if (plan.editable !== undefined) {\n config.editable = plan.editable;\n }\n if (plan.namespace !== undefined) {\n config.namespace = plan.namespace;\n }\n if (plan.$initialEditorState !== undefined) {\n config.$initialEditorState = plan.$initialEditorState;\n }\n if (plan.nodes) {\n for (const node of plan.nodes) {\n if (typeof node !== \"function\") {\n const conflictPlan = replacedNodes.get(node.replace);\n if (conflictPlan) {\n invariant(\n false,\n \"LexicalBuilder: Plan %s can not register replacement for node %s because %s already did\",\n plan.name,\n node.replace.name,\n conflictPlan.plan.name,\n );\n }\n replacedNodes.set(node.replace, planRep);\n }\n nodes.add(node);\n }\n }\n if (plan.html) {\n if (plan.html.export) {\n for (const [k, v] of plan.html.export.entries()) {\n htmlExport.set(k, v);\n }\n }\n if (plan.html.import) {\n Object.assign(htmlImport, plan.html.import);\n }\n }\n if (plan.theme) {\n deepThemeMergeInPlace(theme, plan.theme);\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n if (Object.keys(theme).length > 0) {\n config.theme = theme;\n }\n if (nodes.size) {\n config.nodes = [...nodes];\n }\n const hasImport = Object.keys(htmlImport).length > 0;\n const hasExport = htmlExport.size > 0;\n if (hasImport || hasExport) {\n config.html = {};\n if (hasImport) {\n config.html.import = htmlImport;\n }\n if (hasExport) {\n config.html.export = htmlExport;\n }\n }\n return config;\n }\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { registerPlainText } from \"@lexical/plain-text\";\n\nimport { definePlan } from \"./definePlan\";\n\nexport const PlainTextPlan = definePlan({\n config: {},\n conflictsWith: [\"@lexical/rich-text\"],\n name: \"@lexical/plain-text\",\n register: registerPlainText,\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type { LexicalEditor } from \"lexical\";\n\nimport { $canShowPlaceholderCurry } from \"@lexical/text\";\nimport { mergeRegister } from \"@lexical/utils\";\n\nimport {\n RegisterLexicalSubscription,\n registerLexicalSubscription,\n} from \"./registerSubscription\";\n\nfunction canShowPlaceholderFromCurrentEditorState(\n editor: LexicalEditor,\n): boolean {\n const currentCanShowPlaceholder = editor\n .getEditorState()\n .read($canShowPlaceholderCurry(editor.isComposing()));\n\n return currentCanShowPlaceholder;\n}\n\nfunction subscribe(\n editor: LexicalEditor,\n onChange: (canShow: boolean) => void,\n) {\n const resetCanShowPlaceholder = () =>\n onChange(canShowPlaceholderFromCurrentEditorState(editor));\n return mergeRegister(\n editor.registerUpdateListener(resetCanShowPlaceholder),\n editor.registerEditableListener(resetCanShowPlaceholder),\n );\n}\n\nexport const canShowPlaceholder: RegisterLexicalSubscription<boolean> = {\n initialValueFn: canShowPlaceholderFromCurrentEditorState,\n subscribe,\n};\n\nexport function registerCanShowPlaceholder(\n editor: LexicalEditor,\n onChange: (canShow: boolean) => void,\n): () => void {\n return registerLexicalSubscription(editor, canShowPlaceholder, onChange);\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 { useEffect, useLayoutEffect } from \"react\";\nimport { CAN_USE_DOM } from \"@lexical/utils\";\n\nconst useLayoutEffectImpl: typeof useLayoutEffect = CAN_USE_DOM\n ? useLayoutEffect\n : useEffect;\n\nexport default useLayoutEffectImpl;\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 { LexicalEditor, NodeKey } from \"lexical\";\n\nimport { Suspense, useEffect, useMemo, useState } from \"react\";\nimport * as React from \"react\";\nimport { createPortal, flushSync } from \"react-dom\";\nimport useLayoutEffect from \"./shared/useLayoutEffect\";\nimport invariant from \"./shared/invariant\";\n\nexport type ErrorBoundaryProps = {\n children: JSX.Element;\n onError: (error: Error) => void;\n};\n\nexport type ErrorBoundaryType =\n | React.ComponentClass<ErrorBoundaryProps>\n | React.FC<ErrorBoundaryProps>;\n\nexport function useReactDecorators(\n editor: LexicalEditor,\n ErrorBoundary: ErrorBoundaryType,\n): Array<JSX.Element> {\n const [decorators, setDecorators] = useState<Record<NodeKey, JSX.Element>>(\n () => editor.getDecorators<JSX.Element>(),\n );\n\n // Subscribe to changes\n useLayoutEffect(() => {\n return editor.registerDecoratorListener<JSX.Element>((nextDecorators) => {\n flushSync(() => {\n setDecorators(nextDecorators);\n });\n });\n }, [editor]);\n\n useEffect(() => {\n // If the content editable mounts before the subscription is added, then\n // nothing will be rendered on initial pass. We can get around that by\n // ensuring that we set the value.\n setDecorators(editor.getDecorators());\n }, [editor]);\n\n // Return decorators defined as React Portals\n return useMemo(() => {\n const decoratedPortals = [];\n const decoratorKeys = Object.keys(decorators);\n\n for (let i = 0; i < decoratorKeys.length; i++) {\n const nodeKey = decoratorKeys[i];\n invariant(\n nodeKey !== undefined,\n \"useReactDecorators: decoratorKeys[%s] must be defined\",\n String(i),\n );\n const element = editor.getElementByKey(nodeKey);\n\n if (element !== null) {\n const reactDecorator = (\n <ErrorBoundary onError={(e) => editor._onError(e)}>\n <Suspense fallback={null}>{decorators[nodeKey]}</Suspense>\n </ErrorBoundary>\n );\n decoratedPortals.push(createPortal(reactDecorator, element, nodeKey));\n }\n }\n\n return decoratedPortals;\n }, [ErrorBoundary, decorators, editor]);\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 { RegisterLexicalSubscription } from \"./registerSubscription\";\n\nimport useLexicalSubscription from \"@lexical/react/useLexicalSubscription\";\nimport { LexicalEditor } from \"lexical\";\nimport { useCallback } from \"react\";\n\nexport function useRegisterSubscription<T>(\n subscription: RegisterLexicalSubscription<T>,\n): T {\n const sub = useCallback(\n (editor: LexicalEditor) => {\n return {\n initialValueFn: subscription.initialValueFn.bind(subscription, editor),\n subscribe: subscription.subscribe.bind(subscription, editor),\n };\n },\n [subscription],\n );\n return useLexicalSubscription(sub);\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 { AnyLexicalPlanArgument } from \"./types\";\n\nimport {\n LexicalComposerContext,\n type LexicalComposerContextWithEditor,\n} from \"@lexical/react/LexicalComposerContext\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport LexicalErrorBoundary from \"@lexical/react/LexicalErrorBoundary\";\nimport useLexicalEditable from \"@lexical/react/useLexicalEditable\";\nimport * as React from \"react\";\nimport { Suspense, useEffect, useMemo, useRef } from \"react\";\n\nimport { definePlan } from \"./definePlan\";\nimport { LexicalBuilder, buildEditorFromPlans } from \"./LexicalBuilder\";\nimport { canShowPlaceholder } from \"./registerShowPlaceholder\";\nimport { shallowMergeConfig } from \"./shallowMergeConfig\";\nimport {\n type ErrorBoundaryType,\n useReactDecorators,\n} from \"./useReactDecorators\";\nimport { useRegisterSubscription } from \"./useRegisterSubscription\";\nimport invariant from \"./shared/invariant\";\n\nexport interface EditorChildrenComponentProps {\n context: LexicalComposerContextWithEditor;\n placeholder: null | JSX.Element;\n contentEditable: null | JSX.Element;\n children?: React.ReactNode;\n}\n\nexport type EditorChildrenComponentType = (\n props: EditorChildrenComponentProps,\n) => JSX.Element | null;\n\nexport interface DecoratorComponentProps {\n context: LexicalComposerContextWithEditor;\n}\nexport type DecoratorComponentType =\n | JSX.Element\n | ((props: DecoratorComponentProps) => JSX.Element | null);\n\nexport interface EditorComponentProps {\n EditorChildrenComponent: EditorChildrenComponentType;\n children?: React.ReactNode;\n placeholder:\n | ((isEditable: boolean) => null | JSX.Element)\n | null\n | JSX.Element;\n contentEditable: JSX.Element | null;\n ErrorBoundary: ErrorBoundaryType;\n}\n\nexport type EditorComponentType = (\n props: Partial<EditorComponentProps>,\n) => JSX.Element;\n\nexport interface ReactConfig {\n contentEditable: JSX.Element | null;\n placeholder:\n | ((isEditable: boolean) => null | JSX.Element)\n | null\n | JSX.Element;\n ErrorBoundary: ErrorBoundaryType;\n EditorChildrenComponent: EditorChildrenComponentType;\n Component: EditorComponentType;\n getContext: () => LexicalComposerContextWithEditor;\n decorators: readonly DecoratorComponentType[];\n}\n\nexport interface LexicalPlanComposerProps {\n plan: AnyLexicalPlanArgument;\n children: React.ReactNode;\n}\n\nconst scheduleMicrotask =\n \"queueMicrotask\" in globalThis\n ? queueMicrotask\n : (fn: () => void) => Promise.resolve().then(fn);\n\nexport function LexicalPlanComposer({\n plan,\n children,\n}: LexicalPlanComposerProps) {\n const componentRef = useRef<EditorComponentType | undefined>(undefined);\n const handle = useMemo(() => {\n return buildEditorFromPlans(\n definePlan({\n name: \"@lexical/builder/LexicalPlanComposer\",\n config: {},\n dependencies: [ReactPlan],\n register(_editor, _config, state) {\n componentRef.current = state.getDependencyConfig(ReactPlan).Component;\n return () => {\n componentRef.current = undefined;\n };\n },\n }),\n plan,\n );\n }, [plan]);\n useEffect(() => {\n // This is an awful trick to detect StrictMode\n let didMount = false;\n scheduleMicrotask(() => {\n didMount = true;\n });\n return () => {\n if (didMount) {\n handle.dispose();\n }\n };\n }, [handle]);\n const EditorComponent = componentRef.current;\n return EditorComponent ? <EditorComponent>{children}</EditorComponent> : null;\n}\n\nfunction DefaultEditorChildrenComponent({\n contentEditable,\n placeholder,\n children,\n}: EditorChildrenComponentProps) {\n return (\n <>\n {contentEditable}\n {placeholder && <Placeholder content={placeholder} />}\n {children}\n </>\n );\n}\n\nfunction buildEditorComponent(config: ReactConfig) {\n const context = config.getContext();\n const [editor] = context;\n const rawConfigDecorators = config.decorators.map((El) =>\n typeof El === \"function\" ? <El context={context} /> : El,\n );\n return function EditorComponent(props: Partial<EditorComponentProps>) {\n const {\n EditorChildrenComponent = config.EditorChildrenComponent,\n ErrorBoundary = config.ErrorBoundary,\n contentEditable = config.contentEditable,\n placeholder = config.placeholder,\n children,\n } = props;\n const decorators = useReactDecorators(editor, ErrorBoundary);\n const configDecorators = useMemo(\n () =>\n rawConfigDecorators.map((decorator, i) => (\n <ErrorBoundary onError={(e) => editor._onError(e)} key={i}>\n <Suspense fallback={null}>{decorator}</Suspense>\n </ErrorBoundary>\n )),\n [ErrorBoundary],\n );\n return (\n <LexicalComposerContext.Provider value={context}>\n <EditorChildrenComponent\n context={context}\n contentEditable={contentEditable}\n placeholder={placeholder && <Placeholder content={placeholder} />}\n >\n {children}\n {configDecorators}\n {decorators}\n </EditorChildrenComponent>\n </LexicalComposerContext.Provider>\n );\n };\n}\n\nfunction WithEditable({\n content,\n}: {\n content: (isEditable: boolean) => null | JSX.Element;\n}) {\n return content(useLexicalEditable());\n}\n\nfunction Placeholder({\n content,\n}: {\n content: ((isEditable: boolean) => null | JSX.Element) | JSX.Element;\n}): null | JSX.Element {\n const showPlaceholder = useRegisterSubscription(canShowPlaceholder);\n if (!showPlaceholder) {\n return null;\n } else if (typeof content === \"function\") {\n return <WithEditable content={content} />;\n } else {\n return content;\n }\n}\n\nconst initialConfig: ReactConfig = {\n EditorChildrenComponent: DefaultEditorChildrenComponent,\n ErrorBoundary: LexicalErrorBoundary,\n contentEditable: <ContentEditable />,\n decorators: [],\n placeholder: null,\n // Initialized on registration\n Component(): JSX.Element {\n invariant(false, \"ReactPlan used before register\");\n },\n // Initialized on registration\n getContext() {\n invariant(false, \"ReactPlan used before register\");\n },\n};\n\nexport const ReactPlan = definePlan({\n config: initialConfig,\n mergeConfig(a, b) {\n const config = shallowMergeConfig(a, b);\n if (b && b.decorators && b.decorators.length > 0) {\n config.decorators = [...a.decorators, ...b.decorators];\n }\n return config;\n },\n name: \"@etrepum/lexical-builder/ReactPlan\",\n register(editor, config) {\n const context: LexicalComposerContextWithEditor = [\n editor,\n { getTheme: () => editor._config.theme },\n ];\n config.getContext = () => context;\n config.Component = buildEditorComponent(config);\n return () => {\n config.getContext = initialConfig.getContext;\n config.Component = initialConfig.Component;\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 { mergeRegister } from \"@lexical/utils\";\nimport {\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n LexicalEditor,\n} from \"lexical\";\nimport { Suspense, useEffect, useState } from \"react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { createRoot, Root } from \"react-dom/client\";\n\nimport { configPlan, definePlan } from \"./definePlan\";\nimport { ReactPlan } from \"./ReactPlan\";\n\nexport interface HostMountCommandArg {\n root: Root;\n}\n\nexport type Container = Element | DocumentFragment;\n\nexport interface MountPluginCommandArg {\n key: string;\n element: JSX.Element | null;\n domNode?: Container | null;\n}\n\nexport function mountReactPluginComponent<\n P extends Record<never, never> = Record<never, never>,\n>(\n editor: LexicalEditor,\n opts: {\n Component: null | React.ComponentType<P>;\n props: (P & React.Attributes) | null;\n } & Omit<MountPluginCommandArg, \"element\">,\n) {\n const { Component, props, ...rest } = opts;\n return mountReactPluginElement(editor, {\n ...rest,\n element: Component && props ? <Component {...props} /> : null,\n });\n}\n\nexport function mountReactPluginElement(\n editor: LexicalEditor,\n opts: MountPluginCommandArg,\n) {\n editor.dispatchCommand(REACT_MOUNT_PLUGIN_COMMAND, opts);\n}\n\nexport function mountReactPluginHost(\n editor: LexicalEditor,\n container: Container,\n) {\n editor.dispatchCommand(REACT_PLUGIN_HOST_MOUNT_COMMAND, {\n root: createRoot(container),\n });\n}\n\nexport const REACT_PLUGIN_HOST_MOUNT_COMMAND =\n createCommand<HostMountCommandArg>(\"REACT_PLUGIN_HOST_MOUNT_COMMAND\");\nexport const REACT_MOUNT_PLUGIN_COMMAND = createCommand<MountPluginCommandArg>(\n \"REACT_MOUNT_PLUGIN_COMMAND\",\n);\n\nexport const ReactPluginHostPlan = definePlan({\n config: {},\n dependencies: [\n configPlan(ReactPlan, {\n contentEditable: null,\n }),\n ],\n name: \"@etrepum/lexical-builder/ReactPluginHostPlan\",\n register(editor, _config, state) {\n let root: Root | undefined;\n const mountedPlugins = new Map<\n MountPluginCommandArg[\"key\"],\n MountPluginCommandArg\n >();\n const { ErrorBoundary, Component } = state.getDependencyConfig(ReactPlan);\n function renderMountedPlugins() {\n const children: JSX.Element[] = [];\n for (const { key, element, domNode } of mountedPlugins.values()) {\n if (!element) {\n continue;\n }\n const wrapped = (\n <ErrorBoundary onError={(e) => editor._onError(e)} key={key}>\n <Suspense fallback={null}>{element}</Suspense>\n </ErrorBoundary>\n );\n children.push(domNode ? createPortal(wrapped, domNode, key) : wrapped);\n }\n return children.length > 0 ? <>{children}</> : null;\n }\n function PluginHost() {\n const [children, setChildren] = useState(renderMountedPlugins);\n useEffect(() => {\n return editor.registerCommand(\n REACT_MOUNT_PLUGIN_COMMAND,\n () => {\n setChildren(renderMountedPlugins);\n return true;\n },\n COMMAND_PRIORITY_EDITOR,\n );\n }, []);\n return children;\n }\n return mergeRegister(\n () => {\n if (root) {\n root.unmount();\n }\n },\n editor.registerCommand(\n REACT_MOUNT_PLUGIN_COMMAND,\n (arg) => {\n mountedPlugins.set(arg.key, arg);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n REACT_PLUGIN_HOST_MOUNT_COMMAND,\n (arg) => {\n root = arg.root;\n root.render(\n <Component>\n <PluginHost />\n </Component>,\n );\n return true;\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n );\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { HeadingNode, QuoteNode, registerRichText } from \"@lexical/rich-text\";\n\nimport { definePlan } from \"./definePlan\";\n\nexport const RichTextPlan = definePlan({\n config: {},\n conflictsWith: [\"@lexical/plain-text\"],\n name: \"@lexical/rich-text\",\n nodes: [HeadingNode, QuoteNode],\n register: registerRichText,\n});\n","/**\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/** An open interface for Name -> Config mappings */\nexport interface LexicalPlanRegistry {}\nexport const PACKAGE_VERSION = import.meta.env.PACKAGE_VERSION;\n\nexport { type AutoFocusConfig, AutoFocusPlan } from \"./AutoFocusPlan\";\nexport { configPlan, definePlan, defineRootPlan } from \"./definePlan\";\nexport { DragonPlan } from \"./DragonPlan\";\nexport { type HistoryConfig, HistoryPlan } from \"./HistoryPlan\";\nexport { LexicalBuilder, buildEditorFromPlans } from \"./LexicalBuilder\";\nexport { PlainTextPlan } from \"./PlainTextPlan\";\nexport {\n type DecoratorComponentProps,\n type DecoratorComponentType,\n type EditorChildrenComponentProps,\n type EditorChildrenComponentType,\n type EditorComponentProps,\n type EditorComponentType,\n LexicalPlanComposer,\n type LexicalPlanComposerProps,\n type ReactConfig,\n ReactPlan,\n} from \"./ReactPlan\";\nexport {\n type HostMountCommandArg,\n type MountPluginCommandArg,\n type Container,\n mountReactPluginComponent,\n mountReactPluginElement,\n mountReactPluginHost,\n REACT_MOUNT_PLUGIN_COMMAND,\n REACT_PLUGIN_HOST_MOUNT_COMMAND,\n ReactPluginHostPlan,\n} from \"./ReactPluginHostPlan\";\nexport { RichTextPlan } from \"./RichTextPlan\";\nexport {\n type AnyLexicalPlan,\n type AnyLexicalPlanArgument,\n type EditorHandle,\n type InitialEditorStateType,\n type LexicalPeerConfig,\n type LexicalPlan,\n type LexicalPlanArgument,\n type LexicalPlanConfig,\n type LexicalPlanName,\n type NormalizedLexicalPlanArgument,\n type PlanConfigBase,\n type RegisterState,\n} from \"./types\";\nexport {\n type ErrorBoundaryType,\n type ErrorBoundaryProps,\n} from \"./useReactDecorators\";\nexport { safeCast } from \"./safeCast\";\n"],"names":["useLayoutEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAeO,SAAS,WACd,MAC2B;AACpB,SAAA;AACT;AAEO,SAAS,eACd,MACuC;AACvC,SAAO,EAAE,GAAG,MAAM,MAAM,UAAU,QAAQ,CAAA;AAC5C;AAEgB,SAAA,WACd,MACA,QAC0C;AACnC,SAAA,CAAC,MAAM,MAAM;AACtB;ACvBO,SAAS,SAAY,OAAa;AAChC,SAAA;AACT;ACIO,MAAM,gBAAgB,WAAW;AAAA,EACtC,QAAQ,SAA0B,EAAE;AAAA,EACpC,MAAM;AAAA,EACN,SAAS,QAAQ,EAAE,oBAAoB;AAC9B,WAAA,OAAO,qBAAqB,CAAC,gBAAgB;AAC3C,aAAA;AAAA,QACL,MAAM;AAKJ,gBAAM,gBAAgB,SAAS;AAE7B,cAAA,gBAAgB,SACf,kBAAkB,QAAQ,CAAC,YAAY,SAAS,aAAa,IAC9D;AAEA,wBAAY,MAAM,EAAE,eAAe,KAAM,CAAA;AAAA,UAC3C;AAAA,QACF;AAAA,QACA,EAAE,iBAAiB;AAAA,MAAA;AAAA,IACrB,CACD;AAAA,EACH;AACF,CAAC;AC3BM,MAAM,aAAa,WAAW;AAAA,EACnC,QAAQ,CAAC;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AACZ,CAAC;ACKM,MAAM,cAAc,WAAW;AAAA,EACpC,QAAQ,SAAwB;AAAA,IAC9B,2BAA2B;AAAA,IAC3B,OAAO;AAAA,EAAA,CACR;AAAA,EACD,MAAM;AAAA,EACN,SAAS,QAAQ,EAAE,OAAO,6BAA6B;AACrD,WAAO,gBAAgB,QAAQ,0BAA0B,GAAG,KAAK;AAAA,EACnE;AACF,CAAC;ACnBuB,SAAA,UACtB,MACA,YACG,MACW;AACd,MAAI,MAAM;AACR;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE;AAAA,EAAA;AAE3E;ACfgB,SAAA,sBAAsB,GAAY,GAAY;AAC5D,MACE,KACA,KACA,CAAC,MAAM,QAAQ,CAAC,KAChB,OAAO,MAAM,YACb,OAAO,MAAM,UACb;AACA,UAAM,OAAO;AACb,UAAM,OAAO;AACb,eAAW,KAAK,MAAM;AACf,WAAA,CAAC,IAAI,sBAAsB,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,IAClD;AACO,WAAA;AAAA,EACT;AACO,SAAA;AACT;ACZA,MAAM,wBAAwB,EAAE,KAAK;AAErC,SAAS,sBAAsB;AAC7B,QAAM,OAAO;AACT,MAAA,KAAK,WAAW;AACb,SAAA,OAAO,sBAAsB;AAAA,EACpC;AACF;AAEgB,SAAA,iBACd,QACA,sBAA8C,qBACxC;AACN,UAAQ,OAAO,qBAAqB;AAAA,IAClC,KAAK,YAAY;AACf,aAAO,OAAO,MAAM,oBAAoB,MAAM,GAAG,qBAAqB;AACtE;AAAA,IACF;AAAA,IACA,KAAK,UAAU;AACP,YAAA,oBAAoB,OAAO,iBAAiB,mBAAmB;AAC9D,aAAA,eAAe,mBAAmB,qBAAqB;AAC9D;AAAA,IACF;AAAA,IACA,KAAK,UAAU;AACb,UAAI,qBAAqB;AAChB,eAAA,eAAe,qBAAqB,qBAAqB;AAAA,MAClE;AACA;AAAA,IACF;AAAA,EACF;AACF;ACjCgB,SAAA,mBACd,GACA,GACG;AACC,MAAA,CAAC,KAAK,MAAM,GAAG;AACV,WAAA;AAAA,EACT;AACA,aAAW,KAAK,GAAG;AACjB,QAAI,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG;AACjB,aAAO,EAAE,GAAG,GAAG,GAAG;IACpB;AAAA,EACF;AACO,SAAA;AACT;ACHO,MAAM,QAAqC;AAAA,EAKhD,YAAY,SAAyB,MAAY;AAJjD;AACA;AACA;AACA;AAEE,SAAK,UAAU;AACf,SAAK,OAAO;AACP,SAAA,8BAAc;EACrB;AAAA,EACA,cACE,MAC0D;AAC1D,UAAM,MAAM,KAAK,QAAQ,YAAY,IAAI,IAAI;AACtC,WAAA,OAAO,IAAI;EACpB;AAAA,EACA,oBACE,KAC+B;AAC/B,UAAM,OAAO,KAAK,QAAQ,QAAQ,IAAI,GAAG;AACzC;AAAA,MACE,SAAS;AAAA,MACT;AAAA,MACA,KAAK,KAAK;AAAA,MACV,IAAI;AAAA,IAAA;AAEC,WAAA,KAAK,CAAC,EAAE;EACjB;AAAA,EACA,YAAqC;AACnC,QAAI,KAAK,SAAS;AAChB,aAAO,KAAK;AAAA,IACd;AACI,QAAA,SAAS,KAAK,KAAK;AACjB,UAAA,cAAc,KAAK,KAAK,cAC1B,KAAK,KAAK,YAAY,KAAK,KAAK,IAAI,IACpC;AACO,eAAA,OAAO,KAAK,SAAS;AACrB,eAAA,YAAY,QAAQ,GAAG;AAAA,IAClC;AACA,SAAK,UAAU;AACR,WAAA;AAAA,EACT;AACF;AChCA,MAAM,yCAAyB;AAEf,SAAA,qBACd,SACG,OACW;AACR,QAAA,UAAU,IAAI;AACpB,UAAQ,QAAQ,IAAI;AACpB,aAAW,aAAa,OAAO;AAC7B,YAAQ,QAAQ,SAAS;AAAA,EAC3B;AACA,SAAO,QAAQ;AACjB;AAGO,MAAM,eAAe;AAAA,EAM1B,cAAc;AALd;AACA;AACA;AACA;AAIE,SAAK,SAAS,CAAK,oBAAA,IAAK,CAAA;AACnB,SAAA,8BAAc;AACd,SAAA,kCAAkB;AAClB,SAAA,gCAAgB;EACvB;AAAA,EAEA,OAAO,WAAW,QAAuC;AACjD,UAAA,UAAU,mBAAmB,IAAI,MAAM;AAC7C;AAAA,MACE,YAAY;AAAA,MACZ;AAAA,IAAA;AAEK,WAAA;AAAA,EACT;AAAA,EAEA,cAA4B;AAC1B,UAAM,EAAE,qBAAqB,SAAS,GAAG,aAAa,IACpD,KAAK;AACP,UAAM,SAAS,aAAa;AAAA,MAC1B,GAAG;AAAA,MACH,GAAI,UAAU,EAAE,SAAS,CAAC,QAAQ,QAAQ,KAAK,MAAM,EAAE,IAAI,CAAC;AAAA,IAAA,CAC7D;AACD,qBAAiB,QAAQ,mBAAmB;AACzB,uBAAA,IAAI,QAAQ,IAAI;AACnC,UAAM,UAAU;AAAA,MACd,MAAM,mBAAmB,OAAO,MAAM;AAAA,MACtC,KAAK,eAAe,MAAM;AAAA,IAAA;AAErB,WAAA,EAAE,SAAS;EACpB;AAAA,EAEA,QAAQ,KAAqC;AACvC,QAAA;AACA,QAAA;AACA,QAAA,MAAM,QAAQ,GAAG,GAAG;AACrB,OAAA,MAAM,GAAG,OAAO,IAAI;AAAA,IAAA,OAChB;AACE,aAAA;AACP,gBAAU,CAAA;AAAA,IACZ;AACI,QAAA,CAAC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,CAAC,GAAG,MAAS;AAC9D,QAAI,CAAC,SAAS;AACZ,YAAM,cAAc,KAAK,UAAU,IAAI,KAAK,IAAI;AAC5C,UAAA,OAAO,gBAAgB,UAAU;AACnC;AAAA,UACE;AAAA,UACA;AAAA,UACA,KAAK;AAAA,UACL;AAAA,QAAA;AAAA,MAEJ;AACA,iBAAW,QAAQ,KAAK,iBAAiB,CAAA,GAAI;AAC3C;AAAA,UACE,CAAC,KAAK,YAAY,IAAI,IAAI;AAAA,UAC1B;AAAA,UACA,KAAK;AAAA,UACL;AAAA,QAAA;AAEF,aAAK,UAAU,IAAI,MAAM,KAAK,IAAI;AAAA,MACpC;AAEA,iBAAW,OAAO,KAAK,gBAAgB,CAAA,GAAI;AACzC,gBAAQ,KAAK,IAAI,OAAO,IAAI,KAAK,QAAQ,GAAG,CAAC;AAAA,MAC/C;AACA,iBAAW,CAAC,SAAS,GAAG,KAAK,OAAO;AAAA,QAClC,KAAK,oBAAoB,CAAC;AAAA,MAAA,GACzB;AACD,cAAM,MAAM,KAAK,YAAY,IAAI,OAAO;AACxC,YAAI,KAAK;AACC,kBAAA,KAAK,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AAAA,QAC3D;AAAA,MACF;AACA;AAAA,QACE,KAAK,OAAO,UAAU;AAAA,QACtB;AAAA,MAAA;AAEE,UAAA,KAAK,OAAO,WAAW,OAAO;AAChC,aAAK,OAAO,KAAS,oBAAA,IAAK,CAAA;AAAA,MAC5B;AACU,gBAAA,IAAI,QAAQ,MAAM,IAAI;AAChC;AAAA,QACE,CAAC,KAAK,YAAY,IAAI,KAAK,IAAI;AAAA,QAC/B;AAAA,QACA,KAAK;AAAA,MAAA;AAEP,WAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,OAAO,CAAC;AACvC,WAAK,YAAY,IAAI,KAAK,MAAM,OAAO;AACjC,YAAA,kBAAkB,KAAK,OAAO,KAAK;AACzC;AAAA,QACE,oBAAoB;AAAA,QACpB;AAAA,QACA,OAAO,KAAK;AAAA,MAAA;AAEE,sBAAA,IAAI,MAAM,OAAO;AAAA,IACnC;AACA,eAAW,UAAU,SAAS;AACpB,cAAA,QAAQ,IAAI,MAAM;AAAA,IAC5B;AACO,WAAA;AAAA,EACT;AAAA,EAEA,CAAC,iBAAiB;AACL,eAAA,SAAS,KAAK,QAAQ;AAC/B,aAAO,MAAM;IACf;AAAA,EACF;AAAA,EAEA,eAAe,QAAmC;AAChD,UAAM,WAA2B,CAAA;AAC3B,UAAA,aAAa,IAAI;AACZ,eAAA,WAAW,KAAK,kBAAkB;AACvC,UAAA,QAAQ,KAAK,UAAU;AAChB,iBAAA;AAAA,UACP,QAAQ,KAAK,SAAS,QAAQ,QAAQ,aAAa;AAAA,YACjD,qBAAqB,QAAQ,oBAAoB,KAAK,OAAO;AAAA,YAC7D,eAAe,QAAQ,cAAc,KAAK,OAAO;AAAA,YACjD,QAAQ,WAAW;AAAA,UAAA,CACpB;AAAA,QAAA;AAAA,MAEL;AAAA,IACF;AACA,WAAO,MAAM;AACX,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AACvC,cAAA,aAAa,SAAS,CAAC;AAC7B;AAAA,UACE,eAAe;AAAA,UACf;AAAA,UACA,OAAO,CAAC;AAAA,QAAA;AAEC;MACb;AACA,eAAS,SAAS;AAClB,iBAAW,MAAM;AAAA,IAAA;AAAA,EAErB;AAAA,EAEA,wBAAwB;AACtB,UAAM,SAIsD,CAAA;AACtD,UAAA,4BAAY;AACZ,UAAA,oCAAoB;AAIpB,UAAA,iCAAoD;AAC1D,UAAM,aAAgD,CAAA;AACtD,UAAM,QAA4B,CAAA;AACvB,eAAA,WAAW,KAAK,kBAAkB;AACrC,YAAA,EAAE,KAAS,IAAA;AACb,UAAA,KAAK,YAAY,QAAW;AAC9B,eAAO,UAAU,KAAK;AAAA,MACxB;AACI,UAAA,KAAK,kBAAkB,QAAW;AACpC,eAAO,gBAAgB,KAAK;AAAA,MAC9B;AACI,UAAA,KAAK,aAAa,QAAW;AAC/B,eAAO,WAAW,KAAK;AAAA,MACzB;AACI,UAAA,KAAK,cAAc,QAAW;AAChC,eAAO,YAAY,KAAK;AAAA,MAC1B;AACI,UAAA,KAAK,wBAAwB,QAAW;AAC1C,eAAO,sBAAsB,KAAK;AAAA,MACpC;AACA,UAAI,KAAK,OAAO;AACH,mBAAA,QAAQ,KAAK,OAAO;AACzB,cAAA,OAAO,SAAS,YAAY;AAC9B,kBAAM,eAAe,cAAc,IAAI,KAAK,OAAO;AACnD,gBAAI,cAAc;AAChB;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA,KAAK;AAAA,gBACL,KAAK,QAAQ;AAAA,gBACb,aAAa,KAAK;AAAA,cAAA;AAAA,YAEtB;AACc,0BAAA,IAAI,KAAK,SAAS,OAAO;AAAA,UACzC;AACA,gBAAM,IAAI,IAAI;AAAA,QAChB;AAAA,MACF;AACA,UAAI,KAAK,MAAM;AACT,YAAA,KAAK,KAAK,QAAQ;AACT,qBAAA,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,OAAO,WAAW;AACpC,uBAAA,IAAI,GAAG,CAAC;AAAA,UACrB;AAAA,QACF;AACI,YAAA,KAAK,KAAK,QAAQ;AACpB,iBAAO,OAAO,YAAY,KAAK,KAAK,MAAM;AAAA,QAC5C;AAAA,MACF;AACA,UAAI,KAAK,OAAO;AACQ,8BAAA,OAAO,KAAK,KAAK;AAAA,MACzC;AAAA,IACF;AAEA,QAAI,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AACjC,aAAO,QAAQ;AAAA,IACjB;AACA,QAAI,MAAM,MAAM;AACP,aAAA,QAAQ,CAAC,GAAG,KAAK;AAAA,IAC1B;AACA,UAAM,YAAY,OAAO,KAAK,UAAU,EAAE,SAAS;AAC7C,UAAA,YAAY,WAAW,OAAO;AACpC,QAAI,aAAa,WAAW;AAC1B,aAAO,OAAO;AACd,UAAI,WAAW;AACb,eAAO,KAAK,SAAS;AAAA,MACvB;AACA,UAAI,WAAW;AACb,eAAO,KAAK,SAAS;AAAA,MACvB;AAAA,IACF;AACO,WAAA;AAAA,EACT;AACF;ACpQO,MAAM,gBAAgB,WAAW;AAAA,EACtC,QAAQ,CAAC;AAAA,EACT,eAAe,CAAC,oBAAoB;AAAA,EACpC,MAAM;AAAA,EACN,UAAU;AACZ,CAAC;ACED,SAAS,yCACP,QACS;AACH,QAAA,4BAA4B,OAC/B,iBACA,KAAK,yBAAyB,OAAO,YAAa,CAAA,CAAC;AAE/C,SAAA;AACT;AAEA,SAAS,UACP,QACA,UACA;AACA,QAAM,0BAA0B,MAC9B,SAAS,yCAAyC,MAAM,CAAC;AACpD,SAAA;AAAA,IACL,OAAO,uBAAuB,uBAAuB;AAAA,IACrD,OAAO,yBAAyB,uBAAuB;AAAA,EAAA;AAE3D;AAEO,MAAM,qBAA2D;AAAA,EACtE,gBAAgB;AAAA,EAChB;AACF;AChCA,MAAM,sBAA8C,cAChD,kBACA;ACYY,SAAA,mBACd,QACA,eACoB;AACd,QAAA,CAAC,YAAY,aAAa,IAAI;AAAA,IAClC,MAAM,OAAO,cAA2B;AAAA,EAAA;AAI1CA,sBAAgB,MAAM;AACb,WAAA,OAAO,0BAAuC,CAAC,mBAAmB;AACvE,gBAAU,MAAM;AACd,sBAAc,cAAc;AAAA,MAAA,CAC7B;AAAA,IAAA,CACF;AAAA,EAAA,GACA,CAAC,MAAM,CAAC;AAEX,YAAU,MAAM;AAIA,kBAAA,OAAO,eAAe;AAAA,EAAA,GACnC,CAAC,MAAM,CAAC;AAGX,SAAO,QAAQ,MAAM;AACnB,UAAM,mBAAmB,CAAA;AACnB,UAAA,gBAAgB,OAAO,KAAK,UAAU;AAE5C,aAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AACvC,YAAA,UAAU,cAAc,CAAC;AAC/B;AAAA,QACE,YAAY;AAAA,QACZ;AAAA,QACA,OAAO,CAAC;AAAA,MAAA;AAEJ,YAAA,UAAU,OAAO,gBAAgB,OAAO;AAE9C,UAAI,YAAY,MAAM;AACpB,cAAM,iBACH,oBAAA,eAAA,EAAc,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,GAC9C,8BAAC,UAAS,EAAA,UAAU,MAAO,UAAW,WAAA,OAAO,GAAE,EACjD,CAAA;AAEF,yBAAiB,KAAK,aAAa,gBAAgB,SAAS,OAAO,CAAC;AAAA,MACtE;AAAA,IACF;AAEO,WAAA;AAAA,EACN,GAAA,CAAC,eAAe,YAAY,MAAM,CAAC;AACxC;AC7DO,SAAS,wBACd,cACG;AACH,QAAM,MAAM;AAAA,IACV,CAAC,WAA0B;AAClB,aAAA;AAAA,QACL,gBAAgB,aAAa,eAAe,KAAK,cAAc,MAAM;AAAA,QACrE,WAAW,aAAa,UAAU,KAAK,cAAc,MAAM;AAAA,MAAA;AAAA,IAE/D;AAAA,IACA,CAAC,YAAY;AAAA,EAAA;AAEf,SAAO,uBAAuB,GAAG;AACnC;ACuDA,MAAM,oBACJ,oBAAoB,aAChB,iBACA,CAAC,OAAmB,QAAQ,QAAU,EAAA,KAAK,EAAE;AAE5C,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AACF,GAA6B;AACrB,QAAA,eAAe,OAAwC,MAAS;AAChE,QAAA,SAAS,QAAQ,MAAM;AACpB,WAAA;AAAA,MACL,WAAW;AAAA,QACT,MAAM;AAAA,QACN,QAAQ,CAAC;AAAA,QACT,cAAc,CAAC,SAAS;AAAA,QACxB,SAAS,SAAS,SAAS,OAAO;AAChC,uBAAa,UAAU,MAAM,oBAAoB,SAAS,EAAE;AAC5D,iBAAO,MAAM;AACX,yBAAa,UAAU;AAAA,UAAA;AAAA,QAE3B;AAAA,MAAA,CACD;AAAA,MACD;AAAA,IAAA;AAAA,EACF,GACC,CAAC,IAAI,CAAC;AACT,YAAU,MAAM;AAEd,QAAI,WAAW;AACf,sBAAkB,MAAM;AACX,iBAAA;AAAA,IAAA,CACZ;AACD,WAAO,MAAM;AACX,UAAI,UAAU;AACZ,eAAO,QAAQ;AAAA,MACjB;AAAA,IAAA;AAAA,EACF,GACC,CAAC,MAAM,CAAC;AACX,QAAM,kBAAkB,aAAa;AACrC,SAAO,kBAAkB,oBAAC,iBAAiB,EAAA,SAAA,CAAS,IAAqB;AAC3E;AAEA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,SAEK,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA;AAAA,IACA,eAAe,oBAAC,aAAY,EAAA,SAAS,YAAa,CAAA;AAAA,IAClD;AAAA,EACH,EAAA,CAAA;AAEJ;AAEA,SAAS,qBAAqB,QAAqB;AAC3C,QAAA,UAAU,OAAO;AACjB,QAAA,CAAC,MAAM,IAAI;AACX,QAAA,sBAAsB,OAAO,WAAW;AAAA,IAAI,CAAC,OACjD,OAAO,OAAO,aAAc,oBAAA,IAAA,EAAG,QAAkB,CAAA,IAAK;AAAA,EAAA;AAEjD,SAAA,SAAS,gBAAgB,OAAsC;AAC9D,UAAA;AAAA,MACJ,0BAA0B,OAAO;AAAA,MACjC,gBAAgB,OAAO;AAAA,MACvB,kBAAkB,OAAO;AAAA,MACzB,cAAc,OAAO;AAAA,MACrB;AAAA,IACE,IAAA;AACE,UAAA,aAAa,mBAAmB,QAAQ,aAAa;AAC3D,UAAM,mBAAmB;AAAA,MACvB,MACE,oBAAoB,IAAI,CAAC,WAAW,MAClC,oBAAC,eAAc,EAAA,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,GAC9C,UAAC,oBAAA,UAAA,EAAS,UAAU,MAAO,UAAA,UAAA,CAAU,EADiB,GAAA,CAExD,CACD;AAAA,MACH,CAAC,aAAa;AAAA,IAAA;AAEhB,WACG,oBAAA,uBAAuB,UAAvB,EAAgC,OAAO,SACtC,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,aAAa,eAAgB,oBAAA,aAAA,EAAY,SAAS,aAAa;AAAA,QAE9D,UAAA;AAAA,UAAA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEL,EAAA,CAAA;AAAA,EAAA;AAGN;AAEA,SAAS,aAAa;AAAA,EACpB;AACF,GAEG;AACM,SAAA,QAAQ,oBAAoB;AACrC;AAEA,SAAS,YAAY;AAAA,EACnB;AACF,GAEuB;AACf,QAAA,kBAAkB,wBAAwB,kBAAkB;AAClE,MAAI,CAAC,iBAAiB;AACb,WAAA;AAAA,EAAA,WACE,OAAO,YAAY,YAAY;AACjC,WAAA,oBAAC,gBAAa,QAAkB,CAAA;AAAA,EAAA,OAClC;AACE,WAAA;AAAA,EACT;AACF;AAEA,MAAM,gBAA6B;AAAA,EACjC,yBAAyB;AAAA,EACzB,eAAe;AAAA,EACf,qCAAkB,iBAAgB,EAAA;AAAA,EAClC,YAAY,CAAC;AAAA,EACb,aAAa;AAAA;AAAA,EAEb,YAAyB;AACvB,cAAU,OAAO,gCAAgC;AAAA,EACnD;AAAA;AAAA,EAEA,aAAa;AACX,cAAU,OAAO,gCAAgC;AAAA,EACnD;AACF;AAEO,MAAM,YAAY,WAAW;AAAA,EAClC,QAAQ;AAAA,EACR,YAAY,GAAG,GAAG;AACV,UAAA,SAAS,mBAAmB,GAAG,CAAC;AACtC,QAAI,KAAK,EAAE,cAAc,EAAE,WAAW,SAAS,GAAG;AAChD,aAAO,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,EAAE,UAAU;AAAA,IACvD;AACO,WAAA;AAAA,EACT;AAAA,EACA,MAAM;AAAA,EACN,SAAS,QAAQ,QAAQ;AACvB,UAAM,UAA4C;AAAA,MAChD;AAAA,MACA,EAAE,UAAU,MAAM,OAAO,QAAQ,MAAM;AAAA,IAAA;AAEzC,WAAO,aAAa,MAAM;AACnB,WAAA,YAAY,qBAAqB,MAAM;AAC9C,WAAO,MAAM;AACX,aAAO,aAAa,cAAc;AAClC,aAAO,YAAY,cAAc;AAAA,IAAA;AAAA,EAErC;AACF,CAAC;AC7Me,SAAA,0BAGd,QACA,MAIA;AACA,QAAM,EAAE,WAAW,OAAO,GAAG,SAAS;AACtC,SAAO,wBAAwB,QAAQ;AAAA,IACrC,GAAG;AAAA,IACH,SAAS,aAAa,4BAAS,WAAW,EAAA,GAAG,MAAO,CAAA,IAAK;AAAA,EAAA,CAC1D;AACH;AAEgB,SAAA,wBACd,QACA,MACA;AACO,SAAA,gBAAgB,4BAA4B,IAAI;AACzD;AAEgB,SAAA,qBACd,QACA,WACA;AACA,SAAO,gBAAgB,iCAAiC;AAAA,IACtD,MAAM,WAAW,SAAS;AAAA,EAAA,CAC3B;AACH;AAEa,MAAA,kCACX,cAAmC,iCAAiC;AAC/D,MAAM,6BAA6B;AAAA,EACxC;AACF;AAEO,MAAM,sBAAsB,WAAW;AAAA,EAC5C,QAAQ,CAAC;AAAA,EACT,cAAc;AAAA,IACZ,WAAW,WAAW;AAAA,MACpB,iBAAiB;AAAA,IAAA,CAClB;AAAA,EACH;AAAA,EACA,MAAM;AAAA,EACN,SAAS,QAAQ,SAAS,OAAO;AAC3B,QAAA;AACE,UAAA,qCAAqB;AAI3B,UAAM,EAAE,eAAe,UAAA,IAAc,MAAM,oBAAoB,SAAS;AACxE,aAAS,uBAAuB;AAC9B,YAAM,WAA0B,CAAA;AAChC,iBAAW,EAAE,KAAK,SAAS,aAAa,eAAe,UAAU;AAC/D,YAAI,CAAC,SAAS;AACZ;AAAA,QACF;AACA,cAAM,UACH,oBAAA,eAAA,EAAc,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,GAC9C,8BAAC,UAAS,EAAA,UAAU,MAAO,UAAA,QAAQ,CAAA,KADmB,GAExD;AAEF,iBAAS,KAAK,UAAU,aAAa,SAAS,SAAS,GAAG,IAAI,OAAO;AAAA,MACvE;AACA,aAAO,SAAS,SAAS,IAAI,oBAAA,UAAA,EAAG,UAAS,IAAM;AAAA,IACjD;AACA,aAAS,aAAa;AACpB,YAAM,CAAC,UAAU,WAAW,IAAI,SAAS,oBAAoB;AAC7D,gBAAU,MAAM;AACd,eAAO,OAAO;AAAA,UACZ;AAAA,UACA,MAAM;AACJ,wBAAY,oBAAoB;AACzB,mBAAA;AAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ,GAAG,CAAE,CAAA;AACE,aAAA;AAAA,IACT;AACO,WAAA;AAAA,MACL,MAAM;AACJ,YAAI,MAAM;AACR,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA,CAAC,QAAQ;AACQ,yBAAA,IAAI,IAAI,KAAK,GAAG;AACxB,iBAAA;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA,CAAC,QAAQ;AACP,iBAAO,IAAI;AACN,eAAA;AAAA,YACF,oBAAA,WAAA,EACC,UAAC,oBAAA,YAAA,CAAW,CAAA,GACd;AAAA,UAAA;AAEK,iBAAA;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;ACrIM,MAAM,eAAe,WAAW;AAAA,EACrC,QAAQ,CAAC;AAAA,EACT,eAAe,CAAC,qBAAqB;AAAA,EACrC,MAAM;AAAA,EACN,OAAO,CAAC,aAAa,SAAS;AAAA,EAC9B,UAAU;AACZ,CAAC;ACRY,MAAA,kBAAkB;"}
1
+ {"version":3,"file":"index.js","sources":["../src/definePlan.ts","../src/shared/invariant.ts","../src/deepThemeMergeInPlace.ts","../src/initializeEditor.ts","../src/shallowMergeConfig.ts","../src/PlanRep.ts","../src/LexicalBuilder.ts","../src/safeCast.ts","../src/AutoFocusPlan.ts","../src/DragonPlan.ts","../src/HistoryPlan.ts","../src/PlainTextPlan.ts","../src/RichTextPlan.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type {\n AnyLexicalPlan,\n LexicalPlan,\n LexicalPlanConfig,\n PlanConfigBase,\n} from \"./types\";\n\nexport function definePlan<Config extends PlanConfigBase, Name extends string>(\n plan: LexicalPlan<Config, Name>,\n): LexicalPlan<Config, Name> {\n return plan;\n}\n\nexport function defineRootPlan(\n plan: Omit<LexicalPlan<PlanConfigBase, string>, \"config\" | \"name\">,\n): LexicalPlan<PlanConfigBase, \"[root]\"> {\n return { ...plan, name: \"[root]\", config: {} };\n}\n\nexport function configPlan<Plan extends AnyLexicalPlan>(\n plan: Plan,\n config: Partial<LexicalPlanConfig<Plan>>,\n): [Plan, Partial<LexicalPlanConfig<Plan>>] {\n return [plan, config];\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// 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\nexport function deepThemeMergeInPlace(a: unknown, b: unknown) {\n if (\n a &&\n b &&\n !Array.isArray(b) &&\n typeof a === \"object\" &&\n typeof b === \"object\"\n ) {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n for (const k in bObj) {\n aObj[k] = deepThemeMergeInPlace(aObj[k], bObj[k]);\n }\n return a;\n }\n return b;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type { InitialEditorStateType } from \"./types\";\n\nimport { $createParagraphNode, $getRoot, type LexicalEditor } from \"lexical\";\n\nconst HISTORY_MERGE_OPTIONS = { tag: \"history-merge\" };\n\nfunction $defaultInitializer() {\n const root = $getRoot();\n if (root.isEmpty()) {\n root.append($createParagraphNode());\n }\n}\n\nexport function initializeEditor(\n editor: LexicalEditor,\n $initialEditorState: InitialEditorStateType = $defaultInitializer,\n): void {\n switch (typeof $initialEditorState) {\n case \"function\": {\n editor.update(() => $initialEditorState(editor), HISTORY_MERGE_OPTIONS);\n break;\n }\n case \"string\": {\n const parsedEditorState = editor.parseEditorState($initialEditorState);\n editor.setEditorState(parsedEditorState, HISTORY_MERGE_OPTIONS);\n break;\n }\n case \"object\": {\n if ($initialEditorState) {\n editor.setEditorState($initialEditorState, HISTORY_MERGE_OPTIONS);\n }\n break;\n }\n }\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport type { PlanConfigBase } from \"./types\";\n\nexport function shallowMergeConfig<T extends PlanConfigBase>(\n a: T,\n b?: Partial<T>,\n): T {\n if (!b || a === b) {\n return a;\n }\n for (const k in b) {\n if (b[k] !== a[k]) {\n return { ...a, ...b };\n }\n }\n return a;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type { LexicalBuilder } from \"./LexicalBuilder\";\nimport type { AnyLexicalPlan, LexicalPlanConfig } from \"./types\";\nimport type { LexicalPlanRegistry } from \"./types\";\n\nimport invariant from \"./shared/invariant\";\n\nimport { shallowMergeConfig } from \"./shallowMergeConfig\";\n\nexport class PlanRep<Plan extends AnyLexicalPlan> {\n builder: LexicalBuilder;\n configs: Set<LexicalPlanConfig<Plan>>;\n _config?: LexicalPlanConfig<Plan>;\n plan: Plan;\n constructor(builder: LexicalBuilder, plan: Plan) {\n this.builder = builder;\n this.plan = plan;\n this.configs = new Set();\n }\n getPeerConfig<Name extends keyof LexicalPlanRegistry>(\n name: string,\n ): undefined | LexicalPlanConfig<LexicalPlanRegistry[Name]> {\n const rep = this.builder.planNameMap.get(name);\n return rep && rep.getConfig();\n }\n getDependencyConfig<Dependency extends AnyLexicalPlan>(\n dep: Dependency,\n ): LexicalPlanConfig<Dependency> {\n const pair = this.builder.planMap.get(dep);\n invariant(\n pair !== undefined,\n \"LexicalPlanBuilder: Plan %s missing dependency plan %s to be in registry\",\n this.plan.name,\n dep.name,\n );\n return pair[1].getConfig();\n }\n getConfig(): LexicalPlanConfig<Plan> {\n if (this._config) {\n return this._config;\n }\n let config = this.plan.config;\n const mergeConfig = this.plan.mergeConfig\n ? this.plan.mergeConfig.bind(this.plan)\n : shallowMergeConfig;\n for (const cfg of this.configs) {\n config = mergeConfig(config, cfg);\n }\n this._config = config;\n return config;\n }\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport type {\n AnyLexicalPlan,\n AnyLexicalPlanArgument,\n EditorHandle,\n} from \"./types\";\n\nimport {\n LexicalEditor,\n createEditor,\n type CreateEditorArgs,\n type EditorThemeClasses,\n type HTMLConfig,\n type KlassConstructor,\n type LexicalNode,\n} from \"lexical\";\nimport invariant from \"./shared/invariant\";\n\nimport { deepThemeMergeInPlace } from \"./deepThemeMergeInPlace\";\nimport { initializeEditor } from \"./initializeEditor\";\nimport { PlanRep } from \"./PlanRep\";\nimport { mergeRegister } from \"@lexical/utils\";\n\nconst buildersForEditors = new WeakMap<LexicalEditor, LexicalBuilder>();\n\nexport function buildEditorFromPlans(\n plan: AnyLexicalPlanArgument,\n ...plans: AnyLexicalPlanArgument[]\n): EditorHandle {\n const builder = new LexicalBuilder();\n builder.addPlan(plan);\n for (const otherPlan of plans) {\n builder.addPlan(otherPlan);\n }\n return builder.buildEditor();\n}\n\nfunction noop() {}\nclass DisposableEditorHandle implements EditorHandle {\n editor: LexicalEditor;\n dispose: () => void;\n constructor(editor: LexicalEditor, dispose: () => void) {\n this.editor = editor;\n this.dispose = () => {\n try {\n dispose();\n } finally {\n this.dispose = noop;\n }\n };\n }\n // This should be safe even if the runtime doesn't have Symbol.dispose\n // because it will just be `handle[undefined] = dispose;`\n [Symbol.dispose]() {\n this.dispose();\n }\n}\n\nfunction defaultOnError(err: Error) {\n throw err;\n}\n\n/** @internal */\nexport class LexicalBuilder {\n phases: Map<AnyLexicalPlan, PlanRep<AnyLexicalPlan>>[];\n planMap: Map<AnyLexicalPlan, [number, PlanRep<AnyLexicalPlan>]>;\n planNameMap: Map<string, PlanRep<AnyLexicalPlan>>;\n conflicts: Map<string, string>;\n\n constructor() {\n // closure compiler can't handle class initializers\n this.phases = [new Map()];\n this.planMap = new Map();\n this.planNameMap = new Map();\n this.conflicts = new Map();\n }\n\n static fromEditor(editor: LexicalEditor): LexicalBuilder {\n const builder = buildersForEditors.get(editor);\n invariant(\n builder !== undefined,\n \"LexicalBuilder.fromEditor: editor was not created with this version of LexicalBuilder\",\n );\n return builder;\n }\n\n buildEditor(): EditorHandle {\n const { $initialEditorState, onError, ...editorConfig } =\n this.buildCreateEditorArgs();\n const editor = createEditor({\n ...editorConfig,\n ...(onError ? { onError: (err) => onError(err, editor) } : {}),\n });\n initializeEditor(editor, $initialEditorState);\n buildersForEditors.set(editor, this);\n return new DisposableEditorHandle(\n editor,\n mergeRegister(\n () => buildersForEditors.delete(editor),\n () => editor.setRootElement(null),\n this.registerEditor(editor),\n ),\n );\n }\n\n addPlan(arg: AnyLexicalPlanArgument): number {\n let plan: AnyLexicalPlan;\n let configs: unknown[];\n if (Array.isArray(arg)) {\n [plan, ...configs] = arg;\n } else {\n plan = arg;\n configs = [];\n }\n let [phase, planRep] = this.planMap.get(plan) || [0, undefined];\n if (!planRep) {\n const hasConflict = this.conflicts.get(plan.name);\n if (typeof hasConflict === \"string\") {\n invariant(\n false,\n \"LexicalBuilder: plan %s conflicts with %s\",\n plan.name,\n hasConflict,\n );\n }\n for (const name of plan.conflictsWith || []) {\n invariant(\n !this.planNameMap.has(name),\n \"LexicalBuilder: plan %s conflicts with %s\",\n plan.name,\n name,\n );\n this.conflicts.set(name, plan.name);\n }\n // TODO detect circular dependencies\n for (const dep of plan.dependencies || []) {\n phase = Math.max(phase, 1 + this.addPlan(dep));\n }\n for (const [depName, cfg] of Object.entries(\n plan.peerDependencies || {},\n )) {\n const dep = this.planNameMap.get(depName);\n if (dep) {\n phase = Math.max(phase, 1 + this.addPlan([dep.plan, cfg]));\n }\n }\n invariant(\n this.phases.length >= phase,\n \"LexicalBuilder: Expected phase to be no greater than phases.length\",\n );\n if (this.phases.length === phase) {\n this.phases.push(new Map());\n }\n planRep = new PlanRep(this, plan);\n invariant(\n !this.planNameMap.has(plan.name),\n \"LexicalBuilder: Multiple plans registered with name %s, names must be unique\",\n plan.name,\n );\n this.planMap.set(plan, [phase, planRep]);\n this.planNameMap.set(plan.name, planRep);\n const currentPhaseMap = this.phases[phase];\n invariant(\n currentPhaseMap !== undefined,\n \"LexicalBuilder: Expecting phase map for phase %s\",\n String(phase),\n );\n currentPhaseMap.set(plan, planRep);\n }\n for (const config of configs) {\n planRep.configs.add(config);\n }\n return phase;\n }\n\n *sortedPlanReps() {\n for (const phase of this.phases) {\n yield* phase.values();\n }\n }\n\n registerEditor(editor: LexicalEditor): () => void {\n const cleanups: (() => void)[] = [];\n const controller = new AbortController();\n for (const planRep of this.sortedPlanReps()) {\n if (planRep.plan.register) {\n cleanups.push(\n planRep.plan.register(editor, planRep.getConfig(), {\n getDependencyConfig: planRep.getDependencyConfig.bind(planRep),\n getPeerConfig: planRep.getPeerConfig.bind(planRep),\n signal: controller.signal,\n }),\n );\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() {\n const config: Pick<\n CreateEditorArgs,\n \"nodes\" | \"html\" | \"theme\" | \"disableEvents\" | \"editable\" | \"namespace\"\n > &\n Pick<AnyLexicalPlan, \"$initialEditorState\" | \"onError\"> = {\n // Prefer throwing errors rather than console.error by default\n onError: defaultOnError\n };\n const nodes = new Set<NonNullable<CreateEditorArgs[\"nodes\"]>[number]>();\n const replacedNodes = new Map<\n KlassConstructor<typeof LexicalNode>,\n PlanRep<AnyLexicalPlan>\n >();\n const htmlExport: NonNullable<HTMLConfig[\"export\"]> = new Map();\n const htmlImport: NonNullable<HTMLConfig[\"import\"]> = {};\n const theme: EditorThemeClasses = {};\n for (const planRep of this.sortedPlanReps()) {\n const { plan } = planRep;\n if (plan.onError !== undefined) {\n config.onError = plan.onError;\n }\n if (plan.disableEvents !== undefined) {\n config.disableEvents = plan.disableEvents;\n }\n if (plan.editable !== undefined) {\n config.editable = plan.editable;\n }\n if (plan.namespace !== undefined) {\n config.namespace = plan.namespace;\n }\n if (plan.$initialEditorState !== undefined) {\n config.$initialEditorState = plan.$initialEditorState;\n }\n if (plan.nodes) {\n for (const node of plan.nodes) {\n if (typeof node !== \"function\") {\n const conflictPlan = replacedNodes.get(node.replace);\n if (conflictPlan) {\n invariant(\n false,\n \"LexicalBuilder: Plan %s can not register replacement for node %s because %s already did\",\n plan.name,\n node.replace.name,\n conflictPlan.plan.name,\n );\n }\n replacedNodes.set(node.replace, planRep);\n }\n nodes.add(node);\n }\n }\n if (plan.html) {\n if (plan.html.export) {\n for (const [k, v] of plan.html.export.entries()) {\n htmlExport.set(k, v);\n }\n }\n if (plan.html.import) {\n Object.assign(htmlImport, plan.html.import);\n }\n }\n if (plan.theme) {\n deepThemeMergeInPlace(theme, plan.theme);\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n if (Object.keys(theme).length > 0) {\n config.theme = theme;\n }\n if (nodes.size) {\n config.nodes = [...nodes];\n }\n const hasImport = Object.keys(htmlImport).length > 0;\n const hasExport = htmlExport.size > 0;\n if (hasImport || hasExport) {\n config.html = {};\n if (hasImport) {\n config.html.import = htmlImport;\n }\n if (hasExport) {\n config.html.export = htmlExport;\n }\n }\n return config;\n }\n}\n","/**\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 * Explicitly and safely cast a value to a specific type when inference or\n * satisfies isn't going to work as expected (often useful for the config\n * property with definePlan)\n */\nexport function safeCast<T>(value: T): T {\n return value;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { definePlan } from \"./definePlan\";\nimport { safeCast } from \"./safeCast\";\n\nimport type {} from \"@etrepum/lexical-builder\";\ndeclare module \"@etrepum/lexical-builder\" {\n interface LexicalPlanRegistry {\n [AutoFocusPlan.name]: typeof AutoFocusPlan;\n }\n}\n\nexport interface AutoFocusConfig {\n defaultSelection?: \"rootStart\" | \"rootEnd\";\n}\n\nexport const AutoFocusPlan = definePlan({\n config: safeCast<AutoFocusConfig>({}),\n name: \"@etrepum/lexical-builder/AutoFocusPlan\",\n register(editor, { defaultSelection }) {\n return editor.registerRootListener((rootElement) => {\n editor.focus(\n () => {\n // If we try and move selection to the same point with setBaseAndExtent, it won't\n // trigger a re-focus on the element. So in the case this occurs, we'll need to correct it.\n // Normally this is fine, Selection API !== Focus API, but fore the intents of the naming\n // of this plugin, which should preserve focus too.\n const activeElement = document.activeElement;\n if (\n rootElement !== null &&\n (activeElement === null || !rootElement.contains(activeElement))\n ) {\n // Note: preventScroll won't work in Webkit.\n rootElement.focus({ preventScroll: true });\n }\n },\n { defaultSelection }\n );\n });\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { registerDragonSupport } from \"@lexical/dragon\";\n\nimport { definePlan } from \"./definePlan\";\n\nexport const DragonPlan = definePlan({\n config: {},\n name: \"@lexical/dragon\",\n register: registerDragonSupport,\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport {\n createEmptyHistoryState,\n type HistoryState,\n registerHistory,\n} from \"@lexical/history\";\n\nimport { definePlan } from \"./definePlan\";\nimport { safeCast } from \"./safeCast\";\n\nimport type {} from \"@etrepum/lexical-builder\";\ndeclare module \"@etrepum/lexical-builder\" {\n interface LexicalPlanRegistry {\n [HistoryPlan.name]: typeof HistoryPlan;\n }\n}\n\nexport interface HistoryConfig {\n delay: number;\n createInitialHistoryState: () => HistoryState;\n}\n\nexport const HistoryPlan = definePlan({\n config: safeCast<HistoryConfig>({\n createInitialHistoryState: createEmptyHistoryState,\n delay: 300,\n }),\n name: \"@etrepum/lexical-builder/HistoryPlan\",\n register(editor, { delay, createInitialHistoryState }) {\n return registerHistory(editor, createInitialHistoryState(), delay);\n },\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { registerPlainText } from \"@lexical/plain-text\";\n\nimport { definePlan } from \"./definePlan\";\n\nexport const PlainTextPlan = definePlan({\n config: {},\n conflictsWith: [\"@lexical/rich-text\"],\n name: \"@lexical/plain-text\",\n register: registerPlainText,\n});\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { HeadingNode, QuoteNode, registerRichText } from \"@lexical/rich-text\";\n\nimport { definePlan } from \"./definePlan\";\n\nexport const RichTextPlan = definePlan({\n config: {},\n conflictsWith: [\"@lexical/plain-text\"],\n name: \"@lexical/rich-text\",\n nodes: [HeadingNode, QuoteNode],\n register: registerRichText,\n});\n","/**\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\nexport const PACKAGE_VERSION = import.meta.env.PACKAGE_VERSION;\n\nexport { configPlan, definePlan, defineRootPlan } from \"./definePlan\";\nexport { LexicalBuilder, buildEditorFromPlans } from \"./LexicalBuilder\";\nexport {\n type AnyLexicalPlan,\n type AnyLexicalPlanArgument,\n type EditorHandle,\n type InitialEditorStateType,\n type LexicalPeerConfig,\n type LexicalPlan,\n type LexicalPlanArgument,\n type LexicalPlanConfig,\n type LexicalPlanName,\n type NormalizedLexicalPlanArgument,\n type PlanConfigBase,\n type RegisterState,\n} from \"./types\";\nexport { safeCast } from \"./safeCast\";\nexport { shallowMergeConfig } from \"./shallowMergeConfig\";\n// These plan definitions should all be colocated with their implementations, only here for convenience\nexport { type AutoFocusConfig, AutoFocusPlan } from \"./AutoFocusPlan\";\nexport { DragonPlan } from \"./DragonPlan\";\nexport { type HistoryConfig, HistoryPlan } from \"./HistoryPlan\";\nexport { PlainTextPlan } from \"./PlainTextPlan\";\nexport { RichTextPlan } from \"./RichTextPlan\";\n"],"names":[],"mappings":"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"}
@@ -5,5 +5,10 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  */
8
+ /**
9
+ * Explicitly and safely cast a value to a specific type when inference or
10
+ * satisfies isn't going to work as expected (often useful for the config
11
+ * property with definePlan)
12
+ */
8
13
  export declare function safeCast<T>(value: T): T;
9
14
  //# sourceMappingURL=safeCast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safeCast.d.ts","sourceRoot":"","sources":["../src/safeCast.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAEvC"}
1
+ {"version":3,"file":"safeCast.d.ts","sourceRoot":"","sources":["../src/safeCast.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAEvC"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { CreateEditorArgs, EditorState, LexicalEditor } from 'lexical';
2
- import { LexicalPlanRegistry } from '@etrepum/lexical-builder';
3
2
 
4
3
  export type AnyLexicalPlan = LexicalPlan<any, string>;
5
4
  export type AnyLexicalPlanArgument = LexicalPlanArgument<any, string>;
@@ -103,9 +102,26 @@ export type LexicalPeerConfig<Name extends keyof LexicalPlanRegistry | string> =
103
102
  ] extends [keyof LexicalPlanRegistry] ? LexicalPlanRegistry[Name] : PlanConfigBase;
104
103
  export type LexicalPlanConfig<Plan extends AnyLexicalPlan> = Plan["config"];
105
104
  export type LexicalPlanName<Plan extends AnyLexicalPlan> = Plan["name"];
106
- export interface EditorHandle {
105
+ export interface EditorHandle extends Disposable {
107
106
  editor: LexicalEditor;
108
107
  dispose: () => void;
109
108
  }
110
109
  export type InitialEditorStateType = null | string | EditorState | ((editor: LexicalEditor) => void);
110
+ /**
111
+ * An open interface for Name -> Config mappings. If you are defining a
112
+ * plan with non-empty config and it may be used as a peerDependency then
113
+ * you should extend this as follows:
114
+ *
115
+ * @example Extending LexicalPlanRegistry
116
+ * ```ts
117
+ * export const SomePlan = definePlan({ name: "@some/plan", config: { className: "default" } });
118
+ * declare module '@etrepum/lexical-builder' {
119
+ * interface LexicalPlanRegistry {
120
+ * [SomePlan.name]: typeof SomePlan;
121
+ * }
122
+ * }
123
+ * ```
124
+ */
125
+ export interface LexicalPlanRegistry {
126
+ }
111
127
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "test": "vitest run",
18
18
  "test:watch": "vitest"
19
19
  },
20
- "version": "0.0.6-nightly.20240603.0",
20
+ "version": "0.0.8",
21
21
  "license": "MIT",
22
22
  "repository": {
23
23
  "type": "git",
@@ -32,15 +32,18 @@
32
32
  "@lexical/dragon": ">=0.15.0",
33
33
  "@lexical/history": ">=0.15.0",
34
34
  "@lexical/plain-text": ">=0.15.0",
35
- "@lexical/react": ">=0.15.0",
36
35
  "@lexical/rich-text": ">=0.15.0",
37
36
  "@lexical/text": ">=0.15.0",
38
37
  "@lexical/utils": ">=0.15.0",
39
- "lexical": ">=0.15.0",
40
- "react": ">=18"
38
+ "lexical": ">=0.15.0"
41
39
  },
42
40
  "sideEffects": false,
43
41
  "devDependencies": {
42
+ "@testing-library/dom": "^10.1.0",
43
+ "@testing-library/jest-dom": "^6.4.5",
44
+ "@testing-library/react": "^16.0.0",
45
+ "@testing-library/user-event": "^14.5.2",
46
+ "jsdom": "^24.1.0",
44
47
  "tslib": "^2.6.2",
45
48
  "typescript": "^5.4.5",
46
49
  "vite": "^5.2.11",
@@ -1,40 +0,0 @@
1
- import { AnyLexicalPlanArgument } from './types';
2
- import { LexicalComposerContextWithEditor } from '@lexical/react/LexicalComposerContext';
3
- import { ErrorBoundaryType } from './useReactDecorators';
4
-
5
- import * as React from "react";
6
- export interface EditorChildrenComponentProps {
7
- context: LexicalComposerContextWithEditor;
8
- placeholder: null | JSX.Element;
9
- contentEditable: null | JSX.Element;
10
- children?: React.ReactNode;
11
- }
12
- export type EditorChildrenComponentType = (props: EditorChildrenComponentProps) => JSX.Element | null;
13
- export interface DecoratorComponentProps {
14
- context: LexicalComposerContextWithEditor;
15
- }
16
- export type DecoratorComponentType = JSX.Element | ((props: DecoratorComponentProps) => JSX.Element | null);
17
- export interface EditorComponentProps {
18
- EditorChildrenComponent: EditorChildrenComponentType;
19
- children?: React.ReactNode;
20
- placeholder: ((isEditable: boolean) => null | JSX.Element) | null | JSX.Element;
21
- contentEditable: JSX.Element | null;
22
- ErrorBoundary: ErrorBoundaryType;
23
- }
24
- export type EditorComponentType = (props: Partial<EditorComponentProps>) => JSX.Element;
25
- export interface ReactConfig {
26
- contentEditable: JSX.Element | null;
27
- placeholder: ((isEditable: boolean) => null | JSX.Element) | null | JSX.Element;
28
- ErrorBoundary: ErrorBoundaryType;
29
- EditorChildrenComponent: EditorChildrenComponentType;
30
- Component: EditorComponentType;
31
- getContext: () => LexicalComposerContextWithEditor;
32
- decorators: readonly DecoratorComponentType[];
33
- }
34
- export interface LexicalPlanComposerProps {
35
- plan: AnyLexicalPlanArgument;
36
- children: React.ReactNode;
37
- }
38
- export declare function LexicalPlanComposer({ plan, children, }: LexicalPlanComposerProps): import("react/jsx-runtime").JSX.Element | null;
39
- export declare const ReactPlan: import('./types').LexicalPlan<ReactConfig, "@etrepum/lexical-builder/ReactPlan">;
40
- //# sourceMappingURL=ReactPlan.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReactPlan.d.ts","sourceRoot":"","sources":["../src/ReactPlan.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,uCAAuC,CAAC;AAI/C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,gCAAgC,CAAC;IAC1C,WAAW,EAAE,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC;IAChC,eAAe,EAAE,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,MAAM,MAAM,2BAA2B,GAAG,CACxC,KAAK,EAAE,4BAA4B,KAChC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AAExB,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,gCAAgC,CAAC;CAC3C;AACD,MAAM,MAAM,sBAAsB,GAC9B,GAAG,CAAC,OAAO,GACX,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,uBAAuB,EAAE,2BAA2B,CAAC;IACrD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,WAAW,EACP,CAAC,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAC7C,IAAI,GACJ,GAAG,CAAC,OAAO,CAAC;IAChB,eAAe,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,KACjC,GAAG,CAAC,OAAO,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IACpC,WAAW,EACP,CAAC,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAC7C,IAAI,GACJ,GAAG,CAAC,OAAO,CAAC;IAChB,aAAa,EAAE,iBAAiB,CAAC;IACjC,uBAAuB,EAAE,2BAA2B,CAAC;IACrD,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,MAAM,gCAAgC,CAAC;IACnD,UAAU,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAOD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,QAAQ,GACT,EAAE,wBAAwB,kDAgC1B;AA+FD,eAAO,MAAM,SAAS,kFAsBpB,CAAC"}
@@ -1,23 +0,0 @@
1
- import { LexicalEditor } from 'lexical';
2
- import { Root } from 'react-dom/client';
3
-
4
- import * as React from "react";
5
- export interface HostMountCommandArg {
6
- root: Root;
7
- }
8
- export type Container = Element | DocumentFragment;
9
- export interface MountPluginCommandArg {
10
- key: string;
11
- element: JSX.Element | null;
12
- domNode?: Container | null;
13
- }
14
- export declare function mountReactPluginComponent<P extends Record<never, never> = Record<never, never>>(editor: LexicalEditor, opts: {
15
- Component: null | React.ComponentType<P>;
16
- props: (P & React.Attributes) | null;
17
- } & Omit<MountPluginCommandArg, "element">): void;
18
- export declare function mountReactPluginElement(editor: LexicalEditor, opts: MountPluginCommandArg): void;
19
- export declare function mountReactPluginHost(editor: LexicalEditor, container: Container): void;
20
- export declare const REACT_PLUGIN_HOST_MOUNT_COMMAND: import('lexical').LexicalCommand<HostMountCommandArg>;
21
- export declare const REACT_MOUNT_PLUGIN_COMMAND: import('lexical').LexicalCommand<MountPluginCommandArg>;
22
- export declare const ReactPluginHostPlan: import('./types').LexicalPlan<{}, "@etrepum/lexical-builder/ReactPluginHostPlan">;
23
- //# sourceMappingURL=ReactPluginHostPlan.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReactPluginHostPlan.d.ts","sourceRoot":"","sources":["../src/ReactPluginHostPlan.tsx"],"names":[],"mappings":"AAQA,OAAO,EAIL,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAc,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAKpD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,yBAAyB,CACvC,CAAC,SAAS,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAErD,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IACJ,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CACtC,GAAG,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,QAO3C;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,qBAAqB,QAG5B;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,QAKrB;AAED,eAAO,MAAM,+BAA+B,uDAC2B,CAAC;AACxE,eAAO,MAAM,0BAA0B,yDAEtC,CAAC;AAEF,eAAO,MAAM,mBAAmB,mFAyE9B,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- */
8
- export {};
9
- //# sourceMappingURL=LexicalBuilder.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LexicalBuilder.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/LexicalBuilder.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -1,6 +0,0 @@
1
- import { LexicalEditor } from 'lexical';
2
- import { RegisterLexicalSubscription } from './registerSubscription';
3
-
4
- export declare const canShowPlaceholder: RegisterLexicalSubscription<boolean>;
5
- export declare function registerCanShowPlaceholder(editor: LexicalEditor, onChange: (canShow: boolean) => void): () => void;
6
- //# sourceMappingURL=registerShowPlaceholder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerShowPlaceholder.d.ts","sourceRoot":"","sources":["../src/registerShowPlaceholder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C,OAAO,EACL,2BAA2B,EAE5B,MAAM,wBAAwB,CAAC;AAwBhC,eAAO,MAAM,kBAAkB,EAAE,2BAA2B,CAAC,OAAO,CAGnE,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GACnC,MAAM,IAAI,CAEZ"}
@@ -1,11 +0,0 @@
1
- import { LexicalEditor } from 'lexical';
2
-
3
- export interface RegisterLexicalSubscription<T> {
4
- initialValueFn: (editor: LexicalEditor) => T;
5
- subscribe: (editor: LexicalEditor, onChange: (value: T) => void) => () => void;
6
- }
7
- /**
8
- * Shortcut to Lexical subscriptions when values are used for render.
9
- */
10
- export declare function registerLexicalSubscription<T>(editor: LexicalEditor, subscription: RegisterLexicalSubscription<T>, onChange: (value: T) => void): () => void;
11
- //# sourceMappingURL=registerSubscription.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerSubscription.d.ts","sourceRoot":"","sources":["../src/registerSubscription.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAC5C,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,CAAC,CAAC;IAC7C,SAAS,EAAE,CACT,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,KACzB,MAAM,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,2BAA2B,CAAC,CAAC,CAAC,EAC5C,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAC3B,MAAM,IAAI,CAUZ"}
@@ -1,5 +0,0 @@
1
- import { useLayoutEffect } from 'react';
2
-
3
- declare const useLayoutEffectImpl: typeof useLayoutEffect;
4
- export default useLayoutEffectImpl;
5
- //# sourceMappingURL=useLayoutEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useLayoutEffect.d.ts","sourceRoot":"","sources":["../../src/shared/useLayoutEffect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAa,eAAe,EAAE,MAAM,OAAO,CAAC;AAGnD,QAAA,MAAM,mBAAmB,EAAE,OAAO,eAErB,CAAC;AAEd,eAAe,mBAAmB,CAAC"}
@@ -1,10 +0,0 @@
1
- import { LexicalEditor } from 'lexical';
2
-
3
- import * as React from "react";
4
- export type ErrorBoundaryProps = {
5
- children: JSX.Element;
6
- onError: (error: Error) => void;
7
- };
8
- export type ErrorBoundaryType = React.ComponentClass<ErrorBoundaryProps> | React.FC<ErrorBoundaryProps>;
9
- export declare function useReactDecorators(editor: LexicalEditor, ErrorBoundary: ErrorBoundaryType): Array<JSX.Element>;
10
- //# sourceMappingURL=useReactDecorators.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useReactDecorators.d.ts","sourceRoot":"","sources":["../src/useReactDecorators.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAW,MAAM,SAAS,CAAC;AAGtD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;IACtB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,GACxC,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;AAEjC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,iBAAiB,GAC/B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CA+CpB"}
@@ -1,4 +0,0 @@
1
- import { RegisterLexicalSubscription } from './registerSubscription';
2
-
3
- export declare function useRegisterSubscription<T>(subscription: RegisterLexicalSubscription<T>): T;
4
- //# sourceMappingURL=useRegisterSubscription.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRegisterSubscription.d.ts","sourceRoot":"","sources":["../src/useRegisterSubscription.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAM1E,wBAAgB,uBAAuB,CAAC,CAAC,EACvC,YAAY,EAAE,2BAA2B,CAAC,CAAC,CAAC,GAC3C,CAAC,CAWH"}