@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.
- package/dist/BaseTogglePlugin-DNYyT8--.d.ts +28 -0
- package/dist/index.d.ts +3 -4
- package/dist/react/index.d.ts +25 -12
- package/dist/react/index.js +8 -6
- package/dist/someToggle-BUWI6X7B.js +1 -2
- package/package.json +4 -3
- package/dist/BaseTogglePlugin-CrydL5tg.d.ts +0 -17
- package/dist/BaseTogglePlugin-CrydL5tg.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/index.js.map +0 -1
- package/dist/someToggle-BUWI6X7B.js.map +0 -1
|
@@ -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-
|
|
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) =>
|
|
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 };
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,26 +1,39 @@
|
|
|
1
|
-
import { t as BaseToggleConfig } from "../BaseTogglePlugin-
|
|
2
|
-
import
|
|
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:
|
|
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) =>
|
|
16
|
+
declare const useIsVisible: (elementId: string) => boolean;
|
|
15
17
|
declare const toggleIndexAtom: Atom<Map<string, string[]>>;
|
|
16
|
-
declare const useToggleIndex: () =>
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
63
|
+
pressed: boolean;
|
|
51
64
|
};
|
|
52
65
|
declare const useToggleToolbarButton: ({
|
|
53
66
|
pressed
|
|
54
67
|
}: ReturnType<typeof useToggleToolbarButtonState>) => {
|
|
55
68
|
props: {
|
|
56
|
-
pressed:
|
|
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 };
|
package/dist/react/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as BaseTogglePlugin, t as someToggle } from "../someToggle-BUWI6X7B.js";
|
|
2
|
-
import {
|
|
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) =>
|
|
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) =>
|
|
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 (
|
|
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.
|
|
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.
|
|
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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -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"}
|
package/dist/react/index.js.map
DELETED
|
@@ -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"}
|