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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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":"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"}
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"}