@payloadcms/richtext-lexical 4.0.0-beta.2 → 4.0.0-beta.4

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.
Files changed (159) hide show
  1. package/dist/exports/client/Field-334JNLRF.js +2 -0
  2. package/dist/exports/client/Field-334JNLRF.js.map +7 -0
  3. package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js → RelationshipComponent-TVK6I4W4.js} +2 -2
  4. package/dist/exports/client/chunk-BEKGION5.js +2 -0
  5. package/dist/exports/client/chunk-BEKGION5.js.map +7 -0
  6. package/dist/exports/client/{chunk-WSAPGI3Z.js → chunk-EA5BHQ2T.js} +1 -1
  7. package/dist/exports/client/{chunk-WSAPGI3Z.js.map → chunk-EA5BHQ2T.js.map} +1 -1
  8. package/dist/exports/client/chunk-FAJJXXCW.js +2 -0
  9. package/dist/exports/client/{chunk-3LRZDIIG.js.map → chunk-FAJJXXCW.js.map} +2 -2
  10. package/dist/exports/client/{chunk-5VIL27GI.js → chunk-IYBYNEKX.js} +1 -1
  11. package/dist/exports/client/{chunk-5VIL27GI.js.map → chunk-IYBYNEKX.js.map} +1 -1
  12. package/dist/exports/client/chunk-SE5IITBK.js +2 -0
  13. package/dist/exports/client/chunk-SE5IITBK.js.map +7 -0
  14. package/dist/exports/client/{component-6DQLENIE.js → component-QENB4QTS.js} +2 -2
  15. package/dist/exports/client/componentInline-AU7IBNY7.js +2 -0
  16. package/dist/exports/client/index.js +27 -27
  17. package/dist/exports/client/index.js.map +3 -3
  18. package/dist/features/align/client/index.js.map +1 -1
  19. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  20. package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
  21. package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -1
  22. package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -1
  23. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  24. package/dist/features/blocks/client/component/index.js +38 -16
  25. package/dist/features/blocks/client/component/index.js.map +1 -1
  26. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
  27. package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -1
  28. package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -1
  29. package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -1
  30. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  31. package/dist/features/blocks/client/componentInline/index.js +5 -11
  32. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  33. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js.map +1 -1
  34. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  35. package/dist/features/blocks/premade/CodeBlock/Component/Block.js +121 -78
  36. package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
  37. package/dist/features/blocks/premade/CodeBlock/Component/Code.js +142 -87
  38. package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -1
  39. package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -1
  40. package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -1
  41. package/dist/features/debug/jsxConverter/client/plugin/index.js.map +1 -1
  42. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  43. package/dist/features/debug/treeView/client/plugin/index.js.map +1 -1
  44. package/dist/features/heading/client/index.js.map +1 -1
  45. package/dist/features/horizontalRule/client/plugin/index.js.map +1 -1
  46. package/dist/features/indent/client/index.d.ts.map +1 -1
  47. package/dist/features/indent/client/index.js +0 -2
  48. package/dist/features/indent/client/index.js.map +1 -1
  49. package/dist/features/indent/server/i18n.d.ts.map +1 -1
  50. package/dist/features/indent/server/i18n.js.map +1 -1
  51. package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
  52. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  53. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +10 -2
  54. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  55. package/dist/features/link/client/plugins/link/index.js.map +1 -1
  56. package/dist/features/link/markdownTransformer.js +2 -2
  57. package/dist/features/link/markdownTransformer.js.map +1 -1
  58. package/dist/features/link/server/baseFields.js.map +1 -1
  59. package/dist/features/lists/shared/schema.d.ts.map +1 -1
  60. package/dist/features/lists/shared/schema.js.map +1 -1
  61. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  62. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  63. package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
  64. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.css +1 -1
  65. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  66. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js +6 -6
  67. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  68. package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  69. package/dist/features/table/client/plugins/TablePlugin/index.js +54 -18
  70. package/dist/features/table/client/plugins/TablePlugin/index.js.map +1 -1
  71. package/dist/features/table/client/utils/useDebounce.js.map +1 -1
  72. package/dist/features/textState/defaultColors.js +1 -1
  73. package/dist/features/textState/defaultColors.js.map +1 -1
  74. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js.map +1 -1
  75. package/dist/features/toolbars/fixed/client/Toolbar/index.js +126 -70
  76. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  77. package/dist/features/toolbars/inline/client/Toolbar/index.js +67 -35
  78. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  79. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  80. package/dist/features/toolbars/shared/ToolbarButton/index.js +26 -2
  81. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  82. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +137 -72
  83. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  84. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  85. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +22 -6
  86. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  87. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js +100 -70
  88. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js.map +1 -1
  89. package/dist/features/upload/client/drawer/index.js.map +1 -1
  90. package/dist/features/upload/client/plugin/index.js.map +1 -1
  91. package/dist/field/RenderLexical/index.js.map +1 -1
  92. package/dist/field/ViewSelector.js +12 -4
  93. package/dist/field/ViewSelector.js.map +1 -1
  94. package/dist/field/bundled.css +1 -1
  95. package/dist/field/index.js.map +1 -1
  96. package/dist/i18n.d.ts.map +1 -1
  97. package/dist/i18n.js +44 -0
  98. package/dist/i18n.js.map +1 -1
  99. package/dist/lexical/LexicalEditor.js.map +1 -1
  100. package/dist/lexical/plugins/ClipboardPlugin/index.js.map +1 -1
  101. package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
  102. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
  103. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  104. package/dist/lexical/plugins/NodeViewOverridePlugin/index.js.map +1 -1
  105. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +234 -87
  106. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  107. package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
  108. package/dist/lexical/plugins/TextPlugin/index.js.map +1 -1
  109. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  110. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +16 -0
  111. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  112. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +126 -38
  113. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  114. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts +7 -0
  115. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts.map +1 -0
  116. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js +15 -0
  117. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js.map +1 -0
  118. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -1
  119. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +9 -12
  120. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -1
  121. package/dist/lexical/ui/ContentEditable.js.map +1 -1
  122. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  123. package/dist/lexical/utils/nodeFormat.js +0 -2
  124. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  125. package/dist/lexical/utils/url.d.ts.map +1 -1
  126. package/dist/lexical/utils/url.js +1 -1
  127. package/dist/lexical/utils/url.js.map +1 -1
  128. package/dist/populateGraphQL/populate.js.map +1 -1
  129. package/dist/types/index.d.ts.map +1 -1
  130. package/dist/types/index.js.map +1 -1
  131. package/dist/utilities/buildEditorState.d.ts.map +1 -1
  132. package/dist/utilities/buildEditorState.js.map +1 -1
  133. package/dist/utilities/fieldsDrawer/Drawer.js +36 -36
  134. package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
  135. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  136. package/dist/utilities/fieldsDrawer/DrawerContent.js +6 -9
  137. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  138. package/dist/utilities/fieldsDrawer/useDrawerSubmit.js.map +1 -1
  139. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -1
  140. package/dist/utilities/fieldsDrawer/useLexicalDrawer.js.map +1 -1
  141. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -1
  142. package/dist/utilities/initLexicalFeatures.d.ts.map +1 -1
  143. package/dist/utilities/initLexicalFeatures.js +38 -4
  144. package/dist/utilities/initLexicalFeatures.js.map +1 -1
  145. package/dist/utilities/useLexicalFeature.js +15 -6
  146. package/dist/utilities/useLexicalFeature.js.map +1 -1
  147. package/dist/utilities/useRunDeprioritized.js.map +1 -1
  148. package/package.json +32 -35
  149. package/dist/exports/client/Field-W2ABOM7M.js +0 -2
  150. package/dist/exports/client/Field-W2ABOM7M.js.map +0 -7
  151. package/dist/exports/client/chunk-3LRZDIIG.js +0 -2
  152. package/dist/exports/client/chunk-E6LSRRP2.js +0 -2
  153. package/dist/exports/client/chunk-E6LSRRP2.js.map +0 -7
  154. package/dist/exports/client/chunk-ZQX5HXUL.js +0 -2
  155. package/dist/exports/client/chunk-ZQX5HXUL.js.map +0 -7
  156. package/dist/exports/client/componentInline-HNE5G4TE.js +0 -2
  157. /package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js.map → RelationshipComponent-TVK6I4W4.js.map} +0 -0
  158. /package/dist/exports/client/{component-6DQLENIE.js.map → component-QENB4QTS.js.map} +0 -0
  159. /package/dist/exports/client/{componentInline-HNE5G4TE.js.map → componentInline-AU7IBNY7.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","getTranslation","useScrollInfo","useThrottledEffect","useTranslation","React","useMemo","useEditorConfigContext","ToolbarButton","ToolbarDropdown","useToolbarKeyboardNavigation","useToolbarStates","useRedirectVerticalWheelToHorizontalScroll","ButtonGroupItem","active","anchorElem","editor","enabled","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","editorConfig","group","index","toolbarStates","i18n","fieldProps","featureClientSchemaMap","schemaPath","groupState","groupStates","get","DropdownIcon","type","undefined","activeItem","activeItems","dropdownLabel","length","t","count","label","substring","_jsxs","className","items","Icon","itemsContainerClassNames","map","itemState","itemStates","features","toolbarFixed","groups","FixedToolbar","clientProps","parentWithFixedToolbar","currentToolbarRef","useRef","keyboardNavigationOptions","toolbarRef","isEditable","y","parentToolbarElem","disableIfParentHasFixedToolbar","parentEditorElem","editorContainerRef","current","sibling","previousElementSibling","classList","contains","currentToolbarElem","currentRect","getBoundingClientRect","parentRect","overlapping","bottom","top","remove","add","field","path","onFocus","event","stopPropagation","ref","role","tabIndex","i","getParentEditorWithFixedToolbar","editorConfigContext","parentEditor","resolvedFeatureMap","has","FixedToolbarPlugin","t0","$","currentEditor","currentEditorConfig","applyToFocusedEditor","focusedEditor","t1","t2","Symbol","for","bb0","document","body"],"sources":["../../../../../../src/features/toolbars/fixed/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useScrollInfo, useThrottledEffect, useTranslation } from '@payloadcms/ui'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport type { EditorConfigContextType } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport type { SanitizedClientEditorConfig } from '../../../../../lexical/config/types.js'\nimport type { PluginComponent } from '../../../../typesClient.js'\nimport type { ToolbarStates } from '../../../shared/useToolbarStates.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\nimport type { FixedToolbarFeatureProps } from '../../server/index.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport { useToolbarKeyboardNavigation } from '../../../shared/useToolbarKeyboardNavigation.js'\nimport { useToolbarStates } from '../../../shared/useToolbarStates.js'\nimport { useRedirectVerticalWheelToHorizontalScroll } from './horizontalWheelScroll.js'\nimport './index.css'\n\nfunction ButtonGroupItem({\n active,\n anchorElem,\n editor,\n enabled,\n item,\n}: {\n active: boolean\n anchorElem: HTMLElement\n editor: LexicalEditor\n enabled: boolean\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n if (!item.ChildComponent) {\n return null\n }\n\n return (\n <ToolbarButton active={active} editor={editor} enabled={enabled} item={item} key={item.key}>\n <item.ChildComponent />\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n editorConfig,\n group,\n index,\n toolbarStates,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n group: ToolbarGroup\n index: number\n toolbarStates: ToolbarStates\n}): React.ReactNode {\n const { i18n } = useTranslation<{}, string>()\n const {\n fieldProps: { featureClientSchemaMap, schemaPath },\n } = useEditorConfigContext()\n\n const groupState = toolbarStates.groupStates.get(group.key)\n\n const DropdownIcon = useMemo(() => {\n if (group.type !== 'dropdown') {\n return undefined\n }\n const activeItem = groupState?.activeItems?.[0]\n if (activeItem) {\n return activeItem.ChildComponent\n }\n return group.ChildComponent\n }, [group, groupState?.activeItems])\n\n const dropdownLabel = useMemo(() => {\n if (group.type !== 'dropdown') {\n return undefined\n }\n const activeItems = groupState?.activeItems\n if (!activeItems?.length) {\n return undefined\n }\n if (activeItems.length > 1) {\n return i18n.t('lexical:general:toolbarItemsActive', { count: activeItems.length })\n }\n const item = activeItems[0]!\n let label = item.key\n if (item.label) {\n label =\n typeof item.label === 'function'\n ? item.label({ featureClientSchemaMap, i18n, schemaPath })\n : item.label\n }\n if (label.length > 25) {\n label = label.substring(0, 25) + '...'\n }\n return label\n }, [group, groupState?.activeItems, i18n, featureClientSchemaMap, schemaPath])\n\n return (\n <div\n className={`fixed-toolbar__group fixed-toolbar__group-${group.key}`}\n data-toolbar-group-key={group.key}\n key={group.key}\n >\n {group.type === 'dropdown' && group.items.length && groupState ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n groupState={groupState}\n Icon={DropdownIcon}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n />\n ) : null}\n {group.type === 'buttons' && group.items.length\n ? group.items.map((item) => {\n const itemState = toolbarStates.itemStates.get(item.key)\n return (\n <ButtonGroupItem\n active={itemState?.active ?? false}\n anchorElem={anchorElem}\n editor={editor}\n enabled={itemState?.enabled ?? true}\n item={item}\n key={item.key}\n />\n )\n })\n : null}\n {index < editorConfig.features.toolbarFixed?.groups.length - 1 && <div className=\"divider\" />}\n </div>\n )\n}\n\nfunction FixedToolbar({\n anchorElem,\n clientProps,\n editor,\n editorConfig,\n parentWithFixedToolbar,\n}: {\n anchorElem: HTMLElement\n clientProps?: FixedToolbarFeatureProps\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n parentWithFixedToolbar: EditorConfigContextType | false\n}): React.ReactNode {\n const currentToolbarRef = React.useRef<HTMLDivElement>(null)\n const keyboardNavigationOptions = useMemo(() => ({ toolbarRef: currentToolbarRef }), [])\n const { fieldProps } = useEditorConfigContext()\n const { i18n } = useTranslation()\n\n useToolbarKeyboardNavigation(keyboardNavigationOptions)\n\n const isEditable = useLexicalEditable()\n\n const { y } = useScrollInfo()\n\n useRedirectVerticalWheelToHorizontalScroll()\n\n const toolbarStates = useToolbarStates(editor, editorConfig?.features?.toolbarFixed?.groups)\n\n // Memoize the parent toolbar element\n const parentToolbarElem = useMemo(() => {\n if (!parentWithFixedToolbar || clientProps?.disableIfParentHasFixedToolbar) {\n return null\n }\n\n const parentEditorElem = parentWithFixedToolbar.editorContainerRef.current\n let sibling = parentEditorElem.previousElementSibling\n while (sibling) {\n if (sibling.classList.contains('fixed-toolbar')) {\n return sibling\n }\n sibling = sibling.previousElementSibling\n }\n return null\n }, [clientProps?.disableIfParentHasFixedToolbar, parentWithFixedToolbar])\n\n useThrottledEffect(\n () => {\n if (!parentToolbarElem) {\n // this also checks for clientProps?.disableIfParentHasFixedToolbar indirectly, see the parentToolbarElem useMemo\n return\n }\n const currentToolbarElem = currentToolbarRef.current\n if (!currentToolbarElem) {\n return\n }\n\n const currentRect = currentToolbarElem.getBoundingClientRect()\n const parentRect = parentToolbarElem.getBoundingClientRect()\n\n // we only need to check for vertical overlap\n const overlapping = !(\n currentRect.bottom < parentRect.top || currentRect.top > parentRect.bottom\n )\n\n if (overlapping) {\n currentToolbarElem.classList.remove('fixed-toolbar')\n currentToolbarElem.classList.add('fixed-toolbar', 'fixed-toolbar--overlapping')\n parentToolbarElem.classList.remove('fixed-toolbar')\n parentToolbarElem.classList.add('fixed-toolbar', 'fixed-toolbar--hide')\n } else {\n if (!currentToolbarElem.classList.contains('fixed-toolbar--overlapping')) {\n return\n }\n currentToolbarElem.classList.remove('fixed-toolbar--overlapping')\n currentToolbarElem.classList.add('fixed-toolbar')\n parentToolbarElem.classList.remove('fixed-toolbar--hide')\n parentToolbarElem.classList.add('fixed-toolbar')\n }\n },\n 50,\n [currentToolbarRef, parentToolbarElem, y],\n )\n\n return (\n <div\n aria-label={\n getTranslation(fieldProps.field.label || fieldProps.path, i18n) || fieldProps.path\n }\n className=\"fixed-toolbar\"\n onFocus={(event) => {\n // Prevent other focus events being triggered. Otherwise, if this was to be clicked while in a child editor,\n // the parent editor will be focused, and the child editor will lose focus.\n event.stopPropagation()\n }}\n ref={currentToolbarRef}\n role=\"toolbar\"\n >\n {isEditable && (\n <div className=\"fixed-toolbar__scroll\" tabIndex={-1}>\n {editorConfig?.features &&\n editorConfig.features?.toolbarFixed?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n group={group}\n index={i}\n key={group.key}\n toolbarStates={toolbarStates}\n />\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\nconst getParentEditorWithFixedToolbar = (\n editorConfigContext: EditorConfigContextType,\n): EditorConfigContextType | false => {\n if (editorConfigContext.parentEditor?.editorConfig) {\n if (editorConfigContext.parentEditor?.editorConfig.resolvedFeatureMap.has('toolbarFixed')) {\n return editorConfigContext.parentEditor\n } else {\n if (editorConfigContext.parentEditor) {\n return getParentEditorWithFixedToolbar(editorConfigContext.parentEditor)\n }\n }\n }\n return false\n}\n\nexport const FixedToolbarPlugin: PluginComponent<FixedToolbarFeatureProps> = ({ clientProps }) => {\n const [currentEditor] = useLexicalComposerContext()\n const editorConfigContext = useEditorConfigContext()\n const isEditable = useLexicalEditable()\n if (!isEditable) {\n return null\n }\n\n const { editorConfig: currentEditorConfig } = editorConfigContext\n\n const editor = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editor || currentEditor\n : currentEditor\n\n const editorConfig = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editorConfig || currentEditorConfig\n : currentEditorConfig\n\n const parentWithFixedToolbar = getParentEditorWithFixedToolbar(editorConfigContext)\n\n if (clientProps?.disableIfParentHasFixedToolbar) {\n if (parentWithFixedToolbar) {\n return null\n }\n }\n\n if (!editorConfig?.features?.toolbarFixed?.groups?.length) {\n return null\n }\n\n return (\n <FixedToolbar\n anchorElem={document.body}\n clientProps={clientProps}\n editor={editor}\n editorConfig={editorConfig}\n parentWithFixedToolbar={parentWithFixedToolbar}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","getTranslation","useScrollInfo","useThrottledEffect","useTranslation","React","useMemo","useEditorConfigContext","ToolbarButton","ToolbarDropdown","useToolbarKeyboardNavigation","useToolbarStates","useRedirectVerticalWheelToHorizontalScroll","ButtonGroupItem","active","anchorElem","editor","enabled","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","t0","$","editorConfig","group","index","toolbarStates","i18n","fieldProps","t1","featureClientSchemaMap","schemaPath","t2","groupStates","get","groupState","activeItems","t3","bb0","type","undefined","activeItem","DropdownIcon","t4","length","t","count","label","substring","t5","dropdownLabel","t6","t7","features","toolbarFixed","groups","itemStates","_jsxs","className","children","items","Icon","itemsContainerClassNames","map","item_0","itemState","FixedToolbar","clientProps","parentWithFixedToolbar","currentToolbarRef","useRef","keyboardNavigationOptions","toolbarRef","isEditable","y","parentToolbarElem","disableIfParentHasFixedToolbar","parentEditorElem","editorContainerRef","current","sibling","previousElementSibling","classList","contains","currentToolbarElem","currentRect","getBoundingClientRect","parentRect","overlapping","bottom","top","remove","add","field","path","onFocus","event","stopPropagation","ref","role","tabIndex","i","getParentEditorWithFixedToolbar","editorConfigContext","parentEditor","resolvedFeatureMap","has","FixedToolbarPlugin","currentEditor","currentEditorConfig","applyToFocusedEditor","focusedEditor","Symbol","for","document","body"],"sources":["../../../../../../src/features/toolbars/fixed/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useScrollInfo, useThrottledEffect, useTranslation } from '@payloadcms/ui'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport type { EditorConfigContextType } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport type { SanitizedClientEditorConfig } from '../../../../../lexical/config/types.js'\nimport type { PluginComponent } from '../../../../typesClient.js'\nimport type { ToolbarStates } from '../../../shared/useToolbarStates.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\nimport type { FixedToolbarFeatureProps } from '../../server/index.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport { useToolbarKeyboardNavigation } from '../../../shared/useToolbarKeyboardNavigation.js'\nimport { useToolbarStates } from '../../../shared/useToolbarStates.js'\nimport { useRedirectVerticalWheelToHorizontalScroll } from './horizontalWheelScroll.js'\nimport './index.css'\n\nfunction ButtonGroupItem({\n active,\n anchorElem,\n editor,\n enabled,\n item,\n}: {\n active: boolean\n anchorElem: HTMLElement\n editor: LexicalEditor\n enabled: boolean\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n if (!item.ChildComponent) {\n return null\n }\n\n return (\n <ToolbarButton active={active} editor={editor} enabled={enabled} item={item} key={item.key}>\n <item.ChildComponent />\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n editorConfig,\n group,\n index,\n toolbarStates,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n group: ToolbarGroup\n index: number\n toolbarStates: ToolbarStates\n}): React.ReactNode {\n const { i18n } = useTranslation<{}, string>()\n const {\n fieldProps: { featureClientSchemaMap, schemaPath },\n } = useEditorConfigContext()\n\n const groupState = toolbarStates.groupStates.get(group.key)\n\n const DropdownIcon = useMemo(() => {\n if (group.type !== 'dropdown') {\n return undefined\n }\n const activeItem = groupState?.activeItems?.[0]\n if (activeItem) {\n return activeItem.ChildComponent\n }\n return group.ChildComponent\n }, [group, groupState?.activeItems])\n\n const dropdownLabel = useMemo(() => {\n if (group.type !== 'dropdown') {\n return undefined\n }\n const activeItems = groupState?.activeItems\n if (!activeItems?.length) {\n return undefined\n }\n if (activeItems.length > 1) {\n return i18n.t('lexical:general:toolbarItemsActive', { count: activeItems.length })\n }\n const item = activeItems[0]!\n let label = item.key\n if (item.label) {\n label =\n typeof item.label === 'function'\n ? item.label({ featureClientSchemaMap, i18n, schemaPath })\n : item.label\n }\n if (label.length > 25) {\n label = label.substring(0, 25) + '...'\n }\n return label\n }, [group, groupState?.activeItems, i18n, featureClientSchemaMap, schemaPath])\n\n return (\n <div\n className={`fixed-toolbar__group fixed-toolbar__group-${group.key}`}\n data-toolbar-group-key={group.key}\n key={group.key}\n >\n {group.type === 'dropdown' && group.items.length && groupState ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n groupState={groupState}\n Icon={DropdownIcon}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n />\n ) : null}\n {group.type === 'buttons' && group.items.length\n ? group.items.map((item) => {\n const itemState = toolbarStates.itemStates.get(item.key)\n return (\n <ButtonGroupItem\n active={itemState?.active ?? false}\n anchorElem={anchorElem}\n editor={editor}\n enabled={itemState?.enabled ?? true}\n item={item}\n key={item.key}\n />\n )\n })\n : null}\n {index < editorConfig.features.toolbarFixed?.groups.length - 1 && <div className=\"divider\" />}\n </div>\n )\n}\n\nfunction FixedToolbar({\n anchorElem,\n clientProps,\n editor,\n editorConfig,\n parentWithFixedToolbar,\n}: {\n anchorElem: HTMLElement\n clientProps?: FixedToolbarFeatureProps\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n parentWithFixedToolbar: EditorConfigContextType | false\n}): React.ReactNode {\n const currentToolbarRef = React.useRef<HTMLDivElement>(null)\n const keyboardNavigationOptions = useMemo(() => ({ toolbarRef: currentToolbarRef }), [])\n const { fieldProps } = useEditorConfigContext()\n const { i18n } = useTranslation()\n\n useToolbarKeyboardNavigation(keyboardNavigationOptions)\n\n const isEditable = useLexicalEditable()\n\n const { y } = useScrollInfo()\n\n useRedirectVerticalWheelToHorizontalScroll()\n\n const toolbarStates = useToolbarStates(editor, editorConfig?.features?.toolbarFixed?.groups)\n\n // Memoize the parent toolbar element\n const parentToolbarElem = useMemo(() => {\n if (!parentWithFixedToolbar || clientProps?.disableIfParentHasFixedToolbar) {\n return null\n }\n\n const parentEditorElem = parentWithFixedToolbar.editorContainerRef.current\n let sibling = parentEditorElem.previousElementSibling\n while (sibling) {\n if (sibling.classList.contains('fixed-toolbar')) {\n return sibling\n }\n sibling = sibling.previousElementSibling\n }\n return null\n }, [clientProps?.disableIfParentHasFixedToolbar, parentWithFixedToolbar])\n\n useThrottledEffect(\n () => {\n if (!parentToolbarElem) {\n // this also checks for clientProps?.disableIfParentHasFixedToolbar indirectly, see the parentToolbarElem useMemo\n return\n }\n const currentToolbarElem = currentToolbarRef.current\n if (!currentToolbarElem) {\n return\n }\n\n const currentRect = currentToolbarElem.getBoundingClientRect()\n const parentRect = parentToolbarElem.getBoundingClientRect()\n\n // we only need to check for vertical overlap\n const overlapping = !(\n currentRect.bottom < parentRect.top || currentRect.top > parentRect.bottom\n )\n\n if (overlapping) {\n currentToolbarElem.classList.remove('fixed-toolbar')\n currentToolbarElem.classList.add('fixed-toolbar', 'fixed-toolbar--overlapping')\n parentToolbarElem.classList.remove('fixed-toolbar')\n parentToolbarElem.classList.add('fixed-toolbar', 'fixed-toolbar--hide')\n } else {\n if (!currentToolbarElem.classList.contains('fixed-toolbar--overlapping')) {\n return\n }\n currentToolbarElem.classList.remove('fixed-toolbar--overlapping')\n currentToolbarElem.classList.add('fixed-toolbar')\n parentToolbarElem.classList.remove('fixed-toolbar--hide')\n parentToolbarElem.classList.add('fixed-toolbar')\n }\n },\n 50,\n [currentToolbarRef, parentToolbarElem, y],\n )\n\n return (\n <div\n aria-label={\n getTranslation(fieldProps.field.label || fieldProps.path, i18n) || fieldProps.path\n }\n className=\"fixed-toolbar\"\n onFocus={(event) => {\n // Prevent other focus events being triggered. Otherwise, if this was to be clicked while in a child editor,\n // the parent editor will be focused, and the child editor will lose focus.\n event.stopPropagation()\n }}\n ref={currentToolbarRef}\n role=\"toolbar\"\n >\n {isEditable && (\n <div className=\"fixed-toolbar__scroll\" tabIndex={-1}>\n {editorConfig?.features &&\n editorConfig.features?.toolbarFixed?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n group={group}\n index={i}\n key={group.key}\n toolbarStates={toolbarStates}\n />\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\nconst getParentEditorWithFixedToolbar = (\n editorConfigContext: EditorConfigContextType,\n): EditorConfigContextType | false => {\n if (editorConfigContext.parentEditor?.editorConfig) {\n if (editorConfigContext.parentEditor?.editorConfig.resolvedFeatureMap.has('toolbarFixed')) {\n return editorConfigContext.parentEditor\n } else {\n if (editorConfigContext.parentEditor) {\n return getParentEditorWithFixedToolbar(editorConfigContext.parentEditor)\n }\n }\n }\n return false\n}\n\nexport const FixedToolbarPlugin: PluginComponent<FixedToolbarFeatureProps> = ({ clientProps }) => {\n const [currentEditor] = useLexicalComposerContext()\n const editorConfigContext = useEditorConfigContext()\n const isEditable = useLexicalEditable()\n if (!isEditable) {\n return null\n }\n\n const { editorConfig: currentEditorConfig } = editorConfigContext\n\n const editor = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editor || currentEditor\n : currentEditor\n\n const editorConfig = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editorConfig || currentEditorConfig\n : currentEditorConfig\n\n const parentWithFixedToolbar = getParentEditorWithFixedToolbar(editorConfigContext)\n\n if (clientProps?.disableIfParentHasFixedToolbar) {\n if (parentWithFixedToolbar) {\n return null\n }\n }\n\n if (!editorConfig?.features?.toolbarFixed?.groups?.length) {\n return null\n }\n\n return (\n <FixedToolbar\n anchorElem={document.body}\n clientProps={clientProps}\n editor={editor}\n editorConfig={editorConfig}\n parentWithFixedToolbar={parentWithFixedToolbar}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -44,46 +44,78 @@ function ButtonGroupItem({
44
44
  children: /*#__PURE__*/_jsx(item.ChildComponent, {})
45
45
  }, item.key);
46
46
  }
