@payloadcms/richtext-lexical 4.0.0-internal.d21c039 → 4.0.0-internal.d3909a9

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 (267) hide show
  1. package/dist/exports/client/Field-ZK6DB4T2.js +2 -0
  2. package/dist/exports/client/Field-ZK6DB4T2.js.map +7 -0
  3. package/dist/exports/client/chunk-3LRZDIIG.js +2 -0
  4. package/dist/exports/client/{chunk-LN6VX25I.js.map → chunk-3LRZDIIG.js.map} +2 -2
  5. package/dist/exports/client/chunk-4JYWPIBB.js +2 -0
  6. package/dist/exports/client/chunk-4JYWPIBB.js.map +7 -0
  7. package/dist/exports/client/chunk-UH7ALTP6.js +2 -0
  8. package/dist/exports/client/chunk-UH7ALTP6.js.map +7 -0
  9. package/dist/exports/client/{component-D5QLYS7W.js → component-ELXHSW52.js} +2 -2
  10. package/dist/exports/client/componentInline-HCGJ5ZFN.js +2 -0
  11. package/dist/exports/client/index.js +28 -28
  12. package/dist/exports/client/index.js.map +4 -4
  13. package/dist/features/blocks/client/component/BlockReordering/index.d.ts +11 -0
  14. package/dist/features/blocks/client/component/BlockReordering/index.d.ts.map +1 -0
  15. package/dist/features/blocks/client/component/BlockReordering/index.js +18 -0
  16. package/dist/features/blocks/client/component/BlockReordering/index.js.map +1 -0
  17. package/dist/features/blocks/client/component/index.d.ts +0 -6
  18. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  19. package/dist/features/blocks/client/component/index.js +196 -107
  20. package/dist/features/blocks/client/component/index.js.map +1 -1
  21. package/dist/features/blocks/client/component/useBlockReordering.d.ts +16 -0
  22. package/dist/features/blocks/client/component/useBlockReordering.d.ts.map +1 -0
  23. package/dist/features/blocks/client/component/useBlockReordering.js +178 -0
  24. package/dist/features/blocks/client/component/useBlockReordering.js.map +1 -0
  25. package/dist/features/blocks/client/componentInline/index.css +0 -1
  26. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  27. package/dist/features/blocks/client/componentInline/index.js +30 -28
  28. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  29. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts +9 -0
  30. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts.map +1 -0
  31. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js +95 -0
  32. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js.map +1 -0
  33. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  34. package/dist/features/blocks/client/nodes/BlocksNode.js +0 -10
  35. package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
  36. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  37. package/dist/features/blocks/server/nodes/BlocksNode.js +1 -12
  38. package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
  39. package/dist/features/blocks/server/nodes/InlineBlocksNode.js +2 -2
  40. package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
  41. package/dist/features/blocks/server/schema.d.ts +2 -0
  42. package/dist/features/blocks/server/schema.d.ts.map +1 -1
  43. package/dist/features/blocks/server/schema.js +7 -9
  44. package/dist/features/blocks/server/schema.js.map +1 -1
  45. package/dist/features/blocks/server/validate.js +1 -1
  46. package/dist/features/blocks/server/validate.js.map +1 -1
  47. package/dist/features/converters/lexicalToHtml/async/converters/upload.js +3 -3
  48. package/dist/features/converters/lexicalToHtml/async/converters/upload.js.map +1 -1
  49. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js +3 -3
  50. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js.map +1 -1
  51. package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -1
  52. package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -1
  53. package/dist/features/converters/lexicalToJSX/converter/converters/upload.d.ts.map +1 -1
  54. package/dist/features/converters/lexicalToJSX/converter/converters/upload.js +4 -5
  55. package/dist/features/converters/lexicalToJSX/converter/converters/upload.js.map +1 -1
  56. package/dist/features/converters/utilities/payloadPopulateFn.d.ts.map +1 -1
  57. package/dist/features/converters/utilities/payloadPopulateFn.js +4 -2
  58. package/dist/features/converters/utilities/payloadPopulateFn.js.map +1 -1
  59. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts +11 -1
  60. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.d.ts.map +1 -1
  61. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js +17 -0
  62. package/dist/features/horizontalRule/client/nodes/HorizontalRuleNode.js.map +1 -1
  63. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js +2 -2
  64. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
  65. package/dist/features/horizontalRule/server/schema.d.ts +1 -0
  66. package/dist/features/horizontalRule/server/schema.d.ts.map +1 -1
  67. package/dist/features/horizontalRule/server/schema.js +6 -5
  68. package/dist/features/horizontalRule/server/schema.js.map +1 -1
  69. package/dist/features/indent/client/IndentPlugin.d.ts.map +1 -1
  70. package/dist/features/indent/client/IndentPlugin.js +122 -1
  71. package/dist/features/indent/client/IndentPlugin.js.map +1 -1
  72. package/dist/features/indent/server/i18n.d.ts.map +1 -1
  73. package/dist/features/indent/server/i18n.js +74 -37
  74. package/dist/features/indent/server/i18n.js.map +1 -1
  75. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  76. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +8 -5
  77. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  78. package/dist/features/link/client/plugins/floatingLinkEditor/index.css +0 -1
  79. package/dist/features/link/client/plugins/link/index.js.map +1 -1
  80. package/dist/features/link/markdownTransformer.js +2 -2
  81. package/dist/features/link/markdownTransformer.js.map +1 -1
  82. package/dist/features/link/nodes/AutoLinkNode.d.ts.map +1 -1
  83. package/dist/features/link/nodes/AutoLinkNode.js +2 -10
  84. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  85. package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
  86. package/dist/features/link/nodes/LinkNode.js +2 -15
  87. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  88. package/dist/features/link/server/baseFields.js.map +1 -1
  89. package/dist/features/link/server/validate.js +1 -1
  90. package/dist/features/link/server/validate.js.map +1 -1
  91. package/dist/features/lists/shared/schema.d.ts.map +1 -1
  92. package/dist/features/lists/shared/schema.js.map +1 -1
  93. package/dist/features/relationship/client/components/index.css +3 -6
  94. package/dist/features/relationship/client/nodes/RelationshipNode.d.ts.map +1 -1
  95. package/dist/features/relationship/client/nodes/RelationshipNode.js +0 -3
  96. package/dist/features/relationship/client/nodes/RelationshipNode.js.map +1 -1
  97. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  98. package/dist/features/relationship/server/nodes/RelationshipNode.js +1 -5
  99. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  100. package/dist/features/relationship/server/schema.d.ts +1 -0
  101. package/dist/features/relationship/server/schema.d.ts.map +1 -1
  102. package/dist/features/relationship/server/schema.js +4 -2
  103. package/dist/features/relationship/server/schema.js.map +1 -1
  104. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.css +0 -1
  105. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js +1 -1
  106. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  107. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  108. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js +41 -18
  109. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  110. package/dist/features/table/client/plugins/TablePlugin/TableGridPopup/index.css +0 -3
  111. package/dist/features/textState/defaultColors.js +1 -1
  112. package/dist/features/textState/defaultColors.js.map +1 -1
  113. package/dist/features/toolbars/fixed/client/Toolbar/index.css +2 -2
  114. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  115. package/dist/features/toolbars/fixed/client/Toolbar/index.js +15 -0
  116. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  117. package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
  118. package/dist/features/toolbars/inline/client/Toolbar/index.js +17 -2
  119. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  120. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  121. package/dist/features/toolbars/shared/ToolbarButton/index.js +1 -0
  122. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  123. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
  124. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +85 -32
  125. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  126. package/dist/features/toolbars/shared/ToolbarDropdown/index.css +4 -1
  127. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.d.ts +5 -0
  128. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.d.ts.map +1 -0
  129. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js +79 -0
  130. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js.map +1 -0
  131. package/dist/features/typesServer.d.ts +16 -11
  132. package/dist/features/typesServer.d.ts.map +1 -1
  133. package/dist/features/typesServer.js.map +1 -1
  134. package/dist/features/upload/client/component/index.css +0 -2
  135. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  136. package/dist/features/upload/client/nodes/UploadNode.js +0 -7
  137. package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
  138. package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
  139. package/dist/features/upload/client/plugin/index.js +3 -1
  140. package/dist/features/upload/client/plugin/index.js.map +1 -1
  141. package/dist/features/upload/server/index.d.ts +1 -1
  142. package/dist/features/upload/server/index.d.ts.map +1 -1
  143. package/dist/features/upload/server/index.js.map +1 -1
  144. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  145. package/dist/features/upload/server/nodes/UploadNode.js +1 -9
  146. package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
  147. package/dist/features/upload/server/schema.d.ts +2 -14
  148. package/dist/features/upload/server/schema.d.ts.map +1 -1
  149. package/dist/features/upload/server/schema.js +4 -2
  150. package/dist/features/upload/server/schema.js.map +1 -1
  151. package/dist/features/upload/server/validate.js +1 -1
  152. package/dist/features/upload/server/validate.js.map +1 -1
  153. package/dist/field/Diff/converters/relationship/index.css +0 -1
  154. package/dist/field/Diff/converters/unknown/index.css +0 -1
  155. package/dist/field/Diff/converters/upload/index.css +0 -1
  156. package/dist/field/Diff/converters/upload/index.js.map +1 -1
  157. package/dist/field/Diff/index.css +20 -19
  158. package/dist/field/Diff/index.d.ts +3 -2
  159. package/dist/field/Diff/index.d.ts.map +1 -1
  160. package/dist/field/Diff/index.js +2 -2
  161. package/dist/field/Diff/index.js.map +1 -1
  162. package/dist/field/Field.d.ts.map +1 -1
  163. package/dist/field/Field.js +8 -1
  164. package/dist/field/Field.js.map +1 -1
  165. package/dist/field/ViewSelector.d.ts.map +1 -1
  166. package/dist/field/ViewSelector.js +1 -0
  167. package/dist/field/ViewSelector.js.map +1 -1
  168. package/dist/field/bundled.css +1 -1
  169. package/dist/field/index.css +0 -5
  170. package/dist/field/rscEntry.d.ts +2 -2
  171. package/dist/field/rscEntry.d.ts.map +1 -1
  172. package/dist/field/rscEntry.js.map +1 -1
  173. package/dist/index.d.ts +4 -4
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +23 -1
  176. package/dist/index.js.map +1 -1
  177. package/dist/lexical/LexicalEditor.css +23 -12
  178. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  179. package/dist/lexical/LexicalEditor.js +61 -64
  180. package/dist/lexical/LexicalEditor.js.map +1 -1
  181. package/dist/lexical/plugins/DecoratorPlugin/index.d.ts.map +1 -1
  182. package/dist/lexical/plugins/DecoratorPlugin/index.js +24 -21
  183. package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
  184. package/dist/lexical/plugins/InsertParagraphAtEnd/index.css +2 -1
  185. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +1 -1
  186. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  187. package/dist/lexical/plugins/SlashMenu/index.css +0 -1
  188. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.css +1 -0
  189. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +2 -2
  190. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  191. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +1 -0
  192. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  193. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +16 -2
  194. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  195. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts +7 -0
  196. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -0
  197. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +65 -0
  198. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -0
  199. package/dist/lexical/plugins/handles/utils/setHandlePosition.d.ts.map +1 -1
  200. package/dist/lexical/plugins/handles/utils/setHandlePosition.js +2 -0
  201. package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
  202. package/dist/lexical/theme/EditorTheme.css +35 -25
  203. package/dist/lexical/ui/ContentEditable.css +0 -1
  204. package/dist/lexical/ui/ContentEditable.d.ts +2 -1
  205. package/dist/lexical/ui/ContentEditable.d.ts.map +1 -1
  206. package/dist/lexical/ui/ContentEditable.js +32 -11
  207. package/dist/lexical/ui/ContentEditable.js.map +1 -1
  208. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  209. package/dist/lexical/utils/nodeFormat.js +0 -2
  210. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  211. package/dist/lexical/utils/url.d.ts.map +1 -1
  212. package/dist/lexical/utils/url.js +1 -1
  213. package/dist/lexical/utils/url.js.map +1 -1
  214. package/dist/populateGraphQL/populate.js.map +1 -1
  215. package/dist/presets/llmInstructions.d.ts +2 -0
  216. package/dist/presets/llmInstructions.d.ts.map +1 -0
  217. package/dist/presets/llmInstructions.js +13 -0
  218. package/dist/presets/llmInstructions.js.map +1 -0
  219. package/dist/types/builtInNodes.d.ts +1 -1
  220. package/dist/types/builtInNodes.d.ts.map +1 -1
  221. package/dist/types/builtInNodes.js +8 -3
  222. package/dist/types/builtInNodes.js.map +1 -1
  223. package/dist/types/index.d.ts +3 -6
  224. package/dist/types/index.d.ts.map +1 -1
  225. package/dist/types/index.js.map +1 -1
  226. package/dist/types/jsonSchemaHelpers.d.ts +5 -1
  227. package/dist/types/jsonSchemaHelpers.d.ts.map +1 -1
  228. package/dist/types/jsonSchemaHelpers.js +7 -2
  229. package/dist/types/jsonSchemaHelpers.js.map +1 -1
  230. package/dist/types/nodeTypes.d.ts +5 -0
  231. package/dist/types/nodeTypes.d.ts.map +1 -1
  232. package/dist/types/nodeTypes.js.map +1 -1
  233. package/dist/utilities/buildEditorState.d.ts.map +1 -1
  234. package/dist/utilities/buildEditorState.js.map +1 -1
  235. package/dist/utilities/buildInitialState.d.ts +3 -2
  236. package/dist/utilities/buildInitialState.d.ts.map +1 -1
  237. package/dist/utilities/buildInitialState.js +1 -0
  238. package/dist/utilities/buildInitialState.js.map +1 -1
  239. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  240. package/dist/utilities/fieldsDrawer/DrawerContent.js +2 -7
  241. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  242. package/dist/utilities/generateImportMap.d.ts +2 -2
  243. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  244. package/dist/utilities/generateImportMap.js.map +1 -1
  245. package/dist/utilities/upgradeLexicalData/index.js +6 -3
  246. package/dist/utilities/upgradeLexicalData/index.js.map +1 -1
  247. package/dist/validate/hasText.d.ts +2 -2
  248. package/dist/validate/hasText.d.ts.map +1 -1
  249. package/dist/validate/hasText.js.map +1 -1
  250. package/dist/validate/index.d.ts +1 -1
  251. package/dist/validate/index.d.ts.map +1 -1
  252. package/package.json +44 -47
  253. package/dist/exports/client/Field-QKAL7KMC.js +0 -2
  254. package/dist/exports/client/Field-QKAL7KMC.js.map +0 -7
  255. package/dist/exports/client/bundled.css +0 -1
  256. package/dist/exports/client/chunk-43E5QYAA.js +0 -2
  257. package/dist/exports/client/chunk-43E5QYAA.js.map +0 -7
  258. package/dist/exports/client/chunk-ESITTE3C.js +0 -2
  259. package/dist/exports/client/chunk-ESITTE3C.js.map +0 -7
  260. package/dist/exports/client/chunk-LN6VX25I.js +0 -2
  261. package/dist/exports/client/componentInline-H24N7GUG.js +0 -2
  262. package/dist/features/blocks/client/component/removeEmptyArrayValues.d.ts +0 -11
  263. package/dist/features/blocks/client/component/removeEmptyArrayValues.d.ts.map +0 -1
  264. package/dist/features/blocks/client/component/removeEmptyArrayValues.js +0 -20
  265. package/dist/features/blocks/client/component/removeEmptyArrayValues.js.map +0 -1
  266. /package/dist/exports/client/{component-D5QLYS7W.js.map → component-ELXHSW52.js.map} +0 -0
  267. /package/dist/exports/client/{componentInline-H24N7GUG.js.map → componentInline-HCGJ5ZFN.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"UploadNode.js","names":["DecoratorBlockNode","addClassNamesToElement","ObjectID","$applyNodeReplacement","$convertUploadElement","UploadServerNode","__data","constructor","data","format","key","clone","node","__format","__key","getType","importDOM","img","conversion","domNode","$createUploadServerNode","priority","importJSON","serializedNode","version","value","id","default","toHexString","importedData","fields","pending","relationTo","setFormat","isInline","createDOM","config","element","document","createElement","theme","upload","decorate","exportDOM","setAttribute","String","formID","src","exportJSON","getData","type","getLatest","setData","writable","getWritable","updateDOM","$isUploadServerNode"],"sources":["../../../../../src/features/upload/server/nodes/UploadNode.tsx"],"sourcesContent":["import type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n ElementFormatType,\n LexicalNode,\n NodeKey,\n} from 'lexical'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport { addClassNamesToElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\n\nimport type { Internal_UploadData, SerializedUploadNode, UploadData } from '../schema.js'\n\nimport { $convertUploadElement } from './conversions.js'\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 override 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 override getType(): string {\n return 'upload'\n }\n\n static override importDOM(): DOMConversionMap<HTMLImageElement> {\n return {\n img: (node) => ({\n conversion: (domNode) => $convertUploadElement(domNode, $createUploadServerNode),\n priority: 0,\n }),\n }\n }\n\n static override 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: Internal_UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n pending: (serializedNode as Internal_UploadData).pending,\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 override createDOM(config?: EditorConfig): HTMLElement {\n const element = document.createElement('div')\n addClassNamesToElement(element, config?.theme?.upload)\n return element\n }\n\n override decorate(): JSX.Element {\n return null as unknown as JSX.Element\n }\n\n override exportDOM(): DOMExportOutput {\n const element = document.createElement('img')\n const data = this.__data as Internal_UploadData\n if (data.pending) {\n element.setAttribute('data-lexical-pending-upload-form-id', String(data?.pending?.formID))\n element.setAttribute('src', data?.pending?.src || '')\n } else {\n element.setAttribute('data-lexical-upload-id', String(data?.value))\n element.setAttribute('data-lexical-upload-relation-to', data?.relationTo)\n }\n\n return { element }\n }\n\n override 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 override 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","addClassNamesToElement","ObjectID","$applyNodeReplacement","$convertUploadElement","UploadServerNode","__data","constructor","data","format","key","clone","node","__format","__key","getType","importDOM","img","conversion","domNode","$createUploadServerNode","priority","importJSON","serializedNode","importedData","id","fields","pending","relationTo","value","setFormat","isInline","createDOM","config","element","document","createElement","theme","upload","decorate","exportDOM","setAttribute","String","formID","src","exportJSON","getData","type","getLatest","setData","writable","getWritable","updateDOM","default","toHexString","$isUploadServerNode"],"sources":["../../../../../src/features/upload/server/nodes/UploadNode.tsx"],"sourcesContent":["import type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n ElementFormatType,\n LexicalNode,\n NodeKey,\n} from 'lexical'\nimport type { JSX } from 'react'\n\nimport { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode.js'\nimport { addClassNamesToElement } from '@lexical/utils'\nimport ObjectID from 'bson-objectid'\nimport { $applyNodeReplacement } from 'lexical'\n\nimport type { Internal_UploadData, SerializedUploadNode, UploadData } from '../schema.js'\n\nimport { $convertUploadElement } from './conversions.js'\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 override 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 override getType(): string {\n return 'upload'\n }\n\n static override importDOM(): DOMConversionMap<HTMLImageElement> {\n return {\n img: (node) => ({\n conversion: (domNode) => $convertUploadElement(domNode, $createUploadServerNode),\n priority: 0,\n }),\n }\n }\n\n static override importJSON(serializedNode: SerializedUploadNode): UploadServerNode {\n const importedData: Internal_UploadData = {\n id: serializedNode.id,\n fields: serializedNode.fields,\n pending: (serializedNode as Internal_UploadData).pending,\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 override createDOM(config?: EditorConfig): HTMLElement {\n const element = document.createElement('div')\n addClassNamesToElement(element, config?.theme?.upload)\n return element\n }\n\n override decorate(): JSX.Element {\n return null as unknown as JSX.Element\n }\n\n override exportDOM(): DOMExportOutput {\n const element = document.createElement('img')\n const data = this.__data as Internal_UploadData\n if (data.pending) {\n element.setAttribute('data-lexical-pending-upload-form-id', String(data?.pending?.formID))\n element.setAttribute('src', data?.pending?.src || '')\n } else {\n element.setAttribute('data-lexical-upload-id', String(data?.value))\n element.setAttribute('data-lexical-upload-relation-to', data?.relationTo)\n }\n\n return { element }\n }\n\n override exportJSON(): SerializedUploadNode {\n return {\n ...super.exportJSON(),\n ...this.getData(),\n type: 'upload',\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 override 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":[]}
@@ -9,7 +9,7 @@ export type UploadData<TFields extends JsonObject = JsonObject> = {
9
9
  id: string;
10
10
  relationTo: TCollectionSlug;
11
11
  /** Either the document ID or the full populated document. */
12
- value: DataFromCollectionSlug<TCollectionSlug> | IDTypeForCollectionSlug<TCollectionSlug>;
12
+ value: IDTypeForCollectionSlug<TCollectionSlug> | TypedUploadCollection[TCollectionSlug];
13
13
  };
14
14
  }[UploadCollectionSlug];
