@lofcz/platejs-toggle 52.0.11 → 52.3.6

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.
@@ -0,0 +1,28 @@
1
+ import * as platejs0 from "platejs";
2
+ import { PluginConfig } from "platejs";
3
+
4
+ //#region src/lib/BaseTogglePlugin.d.ts
5
+ type BaseToggleConfig = PluginConfig<'toggle', {
6
+ openIds?: Set<string>;
7
+ }, {
8
+ toggle: {
9
+ toggleIds: (ids: string[], force?: boolean | null) => void;
10
+ };
11
+ }, {}, {
12
+ isOpen?: (toggleId: string) => boolean;
13
+ someClosed?: (toggleIds: string[]) => boolean;
14
+ }>;
15
+ declare const BaseTogglePlugin: platejs0.SlatePlugin<PluginConfig<"toggle", {
16
+ openIds?: Set<string>;
17
+ }, {
18
+ toggle: {
19
+ toggleIds: (ids: string[], force?: boolean | null) => void;
20
+ };
21
+ } & Record<"toggle", {
22
+ toggleIds: (ids: string[], force?: boolean | null) => void;
23
+ }>, {}, {
24
+ isOpen?: (toggleId: string) => boolean;
25
+ someClosed?: (toggleIds: string[]) => boolean;
26
+ }>>;
27
+ //#endregion
28
+ export { BaseTogglePlugin as n, BaseToggleConfig as t };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,7 @@
1
- import { n as BaseTogglePlugin, t as BaseToggleConfig } from "./BaseTogglePlugin-CrydL5tg";
1
+ import { n as BaseTogglePlugin, t as BaseToggleConfig } from "./BaseTogglePlugin-DNYyT8--";
2
2
  import { SlateEditor } from "platejs";
3
3
 
4
4
  //#region src/lib/queries/someToggle.d.ts
5
- declare const someToggle: (editor: SlateEditor) => any;
5
+ declare const someToggle: (editor: SlateEditor) => boolean;
6
6
  //#endregion
7
- export { BaseToggleConfig, BaseTogglePlugin, someToggle };
8
- //# sourceMappingURL=index.d.ts.map
7
+ export { BaseToggleConfig, BaseTogglePlugin, someToggle };
@@ -1,26 +1,39 @@
1
- import { t as BaseToggleConfig } from "../BaseTogglePlugin-CrydL5tg";
2
- import { ExtendConfig, NodeEntry, SlateEditor, TIndentElement, Value } from "platejs";
1
+ import { t as BaseToggleConfig } from "../BaseTogglePlugin-DNYyT8--";
2
+ import * as platejs0 from "platejs";
3
+ import { ExtendConfig, SlateEditor, TIndentElement } from "platejs";
4
+ import * as platejs_react0 from "platejs/react";
3
5
  import { OverrideEditor, RenderNodeWrapper, UseHooks } from "platejs/react";
4
6
  import { Atom } from "jotai";
5
7
 
6
8
  //#region src/react/toggleIndexAtom.d.ts
7
- declare const buildToggleIndex: (elements: Value) => Map<string, string[]>;
9
+ declare const buildToggleIndex: (elements: any[]) => Map<string, string[]>;
8
10
  declare const editorAtom: Atom<{
9
11
  editor: {
10
12
  children: TIndentElement[];
11
13
  };
12
14
  version: number;
13
15
  }>;
14
- declare const useIsVisible: (elementId: string) => any;
16
+ declare const useIsVisible: (elementId: string) => boolean;
15
17
  declare const toggleIndexAtom: Atom<Map<string, string[]>>;
16
- declare const useToggleIndex: () => any;
18
+ declare const useToggleIndex: () => Map<string, string[]>;
17
19
  //#endregion
18
20
  //#region src/react/TogglePlugin.d.ts
19
21
  type ToggleConfig = ExtendConfig<BaseToggleConfig, {
20
22
  toggleIndex?: ReturnType<typeof buildToggleIndex>;
21
23
  }>;
22
24
  /** Enables support for toggleable elements in the editor. */
23
- declare const TogglePlugin: any;
25
+ declare const TogglePlugin: platejs_react0.PlatePlugin<platejs0.PluginConfig<"toggle", {
26
+ openIds?: Set<string>;
27
+ } & {
28
+ toggleIndex?: ReturnType<typeof buildToggleIndex>;
29
+ }, {
30
+ toggle: {
31
+ toggleIds: (ids: string[], force?: boolean | null) => void;
32
+ };
33
+ }, {}, {
34
+ isOpen?: (toggleId: string) => boolean;
35
+ someClosed?: (toggleIds: string[]) => boolean;
36
+ }>>;
24
37
  //#endregion
25
38
  //#region src/react/renderToggleAboveNodes.d.ts
26
39
  declare const renderToggleAboveNodes: RenderNodeWrapper;
@@ -33,7 +46,7 @@ declare const withToggle: OverrideEditor<ToggleConfig>;
33
46
  //#endregion
34
47
  //#region src/react/hooks/useToggleButton.d.ts
35
48
  declare const useToggleButtonState: (toggleId: string) => {
36
- open: any;
49
+ open: boolean;
37
50
  toggleId: string;
38
51
  };
