@liveblocks/react-tiptap 2.16.0-toolbars2 → 2.16.0-toolbars3
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/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/toolbar/FloatingToolbar.js +8 -13
- package/dist/toolbar/FloatingToolbar.js.map +1 -1
- package/dist/toolbar/FloatingToolbar.mjs +8 -13
- package/dist/toolbar/FloatingToolbar.mjs.map +1 -1
- package/dist/toolbar/Toolbar.js +66 -23
- package/dist/toolbar/Toolbar.js.map +1 -1
- package/dist/toolbar/Toolbar.mjs +68 -25
- package/dist/toolbar/Toolbar.mjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +6 -6
package/dist/index.d.mts
CHANGED
|
@@ -94,11 +94,12 @@ interface ToolbarToggleProps extends ToolbarButtonProps {
|
|
|
94
94
|
}
|
|
95
95
|
interface ToolbarBlockSelectorItem {
|
|
96
96
|
name: string;
|
|
97
|
-
|
|
97
|
+
icon?: ReactNode;
|
|
98
|
+
isActive: ((editor: Editor) => boolean) | "default";
|
|
98
99
|
setActive: (editor: Editor) => void;
|
|
99
100
|
}
|
|
100
101
|
interface ToolbarBlockSelectorProps extends ComponentProps<"button"> {
|
|
101
|
-
items?: ToolbarBlockSelectorItem[];
|
|
102
|
+
items?: ToolbarBlockSelectorItem[] | ((defaultItems: ToolbarBlockSelectorItem[]) => ToolbarBlockSelectorItem[]);
|
|
102
103
|
}
|
|
103
104
|
declare function ToolbarSectionHistory(): react_jsx_runtime.JSX.Element;
|
|
104
105
|
declare function ToolbarSectionInline(): react_jsx_runtime.JSX.Element;
|
package/dist/index.d.ts
CHANGED
|
@@ -94,11 +94,12 @@ interface ToolbarToggleProps extends ToolbarButtonProps {
|
|
|
94
94
|
}
|
|
95
95
|
interface ToolbarBlockSelectorItem {
|
|
96
96
|
name: string;
|
|
97
|
-
|
|
97
|
+
icon?: ReactNode;
|
|
98
|
+
isActive: ((editor: Editor) => boolean) | "default";
|
|
98
99
|
setActive: (editor: Editor) => void;
|
|
99
100
|
}
|
|
100
101
|
interface ToolbarBlockSelectorProps extends ComponentProps<"button"> {
|
|
101
|
-
items?: ToolbarBlockSelectorItem[];
|
|
102
|
+
items?: ToolbarBlockSelectorItem[] | ((defaultItems: ToolbarBlockSelectorItem[]) => ToolbarBlockSelectorItem[]);
|
|
102
103
|
}
|
|
103
104
|
declare function ToolbarSectionHistory(): react_jsx_runtime.JSX.Element;
|
|
104
105
|
declare function ToolbarSectionInline(): react_jsx_runtime.JSX.Element;
|
|
@@ -49,11 +49,6 @@ const FloatingToolbar = Object.assign(
|
|
|
49
49
|
const [isPointerDown, setPointerDown] = react.useState(false);
|
|
50
50
|
const [isFocused, setFocused] = react.useState(false);
|
|
51
51
|
const [isManuallyClosed, setManuallyClosed] = react.useState(false);
|
|
52
|
-
const isEditable = react$1.useEditorState({
|
|
53
|
-
editor,
|
|
54
|
-
equalityFn: Object.is,
|
|
55
|
-
selector: (ctx) => ctx.editor?.isEditable ?? false
|
|
56
|
-
}) ?? false;
|
|
57
52
|
const hasSelectionRange = react$1.useEditorState({
|
|
58
53
|
editor,
|
|
59
54
|
equalityFn: Object.is,
|
|
@@ -204,7 +199,7 @@ const FloatingToolbar = Object.assign(
|
|
|
204
199
|
[onPointerDown]
|
|
205
200
|
);
|
|
206
201
|
react.useEffect(() => {
|
|
207
|
-
if (!editor
|
|
202
|
+
if (!editor) {
|
|
208
203
|
return;
|
|
209
204
|
}
|
|
210
205
|
const handlePointerDown2 = () => {
|
|
@@ -213,15 +208,15 @@ const FloatingToolbar = Object.assign(
|
|
|
213
208
|
const handlePointerUp = () => {
|
|
214
209
|
setPointerDown(false);
|
|
215
210
|
};
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
211
|
+
editor.view.dom.addEventListener("pointerdown", handlePointerDown2);
|
|
212
|
+
editor.view.dom.addEventListener("pointercancel", handlePointerUp);
|
|
213
|
+
editor.view.dom.addEventListener("pointerup", handlePointerUp);
|
|
219
214
|
return () => {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
215
|
+
editor.view.dom.removeEventListener("pointerdown", handlePointerDown2);
|
|
216
|
+
editor.view.dom.removeEventListener("pointercancel", handlePointerUp);
|
|
217
|
+
editor.view.dom.removeEventListener("pointerup", handlePointerUp);
|
|
223
218
|
};
|
|
224
|
-
}, [editor
|
|
219
|
+
}, [editor]);
|
|
225
220
|
_private$1.useLayoutEffect(() => {
|
|
226
221
|
if (!editor || !delayedIsOpen) {
|
|
227
222
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingToolbar.js","sources":["../../src/toolbar/FloatingToolbar.tsx"],"sourcesContent":["import {\n autoUpdate,\n type DetectOverflowOptions,\n flip,\n hide,\n inline,\n limitShift,\n offset,\n shift,\n size,\n useFloating,\n type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n TooltipProvider,\n useInitial,\n useRefs,\n} from \"@liveblocks/react-ui/_private\";\nimport { type Editor, isTextSelection, useEditorState } from \"@tiptap/react\";\nimport type {\n ComponentProps,\n FocusEvent as ReactFocusEvent,\n PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider } from \"../context\";\nimport type { FloatingPosition } from \"../types\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\nimport {\n applyToolbarSlot,\n Toolbar,\n type ToolbarSlot,\n type ToolbarSlotProps,\n} from \"./Toolbar\";\n\nexport interface FloatingToolbarProps\n extends Omit<ComponentProps<\"div\">, \"children\"> {\n editor: Editor | null;\n position?: FloatingPosition;\n offset?: number;\n children?: ToolbarSlot;\n before?: ToolbarSlot;\n after?: ToolbarSlot;\n}\n\nexport const FLOATING_TOOLBAR_COLLISION_PADDING = 10;\nconst FLOATING_TOOLBAR_OPEN_DELAY = 50;\n\nfunction DefaultFloatingToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <Toolbar.BlockSelector />\n <Toolbar.SectionInline />\n {supportsThread ? (\n <>\n <Toolbar.Separator />\n <Toolbar.SectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nexport const FloatingToolbar = Object.assign(\n forwardRef<HTMLDivElement, FloatingToolbarProps>(\n (\n {\n children = DefaultFloatingToolbarContent,\n before,\n after,\n position = \"top\",\n offset: sideOffset = 6,\n editor,\n onPointerDown,\n onFocus,\n onBlur,\n className,\n ...props\n },\n forwardedRef\n ) => {\n const toolbarRef = useRef<HTMLDivElement>(null);\n const externalIds = useInitial<Set<string>>(() => new Set());\n const [isPointerDown, setPointerDown] = useState(false);\n const [isFocused, setFocused] = useState(false);\n const [isManuallyClosed, setManuallyClosed] = useState(false);\n const isEditable =\n useEditorState({\n editor,\n equalityFn: Object.is,\n selector: (ctx) => ctx.editor?.isEditable ?? false,\n }) ?? false;\n const hasSelectionRange =\n useEditorState({\n editor,\n equalityFn: Object.is,\n selector: (ctx) => {\n const editor = ctx.editor;\n\n if (!editor) {\n return false;\n }\n\n const { doc, selection } = editor.state;\n const { empty, ranges } = selection;\n const from = Math.min(...ranges.map((range) => range.$from.pos));\n const to = Math.max(...ranges.map((range) => range.$to.pos));\n\n if (empty) {\n return false;\n }\n\n return (\n isTextSelection(selection) && doc.textBetween(from, to).length > 0\n );\n },\n }) ?? false;\n\n const isOpen =\n isFocused && !isPointerDown && hasSelectionRange && !isManuallyClosed;\n const [delayedIsOpen, setDelayedIsOpen] = useState(isOpen);\n const delayedIsOpenTimeoutRef = useRef<number>();\n\n // Reset the manually closed state when there's another change\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n setManuallyClosed(false);\n\n const handleSelectionChange = () => {\n setManuallyClosed(false);\n };\n\n editor.on(\"selectionUpdate\", handleSelectionChange);\n\n return () => {\n editor.off(\"selectionUpdate\", handleSelectionChange);\n };\n }, [isFocused, hasSelectionRange, editor]);\n\n // Don't close when the focus moves from the editor to the toolbar\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handleFocus = () => {\n setFocused(true);\n };\n\n const handleBlur = (event: FocusEvent) => {\n if (\n event.relatedTarget &&\n toolbarRef.current?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n\n if (event.relatedTarget === editor.view.dom) {\n return;\n }\n\n for (const externalId of externalIds) {\n if (\n document\n .getElementById(externalId)\n ?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n }\n\n setFocused(false);\n };\n\n editor.view.dom.addEventListener(\"focus\", handleFocus);\n editor.view.dom.addEventListener(\"blur\", handleBlur);\n\n return () => {\n editor.view.dom.removeEventListener(\"focus\", handleFocus);\n editor.view.dom.removeEventListener(\"blur\", handleBlur);\n };\n }, [editor, externalIds]);\n\n const handleFocus = useCallback(\n (event: ReactFocusEvent<HTMLDivElement>) => {\n onFocus?.(event);\n\n if (!event.isDefaultPrevented()) {\n setFocused(true);\n }\n },\n [onFocus]\n );\n\n // Close the toolbar when the it loses focus to something else than the editor\n const handleBlur = useCallback(\n (event: ReactFocusEvent<HTMLDivElement>) => {\n onBlur?.(event);\n\n if (!event.isDefaultPrevented()) {\n if (\n event.relatedTarget &&\n toolbarRef.current?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n\n if (event.relatedTarget === editor?.view.dom) {\n return;\n }\n\n for (const externalId of externalIds) {\n if (\n document\n .getElementById(externalId)\n ?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n }\n\n setFocused(false);\n }\n },\n [onBlur, editor, externalIds]\n );\n\n // Delay the opening of the toolbar to avoid flickering issues\n useEffect(() => {\n if (isOpen) {\n delayedIsOpenTimeoutRef.current = window.setTimeout(() => {\n setDelayedIsOpen(true);\n }, FLOATING_TOOLBAR_OPEN_DELAY);\n } else {\n setDelayedIsOpen(false);\n }\n\n return () => {\n window.clearTimeout(delayedIsOpenTimeoutRef.current);\n };\n }, [isOpen]);\n\n const floatingOptions: UseFloatingOptions = useMemo(() => {\n const detectOverflowOptions: DetectOverflowOptions = {\n padding: FLOATING_TOOLBAR_COLLISION_PADDING,\n };\n\n return {\n strategy: \"fixed\",\n placement: position,\n middleware: [\n inline(detectOverflowOptions),\n flip({ ...detectOverflowOptions, crossAxis: false }),\n hide(detectOverflowOptions),\n shift({\n ...detectOverflowOptions,\n limiter: limitShift(),\n }),\n offset(sideOffset),\n size(detectOverflowOptions),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n };\n }, [position, sideOffset]);\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n isPositioned,\n } = useFloating({\n ...floatingOptions,\n open: delayedIsOpen,\n });\n const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n onPointerDown?.(event);\n\n event.stopPropagation();\n\n // Prevent the toolbar from closing when clicking on the toolbar itself\n if (event.target === toolbarRef.current) {\n event.preventDefault();\n }\n },\n [onPointerDown]\n );\n\n useEffect(() => {\n if (!editor || !isEditable) {\n return;\n }\n\n const handlePointerDown = () => {\n setPointerDown(true);\n };\n const handlePointerUp = () => {\n setPointerDown(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n document.addEventListener(\"pointercancel\", handlePointerUp);\n document.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n document.removeEventListener(\"pointercancel\", handlePointerUp);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, [editor, isEditable]);\n\n useLayoutEffect(() => {\n if (!editor || !delayedIsOpen) {\n return;\n }\n\n const updateSelectionReference = () => {\n const domSelection = window.getSelection();\n\n if (\n editor.state.selection.empty ||\n !domSelection ||\n !domSelection.rangeCount\n ) {\n setReference(null);\n } else {\n const domRange = domSelection.getRangeAt(0);\n\n setReference(domRange);\n }\n };\n\n editor.on(\"transaction\", updateSelectionReference);\n updateSelectionReference();\n\n return () => {\n editor.off(\"transaction\", updateSelectionReference);\n };\n }, [editor, delayedIsOpen, setReference]);\n\n useEffect(() => {\n if (!editor || !delayedIsOpen) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.target !== editor.view.dom && event.defaultPrevented) {\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n\n editor.commands.focus();\n setManuallyClosed(true);\n }\n };\n\n editor.view.dom.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n editor.view.dom.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [editor, delayedIsOpen]);\n\n const close = useCallback(() => {\n setManuallyClosed(true);\n }, [setManuallyClosed]);\n\n const registerExternal = useCallback(\n (id: string) => {\n externalIds.add(id);\n\n return () => {\n externalIds.delete(id);\n };\n },\n [externalIds]\n );\n\n if (!editor || !delayedIsOpen) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return createPortal(\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <FloatingToolbarContext.Provider\n value={{ close, registerExternal }}\n >\n <div\n role=\"toolbar\"\n aria-label=\"Floating toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\n \"lb-root lb-portal lb-elevation lb-tiptap-floating-toolbar lb-tiptap-toolbar\",\n className\n )}\n ref={mergedRefs}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n minWidth: \"max-content\",\n }}\n onPointerDown={handlePointerDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </FloatingToolbarContext.Provider>\n </EditorProvider>\n </TooltipProvider>,\n document.body\n );\n }\n ),\n {\n External: FloatingToolbarExternal,\n }\n);\n"],"names":["jsxs","Fragment","jsx","Toolbar","forwardRef","useRef","useInitial","useState","useEditorState","editor","isTextSelection","useEffect","handleFocus","handleBlur","useCallback","useMemo","inline","flip","hide","shift","limitShift","offset","size","autoUpdate","useFloating","useRefs","handlePointerDown","useLayoutEffect","createPortal","TooltipProvider","EditorProvider","FloatingToolbarContext","classNames","applyToolbarSlot","FloatingToolbarExternal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FloatingToolbar.js","sources":["../../src/toolbar/FloatingToolbar.tsx"],"sourcesContent":["import {\n autoUpdate,\n type DetectOverflowOptions,\n flip,\n hide,\n inline,\n limitShift,\n offset,\n shift,\n size,\n useFloating,\n type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n TooltipProvider,\n useInitial,\n useRefs,\n} from \"@liveblocks/react-ui/_private\";\nimport { type Editor, isTextSelection, useEditorState } from \"@tiptap/react\";\nimport type {\n ComponentProps,\n FocusEvent as ReactFocusEvent,\n PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider } from \"../context\";\nimport type { FloatingPosition } from \"../types\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\nimport {\n applyToolbarSlot,\n Toolbar,\n type ToolbarSlot,\n type ToolbarSlotProps,\n} from \"./Toolbar\";\n\nexport interface FloatingToolbarProps\n extends Omit<ComponentProps<\"div\">, \"children\"> {\n editor: Editor | null;\n position?: FloatingPosition;\n offset?: number;\n children?: ToolbarSlot;\n before?: ToolbarSlot;\n after?: ToolbarSlot;\n}\n\nexport const FLOATING_TOOLBAR_COLLISION_PADDING = 10;\nconst FLOATING_TOOLBAR_OPEN_DELAY = 50;\n\nfunction DefaultFloatingToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <Toolbar.BlockSelector />\n <Toolbar.SectionInline />\n {supportsThread ? (\n <>\n <Toolbar.Separator />\n <Toolbar.SectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nexport const FloatingToolbar = Object.assign(\n forwardRef<HTMLDivElement, FloatingToolbarProps>(\n (\n {\n children = DefaultFloatingToolbarContent,\n before,\n after,\n position = \"top\",\n offset: sideOffset = 6,\n editor,\n onPointerDown,\n onFocus,\n onBlur,\n className,\n ...props\n },\n forwardedRef\n ) => {\n const toolbarRef = useRef<HTMLDivElement>(null);\n const externalIds = useInitial<Set<string>>(() => new Set());\n const [isPointerDown, setPointerDown] = useState(false);\n const [isFocused, setFocused] = useState(false);\n const [isManuallyClosed, setManuallyClosed] = useState(false);\n const hasSelectionRange =\n useEditorState({\n editor,\n equalityFn: Object.is,\n selector: (ctx) => {\n const editor = ctx.editor;\n\n if (!editor) {\n return false;\n }\n\n const { doc, selection } = editor.state;\n const { empty, ranges } = selection;\n const from = Math.min(...ranges.map((range) => range.$from.pos));\n const to = Math.max(...ranges.map((range) => range.$to.pos));\n\n if (empty) {\n return false;\n }\n\n return (\n isTextSelection(selection) && doc.textBetween(from, to).length > 0\n );\n },\n }) ?? false;\n\n const isOpen =\n isFocused && !isPointerDown && hasSelectionRange && !isManuallyClosed;\n const [delayedIsOpen, setDelayedIsOpen] = useState(isOpen);\n const delayedIsOpenTimeoutRef = useRef<number>();\n\n // Reset the manually closed state when there's another change\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n setManuallyClosed(false);\n\n const handleSelectionChange = () => {\n setManuallyClosed(false);\n };\n\n editor.on(\"selectionUpdate\", handleSelectionChange);\n\n return () => {\n editor.off(\"selectionUpdate\", handleSelectionChange);\n };\n }, [isFocused, hasSelectionRange, editor]);\n\n // Don't close when the focus moves from the editor to the toolbar\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handleFocus = () => {\n setFocused(true);\n };\n\n const handleBlur = (event: FocusEvent) => {\n if (\n event.relatedTarget &&\n toolbarRef.current?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n\n if (event.relatedTarget === editor.view.dom) {\n return;\n }\n\n for (const externalId of externalIds) {\n if (\n document\n .getElementById(externalId)\n ?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n }\n\n setFocused(false);\n };\n\n editor.view.dom.addEventListener(\"focus\", handleFocus);\n editor.view.dom.addEventListener(\"blur\", handleBlur);\n\n return () => {\n editor.view.dom.removeEventListener(\"focus\", handleFocus);\n editor.view.dom.removeEventListener(\"blur\", handleBlur);\n };\n }, [editor, externalIds]);\n\n const handleFocus = useCallback(\n (event: ReactFocusEvent<HTMLDivElement>) => {\n onFocus?.(event);\n\n if (!event.isDefaultPrevented()) {\n setFocused(true);\n }\n },\n [onFocus]\n );\n\n // Close the toolbar when the it loses focus to something else than the editor\n const handleBlur = useCallback(\n (event: ReactFocusEvent<HTMLDivElement>) => {\n onBlur?.(event);\n\n if (!event.isDefaultPrevented()) {\n if (\n event.relatedTarget &&\n toolbarRef.current?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n\n if (event.relatedTarget === editor?.view.dom) {\n return;\n }\n\n for (const externalId of externalIds) {\n if (\n document\n .getElementById(externalId)\n ?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n }\n\n setFocused(false);\n }\n },\n [onBlur, editor, externalIds]\n );\n\n // Delay the opening of the toolbar to avoid flickering issues\n useEffect(() => {\n if (isOpen) {\n delayedIsOpenTimeoutRef.current = window.setTimeout(() => {\n setDelayedIsOpen(true);\n }, FLOATING_TOOLBAR_OPEN_DELAY);\n } else {\n setDelayedIsOpen(false);\n }\n\n return () => {\n window.clearTimeout(delayedIsOpenTimeoutRef.current);\n };\n }, [isOpen]);\n\n const floatingOptions: UseFloatingOptions = useMemo(() => {\n const detectOverflowOptions: DetectOverflowOptions = {\n padding: FLOATING_TOOLBAR_COLLISION_PADDING,\n };\n\n return {\n strategy: \"fixed\",\n placement: position,\n middleware: [\n inline(detectOverflowOptions),\n flip({ ...detectOverflowOptions, crossAxis: false }),\n hide(detectOverflowOptions),\n shift({\n ...detectOverflowOptions,\n limiter: limitShift(),\n }),\n offset(sideOffset),\n size(detectOverflowOptions),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n };\n }, [position, sideOffset]);\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n isPositioned,\n } = useFloating({\n ...floatingOptions,\n open: delayedIsOpen,\n });\n const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n onPointerDown?.(event);\n\n event.stopPropagation();\n\n // Prevent the toolbar from closing when clicking on the toolbar itself\n if (event.target === toolbarRef.current) {\n event.preventDefault();\n }\n },\n [onPointerDown]\n );\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handlePointerDown = () => {\n setPointerDown(true);\n };\n const handlePointerUp = () => {\n setPointerDown(false);\n };\n\n editor.view.dom.addEventListener(\"pointerdown\", handlePointerDown);\n editor.view.dom.addEventListener(\"pointercancel\", handlePointerUp);\n editor.view.dom.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n editor.view.dom.removeEventListener(\"pointerdown\", handlePointerDown);\n editor.view.dom.removeEventListener(\"pointercancel\", handlePointerUp);\n editor.view.dom.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, [editor]);\n\n useLayoutEffect(() => {\n if (!editor || !delayedIsOpen) {\n return;\n }\n\n const updateSelectionReference = () => {\n const domSelection = window.getSelection();\n\n if (\n editor.state.selection.empty ||\n !domSelection ||\n !domSelection.rangeCount\n ) {\n setReference(null);\n } else {\n const domRange = domSelection.getRangeAt(0);\n\n setReference(domRange);\n }\n };\n\n editor.on(\"transaction\", updateSelectionReference);\n updateSelectionReference();\n\n return () => {\n editor.off(\"transaction\", updateSelectionReference);\n };\n }, [editor, delayedIsOpen, setReference]);\n\n useEffect(() => {\n if (!editor || !delayedIsOpen) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.target !== editor.view.dom && event.defaultPrevented) {\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n\n editor.commands.focus();\n setManuallyClosed(true);\n }\n };\n\n editor.view.dom.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n editor.view.dom.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [editor, delayedIsOpen]);\n\n const close = useCallback(() => {\n setManuallyClosed(true);\n }, [setManuallyClosed]);\n\n const registerExternal = useCallback(\n (id: string) => {\n externalIds.add(id);\n\n return () => {\n externalIds.delete(id);\n };\n },\n [externalIds]\n );\n\n if (!editor || !delayedIsOpen) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return createPortal(\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <FloatingToolbarContext.Provider\n value={{ close, registerExternal }}\n >\n <div\n role=\"toolbar\"\n aria-label=\"Floating toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\n \"lb-root lb-portal lb-elevation lb-tiptap-floating-toolbar lb-tiptap-toolbar\",\n className\n )}\n ref={mergedRefs}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n minWidth: \"max-content\",\n }}\n onPointerDown={handlePointerDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </FloatingToolbarContext.Provider>\n </EditorProvider>\n </TooltipProvider>,\n document.body\n );\n }\n ),\n {\n External: FloatingToolbarExternal,\n }\n);\n"],"names":["jsxs","Fragment","jsx","Toolbar","forwardRef","useRef","useInitial","useState","useEditorState","editor","isTextSelection","useEffect","handleFocus","handleBlur","useCallback","useMemo","inline","flip","hide","shift","limitShift","offset","size","autoUpdate","useFloating","useRefs","handlePointerDown","useLayoutEffect","createPortal","TooltipProvider","EditorProvider","FloatingToolbarContext","classNames","applyToolbarSlot","FloatingToolbarExternal"],"mappings":";;;;;;;;;;;;;;AAwDO,MAAM,kCAAqC,GAAA,GAAA;AAClD,MAAM,2BAA8B,GAAA,EAAA,CAAA;AAEpC,SAAS,6BAAA,CAA8B,EAAE,MAAA,EAA4B,EAAA;AACnE,EAAM,MAAA,cAAA,GAAiB,uBAAuB,MAAO,CAAA,QAAA,CAAA;AAErD,EACE,uBAAAA,eAAA,CAAAC,mBAAA,EAAA;AAAA,IACE,QAAA,EAAA;AAAA,sBAACC,cAAA,CAAAC,eAAA,CAAQ,eAAR,EAAsB,CAAA;AAAA,sBACvBD,cAAA,CAACC,eAAQ,CAAA,aAAA,EAAR,EAAsB,CAAA;AAAA,MACtB,cACC,mBAAAH,eAAA,CAAAC,mBAAA,EAAA;AAAA,QACE,QAAA,EAAA;AAAA,0BAACC,cAAA,CAAAC,eAAA,CAAQ,WAAR,EAAkB,CAAA;AAAA,0BACnBD,cAAA,CAACC,eAAQ,CAAA,oBAAA,EAAR,EAA6B,CAAA;AAAA,SAAA;AAAA,OAChC,CACE,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,kBAAkB,MAAO,CAAA,MAAA;AAAA,EACpCC,gBAAA;AAAA,IACE,CACE;AAAA,MACE,QAAW,GAAA,6BAAA;AAAA,MACX,MAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAW,GAAA,KAAA;AAAA,MACX,QAAQ,UAAa,GAAA,CAAA;AAAA,MACrB,MAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACG,GAAA,KAAA;AAAA,OAEL,YACG,KAAA;AACH,MAAM,MAAA,UAAA,GAAaC,aAAuB,IAAI,CAAA,CAAA;AAC9C,MAAA,MAAM,WAAc,GAAAC,mBAAA,CAAwB,sBAAM,IAAI,KAAK,CAAA,CAAA;AAC3D,MAAA,MAAM,CAAC,aAAA,EAAe,cAAc,CAAA,GAAIC,eAAS,KAAK,CAAA,CAAA;AACtD,MAAA,MAAM,CAAC,SAAA,EAAW,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA,CAAA;AAC9C,MAAA,MAAM,CAAC,gBAAA,EAAkB,iBAAiB,CAAA,GAAIA,eAAS,KAAK,CAAA,CAAA;AAC5D,MAAA,MAAM,oBACJC,sBAAe,CAAA;AAAA,QACb,MAAA;AAAA,QACA,YAAY,MAAO,CAAA,EAAA;AAAA,QACnB,QAAA,EAAU,CAAC,GAAQ,KAAA;AACjB,UAAA,MAAMC,UAAS,GAAI,CAAA,MAAA,CAAA;AAEnB,UAAA,IAAI,CAACA,OAAQ,EAAA;AACX,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAEA,UAAA,MAAM,EAAE,GAAA,EAAK,SAAU,EAAA,GAAIA,OAAO,CAAA,KAAA,CAAA;AAClC,UAAM,MAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,SAAA,CAAA;AAC1B,UAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,GAAG,MAAA,CAAO,GAAI,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,KAAM,CAAA,GAAG,CAAC,CAAA,CAAA;AAC/D,UAAM,MAAA,EAAA,GAAK,IAAK,CAAA,GAAA,CAAI,GAAG,MAAA,CAAO,GAAI,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,GAAI,CAAA,GAAG,CAAC,CAAA,CAAA;AAE3D,UAAA,IAAI,KAAO,EAAA;AACT,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAEA,UACE,OAAAC,uBAAA,CAAgB,SAAS,CAAK,IAAA,GAAA,CAAI,YAAY,IAAM,EAAA,EAAE,EAAE,MAAS,GAAA,CAAA,CAAA;AAAA,SAErE;AAAA,OACD,CAAK,IAAA,KAAA,CAAA;AAER,MAAA,MAAM,MACJ,GAAA,SAAA,IAAa,CAAC,aAAA,IAAiB,qBAAqB,CAAC,gBAAA,CAAA;AACvD,MAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIH,eAAS,MAAM,CAAA,CAAA;AACzD,MAAA,MAAM,0BAA0BF,YAAe,EAAA,CAAA;AAG/C,MAAAM,eAAA,CAAU,MAAM;AACd,QAAA,IAAI,CAAC,MAAQ,EAAA;AACX,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AAEvB,QAAA,MAAM,wBAAwB,MAAM;AAClC,UAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AAAA,SACzB,CAAA;AAEA,QAAO,MAAA,CAAA,EAAA,CAAG,mBAAmB,qBAAqB,CAAA,CAAA;AAElD,QAAA,OAAO,MAAM;AACX,UAAO,MAAA,CAAA,GAAA,CAAI,mBAAmB,qBAAqB,CAAA,CAAA;AAAA,SACrD,CAAA;AAAA,OACC,EAAA,CAAC,SAAW,EAAA,iBAAA,EAAmB,MAAM,CAAC,CAAA,CAAA;AAGzC,MAAAA,eAAA,CAAU,MAAM;AACd,QAAA,IAAI,CAAC,MAAQ,EAAA;AACX,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAMC,eAAc,MAAM;AACxB,UAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,SACjB,CAAA;AAEA,QAAMC,MAAAA,WAAAA,GAAa,CAAC,KAAsB,KAAA;AACxC,UAAA,IACE,MAAM,aACN,IAAA,UAAA,CAAW,SAAS,QAAS,CAAA,KAAA,CAAM,aAAqB,CACxD,EAAA;AACA,YAAA,OAAA;AAAA,WACF;AAEA,UAAA,IAAI,KAAM,CAAA,aAAA,KAAkB,MAAO,CAAA,IAAA,CAAK,GAAK,EAAA;AAC3C,YAAA,OAAA;AAAA,WACF;AAEA,UAAA,KAAA,MAAW,cAAc,WAAa,EAAA;AACpC,YAAA,IACE,SACG,cAAe,CAAA,UAAU,GACxB,QAAS,CAAA,KAAA,CAAM,aAAqB,CACxC,EAAA;AACA,cAAA,OAAA;AAAA,aACF;AAAA,WACF;AAEA,UAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,SAClB,CAAA;AAEA,QAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,OAAA,EAASD,YAAW,CAAA,CAAA;AACrD,QAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,MAAA,EAAQC,WAAU,CAAA,CAAA;AAEnD,QAAA,OAAO,MAAM;AACX,UAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,mBAAoB,CAAA,OAAA,EAASD,YAAW,CAAA,CAAA;AACxD,UAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,mBAAoB,CAAA,MAAA,EAAQC,WAAU,CAAA,CAAA;AAAA,SACxD,CAAA;AAAA,OACC,EAAA,CAAC,MAAQ,EAAA,WAAW,CAAC,CAAA,CAAA;AAExB,MAAA,MAAM,WAAc,GAAAC,iBAAA;AAAA,QAClB,CAAC,KAA2C,KAAA;AAC1C,UAAA,OAAA,GAAU,KAAK,CAAA,CAAA;AAEf,UAAI,IAAA,CAAC,KAAM,CAAA,kBAAA,EAAsB,EAAA;AAC/B,YAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,WACjB;AAAA,SACF;AAAA,QACA,CAAC,OAAO,CAAA;AAAA,OACV,CAAA;AAGA,MAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,QACjB,CAAC,KAA2C,KAAA;AAC1C,UAAA,MAAA,GAAS,KAAK,CAAA,CAAA;AAEd,UAAI,IAAA,CAAC,KAAM,CAAA,kBAAA,EAAsB,EAAA;AAC/B,YAAA,IACE,MAAM,aACN,IAAA,UAAA,CAAW,SAAS,QAAS,CAAA,KAAA,CAAM,aAAqB,CACxD,EAAA;AACA,cAAA,OAAA;AAAA,aACF;AAEA,YAAA,IAAI,KAAM,CAAA,aAAA,KAAkB,MAAQ,EAAA,IAAA,CAAK,GAAK,EAAA;AAC5C,cAAA,OAAA;AAAA,aACF;AAEA,YAAA,KAAA,MAAW,cAAc,WAAa,EAAA;AACpC,cAAA,IACE,SACG,cAAe,CAAA,UAAU,GACxB,QAAS,CAAA,KAAA,CAAM,aAAqB,CACxC,EAAA;AACA,gBAAA,OAAA;AAAA,eACF;AAAA,aACF;AAEA,YAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,WAClB;AAAA,SACF;AAAA,QACA,CAAC,MAAQ,EAAA,MAAA,EAAQ,WAAW,CAAA;AAAA,OAC9B,CAAA;AAGA,MAAAH,eAAA,CAAU,MAAM;AACd,QAAA,IAAI,MAAQ,EAAA;AACV,UAAwB,uBAAA,CAAA,OAAA,GAAU,MAAO,CAAA,UAAA,CAAW,MAAM;AACxD,YAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,aACpB,2BAA2B,CAAA,CAAA;AAAA,SACzB,MAAA;AACL,UAAA,gBAAA,CAAiB,KAAK,CAAA,CAAA;AAAA,SACxB;AAEA,QAAA,OAAO,MAAM;AACX,UAAO,MAAA,CAAA,YAAA,CAAa,wBAAwB,OAAO,CAAA,CAAA;AAAA,SACrD,CAAA;AAAA,OACF,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAEX,MAAM,MAAA,eAAA,GAAsCI,cAAQ,MAAM;AACxD,QAAA,MAAM,qBAA+C,GAAA;AAAA,UACnD,OAAS,EAAA,kCAAA;AAAA,SACX,CAAA;AAEA,QAAO,OAAA;AAAA,UACL,QAAU,EAAA,OAAA;AAAA,UACV,SAAW,EAAA,QAAA;AAAA,UACX,UAAY,EAAA;AAAA,YACVC,gBAAO,qBAAqB,CAAA;AAAA,YAC5BC,cAAK,EAAE,GAAG,qBAAuB,EAAA,SAAA,EAAW,OAAO,CAAA;AAAA,YACnDC,cAAK,qBAAqB,CAAA;AAAA,YAC1BC,cAAM,CAAA;AAAA,cACJ,GAAG,qBAAA;AAAA,cACH,SAASC,mBAAW,EAAA;AAAA,aACrB,CAAA;AAAA,YACDC,gBAAO,UAAU,CAAA;AAAA,YACjBC,cAAK,qBAAqB,CAAA;AAAA,WAC5B;AAAA,UACA,oBAAA,EAAsB,IAAI,IAAS,KAAA;AACjC,YAAO,OAAAC,mBAAA,CAAW,GAAG,IAAM,EAAA;AAAA,cACzB,cAAgB,EAAA,IAAA;AAAA,aACjB,CAAA,CAAA;AAAA,WACH;AAAA,SACF,CAAA;AAAA,OACC,EAAA,CAAC,QAAU,EAAA,UAAU,CAAC,CAAA,CAAA;AACzB,MAAM,MAAA;AAAA,QACJ,IAAA,EAAM,EAAE,YAAA,EAAc,WAAY,EAAA;AAAA,QAClC,QAAA;AAAA,QACA,CAAA;AAAA,QACA,CAAA;AAAA,QACA,YAAA;AAAA,UACEC,oBAAY,CAAA;AAAA,QACd,GAAG,eAAA;AAAA,QACH,IAAM,EAAA,aAAA;AAAA,OACP,CAAA,CAAA;AACD,MAAA,MAAM,UAAa,GAAAC,gBAAA,CAAQ,YAAc,EAAA,UAAA,EAAY,WAAW,CAAA,CAAA;AAEhE,MAAA,MAAM,iBAAoB,GAAAX,iBAAA;AAAA,QACxB,CAAC,KAA6C,KAAA;AAC5C,UAAA,aAAA,GAAgB,KAAK,CAAA,CAAA;AAErB,UAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAGtB,UAAI,IAAA,KAAA,CAAM,MAAW,KAAA,UAAA,CAAW,OAAS,EAAA;AACvC,YAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AAAA,WACvB;AAAA,SACF;AAAA,QACA,CAAC,aAAa,CAAA;AAAA,OAChB,CAAA;AAEA,MAAAH,eAAA,CAAU,MAAM;AACd,QAAA,IAAI,CAAC,MAAQ,EAAA;AACX,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAMe,qBAAoB,MAAM;AAC9B,UAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AAAA,SACrB,CAAA;AACA,QAAA,MAAM,kBAAkB,MAAM;AAC5B,UAAA,cAAA,CAAe,KAAK,CAAA,CAAA;AAAA,SACtB,CAAA;AAEA,QAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,aAAA,EAAeA,kBAAiB,CAAA,CAAA;AACjE,QAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,eAAA,EAAiB,eAAe,CAAA,CAAA;AACjE,QAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,WAAA,EAAa,eAAe,CAAA,CAAA;AAE7D,QAAA,OAAO,MAAM;AACX,UAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,mBAAoB,CAAA,aAAA,EAAeA,kBAAiB,CAAA,CAAA;AACpE,UAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,mBAAoB,CAAA,eAAA,EAAiB,eAAe,CAAA,CAAA;AACpE,UAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,mBAAoB,CAAA,WAAA,EAAa,eAAe,CAAA,CAAA;AAAA,SAClE,CAAA;AAAA,OACF,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAEX,MAAAC,0BAAA,CAAgB,MAAM;AACpB,QAAI,IAAA,CAAC,MAAU,IAAA,CAAC,aAAe,EAAA;AAC7B,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAM,2BAA2B,MAAM;AACrC,UAAM,MAAA,YAAA,GAAe,OAAO,YAAa,EAAA,CAAA;AAEzC,UACE,IAAA,MAAA,CAAO,MAAM,SAAU,CAAA,KAAA,IACvB,CAAC,YACD,IAAA,CAAC,aAAa,UACd,EAAA;AACA,YAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AAAA,WACZ,MAAA;AACL,YAAM,MAAA,QAAA,GAAW,YAAa,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAE1C,YAAA,YAAA,CAAa,QAAQ,CAAA,CAAA;AAAA,WACvB;AAAA,SACF,CAAA;AAEA,QAAO,MAAA,CAAA,EAAA,CAAG,eAAe,wBAAwB,CAAA,CAAA;AACjD,QAAyB,wBAAA,EAAA,CAAA;AAEzB,QAAA,OAAO,MAAM;AACX,UAAO,MAAA,CAAA,GAAA,CAAI,eAAe,wBAAwB,CAAA,CAAA;AAAA,SACpD,CAAA;AAAA,OACC,EAAA,CAAC,MAAQ,EAAA,aAAA,EAAe,YAAY,CAAC,CAAA,CAAA;AAExC,MAAAhB,eAAA,CAAU,MAAM;AACd,QAAI,IAAA,CAAC,MAAU,IAAA,CAAC,aAAe,EAAA;AAC7B,UAAA,OAAA;AAAA,SACF;AAEA,QAAM,MAAA,aAAA,GAAgB,CAAC,KAAyB,KAAA;AAC9C,UAAA,IAAI,MAAM,MAAW,KAAA,MAAA,CAAO,IAAK,CAAA,GAAA,IAAO,MAAM,gBAAkB,EAAA;AAC9D,YAAA,OAAA;AAAA,WACF;AAEA,UAAI,IAAA,KAAA,CAAM,QAAQ,QAAU,EAAA;AAC1B,YAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,YAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAEtB,YAAA,MAAA,CAAO,SAAS,KAAM,EAAA,CAAA;AACtB,YAAA,iBAAA,CAAkB,IAAI,CAAA,CAAA;AAAA,WACxB;AAAA,SACF,CAAA;AAEA,QAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAEzD,QAAA,OAAO,MAAM;AACX,UAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,mBAAoB,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAAA,SAC9D,CAAA;AAAA,OACC,EAAA,CAAC,MAAQ,EAAA,aAAa,CAAC,CAAA,CAAA;AAE1B,MAAM,MAAA,KAAA,GAAQG,kBAAY,MAAM;AAC9B,QAAA,iBAAA,CAAkB,IAAI,CAAA,CAAA;AAAA,OACxB,EAAG,CAAC,iBAAiB,CAAC,CAAA,CAAA;AAEtB,MAAA,MAAM,gBAAmB,GAAAA,iBAAA;AAAA,QACvB,CAAC,EAAe,KAAA;AACd,UAAA,WAAA,CAAY,IAAI,EAAE,CAAA,CAAA;AAElB,UAAA,OAAO,MAAM;AACX,YAAA,WAAA,CAAY,OAAO,EAAE,CAAA,CAAA;AAAA,WACvB,CAAA;AAAA,SACF;AAAA,QACA,CAAC,WAAW,CAAA;AAAA,OACd,CAAA;AAEA,MAAI,IAAA,CAAC,MAAU,IAAA,CAAC,aAAe,EAAA;AAC7B,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAM,MAAA,SAAA,GAA8B,EAAE,MAAO,EAAA,CAAA;AAE7C,MAAO,OAAAc,uBAAA;AAAA,wBACJ1B,cAAA,CAAA2B,wBAAA,EAAA;AAAA,UACC,QAAC,kBAAA3B,cAAA,CAAA4B,sBAAA,EAAA;AAAA,YAAe,MAAA;AAAA,YACd,QAAA,kBAAA5B,cAAA,CAAC6B,8BAAuB,QAAvB,EAAA;AAAA,cACC,KAAA,EAAO,EAAE,KAAA,EAAO,gBAAiB,EAAA;AAAA,cAEjC,QAAC,kBAAA/B,eAAA,CAAA,KAAA,EAAA;AAAA,gBACC,IAAK,EAAA,SAAA;AAAA,gBACL,YAAW,EAAA,kBAAA;AAAA,gBACX,kBAAiB,EAAA,YAAA;AAAA,gBACjB,SAAW,EAAAgC,qBAAA;AAAA,kBACT,6EAAA;AAAA,kBACA,SAAA;AAAA,iBACF;AAAA,gBACA,GAAK,EAAA,UAAA;AAAA,gBACL,KAAO,EAAA;AAAA,kBACL,QAAU,EAAA,QAAA;AAAA,kBACV,GAAK,EAAA,CAAA;AAAA,kBACL,IAAM,EAAA,CAAA;AAAA,kBACN,SAAA,EAAW,YACP,GAAA,CAAA,YAAA,EAAe,IAAK,CAAA,KAAA,CAAM,CAAC,CAAQ,CAAA,IAAA,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAC/C,CAAA,MAAA,CAAA,GAAA,0BAAA;AAAA,kBACJ,QAAU,EAAA,aAAA;AAAA,iBACZ;AAAA,gBACA,aAAe,EAAA,iBAAA;AAAA,gBACf,OAAS,EAAA,WAAA;AAAA,gBACT,MAAQ,EAAA,UAAA;AAAA,gBACP,GAAG,KAAA;AAAA,gBAEH,QAAA,EAAA;AAAA,kBAAAC,wBAAA,CAAiB,QAAQ,SAAS,CAAA;AAAA,kBAClCA,wBAAA,CAAiB,UAAU,SAAS,CAAA;AAAA,kBACpCA,wBAAA,CAAiB,OAAO,SAAS,CAAA;AAAA,iBAAA;AAAA,eACpC,CAAA;AAAA,aACF,CAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,QACA,QAAS,CAAA,IAAA;AAAA,OACX,CAAA;AAAA,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAU,EAAAC,8BAAA;AAAA,GACZ;AACF;;;;;"}
|
|
@@ -47,11 +47,6 @@ const FloatingToolbar = Object.assign(
|
|
|
47
47
|
const [isPointerDown, setPointerDown] = useState(false);
|
|
48
48
|
const [isFocused, setFocused] = useState(false);
|
|
49
49
|
const [isManuallyClosed, setManuallyClosed] = useState(false);
|
|
50
|
-
const isEditable = useEditorState({
|
|
51
|
-
editor,
|
|
52
|
-
equalityFn: Object.is,
|
|
53
|
-
selector: (ctx) => ctx.editor?.isEditable ?? false
|
|
54
|
-
}) ?? false;
|
|
55
50
|
const hasSelectionRange = useEditorState({
|
|
56
51
|
editor,
|
|
57
52
|
equalityFn: Object.is,
|
|
@@ -202,7 +197,7 @@ const FloatingToolbar = Object.assign(
|
|
|
202
197
|
[onPointerDown]
|
|
203
198
|
);
|
|
204
199
|
useEffect(() => {
|
|
205
|
-
if (!editor
|
|
200
|
+
if (!editor) {
|
|
206
201
|
return;
|
|
207
202
|
}
|
|
208
203
|
const handlePointerDown2 = () => {
|
|
@@ -211,15 +206,15 @@ const FloatingToolbar = Object.assign(
|
|
|
211
206
|
const handlePointerUp = () => {
|
|
212
207
|
setPointerDown(false);
|
|
213
208
|
};
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
209
|
+
editor.view.dom.addEventListener("pointerdown", handlePointerDown2);
|
|
210
|
+
editor.view.dom.addEventListener("pointercancel", handlePointerUp);
|
|
211
|
+
editor.view.dom.addEventListener("pointerup", handlePointerUp);
|
|
217
212
|
return () => {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
213
|
+
editor.view.dom.removeEventListener("pointerdown", handlePointerDown2);
|
|
214
|
+
editor.view.dom.removeEventListener("pointercancel", handlePointerUp);
|
|
215
|
+
editor.view.dom.removeEventListener("pointerup", handlePointerUp);
|
|
221
216
|
};
|
|
222
|
-
}, [editor
|
|
217
|
+
}, [editor]);
|
|
223
218
|
useLayoutEffect(() => {
|
|
224
219
|
if (!editor || !delayedIsOpen) {
|
|
225
220
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingToolbar.mjs","sources":["../../src/toolbar/FloatingToolbar.tsx"],"sourcesContent":["import {\n autoUpdate,\n type DetectOverflowOptions,\n flip,\n hide,\n inline,\n limitShift,\n offset,\n shift,\n size,\n useFloating,\n type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n TooltipProvider,\n useInitial,\n useRefs,\n} from \"@liveblocks/react-ui/_private\";\nimport { type Editor, isTextSelection, useEditorState } from \"@tiptap/react\";\nimport type {\n ComponentProps,\n FocusEvent as ReactFocusEvent,\n PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider } from \"../context\";\nimport type { FloatingPosition } from \"../types\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\nimport {\n applyToolbarSlot,\n Toolbar,\n type ToolbarSlot,\n type ToolbarSlotProps,\n} from \"./Toolbar\";\n\nexport interface FloatingToolbarProps\n extends Omit<ComponentProps<\"div\">, \"children\"> {\n editor: Editor | null;\n position?: FloatingPosition;\n offset?: number;\n children?: ToolbarSlot;\n before?: ToolbarSlot;\n after?: ToolbarSlot;\n}\n\nexport const FLOATING_TOOLBAR_COLLISION_PADDING = 10;\nconst FLOATING_TOOLBAR_OPEN_DELAY = 50;\n\nfunction DefaultFloatingToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <Toolbar.BlockSelector />\n <Toolbar.SectionInline />\n {supportsThread ? (\n <>\n <Toolbar.Separator />\n <Toolbar.SectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nexport const FloatingToolbar = Object.assign(\n forwardRef<HTMLDivElement, FloatingToolbarProps>(\n (\n {\n children = DefaultFloatingToolbarContent,\n before,\n after,\n position = \"top\",\n offset: sideOffset = 6,\n editor,\n onPointerDown,\n onFocus,\n onBlur,\n className,\n ...props\n },\n forwardedRef\n ) => {\n const toolbarRef = useRef<HTMLDivElement>(null);\n const externalIds = useInitial<Set<string>>(() => new Set());\n const [isPointerDown, setPointerDown] = useState(false);\n const [isFocused, setFocused] = useState(false);\n const [isManuallyClosed, setManuallyClosed] = useState(false);\n const isEditable =\n useEditorState({\n editor,\n equalityFn: Object.is,\n selector: (ctx) => ctx.editor?.isEditable ?? false,\n }) ?? false;\n const hasSelectionRange =\n useEditorState({\n editor,\n equalityFn: Object.is,\n selector: (ctx) => {\n const editor = ctx.editor;\n\n if (!editor) {\n return false;\n }\n\n const { doc, selection } = editor.state;\n const { empty, ranges } = selection;\n const from = Math.min(...ranges.map((range) => range.$from.pos));\n const to = Math.max(...ranges.map((range) => range.$to.pos));\n\n if (empty) {\n return false;\n }\n\n return (\n isTextSelection(selection) && doc.textBetween(from, to).length > 0\n );\n },\n }) ?? false;\n\n const isOpen =\n isFocused && !isPointerDown && hasSelectionRange && !isManuallyClosed;\n const [delayedIsOpen, setDelayedIsOpen] = useState(isOpen);\n const delayedIsOpenTimeoutRef = useRef<number>();\n\n // Reset the manually closed state when there's another change\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n setManuallyClosed(false);\n\n const handleSelectionChange = () => {\n setManuallyClosed(false);\n };\n\n editor.on(\"selectionUpdate\", handleSelectionChange);\n\n return () => {\n editor.off(\"selectionUpdate\", handleSelectionChange);\n };\n }, [isFocused, hasSelectionRange, editor]);\n\n // Don't close when the focus moves from the editor to the toolbar\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handleFocus = () => {\n setFocused(true);\n };\n\n const handleBlur = (event: FocusEvent) => {\n if (\n event.relatedTarget &&\n toolbarRef.current?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n\n if (event.relatedTarget === editor.view.dom) {\n return;\n }\n\n for (const externalId of externalIds) {\n if (\n document\n .getElementById(externalId)\n ?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n }\n\n setFocused(false);\n };\n\n editor.view.dom.addEventListener(\"focus\", handleFocus);\n editor.view.dom.addEventListener(\"blur\", handleBlur);\n\n return () => {\n editor.view.dom.removeEventListener(\"focus\", handleFocus);\n editor.view.dom.removeEventListener(\"blur\", handleBlur);\n };\n }, [editor, externalIds]);\n\n const handleFocus = useCallback(\n (event: ReactFocusEvent<HTMLDivElement>) => {\n onFocus?.(event);\n\n if (!event.isDefaultPrevented()) {\n setFocused(true);\n }\n },\n [onFocus]\n );\n\n // Close the toolbar when the it loses focus to something else than the editor\n const handleBlur = useCallback(\n (event: ReactFocusEvent<HTMLDivElement>) => {\n onBlur?.(event);\n\n if (!event.isDefaultPrevented()) {\n if (\n event.relatedTarget &&\n toolbarRef.current?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n\n if (event.relatedTarget === editor?.view.dom) {\n return;\n }\n\n for (const externalId of externalIds) {\n if (\n document\n .getElementById(externalId)\n ?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n }\n\n setFocused(false);\n }\n },\n [onBlur, editor, externalIds]\n );\n\n // Delay the opening of the toolbar to avoid flickering issues\n useEffect(() => {\n if (isOpen) {\n delayedIsOpenTimeoutRef.current = window.setTimeout(() => {\n setDelayedIsOpen(true);\n }, FLOATING_TOOLBAR_OPEN_DELAY);\n } else {\n setDelayedIsOpen(false);\n }\n\n return () => {\n window.clearTimeout(delayedIsOpenTimeoutRef.current);\n };\n }, [isOpen]);\n\n const floatingOptions: UseFloatingOptions = useMemo(() => {\n const detectOverflowOptions: DetectOverflowOptions = {\n padding: FLOATING_TOOLBAR_COLLISION_PADDING,\n };\n\n return {\n strategy: \"fixed\",\n placement: position,\n middleware: [\n inline(detectOverflowOptions),\n flip({ ...detectOverflowOptions, crossAxis: false }),\n hide(detectOverflowOptions),\n shift({\n ...detectOverflowOptions,\n limiter: limitShift(),\n }),\n offset(sideOffset),\n size(detectOverflowOptions),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n };\n }, [position, sideOffset]);\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n isPositioned,\n } = useFloating({\n ...floatingOptions,\n open: delayedIsOpen,\n });\n const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n onPointerDown?.(event);\n\n event.stopPropagation();\n\n // Prevent the toolbar from closing when clicking on the toolbar itself\n if (event.target === toolbarRef.current) {\n event.preventDefault();\n }\n },\n [onPointerDown]\n );\n\n useEffect(() => {\n if (!editor || !isEditable) {\n return;\n }\n\n const handlePointerDown = () => {\n setPointerDown(true);\n };\n const handlePointerUp = () => {\n setPointerDown(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n document.addEventListener(\"pointercancel\", handlePointerUp);\n document.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n document.removeEventListener(\"pointercancel\", handlePointerUp);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, [editor, isEditable]);\n\n useLayoutEffect(() => {\n if (!editor || !delayedIsOpen) {\n return;\n }\n\n const updateSelectionReference = () => {\n const domSelection = window.getSelection();\n\n if (\n editor.state.selection.empty ||\n !domSelection ||\n !domSelection.rangeCount\n ) {\n setReference(null);\n } else {\n const domRange = domSelection.getRangeAt(0);\n\n setReference(domRange);\n }\n };\n\n editor.on(\"transaction\", updateSelectionReference);\n updateSelectionReference();\n\n return () => {\n editor.off(\"transaction\", updateSelectionReference);\n };\n }, [editor, delayedIsOpen, setReference]);\n\n useEffect(() => {\n if (!editor || !delayedIsOpen) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.target !== editor.view.dom && event.defaultPrevented) {\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n\n editor.commands.focus();\n setManuallyClosed(true);\n }\n };\n\n editor.view.dom.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n editor.view.dom.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [editor, delayedIsOpen]);\n\n const close = useCallback(() => {\n setManuallyClosed(true);\n }, [setManuallyClosed]);\n\n const registerExternal = useCallback(\n (id: string) => {\n externalIds.add(id);\n\n return () => {\n externalIds.delete(id);\n };\n },\n [externalIds]\n );\n\n if (!editor || !delayedIsOpen) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return createPortal(\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <FloatingToolbarContext.Provider\n value={{ close, registerExternal }}\n >\n <div\n role=\"toolbar\"\n aria-label=\"Floating toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\n \"lb-root lb-portal lb-elevation lb-tiptap-floating-toolbar lb-tiptap-toolbar\",\n className\n )}\n ref={mergedRefs}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n minWidth: \"max-content\",\n }}\n onPointerDown={handlePointerDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </FloatingToolbarContext.Provider>\n </EditorProvider>\n </TooltipProvider>,\n document.body\n );\n }\n ),\n {\n External: FloatingToolbarExternal,\n }\n);\n"],"names":["editor","handleFocus","handleBlur","handlePointerDown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FloatingToolbar.mjs","sources":["../../src/toolbar/FloatingToolbar.tsx"],"sourcesContent":["import {\n autoUpdate,\n type DetectOverflowOptions,\n flip,\n hide,\n inline,\n limitShift,\n offset,\n shift,\n size,\n useFloating,\n type UseFloatingOptions,\n} from \"@floating-ui/react-dom\";\nimport { useLayoutEffect } from \"@liveblocks/react/_private\";\nimport {\n TooltipProvider,\n useInitial,\n useRefs,\n} from \"@liveblocks/react-ui/_private\";\nimport { type Editor, isTextSelection, useEditorState } from \"@tiptap/react\";\nimport type {\n ComponentProps,\n FocusEvent as ReactFocusEvent,\n PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider } from \"../context\";\nimport type { FloatingPosition } from \"../types\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\nimport {\n applyToolbarSlot,\n Toolbar,\n type ToolbarSlot,\n type ToolbarSlotProps,\n} from \"./Toolbar\";\n\nexport interface FloatingToolbarProps\n extends Omit<ComponentProps<\"div\">, \"children\"> {\n editor: Editor | null;\n position?: FloatingPosition;\n offset?: number;\n children?: ToolbarSlot;\n before?: ToolbarSlot;\n after?: ToolbarSlot;\n}\n\nexport const FLOATING_TOOLBAR_COLLISION_PADDING = 10;\nconst FLOATING_TOOLBAR_OPEN_DELAY = 50;\n\nfunction DefaultFloatingToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <Toolbar.BlockSelector />\n <Toolbar.SectionInline />\n {supportsThread ? (\n <>\n <Toolbar.Separator />\n <Toolbar.SectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nexport const FloatingToolbar = Object.assign(\n forwardRef<HTMLDivElement, FloatingToolbarProps>(\n (\n {\n children = DefaultFloatingToolbarContent,\n before,\n after,\n position = \"top\",\n offset: sideOffset = 6,\n editor,\n onPointerDown,\n onFocus,\n onBlur,\n className,\n ...props\n },\n forwardedRef\n ) => {\n const toolbarRef = useRef<HTMLDivElement>(null);\n const externalIds = useInitial<Set<string>>(() => new Set());\n const [isPointerDown, setPointerDown] = useState(false);\n const [isFocused, setFocused] = useState(false);\n const [isManuallyClosed, setManuallyClosed] = useState(false);\n const hasSelectionRange =\n useEditorState({\n editor,\n equalityFn: Object.is,\n selector: (ctx) => {\n const editor = ctx.editor;\n\n if (!editor) {\n return false;\n }\n\n const { doc, selection } = editor.state;\n const { empty, ranges } = selection;\n const from = Math.min(...ranges.map((range) => range.$from.pos));\n const to = Math.max(...ranges.map((range) => range.$to.pos));\n\n if (empty) {\n return false;\n }\n\n return (\n isTextSelection(selection) && doc.textBetween(from, to).length > 0\n );\n },\n }) ?? false;\n\n const isOpen =\n isFocused && !isPointerDown && hasSelectionRange && !isManuallyClosed;\n const [delayedIsOpen, setDelayedIsOpen] = useState(isOpen);\n const delayedIsOpenTimeoutRef = useRef<number>();\n\n // Reset the manually closed state when there's another change\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n setManuallyClosed(false);\n\n const handleSelectionChange = () => {\n setManuallyClosed(false);\n };\n\n editor.on(\"selectionUpdate\", handleSelectionChange);\n\n return () => {\n editor.off(\"selectionUpdate\", handleSelectionChange);\n };\n }, [isFocused, hasSelectionRange, editor]);\n\n // Don't close when the focus moves from the editor to the toolbar\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handleFocus = () => {\n setFocused(true);\n };\n\n const handleBlur = (event: FocusEvent) => {\n if (\n event.relatedTarget &&\n toolbarRef.current?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n\n if (event.relatedTarget === editor.view.dom) {\n return;\n }\n\n for (const externalId of externalIds) {\n if (\n document\n .getElementById(externalId)\n ?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n }\n\n setFocused(false);\n };\n\n editor.view.dom.addEventListener(\"focus\", handleFocus);\n editor.view.dom.addEventListener(\"blur\", handleBlur);\n\n return () => {\n editor.view.dom.removeEventListener(\"focus\", handleFocus);\n editor.view.dom.removeEventListener(\"blur\", handleBlur);\n };\n }, [editor, externalIds]);\n\n const handleFocus = useCallback(\n (event: ReactFocusEvent<HTMLDivElement>) => {\n onFocus?.(event);\n\n if (!event.isDefaultPrevented()) {\n setFocused(true);\n }\n },\n [onFocus]\n );\n\n // Close the toolbar when the it loses focus to something else than the editor\n const handleBlur = useCallback(\n (event: ReactFocusEvent<HTMLDivElement>) => {\n onBlur?.(event);\n\n if (!event.isDefaultPrevented()) {\n if (\n event.relatedTarget &&\n toolbarRef.current?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n\n if (event.relatedTarget === editor?.view.dom) {\n return;\n }\n\n for (const externalId of externalIds) {\n if (\n document\n .getElementById(externalId)\n ?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n }\n\n setFocused(false);\n }\n },\n [onBlur, editor, externalIds]\n );\n\n // Delay the opening of the toolbar to avoid flickering issues\n useEffect(() => {\n if (isOpen) {\n delayedIsOpenTimeoutRef.current = window.setTimeout(() => {\n setDelayedIsOpen(true);\n }, FLOATING_TOOLBAR_OPEN_DELAY);\n } else {\n setDelayedIsOpen(false);\n }\n\n return () => {\n window.clearTimeout(delayedIsOpenTimeoutRef.current);\n };\n }, [isOpen]);\n\n const floatingOptions: UseFloatingOptions = useMemo(() => {\n const detectOverflowOptions: DetectOverflowOptions = {\n padding: FLOATING_TOOLBAR_COLLISION_PADDING,\n };\n\n return {\n strategy: \"fixed\",\n placement: position,\n middleware: [\n inline(detectOverflowOptions),\n flip({ ...detectOverflowOptions, crossAxis: false }),\n hide(detectOverflowOptions),\n shift({\n ...detectOverflowOptions,\n limiter: limitShift(),\n }),\n offset(sideOffset),\n size(detectOverflowOptions),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n };\n }, [position, sideOffset]);\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n isPositioned,\n } = useFloating({\n ...floatingOptions,\n open: delayedIsOpen,\n });\n const mergedRefs = useRefs(forwardedRef, toolbarRef, setFloating);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n onPointerDown?.(event);\n\n event.stopPropagation();\n\n // Prevent the toolbar from closing when clicking on the toolbar itself\n if (event.target === toolbarRef.current) {\n event.preventDefault();\n }\n },\n [onPointerDown]\n );\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const handlePointerDown = () => {\n setPointerDown(true);\n };\n const handlePointerUp = () => {\n setPointerDown(false);\n };\n\n editor.view.dom.addEventListener(\"pointerdown\", handlePointerDown);\n editor.view.dom.addEventListener(\"pointercancel\", handlePointerUp);\n editor.view.dom.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n editor.view.dom.removeEventListener(\"pointerdown\", handlePointerDown);\n editor.view.dom.removeEventListener(\"pointercancel\", handlePointerUp);\n editor.view.dom.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, [editor]);\n\n useLayoutEffect(() => {\n if (!editor || !delayedIsOpen) {\n return;\n }\n\n const updateSelectionReference = () => {\n const domSelection = window.getSelection();\n\n if (\n editor.state.selection.empty ||\n !domSelection ||\n !domSelection.rangeCount\n ) {\n setReference(null);\n } else {\n const domRange = domSelection.getRangeAt(0);\n\n setReference(domRange);\n }\n };\n\n editor.on(\"transaction\", updateSelectionReference);\n updateSelectionReference();\n\n return () => {\n editor.off(\"transaction\", updateSelectionReference);\n };\n }, [editor, delayedIsOpen, setReference]);\n\n useEffect(() => {\n if (!editor || !delayedIsOpen) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.target !== editor.view.dom && event.defaultPrevented) {\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n\n editor.commands.focus();\n setManuallyClosed(true);\n }\n };\n\n editor.view.dom.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n editor.view.dom.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [editor, delayedIsOpen]);\n\n const close = useCallback(() => {\n setManuallyClosed(true);\n }, [setManuallyClosed]);\n\n const registerExternal = useCallback(\n (id: string) => {\n externalIds.add(id);\n\n return () => {\n externalIds.delete(id);\n };\n },\n [externalIds]\n );\n\n if (!editor || !delayedIsOpen) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return createPortal(\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <FloatingToolbarContext.Provider\n value={{ close, registerExternal }}\n >\n <div\n role=\"toolbar\"\n aria-label=\"Floating toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\n \"lb-root lb-portal lb-elevation lb-tiptap-floating-toolbar lb-tiptap-toolbar\",\n className\n )}\n ref={mergedRefs}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n minWidth: \"max-content\",\n }}\n onPointerDown={handlePointerDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </FloatingToolbarContext.Provider>\n </EditorProvider>\n </TooltipProvider>,\n document.body\n );\n }\n ),\n {\n External: FloatingToolbarExternal,\n }\n);\n"],"names":["editor","handleFocus","handleBlur","handlePointerDown"],"mappings":"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"}
|
package/dist/toolbar/Toolbar.js
CHANGED
|
@@ -41,7 +41,20 @@ function applyToolbarSlot(slot, props) {
|
|
|
41
41
|
return slot;
|
|
42
42
|
}
|
|
43
43
|
const ToolbarButton = react.forwardRef(
|
|
44
|
-
({ icon, children, name, shortcut, ...props }, forwardedRef) => {
|
|
44
|
+
({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {
|
|
45
|
+
const floatingToolbarContext = react.useContext(shared.FloatingToolbarContext);
|
|
46
|
+
const closeFloatingToolbar = floatingToolbarContext?.close;
|
|
47
|
+
const handleKeyDown = react.useCallback(
|
|
48
|
+
(event) => {
|
|
49
|
+
onKeyDown?.(event);
|
|
50
|
+
if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
|
|
51
|
+
closeFloatingToolbar();
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
event.stopPropagation();
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
[onKeyDown, closeFloatingToolbar]
|
|
57
|
+
);
|
|
45
58
|
return /* @__PURE__ */ jsxRuntime.jsx(_private.ShortcutTooltip, {
|
|
46
59
|
content: name,
|
|
47
60
|
shortcut,
|
|
@@ -51,6 +64,7 @@ const ToolbarButton = react.forwardRef(
|
|
|
51
64
|
ref: forwardedRef,
|
|
52
65
|
icon,
|
|
53
66
|
...props,
|
|
67
|
+
onKeyDown: handleKeyDown,
|
|
54
68
|
children
|
|
55
69
|
})
|
|
56
70
|
});
|
|
@@ -70,55 +84,76 @@ const ToolbarToggle = react.forwardRef(
|
|
|
70
84
|
);
|
|
71
85
|
function createDefaultBlockSelectorItems(editor) {
|
|
72
86
|
const items = [
|
|
87
|
+
{
|
|
88
|
+
name: "Text",
|
|
89
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(_private.TextIcon, {}),
|
|
90
|
+
isActive: "default",
|
|
91
|
+
setActive: (editor2) => editor2.chain().focus().clearNodes().run()
|
|
92
|
+
},
|
|
73
93
|
"toggleHeading" in editor.commands ? {
|
|
74
94
|
name: "Heading 1",
|
|
95
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(_private.H1Icon, {}),
|
|
75
96
|
isActive: (editor2) => editor2.isActive("heading", { level: 1 }),
|
|
76
97
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 1 }).run()
|
|
77
98
|
} : null,
|
|
78
99
|
"toggleHeading" in editor.commands ? {
|
|
79
100
|
name: "Heading 2",
|
|
101
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(_private.H2Icon, {}),
|
|
80
102
|
isActive: (editor2) => editor2.isActive("heading", { level: 2 }),
|
|
81
103
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 2 }).run()
|
|
82
104
|
} : null,
|
|
83
105
|
"toggleHeading" in editor.commands ? {
|
|
84
106
|
name: "Heading 3",
|
|
107
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(_private.H3Icon, {}),
|
|
85
108
|
isActive: (editor2) => editor2.isActive("heading", { level: 3 }),
|
|
86
109
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 3 }).run()
|
|
87
110
|
} : null,
|
|
88
111
|
"toggleBulletList" in editor.commands ? {
|
|
89
112
|
name: "Bullet list",
|
|
113
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(_private.ListUnorderedIcon, {}),
|
|
90
114
|
isActive: (editor2) => editor2.isActive("bulletList"),
|
|
91
115
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleBulletList().run()
|
|
92
116
|
} : null,
|
|
93
117
|
"toggleOrderedList" in editor.commands ? {
|
|
94
118
|
name: "Numbered list",
|
|
119
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(_private.ListOrderedIcon, {}),
|
|
95
120
|
isActive: (editor2) => editor2.isActive("orderedList"),
|
|
96
121
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleOrderedList().run()
|
|
97
122
|
} : null,
|
|
98
123
|
"toggleBlockquote" in editor.commands ? {
|
|
99
124
|
name: "Blockquote",
|
|
125
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(_private.BlockquoteIcon, {}),
|
|
100
126
|
isActive: (editor2) => editor2.isActive("blockquote"),
|
|
101
127
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleBlockquote().run()
|
|
102
128
|
} : null
|
|
103
129
|
];
|
|
104
130
|
return items.filter(Boolean);
|
|
105
131
|
}
|
|
106
|
-
const
|
|
107
|
-
name: "Text",
|
|
108
|
-
isActive: () => false,
|
|
109
|
-
setActive: (editor) => editor.chain().focus().clearNodes().run()
|
|
110
|
-
};
|
|
111
|
-
const ToolbarBlockSelector = react.forwardRef(({ items, ...props }, forwardedRef) => {
|
|
132
|
+
const ToolbarBlockSelector = react.forwardRef(({ items, onKeyDown, ...props }, forwardedRef) => {
|
|
112
133
|
const floatingToolbarContext = react.useContext(shared.FloatingToolbarContext);
|
|
134
|
+
const closeFloatingToolbar = floatingToolbarContext?.close;
|
|
113
135
|
const editor = context.useCurrentEditor(
|
|
114
136
|
"BlockSelector",
|
|
115
137
|
"Toolbar or FloatingToolbar"
|
|
116
138
|
);
|
|
117
139
|
const resolvedItems = react.useMemo(() => {
|
|
118
|
-
|
|
119
|
-
|
|
140
|
+
if (Array.isArray(items)) {
|
|
141
|
+
return items;
|
|
142
|
+
}
|
|
143
|
+
const defaultItems = createDefaultBlockSelectorItems(editor);
|
|
144
|
+
return items ? items(defaultItems) : defaultItems;
|
|
120
145
|
}, [editor, items]);
|
|
121
|
-
|
|
146
|
+
let defaultItem;
|
|
147
|
+
let activeItem = editor.isInitialized ? resolvedItems.find((item) => {
|
|
148
|
+
if (item.isActive === "default") {
|
|
149
|
+
defaultItem = item;
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
return item.isActive(editor);
|
|
153
|
+
}) : void 0;
|
|
154
|
+
if (!activeItem) {
|
|
155
|
+
activeItem = defaultItem;
|
|
156
|
+
}
|
|
122
157
|
const handleItemChange = (name) => {
|
|
123
158
|
const item = resolvedItems.find((item2) => item2.name === name);
|
|
124
159
|
if (item) {
|
|
@@ -126,8 +161,19 @@ const ToolbarBlockSelector = react.forwardRef(({ items, ...props }, forwardedRef
|
|
|
126
161
|
floatingToolbarContext?.close();
|
|
127
162
|
}
|
|
128
163
|
};
|
|
164
|
+
const handleKeyDown = react.useCallback(
|
|
165
|
+
(event) => {
|
|
166
|
+
onKeyDown?.(event);
|
|
167
|
+
if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
|
|
168
|
+
closeFloatingToolbar();
|
|
169
|
+
event.preventDefault();
|
|
170
|
+
event.stopPropagation();
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
[onKeyDown, closeFloatingToolbar]
|
|
174
|
+
);
|
|
129
175
|
return /* @__PURE__ */ jsxRuntime.jsxs(SelectPrimitive__namespace.Root, {
|
|
130
|
-
value: activeItem
|
|
176
|
+
value: activeItem?.name,
|
|
131
177
|
onValueChange: handleItemChange,
|
|
132
178
|
children: [
|
|
133
179
|
/* @__PURE__ */ jsxRuntime.jsx(_private.ShortcutTooltip, {
|
|
@@ -136,18 +182,11 @@ const ToolbarBlockSelector = react.forwardRef(({ items, ...props }, forwardedRef
|
|
|
136
182
|
asChild: true,
|
|
137
183
|
...props,
|
|
138
184
|
ref: forwardedRef,
|
|
139
|
-
|
|
140
|
-
|
|
185
|
+
onKeyDown: handleKeyDown,
|
|
186
|
+
disabled: resolvedItems.length === 0,
|
|
187
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(_private.SelectButton, {
|
|
141
188
|
variant: "toolbar",
|
|
142
|
-
children:
|
|
143
|
-
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Value, {
|
|
144
|
-
children: activeItem.name
|
|
145
|
-
}),
|
|
146
|
-
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, {
|
|
147
|
-
className: "lb-dropdown-chevron",
|
|
148
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(_private.ChevronDownIcon, {})
|
|
149
|
-
})
|
|
150
|
-
]
|
|
189
|
+
children: activeItem?.name ?? "Turn into\u2026"
|
|
151
190
|
})
|
|
152
191
|
})
|
|
153
192
|
}),
|
|
@@ -162,13 +201,17 @@ const ToolbarBlockSelector = react.forwardRef(({ items, ...props }, forwardedRef
|
|
|
162
201
|
value: item.name,
|
|
163
202
|
className: "lb-dropdown-item",
|
|
164
203
|
children: [
|
|
204
|
+
item.icon ? /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
205
|
+
className: "lb-dropdown-item-icon lb-icon-container",
|
|
206
|
+
children: item.icon
|
|
207
|
+
}) : null,
|
|
165
208
|
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
166
209
|
className: "lb-dropdown-item-label",
|
|
167
210
|
children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, {
|
|
168
211
|
children: item.name
|
|
169
212
|
})
|
|
170
213
|
}),
|
|
171
|
-
item.name === activeItem
|
|
214
|
+
item.name === activeItem?.name ? /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
172
215
|
className: "lb-dropdown-item-accessory lb-icon-container",
|
|
173
216
|
children: /* @__PURE__ */ jsxRuntime.jsx(_private.CheckIcon, {})
|
|
174
217
|
}) : null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbar.js","sources":["../../src/toolbar/Toolbar.tsx"],"sourcesContent":["import {\n BoldIcon,\n Button,\n CheckIcon,\n ChevronDownIcon,\n CodeIcon,\n CommentIcon,\n ItalicIcon,\n RedoIcon,\n ShortcutTooltip,\n StrikethroughIcon,\n TooltipProvider,\n UnderlineIcon,\n UndoIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport type { Editor } from \"@tiptap/react\";\nimport type { ComponentProps, ComponentType, ReactNode } from \"react\";\nimport { forwardRef, useContext, useMemo } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type { ExtendedChainedCommands } from \"../types\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\n\nexport const BLOCK_SELECT_SIDE_OFFSET = 10;\nexport const FLOATING_ELEMENT_COLLISION_PADDING = 10;\n\nexport interface ToolbarSlotProps {\n editor: Editor;\n}\n\nexport type ToolbarSlot = ReactNode | ComponentType<ToolbarSlotProps>;\n\nexport interface ToolbarProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n editor: Editor | null;\n children?: ToolbarSlot;\n before?: ToolbarSlot;\n after?: ToolbarSlot;\n}\n\ninterface ToolbarButtonProps extends ComponentProps<\"button\"> {\n icon?: ReactNode;\n name: string;\n shortcut?: string;\n}\n\ninterface ToolbarToggleProps extends ToolbarButtonProps {\n active: boolean;\n}\n\ninterface ToolbarBlockSelectorItem {\n name: string;\n isActive: (editor: Editor) => boolean;\n setActive: (editor: Editor) => void;\n}\n\ninterface ToolbarBlockSelectorProps extends ComponentProps<\"button\"> {\n items?: ToolbarBlockSelectorItem[];\n}\n\ntype ToolbarSeparatorProps = ComponentProps<\"div\">;\n\nexport function applyToolbarSlot(\n slot: ToolbarSlot,\n props: ToolbarSlotProps\n): ReactNode {\n if (typeof slot === \"function\") {\n const Component = slot;\n\n return <Component {...props} />;\n }\n\n return slot;\n}\n\nconst ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n ({ icon, children, name, shortcut, ...props }, forwardedRef) => {\n return (\n <ShortcutTooltip content={name} shortcut={shortcut}>\n <Button\n type=\"button\"\n variant=\"toolbar\"\n ref={forwardedRef}\n icon={icon}\n {...props}\n >\n {children}\n </Button>\n </ShortcutTooltip>\n );\n }\n);\n\nconst ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>(\n ({ active, ...props }, forwardedRef) => {\n return (\n <TogglePrimitive.Root asChild pressed={active}>\n <ToolbarButton ref={forwardedRef} {...props} />\n </TogglePrimitive.Root>\n );\n }\n);\n\nfunction createDefaultBlockSelectorItems(\n editor: Editor\n): ToolbarBlockSelectorItem[] {\n const items: (ToolbarBlockSelectorItem | null)[] = [\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 1\",\n isActive: (editor) => editor.isActive(\"heading\", { level: 1 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 1 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 2\",\n isActive: (editor) => editor.isActive(\"heading\", { level: 2 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 2 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 3\",\n isActive: (editor) => editor.isActive(\"heading\", { level: 3 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 3 })\n .run(),\n }\n : null,\n \"toggleBulletList\" in editor.commands\n ? {\n name: \"Bullet list\",\n isActive: (editor) => editor.isActive(\"bulletList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBulletList\">\n )\n .toggleBulletList()\n .run(),\n }\n : null,\n \"toggleOrderedList\" in editor.commands\n ? {\n name: \"Numbered list\",\n\n isActive: (editor) => editor.isActive(\"orderedList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleOrderedList\">\n )\n .toggleOrderedList()\n .run(),\n }\n : null,\n \"toggleBlockquote\" in editor.commands\n ? {\n name: \"Blockquote\",\n isActive: (editor) => editor.isActive(\"blockquote\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBlockquote\">\n )\n .toggleBlockquote()\n .run(),\n }\n : null,\n ];\n\n return items.filter(Boolean) as ToolbarBlockSelectorItem[];\n}\n\nconst blockSelectorTextItem: ToolbarBlockSelectorItem = {\n name: \"Text\",\n isActive: () => false,\n setActive: (editor) => editor.chain().focus().clearNodes().run(),\n};\n\nconst ToolbarBlockSelector = forwardRef<\n HTMLButtonElement,\n ToolbarBlockSelectorProps\n>(({ items, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const editor = useCurrentEditor(\n \"BlockSelector\",\n \"Toolbar or FloatingToolbar\"\n );\n const resolvedItems = useMemo(() => {\n const resolvedItems = items ?? createDefaultBlockSelectorItems(editor);\n\n return [blockSelectorTextItem, ...resolvedItems];\n }, [editor, items]);\n const activeItem =\n resolvedItems.find((item) => item.isActive(editor)) ??\n blockSelectorTextItem;\n\n const handleItemChange = (name: string) => {\n const item = resolvedItems.find((item) => item.name === name);\n\n if (item) {\n item.setActive(editor);\n\n // If present in a floating toolbar, close it on change\n floatingToolbarContext?.close();\n }\n };\n\n return (\n <SelectPrimitive.Root\n value={activeItem.name}\n onValueChange={handleItemChange}\n >\n <ShortcutTooltip content=\"Turn into…\">\n <SelectPrimitive.Trigger asChild {...props} ref={forwardedRef}>\n <Button type=\"button\" variant=\"toolbar\">\n <SelectPrimitive.Value>{activeItem.name}</SelectPrimitive.Value>\n <SelectPrimitive.Icon className=\"lb-dropdown-chevron\">\n <ChevronDownIcon />\n </SelectPrimitive.Icon>\n </Button>\n </SelectPrimitive.Trigger>\n </ShortcutTooltip>\n <SelectPrimitive.Portal>\n <FloatingToolbarExternal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={BLOCK_SELECT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n className=\"lb-root lb-portal lb-elevation lb-dropdown\"\n >\n {resolvedItems.map((item) => (\n <SelectPrimitive.Item\n key={item.name}\n value={item.name}\n className=\"lb-dropdown-item\"\n >\n <span className=\"lb-dropdown-item-label\">\n <SelectPrimitive.ItemText>\n {item.name}\n </SelectPrimitive.ItemText>\n </span>\n {item.name === activeItem.name ? (\n <span className=\"lb-dropdown-item-accessory lb-icon-container\">\n <CheckIcon />\n </span>\n ) : null}\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Content>\n </FloatingToolbarExternal>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n});\n\nconst ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(\n ({ className, ...props }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={classNames(\"lb-tiptap-toolbar-separator\", className)}\n {...props}\n />\n );\n }\n);\n\nfunction ToolbarSectionHistory() {\n const editor = useCurrentEditor(\n \"SectionHistory\",\n \"Toolbar or FloatingToolbar\"\n );\n\n return (\n <>\n <ToolbarButton\n name=\"Undo\"\n icon={<UndoIcon />}\n shortcut=\"Mod-Z\"\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().chain().focus().undo().run()}\n />\n <ToolbarButton\n name=\"Redo\"\n icon={<RedoIcon />}\n shortcut=\"Mod-Shift-Z\"\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().chain().focus().redo().run()}\n />\n </>\n );\n}\n\nfunction ToolbarSectionInline() {\n const editor = useCurrentEditor(\n \"SectionInline\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsBold = \"toggleBold\" in editor.commands;\n const supportsItalic = \"toggleItalic\" in editor.commands;\n const supportsUnderline = \"toggleUnderline\" in editor.commands;\n const supportsStrike = \"toggleStrike\" in editor.commands;\n const supportsCode = \"toggleCode\" in editor.commands;\n\n return (\n <>\n {supportsBold && (\n <ToolbarToggle\n name=\"Bold\"\n icon={<BoldIcon />}\n shortcut=\"Mod-B\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleBold\">)\n .toggleBold()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleBold\">\n )\n .toggleBold()\n .run()\n }\n active={editor.isActive(\"bold\")}\n />\n )}\n {supportsItalic && (\n <ToolbarToggle\n name=\"Italic\"\n icon={<ItalicIcon />}\n shortcut=\"Mod-I\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleItalic\">)\n .toggleItalic()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleItalic\">\n )\n .toggleItalic()\n .run()\n }\n active={editor.isActive(\"italic\")}\n />\n )}\n {supportsUnderline && (\n <ToolbarToggle\n name=\"Underline\"\n icon={<UnderlineIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n active={editor.isActive(\"underline\")}\n />\n )}\n {supportsStrike && (\n <ToolbarToggle\n name=\"Strikethrough\"\n icon={<StrikethroughIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleStrike\">)\n .toggleStrike()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleStrike\">\n )\n .toggleStrike()\n .run()\n }\n active={editor.isActive(\"strike\")}\n />\n )}\n {supportsCode && (\n <ToolbarToggle\n name=\"Inline code\"\n icon={<CodeIcon />}\n shortcut=\"Mod-E\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleCode\">)\n .toggleCode()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleCode\">\n )\n .toggleCode()\n .run()\n }\n active={editor.isActive(\"code\")}\n />\n )}\n </>\n );\n}\n\nfunction ToolbarSectionCollaboration() {\n const editor = useCurrentEditor(\n \"SectionCollaboration\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n {supportsThread && (\n <ToolbarButton\n name=\"Add a comment\"\n icon={<CommentIcon />}\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"addPendingComment\">\n )\n .addPendingComment()\n .run()\n }\n >\n Comment\n </ToolbarButton>\n )}\n </>\n );\n}\n\nfunction DefaultToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <ToolbarSectionHistory />\n <ToolbarSeparator />\n <ToolbarBlockSelector />\n <ToolbarSectionInline />\n {supportsThread ? (\n <>\n <ToolbarSeparator />\n <ToolbarSectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nexport const Toolbar = Object.assign(\n forwardRef<HTMLDivElement, ToolbarProps>(\n (\n {\n before,\n after,\n children = DefaultToolbarContent,\n editor,\n className,\n ...props\n },\n forwardedRef\n ) => {\n if (!editor) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return (\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <div\n ref={forwardedRef}\n role=\"toolbar\"\n aria-label=\"Toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\"lb-root lb-tiptap-toolbar\", className)}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </EditorProvider>\n </TooltipProvider>\n );\n }\n ),\n {\n Button: ToolbarButton,\n Toggle: ToolbarToggle,\n Separator: ToolbarSeparator,\n SectionHistory: ToolbarSectionHistory,\n SectionInline: ToolbarSectionInline,\n SectionCollaboration: ToolbarSectionCollaboration,\n BlockSelector: ToolbarBlockSelector,\n }\n);\n"],"names":["jsx","forwardRef","ShortcutTooltip","Button","TogglePrimitive","editor","useContext","FloatingToolbarContext","useCurrentEditor","useMemo","resolvedItems","item","jsxs","SelectPrimitive","ChevronDownIcon","FloatingToolbarExternal","CheckIcon","classNames","Fragment","UndoIcon","RedoIcon","BoldIcon","ItalicIcon","UnderlineIcon","StrikethroughIcon","CodeIcon","CommentIcon","TooltipProvider","EditorProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,MAAM,wBAA2B,GAAA,GAAA;AACjC,MAAM,kCAAqC,GAAA,GAAA;AAqClC,SAAA,gBAAA,CACd,MACA,KACW,EAAA;AACX,EAAI,IAAA,OAAO,SAAS,UAAY,EAAA;AAC9B,IAAA,MAAM,SAAY,GAAA,IAAA,CAAA;AAElB,IAAA,uBAAQA,cAAA,CAAA,SAAA,EAAA;AAAA,MAAW,GAAG,KAAA;AAAA,KAAO,CAAA,CAAA;AAAA,GAC/B;AAEA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEA,MAAM,aAAgB,GAAAC,gBAAA;AAAA,EACpB,CAAC,EAAE,IAAM,EAAA,QAAA,EAAU,MAAM,QAAa,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AAC9D,IAAA,uBACGD,cAAA,CAAAE,wBAAA,EAAA;AAAA,MAAgB,OAAS,EAAA,IAAA;AAAA,MAAM,QAAA;AAAA,MAC9B,QAAC,kBAAAF,cAAA,CAAAG,eAAA,EAAA;AAAA,QACC,IAAK,EAAA,QAAA;AAAA,QACL,OAAQ,EAAA,SAAA;AAAA,QACR,GAAK,EAAA,YAAA;AAAA,QACL,IAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA;AAAA,OACH,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF,CAAA,CAAA;AAEA,MAAM,aAAgB,GAAAF,gBAAA;AAAA,EACpB,CAAC,EAAE,MAAW,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACtC,IACE,uBAAAD,cAAA,CAACI,2BAAgB,IAAhB,EAAA;AAAA,MAAqB,OAAO,EAAA,IAAA;AAAA,MAAC,OAAS,EAAA,MAAA;AAAA,MACrC,QAAC,kBAAAJ,cAAA,CAAA,aAAA,EAAA;AAAA,QAAc,GAAK,EAAA,YAAA;AAAA,QAAe,GAAG,KAAA;AAAA,OAAO,CAAA;AAAA,KAC/C,CAAA,CAAA;AAAA,GAEJ;AACF,CAAA,CAAA;AAEA,SAAS,gCACP,MAC4B,EAAA;AAC5B,EAAA,MAAM,KAA6C,GAAA;AAAA,IACjD,eAAA,IAAmB,OAAO,QACtB,GAAA;AAAA,MACE,IAAM,EAAA,WAAA;AAAA,MACN,QAAA,EAAU,CAACK,OAAWA,KAAAA,OAAAA,CAAO,SAAS,SAAW,EAAA,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA;AAAA,MAC7D,WAAW,CAACA,OAAAA,KAERA,OAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,UAAW,EAAA,CAKjC,cAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAC1B,GAAI,EAAA;AAAA,KAEX,GAAA,IAAA;AAAA,IACJ,eAAA,IAAmB,OAAO,QACtB,GAAA;AAAA,MACE,IAAM,EAAA,WAAA;AAAA,MACN,QAAA,EAAU,CAACA,OAAWA,KAAAA,OAAAA,CAAO,SAAS,SAAW,EAAA,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA;AAAA,MAC7D,WAAW,CAACA,OAAAA,KAERA,OAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,UAAW,EAAA,CAKjC,cAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAC1B,GAAI,EAAA;AAAA,KAEX,GAAA,IAAA;AAAA,IACJ,eAAA,IAAmB,OAAO,QACtB,GAAA;AAAA,MACE,IAAM,EAAA,WAAA;AAAA,MACN,QAAA,EAAU,CAACA,OAAWA,KAAAA,OAAAA,CAAO,SAAS,SAAW,EAAA,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA;AAAA,MAC7D,WAAW,CAACA,OAAAA,KAERA,OAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,UAAW,EAAA,CAKjC,cAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAC1B,GAAI,EAAA;AAAA,KAEX,GAAA,IAAA;AAAA,IACJ,kBAAA,IAAsB,OAAO,QACzB,GAAA;AAAA,MACE,IAAM,EAAA,aAAA;AAAA,MACN,QAAU,EAAA,CAACA,OAAWA,KAAAA,OAAAA,CAAO,SAAS,YAAY,CAAA;AAAA,MAClD,SAAW,EAAA,CAACA,OAERA,KAAAA,OAAAA,CACG,KAAM,EAAA,CACN,KAAM,EAAA,CACN,UAAW,EAAA,CAEb,gBAAiB,EAAA,CACjB,GAAI,EAAA;AAAA,KAEX,GAAA,IAAA;AAAA,IACJ,mBAAA,IAAuB,OAAO,QAC1B,GAAA;AAAA,MACE,IAAM,EAAA,eAAA;AAAA,MAEN,QAAU,EAAA,CAACA,OAAWA,KAAAA,OAAAA,CAAO,SAAS,aAAa,CAAA;AAAA,MACnD,SAAW,EAAA,CAACA,OAERA,KAAAA,OAAAA,CACG,KAAM,EAAA,CACN,KAAM,EAAA,CACN,UAAW,EAAA,CAEb,iBAAkB,EAAA,CAClB,GAAI,EAAA;AAAA,KAEX,GAAA,IAAA;AAAA,IACJ,kBAAA,IAAsB,OAAO,QACzB,GAAA;AAAA,MACE,IAAM,EAAA,YAAA;AAAA,MACN,QAAU,EAAA,CAACA,OAAWA,KAAAA,OAAAA,CAAO,SAAS,YAAY,CAAA;AAAA,MAClD,SAAW,EAAA,CAACA,OAERA,KAAAA,OAAAA,CACG,KAAM,EAAA,CACN,KAAM,EAAA,CACN,UAAW,EAAA,CAEb,gBAAiB,EAAA,CACjB,GAAI,EAAA;AAAA,KAEX,GAAA,IAAA;AAAA,GACN,CAAA;AAEA,EAAO,OAAA,KAAA,CAAM,OAAO,OAAO,CAAA,CAAA;AAC7B,CAAA;AAEA,MAAM,qBAAkD,GAAA;AAAA,EACtD,IAAM,EAAA,MAAA;AAAA,EACN,UAAU,MAAM,KAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,KAAW,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,UAAW,EAAA,CAAE,GAAI,EAAA;AACjE,CAAA,CAAA;AAEA,MAAM,uBAAuBJ,gBAG3B,CAAA,CAAC,EAAE,KAAU,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACvC,EAAM,MAAA,sBAAA,GAAyBK,iBAAWC,6BAAsB,CAAA,CAAA;AAChE,EAAA,MAAM,MAAS,GAAAC,wBAAA;AAAA,IACb,eAAA;AAAA,IACA,4BAAA;AAAA,GACF,CAAA;AACA,EAAM,MAAA,aAAA,GAAgBC,cAAQ,MAAM;AAClC,IAAMC,MAAAA,cAAAA,GAAgB,KAAS,IAAA,+BAAA,CAAgC,MAAM,CAAA,CAAA;AAErE,IAAO,OAAA,CAAC,qBAAuB,EAAA,GAAGA,cAAa,CAAA,CAAA;AAAA,GAC9C,EAAA,CAAC,MAAQ,EAAA,KAAK,CAAC,CAAA,CAAA;AAClB,EAAM,MAAA,UAAA,GACJ,cAAc,IAAK,CAAA,CAAC,SAAS,IAAK,CAAA,QAAA,CAAS,MAAM,CAAC,CAClD,IAAA,qBAAA,CAAA;AAEF,EAAM,MAAA,gBAAA,GAAmB,CAAC,IAAiB,KAAA;AACzC,IAAA,MAAM,OAAO,aAAc,CAAA,IAAA,CAAK,CAACC,KAASA,KAAAA,KAAAA,CAAK,SAAS,IAAI,CAAA,CAAA;AAE5D,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,IAAA,CAAK,UAAU,MAAM,CAAA,CAAA;AAGrB,MAAA,sBAAA,EAAwB,KAAM,EAAA,CAAA;AAAA,KAChC;AAAA,GACF,CAAA;AAEA,EACE,uBAAAC,eAAA,CAACC,2BAAgB,IAAhB,EAAA;AAAA,IACC,OAAO,UAAW,CAAA,IAAA;AAAA,IAClB,aAAe,EAAA,gBAAA;AAAA,IAEf,QAAA,EAAA;AAAA,sBAACb,cAAA,CAAAE,wBAAA,EAAA;AAAA,QAAgB,OAAQ,EAAA,iBAAA;AAAA,QACvB,QAAA,kBAAAF,cAAA,CAACa,2BAAgB,OAAhB,EAAA;AAAA,UAAwB,OAAO,EAAA,IAAA;AAAA,UAAE,GAAG,KAAA;AAAA,UAAO,GAAK,EAAA,YAAA;AAAA,UAC/C,QAAC,kBAAAD,eAAA,CAAAT,eAAA,EAAA;AAAA,YAAO,IAAK,EAAA,QAAA;AAAA,YAAS,OAAQ,EAAA,SAAA;AAAA,YAC5B,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACa,2BAAgB,KAAhB,EAAA;AAAA,gBAAuB,QAAW,EAAA,UAAA,CAAA,IAAA;AAAA,eAAK,CAAA;AAAA,8BACxCb,cAAA,CAACa,2BAAgB,IAAhB,EAAA;AAAA,gBAAqB,SAAU,EAAA,qBAAA;AAAA,gBAC9B,yCAACC,wBAAgB,EAAA,EAAA,CAAA;AAAA,eACnB,CAAA;AAAA,aAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,sBACAd,cAAA,CAACa,2BAAgB,MAAhB,EAAA;AAAA,QACC,QAAC,kBAAAb,cAAA,CAAAe,8BAAA,EAAA;AAAA,UACC,QAAA,kBAAAf,cAAA,CAACa,2BAAgB,OAAhB,EAAA;AAAA,YACC,QAAS,EAAA,QAAA;AAAA,YACT,UAAY,EAAA,wBAAA;AAAA,YACZ,gBAAkB,EAAA,kCAAA;AAAA,YAClB,SAAU,EAAA,4CAAA;AAAA,YAET,wBAAc,GAAI,CAAA,CAAC,IAClB,qBAAAD,eAAA,CAACC,2BAAgB,IAAhB,EAAA;AAAA,cAEC,OAAO,IAAK,CAAA,IAAA;AAAA,cACZ,SAAU,EAAA,kBAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAACb,cAAA,CAAA,MAAA,EAAA;AAAA,kBAAK,SAAU,EAAA,wBAAA;AAAA,kBACd,QAAA,kBAAAA,cAAA,CAACa,2BAAgB,QAAhB,EAAA;AAAA,oBACE,QAAK,EAAA,IAAA,CAAA,IAAA;AAAA,mBACR,CAAA;AAAA,iBACF,CAAA;AAAA,gBACC,IAAK,CAAA,IAAA,KAAS,UAAW,CAAA,IAAA,mBACvBb,cAAA,CAAA,MAAA,EAAA;AAAA,kBAAK,SAAU,EAAA,8CAAA;AAAA,kBACd,yCAACgB,kBAAU,EAAA,EAAA,CAAA;AAAA,iBACb,CACE,GAAA,IAAA;AAAA,eAAA;AAAA,aAbC,EAAA,IAAA,CAAK,IAcZ,CACD,CAAA;AAAA,WACH,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC,CAAA,CAAA;AAED,MAAM,gBAAmB,GAAAf,gBAAA;AAAA,EACvB,CAAC,EAAE,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACzC,IAAA,uBACGD,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,GAAK,EAAA,YAAA;AAAA,MACL,IAAK,EAAA,WAAA;AAAA,MACL,kBAAiB,EAAA,UAAA;AAAA,MACjB,SAAA,EAAWiB,qBAAW,CAAA,6BAAA,EAA+B,SAAS,CAAA;AAAA,MAC7D,GAAG,KAAA;AAAA,KACN,CAAA,CAAA;AAAA,GAEJ;AACF,CAAA,CAAA;AAEA,SAAS,qBAAwB,GAAA;AAC/B,EAAA,MAAM,MAAS,GAAAT,wBAAA;AAAA,IACb,gBAAA;AAAA,IACA,4BAAA;AAAA,GACF,CAAA;AAEA,EACE,uBAAAI,eAAA,CAAAM,mBAAA,EAAA;AAAA,IACE,QAAA,EAAA;AAAA,sBAAClB,cAAA,CAAA,aAAA,EAAA;AAAA,QACC,IAAK,EAAA,MAAA;AAAA,QACL,IAAA,iCAAOmB,iBAAS,EAAA,EAAA,CAAA;AAAA,QAChB,QAAS,EAAA,OAAA;AAAA,QACT,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,IAAK,EAAA,CAAE,GAAI,EAAA;AAAA,QACjD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAI,EAAA,CAAE,KAAM,EAAA,CAAE,KAAM,EAAA,CAAE,IAAK,EAAA,CAAE,GAAI,EAAA;AAAA,OACrD,CAAA;AAAA,sBACCnB,cAAA,CAAA,aAAA,EAAA;AAAA,QACC,IAAK,EAAA,MAAA;AAAA,QACL,IAAA,iCAAOoB,iBAAS,EAAA,EAAA,CAAA;AAAA,QAChB,QAAS,EAAA,aAAA;AAAA,QACT,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,IAAK,EAAA,CAAE,GAAI,EAAA;AAAA,QACjD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAI,EAAA,CAAE,KAAM,EAAA,CAAE,KAAM,EAAA,CAAE,IAAK,EAAA,CAAE,GAAI,EAAA;AAAA,OACrD,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,oBAAuB,GAAA;AAC9B,EAAA,MAAM,MAAS,GAAAZ,wBAAA;AAAA,IACb,eAAA;AAAA,IACA,4BAAA;AAAA,GACF,CAAA;AACA,EAAM,MAAA,YAAA,GAAe,gBAAgB,MAAO,CAAA,QAAA,CAAA;AAC5C,EAAM,MAAA,cAAA,GAAiB,kBAAkB,MAAO,CAAA,QAAA,CAAA;AAChD,EAAM,MAAA,iBAAA,GAAoB,qBAAqB,MAAO,CAAA,QAAA,CAAA;AACtD,EAAM,MAAA,cAAA,GAAiB,kBAAkB,MAAO,CAAA,QAAA,CAAA;AAChD,EAAM,MAAA,YAAA,GAAe,gBAAgB,MAAO,CAAA,QAAA,CAAA;AAE5C,EACE,uBAAAI,eAAA,CAAAM,mBAAA,EAAA;AAAA,IACG,QAAA,EAAA;AAAA,MAAA,YAAA,oBACElB,cAAA,CAAA,aAAA,EAAA;AAAA,QACC,IAAK,EAAA,MAAA;AAAA,QACL,IAAA,iCAAOqB,iBAAS,EAAA,EAAA,CAAA;AAAA,QAChB,QAAS,EAAA,OAAA;AAAA,QACT,OAAA,EAAS,MACN,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CACnB,UAAW,EAAA,CACX,GAAI,EAAA;AAAA,QAET,QAAA,EACE,CACE,MAAA,CACG,GAAI,EAAA,CACJ,KAAM,EAAA,CACN,KAAM,EAAA,CAER,UAAW,EAAA,CACX,GAAI,EAAA;AAAA,QAET,MAAA,EAAQ,MAAO,CAAA,QAAA,CAAS,MAAM,CAAA;AAAA,OAChC,CAAA;AAAA,MAED,kCACErB,cAAA,CAAA,aAAA,EAAA;AAAA,QACC,IAAK,EAAA,QAAA;AAAA,QACL,IAAA,iCAAOsB,mBAAW,EAAA,EAAA,CAAA;AAAA,QAClB,QAAS,EAAA,OAAA;AAAA,QACT,OAAA,EAAS,MACN,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CACnB,YAAa,EAAA,CACb,GAAI,EAAA;AAAA,QAET,QAAA,EACE,CACE,MAAA,CACG,GAAI,EAAA,CACJ,KAAM,EAAA,CACN,KAAM,EAAA,CAER,YAAa,EAAA,CACb,GAAI,EAAA;AAAA,QAET,MAAA,EAAQ,MAAO,CAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,OAClC,CAAA;AAAA,MAED,qCACEtB,cAAA,CAAA,aAAA,EAAA;AAAA,QACC,IAAK,EAAA,WAAA;AAAA,QACL,IAAA,iCAAOuB,sBAAc,EAAA,EAAA,CAAA;AAAA,QACrB,QAAS,EAAA,OAAA;AAAA,QACT,OAAA,EAAS,MAEL,MACG,CAAA,KAAA,GACA,KAAM,EAAA,CAER,eAAgB,EAAA,CAChB,GAAI,EAAA;AAAA,QAET,QAAA,EACE,CACE,MAAA,CACG,GAAI,EAAA,CACJ,KAAM,EAAA,CACN,KAAM,EAAA,CAER,eAAgB,EAAA,CAChB,GAAI,EAAA;AAAA,QAET,MAAA,EAAQ,MAAO,CAAA,QAAA,CAAS,WAAW,CAAA;AAAA,OACrC,CAAA;AAAA,MAED,kCACEvB,cAAA,CAAA,aAAA,EAAA;AAAA,QACC,IAAK,EAAA,eAAA;AAAA,QACL,IAAA,iCAAOwB,0BAAkB,EAAA,EAAA,CAAA;AAAA,QACzB,QAAS,EAAA,OAAA;AAAA,QACT,OAAA,EAAS,MACN,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CACnB,YAAa,EAAA,CACb,GAAI,EAAA;AAAA,QAET,QAAA,EACE,CACE,MAAA,CACG,GAAI,EAAA,CACJ,KAAM,EAAA,CACN,KAAM,EAAA,CAER,YAAa,EAAA,CACb,GAAI,EAAA;AAAA,QAET,MAAA,EAAQ,MAAO,CAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,OAClC,CAAA;AAAA,MAED,gCACExB,cAAA,CAAA,aAAA,EAAA;AAAA,QACC,IAAK,EAAA,aAAA;AAAA,QACL,IAAA,iCAAOyB,iBAAS,EAAA,EAAA,CAAA;AAAA,QAChB,QAAS,EAAA,OAAA;AAAA,QACT,OAAA,EAAS,MACN,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CACnB,UAAW,EAAA,CACX,GAAI,EAAA;AAAA,QAET,QAAA,EACE,CACE,MAAA,CACG,GAAI,EAAA,CACJ,KAAM,EAAA,CACN,KAAM,EAAA,CAER,UAAW,EAAA,CACX,GAAI,EAAA;AAAA,QAET,MAAA,EAAQ,MAAO,CAAA,QAAA,CAAS,MAAM,CAAA;AAAA,OAChC,CAAA;AAAA,KAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,2BAA8B,GAAA;AACrC,EAAA,MAAM,MAAS,GAAAjB,wBAAA;AAAA,IACb,sBAAA;AAAA,IACA,4BAAA;AAAA,GACF,CAAA;AACA,EAAM,MAAA,cAAA,GAAiB,uBAAuB,MAAO,CAAA,QAAA,CAAA;AAErD,EACE,uBAAAR,cAAA,CAAAkB,mBAAA,EAAA;AAAA,IACG,4CACElB,cAAA,CAAA,aAAA,EAAA;AAAA,MACC,IAAK,EAAA,eAAA;AAAA,MACL,IAAA,iCAAO0B,oBAAY,EAAA,EAAA,CAAA;AAAA,MACnB,OAAA,EAAS,MAEL,MACG,CAAA,KAAA,GACA,KAAM,EAAA,CAER,iBAAkB,EAAA,CAClB,GAAI,EAAA;AAAA,MAEV,QAAA,EAAA,SAAA;AAAA,KAED,CAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,qBAAA,CAAsB,EAAE,MAAA,EAA4B,EAAA;AAC3D,EAAM,MAAA,cAAA,GAAiB,uBAAuB,MAAO,CAAA,QAAA,CAAA;AAErD,EACE,uBAAAd,eAAA,CAAAM,mBAAA,EAAA;AAAA,IACE,QAAA,EAAA;AAAA,sBAAAlB,cAAA,CAAC,qBAAsB,EAAA,EAAA,CAAA;AAAA,qCACtB,gBAAiB,EAAA,EAAA,CAAA;AAAA,qCACjB,oBAAqB,EAAA,EAAA,CAAA;AAAA,qCACrB,oBAAqB,EAAA,EAAA,CAAA;AAAA,MACrB,cACC,mBAAAY,eAAA,CAAAM,mBAAA,EAAA;AAAA,QACE,QAAA,EAAA;AAAA,0BAAAlB,cAAA,CAAC,gBAAiB,EAAA,EAAA,CAAA;AAAA,yCACjB,2BAA4B,EAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAC/B,CACE,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAA;AAEO,MAAM,UAAU,MAAO,CAAA,MAAA;AAAA,EAC5BC,gBAAA;AAAA,IACE,CACE;AAAA,MACE,MAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAW,GAAA,qBAAA;AAAA,MACX,MAAA;AAAA,MACA,SAAA;AAAA,MACG,GAAA,KAAA;AAAA,OAEL,YACG,KAAA;AACH,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAM,MAAA,SAAA,GAA8B,EAAE,MAAO,EAAA,CAAA;AAE7C,MAAA,uBACGD,cAAA,CAAA2B,wBAAA,EAAA;AAAA,QACC,QAAC,kBAAA3B,cAAA,CAAA4B,sBAAA,EAAA;AAAA,UAAe,MAAA;AAAA,UACd,QAAC,kBAAAhB,eAAA,CAAA,KAAA,EAAA;AAAA,YACC,GAAK,EAAA,YAAA;AAAA,YACL,IAAK,EAAA,SAAA;AAAA,YACL,YAAW,EAAA,SAAA;AAAA,YACX,kBAAiB,EAAA,YAAA;AAAA,YACjB,SAAA,EAAWK,qBAAW,CAAA,2BAAA,EAA6B,SAAS,CAAA;AAAA,YAC3D,GAAG,KAAA;AAAA,YAEH,QAAA,EAAA;AAAA,cAAA,gBAAA,CAAiB,QAAQ,SAAS,CAAA;AAAA,cAClC,gBAAA,CAAiB,UAAU,SAAS,CAAA;AAAA,cACpC,gBAAA,CAAiB,OAAO,SAAS,CAAA;AAAA,aAAA;AAAA,WACpC,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA,CAAA;AAAA,KAEJ;AAAA,GACF;AAAA,EACA;AAAA,IACE,MAAQ,EAAA,aAAA;AAAA,IACR,MAAQ,EAAA,aAAA;AAAA,IACR,SAAW,EAAA,gBAAA;AAAA,IACX,cAAgB,EAAA,qBAAA;AAAA,IAChB,aAAe,EAAA,oBAAA;AAAA,IACf,oBAAsB,EAAA,2BAAA;AAAA,IACtB,aAAe,EAAA,oBAAA;AAAA,GACjB;AACF;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Toolbar.js","sources":["../../src/toolbar/Toolbar.tsx"],"sourcesContent":["import {\n BlockquoteIcon,\n BoldIcon,\n Button,\n CheckIcon,\n CodeIcon,\n CommentIcon,\n H1Icon,\n H2Icon,\n H3Icon,\n ItalicIcon,\n ListOrderedIcon,\n ListUnorderedIcon,\n RedoIcon,\n SelectButton,\n ShortcutTooltip,\n StrikethroughIcon,\n TextIcon,\n TooltipProvider,\n UnderlineIcon,\n UndoIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport type { Editor } from \"@tiptap/react\";\nimport type {\n ComponentProps,\n ComponentType,\n KeyboardEvent,\n ReactNode,\n} from \"react\";\nimport { forwardRef, useCallback, useContext, useMemo } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type { ExtendedChainedCommands } from \"../types\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\n\nexport const BLOCK_SELECT_SIDE_OFFSET = 10;\nexport const FLOATING_ELEMENT_COLLISION_PADDING = 10;\n\nexport interface ToolbarSlotProps {\n editor: Editor;\n}\n\nexport type ToolbarSlot = ReactNode | ComponentType<ToolbarSlotProps>;\n\nexport interface ToolbarProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n editor: Editor | null;\n children?: ToolbarSlot;\n before?: ToolbarSlot;\n after?: ToolbarSlot;\n}\n\ninterface ToolbarButtonProps extends ComponentProps<\"button\"> {\n icon?: ReactNode;\n name: string;\n shortcut?: string;\n}\n\ninterface ToolbarToggleProps extends ToolbarButtonProps {\n active: boolean;\n}\n\ninterface ToolbarBlockSelectorItem {\n name: string;\n icon?: ReactNode;\n isActive: ((editor: Editor) => boolean) | \"default\";\n setActive: (editor: Editor) => void;\n}\n\ninterface ToolbarBlockSelectorProps extends ComponentProps<\"button\"> {\n items?:\n | ToolbarBlockSelectorItem[]\n | ((\n defaultItems: ToolbarBlockSelectorItem[]\n ) => ToolbarBlockSelectorItem[]);\n}\n\ntype ToolbarSeparatorProps = ComponentProps<\"div\">;\n\nexport function applyToolbarSlot(\n slot: ToolbarSlot,\n props: ToolbarSlotProps\n): ReactNode {\n if (typeof slot === \"function\") {\n const Component = slot;\n\n return <Component {...props} />;\n }\n\n return slot;\n}\n\nconst ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n ({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const closeFloatingToolbar = floatingToolbarContext?.close;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n\n if (\n !event.isDefaultPrevented() &&\n closeFloatingToolbar &&\n event.key === \"Escape\"\n ) {\n closeFloatingToolbar();\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [onKeyDown, closeFloatingToolbar]\n );\n\n return (\n <ShortcutTooltip content={name} shortcut={shortcut}>\n <Button\n type=\"button\"\n variant=\"toolbar\"\n ref={forwardedRef}\n icon={icon}\n {...props}\n onKeyDown={handleKeyDown}\n >\n {children}\n </Button>\n </ShortcutTooltip>\n );\n }\n);\n\nconst ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>(\n ({ active, ...props }, forwardedRef) => {\n return (\n <TogglePrimitive.Root asChild pressed={active}>\n <ToolbarButton ref={forwardedRef} {...props} />\n </TogglePrimitive.Root>\n );\n }\n);\n\nfunction createDefaultBlockSelectorItems(\n editor: Editor\n): ToolbarBlockSelectorItem[] {\n const items: (ToolbarBlockSelectorItem | null)[] = [\n {\n name: \"Text\",\n icon: <TextIcon />,\n isActive: \"default\",\n setActive: (editor) => editor.chain().focus().clearNodes().run(),\n },\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 1\",\n icon: <H1Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 1 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 1 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 2\",\n icon: <H2Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 2 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 2 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 3\",\n icon: <H3Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 3 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 3 })\n .run(),\n }\n : null,\n \"toggleBulletList\" in editor.commands\n ? {\n name: \"Bullet list\",\n icon: <ListUnorderedIcon />,\n isActive: (editor) => editor.isActive(\"bulletList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBulletList\">\n )\n .toggleBulletList()\n .run(),\n }\n : null,\n \"toggleOrderedList\" in editor.commands\n ? {\n name: \"Numbered list\",\n icon: <ListOrderedIcon />,\n isActive: (editor) => editor.isActive(\"orderedList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleOrderedList\">\n )\n .toggleOrderedList()\n .run(),\n }\n : null,\n \"toggleBlockquote\" in editor.commands\n ? {\n name: \"Blockquote\",\n icon: <BlockquoteIcon />,\n isActive: (editor) => editor.isActive(\"blockquote\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBlockquote\">\n )\n .toggleBlockquote()\n .run(),\n }\n : null,\n ];\n\n return items.filter(Boolean) as ToolbarBlockSelectorItem[];\n}\n\nconst ToolbarBlockSelector = forwardRef<\n HTMLButtonElement,\n ToolbarBlockSelectorProps\n>(({ items, onKeyDown, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const closeFloatingToolbar = floatingToolbarContext?.close;\n const editor = useCurrentEditor(\n \"BlockSelector\",\n \"Toolbar or FloatingToolbar\"\n );\n const resolvedItems = useMemo(() => {\n if (Array.isArray(items)) {\n return items;\n }\n\n const defaultItems = createDefaultBlockSelectorItems(editor);\n\n return items ? items(defaultItems) : defaultItems;\n }, [editor, items]);\n let defaultItem: ToolbarBlockSelectorItem | undefined;\n let activeItem = editor.isInitialized\n ? resolvedItems.find((item) => {\n if (item.isActive === \"default\") {\n defaultItem = item;\n return false;\n }\n\n return item.isActive(editor);\n })\n : undefined;\n\n if (!activeItem) {\n activeItem = defaultItem;\n }\n\n const handleItemChange = (name: string) => {\n const item = resolvedItems.find((item) => item.name === name);\n\n if (item) {\n item.setActive(editor);\n\n // If present in a floating toolbar, close it on change\n floatingToolbarContext?.close();\n }\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n\n if (\n !event.isDefaultPrevented() &&\n closeFloatingToolbar &&\n event.key === \"Escape\"\n ) {\n closeFloatingToolbar();\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [onKeyDown, closeFloatingToolbar]\n );\n\n return (\n <SelectPrimitive.Root\n value={activeItem?.name}\n onValueChange={handleItemChange}\n >\n <ShortcutTooltip content=\"Turn into…\">\n <SelectPrimitive.Trigger\n asChild\n {...props}\n ref={forwardedRef}\n onKeyDown={handleKeyDown}\n disabled={resolvedItems.length === 0}\n >\n <SelectButton variant=\"toolbar\">\n {activeItem?.name ?? \"Turn into…\"}\n </SelectButton>\n </SelectPrimitive.Trigger>\n </ShortcutTooltip>\n <SelectPrimitive.Portal>\n <FloatingToolbarExternal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={BLOCK_SELECT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n className=\"lb-root lb-portal lb-elevation lb-dropdown\"\n >\n {resolvedItems.map((item) => (\n <SelectPrimitive.Item\n key={item.name}\n value={item.name}\n className=\"lb-dropdown-item\"\n >\n {item.icon ? (\n <span className=\"lb-dropdown-item-icon lb-icon-container\">\n {item.icon}\n </span>\n ) : null}\n <span className=\"lb-dropdown-item-label\">\n <SelectPrimitive.ItemText>\n {item.name}\n </SelectPrimitive.ItemText>\n </span>\n {item.name === activeItem?.name ? (\n <span className=\"lb-dropdown-item-accessory lb-icon-container\">\n <CheckIcon />\n </span>\n ) : null}\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Content>\n </FloatingToolbarExternal>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n});\n\nconst ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(\n ({ className, ...props }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={classNames(\"lb-tiptap-toolbar-separator\", className)}\n {...props}\n />\n );\n }\n);\n\nfunction ToolbarSectionHistory() {\n const editor = useCurrentEditor(\n \"SectionHistory\",\n \"Toolbar or FloatingToolbar\"\n );\n\n return (\n <>\n <ToolbarButton\n name=\"Undo\"\n icon={<UndoIcon />}\n shortcut=\"Mod-Z\"\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().chain().focus().undo().run()}\n />\n <ToolbarButton\n name=\"Redo\"\n icon={<RedoIcon />}\n shortcut=\"Mod-Shift-Z\"\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().chain().focus().redo().run()}\n />\n </>\n );\n}\n\nfunction ToolbarSectionInline() {\n const editor = useCurrentEditor(\n \"SectionInline\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsBold = \"toggleBold\" in editor.commands;\n const supportsItalic = \"toggleItalic\" in editor.commands;\n const supportsUnderline = \"toggleUnderline\" in editor.commands;\n const supportsStrike = \"toggleStrike\" in editor.commands;\n const supportsCode = \"toggleCode\" in editor.commands;\n\n return (\n <>\n {supportsBold && (\n <ToolbarToggle\n name=\"Bold\"\n icon={<BoldIcon />}\n shortcut=\"Mod-B\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleBold\">)\n .toggleBold()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleBold\">\n )\n .toggleBold()\n .run()\n }\n active={editor.isActive(\"bold\")}\n />\n )}\n {supportsItalic && (\n <ToolbarToggle\n name=\"Italic\"\n icon={<ItalicIcon />}\n shortcut=\"Mod-I\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleItalic\">)\n .toggleItalic()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleItalic\">\n )\n .toggleItalic()\n .run()\n }\n active={editor.isActive(\"italic\")}\n />\n )}\n {supportsUnderline && (\n <ToolbarToggle\n name=\"Underline\"\n icon={<UnderlineIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n active={editor.isActive(\"underline\")}\n />\n )}\n {supportsStrike && (\n <ToolbarToggle\n name=\"Strikethrough\"\n icon={<StrikethroughIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleStrike\">)\n .toggleStrike()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleStrike\">\n )\n .toggleStrike()\n .run()\n }\n active={editor.isActive(\"strike\")}\n />\n )}\n {supportsCode && (\n <ToolbarToggle\n name=\"Inline code\"\n icon={<CodeIcon />}\n shortcut=\"Mod-E\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleCode\">)\n .toggleCode()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleCode\">\n )\n .toggleCode()\n .run()\n }\n active={editor.isActive(\"code\")}\n />\n )}\n </>\n );\n}\n\nfunction ToolbarSectionCollaboration() {\n const editor = useCurrentEditor(\n \"SectionCollaboration\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n {supportsThread && (\n <ToolbarButton\n name=\"Add a comment\"\n icon={<CommentIcon />}\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"addPendingComment\">\n )\n .addPendingComment()\n .run()\n }\n >\n Comment\n </ToolbarButton>\n )}\n </>\n );\n}\n\nfunction DefaultToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <ToolbarSectionHistory />\n <ToolbarSeparator />\n <ToolbarBlockSelector />\n <ToolbarSectionInline />\n {supportsThread ? (\n <>\n <ToolbarSeparator />\n <ToolbarSectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nexport const Toolbar = Object.assign(\n forwardRef<HTMLDivElement, ToolbarProps>(\n (\n {\n before,\n after,\n children = DefaultToolbarContent,\n editor,\n className,\n ...props\n },\n forwardedRef\n ) => {\n if (!editor) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return (\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <div\n ref={forwardedRef}\n role=\"toolbar\"\n aria-label=\"Toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\"lb-root lb-tiptap-toolbar\", className)}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </EditorProvider>\n </TooltipProvider>\n );\n }\n ),\n {\n Button: ToolbarButton,\n Toggle: ToolbarToggle,\n Separator: ToolbarSeparator,\n SectionHistory: ToolbarSectionHistory,\n SectionInline: ToolbarSectionInline,\n SectionCollaboration: ToolbarSectionCollaboration,\n BlockSelector: ToolbarBlockSelector,\n }\n);\n"],"names":["jsx","forwardRef","useContext","FloatingToolbarContext","useCallback","ShortcutTooltip","Button","TogglePrimitive","TextIcon","editor","H1Icon","H2Icon","H3Icon","ListUnorderedIcon","ListOrderedIcon","BlockquoteIcon","useCurrentEditor","useMemo","item","jsxs","SelectPrimitive","SelectButton","FloatingToolbarExternal","CheckIcon","classNames","Fragment","UndoIcon","RedoIcon","BoldIcon","ItalicIcon","UnderlineIcon","StrikethroughIcon","CodeIcon","CommentIcon","TooltipProvider","EditorProvider"],"mappings":"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"}
|
package/dist/toolbar/Toolbar.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { ShortcutTooltip, Button,
|
|
2
|
+
import { ShortcutTooltip, Button, TextIcon, H1Icon, H2Icon, H3Icon, ListUnorderedIcon, ListOrderedIcon, BlockquoteIcon, SelectButton, CheckIcon, UndoIcon, RedoIcon, BoldIcon, ItalicIcon, UnderlineIcon, StrikethroughIcon, CodeIcon, CommentIcon, TooltipProvider } from '@liveblocks/react-ui/_private';
|
|
3
3
|
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
4
4
|
import * as TogglePrimitive from '@radix-ui/react-toggle';
|
|
5
|
-
import { forwardRef, useContext, useMemo } from 'react';
|
|
5
|
+
import { forwardRef, useContext, useCallback, useMemo } from 'react';
|
|
6
6
|
import { classNames } from '../classnames.mjs';
|
|
7
7
|
import { useCurrentEditor, EditorProvider } from '../context.mjs';
|
|
8
8
|
import { FloatingToolbarContext, FloatingToolbarExternal } from './shared.mjs';
|
|
@@ -19,7 +19,20 @@ function applyToolbarSlot(slot, props) {
|
|
|
19
19
|
return slot;
|
|
20
20
|
}
|
|
21
21
|
const ToolbarButton = forwardRef(
|
|
22
|
-
({ icon, children, name, shortcut, ...props }, forwardedRef) => {
|
|
22
|
+
({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {
|
|
23
|
+
const floatingToolbarContext = useContext(FloatingToolbarContext);
|
|
24
|
+
const closeFloatingToolbar = floatingToolbarContext?.close;
|
|
25
|
+
const handleKeyDown = useCallback(
|
|
26
|
+
(event) => {
|
|
27
|
+
onKeyDown?.(event);
|
|
28
|
+
if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
|
|
29
|
+
closeFloatingToolbar();
|
|
30
|
+
event.preventDefault();
|
|
31
|
+
event.stopPropagation();
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
[onKeyDown, closeFloatingToolbar]
|
|
35
|
+
);
|
|
23
36
|
return /* @__PURE__ */ jsx(ShortcutTooltip, {
|
|
24
37
|
content: name,
|
|
25
38
|
shortcut,
|
|
@@ -29,6 +42,7 @@ const ToolbarButton = forwardRef(
|
|
|
29
42
|
ref: forwardedRef,
|
|
30
43
|
icon,
|
|
31
44
|
...props,
|
|
45
|
+
onKeyDown: handleKeyDown,
|
|
32
46
|
children
|
|
33
47
|
})
|
|
34
48
|
});
|
|
@@ -48,55 +62,76 @@ const ToolbarToggle = forwardRef(
|
|
|
48
62
|
);
|
|
49
63
|
function createDefaultBlockSelectorItems(editor) {
|
|
50
64
|
const items = [
|
|
65
|
+
{
|
|
66
|
+
name: "Text",
|
|
67
|
+
icon: /* @__PURE__ */ jsx(TextIcon, {}),
|
|
68
|
+
isActive: "default",
|
|
69
|
+
setActive: (editor2) => editor2.chain().focus().clearNodes().run()
|
|
70
|
+
},
|
|
51
71
|
"toggleHeading" in editor.commands ? {
|
|
52
72
|
name: "Heading 1",
|
|
73
|
+
icon: /* @__PURE__ */ jsx(H1Icon, {}),
|
|
53
74
|
isActive: (editor2) => editor2.isActive("heading", { level: 1 }),
|
|
54
75
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 1 }).run()
|
|
55
76
|
} : null,
|
|
56
77
|
"toggleHeading" in editor.commands ? {
|
|
57
78
|
name: "Heading 2",
|
|
79
|
+
icon: /* @__PURE__ */ jsx(H2Icon, {}),
|
|
58
80
|
isActive: (editor2) => editor2.isActive("heading", { level: 2 }),
|
|
59
81
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 2 }).run()
|
|
60
82
|
} : null,
|
|
61
83
|
"toggleHeading" in editor.commands ? {
|
|
62
84
|
name: "Heading 3",
|
|
85
|
+
icon: /* @__PURE__ */ jsx(H3Icon, {}),
|
|
63
86
|
isActive: (editor2) => editor2.isActive("heading", { level: 3 }),
|
|
64
87
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleHeading({ level: 3 }).run()
|
|
65
88
|
} : null,
|
|
66
89
|
"toggleBulletList" in editor.commands ? {
|
|
67
90
|
name: "Bullet list",
|
|
91
|
+
icon: /* @__PURE__ */ jsx(ListUnorderedIcon, {}),
|
|
68
92
|
isActive: (editor2) => editor2.isActive("bulletList"),
|
|
69
93
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleBulletList().run()
|
|
70
94
|
} : null,
|
|
71
95
|
"toggleOrderedList" in editor.commands ? {
|
|
72
96
|
name: "Numbered list",
|
|
97
|
+
icon: /* @__PURE__ */ jsx(ListOrderedIcon, {}),
|
|
73
98
|
isActive: (editor2) => editor2.isActive("orderedList"),
|
|
74
99
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleOrderedList().run()
|
|
75
100
|
} : null,
|
|
76
101
|
"toggleBlockquote" in editor.commands ? {
|
|
77
102
|
name: "Blockquote",
|
|
103
|
+
icon: /* @__PURE__ */ jsx(BlockquoteIcon, {}),
|
|
78
104
|
isActive: (editor2) => editor2.isActive("blockquote"),
|
|
79
105
|
setActive: (editor2) => editor2.chain().focus().clearNodes().toggleBlockquote().run()
|
|
80
106
|
} : null
|
|
81
107
|
];
|
|
82
108
|
return items.filter(Boolean);
|
|
83
109
|
}
|
|
84
|
-
const
|
|
85
|
-
name: "Text",
|
|
86
|
-
isActive: () => false,
|
|
87
|
-
setActive: (editor) => editor.chain().focus().clearNodes().run()
|
|
88
|
-
};
|
|
89
|
-
const ToolbarBlockSelector = forwardRef(({ items, ...props }, forwardedRef) => {
|
|
110
|
+
const ToolbarBlockSelector = forwardRef(({ items, onKeyDown, ...props }, forwardedRef) => {
|
|
90
111
|
const floatingToolbarContext = useContext(FloatingToolbarContext);
|
|
112
|
+
const closeFloatingToolbar = floatingToolbarContext?.close;
|
|
91
113
|
const editor = useCurrentEditor(
|
|
92
114
|
"BlockSelector",
|
|
93
115
|
"Toolbar or FloatingToolbar"
|
|
94
116
|
);
|
|
95
117
|
const resolvedItems = useMemo(() => {
|
|
96
|
-
|
|
97
|
-
|
|
118
|
+
if (Array.isArray(items)) {
|
|
119
|
+
return items;
|
|
120
|
+
}
|
|
121
|
+
const defaultItems = createDefaultBlockSelectorItems(editor);
|
|
122
|
+
return items ? items(defaultItems) : defaultItems;
|
|
98
123
|
}, [editor, items]);
|
|
99
|
-
|
|
124
|
+
let defaultItem;
|
|
125
|
+
let activeItem = editor.isInitialized ? resolvedItems.find((item) => {
|
|
126
|
+
if (item.isActive === "default") {
|
|
127
|
+
defaultItem = item;
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
return item.isActive(editor);
|
|
131
|
+
}) : void 0;
|
|
132
|
+
if (!activeItem) {
|
|
133
|
+
activeItem = defaultItem;
|
|
134
|
+
}
|
|
100
135
|
const handleItemChange = (name) => {
|
|
101
136
|
const item = resolvedItems.find((item2) => item2.name === name);
|
|
102
137
|
if (item) {
|
|
@@ -104,8 +139,19 @@ const ToolbarBlockSelector = forwardRef(({ items, ...props }, forwardedRef) => {
|
|
|
104
139
|
floatingToolbarContext?.close();
|
|
105
140
|
}
|
|
106
141
|
};
|
|
142
|
+
const handleKeyDown = useCallback(
|
|
143
|
+
(event) => {
|
|
144
|
+
onKeyDown?.(event);
|
|
145
|
+
if (!event.isDefaultPrevented() && closeFloatingToolbar && event.key === "Escape") {
|
|
146
|
+
closeFloatingToolbar();
|
|
147
|
+
event.preventDefault();
|
|
148
|
+
event.stopPropagation();
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
[onKeyDown, closeFloatingToolbar]
|
|
152
|
+
);
|
|
107
153
|
return /* @__PURE__ */ jsxs(SelectPrimitive.Root, {
|
|
108
|
-
value: activeItem
|
|
154
|
+
value: activeItem?.name,
|
|
109
155
|
onValueChange: handleItemChange,
|
|
110
156
|
children: [
|
|
111
157
|
/* @__PURE__ */ jsx(ShortcutTooltip, {
|
|
@@ -114,18 +160,11 @@ const ToolbarBlockSelector = forwardRef(({ items, ...props }, forwardedRef) => {
|
|
|
114
160
|
asChild: true,
|
|
115
161
|
...props,
|
|
116
162
|
ref: forwardedRef,
|
|
117
|
-
|
|
118
|
-
|
|
163
|
+
onKeyDown: handleKeyDown,
|
|
164
|
+
disabled: resolvedItems.length === 0,
|
|
165
|
+
children: /* @__PURE__ */ jsx(SelectButton, {
|
|
119
166
|
variant: "toolbar",
|
|
120
|
-
children:
|
|
121
|
-
/* @__PURE__ */ jsx(SelectPrimitive.Value, {
|
|
122
|
-
children: activeItem.name
|
|
123
|
-
}),
|
|
124
|
-
/* @__PURE__ */ jsx(SelectPrimitive.Icon, {
|
|
125
|
-
className: "lb-dropdown-chevron",
|
|
126
|
-
children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
|
|
127
|
-
})
|
|
128
|
-
]
|
|
167
|
+
children: activeItem?.name ?? "Turn into\u2026"
|
|
129
168
|
})
|
|
130
169
|
})
|
|
131
170
|
}),
|
|
@@ -140,13 +179,17 @@ const ToolbarBlockSelector = forwardRef(({ items, ...props }, forwardedRef) => {
|
|
|
140
179
|
value: item.name,
|
|
141
180
|
className: "lb-dropdown-item",
|
|
142
181
|
children: [
|
|
182
|
+
item.icon ? /* @__PURE__ */ jsx("span", {
|
|
183
|
+
className: "lb-dropdown-item-icon lb-icon-container",
|
|
184
|
+
children: item.icon
|
|
185
|
+
}) : null,
|
|
143
186
|
/* @__PURE__ */ jsx("span", {
|
|
144
187
|
className: "lb-dropdown-item-label",
|
|
145
188
|
children: /* @__PURE__ */ jsx(SelectPrimitive.ItemText, {
|
|
146
189
|
children: item.name
|
|
147
190
|
})
|
|
148
191
|
}),
|
|
149
|
-
item.name === activeItem
|
|
192
|
+
item.name === activeItem?.name ? /* @__PURE__ */ jsx("span", {
|
|
150
193
|
className: "lb-dropdown-item-accessory lb-icon-container",
|
|
151
194
|
children: /* @__PURE__ */ jsx(CheckIcon, {})
|
|
152
195
|
}) : null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbar.mjs","sources":["../../src/toolbar/Toolbar.tsx"],"sourcesContent":["import {\n BoldIcon,\n Button,\n CheckIcon,\n ChevronDownIcon,\n CodeIcon,\n CommentIcon,\n ItalicIcon,\n RedoIcon,\n ShortcutTooltip,\n StrikethroughIcon,\n TooltipProvider,\n UnderlineIcon,\n UndoIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport type { Editor } from \"@tiptap/react\";\nimport type { ComponentProps, ComponentType, ReactNode } from \"react\";\nimport { forwardRef, useContext, useMemo } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type { ExtendedChainedCommands } from \"../types\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\n\nexport const BLOCK_SELECT_SIDE_OFFSET = 10;\nexport const FLOATING_ELEMENT_COLLISION_PADDING = 10;\n\nexport interface ToolbarSlotProps {\n editor: Editor;\n}\n\nexport type ToolbarSlot = ReactNode | ComponentType<ToolbarSlotProps>;\n\nexport interface ToolbarProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n editor: Editor | null;\n children?: ToolbarSlot;\n before?: ToolbarSlot;\n after?: ToolbarSlot;\n}\n\ninterface ToolbarButtonProps extends ComponentProps<\"button\"> {\n icon?: ReactNode;\n name: string;\n shortcut?: string;\n}\n\ninterface ToolbarToggleProps extends ToolbarButtonProps {\n active: boolean;\n}\n\ninterface ToolbarBlockSelectorItem {\n name: string;\n isActive: (editor: Editor) => boolean;\n setActive: (editor: Editor) => void;\n}\n\ninterface ToolbarBlockSelectorProps extends ComponentProps<\"button\"> {\n items?: ToolbarBlockSelectorItem[];\n}\n\ntype ToolbarSeparatorProps = ComponentProps<\"div\">;\n\nexport function applyToolbarSlot(\n slot: ToolbarSlot,\n props: ToolbarSlotProps\n): ReactNode {\n if (typeof slot === \"function\") {\n const Component = slot;\n\n return <Component {...props} />;\n }\n\n return slot;\n}\n\nconst ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n ({ icon, children, name, shortcut, ...props }, forwardedRef) => {\n return (\n <ShortcutTooltip content={name} shortcut={shortcut}>\n <Button\n type=\"button\"\n variant=\"toolbar\"\n ref={forwardedRef}\n icon={icon}\n {...props}\n >\n {children}\n </Button>\n </ShortcutTooltip>\n );\n }\n);\n\nconst ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>(\n ({ active, ...props }, forwardedRef) => {\n return (\n <TogglePrimitive.Root asChild pressed={active}>\n <ToolbarButton ref={forwardedRef} {...props} />\n </TogglePrimitive.Root>\n );\n }\n);\n\nfunction createDefaultBlockSelectorItems(\n editor: Editor\n): ToolbarBlockSelectorItem[] {\n const items: (ToolbarBlockSelectorItem | null)[] = [\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 1\",\n isActive: (editor) => editor.isActive(\"heading\", { level: 1 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 1 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 2\",\n isActive: (editor) => editor.isActive(\"heading\", { level: 2 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 2 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 3\",\n isActive: (editor) => editor.isActive(\"heading\", { level: 3 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 3 })\n .run(),\n }\n : null,\n \"toggleBulletList\" in editor.commands\n ? {\n name: \"Bullet list\",\n isActive: (editor) => editor.isActive(\"bulletList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBulletList\">\n )\n .toggleBulletList()\n .run(),\n }\n : null,\n \"toggleOrderedList\" in editor.commands\n ? {\n name: \"Numbered list\",\n\n isActive: (editor) => editor.isActive(\"orderedList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleOrderedList\">\n )\n .toggleOrderedList()\n .run(),\n }\n : null,\n \"toggleBlockquote\" in editor.commands\n ? {\n name: \"Blockquote\",\n isActive: (editor) => editor.isActive(\"blockquote\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBlockquote\">\n )\n .toggleBlockquote()\n .run(),\n }\n : null,\n ];\n\n return items.filter(Boolean) as ToolbarBlockSelectorItem[];\n}\n\nconst blockSelectorTextItem: ToolbarBlockSelectorItem = {\n name: \"Text\",\n isActive: () => false,\n setActive: (editor) => editor.chain().focus().clearNodes().run(),\n};\n\nconst ToolbarBlockSelector = forwardRef<\n HTMLButtonElement,\n ToolbarBlockSelectorProps\n>(({ items, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const editor = useCurrentEditor(\n \"BlockSelector\",\n \"Toolbar or FloatingToolbar\"\n );\n const resolvedItems = useMemo(() => {\n const resolvedItems = items ?? createDefaultBlockSelectorItems(editor);\n\n return [blockSelectorTextItem, ...resolvedItems];\n }, [editor, items]);\n const activeItem =\n resolvedItems.find((item) => item.isActive(editor)) ??\n blockSelectorTextItem;\n\n const handleItemChange = (name: string) => {\n const item = resolvedItems.find((item) => item.name === name);\n\n if (item) {\n item.setActive(editor);\n\n // If present in a floating toolbar, close it on change\n floatingToolbarContext?.close();\n }\n };\n\n return (\n <SelectPrimitive.Root\n value={activeItem.name}\n onValueChange={handleItemChange}\n >\n <ShortcutTooltip content=\"Turn into…\">\n <SelectPrimitive.Trigger asChild {...props} ref={forwardedRef}>\n <Button type=\"button\" variant=\"toolbar\">\n <SelectPrimitive.Value>{activeItem.name}</SelectPrimitive.Value>\n <SelectPrimitive.Icon className=\"lb-dropdown-chevron\">\n <ChevronDownIcon />\n </SelectPrimitive.Icon>\n </Button>\n </SelectPrimitive.Trigger>\n </ShortcutTooltip>\n <SelectPrimitive.Portal>\n <FloatingToolbarExternal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={BLOCK_SELECT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n className=\"lb-root lb-portal lb-elevation lb-dropdown\"\n >\n {resolvedItems.map((item) => (\n <SelectPrimitive.Item\n key={item.name}\n value={item.name}\n className=\"lb-dropdown-item\"\n >\n <span className=\"lb-dropdown-item-label\">\n <SelectPrimitive.ItemText>\n {item.name}\n </SelectPrimitive.ItemText>\n </span>\n {item.name === activeItem.name ? (\n <span className=\"lb-dropdown-item-accessory lb-icon-container\">\n <CheckIcon />\n </span>\n ) : null}\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Content>\n </FloatingToolbarExternal>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n});\n\nconst ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(\n ({ className, ...props }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={classNames(\"lb-tiptap-toolbar-separator\", className)}\n {...props}\n />\n );\n }\n);\n\nfunction ToolbarSectionHistory() {\n const editor = useCurrentEditor(\n \"SectionHistory\",\n \"Toolbar or FloatingToolbar\"\n );\n\n return (\n <>\n <ToolbarButton\n name=\"Undo\"\n icon={<UndoIcon />}\n shortcut=\"Mod-Z\"\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().chain().focus().undo().run()}\n />\n <ToolbarButton\n name=\"Redo\"\n icon={<RedoIcon />}\n shortcut=\"Mod-Shift-Z\"\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().chain().focus().redo().run()}\n />\n </>\n );\n}\n\nfunction ToolbarSectionInline() {\n const editor = useCurrentEditor(\n \"SectionInline\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsBold = \"toggleBold\" in editor.commands;\n const supportsItalic = \"toggleItalic\" in editor.commands;\n const supportsUnderline = \"toggleUnderline\" in editor.commands;\n const supportsStrike = \"toggleStrike\" in editor.commands;\n const supportsCode = \"toggleCode\" in editor.commands;\n\n return (\n <>\n {supportsBold && (\n <ToolbarToggle\n name=\"Bold\"\n icon={<BoldIcon />}\n shortcut=\"Mod-B\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleBold\">)\n .toggleBold()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleBold\">\n )\n .toggleBold()\n .run()\n }\n active={editor.isActive(\"bold\")}\n />\n )}\n {supportsItalic && (\n <ToolbarToggle\n name=\"Italic\"\n icon={<ItalicIcon />}\n shortcut=\"Mod-I\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleItalic\">)\n .toggleItalic()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleItalic\">\n )\n .toggleItalic()\n .run()\n }\n active={editor.isActive(\"italic\")}\n />\n )}\n {supportsUnderline && (\n <ToolbarToggle\n name=\"Underline\"\n icon={<UnderlineIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n active={editor.isActive(\"underline\")}\n />\n )}\n {supportsStrike && (\n <ToolbarToggle\n name=\"Strikethrough\"\n icon={<StrikethroughIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleStrike\">)\n .toggleStrike()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleStrike\">\n )\n .toggleStrike()\n .run()\n }\n active={editor.isActive(\"strike\")}\n />\n )}\n {supportsCode && (\n <ToolbarToggle\n name=\"Inline code\"\n icon={<CodeIcon />}\n shortcut=\"Mod-E\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleCode\">)\n .toggleCode()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleCode\">\n )\n .toggleCode()\n .run()\n }\n active={editor.isActive(\"code\")}\n />\n )}\n </>\n );\n}\n\nfunction ToolbarSectionCollaboration() {\n const editor = useCurrentEditor(\n \"SectionCollaboration\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n {supportsThread && (\n <ToolbarButton\n name=\"Add a comment\"\n icon={<CommentIcon />}\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"addPendingComment\">\n )\n .addPendingComment()\n .run()\n }\n >\n Comment\n </ToolbarButton>\n )}\n </>\n );\n}\n\nfunction DefaultToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <ToolbarSectionHistory />\n <ToolbarSeparator />\n <ToolbarBlockSelector />\n <ToolbarSectionInline />\n {supportsThread ? (\n <>\n <ToolbarSeparator />\n <ToolbarSectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nexport const Toolbar = Object.assign(\n forwardRef<HTMLDivElement, ToolbarProps>(\n (\n {\n before,\n after,\n children = DefaultToolbarContent,\n editor,\n className,\n ...props\n },\n forwardedRef\n ) => {\n if (!editor) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return (\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <div\n ref={forwardedRef}\n role=\"toolbar\"\n aria-label=\"Toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\"lb-root lb-tiptap-toolbar\", className)}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </EditorProvider>\n </TooltipProvider>\n );\n }\n ),\n {\n Button: ToolbarButton,\n Toggle: ToolbarToggle,\n Separator: ToolbarSeparator,\n SectionHistory: ToolbarSectionHistory,\n SectionInline: ToolbarSectionInline,\n SectionCollaboration: ToolbarSectionCollaboration,\n BlockSelector: ToolbarBlockSelector,\n }\n);\n"],"names":["editor","resolvedItems","item"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Toolbar.mjs","sources":["../../src/toolbar/Toolbar.tsx"],"sourcesContent":["import {\n BlockquoteIcon,\n BoldIcon,\n Button,\n CheckIcon,\n CodeIcon,\n CommentIcon,\n H1Icon,\n H2Icon,\n H3Icon,\n ItalicIcon,\n ListOrderedIcon,\n ListUnorderedIcon,\n RedoIcon,\n SelectButton,\n ShortcutTooltip,\n StrikethroughIcon,\n TextIcon,\n TooltipProvider,\n UnderlineIcon,\n UndoIcon,\n} from \"@liveblocks/react-ui/_private\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport type { Editor } from \"@tiptap/react\";\nimport type {\n ComponentProps,\n ComponentType,\n KeyboardEvent,\n ReactNode,\n} from \"react\";\nimport { forwardRef, useCallback, useContext, useMemo } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { EditorProvider, useCurrentEditor } from \"../context\";\nimport type { ExtendedChainedCommands } from \"../types\";\nimport { FloatingToolbarContext, FloatingToolbarExternal } from \"./shared\";\n\nexport const BLOCK_SELECT_SIDE_OFFSET = 10;\nexport const FLOATING_ELEMENT_COLLISION_PADDING = 10;\n\nexport interface ToolbarSlotProps {\n editor: Editor;\n}\n\nexport type ToolbarSlot = ReactNode | ComponentType<ToolbarSlotProps>;\n\nexport interface ToolbarProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n editor: Editor | null;\n children?: ToolbarSlot;\n before?: ToolbarSlot;\n after?: ToolbarSlot;\n}\n\ninterface ToolbarButtonProps extends ComponentProps<\"button\"> {\n icon?: ReactNode;\n name: string;\n shortcut?: string;\n}\n\ninterface ToolbarToggleProps extends ToolbarButtonProps {\n active: boolean;\n}\n\ninterface ToolbarBlockSelectorItem {\n name: string;\n icon?: ReactNode;\n isActive: ((editor: Editor) => boolean) | \"default\";\n setActive: (editor: Editor) => void;\n}\n\ninterface ToolbarBlockSelectorProps extends ComponentProps<\"button\"> {\n items?:\n | ToolbarBlockSelectorItem[]\n | ((\n defaultItems: ToolbarBlockSelectorItem[]\n ) => ToolbarBlockSelectorItem[]);\n}\n\ntype ToolbarSeparatorProps = ComponentProps<\"div\">;\n\nexport function applyToolbarSlot(\n slot: ToolbarSlot,\n props: ToolbarSlotProps\n): ReactNode {\n if (typeof slot === \"function\") {\n const Component = slot;\n\n return <Component {...props} />;\n }\n\n return slot;\n}\n\nconst ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n ({ icon, children, name, shortcut, onKeyDown, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const closeFloatingToolbar = floatingToolbarContext?.close;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n\n if (\n !event.isDefaultPrevented() &&\n closeFloatingToolbar &&\n event.key === \"Escape\"\n ) {\n closeFloatingToolbar();\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [onKeyDown, closeFloatingToolbar]\n );\n\n return (\n <ShortcutTooltip content={name} shortcut={shortcut}>\n <Button\n type=\"button\"\n variant=\"toolbar\"\n ref={forwardedRef}\n icon={icon}\n {...props}\n onKeyDown={handleKeyDown}\n >\n {children}\n </Button>\n </ShortcutTooltip>\n );\n }\n);\n\nconst ToolbarToggle = forwardRef<HTMLButtonElement, ToolbarToggleProps>(\n ({ active, ...props }, forwardedRef) => {\n return (\n <TogglePrimitive.Root asChild pressed={active}>\n <ToolbarButton ref={forwardedRef} {...props} />\n </TogglePrimitive.Root>\n );\n }\n);\n\nfunction createDefaultBlockSelectorItems(\n editor: Editor\n): ToolbarBlockSelectorItem[] {\n const items: (ToolbarBlockSelectorItem | null)[] = [\n {\n name: \"Text\",\n icon: <TextIcon />,\n isActive: \"default\",\n setActive: (editor) => editor.chain().focus().clearNodes().run(),\n },\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 1\",\n icon: <H1Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 1 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 1 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 2\",\n icon: <H2Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 2 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 2 })\n .run(),\n }\n : null,\n \"toggleHeading\" in editor.commands\n ? {\n name: \"Heading 3\",\n icon: <H3Icon />,\n isActive: (editor) => editor.isActive(\"heading\", { level: 3 }),\n setActive: (editor) =>\n (\n editor.chain().focus().clearNodes() as ExtendedChainedCommands<\n \"toggleHeading\",\n [{ level: number }]\n >\n )\n .toggleHeading({ level: 3 })\n .run(),\n }\n : null,\n \"toggleBulletList\" in editor.commands\n ? {\n name: \"Bullet list\",\n icon: <ListUnorderedIcon />,\n isActive: (editor) => editor.isActive(\"bulletList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBulletList\">\n )\n .toggleBulletList()\n .run(),\n }\n : null,\n \"toggleOrderedList\" in editor.commands\n ? {\n name: \"Numbered list\",\n icon: <ListOrderedIcon />,\n isActive: (editor) => editor.isActive(\"orderedList\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleOrderedList\">\n )\n .toggleOrderedList()\n .run(),\n }\n : null,\n \"toggleBlockquote\" in editor.commands\n ? {\n name: \"Blockquote\",\n icon: <BlockquoteIcon />,\n isActive: (editor) => editor.isActive(\"blockquote\"),\n setActive: (editor) =>\n (\n editor\n .chain()\n .focus()\n .clearNodes() as ExtendedChainedCommands<\"toggleBlockquote\">\n )\n .toggleBlockquote()\n .run(),\n }\n : null,\n ];\n\n return items.filter(Boolean) as ToolbarBlockSelectorItem[];\n}\n\nconst ToolbarBlockSelector = forwardRef<\n HTMLButtonElement,\n ToolbarBlockSelectorProps\n>(({ items, onKeyDown, ...props }, forwardedRef) => {\n const floatingToolbarContext = useContext(FloatingToolbarContext);\n const closeFloatingToolbar = floatingToolbarContext?.close;\n const editor = useCurrentEditor(\n \"BlockSelector\",\n \"Toolbar or FloatingToolbar\"\n );\n const resolvedItems = useMemo(() => {\n if (Array.isArray(items)) {\n return items;\n }\n\n const defaultItems = createDefaultBlockSelectorItems(editor);\n\n return items ? items(defaultItems) : defaultItems;\n }, [editor, items]);\n let defaultItem: ToolbarBlockSelectorItem | undefined;\n let activeItem = editor.isInitialized\n ? resolvedItems.find((item) => {\n if (item.isActive === \"default\") {\n defaultItem = item;\n return false;\n }\n\n return item.isActive(editor);\n })\n : undefined;\n\n if (!activeItem) {\n activeItem = defaultItem;\n }\n\n const handleItemChange = (name: string) => {\n const item = resolvedItems.find((item) => item.name === name);\n\n if (item) {\n item.setActive(editor);\n\n // If present in a floating toolbar, close it on change\n floatingToolbarContext?.close();\n }\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n\n if (\n !event.isDefaultPrevented() &&\n closeFloatingToolbar &&\n event.key === \"Escape\"\n ) {\n closeFloatingToolbar();\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [onKeyDown, closeFloatingToolbar]\n );\n\n return (\n <SelectPrimitive.Root\n value={activeItem?.name}\n onValueChange={handleItemChange}\n >\n <ShortcutTooltip content=\"Turn into…\">\n <SelectPrimitive.Trigger\n asChild\n {...props}\n ref={forwardedRef}\n onKeyDown={handleKeyDown}\n disabled={resolvedItems.length === 0}\n >\n <SelectButton variant=\"toolbar\">\n {activeItem?.name ?? \"Turn into…\"}\n </SelectButton>\n </SelectPrimitive.Trigger>\n </ShortcutTooltip>\n <SelectPrimitive.Portal>\n <FloatingToolbarExternal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={BLOCK_SELECT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n className=\"lb-root lb-portal lb-elevation lb-dropdown\"\n >\n {resolvedItems.map((item) => (\n <SelectPrimitive.Item\n key={item.name}\n value={item.name}\n className=\"lb-dropdown-item\"\n >\n {item.icon ? (\n <span className=\"lb-dropdown-item-icon lb-icon-container\">\n {item.icon}\n </span>\n ) : null}\n <span className=\"lb-dropdown-item-label\">\n <SelectPrimitive.ItemText>\n {item.name}\n </SelectPrimitive.ItemText>\n </span>\n {item.name === activeItem?.name ? (\n <span className=\"lb-dropdown-item-accessory lb-icon-container\">\n <CheckIcon />\n </span>\n ) : null}\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Content>\n </FloatingToolbarExternal>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n );\n});\n\nconst ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(\n ({ className, ...props }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={classNames(\"lb-tiptap-toolbar-separator\", className)}\n {...props}\n />\n );\n }\n);\n\nfunction ToolbarSectionHistory() {\n const editor = useCurrentEditor(\n \"SectionHistory\",\n \"Toolbar or FloatingToolbar\"\n );\n\n return (\n <>\n <ToolbarButton\n name=\"Undo\"\n icon={<UndoIcon />}\n shortcut=\"Mod-Z\"\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().chain().focus().undo().run()}\n />\n <ToolbarButton\n name=\"Redo\"\n icon={<RedoIcon />}\n shortcut=\"Mod-Shift-Z\"\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().chain().focus().redo().run()}\n />\n </>\n );\n}\n\nfunction ToolbarSectionInline() {\n const editor = useCurrentEditor(\n \"SectionInline\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsBold = \"toggleBold\" in editor.commands;\n const supportsItalic = \"toggleItalic\" in editor.commands;\n const supportsUnderline = \"toggleUnderline\" in editor.commands;\n const supportsStrike = \"toggleStrike\" in editor.commands;\n const supportsCode = \"toggleCode\" in editor.commands;\n\n return (\n <>\n {supportsBold && (\n <ToolbarToggle\n name=\"Bold\"\n icon={<BoldIcon />}\n shortcut=\"Mod-B\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleBold\">)\n .toggleBold()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleBold\">\n )\n .toggleBold()\n .run()\n }\n active={editor.isActive(\"bold\")}\n />\n )}\n {supportsItalic && (\n <ToolbarToggle\n name=\"Italic\"\n icon={<ItalicIcon />}\n shortcut=\"Mod-I\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleItalic\">)\n .toggleItalic()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleItalic\">\n )\n .toggleItalic()\n .run()\n }\n active={editor.isActive(\"italic\")}\n />\n )}\n {supportsUnderline && (\n <ToolbarToggle\n name=\"Underline\"\n icon={<UnderlineIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleUnderline\">\n )\n .toggleUnderline()\n .run()\n }\n active={editor.isActive(\"underline\")}\n />\n )}\n {supportsStrike && (\n <ToolbarToggle\n name=\"Strikethrough\"\n icon={<StrikethroughIcon />}\n shortcut=\"Mod-U\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleStrike\">)\n .toggleStrike()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleStrike\">\n )\n .toggleStrike()\n .run()\n }\n active={editor.isActive(\"strike\")}\n />\n )}\n {supportsCode && (\n <ToolbarToggle\n name=\"Inline code\"\n icon={<CodeIcon />}\n shortcut=\"Mod-E\"\n onClick={() =>\n (editor.chain().focus() as ExtendedChainedCommands<\"toggleCode\">)\n .toggleCode()\n .run()\n }\n disabled={\n !(\n editor\n .can()\n .chain()\n .focus() as ExtendedChainedCommands<\"toggleCode\">\n )\n .toggleCode()\n .run()\n }\n active={editor.isActive(\"code\")}\n />\n )}\n </>\n );\n}\n\nfunction ToolbarSectionCollaboration() {\n const editor = useCurrentEditor(\n \"SectionCollaboration\",\n \"Toolbar or FloatingToolbar\"\n );\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n {supportsThread && (\n <ToolbarButton\n name=\"Add a comment\"\n icon={<CommentIcon />}\n onClick={() =>\n (\n editor\n .chain()\n .focus() as ExtendedChainedCommands<\"addPendingComment\">\n )\n .addPendingComment()\n .run()\n }\n >\n Comment\n </ToolbarButton>\n )}\n </>\n );\n}\n\nfunction DefaultToolbarContent({ editor }: ToolbarSlotProps) {\n const supportsThread = \"addPendingComment\" in editor.commands;\n\n return (\n <>\n <ToolbarSectionHistory />\n <ToolbarSeparator />\n <ToolbarBlockSelector />\n <ToolbarSectionInline />\n {supportsThread ? (\n <>\n <ToolbarSeparator />\n <ToolbarSectionCollaboration />\n </>\n ) : null}\n </>\n );\n}\n\nexport const Toolbar = Object.assign(\n forwardRef<HTMLDivElement, ToolbarProps>(\n (\n {\n before,\n after,\n children = DefaultToolbarContent,\n editor,\n className,\n ...props\n },\n forwardedRef\n ) => {\n if (!editor) {\n return null;\n }\n\n const slotProps: ToolbarSlotProps = { editor };\n\n return (\n <TooltipProvider>\n <EditorProvider editor={editor}>\n <div\n ref={forwardedRef}\n role=\"toolbar\"\n aria-label=\"Toolbar\"\n aria-orientation=\"horizontal\"\n className={classNames(\"lb-root lb-tiptap-toolbar\", className)}\n {...props}\n >\n {applyToolbarSlot(before, slotProps)}\n {applyToolbarSlot(children, slotProps)}\n {applyToolbarSlot(after, slotProps)}\n </div>\n </EditorProvider>\n </TooltipProvider>\n );\n }\n ),\n {\n Button: ToolbarButton,\n Toggle: ToolbarToggle,\n Separator: ToolbarSeparator,\n SectionHistory: ToolbarSectionHistory,\n SectionInline: ToolbarSectionInline,\n SectionCollaboration: ToolbarSectionCollaboration,\n BlockSelector: ToolbarBlockSelector,\n }\n);\n"],"names":["editor","item"],"mappings":"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"}
|
package/dist/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const PKG_NAME = "@liveblocks/react-tiptap";
|
|
4
|
-
const PKG_VERSION = typeof "2.16.0-
|
|
4
|
+
const PKG_VERSION = typeof "2.16.0-toolbars3" === "string" && "2.16.0-toolbars3";
|
|
5
5
|
const PKG_FORMAT = typeof "cjs" === "string" && "cjs";
|
|
6
6
|
|
|
7
7
|
exports.PKG_FORMAT = PKG_FORMAT;
|
package/dist/version.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const PKG_NAME = "@liveblocks/react-tiptap";
|
|
2
|
-
const PKG_VERSION = typeof "2.16.0-
|
|
2
|
+
const PKG_VERSION = typeof "2.16.0-toolbars3" === "string" && "2.16.0-toolbars3";
|
|
3
3
|
const PKG_FORMAT = typeof "esm" === "string" && "esm";
|
|
4
4
|
|
|
5
5
|
export { PKG_FORMAT, PKG_NAME, PKG_VERSION };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liveblocks/react-tiptap",
|
|
3
|
-
"version": "2.16.0-
|
|
3
|
+
"version": "2.16.0-toolbars3",
|
|
4
4
|
"description": "A tiptap react plugin to enable collaboration, comments, live cursors, and more.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -42,11 +42,11 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@floating-ui/react-dom": "^2.1.2",
|
|
45
|
-
"@liveblocks/client": "2.16.0-
|
|
46
|
-
"@liveblocks/core": "2.16.0-
|
|
47
|
-
"@liveblocks/react": "2.16.0-
|
|
48
|
-
"@liveblocks/react-ui": "2.16.0-
|
|
49
|
-
"@liveblocks/yjs": "2.16.0-
|
|
45
|
+
"@liveblocks/client": "2.16.0-toolbars3",
|
|
46
|
+
"@liveblocks/core": "2.16.0-toolbars3",
|
|
47
|
+
"@liveblocks/react": "2.16.0-toolbars3",
|
|
48
|
+
"@liveblocks/react-ui": "2.16.0-toolbars3",
|
|
49
|
+
"@liveblocks/yjs": "2.16.0-toolbars3",
|
|
50
50
|
"@radix-ui/react-select": "^2.1.2",
|
|
51
51
|
"@radix-ui/react-toggle": "^1.1.0",
|
|
52
52
|
"@tiptap/core": "^2.7.2",
|