15
15
  /** @internal Adds a pending state to `UploadData`. */
@@ -21,19 +21,6 @@ export type Internal_UploadData<TFields extends JsonObject = JsonObject> = {
21
21
  src: string;
22
22
  };
23
23
  } & UploadData<TFields>;
24
- /**
25
- * More precise variant of {@link UploadData}. Replaces `UploadData` in v4.
26
- * @internal
27
- * @todo Replace UploadData with UploadDataImproved in 4.0
28
- */
29
- export type UploadDataImproved<TFields extends JsonObject = JsonObject> = {
30
- [TCollectionSlug in UploadCollectionSlug]: {
31
- fields: TFields;
32
- id: string;
33
- relationTo: TCollectionSlug;
34
- value: IDTypeForCollectionSlug<TCollectionSlug> | TypedUploadCollection[TCollectionSlug];
35
- };
36
- }[UploadCollectionSlug];
37
24
  export type SerializedUploadNode<TSlugs extends UploadCollectionSlug = UploadCollectionSlug, TFields = {
38
25
  [k: string]: unknown;
39
26
  }> = {
@@ -46,6 +33,7 @@ export type SerializedUploadNode<TSlugs extends UploadCollectionSlug = UploadCol
46
33
  format: LexicalElementFormat;
47
34
  id: string;
48
35
  type: 'upload';
36
+ /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */
49
37
  version: number;
50
38
  };
51
39
  export declare const createUploadNodeJSONSchema: (props: UploadFeatureServerProps) => JSONSchemaFn;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/features/upload/server/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAKhB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAI1D,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI;KAC/D,eAAe,IAAI,oBAAoB,GAAG;QACzC,MAAM,EAAE,OAAO,CAAA;QACf,6DAA6D;QAC7D,EAAE,EAAE,MAAM,CAAA;QACV,UAAU,EAAE,eAAe,CAAA;QAC3B,6DAA6D;QAC7D,KAAK,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAAG,uBAAuB,CAAC,eAAe,CAAC,CAAA;KAC1F;CACF,CAAC,oBAAoB,CAAC,CAAA;AAEvB,sDAAsD;AACtD,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI;IACzE,OAAO,CAAC,EAAE;QACR,2BAA2B;QAC3B,MAAM,EAAE,MAAM,CAAA;QACd,sCAAsC;QACtC,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;CACF,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AAEvB;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI;KACvE,eAAe,IAAI,oBAAoB,GAAG;QACzC,MAAM,EAAE,OAAO,CAAA;QACf,EAAE,EAAE,MAAM,CAAA;QACV,UAAU,EAAE,eAAe,CAAA;QAC3B,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAA;KACzF;CACF,CAAC,oBAAoB,CAAC,CAAA;AAEvB,MAAM,MAAM,oBAAoB,CAC9B,MAAM,SAAS,oBAAoB,GAAG,oBAAoB,EAC1D,OAAO,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,IAChC;KACD,KAAK,IAAI,MAAM,GAAG;QACjB,UAAU,EAAE,KAAK,CAAA;QACjB,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;KACtE;CACF,CAAC,MAAM,CAAC,GAAG;IACV,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAiCD,eAAO,MAAM,0BAA0B,UAC7B,wBAAwB,KAAG,YAmGlC,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/features/upload/server/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAKhB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAI1D,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI;KAC/D,eAAe,IAAI,oBAAoB,GAAG;QACzC,MAAM,EAAE,OAAO,CAAA;QACf,6DAA6D;QAC7D,EAAE,EAAE,MAAM,CAAA;QACV,UAAU,EAAE,eAAe,CAAA;QAC3B,6DAA6D;QAC7D,KAAK,EAAE,uBAAuB,CAAC,eAAe,CAAC,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAA;KACzF;CACF,CAAC,oBAAoB,CAAC,CAAA;AAEvB,sDAAsD;AACtD,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI;IACzE,OAAO,CAAC,EAAE;QACR,2BAA2B;QAC3B,MAAM,EAAE,MAAM,CAAA;QACd,sCAAsC;QACtC,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;CACF,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AAEvB,MAAM,MAAM,oBAAoB,CAC9B,MAAM,SAAS,oBAAoB,GAAG,oBAAoB,EAC1D,OAAO,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,IAChC;KACD,KAAK,IAAI,MAAM,GAAG;QACjB,UAAU,EAAE,KAAK,CAAA;QACjB,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;KACtE;CACF,CAAC,MAAM,CAAC,GAAG;IACV,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,QAAQ,CAAA;IACd,wJAAwJ;IACxJ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAmCD,eAAO,MAAM,0BAA0B,UAC7B,wBAAwB,KAAG,YAmGlC,CAAA"}
@@ -6,6 +6,7 @@ const SERIALIZED_UPLOAD_NODE_TS = `export type SerializedUploadNode<TSlugs exten
6
6
  type: 'upload';
7
7
  format: LexicalElementFormat;
8
8
  id: string;
9
+ /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */
9
10
  version: number;
10
11
  fields: TFields;
11
12
  } & {
@@ -19,6 +20,7 @@ const SERIALIZED_UPLOAD_NODE_INPUT_TS = `export type SerializedUploadNodeInput<T
19
20
  type: 'upload';
20
21
  format: LexicalElementFormat;
21
22
  id: string;
23
+ /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */
22
24
  version: number;
23
25
  fields: TFields;
24
26
  } & {
@@ -113,7 +115,7 @@ export const createUploadNodeJSONSchema = props => ({
113
115
  },
114
116
  version: versionSchema
115
117
  },
116
- required: ['fields', 'format', 'id', 'relationTo', 'type', 'value', 'version']
118
+ required: ['fields', 'format', 'id', 'relationTo', 'type', 'value']
117
119
  };
118
120
  });
119
121
  let schema;
@@ -129,7 +131,7 @@ export const createUploadNodeJSONSchema = props => ({
129
131
  },
130
132
  version: versionSchema
131
133
  },
132
- required: ['type', 'version']
134
+ required: ['type']
133
135
  };
