@payloadcms/richtext-lexical 3.79.0 → 3.79.1
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/exports/client/bundled.css +1 -1
- package/dist/exports/client/index.js +22 -22
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/converters/lexicalToHtml/async/converters/heading.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/heading.js +3 -1
- package/dist/features/converters/lexicalToHtml/async/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/link.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/link.js +7 -2
- package/dist/features/converters/lexicalToHtml/async/converters/link.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.js +5 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/table.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/table.js +2 -1
- package/dist/features/converters/lexicalToHtml/async/converters/table.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/text.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/text.js +2 -1
- package/dist/features/converters/lexicalToHtml/async/converters/text.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/upload.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/upload.js +11 -10
- package/dist/features/converters/lexicalToHtml/async/converters/upload.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/shared/cssColors.d.ts +5 -0
- package/dist/features/converters/lexicalToHtml/shared/cssColors.d.ts.map +1 -0
- package/dist/features/converters/lexicalToHtml/shared/cssColors.js +8 -0
- package/dist/features/converters/lexicalToHtml/shared/cssColors.js.map +1 -0
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.js +3 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/link.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/link.js +7 -2
- package/dist/features/converters/lexicalToHtml/sync/converters/link.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.js +5 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/table.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/table.js +2 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/table.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/text.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/text.js +2 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/text.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/upload.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/upload.js +11 -10
- package/dist/features/converters/lexicalToHtml/sync/converters/upload.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js +84 -141
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +46 -101
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.d.ts +3 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +38 -111
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts +4 -10
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js +10 -79
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/toolbars/shared/useToolbarStates.d.ts +22 -0
- package/dist/features/toolbars/shared/useToolbarStates.d.ts.map +1 -0
- package/dist/features/toolbars/shared/useToolbarStates.js +127 -0
- package/dist/features/toolbars/shared/useToolbarStates.js.map +1 -0
- package/dist/field/Diff/converters/link.d.ts.map +1 -1
- package/dist/field/Diff/converters/link.js +7 -2
- package/dist/field/Diff/converters/link.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/package.json +6 -6
|
@@ -6,7 +6,7 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext
|
|
|
6
6
|
import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
|
|
7
7
|
import { mergeRegister } from '@lexical/utils';
|
|
8
8
|
import { $getSelection, $isRangeSelection, $isTextNode, COMMAND_PRIORITY_LOW, getDOMSelection, SELECTION_CHANGE_COMMAND } from 'lexical';
|
|
9
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
9
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
10
10
|
import * as React from 'react';
|
|
11
11
|
import { createPortal } from 'react-dom';
|
|
12
12
|
import { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js';
|
|
@@ -14,9 +14,12 @@ import { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js
|
|
|
14
14
|
import { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js';
|
|
15
15
|
import { ToolbarButton } from '../../../shared/ToolbarButton/index.js';
|
|
16
16
|
import { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js';
|
|
17
|
+
import { useToolbarStates } from '../../../shared/useToolbarStates.js';
|
|
17
18
|
function ButtonGroupItem({
|
|
19
|
+
active,
|
|
18
20
|
anchorElem,
|
|
19
21
|
editor,
|
|
22
|
+
enabled,
|
|
20
23
|
item
|
|
21
24
|
}) {
|
|
22
25
|
if (item.Component) {
|
|
@@ -30,113 +33,53 @@ function ButtonGroupItem({
|
|
|
30
33
|
return null;
|
|
31
34
|
}
|
|
32
35
|
return /*#__PURE__*/_jsx(ToolbarButton, {
|
|
36
|
+
active: active,
|
|
33
37
|
editor: editor,
|
|
38
|
+
enabled: enabled,
|
|
34
39
|
item: item,
|
|
35
40
|
children: /*#__PURE__*/_jsx(item.ChildComponent, {})
|
|
36
41
|
}, item.key);
|
|
37
42
|
}
|
|
38
|
-
function ToolbarGroupComponent(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
} = t0;
|
|
43
|
+
function ToolbarGroupComponent({
|
|
44
|
+
anchorElem,
|
|
45
|
+
editor,
|
|
46
|
+
group,
|
|
47
|
+
index,
|
|
48
|
+
toolbarStates
|
|
49
|
+
}) {
|
|
46
50
|
const {
|
|
47
51
|
editorConfig
|
|
48
52
|
} = useEditorConfigContext();
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
activeItems
|
|
80
|
-
} = t4;
|
|
81
|
-
if (!activeItems.length) {
|
|
82
|
-
if (group?.type === "dropdown" && group.items.length && group.ChildComponent) {
|
|
83
|
-
setDropdownIcon(() => group.ChildComponent);
|
|
84
|
-
} else {
|
|
85
|
-
setDropdownIcon(undefined);
|
|
86
|
-
}
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const item = activeItems[0];
|
|
90
|
-
setDropdownIcon(() => item?.ChildComponent);
|
|
91
|
-
};
|
|
92
|
-
$[6] = group.ChildComponent;
|
|
93
|
-
$[7] = group.items;
|
|
94
|
-
$[8] = group.type;
|
|
95
|
-
$[9] = t3;
|
|
96
|
-
} else {
|
|
97
|
-
t3 = $[9];
|
|
98
|
-
}
|
|
99
|
-
const onActiveChange = t3;
|
|
100
|
-
const t4 = `inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`;
|
|
101
|
-
let t5;
|
|
102
|
-
if ($[10] !== DropdownIcon || $[11] !== anchorElem || $[12] !== editor || $[13] !== editorConfig.features.toolbarInline?.groups.length || $[14] !== group || $[15] !== index || $[16] !== onActiveChange || $[17] !== t4) {
|
|
103
|
-
t5 = _jsxs("div", {
|
|
104
|
-
className: t4,
|
|
105
|
-
"data-toolbar-group-key": group.key,
|
|
106
|
-
children: [group.type === "dropdown" && group.items.length ? DropdownIcon ? _jsx(ToolbarDropdown, {
|
|
107
|
-
anchorElem,
|
|
108
|
-
editor,
|
|
109
|
-
group,
|
|
110
|
-
Icon: DropdownIcon,
|
|
111
|
-
maxActiveItems: group.maxActiveItems ?? 1,
|
|
112
|
-
onActiveChange
|
|
113
|
-
}) : _jsx(ToolbarDropdown, {
|
|
114
|
-
anchorElem,
|
|
115
|
-
editor,
|
|
116
|
-
group,
|
|
117
|
-
maxActiveItems: group.maxActiveItems ?? 1,
|
|
118
|
-
onActiveChange
|
|
119
|
-
}) : null, group.type === "buttons" && group.items.length ? group.items.map(item_0 => _jsx(ButtonGroupItem, {
|
|
120
|
-
anchorElem,
|
|
121
|
-
editor,
|
|
122
|
-
item: item_0
|
|
123
|
-
}, item_0.key)) : null, index < editorConfig.features.toolbarInline?.groups.length - 1 && _jsx("div", {
|
|
124
|
-
className: "divider"
|
|
125
|
-
})]
|
|
126
|
-
}, group.key);
|
|
127
|
-
$[10] = DropdownIcon;
|
|
128
|
-
$[11] = anchorElem;
|
|
129
|
-
$[12] = editor;
|
|
130
|
-
$[13] = editorConfig.features.toolbarInline?.groups.length;
|
|
131
|
-
$[14] = group;
|
|
132
|
-
$[15] = index;
|
|
133
|
-
$[16] = onActiveChange;
|
|
134
|
-
$[17] = t4;
|
|
135
|
-
$[18] = t5;
|
|
136
|
-
} else {
|
|
137
|
-
t5 = $[18];
|
|
138
|
-
}
|
|
139
|
-
return t5;
|
|
53
|
+
const groupState = toolbarStates.groupStates.get(group.key);
|
|
54
|
+
const DropdownIcon = useMemo(() => {
|
|
55
|
+
if (group.type !== 'dropdown') {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const activeItem = groupState?.activeItems?.[0];
|
|
59
|
+
return activeItem?.ChildComponent ?? group.ChildComponent;
|
|
60
|
+
}, [group, groupState?.activeItems]);
|
|
61
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
62
|
+
className: `inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`,
|
|
63
|
+
"data-toolbar-group-key": group.key,
|
|
64
|
+
children: [group.type === 'dropdown' && group.items.length && groupState ? /*#__PURE__*/_jsx(ToolbarDropdown, {
|
|
65
|
+
anchorElem: anchorElem,
|
|
66
|
+
editor: editor,
|
|
67
|
+
group: group,
|
|
68
|
+
groupState: groupState,
|
|
69
|
+
Icon: DropdownIcon
|
|
70
|
+
}) : null, group.type === 'buttons' && group.items.length ? group.items.map(item => {
|
|
71
|
+
const itemState = toolbarStates.itemStates.get(item.key);
|
|
72
|
+
return /*#__PURE__*/_jsx(ButtonGroupItem, {
|
|
73
|
+
active: itemState?.active ?? false,
|
|
74
|
+
anchorElem: anchorElem,
|
|
75
|
+
editor: editor,
|
|
76
|
+
enabled: itemState?.enabled ?? true,
|
|
77
|
+
item: item
|
|
78
|
+
}, item.key);
|
|
79
|
+
}) : null, index < editorConfig.features.toolbarInline?.groups.length - 1 && /*#__PURE__*/_jsx("div", {
|
|
80
|
+
className: "divider"
|
|
81
|
+
})]
|
|
82
|
+
}, group.key);
|
|
140
83
|
}
|
|
141
84
|
function InlineToolbar({
|
|
142
85
|
anchorElem,
|
|
@@ -147,6 +90,7 @@ function InlineToolbar({
|
|
|
147
90
|
const {
|
|
148
91
|
editorConfig
|
|
149
92
|
} = useEditorConfigContext();
|
|
93
|
+
const toolbarStates = useToolbarStates(editor, editorConfig?.features?.toolbarInline?.groups);
|
|
150
94
|
const closeFloatingToolbar = useCallback(() => {
|
|
151
95
|
if (floatingToolbarRef?.current) {
|
|
152
96
|
const isOpacityZero = floatingToolbarRef.current.style.opacity === '0';
|
|
@@ -273,7 +217,8 @@ function InlineToolbar({
|
|
|
273
217
|
anchorElem: anchorElem,
|
|
274
218
|
editor: editor,
|
|
275
219
|
group: group,
|
|
276
|
-
index: i
|
|
220
|
+
index: i,
|
|
221
|
+
toolbarStates: toolbarStates
|
|
277
222
|
}, group.key);
|
|
278
223
|
})]
|
|
279
224
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","mergeRegister","$getSelection","$isRangeSelection","$isTextNode","COMMAND_PRIORITY_LOW","getDOMSelection","SELECTION_CHANGE_COMMAND","useCallback","useEffect","useRef","useState","React","createPortal","useEditorConfigContext","getDOMRangeRect","setFloatingElemPosition","ToolbarButton","ToolbarDropdown","ButtonGroupItem","anchorElem","editor","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","t0","$","group","index","editorConfig","DropdownIcon","setDropdownIcon","t1","items","type","length","undefined","t2","t3","t4","activeItems","onActiveChange","t5","features","toolbarInline","groups","_jsxs","className","children","Icon","maxActiveItems","map","item_0","InlineToolbar","floatingToolbarRef","caretRef","closeFloatingToolbar","current","isOpacityZero","style","opacity","isPointerEventsNone","pointerEvents","mouseMoveListener","e","buttons","x","clientX","y","clientY","elementUnderMouse","document","elementFromPoint","contains","mouseUpListener","addEventListener","removeEventListener","$updateTextFormatFloatingToolbar","selection","nativeSelection","_window","possibleLinkEditor","querySelector","isLinkEditorVisible","rootElement","getRootElement","isCollapsed","anchorNode","rangeRect","offsetIfFlipped","alwaysDisplayOnTop","floatingElem","horizontalPosition","targetRect","anchorFlippedOffset","horizontalOffset","specialHandlingForCaret","verticalGap","scrollerElem","parentElement","update","getEditorState","read","window","registerUpdateListener","editorState","registerCommand","ref","i","useInlineToolbar","isText","setIsText","isEditable","isComposing","getTextContent","nodes","getNodes","foundNodeWithText","node","rawTextContent","replace","updatePopup","registerRootListener","InlineToolbarPlugin"],"sources":["../../../../../../src/features/toolbars/inline/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js'\nimport { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport './index.scss'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n if (!item.ChildComponent) {\n return null\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n <item.ChildComponent />\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { editorConfig } = useEditorConfigContext()\n\n const [DropdownIcon, setDropdownIcon] = React.useState<React.FC | undefined>()\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(undefined)\n }\n }, [group])\n\n const onActiveChange = useCallback(\n ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(undefined)\n }\n return\n }\n const item = activeItems[0]\n setDropdownIcon(() => item?.ChildComponent)\n },\n [group],\n )\n\n return (\n <div\n className={`inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`}\n data-toolbar-group-key={group.key}\n key={group.key}\n >\n {group.type === 'dropdown' && group.items.length ? (\n DropdownIcon ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n Icon={DropdownIcon}\n maxActiveItems={group.maxActiveItems ?? 1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n maxActiveItems={group.maxActiveItems ?? 1}\n onActiveChange={onActiveChange}\n />\n )\n ) : null}\n {group.type === 'buttons' && group.items.length\n ? group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })\n : null}\n {index < editorConfig.features.toolbarInline?.groups.length - 1 && (\n <div className=\"divider\" />\n )}\n </div>\n )\n}\n\nfunction InlineToolbar({\n anchorElem,\n editor,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n}): React.ReactNode {\n const floatingToolbarRef = useRef<HTMLDivElement | null>(null)\n const caretRef = useRef<HTMLDivElement | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const closeFloatingToolbar = useCallback(() => {\n if (floatingToolbarRef?.current) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n\n if (!isOpacityZero) {\n floatingToolbarRef.current.style.opacity = '0'\n }\n if (!isPointerEventsNone) {\n floatingToolbarRef.current.style.pointerEvents = 'none'\n }\n }\n }, [floatingToolbarRef])\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n if (floatingToolbarRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n if (!isOpacityZero || !isPointerEventsNone) {\n // Check if the mouse is not over the popup\n const x = e.clientX\n const y = e.clientY\n const elementUnderMouse = document.elementFromPoint(x, y)\n if (!floatingToolbarRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n closeFloatingToolbar()\n }\n }\n }\n },\n [closeFloatingToolbar],\n )\n\n const mouseUpListener = useCallback(() => {\n if (floatingToolbarRef?.current) {\n if (floatingToolbarRef.current.style.opacity !== '1') {\n floatingToolbarRef.current.style.opacity = '1'\n }\n if (floatingToolbarRef.current.style.pointerEvents !== 'auto') {\n floatingToolbarRef.current.style.pointerEvents = 'auto'\n }\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('mousemove', mouseMoveListener)\n document.addEventListener('mouseup', mouseUpListener)\n\n return () => {\n document.removeEventListener('mousemove', mouseMoveListener)\n document.removeEventListener('mouseup', mouseUpListener)\n }\n }, [floatingToolbarRef, mouseMoveListener, mouseUpListener])\n\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection()\n\n const nativeSelection = getDOMSelection(editor._window)\n\n if (floatingToolbarRef.current === null) {\n return\n }\n\n const possibleLinkEditor = anchorElem.querySelector(':scope > .link-editor')\n const isLinkEditorVisible =\n possibleLinkEditor !== null &&\n 'style' in possibleLinkEditor &&\n possibleLinkEditor?.style?.['opacity' as keyof typeof possibleLinkEditor.style] === '1'\n\n const rootElement = editor.getRootElement()\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement)\n\n // Position floating toolbar\n const offsetIfFlipped = setFloatingElemPosition({\n alwaysDisplayOnTop: isLinkEditorVisible,\n anchorElem,\n floatingElem: floatingToolbarRef.current,\n horizontalPosition: 'center',\n targetRect: rangeRect,\n })\n\n // Position caret\n if (caretRef.current) {\n setFloatingElemPosition({\n anchorElem: floatingToolbarRef.current,\n anchorFlippedOffset: offsetIfFlipped,\n floatingElem: caretRef.current,\n horizontalOffset: 5,\n horizontalPosition: 'center',\n specialHandlingForCaret: true,\n targetRect: rangeRect,\n verticalGap: 8,\n })\n }\n } else {\n closeFloatingToolbar()\n }\n }, [editor, closeFloatingToolbar, anchorElem])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }\n\n window.addEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateTextFormatFloatingToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateTextFormatFloatingToolbar])\n\n return (\n <div className=\"inline-toolbar-popup\" ref={floatingToolbarRef}>\n <div className=\"caret\" ref={caretRef} />\n {editorConfig?.features &&\n editorConfig.features?.toolbarInline?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </div>\n )\n}\n\nfunction useInlineToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n): null | React.ReactElement {\n const [isText, setIsText] = useState(false)\n const isEditable = useLexicalEditable()\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return\n }\n const selection = $getSelection()\n const nativeSelection = getDOMSelection(editor._window)\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false)\n return\n }\n\n if (!$isRangeSelection(selection)) {\n return\n }\n\n if (selection.getTextContent() !== '') {\n const nodes = selection.getNodes()\n let foundNodeWithText = false\n for (const node of nodes) {\n if ($isTextNode(node)) {\n setIsText(true)\n foundNodeWithText = true\n break\n }\n }\n if (!foundNodeWithText) {\n setIsText(false)\n }\n } else {\n setIsText(false)\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '')\n if (!selection.isCollapsed() && rawTextContent === '') {\n setIsText(false)\n return\n }\n })\n }, [editor])\n\n useEffect(() => {\n document.addEventListener('selectionchange', updatePopup)\n document.addEventListener('mouseup', updatePopup)\n return () => {\n document.removeEventListener('selectionchange', updatePopup)\n document.removeEventListener('mouseup', updatePopup)\n }\n }, [updatePopup])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup()\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false)\n }\n }),\n )\n }, [editor, updatePopup])\n\n if (!isText || !isEditable) {\n return null\n }\n\n return createPortal(<InlineToolbar anchorElem={anchorElem} editor={editor} />, anchorElem)\n}\n\nexport const InlineToolbarPlugin: PluginComponentWithAnchor<undefined> = ({ anchorElem }) => {\n const [editor] = useLexicalComposerContext()\n\n return useInlineToolbar(editor, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","mergeRegister","$getSelection","$isRangeSelection","$isTextNode","COMMAND_PRIORITY_LOW","getDOMSelection","SELECTION_CHANGE_COMMAND","useCallback","useEffect","useMemo","useRef","useState","React","createPortal","useEditorConfigContext","getDOMRangeRect","setFloatingElemPosition","ToolbarButton","ToolbarDropdown","useToolbarStates","ButtonGroupItem","active","anchorElem","editor","enabled","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","group","index","toolbarStates","editorConfig","groupState","groupStates","get","DropdownIcon","type","undefined","activeItem","activeItems","_jsxs","className","items","length","Icon","map","itemState","itemStates","features","toolbarInline","groups","InlineToolbar","floatingToolbarRef","caretRef","closeFloatingToolbar","current","isOpacityZero","style","opacity","isPointerEventsNone","pointerEvents","mouseMoveListener","e","buttons","x","clientX","y","clientY","elementUnderMouse","document","elementFromPoint","contains","mouseUpListener","addEventListener","removeEventListener","$updateTextFormatFloatingToolbar","selection","nativeSelection","_window","possibleLinkEditor","querySelector","isLinkEditorVisible","rootElement","getRootElement","isCollapsed","anchorNode","rangeRect","offsetIfFlipped","alwaysDisplayOnTop","floatingElem","horizontalPosition","targetRect","anchorFlippedOffset","horizontalOffset","specialHandlingForCaret","verticalGap","scrollerElem","parentElement","update","getEditorState","read","window","registerUpdateListener","editorState","registerCommand","ref","i","useInlineToolbar","$","isText","setIsText","isEditable","t0","isComposing","getTextContent","nodes","getNodes","foundNodeWithText","node","rawTextContent","replace","updatePopup","t1","t2","t3","t4","registerRootListener","t5","InlineToolbarPlugin"],"sources":["../../../../../../src/features/toolbars/inline/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarStates } from '../../../shared/useToolbarStates.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js'\nimport { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport { useToolbarStates } from '../../../shared/useToolbarStates.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n active,\n anchorElem,\n editor,\n enabled,\n item,\n}: {\n active: boolean\n anchorElem: HTMLElement\n editor: LexicalEditor\n enabled: boolean\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n if (!item.ChildComponent) {\n return null\n }\n\n return (\n <ToolbarButton active={active} editor={editor} enabled={enabled} item={item} key={item.key}>\n <item.ChildComponent />\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n group,\n index,\n toolbarStates,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n group: ToolbarGroup\n index: number\n toolbarStates: ToolbarStates\n}): React.ReactNode {\n const { editorConfig } = useEditorConfigContext()\n\n const groupState = toolbarStates.groupStates.get(group.key)\n\n const DropdownIcon = useMemo(() => {\n if (group.type !== 'dropdown') {\n return undefined\n }\n const activeItem = groupState?.activeItems?.[0]\n return activeItem?.ChildComponent ?? group.ChildComponent\n }, [group, groupState?.activeItems])\n\n return (\n <div\n className={`inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`}\n data-toolbar-group-key={group.key}\n key={group.key}\n >\n {group.type === 'dropdown' && group.items.length && groupState ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n groupState={groupState}\n Icon={DropdownIcon}\n />\n ) : null}\n {group.type === 'buttons' && group.items.length\n ? group.items.map((item) => {\n const itemState = toolbarStates.itemStates.get(item.key)\n return (\n <ButtonGroupItem\n active={itemState?.active ?? false}\n anchorElem={anchorElem}\n editor={editor}\n enabled={itemState?.enabled ?? true}\n item={item}\n key={item.key}\n />\n )\n })\n : null}\n {index < editorConfig.features.toolbarInline?.groups.length - 1 && (\n <div className=\"divider\" />\n )}\n </div>\n )\n}\n\nfunction InlineToolbar({\n anchorElem,\n editor,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n}): React.ReactNode {\n const floatingToolbarRef = useRef<HTMLDivElement | null>(null)\n const caretRef = useRef<HTMLDivElement | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const toolbarStates = useToolbarStates(editor, editorConfig?.features?.toolbarInline?.groups)\n\n const closeFloatingToolbar = useCallback(() => {\n if (floatingToolbarRef?.current) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n\n if (!isOpacityZero) {\n floatingToolbarRef.current.style.opacity = '0'\n }\n if (!isPointerEventsNone) {\n floatingToolbarRef.current.style.pointerEvents = 'none'\n }\n }\n }, [floatingToolbarRef])\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n if (floatingToolbarRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n if (!isOpacityZero || !isPointerEventsNone) {\n // Check if the mouse is not over the popup\n const x = e.clientX\n const y = e.clientY\n const elementUnderMouse = document.elementFromPoint(x, y)\n if (!floatingToolbarRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n closeFloatingToolbar()\n }\n }\n }\n },\n [closeFloatingToolbar],\n )\n\n const mouseUpListener = useCallback(() => {\n if (floatingToolbarRef?.current) {\n if (floatingToolbarRef.current.style.opacity !== '1') {\n floatingToolbarRef.current.style.opacity = '1'\n }\n if (floatingToolbarRef.current.style.pointerEvents !== 'auto') {\n floatingToolbarRef.current.style.pointerEvents = 'auto'\n }\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('mousemove', mouseMoveListener)\n document.addEventListener('mouseup', mouseUpListener)\n\n return () => {\n document.removeEventListener('mousemove', mouseMoveListener)\n document.removeEventListener('mouseup', mouseUpListener)\n }\n }, [floatingToolbarRef, mouseMoveListener, mouseUpListener])\n\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection()\n\n const nativeSelection = getDOMSelection(editor._window)\n\n if (floatingToolbarRef.current === null) {\n return\n }\n\n const possibleLinkEditor = anchorElem.querySelector(':scope > .link-editor')\n const isLinkEditorVisible =\n possibleLinkEditor !== null &&\n 'style' in possibleLinkEditor &&\n possibleLinkEditor?.style?.['opacity' as keyof typeof possibleLinkEditor.style] === '1'\n\n const rootElement = editor.getRootElement()\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement)\n\n // Position floating toolbar\n const offsetIfFlipped = setFloatingElemPosition({\n alwaysDisplayOnTop: isLinkEditorVisible,\n anchorElem,\n floatingElem: floatingToolbarRef.current,\n horizontalPosition: 'center',\n targetRect: rangeRect,\n })\n\n // Position caret\n if (caretRef.current) {\n setFloatingElemPosition({\n anchorElem: floatingToolbarRef.current,\n anchorFlippedOffset: offsetIfFlipped,\n floatingElem: caretRef.current,\n horizontalOffset: 5,\n horizontalPosition: 'center',\n specialHandlingForCaret: true,\n targetRect: rangeRect,\n verticalGap: 8,\n })\n }\n } else {\n closeFloatingToolbar()\n }\n }, [editor, closeFloatingToolbar, anchorElem])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }\n\n window.addEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateTextFormatFloatingToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateTextFormatFloatingToolbar])\n\n return (\n <div className=\"inline-toolbar-popup\" ref={floatingToolbarRef}>\n <div className=\"caret\" ref={caretRef} />\n {editorConfig?.features &&\n editorConfig.features?.toolbarInline?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n index={i}\n key={group.key}\n toolbarStates={toolbarStates}\n />\n )\n })}\n </div>\n )\n}\n\nfunction useInlineToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n): null | React.ReactElement {\n const [isText, setIsText] = useState(false)\n const isEditable = useLexicalEditable()\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return\n }\n const selection = $getSelection()\n const nativeSelection = getDOMSelection(editor._window)\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false)\n return\n }\n\n if (!$isRangeSelection(selection)) {\n return\n }\n\n if (selection.getTextContent() !== '') {\n const nodes = selection.getNodes()\n let foundNodeWithText = false\n for (const node of nodes) {\n if ($isTextNode(node)) {\n setIsText(true)\n foundNodeWithText = true\n break\n }\n }\n if (!foundNodeWithText) {\n setIsText(false)\n }\n } else {\n setIsText(false)\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '')\n if (!selection.isCollapsed() && rawTextContent === '') {\n setIsText(false)\n return\n }\n })\n }, [editor])\n\n useEffect(() => {\n document.addEventListener('selectionchange', updatePopup)\n document.addEventListener('mouseup', updatePopup)\n return () => {\n document.removeEventListener('selectionchange', updatePopup)\n document.removeEventListener('mouseup', updatePopup)\n }\n }, [updatePopup])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup()\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false)\n }\n }),\n )\n }, [editor, updatePopup])\n\n if (!isText || !isEditable) {\n return null\n }\n\n return createPortal(<InlineToolbar anchorElem={anchorElem} editor={editor} />, anchorElem)\n}\n\nexport const InlineToolbarPlugin: PluginComponentWithAnchor<undefined> = ({ anchorElem }) => {\n const [editor] = useLexicalComposerContext()\n\n return useInlineToolbar(editor, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,9 +2,11 @@ import type { LexicalEditor } from 'lexical';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { ToolbarGroupItem } from '../../types.js';
|
|
4
4
|
import './index.scss';
|
|
5
|
-
export declare const ToolbarButton: ({ children, editor, item, }: {
|
|
5
|
+
export declare const ToolbarButton: ({ active, children, editor, enabled, item, }: {
|
|
6
|
+
active?: boolean;
|
|
6
7
|
children: React.JSX.Element;
|
|
7
8
|
editor: LexicalEditor;
|
|
9
|
+
enabled?: boolean;
|
|
8
10
|
item: ToolbarGroupItem;
|
|
9
11
|
}) => React.JSX.Element;
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAG5C,OAAO,KAA+B,MAAM,OAAO,CAAA;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,aAAa,iDAMvB;IACD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;IAC3B,MAAM,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,gBAAgB,CAAA;CACvB,sBA+CA,CAAA"}
|
|
@@ -2,134 +2,61 @@
|
|
|
2
2
|
|
|
3
3
|
import { c as _c } from "react/compiler-runtime";
|
|
4
4
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import React, { useCallback, useDeferredValue, useEffect, useMemo, useState } from 'react';
|
|
8
|
-
import { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js';
|
|
9
|
-
import { useRunDeprioritized } from '../../../../utilities/useRunDeprioritized.js';
|
|
5
|
+
import { $addUpdateTag } from 'lexical';
|
|
6
|
+
import React, { useCallback, useMemo } from 'react';
|
|
10
7
|
const baseClass = 'toolbar-popup__button';
|
|
11
8
|
export const ToolbarButton = t0 => {
|
|
12
|
-
const $ = _c(
|
|
9
|
+
const $ = _c(14);
|
|
13
10
|
const {
|
|
11
|
+
active: t1,
|
|
14
12
|
children,
|
|
15
13
|
editor,
|
|
14
|
+
enabled: t2,
|
|
16
15
|
item
|
|
17
16
|
} = t0;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
};
|
|
24
|
-
$[0] = t1;
|
|
25
|
-
} else {
|
|
26
|
-
t1 = $[0];
|
|
27
|
-
}
|
|
28
|
-
const [_state, setState] = useState(t1);
|
|
29
|
-
const deferredState = useDeferredValue(_state);
|
|
30
|
-
const editorConfigContext = useEditorConfigContext();
|
|
31
|
-
const t2 = !deferredState.enabled ? "disabled" : "";
|
|
32
|
-
const t3 = deferredState.active ? "active" : "";
|
|
33
|
-
const t4 = item.key ? `${baseClass}-${item.key}` : "";
|
|
34
|
-
let t5;
|
|
35
|
-
if ($[1] !== t2 || $[2] !== t3 || $[3] !== t4) {
|
|
36
|
-
t5 = [baseClass, t2, t3, t4].filter(Boolean);
|
|
37
|
-
$[1] = t2;
|
|
38
|
-
$[2] = t3;
|
|
39
|
-
$[3] = t4;
|
|
40
|
-
$[4] = t5;
|
|
41
|
-
} else {
|
|
42
|
-
t5 = $[4];
|
|
43
|
-
}
|
|
44
|
-
const className = t5.join(" ");
|
|
17
|
+
const active = t1 === undefined ? false : t1;
|
|
18
|
+
const enabled = t2 === undefined ? true : t2;
|
|
19
|
+
const t3 = !enabled ? "disabled" : "";
|
|
20
|
+
const t4 = active ? "active" : "";
|
|
21
|
+
const t5 = item.key ? `${baseClass}-${item.key}` : "";
|
|
45
22
|
let t6;
|
|
46
|
-
if ($[
|
|
47
|
-
t6 = ()
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
const newActive = item.isActive ? item.isActive({
|
|
54
|
-
editor,
|
|
55
|
-
editorConfigContext,
|
|
56
|
-
selection
|
|
57
|
-
}) : false;
|
|
58
|
-
const newEnabled = item.isEnabled ? item.isEnabled({
|
|
59
|
-
editor,
|
|
60
|
-
editorConfigContext,
|
|
61
|
-
selection
|
|
62
|
-
}) : true;
|
|
63
|
-
setState(prev => {
|
|
64
|
-
if (prev.active === newActive && prev.enabled === newEnabled) {
|
|
65
|
-
return prev;
|
|
66
|
-
}
|
|
67
|
-
return {
|
|
68
|
-
active: newActive,
|
|
69
|
-
enabled: newEnabled
|
|
70
|
-
};
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
};
|
|
74
|
-
$[5] = editor;
|
|
75
|
-
$[6] = editorConfigContext;
|
|
76
|
-
$[7] = item;
|
|
77
|
-
$[8] = t6;
|
|
23
|
+
if ($[0] !== t3 || $[1] !== t4 || $[2] !== t5) {
|
|
24
|
+
t6 = [baseClass, t3, t4, t5].filter(Boolean);
|
|
25
|
+
$[0] = t3;
|
|
26
|
+
$[1] = t4;
|
|
27
|
+
$[2] = t5;
|
|
28
|
+
$[3] = t6;
|
|
78
29
|
} else {
|
|
79
|
-
t6 = $[
|
|
30
|
+
t6 = $[3];
|
|
80
31
|
}
|
|
81
|
-
const
|
|
82
|
-
const runDeprioritized = useRunDeprioritized();
|
|
32
|
+
const className = t6.join(" ");
|
|
83
33
|
let t7;
|
|
84
|
-
|
|
85
|
-
if ($[9] !== editor || $[10] !== runDeprioritized || $[11] !== updateStates) {
|
|
34
|
+
if ($[4] !== active || $[5] !== editor || $[6] !== enabled || $[7] !== item) {
|
|
86
35
|
t7 = () => {
|
|
87
|
-
|
|
88
|
-
const listener = () => runDeprioritized(updateStates);
|
|
89
|
-
const cleanup = mergeRegister(editor.registerUpdateListener(listener));
|
|
90
|
-
document.addEventListener("mouseup", listener);
|
|
91
|
-
return () => {
|
|
92
|
-
cleanup();
|
|
93
|
-
document.removeEventListener("mouseup", listener);
|
|
94
|
-
};
|
|
95
|
-
};
|
|
96
|
-
t8 = [editor, runDeprioritized, updateStates];
|
|
97
|
-
$[9] = editor;
|
|
98
|
-
$[10] = runDeprioritized;
|
|
99
|
-
$[11] = updateStates;
|
|
100
|
-
$[12] = t7;
|
|
101
|
-
$[13] = t8;
|
|
102
|
-
} else {
|
|
103
|
-
t7 = $[12];
|
|
104
|
-
t8 = $[13];
|
|
105
|
-
}
|
|
106
|
-
useEffect(t7, t8);
|
|
107
|
-
let t9;
|
|
108
|
-
if ($[14] !== _state || $[15] !== editor || $[16] !== item) {
|
|
109
|
-
t9 = () => {
|
|
110
|
-
if (!_state.enabled) {
|
|
36
|
+
if (!enabled) {
|
|
111
37
|
return;
|
|
112
38
|
}
|
|
113
39
|
editor.focus(() => {
|
|
114
40
|
editor.update(_temp);
|
|
115
41
|
item.onSelect?.({
|
|
116
42
|
editor,
|
|
117
|
-
isActive:
|
|
43
|
+
isActive: active
|
|
118
44
|
});
|
|
119
45
|
});
|
|
120
46
|
};
|
|
121
|
-
$[
|
|
122
|
-
$[
|
|
123
|
-
$[
|
|
124
|
-
$[
|
|
47
|
+
$[4] = active;
|
|
48
|
+
$[5] = editor;
|
|
49
|
+
$[6] = enabled;
|
|
50
|
+
$[7] = item;
|
|
51
|
+
$[8] = t7;
|
|
125
52
|
} else {
|
|
126
|
-
|
|
53
|
+
t7 = $[8];
|
|
127
54
|
}
|
|
128
|
-
const handleClick =
|
|
55
|
+
const handleClick = t7;
|
|
129
56
|
const handleMouseDown = _temp2;
|
|
130
|
-
let
|
|
131
|
-
if ($[
|
|
132
|
-
|
|
57
|
+
let t8;
|
|
58
|
+
if ($[9] !== children || $[10] !== className || $[11] !== handleClick || $[12] !== item.key) {
|
|
59
|
+
t8 = _jsx("button", {
|
|
133
60
|
className,
|
|
134
61
|
"data-button-key": item.key,
|
|
135
62
|
onClick: handleClick,
|
|
@@ -137,15 +64,15 @@ export const ToolbarButton = t0 => {
|
|
|
137
64
|
type: "button",
|
|
138
65
|
children
|
|
139
66
|
});
|
|
140
|
-
$[
|
|
141
|
-
$[
|
|
142
|
-
$[
|
|
143
|
-
$[
|
|
144
|
-
$[
|
|
67
|
+
$[9] = children;
|
|
68
|
+
$[10] = className;
|
|
69
|
+
$[11] = handleClick;
|
|
70
|
+
$[12] = item.key;
|
|
71
|
+
$[13] = t8;
|
|
145
72
|
} else {
|
|
146
|
-
|
|
73
|
+
t8 = $[13];
|
|
147
74
|
}
|
|
148
|
-
return
|
|
75
|
+
return t8;
|
|
149
76
|
};
|
|
150
77
|
function _temp() {
|
|
151
78
|
$addUpdateTag("toolbar");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","$addUpdateTag","React","useCallback","useMemo","baseClass","ToolbarButton","t0","$","active","t1","children","editor","enabled","t2","item","undefined","t3","t4","t5","key","t6","filter","Boolean","className","join","t7","focus","update","_temp","onSelect","isActive","handleClick","handleMouseDown","_temp2","t8","_jsx","onClick","onMouseDown","type","e","preventDefault"],"sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { $addUpdateTag } from 'lexical'\nimport React, { useCallback, useMemo } from 'react'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport './index.scss'\n\nconst baseClass = 'toolbar-popup__button'\n\nexport const ToolbarButton = ({\n active = false,\n children,\n editor,\n enabled = true,\n item,\n}: {\n active?: boolean\n children: React.JSX.Element\n editor: LexicalEditor\n enabled?: boolean\n item: ToolbarGroupItem\n}) => {\n const className = useMemo(() => {\n return [\n baseClass,\n !enabled ? 'disabled' : '',\n active ? 'active' : '',\n item.key ? `${baseClass}-${item.key}` : '',\n ]\n .filter(Boolean)\n .join(' ')\n }, [active, enabled, item.key])\n\n const handleClick = useCallback(() => {\n if (!enabled) {\n return\n }\n\n editor.focus(() => {\n editor.update(() => {\n $addUpdateTag('toolbar')\n })\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect?.({\n editor,\n isActive: active,\n })\n })\n }, [editor, item, active, enabled])\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n }, [])\n\n return (\n <button\n className={className}\n data-button-key={item.key}\n onClick={handleClick}\n onMouseDown={handleMouseDown}\n type=\"button\"\n >\n {children}\n </button>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,aAAa,QAAQ;AAC9B,OAAOC,KAAA,IAASC,WAAW,EAAEC,OAAO,QAAQ;AAM5C,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,aAAA,GAAgBC,EAAA;EAAA,MAAAC,CAAA,GAAAR,EAAA;EAAC;IAAAS,MAAA,EAAAC,EAAA;IAAAC,QAAA;IAAAC,MAAA;IAAAC,OAAA,EAAAC,EAAA;IAAAC;EAAA,IAAAR,EAY7B;EAXC,MAAAE,MAAA,GAAAC,EAAc,KAAAM,SAAA,WAAdN,EAAc;EAGd,MAAAG,OAAA,GAAAC,EAAc,KAAAE,SAAA,UAAdF,EAAc;EAYV,MAAAG,EAAA,IAACJ,OAAA,GAAU,aAAa;EACxB,MAAAK,EAAA,GAAAT,MAAA,GAAS,WAAW;EACpB,MAAAU,EAAA,GAAAJ,IAAA,CAAAK,GAAA,GAAW,GAAAf,SAAA,IAAgBU,IAAA,CAAAK,GAAA,EAAU,GAAG;EAAA,IAAAC,EAAA;EAAA,IAAAb,CAAA,QAAAS,EAAA,IAAAT,CAAA,QAAAU,EAAA,IAAAV,CAAA,QAAAW,EAAA;IAJnCE,EAAA,IAAAhB,SAAA,EAELY,EAAwB,EACxBC,EAAoB,EACpBC,EAAwC,EAAAG,MAAA,CAAAC,OAEhC;IAAAf,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAU,EAAA;IAAAV,CAAA,MAAAW,EAAA;IAAAX,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAPZ,MAAAgB,SAAA,GACSH,EAMG,CAAAI,IAAA,CACF;EACoB,IAAAC,EAAA;EAAA,IAAAlB,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAI,MAAA,IAAAJ,CAAA,QAAAK,OAAA,IAAAL,CAAA,QAAAO,IAAA;IAEEW,EAAA,GAAAA,CAAA;MAAA,KACzBb,OAAA;QAAA;MAAA;MAILD,MAAA,CAAAe,KAAA;QACEf,MAAA,CAAAgB,MAAA,CAAAC,KAEA;QAEAd,IAAA,CAAAe,QAAA;UAAAlB,MAAA;UAAAmB,QAAA,EAEYtB;QAAA;MAAA,CAEd;IAAA;IACFD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAI,MAAA;IAAAJ,CAAA,MAAAK,OAAA;IAAAL,CAAA,MAAAO,IAAA;IAAAP,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAfA,MAAAwB,WAAA,GAAoBN,EAec;EAElC,MAAAO,eAAA,GAAAC,MAAA;EAKK,IAAAC,EAAA;EAAA,IAAA3B,CAAA,QAAAG,QAAA,IAAAH,CAAA,SAAAgB,SAAA,IAAAhB,CAAA,SAAAwB,WAAA,IAAAxB,CAAA,SAAAO,IAAA,CAAAK,GAAA;IAGHe,EAAA,GAAAC,IAAA,CAAC;MAAAZ,SAAA;MAAA,mBAEkBT,IAAA,CAAAK,GAAA;MAAAiB,OAAA,EACRL,WAAA;MAAAM,WAAA,EACIL,eAAA;MAAAM,IAAA,EACR;MAAA5B;IAAA,C;;;;;;;;;SALPwB,E;CAUJ;AA3D6B,SAAAN,MAAA;EA+BrB5B,aAAA,CAAc;AAAA;AA/BO,SAAAiC,OAAAM,CAAA;EA6CzBA,CAAA,CAAAC,cAAA,CAAgB;AAAA","ignoreList":[]}
|
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { LexicalEditor } from 'lexical';
|
|
3
|
-
import type { ToolbarDropdownGroup
|
|
3
|
+
import type { ToolbarDropdownGroup } from '../../types.js';
|
|
4
|
+
import type { ToolbarGroupState } from '../useToolbarStates.js';
|
|
4
5
|
import './index.scss';
|
|
5
|
-
export declare const ToolbarDropdown: ({ anchorElem, classNames, editor, group, Icon, itemsContainerClassNames, label,
|
|
6
|
+
export declare const ToolbarDropdown: ({ anchorElem, classNames, editor, group, groupState, Icon, itemsContainerClassNames, label, }: {
|
|
6
7
|
anchorElem: HTMLElement;
|
|
7
8
|
classNames?: string[];
|
|
8
9
|
editor: LexicalEditor;
|
|
9
10
|
group: ToolbarDropdownGroup;
|
|
11
|
+
groupState: ToolbarGroupState;
|
|
10
12
|
Icon?: React.FC;
|
|
11
13
|
itemsContainerClassNames?: string[];
|
|
12
14
|
label?: string;
|
|
13
|
-
/**
|
|
14
|
-
* Maximum number of active items allowed. This is a performance optimization to prevent
|
|
15
|
-
* unnecessary item active checks when the maximum number of active items is reached.
|
|
16
|
-
*/
|
|
17
|
-
maxActiveItems?: number;
|
|
18
|
-
onActiveChange?: ({ activeItems }: {
|
|
19
|
-
activeItems: ToolbarGroupItem[];
|
|
20
|
-
}) => void;
|
|
21
15
|
}) => React.JSX.Element;
|
|
22
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/toolbars/shared/ToolbarDropdown/index.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/toolbars/shared/ToolbarDropdown/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAItC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAI5C,OAAO,KAAK,EAAE,oBAAoB,EAAoB,MAAM,gBAAgB,CAAA;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG/D,OAAO,cAAc,CAAA;AAoErB,eAAO,MAAM,eAAe,kGASzB;IACD,UAAU,EAAE,WAAW,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,oBAAoB,CAAA;IAC3B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IACf,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,sBAkCA,CAAA"}
|