@payloadcms/richtext-lexical 3.0.2 → 3.0.3-canary.27acdae

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 (211) hide show
  1. package/dist/exports/client/Field-OHQPCDNR.js +2 -0
  2. package/dist/exports/client/Field-OHQPCDNR.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-XOQBVKA3.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-XOQBVKA3.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/chunk-2L2Z4JHF.js +12 -0
  7. package/dist/exports/client/chunk-2L2Z4JHF.js.map +7 -0
  8. package/dist/exports/client/{chunk-C7S3V4EB.js → chunk-DOK5S7LE.js} +2 -2
  9. package/dist/exports/client/chunk-DOK5S7LE.js.map +7 -0
  10. package/dist/exports/client/chunk-KYPSISKB.js +2 -0
  11. package/dist/exports/client/chunk-KYPSISKB.js.map +7 -0
  12. package/dist/exports/client/chunk-ZTAS32RX.js +2 -0
  13. package/dist/exports/client/{chunk-MI5HS4QX.js.map → chunk-ZTAS32RX.js.map} +3 -3
  14. package/dist/exports/client/{component-H3EYQ5KG.js → component-D6PKVJ2K.js} +2 -2
  15. package/dist/exports/client/component-D6PKVJ2K.js.map +7 -0
  16. package/dist/exports/client/componentInline-EYXL5S2C.js +2 -0
  17. package/dist/exports/client/index.d.ts +3 -0
  18. package/dist/exports/client/index.d.ts.map +1 -1
  19. package/dist/exports/client/index.js +11 -11
  20. package/dist/exports/client/index.js.map +3 -3
  21. package/dist/exports/server/ast/mdx.d.ts.map +1 -1
  22. package/dist/exports/server/ast/mdx.js +6 -0
  23. package/dist/exports/server/ast/mdx.js.map +1 -1
  24. package/dist/features/align/server/i18n.d.ts.map +1 -1
  25. package/dist/features/align/server/i18n.js +6 -0
  26. package/dist/features/align/server/i18n.js.map +1 -1
  27. package/dist/features/blockquote/server/i18n.d.ts.map +1 -1
  28. package/dist/features/blockquote/server/i18n.js +3 -0
  29. package/dist/features/blockquote/server/i18n.js.map +1 -1
  30. package/dist/features/blockquote/server/index.d.ts.map +1 -1
  31. package/dist/features/blockquote/server/index.js +2 -1
  32. package/dist/features/blockquote/server/index.js.map +1 -1
  33. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  34. package/dist/features/blocks/client/component/index.js +27 -9
  35. package/dist/features/blocks/client/component/index.js.map +1 -1
  36. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts +1 -1
  37. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts.map +1 -1
  38. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
  39. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  40. package/dist/features/blocks/client/componentInline/index.js +27 -7
  41. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  42. package/dist/features/blocks/client/index.d.ts.map +1 -1
  43. package/dist/features/blocks/client/index.js.map +1 -1
  44. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts.map +1 -1
  45. package/dist/features/blocks/server/graphQLPopulationPromise.js.map +1 -1
  46. package/dist/features/blocks/server/i18n.d.ts.map +1 -1
  47. package/dist/features/blocks/server/i18n.js +9 -0
  48. package/dist/features/blocks/server/i18n.js.map +1 -1
  49. package/dist/features/converters/html/converter/converters/paragraph.d.ts.map +1 -1
  50. package/dist/features/converters/html/converter/converters/paragraph.js +2 -1
  51. package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
  52. package/dist/features/converters/html/converter/defaultConverters.d.ts +1 -1
  53. package/dist/features/converters/html/converter/defaultConverters.d.ts.map +1 -1
  54. package/dist/features/converters/html/converter/defaultConverters.js.map +1 -1
  55. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  56. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +23 -17
  57. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  58. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
  59. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +4 -2
  60. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  61. package/dist/features/experimental_table/client/utils/debounce.d.ts.map +1 -1
  62. package/dist/features/experimental_table/client/utils/debounce.js +3 -0
  63. package/dist/features/experimental_table/client/utils/debounce.js.map +1 -1
  64. package/dist/features/experimental_table/client/utils/useDebounce.d.ts +1 -5
  65. package/dist/features/experimental_table/client/utils/useDebounce.d.ts.map +1 -1
  66. package/dist/features/experimental_table/client/utils/useDebounce.js +40 -10
  67. package/dist/features/experimental_table/client/utils/useDebounce.js.map +1 -1
  68. package/dist/features/heading/server/i18n.d.ts.map +1 -1
  69. package/dist/features/heading/server/i18n.js +3 -0
  70. package/dist/features/heading/server/i18n.js.map +1 -1
  71. package/dist/features/heading/server/index.d.ts.map +1 -1
  72. package/dist/features/heading/server/index.js +2 -1
  73. package/dist/features/heading/server/index.js.map +1 -1
  74. package/dist/features/horizontalRule/server/i18n.d.ts.map +1 -1
  75. package/dist/features/horizontalRule/server/i18n.js +3 -0
  76. package/dist/features/horizontalRule/server/i18n.js.map +1 -1
  77. package/dist/features/indent/server/i18n.d.ts.map +1 -1
  78. package/dist/features/indent/server/i18n.js +4 -0
  79. package/dist/features/indent/server/i18n.js.map +1 -1
  80. package/dist/features/link/server/i18n.d.ts.map +1 -1
  81. package/dist/features/link/server/i18n.js +4 -0
  82. package/dist/features/link/server/i18n.js.map +1 -1
  83. package/dist/features/lists/checklist/server/i18n.d.ts.map +1 -1
  84. package/dist/features/lists/checklist/server/i18n.js +3 -0
  85. package/dist/features/lists/checklist/server/i18n.js.map +1 -1
  86. package/dist/features/lists/checklist/server/index.js.map +1 -1
  87. package/dist/features/lists/orderedList/server/i18n.d.ts.map +1 -1
  88. package/dist/features/lists/orderedList/server/i18n.js +3 -0
  89. package/dist/features/lists/orderedList/server/i18n.js.map +1 -1
  90. package/dist/features/lists/orderedList/server/index.js.map +1 -1
  91. package/dist/features/lists/unorderedList/server/i18n.d.ts.map +1 -1
  92. package/dist/features/lists/unorderedList/server/i18n.js +3 -0
  93. package/dist/features/lists/unorderedList/server/i18n.js.map +1 -1
  94. package/dist/features/lists/unorderedList/server/index.js.map +1 -1
  95. package/dist/features/paragraph/server/i18n.d.ts.map +1 -1
  96. package/dist/features/paragraph/server/i18n.js +4 -0
  97. package/dist/features/paragraph/server/i18n.js.map +1 -1
  98. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  99. package/dist/features/relationship/client/components/RelationshipComponent.js +1 -3
  100. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  101. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  102. package/dist/features/relationship/server/i18n.d.ts.map +1 -1
  103. package/dist/features/relationship/server/i18n.js +3 -0
  104. package/dist/features/relationship/server/i18n.js.map +1 -1
  105. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -1
  106. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  107. package/dist/features/relationship/server/nodes/RelationshipNode.js +3 -3
  108. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  109. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts +2 -2
  110. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  111. package/dist/features/toolbars/fixed/client/Toolbar/index.js +64 -71
  112. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  113. package/dist/features/toolbars/inline/client/Toolbar/index.js +31 -51
  114. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  115. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  116. package/dist/features/toolbars/shared/ToolbarButton/index.js +152 -62
  117. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  118. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts +1 -1
  119. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
  120. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +4 -2
  121. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  122. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  123. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +8 -20
  124. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  125. package/dist/features/toolbars/types.d.ts +9 -0
  126. package/dist/features/toolbars/types.d.ts.map +1 -1
  127. package/dist/features/toolbars/types.js.map +1 -1
  128. package/dist/features/typesClient.d.ts +39 -36
  129. package/dist/features/typesClient.d.ts.map +1 -1
  130. package/dist/features/typesClient.js.map +1 -1
  131. package/dist/features/typesServer.d.ts.map +1 -1
  132. package/dist/features/typesServer.js.map +1 -1
  133. package/dist/features/upload/client/component/index.js.map +1 -1
  134. package/dist/features/upload/client/drawer/index.js.map +1 -1
  135. package/dist/features/upload/client/nodes/UploadNode.d.ts +1 -1
  136. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  137. package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
  138. package/dist/features/upload/client/plugin/index.d.ts +2 -2
  139. package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
  140. package/dist/features/upload/client/plugin/index.js.map +1 -1
  141. package/dist/features/upload/server/i18n.d.ts.map +1 -1
  142. package/dist/features/upload/server/i18n.js +3 -0
  143. package/dist/features/upload/server/i18n.js.map +1 -1
  144. package/dist/features/upload/server/nodes/UploadNode.d.ts +1 -1
  145. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  146. package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
  147. package/dist/field/Field.d.ts +1 -1
  148. package/dist/field/Field.d.ts.map +1 -1
  149. package/dist/field/Field.js +2 -1
  150. package/dist/field/Field.js.map +1 -1
  151. package/dist/field/bundled.css +1 -1
  152. package/dist/field/rscEntry.js +1 -1
  153. package/dist/field/rscEntry.js.map +1 -1
  154. package/dist/i18n.d.ts.map +1 -1
  155. package/dist/i18n.js +70 -32
  156. package/dist/i18n.js.map +1 -1
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +5 -0
  159. package/dist/index.js.map +1 -1
  160. package/dist/lexical/LexicalProvider.d.ts.map +1 -1
  161. package/dist/lexical/LexicalProvider.js.map +1 -1
  162. package/dist/lexical/config/client/sanitize.js.map +1 -1
  163. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  164. package/dist/lexical/config/server/sanitize.js +1 -0
  165. package/dist/lexical/config/server/sanitize.js.map +1 -1
  166. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +2 -3
  167. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  168. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +139 -89
  169. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  170. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -3
  171. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  172. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +4 -7
  173. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  174. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  175. package/dist/lexical/plugins/SlashMenu/index.js +8 -14
  176. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  177. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
  178. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +1 -0
  179. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  180. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
  181. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
  182. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
  183. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  184. package/dist/utilities/buildInitialState.js +1 -1
  185. package/dist/utilities/buildInitialState.js.map +1 -1
  186. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  187. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  188. package/dist/utilities/generateImportMap.js +4 -1
  189. package/dist/utilities/generateImportMap.js.map +1 -1
  190. package/dist/utilities/jsx/jsx.d.ts.map +1 -1
  191. package/dist/utilities/jsx/jsx.js +1 -0
  192. package/dist/utilities/jsx/jsx.js.map +1 -1
  193. package/dist/utilities/migrateSlateToLexical/index.d.ts.map +1 -1
  194. package/dist/utilities/migrateSlateToLexical/index.js +1 -1
  195. package/dist/utilities/migrateSlateToLexical/index.js.map +1 -1
  196. package/dist/validate/index.d.ts.map +1 -1
  197. package/dist/validate/index.js.map +1 -1
  198. package/package.json +7 -7
  199. package/dist/exports/client/Field-IS3XMKMO.js +0 -2
  200. package/dist/exports/client/Field-IS3XMKMO.js.map +0 -7
  201. package/dist/exports/client/RelationshipComponent-2RT3YXUT.js +0 -2
  202. package/dist/exports/client/RelationshipComponent-2RT3YXUT.js.map +0 -7
  203. package/dist/exports/client/chunk-C7S3V4EB.js.map +0 -7
  204. package/dist/exports/client/chunk-CBUZKU7S.js +0 -12
  205. package/dist/exports/client/chunk-CBUZKU7S.js.map +0 -7
  206. package/dist/exports/client/chunk-MI5HS4QX.js +0 -2
  207. package/dist/exports/client/chunk-U7O7EYCP.js +0 -2
  208. package/dist/exports/client/chunk-U7O7EYCP.js.map +0 -7
  209. package/dist/exports/client/component-H3EYQ5KG.js.map +0 -7
  210. package/dist/exports/client/componentInline-ZGO3K4TA.js +0 -2
  211. /package/dist/exports/client/{componentInline-ZGO3K4TA.js.map → componentInline-EYXL5S2C.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","File","formatDrawerSlug","useConfig","useEditDepth","usePayloadAPI","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","React","useCallback","useEffect","useId","useReducer","useRef","useState","useEditorConfigContext","FieldsDrawer","useLexicalDocumentDrawer","useLexicalDrawer","EnabledRelationshipsCondition","INSERT_UPLOAD_WITH_DRAWER_COMMAND","$isUploadNode","baseClass","initialParams","depth","Component","props","data","fields","relationTo","value","nodeKey","Error","config","collections","routes","api","serverURL","uploadRef","uuid","editDepth","editor","isSelected","setSelected","clearSelection","editorConfig","fieldProps","readOnly","schemaPath","i18n","t","cacheBust","dispatchCacheBust","state","relatedCollection","find","coll","slug","componentID","extraFieldsDrawerSlug","toggleDrawer","closeDocumentDrawer","DocumentDrawer","DocumentDrawerToggler","id","collectionSlug","setParams","thumbnailSRC","thumbnailURL","url","removeUpload","update","remove","updateUpload","$onDelete","event","deleteSelection","preventDefault","getNodes","forEach","node","registerCommand","target","current","contains","shiftKey","hasExtraFields","resolvedFeatureMap","get","sanitizedClientFeatureProps","onExtraFieldsDrawerSubmit","_","uploadNode","newData","getData","setData","_jsxs","className","filter","Boolean","join","contentEditable","ref","_jsx","alt","filename","src","labels","singular","isEditable","buttonStyle","disabled","el","icon","onClick","round","tooltip","dispatchCommand","replace","e","onSave","drawerSlug","drawerTitle","label","featureKey","handleDrawerSubmit","schemaPathSuffix","UploadComponent","uploads"],"sources":["../../../../../src/features/upload/client/component/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Data } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n File,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n usePayloadAPI,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useId, useReducer, useRef, useState } from 'react'\n\nimport type { BaseClientFeatureProps } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\nimport type { UploadNode } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport { $isUploadNode } from '../nodes/UploadNode.js'\nimport './index.scss'\n\nconst baseClass = 'lexical-upload'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n data: UploadData\n nodeKey: string\n}\n\nconst Component: React.FC<ElementProps> = (props) => {\n const {\n data: { fields, relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.',\n )\n }\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n const [editor] = useLexicalComposerContext()\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const {\n editorConfig,\n fieldProps: { readOnly, schemaPath },\n } = useEditorConfigContext()\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection] = useState<ClientCollectionConfig>(\n () => collections.find((coll) => coll.slug === relationTo)!,\n )\n\n const componentID = useId()\n\n const extraFieldsDrawerSlug = formatDrawerSlug({\n slug: `lexical-upload-drawer-` + uuid + componentID, // There can be multiple upload components, each with their own drawer, in one single editor => separate them by componentID\n depth: editDepth,\n })\n\n // Need to use hook to initialize useEffect that restores cursor position\n const { toggleDrawer } = useLexicalDrawer(extraFieldsDrawerSlug, true)\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n // Get the referenced document\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const thumbnailSRC = data?.thumbnailURL || data?.url\n\n const removeUpload = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const updateUpload = useCallback(\n (data: Data) => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n dispatchCacheBust()\n closeDocumentDrawer()\n },\n [setParams, cacheBust, closeDocumentDrawer],\n )\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n const deleteSelection = $getSelection()\n if (isSelected && $isNodeSelection(deleteSelection)) {\n event.preventDefault()\n editor.update(() => {\n deleteSelection.getNodes().forEach((node) => {\n if ($isUploadNode(node)) {\n node.remove()\n }\n })\n })\n }\n return false\n },\n [editor, isSelected],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(\n CLICK_COMMAND,\n (event: MouseEvent) => {\n // Check if uploadRef.target or anything WITHIN uploadRef.target was clicked\n if (\n event.target === uploadRef.current ||\n uploadRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected])\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as BaseClientFeatureProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n const onExtraFieldsDrawerSubmit = useCallback(\n (_, data) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: null | UploadNode = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n },\n [editor, nodeKey],\n )\n\n return (\n <div\n className={[baseClass, isSelected && `${baseClass}--selected`].filter(Boolean).join(' ')}\n contentEditable={false}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__topRow`}>\n {/* TODO: migrate to use @payloadcms/ui/elements/Thumbnail component */}\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC ? (\n <img\n alt={data?.filename}\n data-lexical-upload-id={value}\n data-lexical-upload-relation-to={relationTo}\n src={thumbnailSRC}\n />\n ) : (\n <File />\n )}\n </div>\n <div className={`${baseClass}__topRowRightPanel`}>\n <div className={`${baseClass}__collectionLabel`}>\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </div>\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n {hasExtraFields ? (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n tooltip={t('fields:editRelationship')}\n />\n ) : null}\n\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__swap-drawer-toggler`}\n disabled={readOnly}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n tooltip={t('fields:swapUpload')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n tooltip={t('fields:removeUpload')}\n />\n </div>\n )}\n </div>\n </div>\n <div className={`${baseClass}__bottomRow`}>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <strong>{data?.filename}</strong>\n </DocumentDrawerToggler>\n </div>\n </div>\n {value ? <DocumentDrawer onSave={updateUpload} /> : null}\n {hasExtraFields ? (\n <FieldsDrawer\n data={fields}\n drawerSlug={extraFieldsDrawerSlug}\n drawerTitle={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n featureKey=\"upload\"\n handleDrawerSubmit={onExtraFieldsDrawerSubmit}\n schemaPath={schemaPath}\n schemaPathSuffix={relatedCollection.slug}\n />\n ) : null}\n </div>\n )\n}\n\nexport const UploadComponent = (props: ElementProps): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <Component {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","File","formatDrawerSlug","useConfig","useEditDepth","usePayloadAPI","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","React","useCallback","useEffect","useId","useReducer","useRef","useState","useEditorConfigContext","FieldsDrawer","useLexicalDocumentDrawer","useLexicalDrawer","EnabledRelationshipsCondition","INSERT_UPLOAD_WITH_DRAWER_COMMAND","$isUploadNode","baseClass","initialParams","depth","Component","props","data","fields","relationTo","value","nodeKey","Error","config","collections","routes","api","serverURL","uploadRef","uuid","editDepth","editor","isSelected","setSelected","clearSelection","editorConfig","fieldProps","readOnly","schemaPath","i18n","t","cacheBust","dispatchCacheBust","state","relatedCollection","find","coll","slug","componentID","extraFieldsDrawerSlug","toggleDrawer","closeDocumentDrawer","DocumentDrawer","DocumentDrawerToggler","id","collectionSlug","setParams","thumbnailSRC","thumbnailURL","url","removeUpload","update","remove","updateUpload","$onDelete","event","deleteSelection","preventDefault","getNodes","forEach","node","registerCommand","target","current","contains","shiftKey","hasExtraFields","resolvedFeatureMap","get","sanitizedClientFeatureProps","onExtraFieldsDrawerSubmit","_","uploadNode","newData","getData","setData","_jsxs","className","filter","Boolean","join","contentEditable","ref","_jsx","alt","filename","src","labels","singular","isEditable","buttonStyle","disabled","el","icon","onClick","round","tooltip","dispatchCommand","replace","e","onSave","drawerSlug","drawerTitle","label","featureKey","handleDrawerSubmit","schemaPathSuffix","UploadComponent","uploads"],"sources":["../../../../../src/features/upload/client/component/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Data, FormState, JsonObject } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n File,\n formatDrawerSlug,\n useConfig,\n useEditDepth,\n usePayloadAPI,\n useTranslation,\n} from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useId, useReducer, useRef, useState } from 'react'\n\nimport type { BaseClientFeatureProps } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\nimport type { UploadNode } from '../nodes/UploadNode.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport { FieldsDrawer } from '../../../../utilities/fieldsDrawer/Drawer.js'\nimport { useLexicalDocumentDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDocumentDrawer.js'\nimport { useLexicalDrawer } from '../../../../utilities/fieldsDrawer/useLexicalDrawer.js'\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.js'\nimport { INSERT_UPLOAD_WITH_DRAWER_COMMAND } from '../drawer/commands.js'\nimport { $isUploadNode } from '../nodes/UploadNode.js'\nimport './index.scss'\n\nconst baseClass = 'lexical-upload'\n\nconst initialParams = {\n depth: 0,\n}\n\nexport type ElementProps = {\n data: UploadData\n nodeKey: string\n}\n\nconst Component: React.FC<ElementProps> = (props) => {\n const {\n data: { fields, relationTo, value },\n nodeKey,\n } = props\n\n if (typeof value === 'object') {\n throw new Error(\n 'Upload value should be a string or number. The Lexical Upload component should not receive the populated value object.',\n )\n }\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const uploadRef = useRef<HTMLDivElement | null>(null)\n const { uuid } = useEditorConfigContext()\n const editDepth = useEditDepth()\n const [editor] = useLexicalComposerContext()\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const {\n editorConfig,\n fieldProps: { readOnly, schemaPath },\n } = useEditorConfigContext()\n\n const { i18n, t } = useTranslation()\n const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)\n const [relatedCollection] = useState<ClientCollectionConfig>(\n () => collections.find((coll) => coll.slug === relationTo)!,\n )\n\n const componentID = useId()\n\n const extraFieldsDrawerSlug = formatDrawerSlug({\n slug: `lexical-upload-drawer-` + uuid + componentID, // There can be multiple upload components, each with their own drawer, in one single editor => separate them by componentID\n depth: editDepth,\n })\n\n // Need to use hook to initialize useEffect that restores cursor position\n const { toggleDrawer } = useLexicalDrawer(extraFieldsDrawerSlug, true)\n\n const { closeDocumentDrawer, DocumentDrawer, DocumentDrawerToggler } = useLexicalDocumentDrawer({\n id: value,\n collectionSlug: relatedCollection.slug,\n })\n\n // Get the referenced document\n const [{ data }, { setParams }] = usePayloadAPI(\n `${serverURL}${api}/${relatedCollection.slug}/${value}`,\n { initialParams },\n )\n\n const thumbnailSRC = data?.thumbnailURL || data?.url\n\n const removeUpload = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey)?.remove()\n })\n }, [editor, nodeKey])\n\n const updateUpload = useCallback(\n (data: Data) => {\n setParams({\n ...initialParams,\n cacheBust, // do this to get the usePayloadAPI to re-fetch the data even though the URL string hasn't changed\n })\n\n dispatchCacheBust()\n closeDocumentDrawer()\n },\n [setParams, cacheBust, closeDocumentDrawer],\n )\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n const deleteSelection = $getSelection()\n if (isSelected && $isNodeSelection(deleteSelection)) {\n event.preventDefault()\n editor.update(() => {\n deleteSelection.getNodes().forEach((node) => {\n if ($isUploadNode(node)) {\n node.remove()\n }\n })\n })\n }\n return false\n },\n [editor, isSelected],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(\n CLICK_COMMAND,\n (event: MouseEvent) => {\n // Check if uploadRef.target or anything WITHIN uploadRef.target was clicked\n if (\n event.target === uploadRef.current ||\n uploadRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected])\n\n const hasExtraFields = (\n editorConfig?.resolvedFeatureMap?.get('upload')\n ?.sanitizedClientFeatureProps as BaseClientFeatureProps<UploadFeaturePropsClient>\n ).collections?.[relatedCollection.slug]?.hasExtraFields\n\n const onExtraFieldsDrawerSubmit = useCallback(\n (_: FormState, data: JsonObject) => {\n // Update lexical node (with key nodeKey) with new data\n editor.update(() => {\n const uploadNode: null | UploadNode = $getNodeByKey(nodeKey)\n if (uploadNode) {\n const newData: UploadData = {\n ...uploadNode.getData(),\n fields: data,\n }\n uploadNode.setData(newData)\n }\n })\n },\n [editor, nodeKey],\n )\n\n return (\n <div\n className={[baseClass, isSelected && `${baseClass}--selected`].filter(Boolean).join(' ')}\n contentEditable={false}\n ref={uploadRef}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__topRow`}>\n {/* TODO: migrate to use @payloadcms/ui/elements/Thumbnail component */}\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC ? (\n <img\n alt={data?.filename}\n data-lexical-upload-id={value}\n data-lexical-upload-relation-to={relationTo}\n src={thumbnailSRC}\n />\n ) : (\n <File />\n )}\n </div>\n <div className={`${baseClass}__topRowRightPanel`}>\n <div className={`${baseClass}__collectionLabel`}>\n {getTranslation(relatedCollection.labels.singular, i18n)}\n </div>\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n {hasExtraFields ? (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__upload-drawer-toggler`}\n disabled={readOnly}\n el=\"button\"\n icon=\"edit\"\n onClick={() => {\n toggleDrawer()\n }}\n round\n tooltip={t('fields:editRelationship')}\n />\n ) : null}\n\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__swap-drawer-toggler`}\n disabled={readOnly}\n el=\"button\"\n icon=\"swap\"\n onClick={() => {\n editor.dispatchCommand(INSERT_UPLOAD_WITH_DRAWER_COMMAND, {\n replace: { nodeKey },\n })\n }}\n round\n tooltip={t('fields:swapUpload')}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeUpload()\n }}\n round\n tooltip={t('fields:removeUpload')}\n />\n </div>\n )}\n </div>\n </div>\n <div className={`${baseClass}__bottomRow`}>\n <DocumentDrawerToggler className={`${baseClass}__doc-drawer-toggler`}>\n <strong>{data?.filename}</strong>\n </DocumentDrawerToggler>\n </div>\n </div>\n {value ? <DocumentDrawer onSave={updateUpload} /> : null}\n {hasExtraFields ? (\n <FieldsDrawer\n data={fields}\n drawerSlug={extraFieldsDrawerSlug}\n drawerTitle={t('general:editLabel', {\n label: getTranslation(relatedCollection.labels.singular, i18n),\n })}\n featureKey=\"upload\"\n handleDrawerSubmit={onExtraFieldsDrawerSubmit}\n schemaPath={schemaPath}\n schemaPathSuffix={relatedCollection.slug}\n />\n ) : null}\n </div>\n )\n}\n\nexport const UploadComponent = (props: ElementProps): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <Component {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$getNodeByKey","COMMAND_PRIORITY_EDITOR","React","useCallback","useEffect","useState","useLexicalListDrawer","EnabledRelationshipsCondition","$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","docID","onSelect","_jsx","UploadDrawer","props"],"sources":["../../../../../src/features/upload/client/drawer/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useLexicalListDrawer } from '../../../../utilities/fieldsDrawer/useLexicalListDrawer.js'\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.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: string[]\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(\n ({ collectionSlug, docID }) => {\n closeListDrawer()\n insertUpload({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: docID,\n })\n },\n [editor, closeListDrawer, replaceNodeKey],\n )\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nexport const UploadDrawer = (props: Props): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <UploadDrawerComponent {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$getNodeByKey","COMMAND_PRIORITY_EDITOR","React","useCallback","useEffect","useState","useLexicalListDrawer","EnabledRelationshipsCondition","$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","docID","onSelect","_jsx","UploadDrawer","props"],"sources":["../../../../../src/features/upload/client/drawer/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $getNodeByKey, COMMAND_PRIORITY_EDITOR } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useLexicalListDrawer } from '../../../../utilities/fieldsDrawer/useLexicalListDrawer.js'\nimport { EnabledRelationshipsCondition } from '../../../relationship/client/utils/EnabledRelationshipsCondition.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: string[]\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(\n ({ collectionSlug, docID }: { collectionSlug: string; docID: number | string }) => {\n closeListDrawer()\n insertUpload({\n editor,\n relationTo: collectionSlug,\n replaceNodeKey,\n value: docID,\n })\n },\n [editor, closeListDrawer, replaceNodeKey],\n )\n\n return <ListDrawer onSelect={onSelect} />\n}\n\nexport const UploadDrawer = (props: Props): React.ReactNode => {\n return (\n <EnabledRelationshipsCondition {...props} uploads>\n <UploadDrawerComponent {...props} />\n </EnabledRelationshipsCondition>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -10,7 +10,7 @@ export type SerializedUploadNode = {
10
10
  export declare class UploadNode extends UploadServerNode {
11
11
  static clone(node: UploadServerNode): UploadServerNode;
12
12
  static getType(): string;
13
- static importDOM(): DOMConversionMap | null;
13
+ static importDOM(): DOMConversionMap<HTMLImageElement>;
14
14
  static importJSON(serializedNode: SerializedUploadNode): UploadNode;
15
15
  decorate(): JSX.Element;
16
16
  exportJSON(): SerializedUploadNode;
@@ -1 +1 @@
1
- {"version":3,"file":"UploadNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/nodes/UploadNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAuB,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACzF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAMhC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAA0B,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAkC3F,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,IAAI,EAAE,QAAQ,CAAA;CACf,GAAG,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAA;AAEpD,qBAAa,UAAW,SAAQ,gBAAgB;IAC9C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB;IAItD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,SAAS,IAAI,gBAAgB,GAAG,IAAI;IAS3C,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,oBAAoB,GAAG,UAAU;IAsBnE,QAAQ,IAAI,GAAG,CAAC,OAAO;IAIvB,UAAU,IAAI,oBAAoB;CAGnC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,GACL,EAAE;IACD,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAA;CAC/D,GAAG,UAAU,CAKb;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,UAAU,CAEtF"}
1
+ {"version":3,"file":"UploadNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/nodes/UploadNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAuB,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACzF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAMhC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAA0B,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAkC3F,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,IAAI,EAAE,QAAQ,CAAA;CACf,GAAG,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAA;AAEpD,qBAAa,UAAW,SAAQ,gBAAgB;IAC9C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB;IAItD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,SAAS,IAAI,gBAAgB,CAAC,gBAAgB,CAAC;IAStD,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,oBAAoB,GAAG,UAAU;IAsBnE,QAAQ,IAAI,GAAG,CAAC,OAAO;IAIvB,UAAU,IAAI,oBAAoB;CAGnC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,GACL,EAAE;IACD,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAA;CAC/D,GAAG,UAAU,CAKb;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,UAAU,CAEtF"}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadNode.js","names":["ObjectID","$applyNodeReplacement","React","isGoogleDocCheckboxImg","UploadServerNode","RawUploadComponent","lazy","then","module","default","UploadComponent","$convertUploadElement","domNode","hasAttribute","id","getAttribute","relationTo","node","$createUploadNode","data","fields","value","img","src","startsWith","UploadNode","clone","getType","importDOM","conversion","priority","importJSON","serializedNode","version","toHexString","importedData","setFormat","format","decorate","_jsx","__data","nodeKey","getKey","exportJSON","$isUploadNode"],"sources":["../../../../../src/features/upload/client/nodes/UploadNode.tsx"],"sourcesContent":["'use client'\nimport type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type { DOMConversionMap, DOMConversionOutput, LexicalNode, Spread } from 'lexical'\nimport type { JSX } from 'react'\n\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\n\nimport { isGoogleDocCheckboxImg, UploadServerNode } from '../../server/nodes/UploadNode.js'\n\nconst RawUploadComponent = React.lazy(() =>\n import('../../client/component/index.js').then((module) => ({ default: module.UploadComponent })),\n)\n\nfunction $convertUploadElement(domNode: HTMLImageElement): DOMConversionOutput | null {\n if (\n domNode.hasAttribute('data-lexical-upload-relation-to') &&\n domNode.hasAttribute('data-lexical-upload-id')\n ) {\n const id = domNode.getAttribute('data-lexical-upload-id')\n const relationTo = domNode.getAttribute('data-lexical-upload-relation-to')\n\n if (id != null && relationTo != null) {\n const node = $createUploadNode({\n data: {\n fields: {},\n relationTo,\n value: id,\n },\n })\n return { node }\n }\n }\n const img = domNode\n if (img.src.startsWith('file:///') || isGoogleDocCheckboxImg(img)) {\n return null\n }\n // TODO: Auto-upload functionality here!\n //}\n return null\n}\n\nexport type SerializedUploadNode = {\n children?: never // required so that our typed editor state doesn't automatically add children\n type: 'upload'\n} & Spread<UploadData, SerializedDecoratorBlockNode>\n\nexport class UploadNode extends UploadServerNode {\n static clone(node: UploadServerNode): UploadServerNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n img: (node: HTMLImageElement) => ({\n conversion: $convertUploadElement,\n priority: 0,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedUploadNode): UploadNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n if (serializedNode.version === 2 && !serializedNode?.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const importedData: UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n\n const node = $createUploadNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n decorate(): JSX.Element {\n return <RawUploadComponent data={this.__data} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedUploadNode {\n return super.exportJSON()\n }\n}\n\nexport function $createUploadNode({\n data,\n}: {\n data: Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>\n}): UploadNode {\n if (!data?.id) {\n data.id = new ObjectID.default().toHexString()\n }\n return $applyNodeReplacement(new UploadNode({ data: data as UploadData }))\n}\n\nexport function $isUploadNode(node: LexicalNode | null | undefined): node is UploadNode {\n return node instanceof UploadNode\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"UploadNode.js","names":["ObjectID","$applyNodeReplacement","React","isGoogleDocCheckboxImg","UploadServerNode","RawUploadComponent","lazy","then","module","default","UploadComponent","$convertUploadElement","domNode","hasAttribute","id","getAttribute","relationTo","node","$createUploadNode","data","fields","value","img","src","startsWith","UploadNode","clone","getType","importDOM","conversion","priority","importJSON","serializedNode","version","toHexString","importedData","setFormat","format","decorate","_jsx","__data","nodeKey","getKey","exportJSON","$isUploadNode"],"sources":["../../../../../src/features/upload/client/nodes/UploadNode.tsx"],"sourcesContent":["'use client'\nimport type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type { DOMConversionMap, DOMConversionOutput, LexicalNode, Spread } from 'lexical'\nimport type { JSX } from 'react'\n\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\n\nimport { isGoogleDocCheckboxImg, UploadServerNode } from '../../server/nodes/UploadNode.js'\n\nconst RawUploadComponent = React.lazy(() =>\n import('../../client/component/index.js').then((module) => ({ default: module.UploadComponent })),\n)\n\nfunction $convertUploadElement(domNode: HTMLImageElement): DOMConversionOutput | null {\n if (\n domNode.hasAttribute('data-lexical-upload-relation-to') &&\n domNode.hasAttribute('data-lexical-upload-id')\n ) {\n const id = domNode.getAttribute('data-lexical-upload-id')\n const relationTo = domNode.getAttribute('data-lexical-upload-relation-to')\n\n if (id != null && relationTo != null) {\n const node = $createUploadNode({\n data: {\n fields: {},\n relationTo,\n value: id,\n },\n })\n return { node }\n }\n }\n const img = domNode\n if (img.src.startsWith('file:///') || isGoogleDocCheckboxImg(img)) {\n return null\n }\n // TODO: Auto-upload functionality here!\n //}\n return null\n}\n\nexport type SerializedUploadNode = {\n children?: never // required so that our typed editor state doesn't automatically add children\n type: 'upload'\n} & Spread<UploadData, SerializedDecoratorBlockNode>\n\nexport class UploadNode extends UploadServerNode {\n static clone(node: UploadServerNode): UploadServerNode {\n return super.clone(node)\n }\n\n static getType(): string {\n return super.getType()\n }\n\n static importDOM(): DOMConversionMap<HTMLImageElement> {\n return {\n img: (node) => ({\n conversion: $convertUploadElement,\n priority: 0,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedUploadNode): UploadNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n if (serializedNode.version === 2 && !serializedNode?.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const importedData: UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n\n const node = $createUploadNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n decorate(): JSX.Element {\n return <RawUploadComponent data={this.__data} nodeKey={this.getKey()} />\n }\n\n exportJSON(): SerializedUploadNode {\n return super.exportJSON()\n }\n}\n\nexport function $createUploadNode({\n data,\n}: {\n data: Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>\n}): UploadNode {\n if (!data?.id) {\n data.id = new ObjectID.default().toHexString()\n }\n return $applyNodeReplacement(new UploadNode({ data: data as UploadData }))\n}\n\nexport function $isUploadNode(node: LexicalNode | null | undefined): node is UploadNode {\n return node instanceof UploadNode\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,8 @@
1
1
  import type { LexicalCommand } from 'lexical';
2
- import type { PluginComponentWithAnchor } from '../../../typesClient.js';
2
+ import type { PluginComponent } from '../../../typesClient.js';
3
3
  import type { UploadData } from '../../server/nodes/UploadNode.js';
4
4
  import type { UploadFeaturePropsClient } from '../feature.client.js';
5
5
  export type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>;
6
6
  export declare const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload>;
7
- export declare const UploadPlugin: PluginComponentWithAnchor<UploadFeaturePropsClient>;
7
+ export declare const UploadPlugin: PluginComponent<UploadFeaturePropsClient>;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/plugin/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAe7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAKpE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAEpG,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,mBAAmB,CAC9B,CAAA;AAExC,eAAO,MAAM,YAAY,EAAE,yBAAyB,CAAC,wBAAwB,CA0D5E,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/client/plugin/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAe7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAKpE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AAEpG,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,mBAAmB,CAC9B,CAAA;AAExC,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,wBAAwB,CAwDlE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$insertNodeToNearestRoot","mergeRegister","useConfig","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","createCommand","React","useEffect","UploadDrawer","$createUploadNode","UploadNode","INSERT_UPLOAD_COMMAND","UploadPlugin","t0","$","editor","config","t1","collections","t2","t3","hasNodes","Error","registerCommand","payload","update","selection","uploadNode","data","id","fields","relationTo","value","focus","focusNode","getNode","getTextContentSize","getParentOrThrow","getChildren","filter","node","length","remove","t4","_jsx","enabledCollectionSlugs","map","_temp","slug"],"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 { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useConfig } from '@payloadcms/ui'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponentWithAnchor } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\n\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $createUploadNode, UploadNode } from '../nodes/UploadNode.js'\n\nexport type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>\n\nexport const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload> =\n createCommand('INSERT_UPLOAD_COMMAND')\n\nexport const UploadPlugin: PluginComponentWithAnchor<UploadFeaturePropsClient> = ({\n clientProps,\n}) => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n return mergeRegister(\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 // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParentOrThrow()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <UploadDrawer enabledCollectionSlugs={collections.map(({ slug }) => slug)} />\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,wBAAwB,EAAEC,aAAa,QAAQ;AACxD,SAASC,SAAS,QAAQ;AAC1B,SACEC,qBAAqB,EACrBC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,EACvBC,aAAa,QACR;AACP,OAAOC,KAAA,IAASC,SAAS,QAAQ;AAMjC,SAASC,YAAY,QAAQ;AAC7B,SAASC,iBAAiB,EAAEC,UAAU,QAAQ;AAI9C,OAAO,MAAMC,qBAAA,GACXN,aAAA,CAAc;AAEhB,OAAO,MAAMO,YAAA,GAAoEC,EAAA;EAAA,MAAAC,CAAA,GAAAnB,EAAA;EAG/E,OAAAoB,MAAA,IAAiBnB,yBAAA;EACjB;IAAAoB,MAAA,EAAAC;EAAA,IAEIlB,SAAA;EADM;IAAAmB;EAAA,IAAAD,EAAe;EAAA,IAAAE,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAN,CAAA,QAAAC,MAAA;IAGfI,EAAA,GAAAA,CAAA;MAAA,KACHJ,MAAA,CAAAM,QAAA,EAAAX,UAAA,CAA4B;QAAA,UAAAY,KAAA,CACf;MAAA;MAAA,OAGXxB,aAAA,CACLiB,MAAA,CAAAQ,eAAA,CAAAZ,qBAAA,EAAAa,OAAA;QAGIT,MAAA,CAAAU,MAAA;UACE,MAAAC,SAAA,GAAkBzB,aAAA,MAAmBD,qBAAA;UAAA,IAEjCG,iBAAA,CAAkBuB,SAAA;YACpB,MAAAC,UAAA,GAAmBlB,iBAAA;cAAAmB,IAAA;gBAAAC,EAAA,EAEXL,OAAA,CAAAK,EAAA;gBAAAC,MAAA,EACIN,OAAA,CAAAM,MAAA;gBAAAC,UAAA,EACIP,OAAA,CAAAO,UAAA;gBAAAC,KAAA,EACLR,OAAA,CAAAQ;cAAA;YAAA,CAEX;YAEAnC,wBAAA,CAAyB8B,UAAA;YAEzB;cAAAM;YAAA,IAAkBP,SAAA;YAClB,MAAAQ,SAAA,GAAkBD,KAAA,CAAAE,OAAA,CAAa;YAAA,IAK7BjC,gBAAA,CAAiBgC,SAAA,KACjBA,SAAA,CAAAE,kBAAA,CAA4B,OAAO,IACnCF,SAAA,CAAAG,gBAAA,CACmB,EAAAC,WAAA,CACL,EAAAC,MAAA,CAAAC,IAAA,IACMtC,gBAAA,CAAiBsC,IAAA,GAAAC,MAAA,IAAgB;cAErDP,SAAA,CAAAQ,MAAA,CAAgB;YAAA;UAAA;QAAA,CAGtB;QAAA;MAAA,GAAAtC,uBAIF;IAAA;IAGHgB,EAAA,IAACL,MAAA;IAAOD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAK,EAAA;IAAAL,CAAA,MAAAM,EAAA;EAAA;IAAAD,EAAA,GAAAL,CAAA;IAAAM,EAAA,GAAAN,CAAA;EAAA;EA/CXP,SAAA,CAAUY,EA+CV,EAAGC,EAAQ;EAAA,IAAAuB,EAAA;EAAA,IAAA7B,CAAA,QAAAI,WAAA;IAEJyB,EAAA,GAAAC,IAAA,CAAApC,YAAA;MAAAqC,sBAAA,EAAsC3B,WAAA,CAAA4B,GAAA,CAAAC,KAA8B;IAAA,C;;;;;;SAApEJ,E;CACT;AA1DiF,SAAAI,MAAAlC,EAAA;EAyDjB;IAAAmC;EAAA,IAAAnC,EAAQ;EAAA,OAAKmC,IAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$insertNodeToNearestRoot","mergeRegister","useConfig","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","createCommand","React","useEffect","UploadDrawer","$createUploadNode","UploadNode","INSERT_UPLOAD_COMMAND","UploadPlugin","t0","$","editor","config","t1","collections","t2","t3","hasNodes","Error","registerCommand","payload","update","selection","uploadNode","data","id","fields","relationTo","value","focus","focusNode","getNode","getTextContentSize","getParentOrThrow","getChildren","filter","node","length","remove","t4","_jsx","enabledCollectionSlugs","map","_temp","slug"],"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 { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { useConfig } from '@payloadcms/ui'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../../typesClient.js'\nimport type { UploadData } from '../../server/nodes/UploadNode.js'\nimport type { UploadFeaturePropsClient } from '../feature.client.js'\n\nimport { UploadDrawer } from '../drawer/index.js'\nimport { $createUploadNode, UploadNode } from '../nodes/UploadNode.js'\n\nexport type InsertUploadPayload = Readonly<Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>>\n\nexport const INSERT_UPLOAD_COMMAND: LexicalCommand<InsertUploadPayload> =\n createCommand('INSERT_UPLOAD_COMMAND')\n\nexport const UploadPlugin: PluginComponent<UploadFeaturePropsClient> = ({ clientProps }) => {\n const [editor] = useLexicalComposerContext()\n const {\n config: { collections },\n } = useConfig()\n\n useEffect(() => {\n if (!editor.hasNodes([UploadNode])) {\n throw new Error('UploadPlugin: UploadNode not registered on editor')\n }\n\n return mergeRegister(\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 // Insert upload node BEFORE potentially removing focusNode, as $insertNodeToNearestRoot errors if the focusNode doesn't exist\n $insertNodeToNearestRoot(uploadNode)\n\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParentOrThrow()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <UploadDrawer enabledCollectionSlugs={collections.map(({ slug }) => slug)} />\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,wBAAwB,EAAEC,aAAa,QAAQ;AACxD,SAASC,SAAS,QAAQ;AAC1B,SACEC,qBAAqB,EACrBC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,EACvBC,aAAa,QACR;AACP,OAAOC,KAAA,IAASC,SAAS,QAAQ;AAMjC,SAASC,YAAY,QAAQ;AAC7B,SAASC,iBAAiB,EAAEC,UAAU,QAAQ;AAI9C,OAAO,MAAMC,qBAAA,GACXN,aAAA,CAAc;AAEhB,OAAO,MAAMO,YAAA,GAA0DC,EAAA;EAAA,MAAAC,CAAA,GAAAnB,EAAA;EACrE,OAAAoB,MAAA,IAAiBnB,yBAAA;EACjB;IAAAoB,MAAA,EAAAC;EAAA,IAEIlB,SAAA;EADM;IAAAmB;EAAA,IAAAD,EAAe;EAAA,IAAAE,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAN,CAAA,QAAAC,MAAA;IAGfI,EAAA,GAAAA,CAAA;MAAA,KACHJ,MAAA,CAAAM,QAAA,EAAAX,UAAA,CAA4B;QAAA,UAAAY,KAAA,CACf;MAAA;MAAA,OAGXxB,aAAA,CACLiB,MAAA,CAAAQ,eAAA,CAAAZ,qBAAA,EAAAa,OAAA;QAGIT,MAAA,CAAAU,MAAA;UACE,MAAAC,SAAA,GAAkBzB,aAAA,MAAmBD,qBAAA;UAAA,IAEjCG,iBAAA,CAAkBuB,SAAA;YACpB,MAAAC,UAAA,GAAmBlB,iBAAA;cAAAmB,IAAA;gBAAAC,EAAA,EAEXL,OAAA,CAAAK,EAAA;gBAAAC,MAAA,EACIN,OAAA,CAAAM,MAAA;gBAAAC,UAAA,EACIP,OAAA,CAAAO,UAAA;gBAAAC,KAAA,EACLR,OAAA,CAAAQ;cAAA;YAAA,CAEX;YAEAnC,wBAAA,CAAyB8B,UAAA;YAEzB;cAAAM;YAAA,IAAkBP,SAAA;YAClB,MAAAQ,SAAA,GAAkBD,KAAA,CAAAE,OAAA,CAAa;YAAA,IAK7BjC,gBAAA,CAAiBgC,SAAA,KACjBA,SAAA,CAAAE,kBAAA,CAA4B,OAAO,IACnCF,SAAA,CAAAG,gBAAA,CACmB,EAAAC,WAAA,CACL,EAAAC,MAAA,CAAAC,IAAA,IACMtC,gBAAA,CAAiBsC,IAAA,GAAAC,MAAA,IAAgB;cAErDP,SAAA,CAAAQ,MAAA,CAAgB;YAAA;UAAA;QAAA,CAGtB;QAAA;MAAA,GAAAtC,uBAIF;IAAA;IAGHgB,EAAA,IAACL,MAAA;IAAOD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAK,EAAA;IAAAL,CAAA,MAAAM,EAAA;EAAA;IAAAD,EAAA,GAAAL,CAAA;IAAAM,EAAA,GAAAN,CAAA;EAAA;EA/CXP,SAAA,CAAUY,EA+CV,EAAGC,EAAQ;EAAA,IAAAuB,EAAA;EAAA,IAAA7B,CAAA,QAAAI,WAAA;IAEJyB,EAAA,GAAAC,IAAA,CAAApC,YAAA;MAAAqC,sBAAA,EAAsC3B,WAAA,CAAA4B,GAAA,CAAAC,KAA8B;IAAA,C;;;;;;SAApEJ,E;CACT;AAxDuE,SAAAI,MAAAlC,EAAA;EAuDP;IAAAmC;EAAA,IAAAnC,EAAQ;EAAA,OAAKmC,IAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/features/upload/server/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,eAAO,MAAM,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAiG1C,CAAA"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/features/upload/server/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,eAAO,MAAM,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAoG1C,CAAA"}
@@ -11,6 +11,9 @@ export const i18n = {
11
11
  cs: {
12
12
  label: 'Nahrát'
13
13
  },
14
+ da: {
15
+ label: 'Upload'
16
+ },
14
17
  de: {
15
18
  label: 'Datei'
16
19
  },
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","names":["i18n","ar","label","az","bg","cs","de","en","es","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sv","th","tr","uk","vi","zh"],"sources":["../../../../src/features/upload/server/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n label: 'تحميل',\n },\n az: {\n label: 'Yükləyin',\n },\n bg: {\n label: 'Качване',\n },\n cs: {\n label: 'Nahrát',\n },\n de: {\n label: 'Datei',\n },\n en: {\n label: 'Upload',\n },\n es: {\n label: 'Subir',\n },\n fa: {\n label: 'بارگذاری',\n },\n fr: {\n label: 'Télécharger',\n },\n he: {\n label: 'העלה',\n },\n hr: {\n label: 'Prenesi',\n },\n hu: {\n label: 'Feltöltés',\n },\n it: {\n label: 'Carica',\n },\n ja: {\n label: 'アップロード',\n },\n ko: {\n label: '업로드',\n },\n my: {\n label: 'တင်ပြီး',\n },\n nb: {\n label: 'Last opp',\n },\n nl: {\n label: 'Uploaden',\n },\n pl: {\n label: 'Prześlij',\n },\n pt: {\n label: 'Carregar',\n },\n ro: {\n label: 'Încarcă',\n },\n rs: {\n label: 'Otpremi',\n },\n 'rs-latin': {\n label: 'Otpremi',\n },\n ru: {\n label: 'Загрузить',\n },\n sk: {\n label: 'Nahrať',\n },\n sv: {\n label: 'Ladda upp',\n },\n th: {\n label: 'อัปโหลด',\n },\n tr: {\n label: 'Yükle',\n },\n uk: {\n label: 'Завантажити',\n },\n vi: {\n label: 'Tải lên',\n },\n zh: {\n label: '上传',\n },\n 'zh-TW': {\n label: '上傳',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,IAAA,GAAkC;EAC7CC,EAAA,EAAI;IACFC,KAAA,EAAO;EACT;EACAC,EAAA,EAAI;IACFD,KAAA,EAAO;EACT;EACAE,EAAA,EAAI;IACFF,KAAA,EAAO;EACT;EACAG,EAAA,EAAI;IACFH,KAAA,EAAO;EACT;EACAI,EAAA,EAAI;IACFJ,KAAA,EAAO;EACT;EACAK,EAAA,EAAI;IACFL,KAAA,EAAO;EACT;EACAM,EAAA,EAAI;IACFN,KAAA,EAAO;EACT;EACAO,EAAA,EAAI;IACFP,KAAA,EAAO;EACT;EACAQ,EAAA,EAAI;IACFR,KAAA,EAAO;EACT;EACAS,EAAA,EAAI;IACFT,KAAA,EAAO;EACT;EACAU,EAAA,EAAI;IACFV,KAAA,EAAO;EACT;EACAW,EAAA,EAAI;IACFX,KAAA,EAAO;EACT;EACAY,EAAA,EAAI;IACFZ,KAAA,EAAO;EACT;EACAa,EAAA,EAAI;IACFb,KAAA,EAAO;EACT;EACAc,EAAA,EAAI;IACFd,KAAA,EAAO;EACT;EACAe,EAAA,EAAI;IACFf,KAAA,EAAO;EACT;EACAgB,EAAA,EAAI;IACFhB,KAAA,EAAO;EACT;EACAiB,EAAA,EAAI;IACFjB,KAAA,EAAO;EACT;EACAkB,EAAA,EAAI;IACFlB,KAAA,EAAO;EACT;EACAmB,EAAA,EAAI;IACFnB,KAAA,EAAO;EACT;EACAoB,EAAA,EAAI;IACFpB,KAAA,EAAO;EACT;EACAqB,EAAA,EAAI;IACFrB,KAAA,EAAO;EACT;EACA,YAAY;IACVA,KAAA,EAAO;EACT;EACAsB,EAAA,EAAI;IACFtB,KAAA,EAAO;EACT;EACAuB,EAAA,EAAI;IACFvB,KAAA,EAAO;EACT;EACAwB,EAAA,EAAI;IACFxB,KAAA,EAAO;EACT;EACAyB,EAAA,EAAI;IACFzB,KAAA,EAAO;EACT;EACA0B,EAAA,EAAI;IACF1B,KAAA,EAAO;EACT;EACA2B,EAAA,EAAI;IACF3B,KAAA,EAAO;EACT;EACA4B,EAAA,EAAI;IACF5B,KAAA,EAAO;EACT;EACA6B,EAAA,EAAI;IACF7B,KAAA,EAAO;EACT;EACA,SAAS;IACPA,KAAA,EAAO;EACT;AACF","ignoreList":[]}
1
+ {"version":3,"file":"i18n.js","names":["i18n","ar","label","az","bg","cs","da","de","en","es","fa","fr","he","hr","hu","it","ja","ko","my","nb","nl","pl","pt","ro","rs","ru","sk","sv","th","tr","uk","vi","zh"],"sources":["../../../../src/features/upload/server/i18n.ts"],"sourcesContent":["import type { GenericLanguages } from '@payloadcms/translations'\n\nexport const i18n: Partial<GenericLanguages> = {\n ar: {\n label: 'تحميل',\n },\n az: {\n label: 'Yükləyin',\n },\n bg: {\n label: 'Качване',\n },\n cs: {\n label: 'Nahrát',\n },\n da: {\n label: 'Upload',\n },\n de: {\n label: 'Datei',\n },\n en: {\n label: 'Upload',\n },\n es: {\n label: 'Subir',\n },\n fa: {\n label: 'بارگذاری',\n },\n fr: {\n label: 'Télécharger',\n },\n he: {\n label: 'העלה',\n },\n hr: {\n label: 'Prenesi',\n },\n hu: {\n label: 'Feltöltés',\n },\n it: {\n label: 'Carica',\n },\n ja: {\n label: 'アップロード',\n },\n ko: {\n label: '업로드',\n },\n my: {\n label: 'တင်ပြီး',\n },\n nb: {\n label: 'Last opp',\n },\n nl: {\n label: 'Uploaden',\n },\n pl: {\n label: 'Prześlij',\n },\n pt: {\n label: 'Carregar',\n },\n ro: {\n label: 'Încarcă',\n },\n rs: {\n label: 'Otpremi',\n },\n 'rs-latin': {\n label: 'Otpremi',\n },\n ru: {\n label: 'Загрузить',\n },\n sk: {\n label: 'Nahrať',\n },\n sv: {\n label: 'Ladda upp',\n },\n th: {\n label: 'อัปโหลด',\n },\n tr: {\n label: 'Yükle',\n },\n uk: {\n label: 'Завантажити',\n },\n vi: {\n label: 'Tải lên',\n },\n zh: {\n label: '上传',\n },\n 'zh-TW': {\n label: '上傳',\n },\n}\n"],"mappings":"AAEA,OAAO,MAAMA,IAAA,GAAkC;EAC7CC,EAAA,EAAI;IACFC,KAAA,EAAO;EACT;EACAC,EAAA,EAAI;IACFD,KAAA,EAAO;EACT;EACAE,EAAA,EAAI;IACFF,KAAA,EAAO;EACT;EACAG,EAAA,EAAI;IACFH,KAAA,EAAO;EACT;EACAI,EAAA,EAAI;IACFJ,KAAA,EAAO;EACT;EACAK,EAAA,EAAI;IACFL,KAAA,EAAO;EACT;EACAM,EAAA,EAAI;IACFN,KAAA,EAAO;EACT;EACAO,EAAA,EAAI;IACFP,KAAA,EAAO;EACT;EACAQ,EAAA,EAAI;IACFR,KAAA,EAAO;EACT;EACAS,EAAA,EAAI;IACFT,KAAA,EAAO;EACT;EACAU,EAAA,EAAI;IACFV,KAAA,EAAO;EACT;EACAW,EAAA,EAAI;IACFX,KAAA,EAAO;EACT;EACAY,EAAA,EAAI;IACFZ,KAAA,EAAO;EACT;EACAa,EAAA,EAAI;IACFb,KAAA,EAAO;EACT;EACAc,EAAA,EAAI;IACFd,KAAA,EAAO;EACT;EACAe,EAAA,EAAI;IACFf,KAAA,EAAO;EACT;EACAgB,EAAA,EAAI;IACFhB,KAAA,EAAO;EACT;EACAiB,EAAA,EAAI;IACFjB,KAAA,EAAO;EACT;EACAkB,EAAA,EAAI;IACFlB,KAAA,EAAO;EACT;EACAmB,EAAA,EAAI;IACFnB,KAAA,EAAO;EACT;EACAoB,EAAA,EAAI;IACFpB,KAAA,EAAO;EACT;EACAqB,EAAA,EAAI;IACFrB,KAAA,EAAO;EACT;EACAsB,EAAA,EAAI;IACFtB,KAAA,EAAO;EACT;EACA,YAAY;IACVA,KAAA,EAAO;EACT;EACAuB,EAAA,EAAI;IACFvB,KAAA,EAAO;EACT;EACAwB,EAAA,EAAI;IACFxB,KAAA,EAAO;EACT;EACAyB,EAAA,EAAI;IACFzB,KAAA,EAAO;EACT;EACA0B,EAAA,EAAI;IACF1B,KAAA,EAAO;EACT;EACA2B,EAAA,EAAI;IACF3B,KAAA,EAAO;EACT;EACA4B,EAAA,EAAI;IACF5B,KAAA,EAAO;EACT;EACA6B,EAAA,EAAI;IACF7B,KAAA,EAAO;EACT;EACA8B,EAAA,EAAI;IACF9B,KAAA,EAAO;EACT;EACA,SAAS;IACPA,KAAA,EAAO;EACT;AACF","ignoreList":[]}
@@ -25,7 +25,7 @@ export declare class UploadServerNode extends DecoratorBlockNode {
25
25
  });
26
26
  static clone(node: UploadServerNode): UploadServerNode;
27
27
  static getType(): string;
28
- static importDOM(): DOMConversionMap | null;
28
+ static importDOM(): DOMConversionMap<HTMLImageElement>;
29
29
  static importJSON(serializedNode: SerializedUploadNode): UploadServerNode;
30
30
  static isInline(): false;
31
31
  decorate(): JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"UploadNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/server/nodes/UploadNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;AAC/F,OAAO,KAAK,EACV,gBAAgB,EAEhB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,MAAM,EACP,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACjF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAKhF,MAAM,MAAM,UAAU,CAAC,sBAAsB,SAAS,UAAU,GAAG,UAAU,IAAI;KAC9E,eAAe,IAAI,cAAc,GAAG;QACnC,MAAM,EAAE,sBAAsB,CAAA;QAE9B,EAAE,EAAE,MAAM,CAAA;QACV,UAAU,EAAE,eAAe,CAAA;QAE3B,KAAK,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAAG,MAAM,GAAG,MAAM,CAAA;KACjE;CACF,CAAC,cAAc,CAAC,CAAA;AAEjB,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAOrE;AA8BD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,IAAI,EAAE,QAAQ,CAAA;CACf,GAAG,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAA;AAEpD,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,MAAM,EAAE,UAAU,CAAA;gBAEN,EACV,IAAI,EACJ,MAAM,EACN,GAAG,GACJ,EAAE;QACD,IAAI,EAAE,UAAU,CAAA;QAChB,MAAM,CAAC,EAAE,iBAAiB,CAAA;QAC1B,GAAG,CAAC,EAAE,OAAO,CAAA;KACd;IAKD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB;IAQtD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,SAAS,IAAI,gBAAgB,GAAG,IAAI;IAS3C,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,oBAAoB,GAAG,gBAAgB;IAsBzE,MAAM,CAAC,QAAQ,IAAI,KAAK;IAIxB,QAAQ,IAAI,GAAG,CAAC,OAAO;IAKvB,SAAS,IAAI,eAAe;IAQ5B,UAAU,IAAI,oBAAoB;IASlC,OAAO,IAAI,UAAU;IAIrB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK/B,SAAS,IAAI,KAAK;CAGnB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,GACL,EAAE;IACD,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAA;CAC/D,GAAG,gBAAgB,CAKnB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,gBAAgB,CAE1B"}
1
+ {"version":3,"file":"UploadNode.d.ts","sourceRoot":"","sources":["../../../../../src/features/upload/server/nodes/UploadNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;AAC/F,OAAO,KAAK,EACV,gBAAgB,EAEhB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,MAAM,EACP,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACjF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAKhF,MAAM,MAAM,UAAU,CAAC,sBAAsB,SAAS,UAAU,GAAG,UAAU,IAAI;KAC9E,eAAe,IAAI,cAAc,GAAG;QACnC,MAAM,EAAE,sBAAsB,CAAA;QAE9B,EAAE,EAAE,MAAM,CAAA;QACV,UAAU,EAAE,eAAe,CAAA;QAE3B,KAAK,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAAG,MAAM,GAAG,MAAM,CAAA;KACjE;CACF,CAAC,cAAc,CAAC,CAAA;AAEjB,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAOrE;AA8BD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,IAAI,EAAE,QAAQ,CAAA;CACf,GAAG,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAA;AAEpD,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,MAAM,EAAE,UAAU,CAAA;gBAEN,EACV,IAAI,EACJ,MAAM,EACN,GAAG,GACJ,EAAE;QACD,IAAI,EAAE,UAAU,CAAA;QAChB,MAAM,CAAC,EAAE,iBAAiB,CAAA;QAC1B,GAAG,CAAC,EAAE,OAAO,CAAA;KACd;IAKD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB;IAQtD,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,SAAS,IAAI,gBAAgB,CAAC,gBAAgB,CAAC;IAStD,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,oBAAoB,GAAG,gBAAgB;IAsBzE,MAAM,CAAC,QAAQ,IAAI,KAAK;IAIxB,QAAQ,IAAI,GAAG,CAAC,OAAO;IAKvB,SAAS,IAAI,eAAe;IAQ5B,UAAU,IAAI,oBAAoB;IASlC,OAAO,IAAI,UAAU;IAIrB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK/B,SAAS,IAAI,KAAK;CAGnB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,GACL,EAAE;IACD,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAA;CAC/D,GAAG,gBAAgB,CAKnB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,gBAAgB,CAE1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadNode.js","names":["DecoratorBlockNode","ObjectID","$applyNodeReplacement","React","isGoogleDocCheckboxImg","img","parentElement","tagName","previousSibling","getAttribute","$convertUploadServerElement","domNode","hasAttribute","id","relationTo","node","$createUploadServerNode","data","fields","value","src","startsWith","UploadServerNode","__data","constructor","format","key","clone","__format","__key","getType","importDOM","conversion","priority","importJSON","serializedNode","version","default","toHexString","importedData","setFormat","isInline","decorate","_jsx","RawUploadComponent","nodeKey","getKey","exportDOM","element","document","createElement","setAttribute","String","exportJSON","getData","type","getLatest","setData","writable","getWritable","updateDOM","$isUploadServerNode"],"sources":["../../../../../src/features/upload/server/nodes/UploadNode.tsx"],"sourcesContent":["import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n ElementFormatType,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\nimport type { CollectionSlug, DataFromCollectionSlug, JsonObject } from 'payload'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nexport type UploadData<TUploadExtraFieldsData extends JsonObject = JsonObject> = {\n [TCollectionSlug in CollectionSlug]: {\n fields: TUploadExtraFieldsData\n // Every lexical node that has sub-fields needs to have a unique ID. This is the ID of this upload node, not the ID of the linked upload document\n id: string\n relationTo: TCollectionSlug\n // Value can be just the document ID, or the full, populated document\n value: DataFromCollectionSlug<TCollectionSlug> | number | string\n }\n}[CollectionSlug]\n\nexport function isGoogleDocCheckboxImg(img: HTMLImageElement): boolean {\n return (\n img.parentElement != null &&\n img.parentElement.tagName === 'LI' &&\n img.previousSibling === null &&\n img.getAttribute('aria-roledescription') === 'checkbox'\n )\n}\n\nfunction $convertUploadServerElement(domNode: HTMLImageElement): DOMConversionOutput | null {\n if (\n domNode.hasAttribute('data-lexical-upload-relation-to') &&\n domNode.hasAttribute('data-lexical-upload-id')\n ) {\n const id = domNode.getAttribute('data-lexical-upload-id')\n const relationTo = domNode.getAttribute('data-lexical-upload-relation-to')\n\n if (id != null && relationTo != null) {\n const node = $createUploadServerNode({\n data: {\n fields: {},\n relationTo,\n value: id,\n },\n })\n return { node }\n }\n }\n const img = domNode\n if (img.src.startsWith('file:///') || isGoogleDocCheckboxImg(img)) {\n return null\n }\n // TODO: Auto-upload functionality here!\n //}\n return null\n}\n\nexport type SerializedUploadNode = {\n children?: never // required so that our typed editor state doesn't automatically add children\n type: 'upload'\n} & Spread<UploadData, SerializedDecoratorBlockNode>\n\nexport class UploadServerNode extends DecoratorBlockNode {\n __data: UploadData\n\n constructor({\n data,\n format,\n key,\n }: {\n data: UploadData\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__data = data\n }\n\n static clone(node: UploadServerNode): UploadServerNode {\n return new this({\n data: node.__data,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'upload'\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n img: (node: HTMLImageElement) => ({\n conversion: $convertUploadServerElement,\n priority: 0,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedUploadNode): UploadServerNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n if (serializedNode.version === 2 && !serializedNode?.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const importedData: UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n\n const node = $createUploadServerNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n decorate(): JSX.Element {\n // @ts-expect-error\n return <RawUploadComponent data={this.__data} format={this.__format} nodeKey={this.getKey()} />\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('img')\n element.setAttribute('data-lexical-upload-id', String(this.__data?.value))\n element.setAttribute('data-lexical-upload-relation-to', this.__data?.relationTo)\n\n return { element }\n }\n\n exportJSON(): SerializedUploadNode {\n return {\n ...super.exportJSON(),\n ...this.getData(),\n type: 'upload',\n version: 3,\n }\n }\n\n getData(): UploadData {\n return this.getLatest().__data\n }\n\n setData(data: UploadData): void {\n const writable = this.getWritable()\n writable.__data = data\n }\n\n updateDOM(): false {\n return false\n }\n}\n\nexport function $createUploadServerNode({\n data,\n}: {\n data: Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>\n}): UploadServerNode {\n if (!data?.id) {\n data.id = new ObjectID.default().toHexString()\n }\n return $applyNodeReplacement(new UploadServerNode({ data: data as UploadData }))\n}\n\nexport function $isUploadServerNode(\n node: LexicalNode | null | undefined,\n): node is UploadServerNode {\n return node instanceof UploadServerNode\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"UploadNode.js","names":["DecoratorBlockNode","ObjectID","$applyNodeReplacement","React","isGoogleDocCheckboxImg","img","parentElement","tagName","previousSibling","getAttribute","$convertUploadServerElement","domNode","hasAttribute","id","relationTo","node","$createUploadServerNode","data","fields","value","src","startsWith","UploadServerNode","__data","constructor","format","key","clone","__format","__key","getType","importDOM","conversion","priority","importJSON","serializedNode","version","default","toHexString","importedData","setFormat","isInline","decorate","_jsx","RawUploadComponent","nodeKey","getKey","exportDOM","element","document","createElement","setAttribute","String","exportJSON","getData","type","getLatest","setData","writable","getWritable","updateDOM","$isUploadServerNode"],"sources":["../../../../../src/features/upload/server/nodes/UploadNode.tsx"],"sourcesContent":["import type { SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n ElementFormatType,\n LexicalNode,\n NodeKey,\n Spread,\n} from 'lexical'\nimport type { CollectionSlug, DataFromCollectionSlug, JsonObject } from 'payload'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\nimport * as React from 'react'\n\nexport type UploadData<TUploadExtraFieldsData extends JsonObject = JsonObject> = {\n [TCollectionSlug in CollectionSlug]: {\n fields: TUploadExtraFieldsData\n // Every lexical node that has sub-fields needs to have a unique ID. This is the ID of this upload node, not the ID of the linked upload document\n id: string\n relationTo: TCollectionSlug\n // Value can be just the document ID, or the full, populated document\n value: DataFromCollectionSlug<TCollectionSlug> | number | string\n }\n}[CollectionSlug]\n\nexport function isGoogleDocCheckboxImg(img: HTMLImageElement): boolean {\n return (\n img.parentElement != null &&\n img.parentElement.tagName === 'LI' &&\n img.previousSibling === null &&\n img.getAttribute('aria-roledescription') === 'checkbox'\n )\n}\n\nfunction $convertUploadServerElement(domNode: HTMLImageElement): DOMConversionOutput | null {\n if (\n domNode.hasAttribute('data-lexical-upload-relation-to') &&\n domNode.hasAttribute('data-lexical-upload-id')\n ) {\n const id = domNode.getAttribute('data-lexical-upload-id')\n const relationTo = domNode.getAttribute('data-lexical-upload-relation-to')\n\n if (id != null && relationTo != null) {\n const node = $createUploadServerNode({\n data: {\n fields: {},\n relationTo,\n value: id,\n },\n })\n return { node }\n }\n }\n const img = domNode\n if (img.src.startsWith('file:///') || isGoogleDocCheckboxImg(img)) {\n return null\n }\n // TODO: Auto-upload functionality here!\n //}\n return null\n}\n\nexport type SerializedUploadNode = {\n children?: never // required so that our typed editor state doesn't automatically add children\n type: 'upload'\n} & Spread<UploadData, SerializedDecoratorBlockNode>\n\nexport class UploadServerNode extends DecoratorBlockNode {\n __data: UploadData\n\n constructor({\n data,\n format,\n key,\n }: {\n data: UploadData\n format?: ElementFormatType\n key?: NodeKey\n }) {\n super(format, key)\n this.__data = data\n }\n\n static clone(node: UploadServerNode): UploadServerNode {\n return new this({\n data: node.__data,\n format: node.__format,\n key: node.__key,\n })\n }\n\n static getType(): string {\n return 'upload'\n }\n\n static importDOM(): DOMConversionMap<HTMLImageElement> {\n return {\n img: (node) => ({\n conversion: $convertUploadServerElement,\n priority: 0,\n }),\n }\n }\n\n static importJSON(serializedNode: SerializedUploadNode): UploadServerNode {\n if (serializedNode.version === 1 && (serializedNode?.value as unknown as { id: string })?.id) {\n serializedNode.value = (serializedNode.value as unknown as { id: string }).id\n }\n if (serializedNode.version === 2 && !serializedNode?.id) {\n serializedNode.id = new ObjectID.default().toHexString()\n serializedNode.version = 3\n }\n\n const importedData: UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n relationTo: serializedNode.relationTo,\n value: serializedNode.value,\n }\n\n const node = $createUploadServerNode({ data: importedData })\n node.setFormat(serializedNode.format)\n\n return node\n }\n\n static isInline(): false {\n return false\n }\n\n decorate(): JSX.Element {\n // @ts-expect-error\n return <RawUploadComponent data={this.__data} format={this.__format} nodeKey={this.getKey()} />\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('img')\n element.setAttribute('data-lexical-upload-id', String(this.__data?.value))\n element.setAttribute('data-lexical-upload-relation-to', this.__data?.relationTo)\n\n return { element }\n }\n\n exportJSON(): SerializedUploadNode {\n return {\n ...super.exportJSON(),\n ...this.getData(),\n type: 'upload',\n version: 3,\n }\n }\n\n getData(): UploadData {\n return this.getLatest().__data\n }\n\n setData(data: UploadData): void {\n const writable = this.getWritable()\n writable.__data = data\n }\n\n updateDOM(): false {\n return false\n }\n}\n\nexport function $createUploadServerNode({\n data,\n}: {\n data: Omit<UploadData, 'id'> & Partial<Pick<UploadData, 'id'>>\n}): UploadServerNode {\n if (!data?.id) {\n data.id = new ObjectID.default().toHexString()\n }\n return $applyNodeReplacement(new UploadServerNode({ data: data as UploadData }))\n}\n\nexport function $isUploadServerNode(\n node: LexicalNode | null | undefined,\n): node is UploadServerNode {\n return node instanceof UploadServerNode\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import type { SanitizedClientEditorConfig } from '../lexical/config/types.js';
3
3
  import type { LexicalRichTextFieldProps } from '../types.js';
4
+ import '../lexical/theme/EditorTheme.scss';
4
5
  import './bundled.css';
5
6
  import './index.scss';
6
- import '../lexical/theme/EditorTheme.scss';
7
7
  declare const RichTextComponent: React.FC<{
8
8
  readonly editorConfig: SanitizedClientEditorConfig;
9
9
  } & LexicalRichTextFieldProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/field/Field.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAGnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAG5D,OAAO,eAAe,CAAA;AACtB,OAAO,cAAc,CAAA;AACrB,OAAO,mCAAmC,CAAA;AAI1C,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAC/B;IACE,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAA;CACnD,GAAG,yBAAyB,CA8F9B,CAAA;AAaD,eAAO,MAAM,QAAQ,EAAE,OAAO,iBAAoD,CAAA"}
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/field/Field.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAGnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAG5D,OAAO,mCAAmC,CAAA;AAC1C,OAAO,eAAe,CAAA;AACtB,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAC/B;IACE,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAA;CACnD,GAAG,yBAAyB,CA+F9B,CAAA;AAaD,eAAO,MAAM,QAAQ,EAAE,OAAO,iBAAoD,CAAA"}
@@ -31,11 +31,13 @@ const RichTextComponent = props => {
31
31
  const editDepth = useEditDepth();
32
32
  const memoizedValidate = useCallback((value, validationOptions) => {
33
33
  if (typeof validate === 'function') {
34
+ // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
34
35
  return validate(value, {
35
36
  ...validationOptions,
36
37
  required
37
38
  });
38
39
  }
40
+ return true;
39
41
  },
40
42
  // Important: do not add props to the dependencies array.
41
43
  // This would cause an infinite loop and endless re-rendering.
@@ -57,7 +59,6 @@ const RichTextComponent = props => {
57
59
  value: value_0
58
60
  } = useField({
59
61
  path,
60
- // @ts-expect-error: TODO: Fix this
61
62
  validate: memoizedValidate
62
63
  });
63
64
  const disabled = readOnlyFromProps || formProcessing || formInitializing;
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","names":["FieldLabel","useEditDepth","useField","withCondition","mergeFieldStyles","React","useCallback","useMemo","ErrorBoundary","LexicalProvider","baseClass","RichTextComponent","props","editorConfig","field","name","admin","className","readOnly","readOnlyFromAdmin","label","localized","required","path","pathFromProps","readOnlyFromTopLevelProps","validate","readOnlyFromProps","editDepth","memoizedValidate","value","validationOptions","customComponents","AfterInput","BeforeInput","Description","Error","Label","formInitializing","formProcessing","initialValue","setValue","showError","disabled","classes","hideGutter","filter","Boolean","join","pathWithEditDepth","handleChange","editorState","toJSON","styles","_jsxs","style","_jsx","fallbackRender","onReset","composerKey","fieldProps","onChange","JSON","stringify","error","role","color","message","RichText"],"sources":["../../src/field/Field.tsx"],"sourcesContent":["'use client'\nimport type { EditorState, SerializedEditorState } from 'lexical'\n\nimport { FieldLabel, useEditDepth, useField, withCondition } from '@payloadcms/ui'\nimport { mergeFieldStyles } from '@payloadcms/ui/shared'\nimport React, { useCallback, useMemo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\nimport type { LexicalRichTextFieldProps } from '../types.js'\n\nimport { LexicalProvider } from '../lexical/LexicalProvider.js'\nimport './bundled.css'\nimport './index.scss'\nimport '../lexical/theme/EditorTheme.scss'\n\nconst baseClass = 'rich-text-lexical'\n\nconst RichTextComponent: React.FC<\n {\n readonly editorConfig: SanitizedClientEditorConfig // With rendered features n stuff\n } & LexicalRichTextFieldProps\n> = (props) => {\n const {\n editorConfig,\n field,\n field: {\n name,\n admin: { className, readOnly: readOnlyFromAdmin } = {},\n label,\n localized,\n required,\n },\n path: pathFromProps,\n readOnly: readOnlyFromTopLevelProps,\n validate, // Users can pass in client side validation if they WANT to, but it's not required anymore\n } = props\n\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n const path = pathFromProps ?? name\n\n const editDepth = useEditDepth()\n\n const memoizedValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n return validate(value, { ...validationOptions, required })\n }\n },\n // Important: do not add props to the dependencies array.\n // This would cause an infinite loop and endless re-rendering.\n // Removing props from the dependencies array fixed this issue: https://github.com/payloadcms/payload/issues/3709\n [validate, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n formInitializing,\n formProcessing,\n initialValue,\n setValue,\n showError,\n value,\n } = useField<SerializedEditorState>({\n path,\n // @ts-expect-error: TODO: Fix this\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || formProcessing || formInitializing\n\n const classes = [\n baseClass,\n 'field-type',\n className,\n showError && 'error',\n disabled && `${baseClass}--read-only`,\n editorConfig?.admin?.hideGutter !== true ? `${baseClass}--show-gutter` : null,\n ]\n .filter(Boolean)\n .join(' ')\n\n const pathWithEditDepth = `${path}.${editDepth}`\n\n const handleChange = useCallback(\n (editorState: EditorState) => {\n setValue(editorState.toJSON())\n },\n [setValue],\n )\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <div className={classes} key={pathWithEditDepth} style={styles}>\n {Error}\n {Label || <FieldLabel label={label} localized={localized} required={required} />}\n <div className={`${baseClass}__wrap`}>\n <ErrorBoundary fallbackRender={fallbackRender} onReset={() => {}}>\n {BeforeInput}\n <LexicalProvider\n composerKey={pathWithEditDepth}\n editorConfig={editorConfig}\n fieldProps={props}\n key={JSON.stringify({ initialValue, path })} // makes sure lexical is completely re-rendered when initialValue changes, bypassing the lexical-internal value memoization. That way, external changes to the form will update the editor. More infos in PR description (https://github.com/payloadcms/payload/pull/5010)\n onChange={handleChange}\n readOnly={disabled}\n value={value}\n />\n {AfterInput}\n </ErrorBoundary>\n {Description}\n </div>\n </div>\n )\n}\n\nfunction fallbackRender({ error }): React.ReactElement {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return (\n <div className=\"errorBoundary\" role=\"alert\">\n <p>Something went wrong:</p>\n <pre style={{ color: 'red' }}>{error.message}</pre>\n </div>\n )\n}\n\nexport const RichText: typeof RichTextComponent = withCondition(RichTextComponent)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Field.js","names":["FieldLabel","useEditDepth","useField","withCondition","mergeFieldStyles","React","useCallback","useMemo","ErrorBoundary","LexicalProvider","baseClass","RichTextComponent","props","editorConfig","field","name","admin","className","readOnly","readOnlyFromAdmin","label","localized","required","path","pathFromProps","readOnlyFromTopLevelProps","validate","readOnlyFromProps","editDepth","memoizedValidate","value","validationOptions","customComponents","AfterInput","BeforeInput","Description","Error","Label","formInitializing","formProcessing","initialValue","setValue","showError","disabled","classes","hideGutter","filter","Boolean","join","pathWithEditDepth","handleChange","editorState","toJSON","styles","_jsxs","style","_jsx","fallbackRender","onReset","composerKey","fieldProps","onChange","JSON","stringify","error","role","color","message","RichText"],"sources":["../../src/field/Field.tsx"],"sourcesContent":["'use client'\nimport type { EditorState, SerializedEditorState } from 'lexical'\nimport type { Validate } from 'payload'\n\nimport { FieldLabel, useEditDepth, useField, withCondition } from '@payloadcms/ui'\nimport { mergeFieldStyles } from '@payloadcms/ui/shared'\nimport React, { useCallback, useMemo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\nimport type { LexicalRichTextFieldProps } from '../types.js'\n\nimport { LexicalProvider } from '../lexical/LexicalProvider.js'\nimport '../lexical/theme/EditorTheme.scss'\nimport './bundled.css'\nimport './index.scss'\n\nconst baseClass = 'rich-text-lexical'\n\nconst RichTextComponent: React.FC<\n {\n readonly editorConfig: SanitizedClientEditorConfig // With rendered features n stuff\n } & LexicalRichTextFieldProps\n> = (props) => {\n const {\n editorConfig,\n field,\n field: {\n name,\n admin: { className, readOnly: readOnlyFromAdmin } = {},\n label,\n localized,\n required,\n },\n path: pathFromProps,\n readOnly: readOnlyFromTopLevelProps,\n validate, // Users can pass in client side validation if they WANT to, but it's not required anymore\n } = props\n\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n const path = pathFromProps ?? name\n\n const editDepth = useEditDepth()\n\n const memoizedValidate = useCallback<Validate>(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return validate(value, { ...validationOptions, required })\n }\n return true\n },\n // Important: do not add props to the dependencies array.\n // This would cause an infinite loop and endless re-rendering.\n // Removing props from the dependencies array fixed this issue: https://github.com/payloadcms/payload/issues/3709\n [validate, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n formInitializing,\n formProcessing,\n initialValue,\n setValue,\n showError,\n value,\n } = useField<SerializedEditorState>({\n path,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || formProcessing || formInitializing\n\n const classes = [\n baseClass,\n 'field-type',\n className,\n showError && 'error',\n disabled && `${baseClass}--read-only`,\n editorConfig?.admin?.hideGutter !== true ? `${baseClass}--show-gutter` : null,\n ]\n .filter(Boolean)\n .join(' ')\n\n const pathWithEditDepth = `${path}.${editDepth}`\n\n const handleChange = useCallback(\n (editorState: EditorState) => {\n setValue(editorState.toJSON())\n },\n [setValue],\n )\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <div className={classes} key={pathWithEditDepth} style={styles}>\n {Error}\n {Label || <FieldLabel label={label} localized={localized} required={required} />}\n <div className={`${baseClass}__wrap`}>\n <ErrorBoundary fallbackRender={fallbackRender} onReset={() => {}}>\n {BeforeInput}\n <LexicalProvider\n composerKey={pathWithEditDepth}\n editorConfig={editorConfig}\n fieldProps={props}\n key={JSON.stringify({ initialValue, path })} // makes sure lexical is completely re-rendered when initialValue changes, bypassing the lexical-internal value memoization. That way, external changes to the form will update the editor. More infos in PR description (https://github.com/payloadcms/payload/pull/5010)\n onChange={handleChange}\n readOnly={disabled}\n value={value}\n />\n {AfterInput}\n </ErrorBoundary>\n {Description}\n </div>\n </div>\n )\n}\n\nfunction fallbackRender({ error }: { error: Error }) {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return (\n <div className=\"errorBoundary\" role=\"alert\">\n <p>Something went wrong:</p>\n <pre style={{ color: 'red' }}>{error.message}</pre>\n </div>\n )\n}\n\nexport const RichText: typeof RichTextComponent = withCondition(RichTextComponent)\n"],"mappings":"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","ignoreList":[]}