134
136
  } else {
135
137
  const baseSchema = collectionVariants.length === 1 ? collectionVariants[0] : {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":["createHash","fieldsToJSONSchema","flattenAllFields","formatSchema","versionSchema","SERIALIZED_UPLOAD_NODE_TS","SERIALIZED_UPLOAD_NODE_INPUT_TS","hashUploadFields","schema","update","JSON","stringify","digest","slice","toUpperCase","createUploadNodeJSONSchema","props","collectionIDFieldTypes","config","i18n","interfaceNameDefinitions","typeStringDefinitions","variant","isInput","add","enabledCollectionSlugs","perCollectionTsTypes","collectionVariants","map","slug","idType","extraFields","collections","fields","flattenedExtra","extraFieldsSchema","length","properties","required","fieldsSchema","type","additionalProperties","fieldsTypeName","set","$ref","uploadTsName","push","id","const","format","relationTo","value","description","oneOf","version","baseSchema","tsType","join"],"sources":["../../../../src/features/upload/server/schema.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\nimport type {\n DataFromCollectionSlug,\n IDTypeForCollectionSlug,\n JsonObject,\n TypedUploadCollection,\n UploadCollectionSlug,\n} from 'payload'\n\nimport { createHash } from 'crypto'\nimport { fieldsToJSONSchema, flattenAllFields } from 'payload'\n\nimport type { LexicalElementFormat } from '../../../types/nodeTypes.js'\nimport type { JSONSchemaFn } from '../../typesServer.js'\nimport type { UploadFeatureServerProps } from './index.js'\n\nimport { formatSchema, versionSchema } from '../../../types/jsonSchemaHelpers.js'\n\nexport type UploadData<TFields extends JsonObject = JsonObject> = {\n [TCollectionSlug in UploadCollectionSlug]: {\n fields: TFields\n /** ID of this upload node — NOT the linked document's ID. */\n id: string\n relationTo: TCollectionSlug\n /** Either the document ID or the full populated document. */\n value: DataFromCollectionSlug<TCollectionSlug> | IDTypeForCollectionSlug<TCollectionSlug>\n }\n}[UploadCollectionSlug]\n\n/** @internal Adds a pending state to `UploadData`. */\nexport type Internal_UploadData<TFields extends JsonObject = JsonObject> = {\n pending?: {\n /** Bulk upload form ID. */\n formID: string\n /** `src` of the image DOM element. */\n src: string\n }\n} & UploadData<TFields>\n\n/**\n * More precise variant of {@link UploadData}. Replaces `UploadData` in v4.\n * @internal\n * @todo Replace UploadData with UploadDataImproved in 4.0\n */\nexport type UploadDataImproved<TFields extends JsonObject = JsonObject> = {\n [TCollectionSlug in UploadCollectionSlug]: {\n fields: TFields\n id: string\n relationTo: TCollectionSlug\n value: IDTypeForCollectionSlug<TCollectionSlug> | TypedUploadCollection[TCollectionSlug]\n }\n}[UploadCollectionSlug]\n\nexport type SerializedUploadNode<\n TSlugs extends UploadCollectionSlug = UploadCollectionSlug,\n TFields = { [k: string]: unknown },\n> = {\n [TSlug in TSlugs]: {\n relationTo: TSlug\n value: DataFromCollectionSlug<TSlug> | IDTypeForCollectionSlug<TSlug>\n }\n}[TSlugs] & {\n fields: TFields\n format: LexicalElementFormat\n id: string\n type: 'upload'\n version: number\n}\n\n/** MUST stay byte-for-byte in sync with the runtime `SerializedUploadNode` declared above. */\nconst SERIALIZED_UPLOAD_NODE_TS = `export type SerializedUploadNode<TSlugs extends keyof Config['collections'], TFields = { [k: string]: unknown }> = {\n type: 'upload';\n format: LexicalElementFormat;\n id: string;\n version: number;\n fields: TFields;\n} & {\n [TSlug in TSlugs]: {\n relationTo: TSlug;\n value: Config['collections'][TSlug]['id'] | Config['collections'][TSlug];\n };\n}[TSlugs];`\n\n/** Input variant of `SerializedUploadNode`: `value` is ID-only (you only ever write an ID). */\nconst SERIALIZED_UPLOAD_NODE_INPUT_TS = `export type SerializedUploadNodeInput<TSlugs extends keyof Config['collections'], TFields = { [k: string]: unknown }> = {\n type: 'upload';\n format: LexicalElementFormat;\n id: string;\n version: number;\n fields: TFields;\n} & {\n [TSlug in TSlugs]: {\n relationTo: TSlug;\n value: Config['collections'][TSlug]['id'];\n };\n}[TSlugs];`\n\nconst hashUploadFields = (schema: JSONSchema4): string =>\n createHash('sha256').update(JSON.stringify(schema)).digest('hex').slice(0, 8).toUpperCase()\n\nexport const createUploadNodeJSONSchema =\n (props: UploadFeatureServerProps): JSONSchemaFn =>\n ({\n collectionIDFieldTypes,\n config,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n variant,\n }) => {\n const isInput = variant === 'input'\n typeStringDefinitions.add(isInput ? SERIALIZED_UPLOAD_NODE_INPUT_TS : SERIALIZED_UPLOAD_NODE_TS)\n const { enabledCollectionSlugs } = props\n\n // Configured extra fields are registered as their own interface and referenced here, so the\n // generated TypeScript keeps them - the node-level `tsType` would otherwise erase `fields` to\n // `{ [k: string]: unknown }`. Mirrors how LinkFeature handles custom link fields.\n //\n // Each collection gets its own `SerializedUploadNode<'slug', Fields>` instantiation so the\n // generated union correctly pairs each `relationTo` with its own fields type. A single\n // `SerializedUploadNode<'a' | 'b', AFields | BFields>` would lose that pairing.\n const perCollectionTsTypes: string[] = []\n const collectionVariants: JSONSchema4[] = enabledCollectionSlugs.map((slug) => {\n const idType: 'number' | 'string' = collectionIDFieldTypes[slug] ?? 'string'\n const extraFields = props?.collections?.[slug]?.fields ?? []\n const flattenedExtra = flattenAllFields({ fields: extraFields })\n const extraFieldsSchema =\n flattenedExtra.length > 0 && config\n ? fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: flattenedExtra,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n variant,\n })\n : { properties: {}, required: [] }\n\n let fieldsSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: extraFieldsSchema.properties,\n required: extraFieldsSchema.required,\n }\n let fieldsTypeName: string | undefined\n if (flattenedExtra.length > 0) {\n fieldsTypeName = `LexicalUploadFields_${hashUploadFields(fieldsSchema)}`\n interfaceNameDefinitions.set(fieldsTypeName, fieldsSchema)\n fieldsSchema = { $ref: `#/$defs/${fieldsTypeName}` }\n }\n\n const uploadTsName = isInput ? 'SerializedUploadNodeInput' : 'SerializedUploadNode'\n perCollectionTsTypes.push(\n fieldsTypeName\n ? `${uploadTsName}<'${slug}', ${fieldsTypeName}>`\n : `${uploadTsName}<'${slug}'>`,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n id: { type: 'string' },\n type: { type: 'string', const: 'upload' },\n fields: fieldsSchema,\n format: formatSchema,\n relationTo: { type: 'string', const: slug },\n value: isInput\n ? { type: idType, description: 'The uploaded file ID.' }\n : {\n description:\n 'The uploaded file by ID (string or number). Populated to the full upload document when read at depth > 0.',\n oneOf: [{ type: idType }, { $ref: `#/$defs/${slug}` }],\n },\n version: versionSchema,\n },\n required: ['fields', 'format', 'id', 'relationTo', 'type', 'value', 'version'],\n }\n })\n\n let schema: JSONSchema4\n if (collectionVariants.length === 0) {\n // Fallback when no enabled upload collections.\n schema = {\n type: 'object',\n additionalProperties: true,\n properties: {\n type: { type: 'string', const: 'upload' },\n version: versionSchema,\n },\n required: ['type', 'version'],\n }\n } else {\n const baseSchema: JSONSchema4 =\n collectionVariants.length === 1 ? collectionVariants[0]! : { oneOf: collectionVariants }\n schema = { ...baseSchema, tsType: perCollectionTsTypes.join(' | ') }\n }\n\n return schema\n }\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"schema.js","names":["createHash","fieldsToJSONSchema","flattenAllFields","formatSchema","versionSchema","SERIALIZED_UPLOAD_NODE_TS","SERIALIZED_UPLOAD_NODE_INPUT_TS","hashUploadFields","schema","update","JSON","stringify","digest","slice","toUpperCase","createUploadNodeJSONSchema","props","collectionIDFieldTypes","config","i18n","interfaceNameDefinitions","typeStringDefinitions","variant","isInput","add","enabledCollectionSlugs","perCollectionTsTypes","collectionVariants","map","slug","idType","extraFields","collections","fields","flattenedExtra","extraFieldsSchema","length","properties","required","fieldsSchema","type","additionalProperties","fieldsTypeName","set","$ref","uploadTsName","push","id","const","format","relationTo","value","description","oneOf","version","baseSchema","tsType","join"],"sources":["../../../../src/features/upload/server/schema.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\nimport type {\n DataFromCollectionSlug,\n IDTypeForCollectionSlug,\n JsonObject,\n TypedUploadCollection,\n UploadCollectionSlug,\n} from 'payload'\n\nimport { createHash } from 'crypto'\nimport { fieldsToJSONSchema, flattenAllFields } from 'payload'\n\nimport type { LexicalElementFormat } from '../../../types/nodeTypes.js'\nimport type { JSONSchemaFn } from '../../typesServer.js'\nimport type { UploadFeatureServerProps } from './index.js'\n\nimport { formatSchema, versionSchema } from '../../../types/jsonSchemaHelpers.js'\n\nexport type UploadData<TFields extends JsonObject = JsonObject> = {\n [TCollectionSlug in UploadCollectionSlug]: {\n fields: TFields\n /** ID of this upload node — NOT the linked document's ID. */\n id: string\n relationTo: TCollectionSlug\n /** Either the document ID or the full populated document. */\n value: IDTypeForCollectionSlug<TCollectionSlug> | TypedUploadCollection[TCollectionSlug]\n }\n}[UploadCollectionSlug]\n\n/** @internal Adds a pending state to `UploadData`. */\nexport type Internal_UploadData<TFields extends JsonObject = JsonObject> = {\n pending?: {\n /** Bulk upload form ID. */\n formID: string\n /** `src` of the image DOM element. */\n src: string\n }\n} & UploadData<TFields>\n\nexport type SerializedUploadNode<\n TSlugs extends UploadCollectionSlug = UploadCollectionSlug,\n TFields = { [k: string]: unknown },\n> = {\n [TSlug in TSlugs]: {\n relationTo: TSlug\n value: DataFromCollectionSlug<TSlug> | IDTypeForCollectionSlug<TSlug>\n }\n}[TSlugs] & {\n fields: TFields\n format: LexicalElementFormat\n id: string\n type: 'upload'\n /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */\n version: number\n}\n\n/** MUST stay byte-for-byte in sync with the runtime `SerializedUploadNode` declared above. */\nconst SERIALIZED_UPLOAD_NODE_TS = `export type SerializedUploadNode<TSlugs extends keyof Config['collections'], TFields = { [k: string]: unknown }> = {\n type: 'upload';\n format: LexicalElementFormat;\n id: string;\n /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */\n version: number;\n fields: TFields;\n} & {\n [TSlug in TSlugs]: {\n relationTo: TSlug;\n value: Config['collections'][TSlug]['id'] | Config['collections'][TSlug];\n };\n}[TSlugs];`\n\n/** Input variant of `SerializedUploadNode`: `value` is ID-only (you only ever write an ID). */\nconst SERIALIZED_UPLOAD_NODE_INPUT_TS = `export type SerializedUploadNodeInput<TSlugs extends keyof Config['collections'], TFields = { [k: string]: unknown }> = {\n type: 'upload';\n format: LexicalElementFormat;\n id: string;\n /** @deprecated Ignored when loading. Typed as required only to match Lexical's types: rich text sent through the API, CLI or MCP may not contain it. */\n version: number;\n fields: TFields;\n} & {\n [TSlug in TSlugs]: {\n relationTo: TSlug;\n value: Config['collections'][TSlug]['id'];\n };\n}[TSlugs];`\n\nconst hashUploadFields = (schema: JSONSchema4): string =>\n createHash('sha256').update(JSON.stringify(schema)).digest('hex').slice(0, 8).toUpperCase()\n\nexport const createUploadNodeJSONSchema =\n (props: UploadFeatureServerProps): JSONSchemaFn =>\n ({\n collectionIDFieldTypes,\n config,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n variant,\n }) => {\n const isInput = variant === 'input'\n typeStringDefinitions.add(isInput ? SERIALIZED_UPLOAD_NODE_INPUT_TS : SERIALIZED_UPLOAD_NODE_TS)\n const { enabledCollectionSlugs } = props\n\n // Configured extra fields are registered as their own interface and referenced here, so the\n // generated TypeScript keeps them - the node-level `tsType` would otherwise erase `fields` to\n // `{ [k: string]: unknown }`. Mirrors how LinkFeature handles custom link fields.\n //\n // Each collection gets its own `SerializedUploadNode<'slug', Fields>` instantiation so the\n // generated union correctly pairs each `relationTo` with its own fields type. A single\n // `SerializedUploadNode<'a' | 'b', AFields | BFields>` would lose that pairing.\n const perCollectionTsTypes: string[] = []\n const collectionVariants: JSONSchema4[] = enabledCollectionSlugs.map((slug) => {\n const idType: 'number' | 'string' = collectionIDFieldTypes[slug] ?? 'string'\n const extraFields = props?.collections?.[slug]?.fields ?? []\n const flattenedExtra = flattenAllFields({ fields: extraFields })\n const extraFieldsSchema =\n flattenedExtra.length > 0 && config\n ? fieldsToJSONSchema({\n collectionIDFieldTypes,\n config,\n fields: flattenedExtra,\n i18n,\n interfaceNameDefinitions,\n typeStringDefinitions,\n variant,\n })\n : { properties: {}, required: [] }\n\n let fieldsSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: extraFieldsSchema.properties,\n required: extraFieldsSchema.required,\n }\n let fieldsTypeName: string | undefined\n if (flattenedExtra.length > 0) {\n fieldsTypeName = `LexicalUploadFields_${hashUploadFields(fieldsSchema)}`\n interfaceNameDefinitions.set(fieldsTypeName, fieldsSchema)\n fieldsSchema = { $ref: `#/$defs/${fieldsTypeName}` }\n }\n\n const uploadTsName = isInput ? 'SerializedUploadNodeInput' : 'SerializedUploadNode'\n perCollectionTsTypes.push(\n fieldsTypeName\n ? `${uploadTsName}<'${slug}', ${fieldsTypeName}>`\n : `${uploadTsName}<'${slug}'>`,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n id: { type: 'string' },\n type: { type: 'string', const: 'upload' },\n fields: fieldsSchema,\n format: formatSchema,\n relationTo: { type: 'string', const: slug },\n value: isInput\n ? { type: idType, description: 'The uploaded file ID.' }\n : {\n description:\n 'The uploaded file by ID (string or number). Populated to the full upload document when read at depth > 0.',\n oneOf: [{ type: idType }, { $ref: `#/$defs/${slug}` }],\n },\n version: versionSchema,\n },\n required: ['fields', 'format', 'id', 'relationTo', 'type', 'value'],\n }\n })\n\n let schema: JSONSchema4\n if (collectionVariants.length === 0) {\n // Fallback when no enabled upload collections.\n schema = {\n type: 'object',\n additionalProperties: true,\n properties: {\n type: { type: 'string', const: 'upload' },\n version: versionSchema,\n },\n required: ['type'],\n }\n } else {\n const baseSchema: JSONSchema4 =\n collectionVariants.length === 1 ? collectionVariants[0]! : { oneOf: collectionVariants }\n schema = { ...baseSchema, tsType: perCollectionTsTypes.join(' | ') }\n }\n\n return schema\n }\n"],"mappings":"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","ignoreList":[]}
@@ -45,7 +45,7 @@ export const uploadValidation = props => {
45
45
  fields: collection.fields,
46
46
  fieldSchemaMap: undefined,
47
47
  initialBlockData: node?.fields ?? {},
48
- operation: operation === 'create' || operation === 'update' ? operation : 'update',
48
+ operation,
49
49
  permissions: {},
50
50
  preferences,
51
51
  renderAllFields: false,
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","names":["fieldSchemasToFormState","isValidID","uploadValidation","props","node","validation","options","id","data","operation","preferences","req","payload","t","enabledCollectionSlugs","includes","relationTo","idType","collections","customIDType","db","defaultIDType","nodeID","value","Object","keys","length","collection","fields","result","collectionSlug","documentData","fieldSchemaMap","undefined","initialBlockData","permissions","renderAllFields","schemaPath","errorPathsSet","Set","fieldKey","fieldState","errorPaths","errorPath","add","Array","from","join"],"sources":["../../../../src/features/upload/server/validate.ts"],"sourcesContent":["import { fieldSchemasToFormState } from '@payloadcms/ui/forms/fieldSchemasToFormState'\nimport { isValidID } from 'payload'\n\nimport type { NodeValidation } from '../../typesServer.js'\nimport type { UploadFeatureServerProps } from './index.js'\nimport type { SerializedUploadNode } from './schema.js'\n\nexport const uploadValidation = (\n props: UploadFeatureServerProps,\n): NodeValidation<SerializedUploadNode> => {\n return async ({\n node,\n validation: {\n options: {\n id,\n data,\n operation,\n preferences,\n req,\n req: { payload, t },\n },\n },\n }) => {\n if (!props.enabledCollectionSlugs.includes(node.relationTo)) {\n return t('validation:invalidSelection')\n }\n\n const idType = payload.collections[node.relationTo]?.customIDType || payload.db.defaultIDType\n // @ts-expect-error - Fix in Payload v4\n const nodeID = node?.value?.id || node?.value // for backwards-compatibility\n\n if (!isValidID(nodeID, idType)) {\n return t('validation:validUploadID')\n }\n\n if (!props?.collections) {\n return true\n }\n\n if (Object.keys(props?.collections).length === 0) {\n return true\n }\n\n const collection = props?.collections[node.relationTo]\n\n if (!collection?.fields?.length) {\n return true\n }\n\n const result = await fieldSchemasToFormState({\n id,\n collectionSlug: node.relationTo,\n data: node?.fields ?? {},\n documentData: data,\n fields: collection.fields,\n fieldSchemaMap: undefined,\n initialBlockData: node?.fields ?? {},\n operation: operation === 'create' || operation === 'update' ? operation : 'update',\n permissions: {},\n preferences,\n renderAllFields: false,\n req,\n schemaPath: '',\n })\n\n const errorPathsSet = new Set<string>()\n for (const fieldKey in result) {\n const fieldState = result[fieldKey]\n if (fieldState?.errorPaths?.length) {\n for (const errorPath of fieldState.errorPaths) {\n errorPathsSet.add(errorPath)\n }\n }\n }\n const errorPaths = Array.from(errorPathsSet)\n\n if (errorPaths.length) {\n return 'The following fields are invalid: ' + errorPaths.join(', ')\n }\n\n return true\n }\n}\n"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ;AACxC,SAASC,SAAS,QAAQ;AAM1B,OAAO,MAAMC,gBAAA,GACXC,KAAA;EAEA,OAAO,OAAO;IACZC,IAAI;IACJC,UAAA,EAAY;MACVC,OAAA,EAAS;QACPC,EAAE;QACFC,IAAI;QACJC,SAAS;QACTC,WAAW;QACXC,GAAG;QACHA,GAAA,EAAK;UAAEC,OAAO;UAAEC;QAAC;MAAE;IACpB;EACF,CACF;IACC,IAAI,CAACV,KAAA,CAAMW,sBAAsB,CAACC,QAAQ,CAACX,IAAA,CAAKY,UAAU,GAAG;MAC3D,OAAOH,CAAA,CAAE;IACX;IAEA,MAAMI,MAAA,GAASL,OAAA,CAAQM,WAAW,CAACd,IAAA,CAAKY,UAAU,CAAC,EAAEG,YAAA,IAAgBP,OAAA,CAAQQ,EAAE,CAACC,aAAa;IAC7F;IACA,MAAMC,MAAA,GAASlB,IAAA,EAAMmB,KAAA,EAAOhB,EAAA,IAAMH,IAAA,EAAMmB,KAAA,CAAM;AAAA;IAE9C,IAAI,CAACtB,SAAA,CAAUqB,MAAA,EAAQL,MAAA,GAAS;MAC9B,OAAOJ,CAAA,CAAE;IACX;IAEA,IAAI,CAACV,KAAA,EAAOe,WAAA,EAAa;MACvB,OAAO;IACT;IAEA,IAAIM,MAAA,CAAOC,IAAI,CAACtB,KAAA,EAAOe,WAAA,EAAaQ,MAAM,KAAK,GAAG;MAChD,OAAO;IACT;IAEA,MAAMC,UAAA,GAAaxB,KAAA,EAAOe,WAAW,CAACd,IAAA,CAAKY,UAAU,CAAC;IAEtD,IAAI,CAACW,UAAA,EAAYC,MAAA,EAAQF,MAAA,EAAQ;MAC/B,OAAO;IACT;IAEA,MAAMG,MAAA,GAAS,MAAM7B,uBAAA,CAAwB;MAC3CO,EAAA;MACAuB,cAAA,EAAgB1B,IAAA,CAAKY,UAAU;MAC/BR,IAAA,EAAMJ,IAAA,EAAMwB,MAAA,IAAU,CAAC;MACvBG,YAAA,EAAcvB,IAAA;MACdoB,MAAA,EAAQD,UAAA,CAAWC,MAAM;MACzBI,cAAA,EAAgBC,SAAA;MAChBC,gBAAA,EAAkB9B,IAAA,EAAMwB,MAAA,IAAU,CAAC;MACnCnB,SAAA,EAAWA,SAAA,KAAc,YAAYA,SAAA,KAAc,WAAWA,SAAA,GAAY;MAC1E0B,WAAA,EAAa,CAAC;MACdzB,WAAA;MACA0B,eAAA,EAAiB;MACjBzB,GAAA;MACA0B,UAAA,EAAY;IACd;IAEA,MAAMC,aAAA,GAAgB,IAAIC,GAAA;IAC1B,KAAK,MAAMC,QAAA,IAAYX,MAAA,EAAQ;MAC7B,MAAMY,UAAA,GAAaZ,MAAM,CAACW,QAAA,CAAS;MACnC,IAAIC,UAAA,EAAYC,UAAA,EAAYhB,MAAA,EAAQ;QAClC,KAAK,MAAMiB,SAAA,IAAaF,UAAA,CAAWC,UAAU,EAAE;UAC7CJ,aAAA,CAAcM,GAAG,CAACD,SAAA;QACpB;MACF;IACF;IACA,MAAMD,UAAA,GAAaG,KAAA,CAAMC,IAAI,CAACR,aAAA;IAE9B,IAAII,UAAA,CAAWhB,MAAM,EAAE;MACrB,OAAO,uCAAuCgB,UAAA,CAAWK,IAAI,CAAC;IAChE;IAEA,OAAO;EACT;AACF","ignoreList":[]}
1
+ {"version":3,"file":"validate.js","names":["fieldSchemasToFormState","isValidID","uploadValidation","props","node","validation","options","id","data","operation","preferences","req","payload","t","enabledCollectionSlugs","includes","relationTo","idType","collections","customIDType","db","defaultIDType","nodeID","value","Object","keys","length","collection","fields","result","collectionSlug","documentData","fieldSchemaMap","undefined","initialBlockData","permissions","renderAllFields","schemaPath","errorPathsSet","Set","fieldKey","fieldState","errorPaths","errorPath","add","Array","from","join"],"sources":["../../../../src/features/upload/server/validate.ts"],"sourcesContent":["import { fieldSchemasToFormState } from '@payloadcms/ui/forms/fieldSchemasToFormState'\nimport { isValidID } from 'payload'\n\nimport type { NodeValidation } from '../../typesServer.js'\nimport type { UploadFeatureServerProps } from './index.js'\nimport type { SerializedUploadNode } from './schema.js'\n\nexport const uploadValidation = (\n props: UploadFeatureServerProps,\n): NodeValidation<SerializedUploadNode> => {\n return async ({\n node,\n validation: {\n options: {\n id,\n data,\n operation,\n preferences,\n req,\n req: { payload, t },\n },\n },\n }) => {\n if (!props.enabledCollectionSlugs.includes(node.relationTo)) {\n return t('validation:invalidSelection')\n }\n\n const idType = payload.collections[node.relationTo]?.customIDType || payload.db.defaultIDType\n // @ts-expect-error - Fix in Payload v4\n const nodeID = node?.value?.id || node?.value // for backwards-compatibility\n\n if (!isValidID(nodeID, idType)) {\n return t('validation:validUploadID')\n }\n\n if (!props?.collections) {\n return true\n }\n\n if (Object.keys(props?.collections).length === 0) {\n return true\n }\n\n const collection = props?.collections[node.relationTo]\n\n if (!collection?.fields?.length) {\n return true\n }\n\n const result = await fieldSchemasToFormState({\n id,\n collectionSlug: node.relationTo,\n data: node?.fields ?? {},\n documentData: data,\n fields: collection.fields,\n fieldSchemaMap: undefined,\n initialBlockData: node?.fields ?? {},\n operation,\n permissions: {},\n preferences,\n renderAllFields: false,\n req,\n schemaPath: '',\n })\n\n const errorPathsSet = new Set<string>()\n for (const fieldKey in result) {\n const fieldState = result[fieldKey]\n if (fieldState?.errorPaths?.length) {\n for (const errorPath of fieldState.errorPaths) {\n errorPathsSet.add(errorPath)\n }\n }\n }\n const errorPaths = Array.from(errorPathsSet)\n\n if (errorPaths.length) {\n return 'The following fields are invalid: ' + errorPaths.join(', ')\n }\n\n return true\n }\n}\n"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ;AACxC,SAASC,SAAS,QAAQ;AAM1B,OAAO,MAAMC,gBAAA,GACXC,KAAA;EAEA,OAAO,OAAO;IACZC,IAAI;IACJC,UAAA,EAAY;MACVC,OAAA,EAAS;QACPC,EAAE;QACFC,IAAI;QACJC,SAAS;QACTC,WAAW;QACXC,GAAG;QACHA,GAAA,EAAK;UAAEC,OAAO;UAAEC;QAAC;MAAE;IACpB;EACF,CACF;IACC,IAAI,CAACV,KAAA,CAAMW,sBAAsB,CAACC,QAAQ,CAACX,IAAA,CAAKY,UAAU,GAAG;MAC3D,OAAOH,CAAA,CAAE;IACX;IAEA,MAAMI,MAAA,GAASL,OAAA,CAAQM,WAAW,CAACd,IAAA,CAAKY,UAAU,CAAC,EAAEG,YAAA,IAAgBP,OAAA,CAAQQ,EAAE,CAACC,aAAa;IAC7F;IACA,MAAMC,MAAA,GAASlB,IAAA,EAAMmB,KAAA,EAAOhB,EAAA,IAAMH,IAAA,EAAMmB,KAAA,CAAM;AAAA;IAE9C,IAAI,CAACtB,SAAA,CAAUqB,MAAA,EAAQL,MAAA,GAAS;MAC9B,OAAOJ,CAAA,CAAE;IACX;IAEA,IAAI,CAACV,KAAA,EAAOe,WAAA,EAAa;MACvB,OAAO;IACT;IAEA,IAAIM,MAAA,CAAOC,IAAI,CAACtB,KAAA,EAAOe,WAAA,EAAaQ,MAAM,KAAK,GAAG;MAChD,OAAO;IACT;IAEA,MAAMC,UAAA,GAAaxB,KAAA,EAAOe,WAAW,CAACd,IAAA,CAAKY,UAAU,CAAC;IAEtD,IAAI,CAACW,UAAA,EAAYC,MAAA,EAAQF,MAAA,EAAQ;MAC/B,OAAO;IACT;IAEA,MAAMG,MAAA,GAAS,MAAM7B,uBAAA,CAAwB;MAC3CO,EAAA;MACAuB,cAAA,EAAgB1B,IAAA,CAAKY,UAAU;MAC/BR,IAAA,EAAMJ,IAAA,EAAMwB,MAAA,IAAU,CAAC;MACvBG,YAAA,EAAcvB,IAAA;MACdoB,MAAA,EAAQD,UAAA,CAAWC,MAAM;MACzBI,cAAA,EAAgBC,SAAA;MAChBC,gBAAA,EAAkB9B,IAAA,EAAMwB,MAAA,IAAU,CAAC;MACnCnB,SAAA;MACA0B,WAAA,EAAa,CAAC;MACdzB,WAAA;MACA0B,eAAA,EAAiB;MACjBzB,GAAA;MACA0B,UAAA,EAAY;IACd;IAEA,MAAMC,aAAA,GAAgB,IAAIC,GAAA;IAC1B,KAAK,MAAMC,QAAA,IAAYX,MAAA,EAAQ;MAC7B,MAAMY,UAAA,GAAaZ,MAAM,CAACW,QAAA,CAAS;MACnC,IAAIC,UAAA,EAAYC,UAAA,EAAYhB,MAAA,EAAQ;QAClC,KAAK,MAAMiB,SAAA,IAAaF,UAAA,CAAWC,UAAU,EAAE;UAC7CJ,aAAA,CAAcM,GAAG,CAACD,SAAA;QACpB;MACF;IACF;IACA,MAAMD,UAAA,GAAaG,KAAA,CAAMC,IAAI,CAACR,aAAA;IAE9B,IAAII,UAAA,CAAWhB,MAAM,EAAE;MACrB,OAAO,uCAAuCgB,UAAA,CAAWK,IAAI,CAAC;IAChE;IAEA,OAAO;EACT;AACF","ignoreList":[]}
@@ -9,7 +9,6 @@
9
9
  border-radius: var(--radius-medium);
10
10
  position: relative;
11
11
  z-index: 2;
12
- font-family: var(--text-body-medium-font-family);
13
12
  font-size: var(--text-body-medium-font-size);
14
13
  font-weight: var(--text-body-medium-font-weight);
15
14
  line-height: var(--text-body-medium-line-height);
@@ -8,7 +8,6 @@
8
8
  border-radius: var(--radius-medium);
9
9
  border: var(--stroke-width-small) solid var(--color-border);
10
10
  position: relative;
11
- font-family: var(--font-body);
12
11
  margin-block: calc(var(--spacer-1) * 2.5);
13
12
  max-height: calc(var(--spacer-5) * 2.5);
14
13
  padding: calc(var(--spacer-1) * 1.25);
@@ -11,7 +11,6 @@
11
11
  outline-offset: calc(var(--stroke-width-small) * -1);
12
12
  position: relative;
13
13
  z-index: 2;
14
- font-family: var(--text-body-medium-font-family);
15
14
  padding: var(--spacer-2);
16
15
 
17
16
  &[data-match-type='create'] {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["File","createHash","formatFilesize","React","baseClass","UploadDiffHTMLConverterAsync","i18n","req","upload","node","populate","providedCSSString","uploadNode","uploadDoc","undefined","value","id","collectionSlug","relationTo","alt","fields","thumbnailSRC","thumbnailURL","url","ReactDOMServer","default","nodeFieldsHash","update","JSON","stringify","digest","filename","t","JSX","_jsx","className","_jsxs","length","src","filesize","width","height","Fragment","mimeType","html","renderToStaticMarkup"],"sources":["../../../../../src/field/Diff/converters/upload/index.tsx"],"sourcesContent":["import type { FileData, PayloadRequest, TypeWithID } from 'payload'\n\nimport { type I18nClient } from '@payloadcms/translations'\nimport { File } from '@payloadcms/ui/rsc'\nimport { createHash } from 'crypto'\n\nimport './index.css'\n\nimport { formatFilesize } from 'payload/shared'\nimport React from 'react'\n\nimport type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js'\nimport type { UploadDataImproved } from '../../../../features/upload/server/schema.js'\nimport type { SerializedUploadNode } from '../../../../types/nodeTypes.js'\n\nconst baseClass = 'lexical-upload-diff'\n\nexport const UploadDiffHTMLConverterAsync: (args: {\n i18n: I18nClient\n req: PayloadRequest\n}) => HTMLConvertersAsync<SerializedUploadNode> = ({ i18n, req }) => {\n return {\n upload: async ({ node, populate, providedCSSString }) => {\n const uploadNode = node as UploadDataImproved\n\n let uploadDoc: (FileData & TypeWithID) | undefined = undefined\n\n // If there's no valid upload data, populate return an empty string\n if (typeof uploadNode.value !== 'object') {\n if (!populate) {\n return ''\n }\n uploadDoc = await populate<FileData & TypeWithID>({\n id: uploadNode.value,\n collectionSlug: uploadNode.relationTo,\n })\n } else {\n uploadDoc = uploadNode.value as unknown as FileData & TypeWithID\n }\n\n if (!uploadDoc) {\n return ''\n }\n\n const alt = (node.fields?.alt as string) || (uploadDoc as { alt?: string })?.alt || ''\n\n const thumbnailSRC: string =\n ('thumbnailURL' in uploadDoc && (uploadDoc?.thumbnailURL as string)) || uploadDoc?.url || ''\n\n const ReactDOMServer = (await import('react-dom/server')).default\n\n // hash fields to ensure they are diffed if they change\n const nodeFieldsHash = createHash('sha256')\n .update(JSON.stringify(node.fields ?? {}))\n .digest('hex')\n\n const filename =\n uploadDoc?.filename ||\n `${i18n.t('general:untitled')} - ID: ${typeof uploadNode.value === 'object' ? uploadNode.value : uploadNode.value}`\n\n const JSX = (\n <div\n className={`${baseClass}${providedCSSString}`}\n data-enable-match=\"true\"\n data-fields-hash={`${nodeFieldsHash}`}\n data-filename={uploadDoc?.filename}\n data-lexical-upload-id={uploadNode.value}\n data-lexical-upload-relation-to={uploadNode.relationTo}\n data-src={thumbnailSRC}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC?.length ? <img alt={alt} src={thumbnailSRC} /> : <File />}\n </div>\n <div className={`${baseClass}__info`} data-enable-match=\"false\">\n <strong>{filename}</strong>\n <div className={`${baseClass}__meta`}>\n {formatFilesize(uploadDoc?.filesize)}\n {typeof uploadDoc?.width === 'number' && typeof uploadDoc?.height === 'number' && (\n <React.Fragment>\n &nbsp;-&nbsp;\n {uploadDoc?.width}x{uploadDoc?.height}\n </React.Fragment>\n )}\n {uploadDoc?.mimeType && (\n <React.Fragment>\n &nbsp;-&nbsp;\n {uploadDoc?.mimeType}\n </React.Fragment>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n\n // Render to HTML\n const html = ReactDOMServer.renderToStaticMarkup(JSX)\n\n return html\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["File","createHash","formatFilesize","React","baseClass","UploadDiffHTMLConverterAsync","i18n","req","upload","node","populate","providedCSSString","uploadNode","uploadDoc","undefined","value","id","collectionSlug","relationTo","alt","fields","thumbnailSRC","thumbnailURL","url","ReactDOMServer","default","nodeFieldsHash","update","JSON","stringify","digest","filename","t","JSX","_jsx","className","_jsxs","length","src","filesize","width","height","Fragment","mimeType","html","renderToStaticMarkup"],"sources":["../../../../../src/field/Diff/converters/upload/index.tsx"],"sourcesContent":["import type { FileData, PayloadRequest, TypeWithID } from 'payload'\n\nimport { type I18nClient } from '@payloadcms/translations'\nimport { File } from '@payloadcms/ui/rsc'\nimport { createHash } from 'crypto'\n\nimport './index.css'\n\nimport { formatFilesize } from 'payload/shared'\nimport React from 'react'\n\nimport type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js'\nimport type { UploadData } from '../../../../features/upload/server/schema.js'\nimport type { SerializedUploadNode } from '../../../../types/nodeTypes.js'\n\nconst baseClass = 'lexical-upload-diff'\n\nexport const UploadDiffHTMLConverterAsync: (args: {\n i18n: I18nClient\n req: PayloadRequest\n}) => HTMLConvertersAsync<SerializedUploadNode> = ({ i18n, req }) => {\n return {\n upload: async ({ node, populate, providedCSSString }) => {\n const uploadNode = node as UploadData\n\n let uploadDoc: (FileData & TypeWithID) | undefined = undefined\n\n // If there's no valid upload data, populate return an empty string\n if (typeof uploadNode.value !== 'object') {\n if (!populate) {\n return ''\n }\n uploadDoc = await populate<FileData & TypeWithID>({\n id: uploadNode.value,\n collectionSlug: uploadNode.relationTo,\n })\n } else {\n uploadDoc = uploadNode.value as unknown as FileData & TypeWithID\n }\n\n if (!uploadDoc) {\n return ''\n }\n\n const alt = (node.fields?.alt as string) || (uploadDoc as { alt?: string })?.alt || ''\n\n const thumbnailSRC: string =\n ('thumbnailURL' in uploadDoc && (uploadDoc?.thumbnailURL as string)) || uploadDoc?.url || ''\n\n const ReactDOMServer = (await import('react-dom/server')).default\n\n // hash fields to ensure they are diffed if they change\n const nodeFieldsHash = createHash('sha256')\n .update(JSON.stringify(node.fields ?? {}))\n .digest('hex')\n\n const filename =\n uploadDoc?.filename ||\n `${i18n.t('general:untitled')} - ID: ${typeof uploadNode.value === 'object' ? uploadNode.value : uploadNode.value}`\n\n const JSX = (\n <div\n className={`${baseClass}${providedCSSString}`}\n data-enable-match=\"true\"\n data-fields-hash={`${nodeFieldsHash}`}\n data-filename={uploadDoc?.filename}\n data-lexical-upload-id={uploadNode.value}\n data-lexical-upload-relation-to={uploadNode.relationTo}\n data-src={thumbnailSRC}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC?.length ? <img alt={alt} src={thumbnailSRC} /> : <File />}\n </div>\n <div className={`${baseClass}__info`} data-enable-match=\"false\">\n <strong>{filename}</strong>\n <div className={`${baseClass}__meta`}>\n {formatFilesize(uploadDoc?.filesize)}\n {typeof uploadDoc?.width === 'number' && typeof uploadDoc?.height === 'number' && (\n <React.Fragment>\n &nbsp;-&nbsp;\n {uploadDoc?.width}x{uploadDoc?.height}\n </React.Fragment>\n )}\n {uploadDoc?.mimeType && (\n <React.Fragment>\n &nbsp;-&nbsp;\n {uploadDoc?.mimeType}\n </React.Fragment>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n\n // Render to HTML\n const html = ReactDOMServer.renderToStaticMarkup(JSX)\n\n return html\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,17 +1,16 @@
1
1
  @layer payload-default {
2
2
  .lexical-diff .field-diff-content {
3
3
  .html-diff {
4
- font-family: var(--text-body-medium-font-family);
5
- font-size: var(--text-body-medium-font-size);
6
- font-weight: var(--text-body-medium-font-weight);
7
- line-height: var(--text-body-medium-line-height);
8
- letter-spacing: var(--text-body-medium-letter-spacing);
4
+ font-size: var(--text-body-large-font-size);
5
+ font-weight: var(--text-body-large-font-weight);
6
+ line-height: var(--text-body-large-line-height);
7
+ letter-spacing: -0.0325px;
9
8
  }
10
9
 
11
10
  blockquote {
12
- font-size: var(--text-body-medium-font-size);
13
- line-height: var(--text-body-medium-line-height);
14
- letter-spacing: var(--text-body-medium-letter-spacing);
11
+ font-size: var(--text-body-large-font-size);
12
+ line-height: 1.5;
13
+ letter-spacing: normal;
15
14
  margin-inline: var(--spacer-1);
16
15
  padding-inline-start: var(--spacer-2-5);
17
16
  padding-block: var(--spacer-1);
@@ -40,26 +39,32 @@
40
39
  h6 {
41
40
  font-weight: 550;
42
41
  line-height: 1.2;
43
- letter-spacing: -0.017em;
44
42
  }
45
43
 
46
44
  h1 {
47
- font-size: 1.5rem;
45
+ font-size: 2rem;
46
+ letter-spacing: -0.544px;
48
47
  }
49
48
  h2 {
50
- font-size: 1.25rem;
49
+ font-size: 1.5rem;
50
+ line-height: 2rem;
51
+ letter-spacing: var(--text-heading-large-letter-spacing);
51
52
  }
52
53
  h3 {
53
- font-size: 1.125rem;
54
+ font-size: 1.25rem;
55
+ letter-spacing: -0.34px;
54
56
  }
55
57
  h4 {
56
58
  font-size: 1rem;
59
+ letter-spacing: -0.272px;
57
60
  }
58
61
  h5 {
59
- font-size: 0.875rem;
62
+ font-size: 0.8125rem;
63
+ letter-spacing: -0.221px;
60
64
  }
61
65
  h6 {
62
- font-size: 0.75rem;
66
+ font-size: 0.6875rem;
67
+ letter-spacing: -0.187px;
63
68
  }
64
69
 
65
70
  > .html-diff > :first-child {
@@ -113,11 +118,7 @@
113
118
  }
114
119
 
115
120
  li {
116
- font-family: var(--text-body-medium-font-family);
117
- font-size: var(--text-body-medium-font-size);
118
- font-weight: var(--text-body-medium-font-weight);
119
- line-height: var(--text-body-medium-line-height);
120
- letter-spacing: var(--text-body-medium-letter-spacing);
121
+ font-size: var(--text-body-large-font-size);
121
122
  margin-block: 0 var(--spacer-1);
122
123
  margin-inline-start: var(--spacer-4);
123
124
  position: relative;
@@ -1,5 +1,6 @@
1
- import type { RichTextFieldDiffServerComponent } from 'payload';
1
+ import type { RichTextFieldDiffServerProps } from 'payload';
2
2
  import './index.css';
3
3
  import '../bundled.css';
4
- export declare const LexicalDiffComponent: RichTextFieldDiffServerComponent;
4
+ import React from 'react';
5
+ export declare const LexicalDiffComponent: React.FC<RichTextFieldDiffServerProps>;
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/field/Diff/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,SAAS,CAAA;AAI/D,OAAO,aAAa,CAAA;AACpB,OAAO,gBAAgB,CAAA;AAqBvB,eAAO,MAAM,oBAAoB,EAAE,gCAkGlC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/field/Diff/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAI3D,OAAO,aAAa,CAAA;AACpB,OAAO,gBAAgB,CAAA;AAGvB,OAAO,KAAK,MAAM,OAAO,CAAA;AAkBzB,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA0FvE,CAAA"}
@@ -14,13 +14,13 @@ import { UploadDiffHTMLConverterAsync } from './converters/upload/index.js';
14
14
  const baseClass = 'lexical-diff';
15
15
  export const LexicalDiffComponent = async args => {
16
16
  const {
17
- comparisonValue: valueFrom,
18
17
  field,
19
18
  i18n,
20
19
  locale,
21
20
  nestingLevel,
22
21
  req,
23
- versionValue: valueTo
22
+ valueFrom,
23
+ valueTo
24
24
  } = args;
25
25
  const internalDocToHref = async ({
26
26
  linkNode,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["FieldDiffContainer","getHTMLDiffComponents","formatAdminURL","React","convertLexicalToHTMLAsync","getPayloadPopulateFn","LinkDiffHTMLConverterAsync","ListItemDiffHTMLConverterAsync","RelationshipDiffHTMLConverterAsync","UnknownDiffHTMLConverterAsync","UploadDiffHTMLConverterAsync","baseClass","LexicalDiffComponent","args","comparisonValue","valueFrom","field","i18n","locale","nestingLevel","req","versionValue","valueTo","internalDocToHref","linkNode","populate","fields","doc","relationTo","value","docId","id","collectionSlug","adminRoute","payload","config","routes","admin","path","serverURL","converters","defaultConverters","payloadPopulateFn","currentDepth","depth","overrideAccess","fromHTML","data","disableContainer","toHTML","From","To","length","_jsx","className","label"],"sources":["../../../src/field/Diff/index.tsx"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\nimport type { RichTextFieldDiffServerComponent } from 'payload'\n\nimport { FieldDiffContainer, getHTMLDiffComponents } from '@payloadcms/ui/rsc'\n\nimport './index.css'\nimport '../bundled.css'\n\nimport { formatAdminURL } from 'payload/shared'\nimport React from 'react'\n\nimport type {\n HTMLConvertersFunctionAsync,\n HTMLPopulateFn,\n} from '../../features/converters/lexicalToHtml/async/types.js'\nimport type { SerializedLinkNode } from '../../types/nodeTypes.js'\n\nimport { convertLexicalToHTMLAsync } from '../../features/converters/lexicalToHtml/async/index.js'\nimport { getPayloadPopulateFn } from '../../features/converters/utilities/payloadPopulateFn.js'\nimport { LinkDiffHTMLConverterAsync } from './converters/link.js'\nimport { ListItemDiffHTMLConverterAsync } from './converters/listitem/index.js'\nimport { RelationshipDiffHTMLConverterAsync } from './converters/relationship/index.js'\nimport { UnknownDiffHTMLConverterAsync } from './converters/unknown/index.js'\nimport { UploadDiffHTMLConverterAsync } from './converters/upload/index.js'\n\nconst baseClass = 'lexical-diff'\n\nexport const LexicalDiffComponent: RichTextFieldDiffServerComponent = async (args) => {\n const {\n comparisonValue: valueFrom,\n field,\n i18n,\n locale,\n nestingLevel,\n req,\n versionValue: valueTo,\n } = args\n\n const internalDocToHref = async ({\n linkNode,\n populate,\n }: {\n linkNode: SerializedLinkNode\n populate?: HTMLPopulateFn\n }) => {\n if (!linkNode.fields.doc) {\n return '#'\n }\n\n const { relationTo, value } = linkNode.fields.doc\n\n let docId: number | string\n\n if (typeof value === 'object' && value !== null) {\n docId = value.id\n } else if (populate && typeof value !== 'object') {\n const doc = await populate({\n id: value,\n collectionSlug: relationTo,\n })\n\n if (!doc || !doc.id) {\n return '#'\n }\n\n docId = doc.id\n } else {\n docId = value\n }\n\n return formatAdminURL({\n adminRoute: req.payload.config.routes.admin,\n path: `/collections/${relationTo}/${docId}`,\n serverURL: req.payload.config.serverURL,\n })\n }\n\n const converters: HTMLConvertersFunctionAsync = ({ defaultConverters }) => ({\n ...defaultConverters,\n ...LinkDiffHTMLConverterAsync({ internalDocToHref }),\n ...ListItemDiffHTMLConverterAsync,\n ...UploadDiffHTMLConverterAsync({ i18n, req }),\n ...RelationshipDiffHTMLConverterAsync({ i18n, req }),\n ...UnknownDiffHTMLConverterAsync({ i18n, req }),\n })\n\n const payloadPopulateFn = await getPayloadPopulateFn({\n currentDepth: 0,\n depth: 1,\n overrideAccess: false,\n req,\n })\n const fromHTML = await convertLexicalToHTMLAsync({\n converters,\n data: valueFrom as SerializedEditorState,\n disableContainer: true,\n populate: payloadPopulateFn,\n })\n\n const toHTML = await convertLexicalToHTMLAsync({\n converters,\n data: valueTo as SerializedEditorState,\n disableContainer: true,\n populate: payloadPopulateFn,\n })\n\n const { From, To } = getHTMLDiffComponents({\n // Ensure empty paragraph is displayed for empty rich text fields - otherwise, toHTML may be displayed in the wrong column\n fromHTML: fromHTML?.length ? fromHTML : '<p></p>',\n toHTML: toHTML?.length ? toHTML : '<p></p>',\n })\n\n return (\n <FieldDiffContainer\n className={baseClass}\n From={From}\n i18n={i18n}\n label={{\n label: field.label,\n locale,\n }}\n nestingLevel={nestingLevel}\n To={To}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["FieldDiffContainer","getHTMLDiffComponents","formatAdminURL","React","convertLexicalToHTMLAsync","getPayloadPopulateFn","LinkDiffHTMLConverterAsync","ListItemDiffHTMLConverterAsync","RelationshipDiffHTMLConverterAsync","UnknownDiffHTMLConverterAsync","UploadDiffHTMLConverterAsync","baseClass","LexicalDiffComponent","args","field","i18n","locale","nestingLevel","req","valueFrom","valueTo","internalDocToHref","linkNode","populate","fields","doc","relationTo","value","docId","id","collectionSlug","adminRoute","payload","config","routes","admin","path","serverURL","converters","defaultConverters","payloadPopulateFn","currentDepth","depth","overrideAccess","fromHTML","data","disableContainer","toHTML","From","To","length","_jsx","className","label"],"sources":["../../../src/field/Diff/index.tsx"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\nimport type { RichTextFieldDiffServerProps } from 'payload'\n\nimport { FieldDiffContainer, getHTMLDiffComponents } from '@payloadcms/ui/rsc'\n\nimport './index.css'\nimport '../bundled.css'\n\nimport { formatAdminURL } from 'payload/shared'\nimport React from 'react'\n\nimport type {\n HTMLConvertersFunctionAsync,\n HTMLPopulateFn,\n} from '../../features/converters/lexicalToHtml/async/types.js'\nimport type { SerializedLinkNode } from '../../types/nodeTypes.js'\n\nimport { convertLexicalToHTMLAsync } from '../../features/converters/lexicalToHtml/async/index.js'\nimport { getPayloadPopulateFn } from '../../features/converters/utilities/payloadPopulateFn.js'\nimport { LinkDiffHTMLConverterAsync } from './converters/link.js'\nimport { ListItemDiffHTMLConverterAsync } from './converters/listitem/index.js'\nimport { RelationshipDiffHTMLConverterAsync } from './converters/relationship/index.js'\nimport { UnknownDiffHTMLConverterAsync } from './converters/unknown/index.js'\nimport { UploadDiffHTMLConverterAsync } from './converters/upload/index.js'\n\nconst baseClass = 'lexical-diff'\n\nexport const LexicalDiffComponent: React.FC<RichTextFieldDiffServerProps> = async (args) => {\n const { field, i18n, locale, nestingLevel, req, valueFrom, valueTo } = args\n\n const internalDocToHref = async ({\n linkNode,\n populate,\n }: {\n linkNode: SerializedLinkNode\n populate?: HTMLPopulateFn\n }) => {\n if (!linkNode.fields.doc) {\n return '#'\n }\n\n const { relationTo, value } = linkNode.fields.doc\n\n let docId: number | string\n\n if (typeof value === 'object' && value !== null) {\n docId = value.id\n } else if (populate && typeof value !== 'object') {\n const doc = await populate({\n id: value,\n collectionSlug: relationTo,\n })\n\n if (!doc || !doc.id) {\n return '#'\n }\n\n docId = doc.id\n } else {\n docId = value\n }\n\n return formatAdminURL({\n adminRoute: req.payload.config.routes.admin,\n path: `/collections/${relationTo}/${docId}`,\n serverURL: req.payload.config.serverURL,\n })\n }\n\n const converters: HTMLConvertersFunctionAsync = ({ defaultConverters }) => ({\n ...defaultConverters,\n ...LinkDiffHTMLConverterAsync({ internalDocToHref }),\n ...ListItemDiffHTMLConverterAsync,\n ...UploadDiffHTMLConverterAsync({ i18n, req }),\n ...RelationshipDiffHTMLConverterAsync({ i18n, req }),\n ...UnknownDiffHTMLConverterAsync({ i18n, req }),\n })\n\n const payloadPopulateFn = await getPayloadPopulateFn({\n currentDepth: 0,\n depth: 1,\n overrideAccess: false,\n req,\n })\n const fromHTML = await convertLexicalToHTMLAsync({\n converters,\n data: valueFrom as SerializedEditorState,\n disableContainer: true,\n populate: payloadPopulateFn,\n })\n\n const toHTML = await convertLexicalToHTMLAsync({\n converters,\n data: valueTo as SerializedEditorState,\n disableContainer: true,\n populate: payloadPopulateFn,\n })\n\n const { From, To } = getHTMLDiffComponents({\n // Ensure empty paragraph is displayed for empty rich text fields - otherwise, toHTML may be displayed in the wrong column\n fromHTML: fromHTML?.length ? fromHTML : '<p></p>',\n toHTML: toHTML?.length ? toHTML : '<p></p>',\n })\n\n return (\n <FieldDiffContainer\n className={baseClass}\n From={From}\n i18n={i18n}\n label={{\n label: field.label,\n locale,\n }}\n nestingLevel={nestingLevel}\n To={To}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/field/Field.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAGxE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAE7E,OAAO,kCAAkC,CAAA;AACzC,OAAO,eAAe,CAAA;AACtB,OAAO,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AASlE,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAC/B;IACE,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAA;CACnD,GAAG,yBAAyB,CAyM9B,CAAA;AAWD,eAAO,MAAM,QAAQ,EAAE,OAAO,iBAAqC,CAAA"}
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/field/Field.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAGxE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAE7E,OAAO,kCAAkC,CAAA;AACzC,OAAO,eAAe,CAAA;AACtB,OAAO,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AASlE,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAC/B;IACE,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAA;CACnD,GAAG,yBAAyB,CAmN9B,CAAA;AAWD,eAAO,MAAM,QAAQ,EAAE,OAAO,iBAAqC,CAAA"}
@@ -1,7 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- import { BulkUploadProvider, FieldDescription, FieldError, FieldLabel, isFieldRTL, RenderCustomComponent, useConfig, useEditDepth, useEffectEvent, useField, useLocale } from '@payloadcms/ui';
4
+ import { getTranslation } from '@payloadcms/translations';
5
+ import { BulkUploadProvider, FieldDescription, FieldError, FieldLabel, isFieldRTL, RenderCustomComponent, useConfig, useEditDepth, useEffectEvent, useField, useLocale, useTranslation } from '@payloadcms/ui';
5
6
  import { mergeFieldStyles } from '@payloadcms/ui/shared';
6
7
  import { dequal } from 'dequal/lite';
7
8
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
@@ -33,6 +34,9 @@ const RichTextComponent = props => {
33
34
  schemaPath,
34
35
  validate
35
36
  } = props;
37
+ const {
38
+ i18n
39
+ } = useTranslation();
36
40
  const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin;
37
41
  const locale = useLocale();
38
42
  const {
@@ -137,14 +141,17 @@ const RichTextComponent = props => {
137
141
  }
138
142
  }, [initialValue]);
139
143
  return /*#__PURE__*/_jsxs("div", {
144
+ "aria-label": getTranslation(label || '', i18n),
140
145
  className: classes,
141
146
  "data-field-path": path,
142
147
  "data-field-schemapath": schemaPath,
143
148
  "data-lexical-view": editorConfig?.view,
149
+ role: "group",
144
150
  style: styles,
145
151
  children: [/*#__PURE__*/_jsxs("div", {
146
152
  className: `${baseClass}__label-row`,
147
153
  children: [Label || /*#__PURE__*/_jsx(FieldLabel, {
154
+ hasRequiredAccessibleState: true,
148
155
  label: label,
149
156
  localized: localized,
150
157
  path: path,
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","names":["BulkUploadProvider","FieldDescription","FieldError","FieldLabel","isFieldRTL","RenderCustomComponent","useConfig","useEditDepth","useEffectEvent","useField","useLocale","mergeFieldStyles","dequal","React","useCallback","useEffect","useMemo","useState","ErrorBoundary","LexicalProvider","useRunDeprioritized","useRichTextView","ViewSelector","baseClass","RichTextComponent","props","editorConfig","field","admin","className","description","readOnly","readOnlyFromAdmin","label","localized","required","path","pathFromProps","readOnlyFromTopLevelProps","schemaPath","validate","readOnlyFromProps","locale","config","localization","localizationConfig","rtl","fieldLocalized","undefined","editDepth","isControlledByParent","memoizedValidate","value","validationOptions","customComponents","AfterInput","BeforeInput","Description","Error","Error1","Label","disabled","disabledFromField","initialValue","setValue","showError","potentiallyStalePath","isSmallWidthViewport","setIsSmallWidthViewport","rerenderProviderKey","setRerenderProviderKey","prevInitialValueRef","useRef","prevValueRef","updateViewPortWidth","isNextSmallWidthViewport","window","matchMedia","matches","addEventListener","removeEventListener","classes","hideGutter","filter","Boolean","join","pathWithEditDepth","runDeprioritized","handleChange","editorState","updateFieldValue","newState","toJSON","current","styles","handleInitialValueChange","JSON","parse","stringify","Date","Object","is","_jsxs","view","style","_jsx","CustomComponent","Fallback","fallbackRender","onReset","modalSlugPrefix","composerKey","fieldProps","onChange","error","role","color","message","String","RichText"],"sources":["../../src/field/Field.tsx"],"sourcesContent":["'use client'\nimport type { EditorState, SerializedEditorState } from 'lexical'\nimport type { FallbackProps } from 'react-error-boundary'\n\nimport {\n BulkUploadProvider,\n FieldDescription,\n FieldError,\n FieldLabel,\n isFieldRTL,\n RenderCustomComponent,\n useConfig,\n useEditDepth,\n useEffectEvent,\n useField,\n useLocale,\n} from '@payloadcms/ui'\nimport { mergeFieldStyles } from '@payloadcms/ui/shared'\nimport { dequal } from 'dequal/lite'\nimport { type Validate } from 'payload'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\n\nimport '../lexical/theme/EditorTheme.css'\nimport './bundled.css'\nimport './index.css'\n\nimport type { LexicalRichTextFieldProps } from '../types/index.js'\n\nimport { LexicalProvider } from '../lexical/LexicalProvider.js'\nimport { useRunDeprioritized } from '../utilities/useRunDeprioritized.js'\nimport { useRichTextView } from './RichTextViewProvider.js'\nimport { ViewSelector } from './ViewSelector.js'\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 admin: { className, description, readOnly: readOnlyFromAdmin } = {},\n label,\n localized,\n required,\n },\n path: pathFromProps,\n readOnly: readOnlyFromTopLevelProps,\n schemaPath,\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\n const locale = useLocale()\n const {\n config: { localization: localizationConfig },\n } = useConfig()\n\n const rtl = isFieldRTL({\n fieldLocalized: localized,\n locale,\n localizationConfig: localizationConfig || undefined,\n })\n\n const editDepth = useEditDepth()\n const { isControlledByParent } = useRichTextView()\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 disabled: disabledFromField,\n initialValue,\n path,\n setValue,\n showError,\n value,\n } = useField<SerializedEditorState>({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || disabledFromField\n\n const [isSmallWidthViewport, setIsSmallWidthViewport] = useState<boolean>(false)\n const [rerenderProviderKey, setRerenderProviderKey] = useState<Date>()\n\n const prevInitialValueRef = React.useRef<SerializedEditorState | undefined>(initialValue)\n const prevValueRef = React.useRef<SerializedEditorState | undefined>(value)\n\n useEffect(() => {\n const updateViewPortWidth = () => {\n const isNextSmallWidthViewport = window.matchMedia('(max-width: 768px)').matches\n\n if (isNextSmallWidthViewport !== isSmallWidthViewport) {\n setIsSmallWidthViewport(isNextSmallWidthViewport)\n }\n }\n updateViewPortWidth()\n window.addEventListener('resize', updateViewPortWidth)\n\n return () => {\n window.removeEventListener('resize', updateViewPortWidth)\n }\n }, [isSmallWidthViewport])\n\n const classes = [\n 'field-type',\n baseClass,\n className,\n showError && 'error',\n disabled && `${baseClass}--read-only`,\n editorConfig?.admin?.hideGutter !== true && !isSmallWidthViewport\n ? `${baseClass}--show-gutter`\n : null,\n ]\n .filter(Boolean)\n .join(' ')\n\n const pathWithEditDepth = `${path}.${editDepth}`\n\n const runDeprioritized = useRunDeprioritized() // defaults to 500 ms timeout\n\n const handleChange = useCallback(\n (editorState: EditorState) => {\n // Capture `editorState` in the closure so we can safely run later.\n const updateFieldValue = () => {\n const newState = editorState.toJSON()\n prevValueRef.current = newState\n setValue(newState)\n }\n\n // Queue the update for the browser’s idle time (or Safari shim)\n // and let the hook handle debouncing/cancellation.\n void runDeprioritized(updateFieldValue)\n },\n [setValue, runDeprioritized], // `runDeprioritized` is stable (useCallback inside hook)\n )\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n const handleInitialValueChange = useEffectEvent(\n (initialValue: SerializedEditorState | undefined) => {\n // Object deep equality check here, as re-mounting the editor if\n // the new value is the same as the old one is not necessary.\n // In postgres, the order of keys in JSON objects is not guaranteed to be preserved,\n // so we need to do a deep equality check here that does not care about key order => we use dequal.\n // If we used JSON.stringify, the editor would re-mount every time you save the document, as the order of keys changes => change detected => re-mount.\n if (\n prevValueRef.current !== value &&\n !dequal(\n prevValueRef.current != null\n ? JSON.parse(JSON.stringify(prevValueRef.current))\n : prevValueRef.current,\n value,\n )\n ) {\n prevInitialValueRef.current = initialValue\n prevValueRef.current = value\n setRerenderProviderKey(new Date())\n }\n },\n )\n\n useEffect(() => {\n // Needs to trigger for object reference changes - otherwise,\n // reacting to the same initial value change twice will cause\n // the second change to be ignored, even though the value has changed.\n // That's because initialValue is not kept up-to-date\n if (!Object.is(initialValue, prevInitialValueRef.current)) {\n handleInitialValueChange(initialValue)\n }\n }, [initialValue])\n\n return (\n <div\n className={classes}\n data-field-path={path}\n data-field-schemapath={schemaPath}\n data-lexical-view={editorConfig?.view}\n key={pathWithEditDepth}\n style={styles}\n >\n <div className={`${baseClass}__label-row`}>\n {Label || (\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n )}\n {!isControlledByParent && <ViewSelector />}\n </div>\n <div className={`${baseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n <ErrorBoundary fallbackRender={fallbackRender} onReset={() => {}}>\n {BeforeInput}\n <div className={`${baseClass}__editor-content`}>\n {/* Lexical may be in a drawer. We need to define another BulkUploadProvider to ensure that the bulk upload drawer\n is rendered in the correct depth (not displayed *behind* the current drawer).\n The `lexical-` prefix prevents drawer-slug collisions with non-lexical `BulkUploadProvider`s up the tree. */}\n <BulkUploadProvider modalSlugPrefix={`lexical-${path}`}>\n <LexicalProvider\n composerKey={pathWithEditDepth}\n editorConfig={editorConfig}\n fieldProps={props}\n isSmallWidthViewport={isSmallWidthViewport}\n key={JSON.stringify({ path, rerenderProviderKey })} // 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 rtl={rtl}\n value={value}\n />\n </BulkUploadProvider>\n </div>\n {AfterInput}\n </ErrorBoundary>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n </div>\n )\n}\n\nfunction fallbackRender({ error }: FallbackProps) {\n return (\n <div className=\"errorBoundary\" role=\"alert\">\n <p>Something went wrong:</p>\n <pre style={{ color: 'red' }}>{error instanceof Error ? error.message : String(error)}</pre>\n </div>\n )\n}\n\nexport const RichText: typeof RichTextComponent = RichTextComponent\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Field.js","names":["getTranslation","BulkUploadProvider","FieldDescription","FieldError","FieldLabel","isFieldRTL","RenderCustomComponent","useConfig","useEditDepth","useEffectEvent","useField","useLocale","useTranslation","mergeFieldStyles","dequal","React","useCallback","useEffect","useMemo","useState","ErrorBoundary","LexicalProvider","useRunDeprioritized","useRichTextView","ViewSelector","baseClass","RichTextComponent","props","editorConfig","field","admin","className","description","readOnly","readOnlyFromAdmin","label","localized","required","path","pathFromProps","readOnlyFromTopLevelProps","schemaPath","validate","i18n","readOnlyFromProps","locale","config","localization","localizationConfig","rtl","fieldLocalized","undefined","editDepth","isControlledByParent","memoizedValidate","value","validationOptions","customComponents","AfterInput","BeforeInput","Description","Error","Error1","Label","disabled","disabledFromField","initialValue","setValue","showError","potentiallyStalePath","isSmallWidthViewport","setIsSmallWidthViewport","rerenderProviderKey","setRerenderProviderKey","prevInitialValueRef","useRef","prevValueRef","updateViewPortWidth","isNextSmallWidthViewport","window","matchMedia","matches","addEventListener","removeEventListener","classes","hideGutter","filter","Boolean","join","pathWithEditDepth","runDeprioritized","handleChange","editorState","updateFieldValue","newState","toJSON","current","styles","handleInitialValueChange","JSON","parse","stringify","Date","Object","is","_jsxs","view","role","style","_jsx","hasRequiredAccessibleState","CustomComponent","Fallback","fallbackRender","onReset","modalSlugPrefix","composerKey","fieldProps","onChange","error","color","message","String","RichText"],"sources":["../../src/field/Field.tsx"],"sourcesContent":["'use client'\nimport type { EditorState, SerializedEditorState } from 'lexical'\nimport type { FallbackProps } from 'react-error-boundary'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n BulkUploadProvider,\n FieldDescription,\n FieldError,\n FieldLabel,\n isFieldRTL,\n RenderCustomComponent,\n useConfig,\n useEditDepth,\n useEffectEvent,\n useField,\n useLocale,\n useTranslation,\n} from '@payloadcms/ui'\nimport { mergeFieldStyles } from '@payloadcms/ui/shared'\nimport { dequal } from 'dequal/lite'\nimport { type Validate } from 'payload'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport type { SanitizedClientEditorConfig } from '../lexical/config/types.js'\n\nimport '../lexical/theme/EditorTheme.css'\nimport './bundled.css'\nimport './index.css'\n\nimport type { LexicalRichTextFieldProps } from '../types/index.js'\n\nimport { LexicalProvider } from '../lexical/LexicalProvider.js'\nimport { useRunDeprioritized } from '../utilities/useRunDeprioritized.js'\nimport { useRichTextView } from './RichTextViewProvider.js'\nimport { ViewSelector } from './ViewSelector.js'\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 admin: { className, description, readOnly: readOnlyFromAdmin } = {},\n label,\n localized,\n required,\n },\n path: pathFromProps,\n readOnly: readOnlyFromTopLevelProps,\n schemaPath,\n validate, // Users can pass in client side validation if they WANT to, but it's not required anymore\n } = props\n\n const { i18n } = useTranslation()\n\n const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin\n\n const locale = useLocale()\n const {\n config: { localization: localizationConfig },\n } = useConfig()\n\n const rtl = isFieldRTL({\n fieldLocalized: localized,\n locale,\n localizationConfig: localizationConfig || undefined,\n })\n\n const editDepth = useEditDepth()\n const { isControlledByParent } = useRichTextView()\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 disabled: disabledFromField,\n initialValue,\n path,\n setValue,\n showError,\n value,\n } = useField<SerializedEditorState>({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const disabled = readOnlyFromProps || disabledFromField\n\n const [isSmallWidthViewport, setIsSmallWidthViewport] = useState<boolean>(false)\n const [rerenderProviderKey, setRerenderProviderKey] = useState<Date>()\n\n const prevInitialValueRef = React.useRef<SerializedEditorState | undefined>(initialValue)\n const prevValueRef = React.useRef<SerializedEditorState | undefined>(value)\n\n useEffect(() => {\n const updateViewPortWidth = () => {\n const isNextSmallWidthViewport = window.matchMedia('(max-width: 768px)').matches\n\n if (isNextSmallWidthViewport !== isSmallWidthViewport) {\n setIsSmallWidthViewport(isNextSmallWidthViewport)\n }\n }\n updateViewPortWidth()\n window.addEventListener('resize', updateViewPortWidth)\n\n return () => {\n window.removeEventListener('resize', updateViewPortWidth)\n }\n }, [isSmallWidthViewport])\n\n const classes = [\n 'field-type',\n baseClass,\n className,\n showError && 'error',\n disabled && `${baseClass}--read-only`,\n editorConfig?.admin?.hideGutter !== true && !isSmallWidthViewport\n ? `${baseClass}--show-gutter`\n : null,\n ]\n .filter(Boolean)\n .join(' ')\n\n const pathWithEditDepth = `${path}.${editDepth}`\n\n const runDeprioritized = useRunDeprioritized() // defaults to 500 ms timeout\n\n const handleChange = useCallback(\n (editorState: EditorState) => {\n // Capture `editorState` in the closure so we can safely run later.\n const updateFieldValue = () => {\n const newState = editorState.toJSON()\n prevValueRef.current = newState\n setValue(newState)\n }\n\n // Queue the update for the browser’s idle time (or Safari shim)\n // and let the hook handle debouncing/cancellation.\n void runDeprioritized(updateFieldValue)\n },\n [setValue, runDeprioritized], // `runDeprioritized` is stable (useCallback inside hook)\n )\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n const handleInitialValueChange = useEffectEvent(\n (initialValue: SerializedEditorState | undefined) => {\n // Object deep equality check here, as re-mounting the editor if\n // the new value is the same as the old one is not necessary.\n // In postgres, the order of keys in JSON objects is not guaranteed to be preserved,\n // so we need to do a deep equality check here that does not care about key order => we use dequal.\n // If we used JSON.stringify, the editor would re-mount every time you save the document, as the order of keys changes => change detected => re-mount.\n if (\n prevValueRef.current !== value &&\n !dequal(\n prevValueRef.current != null\n ? JSON.parse(JSON.stringify(prevValueRef.current))\n : prevValueRef.current,\n value,\n )\n ) {\n prevInitialValueRef.current = initialValue\n prevValueRef.current = value\n setRerenderProviderKey(new Date())\n }\n },\n )\n\n useEffect(() => {\n // Needs to trigger for object reference changes - otherwise,\n // reacting to the same initial value change twice will cause\n // the second change to be ignored, even though the value has changed.\n // That's because initialValue is not kept up-to-date\n if (!Object.is(initialValue, prevInitialValueRef.current)) {\n handleInitialValueChange(initialValue)\n }\n }, [initialValue])\n\n return (\n <div\n aria-label={getTranslation(label || '', i18n)}\n className={classes}\n data-field-path={path}\n data-field-schemapath={schemaPath}\n data-lexical-view={editorConfig?.view}\n key={pathWithEditDepth}\n role=\"group\"\n style={styles}\n >\n <div className={`${baseClass}__label-row`}>\n {Label || (\n <FieldLabel\n hasRequiredAccessibleState\n label={label}\n localized={localized}\n path={path}\n required={required}\n />\n )}\n {!isControlledByParent && <ViewSelector />}\n </div>\n <div className={`${baseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n <ErrorBoundary fallbackRender={fallbackRender} onReset={() => {}}>\n {BeforeInput}\n <div className={`${baseClass}__editor-content`}>\n {/* Lexical may be in a drawer. We need to define another BulkUploadProvider to ensure that the bulk upload drawer\n is rendered in the correct depth (not displayed *behind* the current drawer).\n The `lexical-` prefix prevents drawer-slug collisions with non-lexical `BulkUploadProvider`s up the tree. */}\n <BulkUploadProvider modalSlugPrefix={`lexical-${path}`}>\n <LexicalProvider\n composerKey={pathWithEditDepth}\n editorConfig={editorConfig}\n fieldProps={props}\n isSmallWidthViewport={isSmallWidthViewport}\n key={JSON.stringify({ path, rerenderProviderKey })} // 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 rtl={rtl}\n value={value}\n />\n </BulkUploadProvider>\n </div>\n {AfterInput}\n </ErrorBoundary>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n </div>\n )\n}\n\nfunction fallbackRender({ error }: FallbackProps) {\n return (\n <div className=\"errorBoundary\" role=\"alert\">\n <p>Something went wrong:</p>\n <pre style={{ color: 'red' }}>{error instanceof Error ? error.message : String(error)}</pre>\n </div>\n )\n}\n\nexport const RichText: typeof RichTextComponent = RichTextComponent\n"],"mappings":"AAAA;;;AAIA,SAASA,cAAc,QAAQ;AAC/B,SACEC,kBAAkB,EAClBC,gBAAgB,EAChBC,UAAU,EACVC,UAAU,EACVC,UAAU,EACVC,qBAAqB,EACrBC,SAAS,EACTC,YAAY,EACZC,cAAc,EACdC,QAAQ,EACRC,SAAS,EACTC,cAAc,QACT;AACP,SAASC,gBAAgB,QAAQ;AACjC,SAASC,MAAM,QAAQ;AAEvB,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ;AACjE,SAASC,aAAa,QAAQ;AAI9B,OAAO;AACP,OAAO;AACP,OAAO;AAIP,SAASC,eAAe,QAAQ;AAChC,SAASC,mBAAmB,QAAQ;AACpC,SAASC,eAAe,QAAQ;AAChC,SAASC,YAAY,QAAQ;AAE7B,MAAMC,SAAA,GAAY;AAElB,MAAMC,iBAAA,GAIDC,KAAA;EACH,MAAM;IACJC,YAAY;IACZC,KAAK;IACLA,KAAA,EAAO;MACLC,KAAA,EAAO;QAAEC,SAAS;QAAEC,WAAW;QAAEC,QAAA,EAAUC;MAAiB,CAAE,GAAG,CAAC,CAAC;MACnEC,KAAK;MACLC,SAAS;MACTC;IAAQ,CACT;IACDC,IAAA,EAAMC,aAAa;IACnBN,QAAA,EAAUO,yBAAyB;IACnCC,UAAU;IACVC;EAAQ,CACT,GAAGf,KAAA;EAEJ,MAAM;IAAEgB;EAAI,CAAE,GAAG/B,cAAA;EAEjB,MAAMgC,iBAAA,GAAoBJ,yBAAA,IAA6BN,iBAAA;EAEvD,MAAMW,MAAA,GAASlC,SAAA;EACf,MAAM;IACJmC,MAAA,EAAQ;MAAEC,YAAA,EAAcC;IAAkB;EAAE,CAC7C,GAAGzC,SAAA;EAEJ,MAAM0C,GAAA,GAAM5C,UAAA,CAAW;IACrB6C,cAAA,EAAgBd,SAAA;IAChBS,MAAA;IACAG,kBAAA,EAAoBA,kBAAA,IAAsBG;EAC5C;EAEA,MAAMC,SAAA,GAAY5C,YAAA;EAClB,MAAM;IAAE6C;EAAoB,CAAE,GAAG9B,eAAA;EAEjC,MAAM+B,gBAAA,GAAmBtC,WAAA,CACvB,CAACuC,KAAA,EAAOC,iBAAA;IACN,IAAI,OAAOd,QAAA,KAAa,YAAY;MAClC;MACA,OAAOA,QAAA,CAASa,KAAA,EAAO;QAAE,GAAGC,iBAAiB;QAAEnB;MAAS;IAC1D;IACA,OAAO;EACT;EACA;EACA;EACA;EACA,CAACK,QAAA,EAAUL,QAAA,CAAS;EAGtB,MAAM;IACJoB,gBAAA,EAAkB;MAAEC,UAAU;MAAEC,WAAW;MAAEC,WAAW;MAAEC,KAAA,EAAAC,MAAK;MAAEC;IAAK,CAAE,GAAG,CAAC,CAAC;IAC7EC,QAAA,EAAUC,iBAAiB;IAC3BC,YAAY;IACZ5B,IAAI;IACJ6B,QAAQ;IACRC,SAAS;IACTb,KAAK,EAALA;EAAK,CACN,GAAG7C,QAAA,CAAgC;IAClC2D,oBAAA,EAAsB9B,aAAA;IACtBG,QAAA,EAAUY;EACZ;EAEA,MAAMU,QAAA,GAAWpB,iBAAA,IAAqBqB,iBAAA;EAEtC,MAAM,CAACK,oBAAA,EAAsBC,uBAAA,CAAwB,GAAGpD,QAAA,CAAkB;EAC1E,MAAM,CAACqD,mBAAA,EAAqBC,sBAAA,CAAuB,GAAGtD,QAAA;EAEtD,MAAMuD,mBAAA,GAAsB3D,KAAA,CAAM4D,MAAM,CAAoCT,YAAA;EAC5E,MAAMU,YAAA,GAAe7D,KAAA,CAAM4D,MAAM,CAAoCpB,OAAA;EAErEtC,SAAA,CAAU;IACR,MAAM4D,mBAAA,GAAsBA,CAAA;MAC1B,MAAMC,wBAAA,GAA2BC,MAAA,CAAOC,UAAU,CAAC,sBAAsBC,OAAO;MAEhF,IAAIH,wBAAA,KAA6BR,oBAAA,EAAsB;QACrDC,uBAAA,CAAwBO,wBAAA;MAC1B;IACF;IACAD,mBAAA;IACAE,MAAA,CAAOG,gBAAgB,CAAC,UAAUL,mBAAA;IAElC,OAAO;MACLE,MAAA,CAAOI,mBAAmB,CAAC,UAAUN,mBAAA;IACvC;EACF,GAAG,CAACP,oBAAA,CAAqB;EAEzB,MAAMc,OAAA,GAAU,CACd,cACA3D,SAAA,EACAM,SAAA,EACAqC,SAAA,IAAa,SACbJ,QAAA,IAAY,GAAGvC,SAAA,aAAsB,EACrCG,YAAA,EAAcE,KAAA,EAAOuD,UAAA,KAAe,QAAQ,CAACf,oBAAA,GACzC,GAAG7C,SAAA,eAAwB,GAC3B,KACL,CACE6D,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EAER,MAAMC,iBAAA,GAAoB,GAAGnD,IAAA,IAAQc,SAAA,EAAW;EAEhD,MAAMsC,gBAAA,GAAmBpE,mBAAA,GAAsB;AAAA;EAE/C,MAAMqE,YAAA,GAAe3E,WAAA,CAClB4E,WAAA;IACC;IACA,MAAMC,gBAAA,GAAmBA,CAAA;MACvB,MAAMC,QAAA,GAAWF,WAAA,CAAYG,MAAM;MACnCnB,YAAA,CAAaoB,OAAO,GAAGF,QAAA;MACvB3B,QAAA,CAAS2B,QAAA;IACX;IAEA;IACA;IACA,KAAKJ,gBAAA,CAAiBG,gBAAA;EACxB,GACA,CAAC1B,QAAA,EAAUuB,gBAAA,CAAiB;EAG9B,MAAMO,MAAA,GAAS/E,OAAA,CAAQ,MAAML,gBAAA,CAAiBgB,KAAA,GAAQ,CAACA,KAAA,CAAM;EAE7D,MAAMqE,wBAAA,GAA2BzF,cAAA,CAC9ByD,cAAA;IACC;IACA;IACA;IACA;IACA;IACA,IACEU,YAAA,CAAaoB,OAAO,KAAKzC,OAAA,IACzB,CAACzC,MAAA,CACC8D,YAAA,CAAaoB,OAAO,IAAI,OACpBG,IAAA,CAAKC,KAAK,CAACD,IAAA,CAAKE,SAAS,CAACzB,YAAA,CAAaoB,OAAO,KAC9CpB,YAAA,CAAaoB,OAAO,EACxBzC,OAAA,GAEF;MACAmB,mBAAA,CAAoBsB,OAAO,GAAG9B,cAAA;MAC9BU,YAAA,CAAaoB,OAAO,GAAGzC,OAAA;MACvBkB,sBAAA,CAAuB,IAAI6B,IAAA;IAC7B;EACF;EAGFrF,SAAA,CAAU;IACR;IACA;IACA;IACA;IACA,IAAI,CAACsF,MAAA,CAAOC,EAAE,CAACtC,YAAA,EAAcQ,mBAAA,CAAoBsB,OAAO,GAAG;MACzDE,wBAAA,CAAyBhC,YAAA;IAC3B;EACF,GAAG,CAACA,YAAA,CAAa;EAEjB,oBACEuC,KAAA,CAAC;IACC,cAAYzG,cAAA,CAAemC,KAAA,IAAS,IAAIQ,IAAA;IACxCZ,SAAA,EAAWqD,OAAA;IACX,mBAAiB9C,IAAA;IACjB,yBAAuBG,UAAA;IACvB,qBAAmBb,YAAA,EAAc8E,IAAA;IAEjCC,IAAA,EAAK;IACLC,KAAA,EAAOX,MAAA;4BAEPQ,KAAA,CAAC;MAAI1E,SAAA,EAAW,GAAGN,SAAA,aAAsB;iBACtCsC,KAAA,iBACC8C,IAAA,CAACzG,UAAA;QACC0G,0BAA0B;QAC1B3E,KAAA,EAAOA,KAAA;QACPC,SAAA,EAAWA,SAAA;QACXE,IAAA,EAAMA,IAAA;QACND,QAAA,EAAUA;UAGb,CAACgB,oBAAA,iBAAwBwD,IAAA,CAACrF,YAAA;qBAE7BiF,KAAA,CAAC;MAAI1E,SAAA,EAAW,GAAGN,SAAA,QAAiB;8BAClCoF,IAAA,CAACvG,qBAAA;QACCyG,eAAA,EAAiBjD,MAAA;QACjBkD,QAAA,eAAUH,IAAA,CAAC1G,UAAA;UAAWmC,IAAA,EAAMA,IAAA;UAAM8B,SAAA,EAAWA;;uBAE/CqC,KAAA,CAACrF,aAAA;QAAc6F,cAAA,EAAgBA,cAAA;QAAgBC,OAAA,EAASA,CAAA,MAAO;mBAC5DvD,WAAA,E,aACDkD,IAAA,CAAC;UAAI9E,SAAA,EAAW,GAAGN,SAAA,kBAA2B;oBAI5C,aAAAoF,IAAA,CAAC5G,kBAAA;YAAmBkH,eAAA,EAAiB,WAAW7E,IAAA,EAAM;sBACpD,aAAAuE,IAAA,CAACxF,eAAA;cACC+F,WAAA,EAAa3B,iBAAA;cACb7D,YAAA,EAAcA,YAAA;cACdyF,UAAA,EAAY1F,KAAA;cACZ2C,oBAAA,EAAsBA,oBAAA;cAEtBgD,QAAA,EAAU3B,YAAA;cACV1D,QAAA,EAAU+B,QAAA;cACVf,GAAA,EAAKA,GAAA;cACLM,KAAA,EAAOA;eAJF4C,IAAA,CAAKE,SAAS,CAAC;cAAE/D,IAAA;cAAMkC;YAAoB;;YAQrDd,UAAA;uBAEHmD,IAAA,CAACvG,qBAAA;QACCyG,eAAA,EAAiBnD,WAAA;QACjBoD,QAAA,eAAUH,IAAA,CAAC3G,gBAAA;UAAiB8B,WAAA,EAAaA,WAAA;UAAaM,IAAA,EAAMA;;;;KA7C3DmD,iBAAA;AAkDX;AAEA,SAASwB,eAAe;EAAEM;AAAK,CAAiB;EAC9C,oBACEd,KAAA,CAAC;IAAI1E,SAAA,EAAU;IAAgB4E,IAAA,EAAK;4BAClCE,IAAA,CAAC;gBAAE;qBACHA,IAAA,CAAC;MAAID,KAAA,EAAO;QAAEY,KAAA,EAAO;MAAM;gBAAID,KAAA,YAAiB1D,KAAA,GAAQ0D,KAAA,CAAME,OAAO,GAAGC,MAAA,CAAOH,KAAA;;;AAGrF;AAEA,OAAO,MAAMI,QAAA,GAAqCjG,iBAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewSelector.d.ts","sourceRoot":"","sources":["../../src/field/ViewSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,oBAAoB,CAAA;AAE3B,wBAAgB,YAAY,IAAI,IAAI,GAAG,KAAK,CAAC,YAAY,CAyDxD"}
1
+ {"version":3,"file":"ViewSelector.d.ts","sourceRoot":"","sources":["../../src/field/ViewSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,oBAAoB,CAAA;AAE3B,wBAAgB,YAAY,IAAI,IAAI,GAAG,KAAK,CAAC,YAAY,CA0DxD"}
@@ -44,6 +44,7 @@ export function ViewSelector() {
44
44
  }),
45
45
  buttonType: "custom",
46
46
  horizontalAlign: "left",
47
+ popupType: "menu",
47
48
  render: t2 => {
48
49
  const {
49
50
  close