@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":"useToolbarKeyboardNavigation.js","names":["useEffect","useToolbarKeyboardNavigation","toolbarRef","toolbar","current","activeButton","getButtons","Array","from","querySelectorAll","filter","button","closest","updateTabStops","buttons","enabledButtons","disabled","includes","tabIndex","handleFocus","event","find","target","handleKeyDown","altKey","ctrlKey","metaKey","shiftKey","index","findIndex","isRTL","getComputedStyle","direction","nextIndex","key","length","preventDefault","stopPropagation","focus","observer","MutationObserver","observe","attributeFilter","childList","subtree","addEventListener","disconnect","removeEventListener"],"sources":["../../../../src/features/toolbars/shared/useToolbarKeyboardNavigation.ts"],"sourcesContent":["'use client'\n\nimport type { RefObject } from 'react'\n\nimport { useEffect } from 'react'\n\nexport function useToolbarKeyboardNavigation({\n toolbarRef,\n}: {\n toolbarRef: RefObject<HTMLDivElement | null>\n}) {\n useEffect(() => {\n const toolbar = toolbarRef.current\n\n if (!toolbar) {\n return\n }\n\n let activeButton: HTMLButtonElement | undefined\n const getButtons = () =>\n Array.from(toolbar.querySelectorAll<HTMLButtonElement>('button')).filter(\n (button) =>\n !button.closest('[role=\"menu\"]') && button.closest('[role=\"toolbar\"]') === toolbar,\n )\n\n const updateTabStops = () => {\n const buttons = getButtons()\n const enabledButtons = buttons.filter((button) => !button.disabled)\n\n if (!activeButton || !enabledButtons.includes(activeButton)) {\n activeButton = enabledButtons[0]\n }\n\n for (const button of buttons) {\n button.tabIndex = button === activeButton ? 0 : -1\n }\n }\n\n const handleFocus = (event: FocusEvent) => {\n const button = getButtons().find((button) => button === event.target)\n\n if (button) {\n activeButton = button\n updateTabStops()\n }\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return\n }\n\n const buttons = getButtons().filter((button) => !button.disabled)\n const index = buttons.findIndex((button) => button === event.target)\n\n // Dropdown menus and custom inputs retain their own keyboard behavior.\n if (index === -1) {\n return\n }\n\n const isRTL = getComputedStyle(toolbar).direction === 'rtl'\n let nextIndex: number\n\n switch (event.key) {\n case 'ArrowLeft':\n nextIndex = index + (isRTL ? 1 : -1)\n break\n case 'ArrowRight':\n nextIndex = index + (isRTL ? -1 : 1)\n break\n case 'End':\n nextIndex = buttons.length - 1\n break\n case 'Home':\n nextIndex = 0\n break\n default:\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n buttons[(nextIndex + buttons.length) % buttons.length]?.focus()\n }\n\n updateTabStops()\n const observer = new MutationObserver(updateTabStops)\n\n observer.observe(toolbar, { attributeFilter: ['disabled'], childList: true, subtree: true })\n toolbar.addEventListener('focusin', handleFocus)\n toolbar.addEventListener('keydown', handleKeyDown)\n\n return () => {\n observer.disconnect()\n toolbar.removeEventListener('focusin', handleFocus)\n toolbar.removeEventListener('keydown', handleKeyDown)\n }\n }, [toolbarRef])\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useToolbarKeyboardNavigation.js","names":["c","_c","useEffect","useToolbarKeyboardNavigation","t0","$","toolbarRef","t1","t2","toolbar","current","activeButton","getButtons","Array","from","querySelectorAll","filter","button","closest","updateTabStops","buttons","enabledButtons","_temp","includes","button_1","tabIndex","handleFocus","event","button_3","find","button_2","target","handleKeyDown","event_0","altKey","ctrlKey","metaKey","shiftKey","buttons_0","_temp2","index","findIndex","button_5","isRTL","getComputedStyle","direction","nextIndex","bb58","key","length","preventDefault","stopPropagation","focus","observer","MutationObserver","observe","attributeFilter","childList","subtree","addEventListener","disconnect","removeEventListener","button_4","disabled","button_0"],"sources":["../../../../src/features/toolbars/shared/useToolbarKeyboardNavigation.ts"],"sourcesContent":["'use client'\n\nimport type { RefObject } from 'react'\n\nimport { useEffect } from 'react'\n\nexport function useToolbarKeyboardNavigation({\n toolbarRef,\n}: {\n toolbarRef: RefObject<HTMLDivElement | null>\n}) {\n useEffect(() => {\n const toolbar = toolbarRef.current\n\n if (!toolbar) {\n return\n }\n\n let activeButton: HTMLButtonElement | undefined\n const getButtons = () =>\n Array.from(toolbar.querySelectorAll<HTMLButtonElement>('button')).filter(\n (button) =>\n !button.closest('[role=\"menu\"]') && button.closest('[role=\"toolbar\"]') === toolbar,\n )\n\n const updateTabStops = () => {\n const buttons = getButtons()\n const enabledButtons = buttons.filter((button) => !button.disabled)\n\n if (!activeButton || !enabledButtons.includes(activeButton)) {\n activeButton = enabledButtons[0]\n }\n\n for (const button of buttons) {\n button.tabIndex = button === activeButton ? 0 : -1\n }\n }\n\n const handleFocus = (event: FocusEvent) => {\n const button = getButtons().find((button) => button === event.target)\n\n if (button) {\n activeButton = button\n updateTabStops()\n }\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return\n }\n\n const buttons = getButtons().filter((button) => !button.disabled)\n const index = buttons.findIndex((button) => button === event.target)\n\n // Dropdown menus and custom inputs retain their own keyboard behavior.\n if (index === -1) {\n return\n }\n\n const isRTL = getComputedStyle(toolbar).direction === 'rtl'\n let nextIndex: number\n\n switch (event.key) {\n case 'ArrowLeft':\n nextIndex = index + (isRTL ? 1 : -1)\n break\n case 'ArrowRight':\n nextIndex = index + (isRTL ? -1 : 1)\n break\n case 'End':\n nextIndex = buttons.length - 1\n break\n case 'Home':\n nextIndex = 0\n break\n default:\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n buttons[(nextIndex + buttons.length) % buttons.length]?.focus()\n }\n\n updateTabStops()\n const observer = new MutationObserver(updateTabStops)\n\n observer.observe(toolbar, { attributeFilter: ['disabled'], childList: true, subtree: true })\n toolbar.addEventListener('focusin', handleFocus)\n toolbar.addEventListener('keydown', handleKeyDown)\n\n return () => {\n observer.disconnect()\n toolbar.removeEventListener('focusin', handleFocus)\n toolbar.removeEventListener('keydown', handleKeyDown)\n }\n }, [toolbarRef])\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","toast","$getNodeByKey","COMMAND_PRIORITY_EDITOR","React","useCallback","useEffect","useState","useLexicalListDrawer","$createUploadNode","INSERT_UPLOAD_COMMAND","INSERT_UPLOAD_WITH_DRAWER_COMMAND","insertUpload","editor","relationTo","replaceNodeKey","value","dispatchCommand","fields","update","node","replace","data","UploadDrawerComponent","t0","$","enabledCollectionSlugs","setReplaceNodeKey","t1","collectionSlugs","uploads","closeListDrawer","ListDrawer","openListDrawer","t2","t3","registerCommand","payload","nodeKey","t4","t5","collectionSlug","doc","id","onSelect","_jsx","UploadDrawerComponentFallback","_temp","UploadDrawer","length","error"],"sources":["../../../../../src/features/upload/client/drawer/index.tsx"],"sourcesContent":["'use client'\nimport type { ListDrawerProps } from '@payloadcms/ui'\nimport type { LexicalEditor } from 'lexical'\nimport type { UploadCollectionSlug } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { toast } from '@payloadcms/ui'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useLexicalListDrawer } from '../../../../utilities/fieldsDrawer/useLexicalListDrawer.js'\nimport { $createUploadNode } from '../nodes/UploadNode.js'\nimport { INSERT_UPLOAD_COMMAND } from '../plugin/index.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from './commands.js'\n\nconst insertUpload = ({\n editor,\n relationTo,\n replaceNodeKey,\n value,\n}: {\n editor: LexicalEditor\n relationTo: string\n replaceNodeKey: null | string\n value: number | string\n}) => {\n if (!replaceNodeKey) {\n editor.dispatchCommand(INSERT_UPLOAD_COMMAND, {\n // @ts-expect-error - TODO: fix this\n fields: null,\n relationTo,\n value,\n })\n } else {\n editor.update(() => {\n const node = $getNodeByKey(replaceNodeKey)\n if (node) {\n node.replace(\n $createUploadNode({\n data: {\n // @ts-expect-error - TODO: fix this\n fields: null,\n relationTo,\n value,\n },\n }),\n )\n }\n })\n }\n}\n\ntype Props = {\n enabledCollectionSlugs: UploadCollectionSlug[]\n}\n\nconst UploadDrawerComponent: React.FC<Props> = ({ enabledCollectionSlugs }) => {\n const [editor] = useLexicalComposerContext()\n\n const [replaceNodeKey, setReplaceNodeKey] = useState<null | string>(null)\n\n const { closeListDrawer, ListDrawer, openListDrawer } = useLexicalListDrawer({\n collectionSlugs: enabledCollectionSlugs,\n uploads: true,\n })\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_UPLOAD_WITH_DRAWER_COMMAND,\n (payload) => {\n setReplaceNodeKey(payload?.replace ? payload?.replace.nodeKey : null)\n openListDrawer()\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor, openListDrawer])\n\n const onSelect = useCallback<NonNullable<ListDrawerProps['onSelect']>>(\n ({ collectionSlug, doc }) => {\n closeListDrawer()\n insertUpload({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: doc.id,\n })\n },\n [editor, closeListDrawer, replaceNodeKey],\n )\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nconst UploadDrawerComponentFallback: React.FC = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_UPLOAD_WITH_DRAWER_COMMAND,\n () => {\n toast.error('No upload collections enabled')\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor])\n\n return null\n}\n\nexport const UploadDrawer = ({ enabledCollectionSlugs }: Props): React.ReactNode => {\n if (!enabledCollectionSlugs?.length) {\n return <UploadDrawerComponentFallback />\n }\n\n return <UploadDrawerComponent enabledCollectionSlugs={enabledCollectionSlugs} />\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAKA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,KAAK,QAAQ;AACtB,SAASC,aAAa,EAAEC,uBAAuB,QAAQ;AACvD,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAExD,SAASC,oBAAoB,QAAQ;AACrC,SAASC,iBAAiB,QAAQ;AAClC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,iCAAiC,QAAQ;AAElD,MAAMC,YAAA,GAAeA,CAAC;EACpBC,MAAM;EACNC,UAAU;EACVC,cAAc;EACdC;AAAK,CAMN;EACC,IAAI,CAACD,cAAA,EAAgB;IACnBF,MAAA,CAAOI,eAAe,CAACP,qBAAA,EAAuB;MAC5C;MACAQ,MAAA,EAAQ;MACRJ,UAAA;MACAE;IACF;EACF,OAAO;IACLH,MAAA,CAAOM,MAAM,CAAC;MACZ,MAAMC,IAAA,GAAOlB,aAAA,CAAca,cAAA;MAC3B,IAAIK,IAAA,EAAM;QACRA,IAAA,CAAKC,OAAO,CACVZ,iBAAA,CAAkB;UAChBa,IAAA,EAAM;YACJ;YACAJ,MAAA,EAAQ;YACRJ,UAAA;YACAE;UACF;QACF;MAEJ;IACF;EACF;AACF;AAMA,MAAMO,qBAAA,GAAyCC,EAAA;EAAA,MAAAC,CAAA,GAAA1B,EAAA;EAAC;IAAA2B;EAAA,IAAAF,EAA0B;EACxE,OAAAX,MAAA,IAAiBb,yBAAA;EAEjB,OAAAe,cAAA,EAAAY,iBAAA,IAA4CpB,QAAA,KAAwB;EAAA,IAAAqB,EAAA;EAAA,IAAAH,CAAA,QAAAC,sBAAA;IAESE,EAAA;MAAAC,eAAA,EAC1DH,sBAAA;MAAAI,OAAA;IAAA;IAEnBL,CAAA,MAAAC,sBAAA;IAAAD,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAHA;IAAAM,eAAA;IAAAC,UAAA;IAAAC;EAAA,IAAwDzB,oBAAA,CAAqBoB,EAG7E;EAAA,IAAAM,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAV,CAAA,QAAAZ,MAAA,IAAAY,CAAA,QAAAQ,cAAA;IAEUC,EAAA,GAAAA,CAAA,KACDrB,MAAA,CAAAuB,eAAA,CAAAzB,iCAAA,EAAA0B,OAAA;MAKHV,iBAAA,CAAkBU,OAAA,EAAAhB,OAAA,GAAmBgB,OAAA,EAAAhB,OAAA,CAAAiB,OAAA,OAA2B;MAChEL,cAAA;MAAA;IAAA,GAAA9B,uBAGF;IAEDgC,EAAA,IAACtB,MAAA,EAAQoB,cAAA;IAAeR,CAAA,MAAAZ,MAAA;IAAAY,CAAA,MAAAQ,cAAA;IAAAR,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAU,EAAA;EAAA;IAAAD,EAAA,GAAAT,CAAA;IAAAU,EAAA,GAAAV,CAAA;EAAA;EAZ3BnB,SAAA,CAAU4B,EAYV,EAAGC,EAAwB;EAAA,IAAAI,EAAA;EAAA,IAAAd,CAAA,QAAAM,eAAA,IAAAN,CAAA,QAAAZ,MAAA,IAAAY,CAAA,QAAAV,cAAA;IAGzBwB,EAAA,GAAAC,EAAA;MAAC;QAAAC,cAAA;QAAAC;MAAA,IAAAF,EAAuB;MACtBT,eAAA;MACAnB,YAAA;QAAAC,MAAA;QAAAC,UAAA,EAEc2B,cAAA;QAAA1B,cAAA;QAAAC,KAAA,EAEL0B,GAAA,CAAAC;MAAA,CACT;IAAA;IACFlB,CAAA,MAAAM,eAAA;IAAAN,CAAA,MAAAZ,MAAA;IAAAY,CAAA,MAAAV,cAAA;IAAAU,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EATF,MAAAmB,QAAA,GAAiBL,EAU0B;EAAA,IAAAC,EAAA;EAAA,IAAAf,CAAA,SAAAO,UAAA,IAAAP,CAAA,SAAAmB,QAAA;IAGpCJ,EAAA,GAAAK,IAAA,CAACb,UAAA;MAAAY;IAAA,C;;;;;;;SAADJ,E;CACT;AAEA,MAAMM,6BAAA,GAA0CA,CAAA;EAAA,MAAArB,CAAA,GAAA1B,EAAA;EAC9C,OAAAc,MAAA,IAAiBb,yBAAA;EAAA,IAAAwB,EAAA;EAAA,IAAAI,EAAA;EAAA,IAAAH,CAAA,QAAAZ,MAAA;IAEPW,EAAA,GAAAA,CAAA,KACDX,MAAA,CAAAuB,eAAA,CAAAzB,iCAAA,EAAAoC,KAAA,EAAA5C,uBAQL;IAEDyB,EAAA,IAACf,MAAA;IAAOY,CAAA,MAAAZ,MAAA;IAAAY,CAAA,MAAAD,EAAA;IAAAC,CAAA,MAAAG,EAAA;EAAA;IAAAJ,EAAA,GAAAC,CAAA;IAAAG,EAAA,GAAAH,CAAA;EAAA;EAXXnB,SAAA,CAAUkB,EAWV,EAAGI,EAAQ;EAAA;AAAA,CAGb;AAEA,OAAO,MAAMoB,YAAA,GAAeA,CAAC;EAAEtB;AAAsB,CAAS;EAC5D,IAAI,CAACA,sBAAA,EAAwBuB,MAAA,EAAQ;IACnC,oBAAOJ,IAAA,CAACC,6BAAA;EACV;EAEA,oBAAOD,IAAA,CAACtB,qBAAA;IAAsBG,sBAAA,EAAwBA;;AACxD;AAzBgD,SAAAqB,MAAA;EASxC9C,KAAA,CAAAiD,KAAA,CAAY;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","toast","$getNodeByKey","COMMAND_PRIORITY_EDITOR","React","useCallback","useEffect","useState","useLexicalListDrawer","$createUploadNode","INSERT_UPLOAD_COMMAND","INSERT_UPLOAD_WITH_DRAWER_COMMAND","insertUpload","editor","relationTo","replaceNodeKey","value","dispatchCommand","fields","update","node","replace","data","UploadDrawerComponent","t0","$","enabledCollectionSlugs","setReplaceNodeKey","t1","collectionSlugs","uploads","closeListDrawer","ListDrawer","openListDrawer","t2","t3","registerCommand","payload","nodeKey","t4","t5","collectionSlug","doc","id","onSelect","_jsx","UploadDrawerComponentFallback","_temp","UploadDrawer","length","error"],"sources":["../../../../../src/features/upload/client/drawer/index.tsx"],"sourcesContent":["'use client'\nimport type { ListDrawerProps } from '@payloadcms/ui'\nimport type { LexicalEditor } from 'lexical'\nimport type { UploadCollectionSlug } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { toast } from '@payloadcms/ui'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useLexicalListDrawer } from '../../../../utilities/fieldsDrawer/useLexicalListDrawer.js'\nimport { $createUploadNode } from '../nodes/UploadNode.js'\nimport { INSERT_UPLOAD_COMMAND } from '../plugin/index.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from './commands.js'\n\nconst insertUpload = ({\n editor,\n relationTo,\n replaceNodeKey,\n value,\n}: {\n editor: LexicalEditor\n relationTo: string\n replaceNodeKey: null | string\n value: number | string\n}) => {\n if (!replaceNodeKey) {\n editor.dispatchCommand(INSERT_UPLOAD_COMMAND, {\n // @ts-expect-error - TODO: fix this\n fields: null,\n relationTo,\n value,\n })\n } else {\n editor.update(() => {\n const node = $getNodeByKey(replaceNodeKey)\n if (node) {\n node.replace(\n $createUploadNode({\n data: {\n // @ts-expect-error - TODO: fix this\n fields: null,\n relationTo,\n value,\n },\n }),\n )\n }\n })\n }\n}\n\ntype Props = {\n enabledCollectionSlugs: UploadCollectionSlug[]\n}\n\nconst UploadDrawerComponent: React.FC<Props> = ({ enabledCollectionSlugs }) => {\n const [editor] = useLexicalComposerContext()\n\n const [replaceNodeKey, setReplaceNodeKey] = useState<null | string>(null)\n\n const { closeListDrawer, ListDrawer, openListDrawer } = useLexicalListDrawer({\n collectionSlugs: enabledCollectionSlugs,\n uploads: true,\n })\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_UPLOAD_WITH_DRAWER_COMMAND,\n (payload) => {\n setReplaceNodeKey(payload?.replace ? payload?.replace.nodeKey : null)\n openListDrawer()\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor, openListDrawer])\n\n const onSelect = useCallback<NonNullable<ListDrawerProps['onSelect']>>(\n ({ collectionSlug, doc }) => {\n closeListDrawer()\n insertUpload({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: doc.id,\n })\n },\n [editor, closeListDrawer, replaceNodeKey],\n )\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nconst UploadDrawerComponentFallback: React.FC = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n return editor.registerCommand<{\n replace: { nodeKey: string } | false\n }>(\n INSERT_UPLOAD_WITH_DRAWER_COMMAND,\n () => {\n toast.error('No upload collections enabled')\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor])\n\n return null\n}\n\nexport const UploadDrawer = ({ enabledCollectionSlugs }: Props): React.ReactNode => {\n if (!enabledCollectionSlugs?.length) {\n return <UploadDrawerComponentFallback />\n }\n\n return <UploadDrawerComponent enabledCollectionSlugs={enabledCollectionSlugs} />\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$dfsIterator","$insertNodeToNearestRoot","mergeRegister","useBulkUpload","useEffectEvent","useModal","ObjectID","$createRangeSelection","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","$setSelection","COMMAND_PRIORITY_EDITOR","COMMAND_PRIORITY_LOW","createCommand","DROP_COMMAND","getDOMSelectionFromTarget","isHTMLElement","PASTE_COMMAND","React","useEffect","useEnabledRelationships","UploadDrawer","$createUploadNode","$isUploadNode","UploadNode","canDropImage","event","target","closest","parentElement","getDragSelection","range","domSelection","document","caretRangeFromPoint","clientX","clientY","rangeParent","collapse","rangeOffset","getRangeAt","Error","INSERT_UPLOAD_COMMAND","UploadPlugin","t0","$","clientProps","editor","t1","enabledCollectionSlugs","modalSlug","bulkUploadModalSlug","setCollectionSlug","setInitialForms","setOnCancel","setOnSuccess","setSelectableCollections","isModalOpen","openModal","t2","t3","files","length","initialForms","map","_temp","update","_temp2","newDocs","newDocsMap","Map","_temp3","dfsNode_0","node_0","dfsNode","node","nodeData_0","getData","nodeData","pending","newDoc","get","formID","replace","data","id","default","toHexString","fields","relationTo","collectionSlug","value","doc","openBulkUpload","hasNodes","pendingUploads","WeakSet","registerNodeTransform","node_1","nodeData_1","has","add","upload","transformedImage","src","startsWith","mimeMatch","match","mimeType","base64Data","byteCharacters","atob","byteNumbers","Array","i","charCodeAt","byteArray","Uint8Array","file_0","File","split","type","file","res","fetch","blob","inferredFileName","pop","file_1","registerCommand","payload","selection","uploadNode","focus","focusNode","getNode","__first","remove","ClipboardEvent","clipboardData","types","includes","files_0","from","forEach","file_2","push","alt","selection_0","file_3","pendingUploadNode","URL","createObjectURL","focus_0","focusNode_0","event_0","DragEvent","dt","dataTransfer","files_1","file_4","preventDefault","stopPropagation","selection_1","undefined","applyDOMRange","file_5","pendingUploadNode_0","focus_1","focusNode_1","t4","t5","_jsx"],"sources":["../../../../../src/features/upload/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $dfsIterator, $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useBulkUpload, useEffectEvent, useModal } from '@payloadcms/ui'\nimport ObjectID from 'bson-objectid'\nimport {\n $createRangeSelection,\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n $setSelection,\n COMMAND_PRIORITY_EDITOR,\n COMMAND_PRIORITY_LOW,\n createCommand,\n DROP_COMMAND,\n getDOMSelectionFromTarget,\n isHTMLElement,\n PASTE_COMMAND,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { Internal_UploadData, UploadData } from '../../server/schema.js'\nimport type { UploadFeaturePropsClient } from '../index.js'\n\nimport { useEnabledRelationships } from '../../../relationship/client/utils/useEnabledRelationships.js'\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $createUploadNode, $isUploadNode, UploadNode } from '../nodes/UploadNode.js'\n\nexport type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>\n\ndeclare global {\n interface DragEvent {\n rangeOffset?: number\n rangeParent?: Node\n }\n}\n\nfunction canDropImage(event: DragEvent): boolean {\n const target = event.target\n return !!(\n isHTMLElement(target) &&\n !target.closest('code, span.editor-image') &&\n isHTMLElement(target.parentElement) &&\n target.parentElement.closest('div.ContentEditable__root')\n )\n}\n\nfunction getDragSelection(event: DragEvent): null | Range | undefined {\n // Source: https://github.com/AlessioGr/lexical/blob/main/packages/lexical-playground/src/plugins/ImagesPlugin/index.tsx\n let range\n const domSelection = getDOMSelectionFromTarget(event.target)\n if (document.caretRangeFromPoint) {\n range = document.caretRangeFromPoint(event.clientX, event.clientY)\n } else if (event.rangeParent && domSelection !== null) {\n domSelection.collapse(event.rangeParent, event.rangeOffset || 0)\n range = domSelection.getRangeAt(0)\n } else {\n throw Error(`Cannot get the selection when dragging`)\n }\n\n return range\n}\n\nexport const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload> =\n createCommand('INSERT_UPLOAD_COMMAND')\n\ntype FileToUpload = {\n alt?: string\n file: File\n /**\n * Bulk Upload Form ID that should be created, which can then be matched\n * against the node formID if the upload is successful\n */\n formID: string\n}\n\nexport const UploadPlugin: PluginComponent<UploadFeaturePropsClient> = ({ clientProps }) => {\n const [editor] = useLexicalComposerContext()\n\n const { enabledCollectionSlugs } = useEnabledRelationships({\n enabledCollectionSlugs: clientProps.enabledCollectionSlugs,\n })\n\n const {\n modalSlug: bulkUploadModalSlug,\n setCollectionSlug,\n setInitialForms,\n setOnCancel,\n setOnSuccess,\n setSelectableCollections,\n } = useBulkUpload()\n\n const { isModalOpen, openModal } = useModal()\n\n const openBulkUpload = useEffectEvent(({ files }: { files: FileToUpload[] }) => {\n if (files?.length === 0) {\n return\n }\n\n setInitialForms((initialForms) => [\n ...(initialForms ?? []),\n ...files.map((file) => ({\n file: file.file,\n formID: file.formID,\n })),\n ])\n\n if (!isModalOpen(bulkUploadModalSlug)) {\n if (!enabledCollectionSlugs.length || !enabledCollectionSlugs[0]) {\n return\n }\n\n setCollectionSlug(enabledCollectionSlugs[0])\n setSelectableCollections(enabledCollectionSlugs)\n\n setOnCancel(() => {\n // Remove all the pending upload nodes that were added but not uploaded\n editor.update(() => {\n for (const dfsNode of $dfsIterator()) {\n const node = dfsNode.node\n\n if ($isUploadNode(node)) {\n const nodeData = node.getData()\n if ((nodeData as Internal_UploadData)?.pending) {\n node.remove()\n }\n }\n }\n })\n })\n\n setOnSuccess((newDocs) => {\n const newDocsMap = new Map(newDocs.map((doc) => [doc.formID, doc]))\n editor.update(() => {\n for (const dfsNode of $dfsIterator()) {\n const node = dfsNode.node\n if ($isUploadNode(node)) {\n const nodeData: Internal_UploadData = node.getData()\n\n if (nodeData?.pending) {\n const newDoc = newDocsMap.get(nodeData.pending?.formID)\n if (newDoc) {\n node.replace(\n $createUploadNode({\n data: {\n id: new ObjectID.default().toHexString(),\n fields: {},\n relationTo: newDoc.collectionSlug,\n value: newDoc.doc.id,\n } as UploadData,\n }),\n )\n }\n }\n }\n }\n })\n })\n\n openModal(bulkUploadModalSlug)\n }\n })\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n const pendingUploads = new WeakSet<NonNullable<Internal_UploadData['pending']>>()\n\n return mergeRegister(\n /**\n * Handle auto-uploading files if you copy & paste an image dom element from the clipboard\n */\n editor.registerNodeTransform(UploadNode, (node) => {\n const nodeData: Internal_UploadData = node.getData()\n if (!nodeData?.pending || pendingUploads.has(nodeData.pending)) {\n return\n }\n\n // Transforms can run again before the pending node is replaced. Queue each upload once.\n pendingUploads.add(nodeData.pending)\n\n async function upload() {\n let transformedImage: FileToUpload | null = null\n\n const src = nodeData?.pending?.src\n const formID = nodeData?.pending?.formID as string\n\n if (src?.startsWith('data:')) {\n // It's a base64-encoded image\n const mimeMatch = src.match(/data:(image\\/[a-zA-Z]+);base64,/)\n const mimeType = mimeMatch ? mimeMatch[1] : 'image/png' // Default to PNG if MIME type not found\n const base64Data = src.replace(/^data:image\\/[a-zA-Z]+;base64,/, '')\n const byteCharacters = atob(base64Data)\n const byteNumbers = new Array(byteCharacters.length)\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i)\n }\n const byteArray = new Uint8Array(byteNumbers)\n const file = new File([byteArray], 'pasted-image.' + mimeType?.split('/', 2)[1], {\n type: mimeType,\n })\n transformedImage = { alt: undefined, file, formID }\n } else if (src?.startsWith('http') || src?.startsWith('https')) {\n // It's an image URL\n const res = await fetch(src)\n const blob = await res.blob()\n const inferredFileName =\n src.split('/').pop() || 'pasted-image' + blob.type.split('/', 2)[1]\n const file = new File([blob], inferredFileName, {\n type: blob.type,\n })\n\n transformedImage = { alt: undefined, file, formID }\n }\n\n if (!transformedImage) {\n return\n }\n\n openBulkUpload({ files: [transformedImage] })\n }\n void upload()\n }),\n editor.registerCommand<InsertUploadPayload>(\n INSERT_UPLOAD_COMMAND,\n (payload: InsertUploadPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const uploadNode = $createUploadNode({\n data: {\n id: payload.id,\n fields: payload.fields,\n relationTo: payload.relationTo,\n value: payload.value,\n },\n })\n // we need to get the focus node before inserting the block node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n // Pending UploadNodes are automatically created when importDOM is called. However, if you paste a file from your computer\n // directly, importDOM won't be called, as it's not a HTML dom element. So we need to handle that case here.\n\n if (!(event instanceof ClipboardEvent)) {\n return false\n }\n const clipboardData = event.clipboardData\n\n if (!clipboardData?.types?.length || clipboardData?.types?.includes('text/html')) {\n // HTML is handled through importDOM => registerNodeTransform for pending UploadNode\n return false\n }\n\n const files: FileToUpload[] = []\n if (clipboardData?.files?.length) {\n Array.from(clipboardData.files).forEach((file) => {\n files.push({\n alt: '',\n file,\n formID: new ObjectID.default().toHexString(),\n })\n })\n }\n\n if (files.length) {\n // Insert a pending UploadNode for each image\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n for (const file of files) {\n const pendingUploadNode = $createUploadNode({\n data: {\n pending: {\n formID: file.formID,\n src: URL.createObjectURL(file.file),\n },\n } as Internal_UploadData,\n })\n // we need to get the focus node before inserting the upload node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(pendingUploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n }\n })\n\n // Open the bulk drawer - the node transform will not open it for us, as it does not handle blob/file uploads\n openBulkUpload({ files })\n\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n // Handle drag & drop of files from the desktop into the editor\n editor.registerCommand(\n DROP_COMMAND,\n (event) => {\n if (!(event instanceof DragEvent)) {\n return false\n }\n\n const dt = event.dataTransfer\n\n if (!dt?.types?.length) {\n return false\n }\n\n const files: FileToUpload[] = []\n if (dt?.files?.length) {\n Array.from(dt.files).forEach((file) => {\n files.push({\n alt: '',\n file,\n formID: new ObjectID.default().toHexString(),\n })\n })\n }\n\n if (files.length) {\n // Prevent the default browser drop handling, which would open the file in the browser\n event.preventDefault()\n event.stopPropagation()\n\n // Insert a PendingUploadNode for each image\n editor.update(() => {\n if (canDropImage(event)) {\n const range = getDragSelection(event)\n const selection = $createRangeSelection()\n if (range !== null && range !== undefined) {\n selection.applyDOMRange(range)\n }\n $setSelection(selection)\n\n for (const file of files) {\n const pendingUploadNode = $createUploadNode({\n data: {\n pending: {\n formID: file.formID,\n src: URL.createObjectURL(file.file),\n },\n } as Internal_UploadData,\n })\n // we need to get the focus node before inserting the upload node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(pendingUploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n }\n })\n\n // Open the bulk drawer - the node transform will not open it for us, as it does not handle blob/file uploads\n openBulkUpload({ files })\n\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor])\n\n return <UploadDrawer enabledCollectionSlugs={enabledCollectionSlugs} />\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$dfsIterator","$insertNodeToNearestRoot","mergeRegister","useBulkUpload","useEffectEvent","useModal","ObjectID","$createRangeSelection","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","$setSelection","COMMAND_PRIORITY_EDITOR","COMMAND_PRIORITY_LOW","createCommand","DROP_COMMAND","getDOMSelectionFromTarget","isHTMLElement","PASTE_COMMAND","React","useEffect","useEnabledRelationships","UploadDrawer","$createUploadNode","$isUploadNode","UploadNode","canDropImage","event","target","closest","parentElement","getDragSelection","range","domSelection","document","caretRangeFromPoint","clientX","clientY","rangeParent","collapse","rangeOffset","getRangeAt","Error","INSERT_UPLOAD_COMMAND","UploadPlugin","t0","$","clientProps","editor","t1","enabledCollectionSlugs","modalSlug","bulkUploadModalSlug","setCollectionSlug","setInitialForms","setOnCancel","setOnSuccess","setSelectableCollections","isModalOpen","openModal","t2","t3","files","length","initialForms","map","_temp","update","_temp2","newDocs","newDocsMap","Map","_temp3","dfsNode_0","node_0","dfsNode","node","nodeData_0","getData","nodeData","pending","newDoc","get","formID","replace","data","id","default","toHexString","fields","relationTo","collectionSlug","value","doc","openBulkUpload","hasNodes","pendingUploads","WeakSet","registerNodeTransform","node_1","nodeData_1","has","add","upload","transformedImage","src","startsWith","mimeMatch","match","mimeType","base64Data","byteCharacters","atob","byteNumbers","Array","i","charCodeAt","byteArray","Uint8Array","file_0","File","split","type","undefined","file","res","fetch","blob","inferredFileName","pop","file_1","registerCommand","payload","selection","uploadNode","focus","focusNode","getNode","__first","remove","ClipboardEvent","clipboardData","types","includes","files_0","from","forEach","file_2","push","alt","selection_0","file_3","pendingUploadNode","URL","createObjectURL","focus_0","focusNode_0","event_0","DragEvent","dt","dataTransfer","files_1","file_4","preventDefault","stopPropagation","selection_1","applyDOMRange","file_5","pendingUploadNode_0","focus_1","focusNode_1","t4","t5","_jsx"],"sources":["../../../../../src/features/upload/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalCommand } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $dfsIterator, $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useBulkUpload, useEffectEvent, useModal } from '@payloadcms/ui'\nimport ObjectID from 'bson-objectid'\nimport {\n $createRangeSelection,\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n $setSelection,\n COMMAND_PRIORITY_EDITOR,\n COMMAND_PRIORITY_LOW,\n createCommand,\n DROP_COMMAND,\n getDOMSelectionFromTarget,\n isHTMLElement,\n PASTE_COMMAND,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { Internal_UploadData, UploadData } from '../../server/schema.js'\nimport type { UploadFeaturePropsClient } from '../index.js'\n\nimport { useEnabledRelationships } from '../../../relationship/client/utils/useEnabledRelationships.js'\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $createUploadNode, $isUploadNode, UploadNode } from '../nodes/UploadNode.js'\n\nexport type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>\n\ndeclare global {\n interface DragEvent {\n rangeOffset?: number\n rangeParent?: Node\n }\n}\n\nfunction canDropImage(event: DragEvent): boolean {\n const target = event.target\n return !!(\n isHTMLElement(target) &&\n !target.closest('code, span.editor-image') &&\n isHTMLElement(target.parentElement) &&\n target.parentElement.closest('div.ContentEditable__root')\n )\n}\n\nfunction getDragSelection(event: DragEvent): null | Range | undefined {\n // Source: https://github.com/AlessioGr/lexical/blob/main/packages/lexical-playground/src/plugins/ImagesPlugin/index.tsx\n let range\n const domSelection = getDOMSelectionFromTarget(event.target)\n if (document.caretRangeFromPoint) {\n range = document.caretRangeFromPoint(event.clientX, event.clientY)\n } else if (event.rangeParent && domSelection !== null) {\n domSelection.collapse(event.rangeParent, event.rangeOffset || 0)\n range = domSelection.getRangeAt(0)\n } else {\n throw Error(`Cannot get the selection when dragging`)\n }\n\n return range\n}\n\nexport const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload> =\n createCommand('INSERT_UPLOAD_COMMAND')\n\ntype FileToUpload = {\n alt?: string\n file: File\n /**\n * Bulk Upload Form ID that should be created, which can then be matched\n * against the node formID if the upload is successful\n */\n formID: string\n}\n\nexport const UploadPlugin: PluginComponent<UploadFeaturePropsClient> = ({ clientProps }) => {\n const [editor] = useLexicalComposerContext()\n\n const { enabledCollectionSlugs } = useEnabledRelationships({\n enabledCollectionSlugs: clientProps.enabledCollectionSlugs,\n })\n\n const {\n modalSlug: bulkUploadModalSlug,\n setCollectionSlug,\n setInitialForms,\n setOnCancel,\n setOnSuccess,\n setSelectableCollections,\n } = useBulkUpload()\n\n const { isModalOpen, openModal } = useModal()\n\n const openBulkUpload = useEffectEvent(({ files }: { files: FileToUpload[] }) => {\n if (files?.length === 0) {\n return\n }\n\n setInitialForms((initialForms) => [\n ...(initialForms ?? []),\n ...files.map((file) => ({\n file: file.file,\n formID: file.formID,\n })),\n ])\n\n if (!isModalOpen(bulkUploadModalSlug)) {\n if (!enabledCollectionSlugs.length || !enabledCollectionSlugs[0]) {\n return\n }\n\n setCollectionSlug(enabledCollectionSlugs[0])\n setSelectableCollections(enabledCollectionSlugs)\n\n setOnCancel(() => {\n // Remove all the pending upload nodes that were added but not uploaded\n editor.update(() => {\n for (const dfsNode of $dfsIterator()) {\n const node = dfsNode.node\n\n if ($isUploadNode(node)) {\n const nodeData = node.getData()\n if ((nodeData as Internal_UploadData)?.pending) {\n node.remove()\n }\n }\n }\n })\n })\n\n setOnSuccess((newDocs) => {\n const newDocsMap = new Map(newDocs.map((doc) => [doc.formID, doc]))\n editor.update(() => {\n for (const dfsNode of $dfsIterator()) {\n const node = dfsNode.node\n if ($isUploadNode(node)) {\n const nodeData: Internal_UploadData = node.getData()\n\n if (nodeData?.pending) {\n const newDoc = newDocsMap.get(nodeData.pending?.formID)\n if (newDoc) {\n node.replace(\n $createUploadNode({\n data: {\n id: new ObjectID.default().toHexString(),\n fields: {},\n relationTo: newDoc.collectionSlug,\n value: newDoc.doc.id,\n },\n }),\n )\n }\n }\n }\n }\n })\n })\n\n openModal(bulkUploadModalSlug)\n }\n })\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n const pendingUploads = new WeakSet<NonNullable<Internal_UploadData['pending']>>()\n\n return mergeRegister(\n /**\n * Handle auto-uploading files if you copy & paste an image dom element from the clipboard\n */\n editor.registerNodeTransform(UploadNode, (node) => {\n const nodeData: Internal_UploadData = node.getData()\n if (!nodeData?.pending || pendingUploads.has(nodeData.pending)) {\n return\n }\n\n // Transforms can run again before the pending node is replaced. Queue each upload once.\n pendingUploads.add(nodeData.pending)\n\n async function upload() {\n let transformedImage: FileToUpload | null = null\n\n const src = nodeData?.pending?.src\n const formID = nodeData?.pending?.formID as string\n\n if (src?.startsWith('data:')) {\n // It's a base64-encoded image\n const mimeMatch = src.match(/data:(image\\/[a-zA-Z]+);base64,/)\n const mimeType = mimeMatch ? mimeMatch[1] : 'image/png' // Default to PNG if MIME type not found\n const base64Data = src.replace(/^data:image\\/[a-zA-Z]+;base64,/, '')\n const byteCharacters = atob(base64Data)\n const byteNumbers = new Array(byteCharacters.length)\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i)\n }\n const byteArray = new Uint8Array(byteNumbers)\n const file = new File([byteArray], 'pasted-image.' + mimeType?.split('/', 2)[1], {\n type: mimeType,\n })\n transformedImage = { alt: undefined, file, formID }\n } else if (src?.startsWith('http') || src?.startsWith('https')) {\n // It's an image URL\n const res = await fetch(src)\n const blob = await res.blob()\n const inferredFileName =\n src.split('/').pop() || 'pasted-image' + blob.type.split('/', 2)[1]\n const file = new File([blob], inferredFileName, {\n type: blob.type,\n })\n\n transformedImage = { alt: undefined, file, formID }\n }\n\n if (!transformedImage) {\n return\n }\n\n openBulkUpload({ files: [transformedImage] })\n }\n void upload()\n }),\n editor.registerCommand<InsertUploadPayload>(\n INSERT_UPLOAD_COMMAND,\n (payload: InsertUploadPayload) => {\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const uploadNode = $createUploadNode({\n data: {\n id: payload.id,\n fields: payload.fields,\n relationTo: payload.relationTo,\n value: payload.value,\n },\n })\n // we need to get the focus node before inserting the block node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n // Pending UploadNodes are automatically created when importDOM is called. However, if you paste a file from your computer\n // directly, importDOM won't be called, as it's not a HTML dom element. So we need to handle that case here.\n\n if (!(event instanceof ClipboardEvent)) {\n return false\n }\n const clipboardData = event.clipboardData\n\n if (!clipboardData?.types?.length || clipboardData?.types?.includes('text/html')) {\n // HTML is handled through importDOM => registerNodeTransform for pending UploadNode\n return false\n }\n\n const files: FileToUpload[] = []\n if (clipboardData?.files?.length) {\n Array.from(clipboardData.files).forEach((file) => {\n files.push({\n alt: '',\n file,\n formID: new ObjectID.default().toHexString(),\n })\n })\n }\n\n if (files.length) {\n // Insert a pending UploadNode for each image\n editor.update(() => {\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n for (const file of files) {\n const pendingUploadNode = $createUploadNode({\n data: {\n pending: {\n formID: file.formID,\n src: URL.createObjectURL(file.file),\n },\n } as Internal_UploadData,\n })\n // we need to get the focus node before inserting the upload node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(pendingUploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n }\n })\n\n // Open the bulk drawer - the node transform will not open it for us, as it does not handle blob/file uploads\n openBulkUpload({ files })\n\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n // Handle drag & drop of files from the desktop into the editor\n editor.registerCommand(\n DROP_COMMAND,\n (event) => {\n if (!(event instanceof DragEvent)) {\n return false\n }\n\n const dt = event.dataTransfer\n\n if (!dt?.types?.length) {\n return false\n }\n\n const files: FileToUpload[] = []\n if (dt?.files?.length) {\n Array.from(dt.files).forEach((file) => {\n files.push({\n alt: '',\n file,\n formID: new ObjectID.default().toHexString(),\n })\n })\n }\n\n if (files.length) {\n // Prevent the default browser drop handling, which would open the file in the browser\n event.preventDefault()\n event.stopPropagation()\n\n // Insert a PendingUploadNode for each image\n editor.update(() => {\n if (canDropImage(event)) {\n const range = getDragSelection(event)\n const selection = $createRangeSelection()\n if (range !== null && range !== undefined) {\n selection.applyDOMRange(range)\n }\n $setSelection(selection)\n\n for (const file of files) {\n const pendingUploadNode = $createUploadNode({\n data: {\n pending: {\n formID: file.formID,\n src: URL.createObjectURL(file.file),\n },\n } as Internal_UploadData,\n })\n // we need to get the focus node before inserting the upload node, as $insertNodeToNearestRoot can change the focus node\n const { focus } = selection\n const focusNode = focus.getNode()\n // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(pendingUploadNode)\n\n // Delete the node it it's an empty paragraph\n if ($isParagraphNode(focusNode) && !focusNode.__first) {\n focusNode.remove()\n }\n }\n }\n })\n\n // Open the bulk drawer - the node transform will not open it for us, as it does not handle blob/file uploads\n openBulkUpload({ files })\n\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor])\n\n return <UploadDrawer enabledCollectionSlugs={enabledCollectionSlugs} />\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","FieldContext","FieldPathContext","ServerFunctionsContext","ShimmerEffect","useServerFunctions","React","useCallback","useEffect","useRef","RenderLexical","args","$","name","field","initialValue","label","Loading","path","schemaPath","setValue","value","Component","setComponent","useState","serverFunctionContext","_internal_renderField","entityType","entitySlug","split","fieldName","undefined","fieldLabel","fieldPath","t0","render","Field","hidden","renderLexical","mounted","t1","t2","current","_jsx","adjustedServerFunctionContext","getFormState","getFormStateArgs","collectionSlug","globalSlug","children","fieldValue","disabled","formInitializing","formProcessing","formSubmitted","_temp","showError"],"sources":["../../../src/field/RenderLexical/index.tsx"],"sourcesContent":["'use client'\nimport {\n FieldContext,\n FieldPathContext,\n type FieldType,\n type RenderFieldServerFnArgs,\n ServerFunctionsContext,\n type ServerFunctionsContextType,\n ShimmerEffect,\n useServerFunctions,\n} from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport type { LexicalRichTextField } from '../../types/index.js'\nimport type { DefaultTypedEditorState } from '../../types/nodeTypes.js'\n\n/**\n * Utility to render a lexical editor on the client.\n *\n * @experimental - may break in minor releases\n * @todo - replace this with a general utility that works for all fields. Maybe merge with packages/ui/src/forms/RenderFields/RenderField.tsx\n */\nexport const RenderLexical: React.FC<\n /**\n * If value or setValue, or both, is provided, this component will manage its own value.\n * If neither is passed, it will rely on the parent form to manage the value.\n */\n {\n /** @deprecated Use `name` and `label` instead. */\n field?: Partial<LexicalRichTextField>\n /**\n * Override the loading state while the field component is being fetched and rendered.\n */\n Loading?: React.ReactElement\n\n setValue?: FieldType<DefaultTypedEditorState | undefined>['setValue']\n value?: FieldType<DefaultTypedEditorState | undefined>['value']\n } & Omit<RenderFieldServerFnArgs, 'hidden'>\n> = (args) => {\n const { name, field, initialValue, label, Loading, path, schemaPath, setValue, value } = args\n const [Component, setComponent] = React.useState<null | React.ReactNode>(null)\n const serverFunctionContext = useServerFunctions()\n const { _internal_renderField } = serverFunctionContext\n\n const [entityType, entitySlug] = schemaPath.split('.', 2)\n\n const fieldName = name !== undefined ? name : field?.name\n const fieldLabel = label !== undefined ? label : field?.label\n const fieldPath = path ?? fieldName ?? ''\n\n const renderLexical = useCallback(() => {\n async function render() {\n const { Field } = await _internal_renderField({\n name: fieldName,\n // When using \"fake\" anchor fields, hidden is often set to true.\n // We need to override that here to ensure the field is rendered.\n hidden: false,\n initialValue: initialValue ?? undefined,\n label: typeof fieldLabel === 'function' ? undefined : fieldLabel,\n path,\n schemaPath,\n })\n\n setComponent(Field)\n }\n void render()\n }, [_internal_renderField, schemaPath, path, fieldName, fieldLabel, initialValue])\n\n const mounted = useRef(false)\n\n useEffect(() => {\n if (mounted.current) {\n return\n }\n mounted.current = true\n void renderLexical()\n }, [renderLexical])\n\n if (!Component) {\n return typeof Loading !== 'undefined' ? Loading : <ShimmerEffect />\n }\n\n /**\n * By default, the lexical will make form state requests (e.g. to get drawer fields), passing in the arguments\n * of the current field. However, we need to override those arguments to get it to make requests based on the\n * *target* field. The server only knows the schema map of the target field.\n */\n const adjustedServerFunctionContext: ServerFunctionsContextType = {\n ...serverFunctionContext,\n getFormState: async (getFormStateArgs) => {\n return serverFunctionContext.getFormState({\n ...getFormStateArgs,\n collectionSlug: entityType === 'collection' ? entitySlug : undefined,\n globalSlug: entityType === 'global' ? entitySlug : undefined,\n })\n },\n }\n\n if (typeof value === 'undefined' && !setValue) {\n return (\n <ServerFunctionsContext value={{ ...adjustedServerFunctionContext }}>\n <FieldPathContext key={fieldPath} value={fieldPath}>\n {Component}\n </FieldPathContext>\n </ServerFunctionsContext>\n )\n }\n\n const fieldValue: FieldType<DefaultTypedEditorState | undefined> = {\n disabled: false,\n formInitializing: false,\n formProcessing: false,\n formSubmitted: false,\n initialValue: value,\n path: fieldPath,\n setValue: setValue ?? (() => undefined),\n showError: false,\n value,\n }\n\n return (\n <ServerFunctionsContext value={{ ...adjustedServerFunctionContext }}>\n <FieldPathContext key={fieldPath} value={fieldPath}>\n <FieldContext value={fieldValue}>{Component}</FieldContext>\n </FieldPathContext>\n </ServerFunctionsContext>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","FieldContext","FieldPathContext","ServerFunctionsContext","ShimmerEffect","useServerFunctions","React","useCallback","useEffect","useRef","RenderLexical","args","$","name","field","initialValue","label","Loading","path","schemaPath","setValue","value","Component","setComponent","useState","serverFunctionContext","_internal_renderField","entityType","entitySlug","split","fieldName","undefined","fieldLabel","fieldPath","t0","render","Field","hidden","renderLexical","mounted","t1","t2","current","_jsx","adjustedServerFunctionContext","getFormState","getFormStateArgs","collectionSlug","globalSlug","children","fieldValue","disabled","formInitializing","formProcessing","formSubmitted","_temp","showError"],"sources":["../../../src/field/RenderLexical/index.tsx"],"sourcesContent":["'use client'\nimport {\n FieldContext,\n FieldPathContext,\n type FieldType,\n type RenderFieldServerFnArgs,\n ServerFunctionsContext,\n type ServerFunctionsContextType,\n ShimmerEffect,\n useServerFunctions,\n} from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport type { LexicalRichTextField } from '../../types/index.js'\nimport type { DefaultTypedEditorState } from '../../types/nodeTypes.js'\n\n/**\n * Utility to render a lexical editor on the client.\n *\n * @experimental - may break in minor releases\n * @todo - replace this with a general utility that works for all fields. Maybe merge with packages/ui/src/forms/RenderFields/RenderField.tsx\n */\nexport const RenderLexical: React.FC<\n /**\n * If value or setValue, or both, is provided, this component will manage its own value.\n * If neither is passed, it will rely on the parent form to manage the value.\n */\n {\n /** @deprecated Use `name` and `label` instead. */\n field?: Partial<LexicalRichTextField>\n /**\n * Override the loading state while the field component is being fetched and rendered.\n */\n Loading?: React.ReactElement\n\n setValue?: FieldType<DefaultTypedEditorState | undefined>['setValue']\n value?: FieldType<DefaultTypedEditorState | undefined>['value']\n } & Omit<RenderFieldServerFnArgs, 'hidden'>\n> = (args) => {\n const { name, field, initialValue, label, Loading, path, schemaPath, setValue, value } = args\n const [Component, setComponent] = React.useState<null | React.ReactNode>(null)\n const serverFunctionContext = useServerFunctions()\n const { _internal_renderField } = serverFunctionContext\n\n const [entityType, entitySlug] = schemaPath.split('.', 2)\n\n const fieldName = name !== undefined ? name : field?.name\n const fieldLabel = label !== undefined ? label : field?.label\n const fieldPath = path ?? fieldName ?? ''\n\n const renderLexical = useCallback(() => {\n async function render() {\n const { Field } = await _internal_renderField({\n name: fieldName,\n // When using \"fake\" anchor fields, hidden is often set to true.\n // We need to override that here to ensure the field is rendered.\n hidden: false,\n initialValue: initialValue ?? undefined,\n label: typeof fieldLabel === 'function' ? undefined : fieldLabel,\n path,\n schemaPath,\n })\n\n setComponent(Field)\n }\n void render()\n }, [_internal_renderField, schemaPath, path, fieldName, fieldLabel, initialValue])\n\n const mounted = useRef(false)\n\n useEffect(() => {\n if (mounted.current) {\n return\n }\n mounted.current = true\n void renderLexical()\n }, [renderLexical])\n\n if (!Component) {\n return typeof Loading !== 'undefined' ? Loading : <ShimmerEffect />\n }\n\n /**\n * By default, the lexical will make form state requests (e.g. to get drawer fields), passing in the arguments\n * of the current field. However, we need to override those arguments to get it to make requests based on the\n * *target* field. The server only knows the schema map of the target field.\n */\n const adjustedServerFunctionContext: ServerFunctionsContextType = {\n ...serverFunctionContext,\n getFormState: async (getFormStateArgs) => {\n return serverFunctionContext.getFormState({\n ...getFormStateArgs,\n collectionSlug: entityType === 'collection' ? entitySlug : undefined,\n globalSlug: entityType === 'global' ? entitySlug : undefined,\n })\n },\n }\n\n if (typeof value === 'undefined' && !setValue) {\n return (\n <ServerFunctionsContext value={{ ...adjustedServerFunctionContext }}>\n <FieldPathContext key={fieldPath} value={fieldPath}>\n {Component}\n </FieldPathContext>\n </ServerFunctionsContext>\n )\n }\n\n const fieldValue: FieldType<DefaultTypedEditorState | undefined> = {\n disabled: false,\n formInitializing: false,\n formProcessing: false,\n formSubmitted: false,\n initialValue: value,\n path: fieldPath,\n setValue: setValue ?? (() => undefined),\n showError: false,\n value,\n }\n\n return (\n <ServerFunctionsContext value={{ ...adjustedServerFunctionContext }}>\n <FieldPathContext key={fieldPath} value={fieldPath}>\n <FieldContext value={fieldValue}>{Component}</FieldContext>\n </FieldPathContext>\n </ServerFunctionsContext>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -7,7 +7,7 @@ import React from 'react';
7
7
  import { useRichTextView } from './RichTextViewProvider.js';
8
8
  import './ViewSelector.css';
9
9
  export function ViewSelector() {
10
- const $ = _c(5);
10
+ const $ = _c(7);
11
11
  const {
12
12
  currentView,
13
13
  setCurrentView,
@@ -28,7 +28,15 @@ export function ViewSelector() {
28
28
  break bb0;
29
29
  }
30
30
  const allViews = ["default", ...viewKeys.filter(_temp2)];
31
- const currentViewLabel = currentView.charAt(0).toUpperCase() + currentView.slice(1);
31
+ let t2;
32
+ if ($[5] !== currentView) {
33
+ t2 = currentView.charAt(0).toUpperCase();
34
+ $[5] = currentView;
35
+ $[6] = t2;
36
+ } else {
37
+ t2 = $[6];
38
+ }
39
+ const currentViewLabel = t2 + currentView.slice(1);
32
40
  t0 = _jsx("div", {
33
41
  className: "lexical-view-selector",
34
42
  children: _jsx(Popup, {
@@ -45,10 +53,10 @@ export function ViewSelector() {
45
53
  buttonType: "custom",
46
54
  horizontalAlign: "left",
47
55
  popupType: "menu",
48
- render: t2 => {
56
+ render: t3 => {
49
57
  const {
50
58
  close
51
- } = t2;
59
+ } = t3;
52
60
  return _jsx(PopupList.ButtonGroup, {
53
61
  children: allViews.map(viewName => {
54
62
  const viewLabel = viewName.charAt(0).toUpperCase() + viewName.slice(1);
@@ -1 +1 @@
1
- {"version":3,"file":"ViewSelector.js","names":["c","_c","ChevronIcon","Popup","PopupList","React","useRichTextView","ViewSelector","$","currentView","setCurrentView","views","Object","keys","length","t0","t1","Symbol","for","bb0","viewKeys","hasNonDefaultViews","some","_temp","allViews","filter","_temp2","currentViewLabel","charAt","toUpperCase","slice","_jsx","className","children","button","_jsxs","type","horizontalAlign","popupType","render","t2","close","ButtonGroup","map","viewName","viewLabel","Button","active","disabled","onClick","key_0","key"],"sources":["../../src/field/ViewSelector.tsx"],"sourcesContent":["'use client'\nimport { ChevronIcon, Popup, PopupList } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { useRichTextView } from './RichTextViewProvider.js'\nimport './ViewSelector.css'\n\nexport function ViewSelector(): null | React.ReactElement {\n const { currentView, setCurrentView, views } = useRichTextView()\n\n // Don't show if no views or only default exists\n if (!views || Object.keys(views).length === 0) {\n return null\n }\n\n const viewKeys = Object.keys(views)\n const hasNonDefaultViews = viewKeys.some((key) => key !== 'default')\n\n // If only 'default' exists, no need to show selector\n if (!hasNonDefaultViews) {\n return null\n }\n\n // Build list of available views\n const allViews = ['default', ...viewKeys.filter((key) => key !== 'default')]\n\n const currentViewLabel = currentView.charAt(0).toUpperCase() + currentView.slice(1)\n\n return (\n <div className=\"lexical-view-selector\">\n <Popup\n button={\n <button className=\"lexical-view-selector__button\" type=\"button\">\n <span className=\"lexical-view-selector__label\">{currentViewLabel}</span>\n <ChevronIcon className=\"lexical-view-selector__icon\" />\n </button>\n }\n buttonType=\"custom\"\n horizontalAlign=\"left\"\n popupType=\"menu\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {allViews.map((viewName) => {\n const viewLabel = viewName.charAt(0).toUpperCase() + viewName.slice(1)\n\n return (\n <PopupList.Button\n active={viewName === currentView}\n disabled={viewName === currentView}\n key={viewName}\n onClick={() => {\n setCurrentView?.(viewName)\n close()\n }}\n >\n {viewLabel}\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"large\"\n />\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,WAAW,EAAEC,KAAK,EAAEC,SAAS,QAAQ;AAC9C,OAAOC,KAAA,MAAW;AAElB,SAASC,eAAe,QAAQ;AAChC,OAAO;AAEP,OAAO,SAAAC,aAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EACL;IAAAQ,WAAA;IAAAC,cAAA;IAAAC;EAAA,IAA+CL,eAAA;EAAA,IAG3C,CAACK,KAAA,IAASC,MAAA,CAAAC,IAAA,CAAYF,KAAA,EAAAG,MAAA,MAAkB;IAAA;EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAC,WAAA,IAAAD,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAG,KAAA;IASnCK,EAAA,GAAAC,MAAA,CAAAC,GAAA;IAAAC,GAAA;MALT,MAAAC,QAAA,GAAiBR,MAAA,CAAAC,IAAA,CAAYF,KAAA;MAC7B,MAAAU,kBAAA,GAA2BD,QAAA,CAAAE,IAAA,CAAAC,KAA+B;MAAA,KAGrDF,kBAAA;QACIL,EAAA;QAAA,MAAAG,GAAA;MAAA;MAIT,MAAAK,QAAA,IAAkB,cAAcJ,QAAA,CAAAK,MAAA,CAAAC,MAAiC;MAEjE,MAAAC,gBAAA,GAAyBlB,WAAA,CAAAmB,MAAA,EAAmB,EAAAC,WAAA,CAAc,IAAKpB,WAAA,CAAAqB,KAAA,EAAkB;MAG/Ef,EAAA,GAAAgB,IAAA,CAAC;QAAAC,SAAA,EAAc;QAAAC,QAAA,EACbF,IAAA,CAAA5B,KAAA;UAAA+B,MAAA,EAEIC,KAAA,CAAC;YAAAH,SAAA,EAAiB;YAAAI,IAAA,EAAqC;YAAAH,QAAA,GACrDF,IAAA,CAAC;cAAAC,SAAA,EAAe;cAAAC,QAAA,EAAgCN;YAAA,C,GAChDI,IAAA,CAAA7B,WAAA;cAAA8B,SAAA,EAAuB;YAAA,C;;sBAGhB;UAAAK,eAAA,EACK;UAAAC,SAAA,EACN;UAAAC,MAAA,EAAAC,EAAA;YACD;cAAAC;YAAA,IAAAD,EAAS;YAAA,OAChBT,IAAA,CAAA3B,SAAA,CAAAsC,WAAA;cAAAT,QAAA,EACGT,QAAA,CAAAmB,GAAA,CAAAC,QAAA;gBACC,MAAAC,SAAA,GAAkBD,QAAA,CAAAhB,MAAA,EAAgB,EAAAC,WAAA,CAAc,IAAKe,QAAA,CAAAd,KAAA,EAAe;gBAAA,OAGlEC,IAAA,CAAA3B,SAAA,CAAA0C,MAAA;kBAAAC,MAAA,EACUH,QAAA,KAAanC,WAAA;kBAAAuC,QAAA,EACXJ,QAAA,KAAanC,WAAA;kBAAAwC,OAAA,EAAAA,CAAA;oBAGrBvC,cAAA,GAAiBkC,QAAA;oBACjBH,KAAA;kBAAA;kBAAAR,QAAA,EAGDY;gBAAA,GANID,QAAA;cAAA,CASX;YAAA,C;;gBAGC;QAAA,C;;;;;;;;;;;;;;;SAhCT7B,E;;AAtBG,SAAAW,OAAAwB,KAAA;EAAA,OAiBoDC,KAAA,KAAQ;AAAA;AAjB5D,SAAA5B,MAAA4B,GAAA;EAAA,OAS6CA,GAAA,KAAQ;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"ViewSelector.js","names":["c","_c","ChevronIcon","Popup","PopupList","React","useRichTextView","ViewSelector","$","currentView","setCurrentView","views","Object","keys","length","t0","t1","Symbol","for","bb0","viewKeys","hasNonDefaultViews","some","_temp","allViews","filter","_temp2","t2","charAt","toUpperCase","currentViewLabel","slice","_jsx","className","children","button","_jsxs","type","horizontalAlign","popupType","render","t3","close","ButtonGroup","map","viewName","viewLabel","Button","active","disabled","onClick","key_0","key"],"sources":["../../src/field/ViewSelector.tsx"],"sourcesContent":["'use client'\nimport { ChevronIcon, Popup, PopupList } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { useRichTextView } from './RichTextViewProvider.js'\nimport './ViewSelector.css'\n\nexport function ViewSelector(): null | React.ReactElement {\n const { currentView, setCurrentView, views } = useRichTextView()\n\n // Don't show if no views or only default exists\n if (!views || Object.keys(views).length === 0) {\n return null\n }\n\n const viewKeys = Object.keys(views)\n const hasNonDefaultViews = viewKeys.some((key) => key !== 'default')\n\n // If only 'default' exists, no need to show selector\n if (!hasNonDefaultViews) {\n return null\n }\n\n // Build list of available views\n const allViews = ['default', ...viewKeys.filter((key) => key !== 'default')]\n\n const currentViewLabel = currentView.charAt(0).toUpperCase() + currentView.slice(1)\n\n return (\n <div className=\"lexical-view-selector\">\n <Popup\n button={\n <button className=\"lexical-view-selector__button\" type=\"button\">\n <span className=\"lexical-view-selector__label\">{currentViewLabel}</span>\n <ChevronIcon className=\"lexical-view-selector__icon\" />\n </button>\n }\n buttonType=\"custom\"\n horizontalAlign=\"left\"\n popupType=\"menu\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {allViews.map((viewName) => {\n const viewLabel = viewName.charAt(0).toUpperCase() + viewName.slice(1)\n\n return (\n <PopupList.Button\n active={viewName === currentView}\n disabled={viewName === currentView}\n key={viewName}\n onClick={() => {\n setCurrentView?.(viewName)\n close()\n }}\n >\n {viewLabel}\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"large\"\n />\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,WAAW,EAAEC,KAAK,EAAEC,SAAS,QAAQ;AAC9C,OAAOC,KAAA,MAAW;AAElB,SAASC,eAAe,QAAQ;AAChC,OAAO;AAEP,OAAO,SAAAC,aAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EACL;IAAAQ,WAAA;IAAAC,cAAA;IAAAC;EAAA,IAA+CL,eAAA;EAG/C,IAAI,CAACK,KAAuC,IAA9BC,MAAA,CAAAC,IAAW,CAACF,KAAA,EAAAG,MAAa,KAAK;IAAA,OACnC;EAAA;EACT,IAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAC,WAAA,IAAAD,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAG,KAAA;IAOSK,EAAA,GAAAC,MAAA,CAAAC,GAAA;IAAAC,GAAA;MALT,MAAAC,QAAA,GAAiBR,MAAA,CAAAC,IAAW,CAACF,KAAA;MAC7B,MAAAU,kBAAA,GAA2BD,QAAA,CAAAE,IAAa,CAACC,KAAiB;MAG1D,IAAI,CAACF,kBAAA;QACIL,EAAA;QAAA,MAAAG,GAAA;MAAA;MAIT,MAAAK,QAAA,GAAiB,CAAC,cAAcJ,QAAA,CAAAK,MAAe,CAACC,MAAiB,EAAW;MAAA,IAAAC,EAAA;MAAA,IAAAnB,CAAA,QAAAC,WAAA;QAEnDkB,EAAA,GAAAlB,WAAA,CAAAmB,MAAkB,CAAC,GAAAC,WAAc;QAAArB,CAAA,MAAAC,WAAA;QAAAD,CAAA,MAAAmB,EAAA;MAAA;QAAAA,EAAA,GAAAnB,CAAA;MAAA;MAA1D,MAAAsB,gBAAA,GAAyBH,EAAiC,GAAKlB,WAAA,CAAAsB,KAAiB,CAAC;MAG/EhB,EAAA,GAAAiB,IAAA,CAAC;QAAAC,SAAA,EAAc;QAAAC,QAAA,EACbF,IAAA,CAAC7B,KAAA;UAAAgC,MAAA,EAEGC,KAAA,CAAC;YAAAH,SAAA,EAAiB;YAAAI,IAAA,EAAqC;YAAAH,QAAA,E,CACrDF,IAAA,CAAC;cAAAC,SAAA,EAAe;cAAAC,QAAA,EAAgCJ;gBAChDE,IAAA,CAAC9B,WAAA;cAAA+B,SAAA,EAAsB;;;sBAGhB;UAAAK,eAAA,EACK;UAAAC,SAAA,EACN;UAAAC,MAAA,EACFC,EAAA;YAAC;cAAAC;YAAA,IAAAD,EAAS;YAAA,OAChBT,IAAA,CAAC5B,SAAA,CAAAuC,WAAqB;cAAAT,QAAA,EACnBV,QAAA,CAAAoB,GAAY,CAACC,QAAA;gBACZ,MAAAC,SAAA,GAAkBD,QAAA,CAAAjB,MAAe,CAAC,GAAAC,WAAc,KAAKgB,QAAA,CAAAd,KAAc,CAAC;gBAAA,OAGlEC,IAAA,CAAC5B,SAAA,CAAA2C,MAAgB;kBAAAC,MAAA,EACPH,QAAA,KAAapC,WAAA;kBAAAwC,QAAA,EACXJ,QAAA,KAAapC,WAAA;kBAAAyC,OAAA,EAEdA,CAAA;oBACPxC,cAAA,GAAiBmC,QAAA;oBACjBH,KAAA;kBAAA,CACF;kBAAAR,QAAA,EAECY;mBANID,QAAA;cAAA,CASX;;;gBAGC;;;;;;;;;;;;;;;;SAhCT9B,E;;AAtBG,SAAAW,OAAAyB,KAAA;EAAA,OAiBoDC,KAAA,KAAQ;AAAA;AAjB5D,SAAA7B,MAAA6B,GAAA;EAAA,OAS6CA,GAAA,KAAQ;AAAA","ignoreList":[]}