39
52
  declare const useToggleButton: (state: ReturnType<typeof useToggleButtonState>) => {
@@ -41,19 +54,19 @@ declare const useToggleButton: (state: ReturnType<typeof useToggleButtonState>)
41
54
  onClick: (e: React.MouseEvent) => void;
42
55
  onMouseDown: (e: React.MouseEvent) => void;
43
56
  };
44
- open: any;
57
+ open: boolean;
45
58
  toggleId: string;
46
59
  };
47
60
  //#endregion
48
61
  //#region src/react/hooks/useToggleToolbarButton.d.ts
49
62
  declare const useToggleToolbarButtonState: () => {
50
- pressed: any;
63
+ pressed: boolean;
51
64
  };
52
65
  declare const useToggleToolbarButton: ({
53
66
  pressed
54
67
  }: ReturnType<typeof useToggleToolbarButtonState>) => {
55
68
  props: {
56
- pressed: any;
69
+ pressed: boolean;
57
70
  onClick: () => void;
58
71
  onMouseDown: (e: React.MouseEvent<HTMLButtonElement>) => void;
59
72
  };
@@ -66,6 +79,7 @@ declare const findElementIdsHiddenInToggle: (openToggleIds: Set<string>, element
66
79
  declare function getEnclosingToggleIds(editor: SlateEditor, elementId: string): string[];
67
80
  //#endregion
68
81
  //#region src/react/queries/getLastEntryEnclosedInToggle.d.ts
82
+ type NodeEntry = [any, number[]];
69
83
  declare const getLastEntryEnclosedInToggle: (editor: SlateEditor, toggleId: string) => NodeEntry | undefined;
70
84
  //#endregion
71
85
  //#region src/react/queries/isInClosedToggle.d.ts
@@ -80,5 +94,4 @@ declare const moveNextSelectableAfterCurrentBlock: (editor: SlateEditor) => fals
80
94
  //#region src/react/transforms/openNextToggles.d.ts
81
95
  declare const openNextToggles: (editor: SlateEditor) => void;
82
96
  //#endregion
83
- export { ToggleConfig, TogglePlugin, buildToggleIndex, editorAtom, findElementIdsHiddenInToggle, getEnclosingToggleIds, getLastEntryEnclosedInToggle, isInClosedToggle, moveCurrentBlockAfterPreviousSelectable, moveNextSelectableAfterCurrentBlock, openNextToggles, renderToggleAboveNodes, toggleIndexAtom, useHooksToggle, useIsVisible, useToggleButton, useToggleButtonState, useToggleIndex, useToggleToolbarButton, useToggleToolbarButtonState, withToggle };
84
- //# sourceMappingURL=index.d.ts.map
97
+ export { ToggleConfig, TogglePlugin, buildToggleIndex, editorAtom, findElementIdsHiddenInToggle, getEnclosingToggleIds, getLastEntryEnclosedInToggle, isInClosedToggle, moveCurrentBlockAfterPreviousSelectable, moveNextSelectableAfterCurrentBlock, openNextToggles, renderToggleAboveNodes, toggleIndexAtom, useHooksToggle, useIsVisible, useToggleButton, useToggleButtonState, useToggleIndex, useToggleToolbarButton, useToggleToolbarButtonState, withToggle };
@@ -1,5 +1,5 @@
1
1
  import { n as BaseTogglePlugin, t as someToggle } from "../someToggle-BUWI6X7B.js";
2
- import { ElementApi, KEYS, NodeApi, getEditorPlugin } from "platejs";
2
+ import { KEYS, getEditorPlugin } from "platejs";
3
3
  import { atom, plateStore, toTPlatePlugin, useEditorPlugin, useEditorRef, useEditorSelector, usePlateStore, usePluginOption, useStoreAtomValue } from "platejs/react";
4
4
  import { c } from "react-compiler-runtime";
5
5
  import React, { useEffect } from "react";
@@ -125,6 +125,7 @@ const isInClosedToggle = (editor, elementId) => {
125
125
 
126
126
  //#endregion
127
127
  //#region src/react/transforms/moveCurrentBlockAfterPreviousSelectable.ts
128
+ const isElement$1 = (value) => !!value && typeof value === "object" && !Array.isArray(value);
128
129
  const moveCurrentBlockAfterPreviousSelectable = (editor) => {
129
130
  const { selection } = editor;
130
131
  if (!selection) return;
@@ -136,7 +137,7 @@ const moveCurrentBlockAfterPreviousSelectable = (editor) => {
136
137
  const blockBefore = editor.api.block({ at: beforePoint });
137
138
  if (!blockBefore) return;
138
139
  if (!isInClosedToggle(editor, blockBefore[0].id)) return;
139
- const previousSelectableBlock = editor.api.previous({ match: (node) => ElementApi.isElement(node) && !isInClosedToggle(editor, node.id) });
140
+ const previousSelectableBlock = editor.api.previous({ match: (node) => isElement$1(node) && !isInClosedToggle(editor, node.id) });
140
141
  if (!previousSelectableBlock) return false;
141
142
  const afterSelectableBlock = [previousSelectableBlock[1][0] + 1];
142
143
  editor.tf.moveNodes({
@@ -147,6 +148,7 @@ const moveCurrentBlockAfterPreviousSelectable = (editor) => {
147
148
 
148
149
  //#endregion
149
150
  //#region src/react/transforms/moveNextSelectableAfterCurrentBlock.ts
151
+ const isElement = (value) => !!value && typeof value === "object" && !Array.isArray(value);
150
152
  const moveNextSelectableAfterCurrentBlock = (editor) => {
151
153
  const { selection } = editor;
152
154
  if (!selection) return;
@@ -158,7 +160,7 @@ const moveNextSelectableAfterCurrentBlock = (editor) => {
158
160
  const blockAfter = editor.api.block({ at: afterPoint });
159
161
  if (!blockAfter) return;
160
162
  if (!isInClosedToggle(editor, blockAfter[0].id)) return;
161
- const nextSelectableBlock = editor.api.next({ match: (node) => ElementApi.isElement(node) && !isInClosedToggle(editor, node.id) });
163
+ const nextSelectableBlock = editor.api.next({ match: (node) => isElement(node) && !isInClosedToggle(editor, node.id) });
162
164
  if (!nextSelectableBlock) return false;
163
165
  const afterCurrentBlock = [aboveBlock[1][0] + 1];
164
166
  editor.tf.moveNodes({
@@ -179,9 +181,10 @@ const openNextToggles = (editor) => {
179
181
 
180
182
  //#endregion
181
183
  //#region src/react/withToggle.ts
184
+ const isNode = (value) => value !== null && value !== void 0;
182
185
  const withToggle = ({ api: { isSelectable }, editor, getOption, tf: { deleteBackward, deleteForward, insertBreak } }) => ({
183
186
  api: { isSelectable(element) {
184
- if (NodeApi.isNode(element) && isInClosedToggle(editor, element.id)) return false;
187
+ if (isNode(element) && isInClosedToggle(editor, element.id)) return false;
185
188
  return isSelectable(element);
186
189
  } },
187
190
  transforms: {
@@ -339,5 +342,4 @@ function _temp2(e) {
339
342
  }
340
343
 
341
344
  //#endregion
342
- export { TogglePlugin, buildToggleIndex, editorAtom, findElementIdsHiddenInToggle, getEnclosingToggleIds, getLastEntryEnclosedInToggle, isInClosedToggle, moveCurrentBlockAfterPreviousSelectable, moveNextSelectableAfterCurrentBlock, openNextToggles, renderToggleAboveNodes, toggleIndexAtom, useHooksToggle, useIsVisible, useToggleButton, useToggleButtonState, useToggleIndex, useToggleToolbarButton, useToggleToolbarButtonState, withToggle };
343
- //# sourceMappingURL=index.js.map
345
+ export { TogglePlugin, buildToggleIndex, editorAtom, findElementIdsHiddenInToggle, getEnclosingToggleIds, getLastEntryEnclosedInToggle, isInClosedToggle, moveCurrentBlockAfterPreviousSelectable, moveNextSelectableAfterCurrentBlock, openNextToggles, renderToggleAboveNodes, toggleIndexAtom, useHooksToggle, useIsVisible, useToggleButton, useToggleButtonState, useToggleIndex, useToggleToolbarButton, useToggleToolbarButtonState, withToggle };
@@ -26,5 +26,4 @@ const BaseTogglePlugin = createTSlatePlugin({
26
26
  const someToggle = (editor) => !!editor.selection && editor.api.some({ match: (n) => n.type === KEYS.toggle });
27
27
 
28
28
  //#endregion
29
- export { BaseTogglePlugin as n, someToggle as t };
30
- //# sourceMappingURL=someToggle-BUWI6X7B.js.map
29
+ export { BaseTogglePlugin as n, someToggle as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lofcz/platejs-toggle",
3
- "version": "52.0.11",
3
+ "version": "52.3.6",
4
4
  "description": "Toggle plugin for Plate",
5
5
  "keywords": [
6
6
  "plate",
@@ -32,10 +32,11 @@
32
32
  "jotai": "^2.18.0",
33
33
  "lodash": "^4.17.21",
34
34
  "react-compiler-runtime": "^1.0.0",
35
- "@platejs/indent": "npm:@lofcz/platejs-indent@52.0.11"
35
+ "@platejs/indent": "npm:@lofcz/platejs-indent@52.3.6"
36
36
  },
37
37
  "devDependencies": {
38
- "@plate/scripts": "1.0.0"
38
+ "@plate/scripts": "1.0.0",
39
+ "platejs": "npm:@lofcz/platejs@52.3.6"
39
40
  },
40
41
  "peerDependencies": {
41
42
  "platejs": ">=52.0.11",
@@ -1,17 +0,0 @@
1
- import { PluginConfig } from "platejs";
2
-
3
- //#region src/lib/BaseTogglePlugin.d.ts
4
- type BaseToggleConfig = PluginConfig<'toggle', {
5
- openIds?: Set<string>;
6
- }, {
7
- toggle: {
8
- toggleIds: (ids: string[], force?: boolean | null) => void;
9
- };
10
- }, {}, {
11
- isOpen?: (toggleId: string) => boolean;
12
- someClosed?: (toggleIds: string[]) => boolean;
13
- }>;
14
- declare const BaseTogglePlugin: any;
15
- //#endregion
16
- export { BaseTogglePlugin as n, BaseToggleConfig as t };
17
- //# sourceMappingURL=BaseTogglePlugin-CrydL5tg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseTogglePlugin-CrydL5tg.d.ts","names":[],"sources":["../src/lib/BaseTogglePlugin.ts"],"sourcesContent":[],"mappings":";;;KAEY,gBAAA,GAAmB;YAGjB;AAHd,CAAA,EAAA;EAiBa,MAAA,EAAA;;;;;;;cAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib/queries/someToggle.ts"],"sourcesContent":[],"mappings":";;;;cAEa,qBAAsB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/react/toggleIndexAtom.ts","../../src/react/TogglePlugin.tsx","../../src/react/renderToggleAboveNodes.tsx","../../src/react/useHooksToggle.ts","../../src/react/withToggle.ts","../../src/react/hooks/useToggleButton.ts","../../src/react/hooks/useToggleToolbarButton.ts","../../src/react/queries/findElementIdsHiddenInToggle.ts","../../src/react/queries/getEnclosingToggleIds.ts","../../src/react/queries/getLastEntryEnclosedInToggle.ts","../../src/react/queries/isInClosedToggle.ts","../../src/react/transforms/moveCurrentBlockAfterPreviousSelectable.ts","../../src/react/transforms/moveNextSelectableAfterCurrentBlock.ts","../../src/react/transforms/openNextToggles.ts"],"sourcesContent":[],"mappings":";;;;;;cAoBa,6BAA8B,UAAQ;cA4BtC,YAA8C;;cACrC;EA7BT,CAAA;EA4BA,OAAA,EAAA,MAGX;AAKF,CAAA,CAAA;AAkBa,cAlBA,YAkBsB,EAAA,CAAA,SAAD,EAAA,MAAA,EAAA,GAAA,GAAA;AAIrB,cAJA,eAKwC,EALvB,IAKuB,CALlB,GAKkB,CAAA,MAAA,EAAA,MAAA,EAAA,CAAA,CAAA;cADxC;;;KChED,YAAA,GAAe,aACzB;gBAEgB,kBAAkB;;ADGpC;AA4Ba,cC1BA,YD2BS,EAAA,GAAA;;;cExCT,wBAAwB;;;cCDxB,gBAAgB,SAAS;;;cCKzB,YAAY,eAAe;;;cCT3B;;;;cASA,yBACJ,kBAAkB;;ILMd,OAAA,EAAA,CAAA,CAAA,EKCM,KAAA,CAAM,ULDkB,EAAA,GAAQ,IAAG;IA4BzC,WAGX,EAAA,CAAA,CAAA,EK1BqB,KAAA,CAAM,ULwBP,EAAA,GADqC,IAAI;EAQlD,CAAA;EAkBA,IAAA,EAAA,GAAA;EAIA,QAAA,EAAA,MAAA;;;;cMxEA;;;cAQA;;GAEV,kBAAkB;;;INIR,OAAA,EAAA,GAAA,GA0BZ,IAAA;IAEY,WAGX,EAAA,CAAA,CAAA,EMvBqB,KAAA,CAAM,UNqBP,CMrBkB,iBNoBuB,CAAA,EAAA,GAAA,IAAA;EAQlD,CAAA;AAkBb,CAAA;;;cOtEa,8CACI,uBACL;;;iBCFI,qBAAA,SACN;;;cCCG,uCACH,kCAEP;;;cCJU,2BAA4B;;;cCA5B,kDACH;;;cCDG,8CAA+C;;;cCC/C,0BAA2B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["useMemo","Atom","TIndentElement","Value","KEYS","atom","plateStore","usePlateStore","usePluginOption","useStoreAtomValue","TogglePlugin","ListPluginKey","buildToggleIndex","elements","Map","result","currentEnclosingToggles","forEach","element","elementIndent","indent","elementIndentWithListCorrection","enclosingToggles","filter","_","set","id","map","toggleId","type","toggle","push","editorAtom","trackedEditor","editor","children","version","useIsVisible","elementId","$","_c","openIds","t0","get","toggleIndex","toggleIndexAtom","enclosedInToggleIds","every","enclosedId","has","isVisibleAtom","useToggleIndex","React","RenderNodeWrapper","RenderNodeWrapperFunction","useIsVisible","renderToggleAboveNodes","ToggleAboveNodes","t0","$","_c","children","element","isVisible","id","t1","hiddenStyle","CSSProperties","height","margin","overflow","visibility","useEffect","UseHooks","ToggleConfig","useToggleIndex","useHooksToggle","t0","$","_c","editor","setOption","toggleIndex","t1","t2","TIndentElement","buildToggleIndex","findElementIdsHiddenInToggle","openToggleIds","Set","elements","toggleIndex","filter","element","enclosingToggleIds","get","id","some","toggleId","has","map","SlateEditor","TogglePlugin","getEnclosingToggleIds","editor","elementId","getOptions","toggleIndex","get","NodeEntry","SlateEditor","last","buildToggleIndex","getLastEntryEnclosedInToggle","editor","toggleId","toggleIndex","children","entriesInToggle","map","node","index","filter","get","id","includes","SlateEditor","getEditorPlugin","TogglePlugin","getEnclosingToggleIds","isInClosedToggle","editor","elementId","enclosingToggleIds","getOption","SlateEditor","ElementApi","isInClosedToggle","moveCurrentBlockAfterPreviousSelectable","editor","selection","aboveBlock","api","block","isAt","start","beforePoint","before","blockBefore","at","id","previousSelectableBlock","previous","match","node","isElement","afterSelectableBlock","tf","moveNodes","to","SlateEditor","ElementApi","isInClosedToggle","moveNextSelectableAfterCurrentBlock","editor","selection","aboveBlock","api","block","isAt","end","afterPoint","after","blockAfter","at","id","nextSelectableBlock","next","match","node","isElement","afterCurrentBlock","tf","moveNodes","to","SlateEditor","TogglePlugin","openNextToggles","editor","nodeEntries","Array","from","api","nodes","block","mode","getApi","toggle","toggleIds","map","node","id","OverrideEditor","indent","SlateEditor","TIndentElement","KEYS","NodeApi","ToggleConfig","getLastEntryEnclosedInToggle","isInClosedToggle","moveCurrentBlockAfterPreviousSelectable","moveNextSelectableAfterCurrentBlock","withToggle","api","isSelectable","editor","getOption","tf","deleteBackward","deleteForward","insertBreak","element","isNode","id","transforms","unit","currentBlockEntry","block","type","toggle","toggleId","isOpen","withoutNormalizing","toggleBlock","lastEntryEnclosedInToggle","newlyInsertedTogglePath","afterLastEntryEncloseInToggle","moveNodes","at","to","ExtendConfig","toTPlatePlugin","buildToggleIndex","BaseToggleConfig","BaseTogglePlugin","renderToggleAboveNodes","useHooksToggle","withToggle","ToggleConfig","toggleIndex","ReturnType","TogglePlugin","options","Map","render","aboveNodes","useHooks","overrideEditor","useEditorPlugin","usePluginOption","BaseTogglePlugin","useToggleButtonState","toggleId","$","_c","openIds","t0","has","t1","open","useToggleButton","state","api","onClick","e","preventDefault","toggle","toggleIds","onMouseDown","_temp","buttonProps","e_0","KEYS","useEditorRef","useEditorSelector","someToggle","openNextToggles","useToggleToolbarButtonState","$","_c","t0","Symbol","for","pressed","_temp","t1","useToggleToolbarButton","editor","tf","toggleBlock","toggle","collapse","focus","t2","props","onClick","onMouseDown","_temp2","e","preventDefault"],"sources":["../../src/react/toggleIndexAtom.ts","../../src/react/renderToggleAboveNodes.tsx","../../src/react/useHooksToggle.ts","../../src/react/queries/findElementIdsHiddenInToggle.ts","../../src/react/queries/getEnclosingToggleIds.ts","../../src/react/queries/getLastEntryEnclosedInToggle.ts","../../src/react/queries/isInClosedToggle.ts","../../src/react/transforms/moveCurrentBlockAfterPreviousSelectable.ts","../../src/react/transforms/moveNextSelectableAfterCurrentBlock.ts","../../src/react/transforms/openNextToggles.ts","../../src/react/withToggle.ts","../../src/react/TogglePlugin.tsx","../../src/react/hooks/useToggleButton.ts","../../src/react/hooks/useToggleToolbarButton.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport type { Atom } from 'jotai';\nimport type { TIndentElement, Value } from 'platejs';\n\nimport { KEYS } from 'platejs';\nimport {\n atom,\n plateStore,\n usePlateStore,\n usePluginOption,\n useStoreAtomValue,\n} from 'platejs/react';\n\nimport { TogglePlugin } from './TogglePlugin';\n\n// Duplicate constant instead of importing from \"plate-list\" to avoid a dependency.\nconst ListPluginKey = 'listStyleType';\n\n// Returns, for each child, the enclosing toggle ids\nexport const buildToggleIndex = (elements: Value): Map<string, string[]> => {\n const result = new Map<string, string[]>();\n let currentEnclosingToggles: [string, number][] = []; // [toggleId, indent][]\n elements.forEach((element) => {\n const elementIndent = (element[KEYS.indent] as number) || 0;\n // For some reason, indent lists have a min indent of 1, even though they are not indented\n const elementIndentWithListCorrection =\n element[ListPluginKey] && element[KEYS.indent]\n ? elementIndent - 1\n : elementIndent;\n\n const enclosingToggles = currentEnclosingToggles.filter(\n ([_, indent]) => indent < elementIndentWithListCorrection\n );\n currentEnclosingToggles = enclosingToggles;\n result.set(\n element.id as string,\n enclosingToggles.map(([toggleId]) => toggleId)\n );\n\n if (element.type === KEYS.toggle) {\n currentEnclosingToggles.push([element.id as string, elementIndent]);\n }\n });\n\n return result;\n};\n\nexport const editorAtom = plateStore.atom.trackedEditor as Atom<{\n editor: { children: TIndentElement[] };\n version: number;\n}>;\n\n// Due to a limitation of jotai-x, it's not possible to derive a state from both `toggleControllerStore` and plateStore`.\n// In order minimize re-renders, we subscribe to both separately, but only re-render unnecessarily when opening or closing a toggle,\n// which is less frequent than changing the editor's children.\nexport const useIsVisible = (elementId: string) => {\n const openIds = usePluginOption(TogglePlugin, 'openIds')!;\n const isVisibleAtom = useMemo(\n () =>\n atom((get) => {\n const toggleIndex = get(toggleIndexAtom);\n const enclosedInToggleIds = toggleIndex.get(elementId) || [];\n\n return enclosedInToggleIds.every((enclosedId) =>\n openIds.has(enclosedId)\n );\n }),\n [elementId, openIds]\n );\n\n return useStoreAtomValue(usePlateStore(), isVisibleAtom);\n};\n\nexport const toggleIndexAtom: Atom<Map<string, string[]>> = atom((get) =>\n buildToggleIndex(get(editorAtom).editor.children as TIndentElement[])\n);\n\nexport const useToggleIndex = () =>\n useStoreAtomValue(usePlateStore(), toggleIndexAtom);\n","import React from 'react';\n\nimport type {\n RenderNodeWrapper,\n RenderNodeWrapperFunction,\n} from 'platejs/react';\n\nimport { useIsVisible } from './toggleIndexAtom';\n\nexport const renderToggleAboveNodes: RenderNodeWrapper = () => ToggleAboveNodes;\n\nconst ToggleAboveNodes: RenderNodeWrapperFunction = ({ children, element }) => {\n const isVisible = useIsVisible(element.id as string);\n\n if (isVisible) return children;\n\n return <div style={hiddenStyle}>{children}</div>;\n};\n\nconst hiddenStyle: React.CSSProperties = {\n height: 0,\n margin: 0,\n overflow: 'hidden',\n visibility: 'hidden',\n};\n","import { useEffect } from 'react';\n\nimport type { UseHooks } from 'platejs/react';\n\nimport type { ToggleConfig } from './TogglePlugin';\n\nimport { useToggleIndex } from './toggleIndexAtom';\n\nexport const useHooksToggle: UseHooks<ToggleConfig> = ({\n editor,\n setOption,\n}) => {\n const toggleIndex = useToggleIndex();\n\n useEffect(() => {\n setOption('toggleIndex', toggleIndex);\n }, [editor, setOption, toggleIndex]);\n};\n","import type { TIndentElement } from 'platejs';\n\nimport { buildToggleIndex } from '../toggleIndexAtom';\n\nexport const findElementIdsHiddenInToggle = (\n openToggleIds: Set<string>,\n elements: TIndentElement[]\n): string[] => {\n const toggleIndex = buildToggleIndex(elements);\n\n return elements\n .filter((element) => {\n const enclosingToggleIds = toggleIndex.get(element.id as string) || [];\n\n return enclosingToggleIds.some(\n (toggleId) => !openToggleIds.has(toggleId)\n );\n })\n .map((element) => element.id as string);\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { TogglePlugin } from '../TogglePlugin';\n\nexport function getEnclosingToggleIds(\n editor: SlateEditor,\n elementId: string\n): string[] {\n return editor.getOptions(TogglePlugin).toggleIndex?.get(elementId) || [];\n}\n","import type { NodeEntry, SlateEditor } from 'platejs';\n\nimport last from 'lodash/last.js';\n\nimport { buildToggleIndex } from '../toggleIndexAtom';\n\nexport const getLastEntryEnclosedInToggle = (\n editor: SlateEditor,\n toggleId: string\n): NodeEntry | undefined => {\n const toggleIndex = buildToggleIndex(editor.children);\n const entriesInToggle = editor.children\n .map((node, index) => [node, [index]] as NodeEntry)\n .filter(([node]) =>\n (toggleIndex.get(node.id as string) || []).includes(toggleId)\n );\n\n return last(entriesInToggle);\n};\n","import { type SlateEditor, getEditorPlugin } from 'platejs';\n\nimport { TogglePlugin } from '../TogglePlugin';\nimport { getEnclosingToggleIds } from './getEnclosingToggleIds';\n\nexport const isInClosedToggle = (editor: SlateEditor, elementId: string) => {\n const enclosingToggleIds = getEnclosingToggleIds(editor, elementId);\n\n return getEditorPlugin(editor, TogglePlugin).getOption(\n 'someClosed',\n enclosingToggleIds\n );\n};\n","import { type SlateEditor, ElementApi } from 'platejs';\n\nimport { isInClosedToggle } from '../queries';\n\n// Return false only if the all previous blocks are not selectable\nexport const moveCurrentBlockAfterPreviousSelectable = (\n editor: SlateEditor\n): boolean | undefined => {\n const { selection } = editor;\n\n if (!selection) return;\n\n const aboveBlock = editor.api.block();\n\n if (!aboveBlock) return;\n if (!editor.api.isAt({ start: true })) return;\n\n const beforePoint = editor.api.before(selection);\n\n if (!beforePoint) return;\n\n const blockBefore = editor.api.block({ at: beforePoint });\n\n if (!blockBefore) return;\n if (!isInClosedToggle(editor, blockBefore[0].id as string)) return; // We're already after a selectable then\n\n const previousSelectableBlock = editor.api.previous({\n match: (node) =>\n ElementApi.isElement(node) &&\n !isInClosedToggle(editor, node.id as string),\n });\n\n if (!previousSelectableBlock) return false;\n\n const afterSelectableBlock = [previousSelectableBlock[1][0] + 1];\n editor.tf.moveNodes({\n at: aboveBlock[1],\n to: afterSelectableBlock,\n });\n};\n","import { type SlateEditor, ElementApi } from 'platejs';\n\nimport { isInClosedToggle } from '../queries';\n\n// Return false only if all next blocks are not selectable\nexport const moveNextSelectableAfterCurrentBlock = (editor: SlateEditor) => {\n const { selection } = editor;\n\n if (!selection) return;\n\n const aboveBlock = editor.api.block();\n\n if (!aboveBlock) return;\n if (!editor.api.isAt({ end: true })) return;\n\n const afterPoint = editor.api.after(selection);\n\n if (!afterPoint) return;\n\n const blockAfter = editor.api.block({ at: afterPoint });\n\n if (!blockAfter) return;\n if (!isInClosedToggle(editor, blockAfter[0].id as string)) return; // We're already before a selectable then\n\n const nextSelectableBlock = editor.api.next({\n match: (node) =>\n ElementApi.isElement(node) &&\n !isInClosedToggle(editor, node.id as string),\n });\n\n if (!nextSelectableBlock) return false;\n\n const afterCurrentBlock = [aboveBlock[1][0] + 1];\n editor.tf.moveNodes({\n at: nextSelectableBlock[1],\n to: afterCurrentBlock,\n });\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { TogglePlugin } from '../TogglePlugin';\n\n// When creating a toggle, we open it by default.\n// So before inserting the toggle, we update the store to mark the id of the blocks about to be turned into toggles as open.\nexport const openNextToggles = (editor: SlateEditor) => {\n const nodeEntries = Array.from(\n editor.api.nodes({\n block: true,\n mode: 'lowest',\n })\n );\n\n editor.getApi(TogglePlugin).toggle.toggleIds(\n nodeEntries.map(([node]) => node.id as string),\n true\n );\n};\n","import type { OverrideEditor } from 'platejs/react';\n\nimport { indent } from '@platejs/indent';\nimport { type SlateEditor, type TIndentElement, KEYS, NodeApi } from 'platejs';\n\nimport type { ToggleConfig } from './TogglePlugin';\n\nimport { getLastEntryEnclosedInToggle, isInClosedToggle } from './queries';\nimport {\n moveCurrentBlockAfterPreviousSelectable,\n moveNextSelectableAfterCurrentBlock,\n} from './transforms';\n\nexport const withToggle: OverrideEditor<ToggleConfig> = ({\n api: { isSelectable },\n editor,\n getOption,\n tf: { deleteBackward, deleteForward, insertBreak },\n}) => ({\n api: {\n isSelectable(element) {\n if (\n NodeApi.isNode(element) &&\n isInClosedToggle(editor, element.id as string)\n )\n return false;\n\n return isSelectable(element);\n },\n },\n transforms: {\n deleteBackward(unit) {\n if (\n moveCurrentBlockAfterPreviousSelectable(editor as SlateEditor) === false\n )\n return;\n\n deleteBackward(unit);\n },\n\n deleteForward(unit) {\n if (moveNextSelectableAfterCurrentBlock(editor as SlateEditor) === false)\n return;\n\n deleteForward(unit);\n },\n\n insertBreak() {\n const currentBlockEntry = editor.api.block<TIndentElement>();\n\n if (!currentBlockEntry || currentBlockEntry[0].type !== KEYS.toggle) {\n return insertBreak();\n }\n\n const toggleId = currentBlockEntry[0].id as string;\n const isOpen = getOption('isOpen', toggleId);\n\n editor.tf.withoutNormalizing(() => {\n if (isOpen) {\n insertBreak();\n editor.tf.toggleBlock(KEYS.toggle);\n indent(editor);\n } else {\n const lastEntryEnclosedInToggle = getLastEntryEnclosedInToggle(\n editor,\n toggleId\n );\n\n insertBreak();\n\n if (lastEntryEnclosedInToggle) {\n const newlyInsertedTogglePath = [currentBlockEntry[1][0] + 1];\n const afterLastEntryEncloseInToggle = [\n lastEntryEnclosedInToggle[1][0] + 1,\n ];\n editor.tf.moveNodes({\n at: newlyInsertedTogglePath,\n to: afterLastEntryEncloseInToggle,\n });\n }\n }\n });\n },\n },\n});\n","import type { ExtendConfig } from 'platejs';\n\nimport { toTPlatePlugin } from 'platejs/react';\n\nimport type { buildToggleIndex } from './toggleIndexAtom';\n\nimport {\n type BaseToggleConfig,\n BaseTogglePlugin,\n} from '../lib/BaseTogglePlugin';\nimport { renderToggleAboveNodes } from './renderToggleAboveNodes';\nimport { useHooksToggle } from './useHooksToggle';\nimport { withToggle } from './withToggle';\n\nexport type ToggleConfig = ExtendConfig<\n BaseToggleConfig,\n {\n toggleIndex?: ReturnType<typeof buildToggleIndex>;\n }\n>;\n\n/** Enables support for toggleable elements in the editor. */\nexport const TogglePlugin = toTPlatePlugin<ToggleConfig>(BaseTogglePlugin, {\n options: {\n toggleIndex: new Map(),\n },\n render: {\n aboveNodes: renderToggleAboveNodes,\n },\n useHooks: useHooksToggle as any,\n}).overrideEditor(withToggle);\n","import { useEditorPlugin, usePluginOption } from 'platejs/react';\n\nimport { BaseTogglePlugin } from '../../lib';\n\nexport const useToggleButtonState = (toggleId: string) => {\n const openIds = usePluginOption(BaseTogglePlugin, 'openIds')!;\n\n return {\n open: openIds.has(toggleId),\n toggleId,\n };\n};\n\nexport const useToggleButton = (\n state: ReturnType<typeof useToggleButtonState>\n) => {\n const { api } = useEditorPlugin(BaseTogglePlugin);\n\n return {\n ...state,\n buttonProps: {\n onClick: (e: React.MouseEvent) => {\n e.preventDefault();\n api.toggle.toggleIds([state.toggleId]);\n },\n onMouseDown: (e: React.MouseEvent) => {\n e.preventDefault();\n },\n },\n };\n};\n","import { KEYS } from 'platejs';\nimport { useEditorRef, useEditorSelector } from 'platejs/react';\n\nimport { someToggle } from '../../lib';\nimport { openNextToggles } from '../transforms';\n\nexport const useToggleToolbarButtonState = () => {\n const pressed = useEditorSelector((editor) => someToggle(editor), []);\n\n return {\n pressed,\n };\n};\n\nexport const useToggleToolbarButton = ({\n pressed,\n}: ReturnType<typeof useToggleToolbarButtonState>) => {\n const editor = useEditorRef();\n\n return {\n props: {\n pressed,\n onClick: () => {\n openNextToggles(editor);\n editor.tf.toggleBlock(KEYS.toggle);\n editor.tf.collapse();\n editor.tf.focus();\n },\n onMouseDown: (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n },\n },\n };\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"someToggle-BUWI6X7B.js","names":["PluginConfig","createTSlatePlugin","KEYS","BaseToggleConfig","openIds","Set","toggle","toggleIds","ids","force","isOpen","toggleId","someClosed","BaseTogglePlugin","key","node","isElement","options","extendSelectors","getOptions","has","some","id","extendApi","setOptions","draft","forEach","isCurrentlyOpen","newIsOpen","add","delete","SlateEditor","KEYS","someToggle","editor","selection","api","some","match","n","type","toggle"],"sources":["../src/lib/BaseTogglePlugin.ts","../src/lib/queries/someToggle.ts"],"sourcesContent":["import { type PluginConfig, createTSlatePlugin, KEYS } from 'platejs';\n\nexport type BaseToggleConfig = PluginConfig<\n 'toggle',\n {\n openIds?: Set<string>;\n },\n {\n toggle: {\n toggleIds: (ids: string[], force?: boolean | null) => void;\n };\n },\n {},\n {\n isOpen?: (toggleId: string) => boolean;\n someClosed?: (toggleIds: string[]) => boolean;\n }\n>;\n\nexport const BaseTogglePlugin = createTSlatePlugin<BaseToggleConfig>({\n key: KEYS.toggle,\n node: { isElement: true },\n options: {\n openIds: new Set(),\n },\n})\n .extendSelectors<BaseToggleConfig['selectors']>(({ getOptions }) => ({\n isOpen: (toggleId) => getOptions().openIds!.has(toggleId),\n someClosed: (toggleIds) => {\n const { openIds } = getOptions();\n\n return toggleIds.some((id) => !openIds!.has(id));\n },\n }))\n .extendApi<BaseToggleConfig['api']['toggle']>(({ setOptions }) => ({\n toggleIds: (ids, force = null) => {\n setOptions((draft) => {\n ids.forEach((id) => {\n const isCurrentlyOpen = draft.openIds!.has(id);\n const newIsOpen = force === null ? !isCurrentlyOpen : force;\n\n if (newIsOpen) {\n draft.openIds!.add(id);\n } else {\n draft.openIds!.delete(id);\n }\n });\n });\n },\n }));\n","import { type SlateEditor, KEYS } from 'platejs';\n\nexport const someToggle = (editor: SlateEditor) =>\n !!editor.selection &&\n editor.api.some({\n match: (n) => n.type === KEYS.toggle,\n });\n"],"mappings":";;;AAmBA,MAAaa,mBAAmBZ,mBAAqC;CACnEa,KAAKZ,KAAKI;CACVS,MAAM,EAAEC,WAAW,MAAM;CACzBC,SAAS,EACPb,yBAAS,IAAIC,KAAI,EACnB;CACD,CAAC,CACCa,iBAAgD,EAAEC,kBAAkB;CACnET,SAASC,aAAaQ,YAAY,CAACf,QAASgB,IAAIT,SAAS;CACzDC,aAAaL,cAAc;EACzB,MAAM,EAAEH,YAAYe,YAAY;AAEhC,SAAOZ,UAAUc,MAAMC,OAAO,CAAClB,QAASgB,IAAIE,GAAG,CAAC;;CAEnD,EAAE,CACFC,WAA8C,EAAEC,kBAAkB,EACjEjB,YAAYC,KAAKC,QAAQ,SAAS;AAChCe,aAAYC,UAAU;AACpBjB,MAAIkB,SAASJ,OAAO;GAClB,MAAMK,kBAAkBF,MAAMrB,QAASgB,IAAIE,GAAG;AAG9C,OAFkBb,UAAU,OAAO,CAACkB,kBAAkBlB,MAGpDgB,OAAMrB,QAASyB,IAAIP,GAAG;OAEtBG,OAAMrB,QAAS0B,OAAOR,GAAG;IAE3B;GACF;GAEL,EAAE;;;;AC/CL,MAAaW,cAAcC,WACzB,CAAC,CAACA,OAAOC,aACTD,OAAOE,IAAIC,KAAK,EACdC,QAAQC,MAAMA,EAAEC,SAASR,KAAKS,QAC/B,CAAC"}