47
- function ToolbarGroupComponent({
48
- anchorElem,
49
- editor,
50
- group,
51
- index,
52
- toolbarStates
53
- }) {
47
+ function ToolbarGroupComponent(t0) {
48
+ const $ = _c(13);
49
+ const {
50
+ anchorElem,
51
+ editor,
52
+ group,
53
+ index,
54
+ toolbarStates
55
+ } = t0;
54
56
  const {
55
57
  editorConfig
56
58
  } = useEditorConfigContext();
57
- const groupState = toolbarStates.groupStates.get(group.key);
58
- const DropdownIcon = useMemo(() => {
59
- if (group.type !== 'dropdown') {
60
- return undefined;
59
+ let t1;
60
+ if ($[0] !== group.key || $[1] !== toolbarStates.groupStates) {
61
+ t1 = toolbarStates.groupStates.get(group.key);
62
+ $[0] = group.key;
63
+ $[1] = toolbarStates.groupStates;
64
+ $[2] = t1;
65
+ } else {
66
+ t1 = $[2];
67
+ }
68
+ const groupState = t1;
69
+ groupState?.activeItems;
70
+ let t2;
71
+ bb0: {
72
+ if (group.type !== "dropdown") {
73
+ t2 = undefined;
74
+ break bb0;
61
75
  }
62
76
  const activeItem = groupState?.activeItems?.[0];
63
- return activeItem?.ChildComponent ?? group.ChildComponent;
64
- }, [group, groupState?.activeItems]);
65
- return /*#__PURE__*/_jsxs("div", {
66
- className: `inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`,
67
- "data-toolbar-group-key": group.key,
68
- children: [group.type === 'dropdown' && group.items.length && groupState ? /*#__PURE__*/_jsx(ToolbarDropdown, {
69
- anchorElem: anchorElem,
70
- editor: editor,
71
- group: group,
72
- groupState: groupState,
73
- Icon: DropdownIcon
74
- }) : null, group.type === 'buttons' && group.items.length ? group.items.map(item => {
75
- const itemState = toolbarStates.itemStates.get(item.key);
76
- return /*#__PURE__*/_jsx(ButtonGroupItem, {
77
- active: itemState?.active ?? false,
78
- anchorElem: anchorElem,
79
- editor: editor,
80
- enabled: itemState?.enabled ?? true,
81
- item: item
82
- }, item.key);
83
- }) : null, index < editorConfig.features.toolbarInline?.groups.length - 1 && /*#__PURE__*/_jsx("div", {
84
- className: "divider"
85
- })]
86
- }, group.key);
77
+ t2 = activeItem?.ChildComponent ?? group.ChildComponent;
78
+ }
79
+ const DropdownIcon = t2;
80
+ const t3 = `inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`;
81
+ let t4;
82
+ if ($[3] !== DropdownIcon || $[4] !== anchorElem || $[5] !== editor || $[6] !== editorConfig.features.toolbarInline?.groups.length || $[7] !== group || $[8] !== groupState || $[9] !== index || $[10] !== t3 || $[11] !== toolbarStates.itemStates) {
83
+ t4 = _jsxs("div", {
84
+ className: t3,
85
+ "data-toolbar-group-key": group.key,
86
+ children: [group.type === "dropdown" && group.items.length && groupState ? _jsx(ToolbarDropdown, {
87
+ anchorElem,
88
+ editor,
89
+ group,
90
+ groupState,
91
+ Icon: DropdownIcon
92
+ }) : null, group.type === "buttons" && group.items.length ? group.items.map(item => {
93
+ const itemState = toolbarStates.itemStates.get(item.key);
94
+ return _jsx(ButtonGroupItem, {
95
+ active: itemState?.active ?? false,
96
+ anchorElem,
97
+ editor,
98
+ enabled: itemState?.enabled ?? true,
99
+ item
100
+ }, item.key);
101
+ }) : null, index < editorConfig.features.toolbarInline?.groups.length - 1 && _jsx("div", {
102
+ className: "divider"
103
+ })]
104
+ }, group.key);
105
+ $[3] = DropdownIcon;
106
+ $[4] = anchorElem;
107
+ $[5] = editor;
108
+ $[6] = editorConfig.features.toolbarInline?.groups.length;
109
+ $[7] = group;
110
+ $[8] = groupState;
111
+ $[9] = index;
112
+ $[10] = t3;
113
+ $[11] = toolbarStates.itemStates;
114
+ $[12] = t4;
115
+ } else {
116
+ t4 = $[12];
117
+ }
118
+ return t4;
87
119
  }
88
120
  function InlineToolbar({
89
121
  anchorElem,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","mergeRegister","getTranslation","useTranslation","$getSelection","$isRangeSelection","$isTextNode","$onUpdate","COMMAND_PRIORITY_LOW","getDOMSelection","SELECTION_CHANGE_COMMAND","useCallback","useEffect","useMemo","useRef","useState","React","createPortal","useEditorConfigContext","getDOMRangeRect","setFloatingElemPosition","ToolbarButton","ToolbarDropdown","useToolbarKeyboardNavigation","useToolbarStates","ButtonGroupItem","active","anchorElem","editor","enabled","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","group","index","toolbarStates","editorConfig","groupState","groupStates","get","DropdownIcon","type","undefined","activeItem","activeItems","_jsxs","className","items","length","Icon","map","itemState","itemStates","features","toolbarInline","groups","InlineToolbar","floatingToolbarRef","keyboardNavigationOptions","toolbarRef","fieldProps","i18n","caretRef","closeFloatingToolbar","current","isOpacityZero","style","opacity","isPointerEventsNone","pointerEvents","mouseMoveListener","e","buttons","x","clientX","y","clientY","elementUnderMouse","document","elementFromPoint","contains","mouseUpListener","addEventListener","removeEventListener","$updateTextFormatFloatingToolbar","selection","nativeSelection","_window","possibleLinkEditor","querySelector","isLinkEditorVisible","rootElement","getRootElement","isCollapsed","anchorNode","rangeRect","offsetIfFlipped","alwaysDisplayOnTop","floatingElem","horizontalPosition","targetRect","anchorFlippedOffset","horizontalOffset","specialHandlingForCaret","verticalGap","scrollerElem","parentElement","update","getEditorState","read","window","registerUpdateListener","editorState","registerCommand","field","label","path","ref","role","i","useInlineToolbar","$","isText","setIsText","isEditable","t0","isComposing","getTextContent","nodes","getNodes","foundNodeWithText","node","rawTextContent","replace","updatePopup","t1","t2","t3","t4","registerRootListener","t5","InlineToolbarPlugin"],"sources":["../../../../../../src/features/toolbars/inline/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useTranslation } from '@payloadcms/ui'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n $onUpdate,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarStates } from '../../../shared/useToolbarStates.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js'\nimport { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport { useToolbarKeyboardNavigation } from '../../../shared/useToolbarKeyboardNavigation.js'\nimport { useToolbarStates } from '../../../shared/useToolbarStates.js'\nimport './index.css'\n\nfunction ButtonGroupItem({\n active,\n anchorElem,\n editor,\n enabled,\n item,\n}: {\n active: boolean\n anchorElem: HTMLElement\n editor: LexicalEditor\n enabled: boolean\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n if (!item.ChildComponent) {\n return null\n }\n\n return (\n <ToolbarButton active={active} editor={editor} enabled={enabled} item={item} key={item.key}>\n <item.ChildComponent />\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n group,\n index,\n toolbarStates,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n group: ToolbarGroup\n index: number\n toolbarStates: ToolbarStates\n}): React.ReactNode {\n const { editorConfig } = useEditorConfigContext()\n\n const groupState = toolbarStates.groupStates.get(group.key)\n\n const DropdownIcon = useMemo(() => {\n if (group.type !== 'dropdown') {\n return undefined\n }\n const activeItem = groupState?.activeItems?.[0]\n return activeItem?.ChildComponent ?? group.ChildComponent\n }, [group, groupState?.activeItems])\n\n return (\n <div\n className={`inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`}\n data-toolbar-group-key={group.key}\n key={group.key}\n >\n {group.type === 'dropdown' && group.items.length && groupState ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n groupState={groupState}\n Icon={DropdownIcon}\n />\n ) : null}\n {group.type === 'buttons' && group.items.length\n ? group.items.map((item) => {\n const itemState = toolbarStates.itemStates.get(item.key)\n return (\n <ButtonGroupItem\n active={itemState?.active ?? false}\n anchorElem={anchorElem}\n editor={editor}\n enabled={itemState?.enabled ?? true}\n item={item}\n key={item.key}\n />\n )\n })\n : null}\n {index < editorConfig.features.toolbarInline?.groups.length - 1 && (\n <div className=\"divider\" />\n )}\n </div>\n )\n}\n\nfunction InlineToolbar({\n anchorElem,\n editor,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n}): React.ReactNode {\n const floatingToolbarRef = useRef<HTMLDivElement | null>(null)\n const keyboardNavigationOptions = useMemo(() => ({ toolbarRef: floatingToolbarRef }), [])\n const { fieldProps } = useEditorConfigContext()\n const { i18n } = useTranslation()\n\n useToolbarKeyboardNavigation(keyboardNavigationOptions)\n\n const caretRef = useRef<HTMLDivElement | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const toolbarStates = useToolbarStates(editor, editorConfig?.features?.toolbarInline?.groups)\n\n const closeFloatingToolbar = useCallback(() => {\n if (floatingToolbarRef?.current) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n\n if (!isOpacityZero) {\n floatingToolbarRef.current.style.opacity = '0'\n }\n if (!isPointerEventsNone) {\n floatingToolbarRef.current.style.pointerEvents = 'none'\n }\n }\n }, [floatingToolbarRef])\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n if (floatingToolbarRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n if (!isOpacityZero || !isPointerEventsNone) {\n // Check if the mouse is not over the popup\n const x = e.clientX\n const y = e.clientY\n const elementUnderMouse = document.elementFromPoint(x, y)\n if (!floatingToolbarRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n closeFloatingToolbar()\n }\n }\n }\n },\n [closeFloatingToolbar],\n )\n\n const mouseUpListener = useCallback(() => {\n if (floatingToolbarRef?.current) {\n if (floatingToolbarRef.current.style.opacity !== '1') {\n floatingToolbarRef.current.style.opacity = '1'\n }\n if (floatingToolbarRef.current.style.pointerEvents !== 'auto') {\n floatingToolbarRef.current.style.pointerEvents = 'auto'\n }\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('mousemove', mouseMoveListener)\n document.addEventListener('mouseup', mouseUpListener)\n\n return () => {\n document.removeEventListener('mousemove', mouseMoveListener)\n document.removeEventListener('mouseup', mouseUpListener)\n }\n }, [floatingToolbarRef, mouseMoveListener, mouseUpListener])\n\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection()\n\n const nativeSelection = getDOMSelection(editor._window)\n\n if (floatingToolbarRef.current === null) {\n return\n }\n\n const possibleLinkEditor = anchorElem.querySelector(':scope > .link-editor')\n const isLinkEditorVisible =\n possibleLinkEditor !== null &&\n 'style' in possibleLinkEditor &&\n possibleLinkEditor?.style?.['opacity' as keyof typeof possibleLinkEditor.style] === '1'\n\n const rootElement = editor.getRootElement()\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement)\n\n // Position floating toolbar\n const offsetIfFlipped = setFloatingElemPosition({\n alwaysDisplayOnTop: isLinkEditorVisible,\n anchorElem,\n floatingElem: floatingToolbarRef.current,\n horizontalPosition: 'center',\n targetRect: rangeRect,\n })\n\n // Position caret\n if (caretRef.current) {\n setFloatingElemPosition({\n anchorElem: floatingToolbarRef.current,\n anchorFlippedOffset: offsetIfFlipped,\n floatingElem: caretRef.current,\n horizontalOffset: 5,\n horizontalPosition: 'center',\n specialHandlingForCaret: true,\n targetRect: rangeRect,\n verticalGap: 8,\n })\n }\n } else {\n closeFloatingToolbar()\n }\n }, [editor, closeFloatingToolbar, anchorElem])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }\n\n window.addEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $onUpdate(() => editor.read('latest', $updateTextFormatFloatingToolbar))\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateTextFormatFloatingToolbar])\n\n return (\n <div\n aria-label={\n getTranslation(fieldProps.field.label || fieldProps.path, i18n) || fieldProps.path\n }\n className=\"inline-toolbar-popup\"\n ref={floatingToolbarRef}\n role=\"toolbar\"\n >\n <div className=\"caret\" ref={caretRef} />\n {editorConfig?.features &&\n editorConfig.features?.toolbarInline?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n index={i}\n key={group.key}\n toolbarStates={toolbarStates}\n />\n )\n })}\n </div>\n )\n}\n\nfunction useInlineToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n): null | React.ReactElement {\n const [isText, setIsText] = useState(false)\n const isEditable = useLexicalEditable()\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return\n }\n const selection = $getSelection()\n const nativeSelection = getDOMSelection(editor._window)\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false)\n return\n }\n\n if (!$isRangeSelection(selection)) {\n return\n }\n\n if (selection.getTextContent() !== '') {\n const nodes = selection.getNodes()\n let foundNodeWithText = false\n for (const node of nodes) {\n if ($isTextNode(node)) {\n setIsText(true)\n foundNodeWithText = true\n break\n }\n }\n if (!foundNodeWithText) {\n setIsText(false)\n }\n } else {\n setIsText(false)\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '')\n if (!selection.isCollapsed() && rawTextContent === '') {\n setIsText(false)\n return\n }\n })\n }, [editor])\n\n useEffect(() => {\n document.addEventListener('selectionchange', updatePopup)\n document.addEventListener('mouseup', updatePopup)\n return () => {\n document.removeEventListener('selectionchange', updatePopup)\n document.removeEventListener('mouseup', updatePopup)\n }\n }, [updatePopup])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup()\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false)\n }\n }),\n )\n }, [editor, updatePopup])\n\n if (!isText || !isEditable) {\n return null\n }\n\n return createPortal(<InlineToolbar anchorElem={anchorElem} editor={editor} />, anchorElem)\n}\n\nexport const InlineToolbarPlugin: PluginComponentWithAnchor<undefined> = ({ anchorElem }) => {\n const [editor] = useLexicalComposerContext()\n\n return useInlineToolbar(editor, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","mergeRegister","getTranslation","useTranslation","$getSelection","$isRangeSelection","$isTextNode","$onUpdate","COMMAND_PRIORITY_LOW","getDOMSelection","SELECTION_CHANGE_COMMAND","useCallback","useEffect","useMemo","useRef","useState","React","createPortal","useEditorConfigContext","getDOMRangeRect","setFloatingElemPosition","ToolbarButton","ToolbarDropdown","useToolbarKeyboardNavigation","useToolbarStates","ButtonGroupItem","active","anchorElem","editor","enabled","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","t0","$","group","index","toolbarStates","editorConfig","t1","groupStates","get","groupState","activeItems","t2","bb0","type","undefined","activeItem","DropdownIcon","t3","t4","features","toolbarInline","groups","length","itemStates","_jsxs","className","children","items","Icon","map","itemState","InlineToolbar","floatingToolbarRef","keyboardNavigationOptions","toolbarRef","fieldProps","i18n","caretRef","closeFloatingToolbar","current","isOpacityZero","style","opacity","isPointerEventsNone","pointerEvents","mouseMoveListener","e","buttons","x","clientX","y","clientY","elementUnderMouse","document","elementFromPoint","contains","mouseUpListener","addEventListener","removeEventListener","$updateTextFormatFloatingToolbar","selection","nativeSelection","_window","possibleLinkEditor","querySelector","isLinkEditorVisible","rootElement","getRootElement","isCollapsed","anchorNode","rangeRect","offsetIfFlipped","alwaysDisplayOnTop","floatingElem","horizontalPosition","targetRect","anchorFlippedOffset","horizontalOffset","specialHandlingForCaret","verticalGap","scrollerElem","parentElement","update","getEditorState","read","window","registerUpdateListener","editorState","registerCommand","field","label","path","ref","role","i","useInlineToolbar","isText","setIsText","isEditable","isComposing","getTextContent","nodes","getNodes","foundNodeWithText","node","rawTextContent","replace","updatePopup","registerRootListener","t5","InlineToolbarPlugin"],"sources":["../../../../../../src/features/toolbars/inline/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useTranslation } from '@payloadcms/ui'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n $onUpdate,\n COMMAND_PRIORITY_LOW,\n getDOMSelection,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarStates } from '../../../shared/useToolbarStates.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js'\nimport { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport { useToolbarKeyboardNavigation } from '../../../shared/useToolbarKeyboardNavigation.js'\nimport { useToolbarStates } from '../../../shared/useToolbarStates.js'\nimport './index.css'\n\nfunction ButtonGroupItem({\n active,\n anchorElem,\n editor,\n enabled,\n item,\n}: {\n active: boolean\n anchorElem: HTMLElement\n editor: LexicalEditor\n enabled: boolean\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n if (!item.ChildComponent) {\n return null\n }\n\n return (\n <ToolbarButton active={active} editor={editor} enabled={enabled} item={item} key={item.key}>\n <item.ChildComponent />\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n group,\n index,\n toolbarStates,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n group: ToolbarGroup\n index: number\n toolbarStates: ToolbarStates\n}): React.ReactNode {\n const { editorConfig } = useEditorConfigContext()\n\n const groupState = toolbarStates.groupStates.get(group.key)\n\n const DropdownIcon = useMemo(() => {\n if (group.type !== 'dropdown') {\n return undefined\n }\n const activeItem = groupState?.activeItems?.[0]\n return activeItem?.ChildComponent ?? group.ChildComponent\n }, [group, groupState?.activeItems])\n\n return (\n <div\n className={`inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`}\n data-toolbar-group-key={group.key}\n key={group.key}\n >\n {group.type === 'dropdown' && group.items.length && groupState ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n groupState={groupState}\n Icon={DropdownIcon}\n />\n ) : null}\n {group.type === 'buttons' && group.items.length\n ? group.items.map((item) => {\n const itemState = toolbarStates.itemStates.get(item.key)\n return (\n <ButtonGroupItem\n active={itemState?.active ?? false}\n anchorElem={anchorElem}\n editor={editor}\n enabled={itemState?.enabled ?? true}\n item={item}\n key={item.key}\n />\n )\n })\n : null}\n {index < editorConfig.features.toolbarInline?.groups.length - 1 && (\n <div className=\"divider\" />\n )}\n </div>\n )\n}\n\nfunction InlineToolbar({\n anchorElem,\n editor,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n}): React.ReactNode {\n const floatingToolbarRef = useRef<HTMLDivElement | null>(null)\n const keyboardNavigationOptions = useMemo(() => ({ toolbarRef: floatingToolbarRef }), [])\n const { fieldProps } = useEditorConfigContext()\n const { i18n } = useTranslation()\n\n useToolbarKeyboardNavigation(keyboardNavigationOptions)\n\n const caretRef = useRef<HTMLDivElement | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const toolbarStates = useToolbarStates(editor, editorConfig?.features?.toolbarInline?.groups)\n\n const closeFloatingToolbar = useCallback(() => {\n if (floatingToolbarRef?.current) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n\n if (!isOpacityZero) {\n floatingToolbarRef.current.style.opacity = '0'\n }\n if (!isPointerEventsNone) {\n floatingToolbarRef.current.style.pointerEvents = 'none'\n }\n }\n }, [floatingToolbarRef])\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n if (floatingToolbarRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n if (!isOpacityZero || !isPointerEventsNone) {\n // Check if the mouse is not over the popup\n const x = e.clientX\n const y = e.clientY\n const elementUnderMouse = document.elementFromPoint(x, y)\n if (!floatingToolbarRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n closeFloatingToolbar()\n }\n }\n }\n },\n [closeFloatingToolbar],\n )\n\n const mouseUpListener = useCallback(() => {\n if (floatingToolbarRef?.current) {\n if (floatingToolbarRef.current.style.opacity !== '1') {\n floatingToolbarRef.current.style.opacity = '1'\n }\n if (floatingToolbarRef.current.style.pointerEvents !== 'auto') {\n floatingToolbarRef.current.style.pointerEvents = 'auto'\n }\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('mousemove', mouseMoveListener)\n document.addEventListener('mouseup', mouseUpListener)\n\n return () => {\n document.removeEventListener('mousemove', mouseMoveListener)\n document.removeEventListener('mouseup', mouseUpListener)\n }\n }, [floatingToolbarRef, mouseMoveListener, mouseUpListener])\n\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection()\n\n const nativeSelection = getDOMSelection(editor._window)\n\n if (floatingToolbarRef.current === null) {\n return\n }\n\n const possibleLinkEditor = anchorElem.querySelector(':scope > .link-editor')\n const isLinkEditorVisible =\n possibleLinkEditor !== null &&\n 'style' in possibleLinkEditor &&\n possibleLinkEditor?.style?.['opacity' as keyof typeof possibleLinkEditor.style] === '1'\n\n const rootElement = editor.getRootElement()\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement)\n\n // Position floating toolbar\n const offsetIfFlipped = setFloatingElemPosition({\n alwaysDisplayOnTop: isLinkEditorVisible,\n anchorElem,\n floatingElem: floatingToolbarRef.current,\n horizontalPosition: 'center',\n targetRect: rangeRect,\n })\n\n // Position caret\n if (caretRef.current) {\n setFloatingElemPosition({\n anchorElem: floatingToolbarRef.current,\n anchorFlippedOffset: offsetIfFlipped,\n floatingElem: caretRef.current,\n horizontalOffset: 5,\n horizontalPosition: 'center',\n specialHandlingForCaret: true,\n targetRect: rangeRect,\n verticalGap: 8,\n })\n }\n } else {\n closeFloatingToolbar()\n }\n }, [editor, closeFloatingToolbar, anchorElem])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }\n\n window.addEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $onUpdate(() => editor.read('latest', $updateTextFormatFloatingToolbar))\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateTextFormatFloatingToolbar])\n\n return (\n <div\n aria-label={\n getTranslation(fieldProps.field.label || fieldProps.path, i18n) || fieldProps.path\n }\n className=\"inline-toolbar-popup\"\n ref={floatingToolbarRef}\n role=\"toolbar\"\n >\n <div className=\"caret\" ref={caretRef} />\n {editorConfig?.features &&\n editorConfig.features?.toolbarInline?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n index={i}\n key={group.key}\n toolbarStates={toolbarStates}\n />\n )\n })}\n </div>\n )\n}\n\nfunction useInlineToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n): null | React.ReactElement {\n const [isText, setIsText] = useState(false)\n const isEditable = useLexicalEditable()\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return\n }\n const selection = $getSelection()\n const nativeSelection = getDOMSelection(editor._window)\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false)\n return\n }\n\n if (!$isRangeSelection(selection)) {\n return\n }\n\n if (selection.getTextContent() !== '') {\n const nodes = selection.getNodes()\n let foundNodeWithText = false\n for (const node of nodes) {\n if ($isTextNode(node)) {\n setIsText(true)\n foundNodeWithText = true\n break\n }\n }\n if (!foundNodeWithText) {\n setIsText(false)\n }\n } else {\n setIsText(false)\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '')\n if (!selection.isCollapsed() && rawTextContent === '') {\n setIsText(false)\n return\n }\n })\n }, [editor])\n\n useEffect(() => {\n document.addEventListener('selectionchange', updatePopup)\n document.addEventListener('mouseup', updatePopup)\n return () => {\n document.removeEventListener('selectionchange', updatePopup)\n document.removeEventListener('mouseup', updatePopup)\n }\n }, [updatePopup])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup()\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false)\n }\n }),\n )\n }, [editor, updatePopup])\n\n if (!isText || !isEditable) {\n return null\n }\n\n return createPortal(<InlineToolbar anchorElem={anchorElem} editor={editor} />, anchorElem)\n}\n\nexport const InlineToolbarPlugin: PluginComponentWithAnchor<undefined> = ({ anchorElem }) => {\n const [editor] = useLexicalComposerContext()\n\n return useInlineToolbar(editor, anchorElem)\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,kBAAkB,QAAQ;AACnC,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAC/B,SACEC,aAAa,EACbC,iBAAiB,EACjBC,WAAW,EACXC,SAAS,EACTC,oBAAoB,EACpBC,eAAe,EACfC,wBAAwB,QACnB;AACP,SAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAClE,YAAYC,KAAA,MAAW;AACvB,SAASC,YAAY,QAAQ;AAM7B,SAASC,sBAAsB,QAAQ;AACvC,SAASC,eAAe,QAAQ;AAChC,SAASC,uBAAuB,QAAQ;AACxC,SAASC,aAAa,QAAQ;AAC9B,SAASC,eAAe,QAAQ;AAChC,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,gBAAgB,QAAQ;AACjC,OAAO;AAEP,SAASC,gBAAgB;EACvBC,MAAM;EACNC,UAAU;EACVC,MAAM;EACNC,OAAO;EACPC;AAAI,CAOL;EACC,IAAIA,IAAA,CAAKC,SAAS,EAAE;IAClB,OACED,IAAA,EAAMC,SAAA,iBACJC,IAAA,CAACF,IAAA,CAAKC,SAAS;MAACJ,UAAA,EAAYA,UAAA;MAAYC,MAAA,EAAQA,MAAA;MAAQE,IAAA,EAAMA;OAAWA,IAAA,CAAKG,GAAG;EAGvF;EACA,IAAI,CAACH,IAAA,CAAKI,cAAc,EAAE;IACxB,OAAO;EACT;EAEA,oBACEF,IAAA,CAACX,aAAA;IAAcK,MAAA,EAAQA,MAAA;IAAQE,MAAA,EAAQA,MAAA;IAAQC,OAAA,EAASA,OAAA;IAASC,IAAA,EAAMA,IAAA;cACrE,aAAAE,IAAA,CAACF,IAAA,CAAKI,cAAc;KAD4DJ,IAAA,CAAKG,GAAG;AAI9F;AAEA,SAAAE,sBAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAvC,EAAA;EAA+B;IAAA6B,UAAA;IAAAC,MAAA;IAAAU,KAAA;IAAAC,KAAA;IAAAC;EAAA,IAAAJ,EAY9B;EACC;IAAAK;EAAA,IAAyBvB,sBAAA;EAAA,IAAAwB,EAAA;EAAA,IAAAL,CAAA,QAAAC,KAAA,CAAAL,GAAA,IAAAI,CAAA,QAAAG,aAAA,CAAAG,WAAA;IAEND,EAAA,GAAAF,aAAA,CAAAG,WAAyB,CAAAC,GAAI,CAACN,KAAA,CAAAL,GAAS;IAAAI,CAAA,MAAAC,KAAA,CAAAL,GAAA;IAAAI,CAAA,MAAAG,aAAA,CAAAG,WAAA;IAAAN,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EAA1D,MAAAQ,UAAA,GAAmBH,EAAuC;EAQ/CG,UAAA,EAAAC,WAAY;EAAA,IAAAC,EAAA;EAAAC,GAAA;IALrB,IAAIV,KAAA,CAAAW,IAAU,KAAK;MACjBF,EAAA,GAAOG,SAAA;MAAP,MAAAF,GAAA;IAAO;IAET,MAAAG,UAAA,GAAmBN,UAAA,EAAAC,WAA4B;IAC/CC,EAAA,GAAOI,UAAA,EAAAjB,cAAkD,IAApBI,KAAA,CAAAJ,cAAoB;EAAA;EAL3D,MAAAkB,YAAA,GAAqBL,EAMc;EAIpB,MAAAM,EAAA,8DAA2Df,KAAA,CAAAL,GAAS,EAAE;EAAA,IAAAqB,EAAA;EAAA,IAAAjB,CAAA,QAAAe,YAAA,IAAAf,CAAA,QAAAV,UAAA,IAAAU,CAAA,QAAAT,MAAA,IAAAS,CAAA,QAAAI,YAAA,CAAAc,QAAA,CAAAC,aAAA,EAAAC,MAAA,CAAAC,MAAA,IAAArB,CAAA,QAAAC,KAAA,IAAAD,CAAA,QAAAQ,UAAA,IAAAR,CAAA,QAAAE,KAAA,IAAAF,CAAA,SAAAgB,EAAA,IAAAhB,CAAA,SAAAG,aAAA,CAAAmB,UAAA;IADnFL,EAAA,GAAAM,KAAA,CAAC;MAAAC,SAAA,EACYR,EAAsE;MAAA,0BACzDf,KAAA,CAAAL,GAAS;MAAA6B,QAAA,E,CAGhCxB,KAAA,CAAAW,IAAU,KAAK,UAAgC,IAAlBX,KAAA,CAAAyB,KAAW,CAAAL,MAAW,IAAnDb,UAQG,GAPFb,IAAA,CAACV,eAAA;QAAAK,UAAA;QAAAC,MAAA;QAAAU,KAAA;QAAAO,UAAA;QAAAmB,IAAA,EAKOZ;OAEN,IARH,IAQG,EACHd,KAAA,CAAAW,IAAU,KAAK,SAA+B,IAAlBX,KAAA,CAAAyB,KAAW,CAAAL,MAcpC,GAbApB,KAAA,CAAAyB,KAAW,CAAAE,GAAI,CAACnC,IAAA;QACd,MAAAoC,SAAA,GAAkB1B,aAAA,CAAAmB,UAAwB,CAAAf,GAAI,CAACd,IAAA,CAAAG,GAAQ;QAAA,OAErDD,IAAA,CAACP,eAAA;UAAAC,MAAA,EACSwC,SAAA,EAAAxC,MAAqB,IAArB,KAAqB;UAAAC,UAAA;UAAAC,MAAA;UAAAC,OAAA,EAGpBqC,SAAA,EAAArC,OAAsB,IAAtB,IAAsB;UAAAC;WAE1BA,IAAA,CAAAG,GAAQ;MAAA,CAInB,IAdH,IAcG,EACHM,KAAA,GAAQE,YAAA,CAAAc,QAAqB,CAAAC,aAAgB,EAAAC,MAAO,CAAAC,MAAA,GAAS,C,IAC5D1B,IAAA,CAAC;QAAA6B,SAAA,EAAc;;OA3BZvB,KAAA,CAAAL,GAAS;IAAAI,CAAA,MAAAe,YAAA;IAAAf,CAAA,MAAAV,UAAA;IAAAU,CAAA,MAAAT,MAAA;IAAAS,CAAA,MAAAI,YAAA,CAAAc,QAAA,CAAAC,aAAA,EAAAC,MAAA,CAAAC,MAAA;IAAArB,CAAA,MAAAC,KAAA;IAAAD,CAAA,MAAAQ,UAAA;IAAAR,CAAA,MAAAE,KAAA;IAAAF,CAAA,OAAAgB,EAAA;IAAAhB,CAAA,OAAAG,aAAA,CAAAmB,UAAA;IAAAtB,CAAA,OAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAAA,OAHhBiB,EAGgB;AAAA;AAiCpB,SAASa,cAAc;EACrBxC,UAAU;EACVC;AAAM,CAIP;EACC,MAAMwC,kBAAA,GAAqBtD,MAAA,CAA8B;EACzD,MAAMuD,yBAAA,GAA4BxD,OAAA,CAAQ,OAAO;IAAEyD,UAAA,EAAYF;EAAmB,IAAI,EAAE;EACxF,MAAM;IAAEG;EAAU,CAAE,GAAGrD,sBAAA;EACvB,MAAM;IAAEsD;EAAI,CAAE,GAAGrE,cAAA;EAEjBoB,4BAAA,CAA6B8C,yBAAA;EAE7B,MAAMI,QAAA,GAAW3D,MAAA,CAA8B;EAE/C,MAAM;IAAE2B;EAAY,CAAE,GAAGvB,sBAAA;EAEzB,MAAMsB,aAAA,GAAgBhB,gBAAA,CAAiBI,MAAA,EAAQa,YAAA,EAAcc,QAAA,EAAUC,aAAA,EAAeC,MAAA;EAEtF,MAAMiB,oBAAA,GAAuB/D,WAAA,CAAY;IACvC,IAAIyD,kBAAA,EAAoBO,OAAA,EAAS;MAC/B,MAAMC,aAAA,GAAgBR,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACC,OAAO,KAAK;MACnE,MAAMC,mBAAA,GAAsBX,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACG,aAAa,KAAK;MAE/E,IAAI,CAACJ,aAAA,EAAe;QAClBR,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACC,OAAO,GAAG;MAC7C;MACA,IAAI,CAACC,mBAAA,EAAqB;QACxBX,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACG,aAAa,GAAG;MACnD;IACF;EACF,GAAG,CAACZ,kBAAA,CAAmB;EAEvB,MAAMa,iBAAA,GAAoBtE,WAAA,CACvBuE,CAAA;IACC,IAAId,kBAAA,EAAoBO,OAAA,KAAYO,CAAA,CAAEC,OAAO,KAAK,KAAKD,CAAA,CAAEC,OAAO,KAAK,IAAI;MACvE,MAAMP,eAAA,GAAgBR,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACC,OAAO,KAAK;MACnE,MAAMC,qBAAA,GAAsBX,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACG,aAAa,KAAK;MAC/E,IAAI,CAACJ,eAAA,IAAiB,CAACG,qBAAA,EAAqB;QAC1C;QACA,MAAMK,CAAA,GAAIF,CAAA,CAAEG,OAAO;QACnB,MAAMC,CAAA,GAAIJ,CAAA,CAAEK,OAAO;QACnB,MAAMC,iBAAA,GAAoBC,QAAA,CAASC,gBAAgB,CAACN,CAAA,EAAGE,CAAA;QACvD,IAAI,CAAClB,kBAAA,CAAmBO,OAAO,CAACgB,QAAQ,CAACH,iBAAA,GAAoB;UAC3D;UACAd,oBAAA;QACF;MACF;IACF;EACF,GACA,CAACA,oBAAA,CAAqB;EAGxB,MAAMkB,eAAA,GAAkBjF,WAAA,CAAY;IAClC,IAAIyD,kBAAA,EAAoBO,OAAA,EAAS;MAC/B,IAAIP,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACC,OAAO,KAAK,KAAK;QACpDV,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACC,OAAO,GAAG;MAC7C;MACA,IAAIV,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACG,aAAa,KAAK,QAAQ;QAC7DZ,kBAAA,CAAmBO,OAAO,CAACE,KAAK,CAACG,aAAa,GAAG;MACnD;IACF;EACF,GAAG,EAAE;EAELpE,SAAA,CAAU;IACR6E,QAAA,CAASI,gBAAgB,CAAC,aAAaZ,iBAAA;IACvCQ,QAAA,CAASI,gBAAgB,CAAC,WAAWD,eAAA;IAErC,OAAO;MACLH,QAAA,CAASK,mBAAmB,CAAC,aAAab,iBAAA;MAC1CQ,QAAA,CAASK,mBAAmB,CAAC,WAAWF,eAAA;IAC1C;EACF,GAAG,CAACxB,kBAAA,EAAoBa,iBAAA,EAAmBW,eAAA,CAAgB;EAE3D,MAAMG,gCAAA,GAAmCpF,WAAA,CAAY;IACnD,MAAMqF,SAAA,GAAY5F,aAAA;IAElB,MAAM6F,eAAA,GAAkBxF,eAAA,CAAgBmB,MAAA,CAAOsE,OAAO;IAEtD,IAAI9B,kBAAA,CAAmBO,OAAO,KAAK,MAAM;MACvC;IACF;IAEA,MAAMwB,kBAAA,GAAqBxE,UAAA,CAAWyE,aAAa,CAAC;IACpD,MAAMC,mBAAA,GACJF,kBAAA,KAAuB,QACvB,WAAWA,kBAAA,IACXA,kBAAA,EAAoBtB,KAAA,GAAQ,UAAmD,KAAK;IAEtF,MAAMyB,WAAA,GAAc1E,MAAA,CAAO2E,cAAc;IACzC,IACEP,SAAA,KAAc,QACdC,eAAA,KAAoB,QACpB,CAACA,eAAA,CAAgBO,WAAW,IAC5BF,WAAA,KAAgB,QAChBA,WAAA,CAAYX,QAAQ,CAACM,eAAA,CAAgBQ,UAAU,GAC/C;MACA,MAAMC,SAAA,GAAYvF,eAAA,CAAgB8E,eAAA,EAAiBK,WAAA;MAEnD;MACA,MAAMK,eAAA,GAAkBvF,uBAAA,CAAwB;QAC9CwF,kBAAA,EAAoBP,mBAAA;QACpB1E,UAAA;QACAkF,YAAA,EAAczC,kBAAA,CAAmBO,OAAO;QACxCmC,kBAAA,EAAoB;QACpBC,UAAA,EAAYL;MACd;MAEA;MACA,IAAIjC,QAAA,CAASE,OAAO,EAAE;QACpBvD,uBAAA,CAAwB;UACtBO,UAAA,EAAYyC,kBAAA,CAAmBO,OAAO;UACtCqC,mBAAA,EAAqBL,eAAA;UACrBE,YAAA,EAAcpC,QAAA,CAASE,OAAO;UAC9BsC,gBAAA,EAAkB;UAClBH,kBAAA,EAAoB;UACpBI,uBAAA,EAAyB;UACzBH,UAAA,EAAYL,SAAA;UACZS,WAAA,EAAa;QACf;MACF;IACF,OAAO;MACLzC,oBAAA;IACF;EACF,GAAG,CAAC9C,MAAA,EAAQ8C,oBAAA,EAAsB/C,UAAA,CAAW;EAE7Cf,SAAA,CAAU;IACR,MAAMwG,YAAA,GAAezF,UAAA,CAAW0F,aAAa;IAE7C,MAAMC,MAAA,GAASA,CAAA;MACb1F,MAAA,CAAO2F,cAAc,GAAGC,IAAI,CAAC;QAC3BzB,gCAAA;MACF;IACF;IAEA0B,MAAA,CAAO5B,gBAAgB,CAAC,UAAUyB,MAAA;IAClC,IAAIF,YAAA,EAAc;MAChBA,YAAA,CAAavB,gBAAgB,CAAC,UAAUyB,MAAA;IAC1C;IAEA,OAAO;MACLG,MAAA,CAAO3B,mBAAmB,CAAC,UAAUwB,MAAA;MACrC,IAAIF,YAAA,EAAc;QAChBA,YAAA,CAAatB,mBAAmB,CAAC,UAAUwB,MAAA;MAC7C;IACF;EACF,GAAG,CAAC1F,MAAA,EAAQmE,gCAAA,EAAkCpE,UAAA,CAAW;EAEzDf,SAAA,CAAU;IACRgB,MAAA,CAAO2F,cAAc,GAAGC,IAAI,CAAC;MAC3BzB,gCAAA;IACF;IACA,OAAO9F,aAAA,CACL2B,MAAA,CAAO8F,sBAAsB,CAAC,CAAC;MAAEC;IAAW,CAAE;MAC5CA,WAAA,CAAYH,IAAI,CAAC;QACfzB,gCAAA;MACF;IACF,IAEAnE,MAAA,CAAOgG,eAAe,CACpBlH,wBAAA,EACA;MACEH,SAAA,CAAU,MAAMqB,MAAA,CAAO4F,IAAI,CAAC,UAAUzB,gCAAA;MACtC,OAAO;IACT,GACAvF,oBAAA;EAGN,GAAG,CAACoB,MAAA,EAAQmE,gCAAA,CAAiC;EAE7C,oBACEnC,KAAA,CAAC;IACC,cACE1D,cAAA,CAAeqE,UAAA,CAAWsD,KAAK,CAACC,KAAK,IAAIvD,UAAA,CAAWwD,IAAI,EAAEvD,IAAA,KAASD,UAAA,CAAWwD,IAAI;IAEpFlE,SAAA,EAAU;IACVmE,GAAA,EAAK5D,kBAAA;IACL6D,IAAA,EAAK;4BAELjG,IAAA,CAAC;MAAI6B,SAAA,EAAU;MAAQmE,GAAA,EAAKvD;QAC3BhC,YAAA,EAAcc,QAAA,IACbd,YAAA,CAAac,QAAQ,EAAEC,aAAA,EAAeC,MAAA,CAAOQ,GAAA,CAAI,CAAC3B,KAAA,EAAO4F,CAAA;MACvD,oBACElG,IAAA,CAACG,qBAAA;QACCR,UAAA,EAAYA,UAAA;QACZC,MAAA,EAAQA,MAAA;QACRU,KAAA,EAAOA,KAAA;QACPC,KAAA,EAAO2F,CAAA;QAEP1F,aAAA,EAAeA;SADVF,KAAA,CAAML,GAAG;IAIpB;;AAGR;AAEA,SAAAkG,iBAAAvG,MAAA,EAAAD,UAAA;EAAA,MAAAU,CAAA,GAAAvC,EAAA;EAIE,OAAAsI,MAAA,EAAAC,SAAA,IAA4BtH,QAAA,CAAS;EACrC,MAAAuH,UAAA,GAAmBtI,kBAAA;EAAA,IAAAoC,EAAA;EAAA,IAAAC,CAAA,QAAAT,MAAA;IAEaQ,EAAA,GAAAA,CAAA;MAC9BR,MAAA,CAAA2F,cAAqB,GAAAC,IAAO,CAAC;QAE3B,IAAI5F,MAAA,CAAA2G,WAAkB;UAAA;QAAA;QAGtB,MAAAvC,SAAA,GAAkB5F,aAAA;QAClB,MAAA6F,eAAA,GAAwBxF,eAAA,CAAgBmB,MAAA,CAAAsE,OAAc;QACtD,MAAAI,WAAA,GAAoB1E,MAAA,CAAA2E,cAAqB;QAEzC,IACEN,eAAA,KAAoB,IAG8B,KAFjD,CAAC5F,iBAAA,CAAkB2F,SAAA,CACF,IAAhBM,WAAA,KAAgB,IACgC,IAFjD,CAEEA,WAAA,CAAAX,QAAoB,CAACM,eAAA,CAAAQ,UAA0B;UAElD4B,SAAA,CAAU;UAAA;QAAA;QAIZ,IAAI,CAAChI,iBAAA,CAAkB2F,SAAA;UAAA;QAAA;QAIvB,IAAIA,SAAA,CAAAwC,cAAwB,OAAO;UACjC,MAAAC,KAAA,GAAczC,SAAA,CAAA0C,QAAkB;UAChC,IAAAC,iBAAA,GAAwB;UACxB,KAAK,MAAAC,IAAM,IAAQH,KAAA;YACjB,IAAInI,WAAA,CAAYsI,IAAA;cACdP,SAAA,CAAU;cACVM,iBAAA,CAAAA,CAAA,CAAoBA,IAAA;cACpB;YAAA;UACF;UAEF,IAAI,CAACA,iBAAA;YACHN,SAAA,CAAU;UAAA;QACZ;UAEAA,SAAA,CAAU;QAAA;QAGZ,MAAAQ,cAAA,GAAuB7C,SAAA,CAAAwC,cAAwB,GAAAM,OAAU,CAAC,OAAO;QACjE,IAAI,CAAC9C,SAAA,CAAAQ,WAAqB,EAAyB,IAAnBqC,cAAA,KAAmB;UACjDR,SAAA,CAAU;UAAA;QAAA;MAEZ,CACF;IAAA,CACF;IAAAhG,CAAA,MAAAT,MAAA;IAAAS,CAAA,MAAAD,EAAA;EAAA;IAAAA,EAAA,GAAAC,CAAA;EAAA;EA/CA,MAAA0G,WAAA,GAAoB3G,EA+CT;EAAA,IAAAM,EAAA;EAAA,IAAAK,EAAA;EAAA,IAAAV,CAAA,QAAA0G,WAAA;IAEDrG,EAAA,GAAAA,CAAA;MACR+C,QAAA,CAAAI,gBAAyB,CAAC,mBAAmBkD,WAAA;MAC7CtD,QAAA,CAAAI,gBAAyB,CAAC,WAAWkD,WAAA;MAAA,OAC9B;QACLtD,QAAA,CAAAK,mBAA4B,CAAC,mBAAmBiD,WAAA;QAChDtD,QAAA,CAAAK,mBAA4B,CAAC,WAAWiD,WAAA;MAAA,CAC1C;IAAA,CACF;IAAGhG,EAAA,IAACgG,WAAA,CAAY;IAAA1G,CAAA,MAAA0G,WAAA;IAAA1G,CAAA,MAAAK,EAAA;IAAAL,CAAA,MAAAU,EAAA;EAAA;IAAAL,EAAA,GAAAL,CAAA;IAAAU,EAAA,GAAAV,CAAA;EAAA;EAPhBzB,SAAA,CAAU8B,EAOV,EAAGK,EAAa;EAAA,IAAAM,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAjB,CAAA,QAAAT,MAAA,IAAAS,CAAA,QAAA0G,WAAA;IAEN1F,EAAA,GAAAA,CAAA,KACDpD,aAAA,CACL2B,MAAA,CAAA8F,sBAA6B,CAAC;MAC5BqB,WAAA;IAAA,CACF,GACAnH,MAAA,CAAAoH,oBAA2B,CAAC;MAC1B,IAAIpH,MAAA,CAAA2E,cAAqB,OAAO;QAC9B8B,SAAA,CAAU;MAAA;IACZ,CACF,EAEJ;IAAG/E,EAAA,IAAC1B,MAAA,EAAQmH,WAAA,CAAY;IAAA1G,CAAA,MAAAT,MAAA;IAAAS,CAAA,MAAA0G,WAAA;IAAA1G,CAAA,MAAAgB,EAAA;IAAAhB,CAAA,MAAAiB,EAAA;EAAA;IAAAD,EAAA,GAAAhB,CAAA;IAAAiB,EAAA,GAAAjB,CAAA;EAAA;EAXxBzB,SAAA,CAAUyC,EAWV,EAAGC,EAAqB;EAExB,IAAI,CAAC8E,MAAW,IAAZ,CAAYE,UAAA;IAAA,OACP;EAAA;EACT,IAAAW,EAAA;EAAA,IAAA5G,CAAA,QAAAV,UAAA,IAAAU,CAAA,SAAAT,MAAA;IAEOqH,EAAA,GAAAhI,YAAA,CAAae,IAAA,CAACmC,aAAA;MAAAxC,UAAA;MAAAC;QAA0DD,UAAA;IAAAU,CAAA,MAAAV,UAAA;IAAAU,CAAA,OAAAT,MAAA;IAAAS,CAAA,OAAA4G,EAAA;EAAA;IAAAA,EAAA,GAAA5G,CAAA;EAAA;EAAA,OAAxE4G,EAAwE;AAAA;AAGjF,OAAO,MAAMC,mBAAA,GAA4D9G,EAAA;EAAC;IAAAT;EAAA,IAAAS,EAAc;EACtF,OAAAR,MAAA,IAAiB7B,yBAAA;EAAA,OAEVoI,gBAAA,CAAiBvG,MAAA,EAAQD,UAAA;AAAA,CAClC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAI5C,OAAO,KAA4D,MAAM,OAAO,CAAA;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGtD,OAAO,aAAa,CAAA;AAIpB,eAAO,MAAM,aAAa,iDAMvB;IACD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;IAC3B,MAAM,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,gBAAgB,CAAA;CACvB,sBAoFA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAI5C,OAAO,KAA4D,MAAM,OAAO,CAAA;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGtD,OAAO,aAAa,CAAA;AAIpB,eAAO,MAAM,aAAa,iDAMvB;IACD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;IAC3B,MAAM,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,gBAAgB,CAAA;CACvB,sBAkHA,CAAA"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { Tooltip, useTranslation } from '@payloadcms/ui';
5
- import { $addUpdateTag } from 'lexical';
5
+ import { $addUpdateTag, $getRoot, $getSelection, SKIP_SELECTION_FOCUS_TAG } from 'lexical';
6
6
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
7
  import { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js';
8
8
  import './index.css';
@@ -43,10 +43,34 @@ export const ToolbarButton = ({
43
43
  const className = useMemo(() => {
44
44
  return [baseClass, !enabled ? 'disabled' : '', active ? 'active' : '', item.key ? `${baseClass}-${item.key}` : ''].filter(Boolean).join(' ');
45
45
  }, [active, enabled, item.key]);
46
- const handleClick = useCallback(() => {
46
+ const handleClick = useCallback(event => {
47
47
  if (!enabled) {
48
48
  return;
49
49
  }
50
+ if (event.detail === 0 && item.isActive) {
51
+ const button = event.currentTarget;
52
+ editor.update(() => {
53
+ $addUpdateTag('toolbar');
54
+ $addUpdateTag(SKIP_SELECTION_FOCUS_TAG);
55
+ if (!$getSelection()) {
56
+ $getRoot().selectEnd();
57
+ }
58
+ item.onSelect?.({
59
+ editor,
60
+ isActive: active
61
+ });
62
+ }, {
63
+ onUpdate: () => {
64
+ // Native selection repair can focus contenteditable in Chromium despite the tag.
65
+ if (button.isConnected && button.ownerDocument.activeElement === editor.getRootElement()) {
66
+ button.focus({
67
+ preventScroll: true
68
+ });
69
+ }
70
+ }
71
+ });
72
+ return;
73
+ }
50
74
  editor.focus(() => {
51
75
  editor.update(() => {
52
76
  $addUpdateTag('toolbar');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Tooltip","useTranslation","$addUpdateTag","React","useCallback","useEffect","useMemo","useRef","useState","useEditorConfigContext","baseClass","ToolbarButton","active","children","editor","enabled","item","i18n","fieldProps","featureClientSchemaMap","schemaPath","showTooltip","setShowTooltip","buttonRef","current","removeAttribute","tooltipLabel","label","key","replace","c","toUpperCase","className","filter","Boolean","join","handleClick","focus","update","onSelect","isActive","handleMouseDown","e","preventDefault","currentTarget","setAttribute","_jsxs","undefined","disabled","onClick","onMouseDown","onPointerEnter","onPointerLeave","ref","type","_jsx","show"],"sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { Tooltip, useTranslation } from '@payloadcms/ui'\nimport { $addUpdateTag } from 'lexical'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport './index.css'\n\nconst baseClass = 'toolbar-popup__button'\n\nexport const ToolbarButton = ({\n active = false,\n children,\n editor,\n enabled = true,\n item,\n}: {\n active?: boolean\n children: React.JSX.Element\n editor: LexicalEditor\n enabled?: boolean\n item: ToolbarGroupItem\n}) => {\n const { i18n } = useTranslation<{}, string>()\n const {\n fieldProps: { featureClientSchemaMap, schemaPath },\n } = useEditorConfigContext()\n\n const [showTooltip, setShowTooltip] = useState(false)\n const buttonRef = useRef<HTMLButtonElement>(null)\n\n // Clear pressing state when active prop changes (React has re-rendered)\n useEffect(() => {\n buttonRef.current?.removeAttribute('data-pressing')\n }, [active])\n\n const tooltipLabel = useMemo(() => {\n if (item.label) {\n return typeof item.label === 'function'\n ? item.label({ featureClientSchemaMap, i18n, schemaPath })\n : item.label\n }\n // Convert camelCase key to Title Case (e.g. \"inlineCode\" -> \"Inline Code\")\n return item.key.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/^./, (c) => c.toUpperCase())\n }, [featureClientSchemaMap, i18n, schemaPath, item])\n\n const className = useMemo(() => {\n return [\n baseClass,\n !enabled ? 'disabled' : '',\n active ? 'active' : '',\n item.key ? `${baseClass}-${item.key}` : '',\n ]\n .filter(Boolean)\n .join(' ')\n }, [active, enabled, item.key])\n\n const handleClick = useCallback(() => {\n if (!enabled) {\n return\n }\n\n editor.focus(() => {\n editor.update(() => {\n $addUpdateTag('toolbar')\n })\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect?.({\n editor,\n isActive: active,\n })\n })\n }, [editor, item, active, enabled])\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n // Suppress hover flash between mouseup and React adding .active class\n ;(e.currentTarget as HTMLElement).setAttribute('data-pressing', '')\n }, [])\n\n return (\n <button\n aria-label={tooltipLabel}\n aria-pressed={item.isActive ? active : undefined}\n className={className}\n data-button-key={item.key}\n disabled={!enabled}\n onClick={handleClick}\n onMouseDown={handleMouseDown}\n onPointerEnter={() => setShowTooltip(true)}\n onPointerLeave={() => {\n setShowTooltip(false)\n buttonRef.current?.removeAttribute('data-pressing')\n }}\n ref={buttonRef}\n type=\"button\"\n >\n <Tooltip className={`${baseClass}__tooltip`} show={showTooltip}>\n {tooltipLabel}\n </Tooltip>\n {children}\n </button>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Tooltip","useTranslation","$addUpdateTag","$getRoot","$getSelection","SKIP_SELECTION_FOCUS_TAG","React","useCallback","useEffect","useMemo","useRef","useState","useEditorConfigContext","baseClass","ToolbarButton","active","children","editor","enabled","item","i18n","fieldProps","featureClientSchemaMap","schemaPath","showTooltip","setShowTooltip","buttonRef","current","removeAttribute","tooltipLabel","label","key","replace","c","toUpperCase","className","filter","Boolean","join","handleClick","event","detail","isActive","button","currentTarget","update","selectEnd","onSelect","onUpdate","isConnected","ownerDocument","activeElement","getRootElement","focus","preventScroll","handleMouseDown","e","preventDefault","setAttribute","_jsxs","undefined","disabled","onClick","onMouseDown","onPointerEnter","onPointerLeave","ref","type","_jsx","show"],"sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { Tooltip, useTranslation } from '@payloadcms/ui'\nimport { $addUpdateTag, $getRoot, $getSelection, SKIP_SELECTION_FOCUS_TAG } from 'lexical'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport './index.css'\n\nconst baseClass = 'toolbar-popup__button'\n\nexport const ToolbarButton = ({\n active = false,\n children,\n editor,\n enabled = true,\n item,\n}: {\n active?: boolean\n children: React.JSX.Element\n editor: LexicalEditor\n enabled?: boolean\n item: ToolbarGroupItem\n}) => {\n const { i18n } = useTranslation<{}, string>()\n const {\n fieldProps: { featureClientSchemaMap, schemaPath },\n } = useEditorConfigContext()\n\n const [showTooltip, setShowTooltip] = useState(false)\n const buttonRef = useRef<HTMLButtonElement>(null)\n\n // Clear pressing state when active prop changes (React has re-rendered)\n useEffect(() => {\n buttonRef.current?.removeAttribute('data-pressing')\n }, [active])\n\n const tooltipLabel = useMemo(() => {\n if (item.label) {\n return typeof item.label === 'function'\n ? item.label({ featureClientSchemaMap, i18n, schemaPath })\n : item.label\n }\n // Convert camelCase key to Title Case (e.g. \"inlineCode\" -> \"Inline Code\")\n return item.key.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/^./, (c) => c.toUpperCase())\n }, [featureClientSchemaMap, i18n, schemaPath, item])\n\n const className = useMemo(() => {\n return [\n baseClass,\n !enabled ? 'disabled' : '',\n active ? 'active' : '',\n item.key ? `${baseClass}-${item.key}` : '',\n ]\n .filter(Boolean)\n .join(' ')\n }, [active, enabled, item.key])\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!enabled) {\n return\n }\n\n if (event.detail === 0 && item.isActive) {\n const button = event.currentTarget\n\n editor.update(\n () => {\n $addUpdateTag('toolbar')\n $addUpdateTag(SKIP_SELECTION_FOCUS_TAG)\n if (!$getSelection()) {\n $getRoot().selectEnd()\n }\n item.onSelect?.({ editor, isActive: active })\n },\n {\n onUpdate: () => {\n // Native selection repair can focus contenteditable in Chromium despite the tag.\n if (\n button.isConnected &&\n button.ownerDocument.activeElement === editor.getRootElement()\n ) {\n button.focus({ preventScroll: true })\n }\n },\n },\n )\n return\n }\n\n editor.focus(() => {\n editor.update(() => {\n $addUpdateTag('toolbar')\n })\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect?.({\n editor,\n isActive: active,\n })\n })\n },\n [editor, item, active, enabled],\n )\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n // Suppress hover flash between mouseup and React adding .active class\n ;(e.currentTarget as HTMLElement).setAttribute('data-pressing', '')\n }, [])\n\n return (\n <button\n aria-label={tooltipLabel}\n aria-pressed={item.isActive ? active : undefined}\n className={className}\n data-button-key={item.key}\n disabled={!enabled}\n onClick={handleClick}\n onMouseDown={handleMouseDown}\n onPointerEnter={() => setShowTooltip(true)}\n onPointerLeave={() => {\n setShowTooltip(false)\n buttonRef.current?.removeAttribute('data-pressing')\n }}\n ref={buttonRef}\n type=\"button\"\n >\n <Tooltip className={`${baseClass}__tooltip`} show={showTooltip}>\n {tooltipLabel}\n </Tooltip>\n {children}\n </button>\n )\n}\n"],"mappings":"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","ignoreList":[]}