@payloadcms/ui 4.0.0-canary.3 → 4.0.0-canary.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/dist/css/colors.css +3 -0
  2. package/dist/css/utilities.css +3 -2
  3. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  4. package/dist/elements/AppHeader/index.js +7 -0
  5. package/dist/elements/AppHeader/index.js.map +1 -1
  6. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  7. package/dist/elements/ArrayAction/index.js +1 -2
  8. package/dist/elements/ArrayAction/index.js.map +1 -1
  9. package/dist/elements/BulkUpload/ActionsBar/index.css +4 -8
  10. package/dist/elements/BulkUpload/ActionsBar/index.d.ts +1 -5
  11. package/dist/elements/BulkUpload/ActionsBar/index.d.ts.map +1 -1
  12. package/dist/elements/BulkUpload/ActionsBar/index.js +15 -22
  13. package/dist/elements/BulkUpload/ActionsBar/index.js.map +1 -1
  14. package/dist/elements/BulkUpload/AddFilesView/index.css +14 -8
  15. package/dist/elements/BulkUpload/AddFilesView/index.d.ts +2 -2
  16. package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
  17. package/dist/elements/BulkUpload/AddFilesView/index.js +41 -36
  18. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  19. package/dist/elements/BulkUpload/AddingFilesView/index.css +158 -6
  20. package/dist/elements/BulkUpload/AddingFilesView/index.d.ts +5 -1
  21. package/dist/elements/BulkUpload/AddingFilesView/index.d.ts.map +1 -1
  22. package/dist/elements/BulkUpload/AddingFilesView/index.js +134 -65
  23. package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -1
  24. package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js +4 -4
  25. package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js.map +1 -1
  26. package/dist/elements/BulkUpload/EditForm/index.d.ts +1 -1
  27. package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
  28. package/dist/elements/BulkUpload/EditForm/index.js +16 -17
  29. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  30. package/dist/elements/BulkUpload/EditForm/types.d.ts +2 -3
  31. package/dist/elements/BulkUpload/EditForm/types.d.ts.map +1 -1
  32. package/dist/elements/BulkUpload/EditForm/types.js.map +1 -1
  33. package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts.map +1 -1
  34. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +78 -64
  35. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  36. package/dist/elements/BulkUpload/EditMany/index.d.ts.map +1 -1
  37. package/dist/elements/BulkUpload/EditMany/index.js +28 -10
  38. package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
  39. package/dist/elements/BulkUpload/FileSidebar/index.css +63 -143
  40. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  41. package/dist/elements/BulkUpload/FileSidebar/index.js +42 -175
  42. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  43. package/dist/elements/BulkUpload/FormsManager/index.js +1 -1
  44. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  45. package/dist/elements/BulkUpload/index.css +48 -0
  46. package/dist/elements/BulkUpload/index.d.ts +6 -5
  47. package/dist/elements/BulkUpload/index.d.ts.map +1 -1
  48. package/dist/elements/BulkUpload/index.js +42 -41
  49. package/dist/elements/BulkUpload/index.js.map +1 -1
  50. package/dist/elements/Card/index.css +1 -1
  51. package/dist/elements/ColumnSelection/Popup.d.ts +12 -0
  52. package/dist/elements/ColumnSelection/Popup.d.ts.map +1 -0
  53. package/dist/elements/{ColumnSelector/index.js → ColumnSelection/Popup.js} +23 -12
  54. package/dist/elements/ColumnSelection/Popup.js.map +1 -0
  55. package/dist/elements/ColumnSelection/index.d.ts +10 -0
  56. package/dist/elements/ColumnSelection/index.d.ts.map +1 -0
  57. package/dist/elements/{ColumnsButton → ColumnSelection}/index.js +23 -17
  58. package/dist/elements/ColumnSelection/index.js.map +1 -0
  59. package/dist/elements/CopyLocaleData/index.js +1 -1
  60. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  61. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  62. package/dist/elements/CreateDocumentButton/index.js +0 -1
  63. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  64. package/dist/elements/DatePicker/index.css +8 -8
  65. package/dist/elements/Dialog/DialogHeader/index.d.ts +4 -0
  66. package/dist/elements/Dialog/DialogHeader/index.d.ts.map +1 -1
  67. package/dist/elements/Dialog/DialogHeader/index.js +45 -30
  68. package/dist/elements/Dialog/DialogHeader/index.js.map +1 -1
  69. package/dist/elements/Dialog/DialogModal/index.d.ts +5 -0
  70. package/dist/elements/Dialog/DialogModal/index.d.ts.map +1 -1
  71. package/dist/elements/Dialog/DialogModal/index.js +58 -31
  72. package/dist/elements/Dialog/DialogModal/index.js.map +1 -1
  73. package/dist/elements/Dialog/DialogTitle/index.css +9 -0
  74. package/dist/elements/Dialog/DialogTitle/index.d.ts +5 -0
  75. package/dist/elements/Dialog/DialogTitle/index.d.ts.map +1 -0
  76. package/dist/elements/Dialog/DialogTitle/index.js +10 -0
  77. package/dist/elements/Dialog/DialogTitle/index.js.map +1 -0
  78. package/dist/elements/Dialog/index.css +7 -1
  79. package/dist/elements/DocumentControls/index.css +1 -1
  80. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  81. package/dist/elements/DocumentControls/index.js +12 -3
  82. package/dist/elements/DocumentControls/index.js.map +1 -1
  83. package/dist/elements/DocumentDrawer/DrawerHeader/index.d.ts.map +1 -1
  84. package/dist/elements/DocumentDrawer/DrawerHeader/index.js +5 -3
  85. package/dist/elements/DocumentDrawer/DrawerHeader/index.js.map +1 -1
  86. package/dist/elements/DocumentFields/index.css +5 -2
  87. package/dist/elements/DocumentFields/index.d.ts +5 -0
  88. package/dist/elements/DocumentFields/index.d.ts.map +1 -1
  89. package/dist/elements/DocumentFields/index.js +9 -1
  90. package/dist/elements/DocumentFields/index.js.map +1 -1
  91. package/dist/elements/DocumentHeader/DocumentHeaderRoot/index.d.ts +12 -0
  92. package/dist/elements/DocumentHeader/DocumentHeaderRoot/index.d.ts.map +1 -0
  93. package/dist/elements/DocumentHeader/DocumentHeaderRoot/index.js +28 -0
  94. package/dist/elements/DocumentHeader/DocumentHeaderRoot/index.js.map +1 -0
  95. package/dist/elements/DocumentHeader/index.js +2 -3
  96. package/dist/elements/DocumentHeader/index.js.map +1 -1
  97. package/dist/elements/DraggableSortable/DragOverlayPreview/index.css +1 -1
  98. package/dist/elements/DrawerActionHeader/index.css +1 -1
  99. package/dist/elements/{BulkUpload/Header → DrawerHeader}/index.css +7 -1
  100. package/dist/elements/DrawerHeader/index.d.ts +10 -0
  101. package/dist/elements/DrawerHeader/index.d.ts.map +1 -0
  102. package/dist/elements/{BulkUpload/Header → DrawerHeader}/index.js +16 -11
  103. package/dist/elements/DrawerHeader/index.js.map +1 -0
  104. package/dist/elements/Dropzone/index.css +5 -13
  105. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +1 -1
  106. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
  107. package/dist/elements/EditUpload/index.css +97 -158
  108. package/dist/elements/EditUpload/index.d.ts +2 -1
  109. package/dist/elements/EditUpload/index.d.ts.map +1 -1
  110. package/dist/elements/EditUpload/index.js +205 -231
  111. package/dist/elements/EditUpload/index.js.map +1 -1
  112. package/dist/elements/EditUpload/{library.scss → library.css} +108 -46
  113. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts +1 -1
  114. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -1
  115. package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
  116. package/dist/elements/FileDetails/FileMeta/index.css +27 -0
  117. package/dist/elements/FileDetails/FileMeta/index.d.ts +1 -1
  118. package/dist/elements/FileDetails/FileMeta/index.d.ts.map +1 -1
  119. package/dist/elements/FileDetails/FileMeta/index.js +1 -1
  120. package/dist/elements/FileDetails/FileMeta/index.js.map +1 -1
  121. package/dist/elements/FileDetails/StaticFileDetails/index.css +140 -0
  122. package/dist/elements/FileDetails/StaticFileDetails/index.d.ts +2 -2
  123. package/dist/elements/FileDetails/StaticFileDetails/index.d.ts.map +1 -1
  124. package/dist/elements/FileDetails/StaticFileDetails/index.js +1 -1
  125. package/dist/elements/FileDetails/StaticFileDetails/index.js.map +1 -1
  126. package/dist/elements/FileDetails/index.d.ts +1 -1
  127. package/dist/elements/FileDetails/index.d.ts.map +1 -1
  128. package/dist/elements/FileDetails/index.js.map +1 -1
  129. package/dist/elements/FileManager/FilePreview/AudioPreview/index.css +8 -0
  130. package/dist/elements/FileManager/FilePreview/AudioPreview/index.d.ts +10 -0
  131. package/dist/elements/FileManager/FilePreview/AudioPreview/index.d.ts.map +1 -0
  132. package/dist/elements/FileManager/FilePreview/AudioPreview/index.js +24 -0
  133. package/dist/elements/FileManager/FilePreview/AudioPreview/index.js.map +1 -0
  134. package/dist/elements/FileManager/FilePreview/PdfPreview/index.css +9 -0
  135. package/dist/elements/FileManager/FilePreview/PdfPreview/index.d.ts +12 -0
  136. package/dist/elements/FileManager/FilePreview/PdfPreview/index.d.ts.map +1 -0
  137. package/dist/elements/FileManager/FilePreview/PdfPreview/index.js +27 -0
  138. package/dist/elements/FileManager/FilePreview/PdfPreview/index.js.map +1 -0
  139. package/dist/elements/FileManager/FilePreview/VideoPreview/index.css +8 -0
  140. package/dist/elements/FileManager/FilePreview/VideoPreview/index.d.ts +10 -0
  141. package/dist/elements/FileManager/FilePreview/VideoPreview/index.d.ts.map +1 -0
  142. package/dist/elements/FileManager/FilePreview/VideoPreview/index.js +24 -0
  143. package/dist/elements/FileManager/FilePreview/VideoPreview/index.js.map +1 -0
  144. package/dist/elements/FileManager/FilePreview/index.css +83 -0
  145. package/dist/elements/FileManager/FilePreview/index.d.ts +13 -0
  146. package/dist/elements/FileManager/FilePreview/index.d.ts.map +1 -0
  147. package/dist/elements/FileManager/FilePreview/index.js +140 -0
  148. package/dist/elements/FileManager/FilePreview/index.js.map +1 -0
  149. package/dist/elements/FileManager/FileToolbar/index.css +91 -0
  150. package/dist/elements/FileManager/FileToolbar/index.d.ts +14 -0
  151. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -0
  152. package/dist/elements/FileManager/FileToolbar/index.js +106 -0
  153. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -0
  154. package/dist/elements/FileManager/index.css +154 -0
  155. package/dist/elements/FileManager/index.d.ts +19 -0
  156. package/dist/elements/FileManager/index.d.ts.map +1 -0
  157. package/dist/elements/FileManager/index.js +424 -0
  158. package/dist/elements/FileManager/index.js.map +1 -0
  159. package/dist/elements/GroupBy/Popup.d.ts +21 -0
  160. package/dist/elements/GroupBy/Popup.d.ts.map +1 -0
  161. package/dist/elements/GroupBy/Popup.js +268 -0
  162. package/dist/elements/GroupBy/Popup.js.map +1 -0
  163. package/dist/elements/GroupBy/index.d.ts +12 -0
  164. package/dist/elements/GroupBy/index.d.ts.map +1 -0
  165. package/dist/elements/GroupBy/index.js +91 -0
  166. package/dist/elements/GroupBy/index.js.map +1 -0
  167. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.css +2 -2
  168. package/dist/elements/Hierarchy/Drawer/index.css +1 -1
  169. package/dist/elements/ListColumnSelectionButton/index.d.ts +11 -0
  170. package/dist/elements/ListColumnSelectionButton/index.d.ts.map +1 -0
  171. package/dist/elements/ListColumnSelectionButton/index.js +37 -0
  172. package/dist/elements/ListColumnSelectionButton/index.js.map +1 -0
  173. package/dist/elements/ListControls/index.d.ts.map +1 -1
  174. package/dist/elements/ListControls/index.js +7 -8
  175. package/dist/elements/ListControls/index.js.map +1 -1
  176. package/dist/elements/ListDrawer/DrawerContent.js +1 -1
  177. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  178. package/dist/elements/ListDrawer/Provider.d.ts +1 -1
  179. package/dist/elements/ListDrawer/Provider.d.ts.map +1 -1
  180. package/dist/elements/ListDrawer/Provider.js.map +1 -1
  181. package/dist/elements/ListGroupByButton/index.d.ts +12 -0
  182. package/dist/elements/ListGroupByButton/index.d.ts.map +1 -0
  183. package/dist/elements/ListGroupByButton/index.js +55 -0
  184. package/dist/elements/ListGroupByButton/index.js.map +1 -0
  185. package/dist/elements/ListHeader/DrawerRelationshipSelect/index.d.ts.map +1 -1
  186. package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js +2 -0
  187. package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js.map +1 -1
  188. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +4 -4
  189. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  190. package/dist/elements/ListWhereBuilder/index.d.ts +16 -0
  191. package/dist/elements/ListWhereBuilder/index.d.ts.map +1 -0
  192. package/dist/elements/ListWhereBuilder/index.js +62 -0
  193. package/dist/elements/ListWhereBuilder/index.js.map +1 -0
  194. package/dist/elements/LivePreview/Toolbar/Controls/index.js +2 -2
  195. package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
  196. package/dist/elements/LivePreview/Toolbar/SizeInput/index.css +5 -44
  197. package/dist/elements/LivePreview/Toolbar/SizeInput/index.d.ts.map +1 -1
  198. package/dist/elements/LivePreview/Toolbar/SizeInput/index.js +25 -43
  199. package/dist/elements/LivePreview/Toolbar/SizeInput/index.js.map +1 -1
  200. package/dist/elements/MiniCarousel/index.css +94 -0
  201. package/dist/elements/MiniCarousel/index.d.ts +15 -0
  202. package/dist/elements/MiniCarousel/index.d.ts.map +1 -0
  203. package/dist/elements/MiniCarousel/index.js +84 -0
  204. package/dist/elements/MiniCarousel/index.js.map +1 -0
  205. package/dist/elements/Nav/SettingsMenuButton/index.css +5 -0
  206. package/dist/elements/Nav/SettingsMenuButton/index.d.ts +1 -1
  207. package/dist/elements/Nav/SettingsMenuButton/index.d.ts.map +1 -1
  208. package/dist/elements/Nav/SettingsMenuButton/index.js +1 -1
  209. package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -1
  210. package/dist/elements/Nav/index.css +2 -2
  211. package/dist/elements/NavGroup/index.css +1 -1
  212. package/dist/elements/Popup/index.d.ts +1 -1
  213. package/dist/elements/Popup/index.d.ts.map +1 -1
  214. package/dist/elements/Popup/index.js +43 -12
  215. package/dist/elements/Popup/index.js.map +1 -1
  216. package/dist/elements/PreviewSizes/index.css +149 -0
  217. package/dist/elements/PreviewSizes/index.d.ts +2 -2
  218. package/dist/elements/PreviewSizes/index.d.ts.map +1 -1
  219. package/dist/elements/PreviewSizes/index.js +1 -1
  220. package/dist/elements/PreviewSizes/index.js.map +1 -1
  221. package/dist/elements/QueryPresets/cells/ColumnsCell/{index.scss → index.css} +1 -3
  222. package/dist/elements/QueryPresets/cells/ColumnsCell/index.d.ts +1 -1
  223. package/dist/elements/QueryPresets/cells/ColumnsCell/index.d.ts.map +1 -1
  224. package/dist/elements/QueryPresets/cells/ColumnsCell/index.js +1 -1
  225. package/dist/elements/QueryPresets/cells/ColumnsCell/index.js.map +1 -1
  226. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts +1 -1
  227. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts.map +1 -1
  228. package/dist/elements/QueryPresets/fields/ColumnsField/index.js +77 -48
  229. package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
  230. package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts +1 -1
  231. package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts.map +1 -1
  232. package/dist/elements/QueryPresets/fields/GroupByField/index.js +12 -21
  233. package/dist/elements/QueryPresets/fields/GroupByField/index.js.map +1 -1
  234. package/dist/elements/QueryPresets/fields/Heading/index.css +52 -0
  235. package/dist/elements/QueryPresets/fields/Heading/index.d.ts +7 -0
  236. package/dist/elements/QueryPresets/fields/Heading/index.d.ts.map +1 -0
  237. package/dist/elements/QueryPresets/fields/Heading/index.js +31 -0
  238. package/dist/elements/QueryPresets/fields/Heading/index.js.map +1 -0
  239. package/dist/elements/QueryPresets/fields/WhereField/index.d.ts +1 -1
  240. package/dist/elements/QueryPresets/fields/WhereField/index.d.ts.map +1 -1
  241. package/dist/elements/QueryPresets/fields/WhereField/index.js +24 -23
  242. package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
  243. package/dist/elements/QueryPresets/fields/fields.css +23 -0
  244. package/dist/elements/ReactSelect/DropdownIndicator/index.css +1 -1
  245. package/dist/elements/RelationshipTable/AddNewButton.d.ts.map +1 -1
  246. package/dist/elements/RelationshipTable/AddNewButton.js +1 -2
  247. package/dist/elements/RelationshipTable/AddNewButton.js.map +1 -1
  248. package/dist/elements/RelationshipTable/index.js +2 -2
  249. package/dist/elements/RelationshipTable/index.js.map +1 -1
  250. package/dist/elements/Search/SearchInput/index.js +1 -1
  251. package/dist/elements/Search/SearchInput/index.js.map +1 -1
  252. package/dist/elements/SortColumn/index.css +1 -1
  253. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -1
  254. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +21 -2
  255. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
  256. package/dist/elements/Table/index.css +24 -2
  257. package/dist/elements/Thumbnail/index.css +41 -0
  258. package/dist/elements/Thumbnail/index.d.ts +3 -3
  259. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  260. package/dist/elements/Thumbnail/index.js +1 -1
  261. package/dist/elements/Thumbnail/index.js.map +1 -1
  262. package/dist/elements/Upload/UploadFromURLModal/index.d.ts +11 -0
  263. package/dist/elements/Upload/UploadFromURLModal/index.d.ts.map +1 -0
  264. package/dist/elements/Upload/UploadFromURLModal/index.js +88 -0
  265. package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -0
  266. package/dist/elements/Upload/index.css +134 -45
  267. package/dist/elements/Upload/index.d.ts +3 -8
  268. package/dist/elements/Upload/index.d.ts.map +1 -1
  269. package/dist/elements/Upload/index.js +71 -92
  270. package/dist/elements/Upload/index.js.map +1 -1
  271. package/dist/elements/WhereBuilder/Condition/index.d.ts +1 -0
  272. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  273. package/dist/elements/WhereBuilder/Condition/index.js +17 -2
  274. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  275. package/dist/elements/WhereBuilder/index.d.ts +4 -3
  276. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  277. package/dist/elements/WhereBuilder/index.js +71 -62
  278. package/dist/elements/WhereBuilder/index.js.map +1 -1
  279. package/dist/elements/WhereBuilder/types.d.ts +6 -5
  280. package/dist/elements/WhereBuilder/types.d.ts.map +1 -1
  281. package/dist/elements/WhereBuilder/types.js.map +1 -1
  282. package/dist/exports/client/index.d.ts +5 -2
  283. package/dist/exports/client/index.d.ts.map +1 -1
  284. package/dist/exports/client/index.js +26 -26
  285. package/dist/exports/client/index.js.map +4 -4
  286. package/dist/exports/shared/index.js +2 -2
  287. package/dist/exports/shared/index.js.map +2 -2
  288. package/dist/fields/Blocks/BlockSelector/BlockSearch/index.css +1 -1
  289. package/dist/fields/Blocks/BlockSelector/index.css +2 -5
  290. package/dist/fields/Checkbox/index.css +2 -2
  291. package/dist/fields/Group/index.css +3 -3
  292. package/dist/fields/Number/Input.d.ts.map +1 -1
  293. package/dist/fields/Number/Input.js +47 -35
  294. package/dist/fields/Number/Input.js.map +1 -1
  295. package/dist/fields/Number/index.css +19 -0
  296. package/dist/fields/Number/types.d.ts +6 -0
  297. package/dist/fields/Number/types.d.ts.map +1 -1
  298. package/dist/fields/Number/types.js.map +1 -1
  299. package/dist/fields/Relationship/select-components/MultiValueLabel/index.css +1 -1
  300. package/dist/fields/Text/Input.d.ts.map +1 -1
  301. package/dist/fields/Text/Input.js +31 -28
  302. package/dist/fields/Text/Input.js.map +1 -1
  303. package/dist/fields/Text/types.d.ts +5 -0
  304. package/dist/fields/Text/types.d.ts.map +1 -1
  305. package/dist/fields/Text/types.js.map +1 -1
  306. package/dist/fields/Upload/Input.d.ts.map +1 -1
  307. package/dist/fields/Upload/Input.js +12 -11
  308. package/dist/fields/Upload/Input.js.map +1 -1
  309. package/dist/fields/Upload/index.js +1 -1
  310. package/dist/fields/Upload/index.js.map +1 -1
  311. package/dist/graphics/Icon/index.js +1 -1
  312. package/dist/graphics/Icon/index.js.map +1 -1
  313. package/dist/hooks/useElementHeightVariable.d.ts +15 -0
  314. package/dist/hooks/useElementHeightVariable.d.ts.map +1 -0
  315. package/dist/hooks/useElementHeightVariable.js +53 -0
  316. package/dist/hooks/useElementHeightVariable.js.map +1 -0
  317. package/dist/icons/Crop/index.css +5 -0
  318. package/dist/icons/Crop/index.d.ts +7 -0
  319. package/dist/icons/Crop/index.d.ts.map +1 -0
  320. package/dist/icons/Crop/index.js +24 -0
  321. package/dist/icons/Crop/index.js.map +1 -0
  322. package/dist/icons/Download/index.css +5 -0
  323. package/dist/icons/{ExternalLink → Download}/index.d.ts +1 -1
  324. package/dist/icons/Download/index.d.ts.map +1 -0
  325. package/dist/icons/Download/index.js +27 -0
  326. package/dist/icons/Download/index.js.map +1 -0
  327. package/dist/icons/{ExternalLink → NewTab}/index.css +1 -1
  328. package/dist/icons/NewTab/index.d.ts +7 -0
  329. package/dist/icons/NewTab/index.d.ts.map +1 -0
  330. package/dist/icons/NewTab/index.js +25 -0
  331. package/dist/icons/NewTab/index.js.map +1 -0
  332. package/dist/icons/Replace/index.css +5 -0
  333. package/dist/icons/Replace/index.d.ts +6 -0
  334. package/dist/icons/Replace/index.d.ts.map +1 -0
  335. package/dist/icons/Replace/index.js +20 -0
  336. package/dist/icons/Replace/index.js.map +1 -0
  337. package/dist/icons/Reset/index.css +5 -0
  338. package/dist/icons/Reset/index.d.ts +7 -0
  339. package/dist/icons/Reset/index.d.ts.map +1 -0
  340. package/dist/icons/Reset/index.js +25 -0
  341. package/dist/icons/Reset/index.js.map +1 -0
  342. package/dist/icons/Swap/index.js +1 -1
  343. package/dist/icons/Swap/index.js.map +1 -1
  344. package/dist/scss/app.scss +9 -2
  345. package/dist/styles.css +1 -1
  346. package/dist/templates/Default/index.js +1 -1
  347. package/dist/templates/Default/index.js.map +1 -1
  348. package/dist/utilities/reduceFieldsToOptions.js +1 -1
  349. package/dist/utilities/reduceFieldsToOptions.js.map +1 -1
  350. package/dist/views/API/index.client.js +2 -2
  351. package/dist/views/API/index.client.js.map +1 -1
  352. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +2 -2
  353. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  354. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +2 -2
  355. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  356. package/dist/views/Document/index.d.ts.map +1 -1
  357. package/dist/views/Document/index.js +1 -0
  358. package/dist/views/Document/index.js.map +1 -1
  359. package/dist/views/Document/renderDocumentSlots.d.ts +1 -0
  360. package/dist/views/Document/renderDocumentSlots.d.ts.map +1 -1
  361. package/dist/views/Document/renderDocumentSlots.js +47 -1
  362. package/dist/views/Document/renderDocumentSlots.js.map +1 -1
  363. package/dist/views/Edit/index.css +143 -6
  364. package/dist/views/Edit/index.d.ts +1 -1
  365. package/dist/views/Edit/index.d.ts.map +1 -1
  366. package/dist/views/Edit/index.js +34 -31
  367. package/dist/views/Edit/index.js.map +1 -1
  368. package/dist/views/HierarchyList/HierarchyTable/SlotTable.css +2 -2
  369. package/dist/views/List/ListHeader/index.css +5 -0
  370. package/dist/views/List/index.client.d.ts.map +1 -1
  371. package/dist/views/List/index.client.js +6 -6
  372. package/dist/views/List/index.client.js.map +1 -1
  373. package/dist/views/Versions/index.css +0 -4
  374. package/package.json +4 -4
  375. package/dist/elements/BulkUpload/Header/index.d.ts +0 -9
  376. package/dist/elements/BulkUpload/Header/index.d.ts.map +0 -1
  377. package/dist/elements/BulkUpload/Header/index.js.map +0 -1
  378. package/dist/elements/ColumnSelector/index.d.ts +0 -9
  379. package/dist/elements/ColumnSelector/index.d.ts.map +0 -1
  380. package/dist/elements/ColumnSelector/index.js.map +0 -1
  381. package/dist/elements/ColumnsButton/index.d.ts +0 -7
  382. package/dist/elements/ColumnsButton/index.d.ts.map +0 -1
  383. package/dist/elements/ColumnsButton/index.js.map +0 -1
  384. package/dist/elements/FileDetails/FileMeta/index.scss +0 -31
  385. package/dist/elements/FileDetails/StaticFileDetails/index.scss +0 -134
  386. package/dist/elements/GroupByBuilder/index.d.ts +0 -12
  387. package/dist/elements/GroupByBuilder/index.d.ts.map +0 -1
  388. package/dist/elements/GroupByBuilder/index.js +0 -164
  389. package/dist/elements/GroupByBuilder/index.js.map +0 -1
  390. package/dist/elements/GroupByBuilder/index.scss +0 -39
  391. package/dist/elements/GroupByControl/index.d.ts +0 -9
  392. package/dist/elements/GroupByControl/index.d.ts.map +0 -1
  393. package/dist/elements/GroupByControl/index.js +0 -254
  394. package/dist/elements/GroupByControl/index.js.map +0 -1
  395. package/dist/elements/Nav/SettingsMenuButton/index.scss +0 -11
  396. package/dist/elements/PreviewSizes/index.scss +0 -147
  397. package/dist/elements/QueryPresets/fields/ColumnsField/index.scss +0 -17
  398. package/dist/elements/QueryPresets/fields/GroupByField/index.scss +0 -17
  399. package/dist/elements/QueryPresets/fields/WhereField/index.scss +0 -23
  400. package/dist/elements/Thumbnail/index.scss +0 -53
  401. package/dist/icons/ExternalLink/index.d.ts.map +0 -1
  402. package/dist/icons/ExternalLink/index.js +0 -26
  403. package/dist/icons/ExternalLink/index.js.map +0 -1
  404. /package/dist/elements/{ColumnSelector/index.css → ColumnSelection/Popup.css} +0 -0
  405. /package/dist/elements/{GroupByControl/index.css → GroupBy/Popup.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useModal","formatAdminURL","isImage","React","Fragment","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useFormProcessing","useField","useConfig","useDocumentInfo","EditDepthProvider","useTranslation","UploadControlsProvider","useUploadControls","useUploadEdits","Button","Drawer","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","name","UploadActions","t0","$","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","openModal","t1","t2","Symbol","for","bb0","fileTypeIsAdjustable","length","_jsxs","className","children","_jsx","buttonStyle","margin","onClick","size","map","_temp","Upload","props","resetUploadEdits","updateUploadEdits","uploadEdits","Upload_v4","collectionSlug","initialState","onChange","uploadConfig","UploadControls","setUploadControlFile","setUploadControlFileName","setUploadControlFileUrl","uploadControlFile","uploadControlFileName","uploadControlFileUrl","config","routes","api","setModified","id","data","docPermissions","setUploadStatus","isFormSubmitting","errorMessage","setValue","showError","path","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","urlInputRef","inputRef","useServerSideFetch","pasteURL","allowList","handleFileChange","file","isNewFile","File","URL","createObjectURL","renameFile","fileToChange","newName","newFile","type","lastModified","handleFileNameChange","e","updatedFileName","target","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","handleUrlSubmit","clientResponse","fetch","ok","Error","status","blob","fileName","decodeURIComponent","split","pop","_clientError","error","encodeURIComponent","serverResponse","apiRoute","_serverError","current","canRemoveUpload","update","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","acceptMimeTypes","mimeTypes","join","imageCacheTag","cacheTags","updatedAt","handleControlFileUrl","handleControlFile","filter","message","customUploadActions","doc","handleRemove","hideRemoveFile","hideFileInputOnCreate","click","accept","hidden","ref","title","icon","round","tooltip","Header","slug","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","label","CustomAction","i"],"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { formatAdminURL, isImage } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm, useFormProcessing } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { UploadControlsProvider, useUploadControls } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport './index.css'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n if (value && (!value.name || value.name === '')) {\n return 'A file name is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n const { openModal } = useModal()\n\n const fileTypeIsAdjustable =\n isImage(mimeType) && mimeType !== 'image/svg+xml' && mimeType !== 'image/jxl'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) {\n return null\n }\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__previewSizes`}\n margin={false}\n onClick={() => {\n openModal(sizePreviewSlug)\n }}\n size=\"medium\"\n >\n {t('upload:previewSizes')}\n </Button>\n )}\n {enableAdjustments && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__edit`}\n margin={false}\n onClick={() => {\n openModal(editDrawerSlug)\n }}\n size=\"medium\"\n >\n {t('upload:editImage')}\n </Button>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n readonly UploadControls?: React.ReactNode\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n return (\n <UploadControlsProvider>\n <Upload_v4\n {...props}\n resetUploadEdits={resetUploadEdits}\n updateUploadEdits={updateUploadEdits}\n uploadEdits={uploadEdits}\n />\n </UploadControlsProvider>\n )\n}\n\nexport type UploadProps_v4 = {\n readonly resetUploadEdits?: () => void\n readonly updateUploadEdits?: (args: UploadEdits) => void\n readonly uploadEdits?: UploadEdits\n} & UploadProps\n\nexport const Upload_v4: React.FC<UploadProps_v4> = (props) => {\n const {\n collectionSlug,\n customActions,\n initialState,\n onChange,\n resetUploadEdits,\n updateUploadEdits,\n uploadConfig,\n UploadControls,\n uploadEdits,\n } = props\n\n const {\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n uploadControlFile,\n uploadControlFileName,\n uploadControlFileUrl,\n } = useUploadControls()\n\n const {\n config: {\n routes: { api },\n },\n } = useConfig()\n\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { id, data, docPermissions, setUploadStatus } = useDocumentInfo()\n const isFormSubmitting = useFormProcessing()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const urlInputRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const useServerSideFetch =\n typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0\n\n const handleFileChange = useCallback(\n ({ file, isNewFile = true }: { file: File | null; isNewFile?: boolean }) => {\n if (isNewFile && file instanceof File) {\n setFileSrc(URL.createObjectURL(file))\n }\n\n setValue(file)\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n\n if (typeof onChange === 'function') {\n onChange(file)\n }\n },\n [onChange, setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl],\n )\n\n const renameFile = (fileToChange: File, newName: string): File => {\n // Creating a new File object with updated properties\n const newFile = new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n return newFile\n }\n\n const handleFileNameChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n\n if (value) {\n handleFileChange({ file: renameFile(value, updatedFileName), isNewFile: false })\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange({ file: fileToUpload })\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange({ file: null })\n setFileSrc('')\n setFileUrl('')\n resetUploadEdits()\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n }, [\n handleFileChange,\n resetUploadEdits,\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n ])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handleUrlSubmit = useCallback(async () => {\n if (!fileUrl || uploadConfig?.pasteURL === false) {\n return\n }\n\n setUploadStatus('uploading')\n try {\n // Attempt client-side fetch\n const clientResponse = await fetch(fileUrl)\n\n if (!clientResponse.ok) {\n throw new Error(`Fetch failed with status: ${clientResponse.status}`)\n }\n\n const blob = await clientResponse.blob()\n const fileName = uploadControlFileName || decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n return // Exit if client-side fetch succeeds\n } catch (_clientError) {\n if (!useServerSideFetch) {\n // If server-side fetch is not enabled, show client-side error\n toast.error('Failed to fetch the file.')\n setUploadStatus('failed')\n return\n }\n }\n\n // Attempt server-side fetch if client-side fetch fails and useServerSideFetch is true\n try {\n const pasteURL: `/${string}` = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`\n const serverResponse = await fetch(\n formatAdminURL({\n apiRoute: api,\n path: pasteURL,\n }),\n )\n\n if (!serverResponse.ok) {\n throw new Error(`Fetch failed with status: ${serverResponse.status}`)\n }\n\n const blob = await serverResponse.blob()\n const fileName = decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n } catch (_serverError) {\n toast.error('The provided URL is not allowed.')\n setUploadStatus('failed')\n }\n }, [\n api,\n collectionSlug,\n fileUrl,\n handleFileChange,\n id,\n setUploadStatus,\n uploadConfig,\n uploadControlFileName,\n useServerSideFetch,\n ])\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n // urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n useEffect(() => {\n if (isFormSubmitting) {\n setRemovedFile(false)\n }\n }, [isFormSubmitting])\n\n const canRemoveUpload = docPermissions?.update\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n\n const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt\n\n useEffect(() => {\n const handleControlFileUrl = async () => {\n if (uploadControlFileUrl) {\n setFileUrl(uploadControlFileUrl)\n await handleUrlSubmit()\n }\n }\n\n void handleControlFileUrl()\n }, [uploadControlFileUrl, handleUrlSubmit])\n\n useEffect(() => {\n const handleControlFile = () => {\n if (uploadControlFile) {\n handleFileChange({ file: uploadControlFile })\n }\n }\n\n void handleControlFile()\n }, [uploadControlFile, handleFileChange])\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {data && data.filename && !removedFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={data}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n hideRemoveFile={uploadConfig.hideRemoveFile}\n imageCacheTag={imageCacheTag}\n uploadConfig={uploadConfig}\n />\n )}\n {((!uploadConfig.hideFileInputOnCreate && !data?.filename) || removedFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneButtons`}>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }}\n size=\"medium\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n {uploadConfig?.pasteURL !== false && (\n <Fragment>\n <span className={`${baseClass}__orText`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n setShowUrlInput(true)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n size=\"medium\"\n >\n {t('upload:pasteURL')}\n </Button>\n </Fragment>\n )}\n\n {UploadControls ? UploadControls : null}\n </div>\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n title={fileUrl}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n onClick={() => {\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n title={filename || value.name}\n type=\"text\"\n value={filename || value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && data?.filename && !removedFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || data?.filename) && (\n <EditDepthProvider>\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || data?.filename}\n fileSrc={data?.url || fileSrc}\n imageCacheTag={imageCacheTag}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || data?.focalX || 50,\n y: uploadEdits?.focalPoint?.y || data?.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n </EditDepthProvider>\n )}\n {data && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: data.filename })}\n >\n <PreviewSizes doc={data} imageCacheTag={imageCacheTag} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,EAAEC,OAAO,QAAQ;AACxC,OAAOC,KAAA,IAASC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAC1E,SAASC,KAAK,QAAQ;AAEtB,SAASC,UAAU,QAAQ;AAC3B,SAASC,cAAc,QAAQ;AAC/B,SAASC,OAAO,EAAEC,iBAAiB,QAAQ;AAC3C,SAASC,QAAQ,QAAQ;AACzB,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,iBAAiB,QAAQ;AAClC,SAASC,cAAc,QAAQ;AAC/B,SAASC,sBAAsB,EAAEC,iBAAiB,QAAQ;AAC1D,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,SAASC,MAAM,QAAQ;AACvB,SAASC,QAAQ,QAAQ;AACzB,SAASC,UAAU,QAAQ;AAC3B,OAAO;AACP,SAASC,WAAW,QAAQ;AAC5B,SAASC,YAAY,QAAQ;AAC7B,SAASC,SAAS,QAAQ;AAE1B,MAAMC,SAAA,GAAY;AAClB,OAAO,MAAMC,cAAA,GAAiB;AAC9B,OAAO,MAAMC,eAAA,GAAkB;AAE/B,MAAMC,QAAA,GAAYC,KAAA;EAChB,IAAI,CAACA,KAAA,IAASA,KAAA,KAAUC,SAAA,EAAW;IACjC,OAAO;EACT;EAEA,IAAID,KAAA,KAAU,CAACA,KAAA,CAAME,IAAI,IAAIF,KAAA,CAAME,IAAI,KAAK,EAAC,GAAI;IAC/C,OAAO;EACT;EAEA,OAAO;AACT;AASA,OAAO,MAAMC,aAAA,GAAgBC,EAAA;EAAA,MAAAC,CAAA,GAAAvC,EAAA;EAAC;IAAAwC,aAAA;IAAAC,iBAAA;IAAAC,kBAAA;IAAAC;EAAA,IAAAL,EAKV;EAClB;IAAAM;EAAA,IAAczB,cAAA;EACd;IAAA0B;EAAA,IAAsB5C,QAAA;EAAA,IAAA6C,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAC,aAAA,IAAAD,CAAA,QAAAE,iBAAA,IAAAF,CAAA,QAAAG,kBAAA,IAAAH,CAAA,QAAAI,QAAA,IAAAJ,CAAA,QAAAM,SAAA,IAAAN,CAAA,QAAAK,CAAA;IAMbG,EAAA,GAAAC,MAAA,CAAAC,GAAA;IAAAC,GAAA;MAJT,MAAAC,oBAAA,GACEhD,OAAA,CAAQwC,QAAA,KAAaA,QAAA,KAAa,mBAAmBA,QAAA,KAAa;MAAA,IAEhE,CAACQ,oBAAA,KAAyB,CAACX,aAAA,IAAiBA,aAAA,CAAAY,MAAA,MAAyB;QAChEL,EAAA;QAAA,MAAAG,GAAA;MAAA;MAIPJ,EAAA,GAAAO,KAAA,CAAC;QAAAC,SAAA,EAAe,GAAAxB,SAAA,kBAA8B;QAAAyB,QAAA,GAC3CJ,oBAAA,IACCE,KAAA,CAAAjD,KAAA,CAAAC,QAAA;UAAAkD,QAAA,GACGb,kBAAA,IACCc,IAAA,CAAAjC,MAAA;YAAAkC,WAAA,EACc;YAAAH,SAAA,EACD,GAAAxB,SAAA,gBAA4B;YAAA4B,MAAA;YAAAC,OAAA,EAAAA,CAAA;cAGrCd,SAAA,CAAAb,eAAU;YAAA;YAAA4B,IAAA,EAEP;YAAAL,QAAA,EAEJX,CAAA,CAAE;UAAA,C,GAGNH,iBAAA,IACCe,IAAA,CAAAjC,MAAA;YAAAkC,WAAA,EACc;YAAAH,SAAA,EACD,GAAAxB,SAAA,QAAoB;YAAA4B,MAAA;YAAAC,OAAA,EAAAA,CAAA;cAG7Bd,SAAA,CAAAd,cAAU;YAAA;YAAA6B,IAAA,EAEP;YAAAL,QAAA,EAEJX,CAAA,CAAE;UAAA,C;YAMVJ,aAAA,IACCA,aAAA,CAAAqB,GAAA,CAAAC,KAEA;MAAA,C;;;;;;;;;;;;;;;;;SAnCJhB,E;CAsCJ;AAWA,OAAO,MAAMiB,MAAA,GAAgCC,KAAA;EAAA,MAAAzB,CAAA,GAAAvC,EAAA;EAC3C;IAAAiE,gBAAA;IAAAC,iBAAA;IAAAC;EAAA,IAA6D7C,cAAA;EAAA,IAAAgB,EAAA;EAAA,IAAAC,CAAA,QAAAyB,KAAA,IAAAzB,CAAA,QAAA0B,gBAAA,IAAA1B,CAAA,QAAA2B,iBAAA,IAAA3B,CAAA,QAAA4B,WAAA;IAE3D7B,EAAA,GAAAkB,IAAA,CAAApC,sBAAA;MAAAmC,QAAA,EACEC,IAAA,CAAAY,SAAA;QAAA,GACMJ,KAAK;QAAAC,gBAAA;QAAAC,iBAAA;QAAAC;MAAA,C;;;;;;;;;;SAFb7B,E;CASJ;AAQA,OAAO,MAAM8B,SAAA,GAAuCJ,KAAA;EAClD,MAAM;IACJK,cAAc;IACd7B,aAAa;IACb8B,YAAY;IACZC,QAAQ;IACRN,gBAAgB;IAChBC,iBAAiB;IACjBM,YAAY;IACZC,cAAc;IACdN;EAAW,CACZ,GAAGH,KAAA;EAEJ,MAAM;IACJU,oBAAoB;IACpBC,wBAAwB;IACxBC,uBAAuB;IACvBC,iBAAiB;IACjBC,qBAAqB;IACrBC;EAAoB,CACrB,GAAG1D,iBAAA;EAEJ,MAAM;IACJ2D,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC;MAAG;IAAE;EAChB,CACF,GAAGlE,SAAA;EAEJ,MAAM;IAAE4B;EAAC,CAAE,GAAGzB,cAAA;EACd,MAAM;IAAEgE;EAAW,CAAE,GAAGtE,OAAA;EACxB,MAAM;IAAEuE,EAAE;IAAEC,IAAI;IAAEC,cAAc;IAAEC;EAAe,CAAE,GAAGtE,eAAA;EACtD,MAAMuE,gBAAA,GAAmB1E,iBAAA;EACzB,MAAM;IAAE2E,YAAY;IAAEC,QAAQ;IAAEC,SAAS;IAAEzD;EAAK,CAAE,GAAGnB,QAAA,CAAe;IAClE6E,IAAA,EAAM;IACN3D;EACF;EAEA,MAAM,CAAC4D,OAAA,EAASC,UAAA,CAAW,GAAGrF,QAAA,CAAwB;EACtD,MAAM,CAACsF,WAAA,EAAaC,cAAA,CAAe,GAAGvF,QAAA,CAAS;EAC/C,MAAM,CAACwF,QAAA,EAAUC,WAAA,CAAY,GAAGzF,QAAA,CAAiByB,KAAA,EAAOE,IAAA,IAAQ;EAChE,MAAM,CAAC+D,YAAA,EAAcC,eAAA,CAAgB,GAAG3F,QAAA,CAAS;EACjD,MAAM,CAAC4F,OAAA,EAASC,UAAA,CAAW,GAAG7F,QAAA,CAAiB;EAE/C,MAAM8F,WAAA,GAAc/F,MAAA,CAAyB;EAC7C,MAAMgG,QAAA,GAAWhG,MAAA,CAAyB;EAE1C,MAAMiG,kBAAA,GACJ,OAAOjC,YAAA,EAAckC,QAAA,KAAa,YAAYlC,YAAA,CAAakC,QAAQ,CAACC,SAAS,EAAEvD,MAAA,GAAS;EAE1F,MAAMwD,gBAAA,GAAmBtG,WAAA,CACvB,CAAC;IAAEuG,IAAI;IAAEC,SAAA,GAAY;EAAI,CAA8C;IACrE,IAAIA,SAAA,IAAaD,IAAA,YAAgBE,IAAA,EAAM;MACrCjB,UAAA,CAAWkB,GAAA,CAAIC,eAAe,CAACJ,IAAA;IACjC;IAEAnB,QAAA,CAASmB,IAAA;IACTT,eAAA,CAAgB;IAChBxB,uBAAA,CAAwB;IACxBD,wBAAA,CAAyB;IACzBD,oBAAA,CAAqB;IAErB,IAAI,OAAOH,QAAA,KAAa,YAAY;MAClCA,QAAA,CAASsC,IAAA;IACX;EACF,GACA,CAACtC,QAAA,EAAUmB,QAAA,EAAUhB,oBAAA,EAAsBC,wBAAA,EAA0BC,uBAAA,CAAwB;EAG/F,MAAMsC,UAAA,GAAaA,CAACC,YAAA,EAAoBC,OAAA;IACtC;IACA,MAAMC,OAAA,GAAU,IAAIN,IAAA,CAAK,CAACI,YAAA,CAAa,EAAEC,OAAA,EAAS;MAChDE,IAAA,EAAMH,YAAA,CAAaG,IAAI;MACvBC,YAAA,EAAcJ,YAAA,CAAaI;IAC7B;IACA,OAAOF,OAAA;EACT;EAEA,MAAMG,oBAAA,GAAuBpH,KAAA,CAAME,WAAW,CAC3CmH,CAAA;IACC,MAAMC,eAAA,GAAkBD,CAAA,CAAEE,MAAM,CAACzF,KAAK;IAEtC,IAAIA,KAAA,EAAO;MACT0E,gBAAA,CAAiB;QAAEC,IAAA,EAAMK,UAAA,CAAWhF,KAAA,EAAOwF,eAAA;QAAkBZ,SAAA,EAAW;MAAM;MAC9EZ,WAAA,CAAYwB,eAAA;IACd;EACF,GACA,CAACd,gBAAA,EAAkB1E,KAAA,CAAM;EAG3B,MAAM0F,mBAAA,GAAsBtH,WAAA,CACzBuH,KAAA;IACC,MAAMC,YAAA,GAAeD,KAAA,GAAQ,EAAE;IAC/BjB,gBAAA,CAAiB;MAAEC,IAAA,EAAMiB;IAAa;EACxC,GACA,CAAClB,gBAAA,CAAiB;EAGpB,MAAMmB,iBAAA,GAAoBzH,WAAA,CAAY;IACpC0F,cAAA,CAAe;IACfY,gBAAA,CAAiB;MAAEC,IAAA,EAAM;IAAK;IAC9Bf,UAAA,CAAW;IACXQ,UAAA,CAAW;IACXrC,gBAAA;IACAmC,eAAA,CAAgB;IAChBxB,uBAAA,CAAwB;IACxBD,wBAAA,CAAyB;IACzBD,oBAAA,CAAqB;EACvB,GAAG,CACDkC,gBAAA,EACA3C,gBAAA,EACAS,oBAAA,EACAC,wBAAA,EACAC,uBAAA,CACD;EAED,MAAMoD,WAAA,GAAc1H,WAAA,CACjB2H,IAAA;IACC9C,WAAA,CAAY;IACZjB,iBAAA,CAAkB+D,IAAA;EACpB,GACA,CAAC9C,WAAA,EAAajB,iBAAA,CAAkB;EAGlC,MAAMgE,eAAA,GAAkB5H,WAAA,CAAY;IAClC,IAAI,CAAC+F,OAAA,IAAW7B,YAAA,EAAckC,QAAA,KAAa,OAAO;MAChD;IACF;IAEAnB,eAAA,CAAgB;IAChB,IAAI;MACF;MACA,MAAM4C,cAAA,GAAiB,MAAMC,KAAA,CAAM/B,OAAA;MAEnC,IAAI,CAAC8B,cAAA,CAAeE,EAAE,EAAE;QACtB,MAAM,IAAIC,KAAA,CAAM,6BAA6BH,cAAA,CAAeI,MAAM,EAAE;MACtE;MAEA,MAAMC,IAAA,GAAO,MAAML,cAAA,CAAeK,IAAI;MACtC,MAAMC,QAAA,GAAW3D,qBAAA,IAAyB4D,kBAAA,CAAmBrC,OAAA,CAAQsC,KAAK,CAAC,KAAKC,GAAG,MAAM;MACzF,MAAM/B,MAAA,GAAO,IAAIE,IAAA,CAAK,CAACyB,IAAA,CAAK,EAAEC,QAAA,EAAU;QAAEnB,IAAA,EAAMkB,IAAA,CAAKlB;MAAK;MAE1DV,gBAAA,CAAiB;QAAEC,IAAA,EAAAA;MAAK;MACxBtB,eAAA,CAAgB;MAChB,QAAO;IACT,EAAE,OAAOsD,YAAA,EAAc;MACrB,IAAI,CAACpC,kBAAA,EAAoB;QACvB;QACA/F,KAAA,CAAMoI,KAAK,CAAC;QACZvD,eAAA,CAAgB;QAChB;MACF;IACF;IAEA;IACA,IAAI;MACF,MAAMmB,QAAA,GAAyB,IAAIrC,cAAA,aAA2Be,EAAA,GAAK,IAAIA,EAAA,GAAK,GAAG,UAAU2D,kBAAA,CAAmB1C,OAAA,GAAU;MACtH,MAAM2C,cAAA,GAAiB,MAAMZ,KAAA,CAC3BlI,cAAA,CAAe;QACb+I,QAAA,EAAU/D,GAAA;QACVU,IAAA,EAAMc;MACR;MAGF,IAAI,CAACsC,cAAA,CAAeX,EAAE,EAAE;QACtB,MAAM,IAAIC,KAAA,CAAM,6BAA6BU,cAAA,CAAeT,MAAM,EAAE;MACtE;MAEA,MAAMC,MAAA,GAAO,MAAMQ,cAAA,CAAeR,IAAI;MACtC,MAAMC,UAAA,GAAWC,kBAAA,CAAmBrC,OAAA,CAAQsC,KAAK,CAAC,KAAKC,GAAG,MAAM;MAChE,MAAM/B,MAAA,GAAO,IAAIE,IAAA,CAAK,CAACyB,MAAA,CAAK,EAAEC,UAAA,EAAU;QAAEnB,IAAA,EAAMkB,MAAA,CAAKlB;MAAK;MAE1DV,gBAAA,CAAiB;QAAEC,IAAA,EAAAA;MAAK;MACxBtB,eAAA,CAAgB;IAClB,EAAE,OAAO2D,YAAA,EAAc;MACrBxI,KAAA,CAAMoI,KAAK,CAAC;MACZvD,eAAA,CAAgB;IAClB;EACF,GAAG,CACDL,GAAA,EACAb,cAAA,EACAgC,OAAA,EACAO,gBAAA,EACAxB,EAAA,EACAG,eAAA,EACAf,YAAA,EACAM,qBAAA,EACA2B,kBAAA,CACD;EAEDlG,SAAA,CAAU;IACR,IAAI+D,YAAA,EAAcuC,IAAA,EAAM3E,KAAA,YAAiB6E,IAAA,EAAM;MAC7CjB,UAAA,CAAWkB,GAAA,CAAIC,eAAe,CAAC3C,YAAA,CAAauC,IAAI,CAAC3E,KAAK;MACtD8D,cAAA,CAAe;IACjB;EACF,GAAG,CAAC1B,YAAA,CAAa;EAEjB/D,SAAA,CAAU;IACR,IAAI4F,YAAA,IAAgBI,WAAA,CAAY4C,OAAO,EAAE;MACvC;IAAA;EAEJ,GAAG,CAAChD,YAAA,CAAa;EAEjB5F,SAAA,CAAU;IACR,IAAIiF,gBAAA,EAAkB;MACpBQ,cAAA,CAAe;IACjB;EACF,GAAG,CAACR,gBAAA,CAAiB;EAErB,MAAM4D,eAAA,GAAkB9D,cAAA,EAAgB+D,MAAA;EAExC,MAAMC,aAAA,GAAgB9E,YAAA,EAAc+E,UAAA,EAAYnG,MAAA,GAAS;EACzD,MAAMoG,gBAAA,GAAmBC,OAAA,CAAQjF,YAAA,EAAckF,aAAA;EAC/C;EACA,MAAMC,iBAAA,GAAoBnF,YAAA,EAAcoF,UAAA,KAAe;EAEvD,MAAM;IAAEC,IAAA,EAAMC,QAAA,GAAW,IAAI;IAAEF,UAAA,GAAa;EAAI,CAAE,GAAGpF,YAAA;EAErD,MAAMuF,cAAA,GAAiBH,UAAA,KAAeN,aAAA,IAAiBE,gBAAA,IAAoBG,iBAAgB;EAE3F,MAAMK,eAAA,GAAkBxF,YAAA,CAAayF,SAAS,EAAEC,IAAA,CAAK;EAErD,MAAMC,aAAA,GAAgB3F,YAAA,EAAc4F,SAAA,IAAa/E,IAAA,EAAMgF,SAAA;EAEvD9J,SAAA,CAAU;IACR,MAAM+J,oBAAA,GAAuB,MAAAA,CAAA;MAC3B,IAAIvF,oBAAA,EAAsB;QACxBuB,UAAA,CAAWvB,oBAAA;QACX,MAAMmD,eAAA;MACR;IACF;IAEA,KAAKoC,oBAAA;EACP,GAAG,CAACvF,oBAAA,EAAsBmD,eAAA,CAAgB;EAE1C3H,SAAA,CAAU;IACR,MAAMgK,iBAAA,GAAoBA,CAAA;MACxB,IAAI1F,iBAAA,EAAmB;QACrB+B,gBAAA,CAAiB;UAAEC,IAAA,EAAMhC;QAAkB;MAC7C;IACF;IAEA,KAAK0F,iBAAA;EACP,GAAG,CAAC1F,iBAAA,EAAmB+B,gBAAA,CAAiB;EAExC,oBACEvD,KAAA,CAAC;IAAIC,SAAA,EAAW,CAAC1C,cAAA,EAAgBkB,SAAA,CAAU,CAAC0I,MAAM,CAACf,OAAA,EAASS,IAAI,CAAC;4BAC/D1G,IAAA,CAAC7C,UAAA;MAAW8J,OAAA,EAAShF,YAAA;MAAcE,SAAA,EAAWA;QAC7CN,IAAA,IAAQA,IAAA,CAAKY,QAAQ,IAAI,CAACF,WAAA,iBACzBvC,IAAA,CAAC7B,WAAA;MACC0C,cAAA,EAAgBA,cAAA;MAChBqG,mBAAA,EAAqBlI,aAAA;MACrBmI,GAAA,EAAKtF,IAAA;MACL5C,iBAAA,EAAmBqH,QAAA,IAAYC,cAAA;MAC/Ba,YAAA,EAAcxB,eAAA,GAAkBrB,iBAAA,GAAoB5F,SAAA;MACpDmH,aAAA,EAAeA,aAAA;MACfuB,cAAA,EAAgBrG,YAAA,CAAaqG,cAAc;MAC3CV,aAAA,EAAeA,aAAA;MACf3F,YAAA,EAAcA;QAGhB,EAAEA,YAAA,CAAasG,qBAAqB,IAAI,CAACzF,IAAA,EAAMY,QAAA,IAAaF,WAAU,kBACtE1C,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGxB,SAAA,UAAmB;iBACnC,CAACI,KAAA,IAAS,CAACiE,YAAA,iBACV3C,IAAA,CAAC/B,QAAA;QAAS8C,QAAA,EAAUqD,mBAAA;kBAClB,aAAAvE,KAAA,CAAC;UAAIC,SAAA,EAAW,GAAGxB,SAAA,mBAA4B;kCAC7CuB,KAAA,CAAC;YAAIC,SAAA,EAAW,GAAGxB,SAAA,mBAA4B;oCAC7C0B,IAAA,CAACjC,MAAA;cACCkC,WAAA,EAAY;cACZE,OAAA,EAASA,CAAA;gBACP,IAAI6C,QAAA,CAAS2C,OAAO,EAAE;kBACpB3C,QAAA,CAAS2C,OAAO,CAAC4B,KAAK;gBACxB;cACF;cACAnH,IAAA,EAAK;wBAEJhB,CAAA,CAAE;6BAELY,IAAA,CAAC;cACCwH,MAAA,EAAQhB,eAAA;cACR,eAAY;cACZ1G,SAAA,EAAW,GAAGxB,SAAA,gBAAyB;cACvCmJ,MAAM;cACN1G,QAAA,EAAWkD,GAAA;gBACT,IAAIA,GAAA,CAAEE,MAAM,CAACE,KAAK,IAAIJ,GAAA,CAAEE,MAAM,CAACE,KAAK,CAACzE,MAAM,GAAG,GAAG;kBAC/CwE,mBAAA,CAAoBH,GAAA,CAAEE,MAAM,CAACE,KAAK;gBACpC;cACF;cACAqD,GAAA,EAAK1E,QAAA;cACLc,IAAA,EAAK;gBAEN9C,YAAA,EAAckC,QAAA,KAAa,sBAC1BrD,KAAA,CAAChD,QAAA;sCACCmD,IAAA,CAAC;gBAAKF,SAAA,EAAW,GAAGxB,SAAA,UAAmB;0BAAGc,CAAA,CAAE;+BAC5CY,IAAA,CAACjC,MAAA;gBACCkC,WAAA,EAAY;gBACZE,OAAA,EAASA,CAAA;kBACPyC,eAAA,CAAgB;kBAChBxB,uBAAA,CAAwB;kBACxBF,oBAAA,CAAqB;kBACrBC,wBAAA,CAAyB;gBAC3B;gBACAf,IAAA,EAAK;0BAEJhB,CAAA,CAAE;;gBAKR6B,cAAA,GAAiBA,cAAA,GAAiB;2BAErCpB,KAAA,CAAC;YAAEC,SAAA,EAAW,GAAGxB,SAAA,mBAA4B;uBAC1Cc,CAAA,CAAE,eAAc,KAAEA,CAAA,CAAE;;;UAK5BuD,YAAA,iBACC9C,KAAA,CAACjD,KAAA,CAAMC,QAAQ;gCACbgD,KAAA,CAAC;UAAIC,SAAA,EAAW,GAAGxB,SAAA,oBAA6B;kCAE9C0B,IAAA,CAAC;YACCF,SAAA,EAAW,GAAGxB,SAAA,eAAwB;YACtCyC,QAAA,EAAWkD,GAAA;cACTnB,UAAA,CAAWmB,GAAA,CAAEE,MAAM,CAACzF,KAAK;YAC3B;YACAgJ,GAAA,EAAK3E,WAAA;YACL4E,KAAA,EAAO9E,OAAA;YACPiB,IAAA,EAAK;YACLpF,KAAA,EAAOmE;2BAET7C,IAAA,CAAC;YAAIF,SAAA,EAAW,GAAGxB,SAAA,iBAA0B;sBAC3C,aAAA0B,IAAA,CAAC;cACCF,SAAA,EAAW,GAAGxB,SAAA,YAAqB;cACnC6B,OAAA,EAASA,CAAA;gBACP,KAAKuE,eAAA;cACP;cACAZ,IAAA,EAAK;wBAEJ1E,CAAA,CAAE;;;yBAITY,IAAA,CAACjC,MAAA;UACCkC,WAAA,EAAY;UACZH,SAAA,EAAW,GAAGxB,SAAA,UAAmB;UACjCsJ,IAAA,EAAK;UACLzH,OAAA,EAASA,CAAA;YACPyC,eAAA,CAAgB;YAChBxB,uBAAA,CAAwB;YACxBF,oBAAA,CAAqB;YACrBC,wBAAA,CAAyB;UAC3B;UACA0G,KAAK;UACLC,OAAA,EAAS1I,CAAA,CAAE;;UAIhBV,KAAA,IAAS2D,OAAA,iBACRxC,KAAA,CAACjD,KAAA,CAAMC,QAAQ;gCACbmD,IAAA,CAAC;UAAIF,SAAA,EAAW,GAAGxB,SAAA,kBAA2B;oBAC5C,aAAA0B,IAAA,CAAC3B,SAAA;YACCwC,cAAA,EAAgBA,cAAA;YAChBwB,OAAA,EAAS1F,OAAA,CAAQ+B,KAAA,CAAMoF,IAAI,IAAIzB,OAAA,GAAU;;yBAG7CxC,KAAA,CAAC;UAAIC,SAAA,EAAW,GAAGxB,SAAA,oBAA6B;kCAE9C0B,IAAA,CAAC;YACCF,SAAA,EAAW,GAAGxB,SAAA,YAAqB;YACnCyC,QAAA,EAAUiD,oBAAA;YACV2D,KAAA,EAAOlF,QAAA,IAAY/D,KAAA,CAAME,IAAI;YAC7BkF,IAAA,EAAK;YACLpF,KAAA,EAAO+D,QAAA,IAAY/D,KAAA,CAAME;2BAE3BoB,IAAA,CAACnB,aAAA;YACCG,aAAA,EAAeA,aAAA;YACfC,iBAAA,EAAmBqH,QAAA,IAAYC,cAAA;YAC/BrH,kBAAA,EAAoB4G,aAAA,IAAiBjE,IAAA,EAAMY,QAAA,IAAY,CAACF,WAAA;YACxDpD,QAAA,EAAUT,KAAA,CAAMoF;;yBAGpB9D,IAAA,CAACjC,MAAA;UACCkC,WAAA,EAAY;UACZH,SAAA,EAAW,GAAGxB,SAAA,UAAmB;UACjCsJ,IAAA,EAAK;UACLzH,OAAA,EAASoE,iBAAA;UACTsD,KAAK;UACLC,OAAA,EAAS1I,CAAA,CAAE;;;QAMnB,CAAAV,KAAA,IAASmD,IAAA,EAAMY,QAAO,kBACtBzC,IAAA,CAACtC,iBAAA;gBACC,aAAAsC,IAAA,CAAChC,MAAA;QAAO+J,MAAA,EAAQ;QAAMC,IAAA,EAAMzJ,cAAA;kBAC1B,aAAAyB,IAAA,CAAC9B,UAAA;UACC+G,QAAA,EAAUvG,KAAA,EAAOE,IAAA,IAAQiD,IAAA,EAAMY,QAAA;UAC/BJ,OAAA,EAASR,IAAA,EAAMoG,GAAA,IAAO5F,OAAA;UACtBsE,aAAA,EAAeA,aAAA;UACfuB,WAAA,EAAavH,WAAA,EAAa0F,IAAA,IAAQ1H,SAAA;UAClCwJ,iBAAA,EAAmB;YACjBC,CAAA,EAAGzH,WAAA,EAAayF,UAAA,EAAYgC,CAAA,IAAKvG,IAAA,EAAMwG,MAAA,IAAU;YACjDC,CAAA,EAAG3H,WAAA,EAAayF,UAAA,EAAYkC,CAAA,IAAKzG,IAAA,EAAM0G,MAAA,IAAU;UACnD;UACAC,MAAA,EAAQhE,WAAA;UACR8B,QAAA,EAAUA,QAAA;UACVC,cAAA,EAAgBA;;;QAKvB1E,IAAA,IAAQiE,aAAA,iBACP9F,IAAA,CAAChC,MAAA;MACC8B,SAAA,EAAW,GAAGxB,SAAA,iBAA0B;MACxCmK,UAAU;MACVT,IAAA,EAAMxJ,eAAA;MACNmJ,KAAA,EAAOvI,CAAA,CAAE,mBAAmB;QAAEsJ,KAAA,EAAO7G,IAAA,CAAKY;MAAS;gBAEnD,aAAAzC,IAAA,CAAC5B,YAAA;QAAa+I,GAAA,EAAKtF,IAAA;QAAM8E,aAAA,EAAeA,aAAA;QAAe3F,YAAA,EAAcA;;;;AAK/E;AA9f6B,SAAAV,MAAAqI,YAAA,EAAAC,CAAA;EAAA,OAmDZ5I,IAAA,CAAApD,KAAA,CAAAC,QAAA;IAAAkD,QAAA,EAAyB4I;EAAA,GAAJC,CAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useModal","formatAdminURL","isImage","React","Fragment","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","TextInput","useForm","useFormProcessing","useField","useConfig","useDocumentInfo","EditDepthProvider","useTranslation","UploadControlsProvider","useUploadControls","useUploadEdits","Button","Drawer","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","pasteURLDrawerSlug","UploadFromURLModal","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","name","UploadActions","t0","$","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","openModal","t1","t2","Symbol","for","bb0","fileTypeIsAdjustable","length","_jsxs","className","children","_jsx","buttonStyle","margin","onClick","size","map","_temp","Upload","props","resetUploadEdits","updateUploadEdits","uploadEdits","UploadComponent","collectionSlug","initialState","onChange","uploadConfig","UploadControls","setUploadControlFile","setUploadControlFileName","setUploadControlFileUrl","uploadControlFile","uploadControlFileName","uploadControlFileUrl","config","routes","api","closeModal","setModified","id","data","docPermissions","setUploadStatus","isFormSubmitting","errorMessage","setValue","showError","path","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","fileUrl","setFileUrl","inputRef","useServerSideFetch","pasteURL","allowList","handleFileChange","file","isNewFile","File","URL","createObjectURL","renameFile","fileToChange","newName","newFile","type","lastModified","handleFileNameChange","e","updatedFileName","target","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","isValidUrl","Boolean","canParse","handleUrlSubmit","clientResponse","fetch","ok","Error","status","blob","rawSegment","split","pop","fileName","decodeURIComponent","_clientError","error","encodeURIComponent","serverResponse","apiRoute","_serverError","startsWith","revokeObjectURL","canRemoveUpload","update","hasImageSizes","imageSizes","hasResizeOptions","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","acceptMimeTypes","mimeTypes","join","imageCacheTag","cacheTags","updatedAt","handleControlFileUrl","handleControlFile","drawers","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","slug","title","label","doc","filter","message","customUploadActions","handleRemove","hideRemoveFile","hideFileInputOnCreate","current","click","accept","hidden","ref","icon","round","tooltip","CustomAction","i"],"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { formatAdminURL, isImage } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { TextInput } from '../../fields/Text/Input.js'\nimport { useForm, useFormProcessing } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { UploadControlsProvider, useUploadControls } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport './index.css'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\nimport { pasteURLDrawerSlug, UploadFromURLModal } from './UploadFromURLModal/index.js'\n\nexport { pasteURLDrawerSlug }\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n if (value && (!value.name || value.name === '')) {\n return 'A file name is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n const { openModal } = useModal()\n\n const fileTypeIsAdjustable =\n isImage(mimeType) && mimeType !== 'image/svg+xml' && mimeType !== 'image/jxl'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) {\n return null\n }\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__previewSizes`}\n margin={false}\n onClick={() => {\n openModal(sizePreviewSlug)\n }}\n size=\"medium\"\n >\n {t('upload:previewSizes')}\n </Button>\n )}\n {enableAdjustments && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__edit`}\n margin={false}\n onClick={() => {\n openModal(editDrawerSlug)\n }}\n size=\"medium\"\n >\n {t('upload:editImage')}\n </Button>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n readonly UploadControls?: React.ReactNode\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n return (\n <UploadControlsProvider>\n <UploadComponent\n {...props}\n resetUploadEdits={resetUploadEdits}\n updateUploadEdits={updateUploadEdits}\n uploadEdits={uploadEdits}\n />\n </UploadControlsProvider>\n )\n}\n\ntype UploadComponentProps = {\n readonly resetUploadEdits?: () => void\n readonly updateUploadEdits?: (args: UploadEdits) => void\n readonly uploadEdits?: UploadEdits\n} & UploadProps\n\nconst UploadComponent: React.FC<UploadComponentProps> = (props) => {\n const {\n collectionSlug,\n customActions,\n initialState,\n onChange,\n resetUploadEdits,\n updateUploadEdits,\n uploadConfig,\n UploadControls,\n uploadEdits,\n } = props\n\n const {\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n uploadControlFile,\n uploadControlFileName,\n uploadControlFileUrl,\n } = useUploadControls()\n\n const {\n config: {\n routes: { api },\n },\n } = useConfig()\n\n const { t } = useTranslation()\n const { closeModal, openModal } = useModal()\n const { setModified } = useForm()\n const { id, data, docPermissions, setUploadStatus } = useDocumentInfo()\n const isFormSubmitting = useFormProcessing()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const useServerSideFetch =\n typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0\n\n const handleFileChange = useCallback(\n ({ file, isNewFile = true }: { file: File | null; isNewFile?: boolean }) => {\n if (isNewFile && file instanceof File) {\n setFileSrc(URL.createObjectURL(file))\n }\n\n setValue(file)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n\n if (typeof onChange === 'function') {\n onChange(file)\n }\n },\n [onChange, setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl],\n )\n\n const renameFile = (fileToChange: File, newName: string): File => {\n // Creating a new File object with updated properties\n const newFile = new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n return newFile\n }\n\n const handleFileNameChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n\n if (value) {\n handleFileChange({ file: renameFile(value, updatedFileName), isNewFile: false })\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange({ file: fileToUpload })\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange({ file: null })\n setFileSrc('')\n setFileUrl('')\n resetUploadEdits()\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n }, [\n handleFileChange,\n resetUploadEdits,\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n ])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const isValidUrl = Boolean(fileUrl && URL.canParse(fileUrl))\n\n const handleUrlSubmit = useCallback(async () => {\n if (!fileUrl || !URL.canParse(fileUrl) || uploadConfig?.pasteURL === false) {\n return\n }\n\n setUploadStatus('uploading')\n try {\n // Attempt client-side fetch\n const clientResponse = await fetch(fileUrl)\n\n if (!clientResponse.ok) {\n throw new Error(`Fetch failed with status: ${clientResponse.status}`)\n }\n\n const blob = await clientResponse.blob()\n const rawSegment = fileUrl.split('/').pop() || ''\n const fileName = uploadControlFileName || decodeURIComponent(rawSegment.split('?')[0])\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n closeModal(pasteURLDrawerSlug)\n setFileUrl('')\n return // Exit if client-side fetch succeeds\n } catch (_clientError) {\n if (!useServerSideFetch) {\n // If server-side fetch is not enabled, show client-side error\n toast.error('Failed to fetch the file.')\n setUploadStatus('failed')\n return\n }\n }\n\n // Attempt server-side fetch if client-side fetch fails and useServerSideFetch is true\n try {\n const pasteURL: `/${string}` = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`\n const serverResponse = await fetch(\n formatAdminURL({\n apiRoute: api,\n path: pasteURL,\n }),\n )\n\n if (!serverResponse.ok) {\n throw new Error(`Fetch failed with status: ${serverResponse.status}`)\n }\n\n const blob = await serverResponse.blob()\n const rawSegment = fileUrl.split('/').pop() || ''\n const fileName = decodeURIComponent(rawSegment.split('?')[0])\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n closeModal(pasteURLDrawerSlug)\n setFileUrl('')\n } catch (_serverError) {\n toast.error('The provided URL is not allowed.')\n setUploadStatus('failed')\n }\n }, [\n api,\n closeModal,\n collectionSlug,\n fileUrl,\n handleFileChange,\n id,\n setUploadStatus,\n uploadConfig,\n uploadControlFileName,\n useServerSideFetch,\n ])\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n return () => {\n if (fileSrc?.startsWith('blob:')) {\n URL.revokeObjectURL(fileSrc)\n }\n }\n }, [fileSrc])\n\n useEffect(() => {\n if (isFormSubmitting) {\n setRemovedFile(false)\n }\n }, [isFormSubmitting])\n\n const canRemoveUpload = docPermissions?.update\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n\n const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt\n\n useEffect(() => {\n const handleControlFileUrl = async () => {\n if (uploadControlFileUrl) {\n setFileUrl(uploadControlFileUrl)\n await handleUrlSubmit()\n }\n }\n\n void handleControlFileUrl()\n }, [uploadControlFileUrl, handleUrlSubmit])\n\n useEffect(() => {\n const handleControlFile = () => {\n if (uploadControlFile) {\n handleFileChange({ file: uploadControlFile })\n }\n }\n\n void handleControlFile()\n }, [uploadControlFile, handleFileChange])\n\n const drawers = (\n <React.Fragment>\n {(value || data?.filename) && (\n <EditDepthProvider>\n <EditUpload\n fileName={value?.name || data?.filename}\n fileSrc={data?.url || fileSrc}\n imageCacheTag={imageCacheTag}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || data?.focalX || 50,\n y: uploadEdits?.focalPoint?.y || data?.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </EditDepthProvider>\n )}\n {data && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: data.filename })}\n >\n <PreviewSizes doc={data} imageCacheTag={imageCacheTag} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n {uploadConfig?.pasteURL !== false && (\n <UploadFromURLModal\n fileUrl={fileUrl}\n handleUrlSubmit={handleUrlSubmit}\n isValidUrl={isValidUrl}\n setFileUrl={setFileUrl}\n />\n )}\n </React.Fragment>\n )\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {data && data.filename && !removedFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={data}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n hideRemoveFile={uploadConfig.hideRemoveFile}\n imageCacheTag={imageCacheTag}\n uploadConfig={uploadConfig}\n />\n )}\n {((!uploadConfig.hideFileInputOnCreate && !data?.filename) || removedFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneButtons`}>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }}\n size=\"medium\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n {uploadConfig?.pasteURL !== false && (\n <Fragment>\n <span className={`${baseClass}__orText`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n openModal(pasteURLDrawerSlug)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n size=\"medium\"\n >\n {t('upload:pasteURL')}\n </Button>\n </Fragment>\n )}\n\n {UploadControls ? UploadControls : null}\n </div>\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n <TextInput\n label={t('upload:fileName')}\n onChange={handleFileNameChange}\n path=\"filename\"\n value={filename || value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && data?.filename && !removedFile}\n mimeType={value.type}\n />\n </div>\n </React.Fragment>\n )}\n </div>\n )}\n {drawers}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,6 +3,7 @@ import type { AddCondition, ReducedField, RemoveCondition, UpdateCondition, Upda
3
3
  export type Props = {
4
4
  readonly addCondition: AddCondition;
5
5
  readonly andIndex: number;
6
+ readonly disableRemoveButton: boolean;
6
7
  readonly fieldPath: string;
7
8
  readonly filterOptions?: ResolvedFilterOptions;
8
9
  readonly isFirstCondition: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,eAAe,EACf,UAAU,EACV,KAAK,EACN,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAA;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAA;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACtB,CAAA;AAED,OAAO,KAAK,EAAE,QAAQ,EAA2B,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAcvF,OAAO,aAAa,CAAA;AAIpB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAqLrC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAEvE,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,eAAe,EACf,UAAU,EACV,KAAK,EACN,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAA;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAA;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACtB,CAAA;AAED,OAAO,KAAK,EAAE,QAAQ,EAA2B,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAcvF,OAAO,aAAa,CAAA;AAIpB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuMrC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- import React, { useCallback, useEffect, useState } from 'react';
4
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
5
5
  import { isFieldDisabled } from 'payload/shared';
6
6
  import { useDebounce } from '../../../hooks/useDebounce.js';
7
7
  import { useEffectEvent } from '../../../hooks/useEffectEvent.js';
@@ -16,6 +16,7 @@ const baseClass = 'condition';
16
16
  export const Condition = props => {
17
17
  const {
18
18
  andIndex,
19
+ disableRemoveButton,
19
20
  fieldPath,
20
21
  filterOptions,
21
22
  isFirstCondition,
@@ -35,6 +36,9 @@ export const Condition = props => {
35
36
  const reducedField = reducedFields.find(field => field.fieldPath === fieldPath);
36
37
  const [internalValue, setInternalValue] = useState(value);
37
38
  const debouncedValue = useDebounce(internalValue, 300);
39
+ // Tracks the last value this row reported upward, so the downward sync below can tell our own
40
+ // committed echo apart from a genuine external change (e.g. the row being cleared/reset).
41
+ const lastReportedValue = useRef(value);
38
42
  const booleanSelect = ['exists'].includes(operator) || reducedField?.field?.type === 'checkbox';
39
43
  let valueOptions = [];
40
44
  if (booleanSelect) {
@@ -50,19 +54,29 @@ export const Condition = props => {
50
54
  }
51
55
  const updateValue = useEffectEvent(async debouncedValue_0 => {
52
56
  if (operator) {
57
+ const normalizedValue = debouncedValue_0 === null || debouncedValue_0 === '' ? undefined : debouncedValue_0;
58
+ lastReportedValue.current = normalizedValue;
53
59
  await updateCondition({
54
60
  type: 'value',
55
61
  andIndex,
56
62
  field: reducedField,
57
63
  operator,
58
64
  orIndex,
59
- value: debouncedValue_0 === null || debouncedValue_0 === '' ? undefined : debouncedValue_0
65
+ value: normalizedValue
60
66
  });
61
67
  }
62
68
  });
63
69
  useEffect(() => {
64
70
  void updateValue(debouncedValue);
65
71
  }, [debouncedValue]);
72
+ // Sync external value changes (e.g. the row being cleared or reset to a placeholder) down into
73
+ // local state, but skip our own committed echo so this never clobbers in-progress typing.
74
+ useEffect(() => {
75
+ if (value !== lastReportedValue.current) {
76
+ lastReportedValue.current = value;
77
+ setInternalValue(value);
78
+ }
79
+ }, [value]);
66
80
  const disabled = !reducedField?.fieldPath || isFieldDisabled(reducedField?.field, 'filter');
67
81
  const handleFieldChange = useCallback(async field_0 => {
68
82
  setInternalValue(undefined);
@@ -169,6 +183,7 @@ export const Condition = props => {
169
183
  children: /*#__PURE__*/_jsx(Button, {
170
184
  buttonStyle: "ghost",
171
185
  className: `${baseClass}__actions-remove`,
186
+ disabled: disableRemoveButton,
172
187
  icon: /*#__PURE__*/_jsx(LineIcon, {
173
188
  size: 24
174
189
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useState","isFieldDisabled","useDebounce","useEffectEvent","LineIcon","useTranslation","Button","ReactSelect","DefaultFilter","getOperatorValueTypes","baseClass","Condition","props","andIndex","fieldPath","filterOptions","isFirstCondition","join","operator","orIndex","reducedFields","removeCondition","RenderedFilter","updateCondition","updateJoin","value","t","reducedField","find","field","internalValue","setInternalValue","debouncedValue","booleanSelect","includes","type","valueOptions","label","options","updateValue","undefined","disabled","handleFieldChange","option","handleOperatorChange","operatorValueTypes","validOperatorValue","isValidValue","_jsx","className","_jsxs","classNames","menu","isClearable","onChange","filterOption","inputValue","data","plainTextLabel","toLowerCase","filter","map","f","operators","o","internalField","buttonStyle","icon","size","onClick"],"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type {\n AddCondition,\n ReducedField,\n RemoveCondition,\n UpdateCondition,\n UpdateJoin,\n Value,\n} from '../types.js'\n\nexport type Props = {\n readonly addCondition: AddCondition\n readonly andIndex: number\n readonly fieldPath: string\n readonly filterOptions?: ResolvedFilterOptions\n readonly isFirstCondition: boolean\n readonly join: 'and' | 'or'\n readonly operator: Operator\n readonly orIndex: number\n readonly reducedFields: ReducedField[]\n readonly removeCondition: RemoveCondition\n readonly RenderedFilter?: React.ReactNode\n readonly updateCondition: UpdateCondition\n readonly updateJoin: UpdateJoin\n readonly value: Value\n}\n\nimport type { Operator, Option as PayloadOption, ResolvedFilterOptions } from 'payload'\n\nimport { isFieldDisabled } from 'payload/shared'\n\nimport type { Option } from '../../ReactSelect/index.js'\n\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../hooks/useEffectEvent.js'\nimport { LineIcon } from '../../../icons/Line/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DefaultFilter } from './DefaultFilter/index.js'\nimport { getOperatorValueTypes } from './validOperators.js'\nimport './index.css'\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const {\n andIndex,\n fieldPath,\n filterOptions,\n isFirstCondition,\n join,\n operator,\n orIndex,\n reducedFields,\n removeCondition,\n RenderedFilter,\n updateCondition,\n updateJoin,\n value,\n } = props\n\n const { t } = useTranslation()\n\n const reducedField = reducedFields.find((field) => field.fieldPath === fieldPath)\n\n const [internalValue, setInternalValue] = useState<Value>(value)\n\n const debouncedValue = useDebounce(internalValue, 300)\n\n const booleanSelect = ['exists'].includes(operator) || reducedField?.field?.type === 'checkbox'\n\n let valueOptions: PayloadOption[] = []\n\n if (booleanSelect) {\n valueOptions = [\n { label: t('general:true'), value: 'true' },\n { label: t('general:false'), value: 'false' },\n ]\n } else if (reducedField?.field && 'options' in reducedField.field) {\n valueOptions = reducedField.field.options\n }\n\n const updateValue = useEffectEvent(async (debouncedValue: Value) => {\n if (operator) {\n await updateCondition({\n type: 'value',\n andIndex,\n field: reducedField,\n operator,\n orIndex,\n value: debouncedValue === null || debouncedValue === '' ? undefined : debouncedValue,\n })\n }\n })\n\n useEffect(() => {\n void updateValue(debouncedValue)\n }, [debouncedValue])\n\n const disabled = !reducedField?.fieldPath || isFieldDisabled(reducedField?.field, 'filter')\n\n const handleFieldChange = useCallback(\n async (field: Option<string>) => {\n setInternalValue(undefined)\n await updateCondition({\n type: 'field',\n andIndex,\n field: reducedFields.find((option) => option.fieldPath === field.value),\n operator,\n orIndex,\n value: undefined,\n })\n },\n [andIndex, operator, orIndex, reducedFields, updateCondition],\n )\n\n const handleOperatorChange = useCallback(\n async (operator: Option<Operator>) => {\n const operatorValueTypes = getOperatorValueTypes(reducedField.field.type)\n const validOperatorValue = operatorValueTypes[operator.value] || 'any'\n const isValidValue =\n validOperatorValue === 'any' ||\n typeof value === validOperatorValue ||\n (validOperatorValue === 'boolean' && (value === 'true' || value === 'false'))\n\n if (!isValidValue) {\n // if the current value is not valid for the new operator\n // reset the value before passing it to updateCondition\n setInternalValue(undefined)\n }\n\n await updateCondition({\n type: 'operator',\n andIndex,\n field: reducedField,\n operator: operator.value,\n orIndex,\n value: isValidValue ? value : undefined,\n })\n },\n [andIndex, reducedField, orIndex, updateCondition, value],\n )\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__join`}>\n {isFirstCondition ? (\n <span className={`${baseClass}__join-label`}>{t('general:where')}</span>\n ) : (\n <ReactSelect\n classNames={{\n menu: () => 'condition__join-menu',\n }}\n isClearable={false}\n onChange={(option: Option<'and' | 'or'>) =>\n updateJoin({ andIndex, join: option.value, orIndex })\n }\n options={[\n { label: t('general:and'), value: 'and' },\n { label: t('general:or'), value: 'or' },\n ]}\n value={{ label: join === 'and' ? t('general:and') : t('general:or'), value: join }}\n />\n )}\n </div>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n disabled={disabled}\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n isClearable={false}\n onChange={handleFieldChange}\n options={reducedFields\n .filter((field) => !isFieldDisabled(field.field, 'filter'))\n .map((f) => ({ ...f, value: f.fieldPath }))}\n value={reducedField ? { ...reducedField, value: reducedField.fieldPath } : undefined}\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={disabled}\n isClearable={false}\n onChange={handleOperatorChange}\n options={reducedField?.operators}\n value={reducedField?.operators.find((o) => operator === o.value) || null}\n />\n </div>\n <div className={`${baseClass}__value`}>\n {RenderedFilter || (\n <DefaultFilter\n booleanSelect={booleanSelect}\n disabled={\n !operator || !reducedField || isFieldDisabled(reducedField?.field, 'filter')\n }\n filterOptions={filterOptions}\n internalField={reducedField}\n onChange={setInternalValue}\n operator={operator}\n options={valueOptions}\n value={internalValue ?? ''}\n />\n )}\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__actions-remove`}\n icon={<LineIcon size={24} />}\n onClick={() =>\n removeCondition({\n andIndex,\n orIndex,\n })\n }\n />\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useRef","useState","isFieldDisabled","useDebounce","useEffectEvent","LineIcon","useTranslation","Button","ReactSelect","DefaultFilter","getOperatorValueTypes","baseClass","Condition","props","andIndex","disableRemoveButton","fieldPath","filterOptions","isFirstCondition","join","operator","orIndex","reducedFields","removeCondition","RenderedFilter","updateCondition","updateJoin","value","t","reducedField","find","field","internalValue","setInternalValue","debouncedValue","lastReportedValue","booleanSelect","includes","type","valueOptions","label","options","updateValue","normalizedValue","undefined","current","disabled","handleFieldChange","option","handleOperatorChange","operatorValueTypes","validOperatorValue","isValidValue","_jsx","className","_jsxs","classNames","menu","isClearable","onChange","filterOption","inputValue","data","plainTextLabel","toLowerCase","filter","map","f","operators","o","internalField","buttonStyle","icon","size","onClick"],"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type {\n AddCondition,\n ReducedField,\n RemoveCondition,\n UpdateCondition,\n UpdateJoin,\n Value,\n} from '../types.js'\n\nexport type Props = {\n readonly addCondition: AddCondition\n readonly andIndex: number\n readonly disableRemoveButton: boolean\n readonly fieldPath: string\n readonly filterOptions?: ResolvedFilterOptions\n readonly isFirstCondition: boolean\n readonly join: 'and' | 'or'\n readonly operator: Operator\n readonly orIndex: number\n readonly reducedFields: ReducedField[]\n readonly removeCondition: RemoveCondition\n readonly RenderedFilter?: React.ReactNode\n readonly updateCondition: UpdateCondition\n readonly updateJoin: UpdateJoin\n readonly value: Value\n}\n\nimport type { Operator, Option as PayloadOption, ResolvedFilterOptions } from 'payload'\n\nimport { isFieldDisabled } from 'payload/shared'\n\nimport type { Option } from '../../ReactSelect/index.js'\n\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../hooks/useEffectEvent.js'\nimport { LineIcon } from '../../../icons/Line/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DefaultFilter } from './DefaultFilter/index.js'\nimport { getOperatorValueTypes } from './validOperators.js'\nimport './index.css'\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const {\n andIndex,\n disableRemoveButton,\n fieldPath,\n filterOptions,\n isFirstCondition,\n join,\n operator,\n orIndex,\n reducedFields,\n removeCondition,\n RenderedFilter,\n updateCondition,\n updateJoin,\n value,\n } = props\n\n const { t } = useTranslation()\n\n const reducedField = reducedFields.find((field) => field.fieldPath === fieldPath)\n\n const [internalValue, setInternalValue] = useState<Value>(value)\n\n const debouncedValue = useDebounce(internalValue, 300)\n\n // Tracks the last value this row reported upward, so the downward sync below can tell our own\n // committed echo apart from a genuine external change (e.g. the row being cleared/reset).\n const lastReportedValue = useRef<Value>(value)\n\n const booleanSelect = ['exists'].includes(operator) || reducedField?.field?.type === 'checkbox'\n\n let valueOptions: PayloadOption[] = []\n\n if (booleanSelect) {\n valueOptions = [\n { label: t('general:true'), value: 'true' },\n { label: t('general:false'), value: 'false' },\n ]\n } else if (reducedField?.field && 'options' in reducedField.field) {\n valueOptions = reducedField.field.options\n }\n\n const updateValue = useEffectEvent(async (debouncedValue: Value) => {\n if (operator) {\n const normalizedValue =\n debouncedValue === null || debouncedValue === '' ? undefined : debouncedValue\n lastReportedValue.current = normalizedValue\n await updateCondition({\n type: 'value',\n andIndex,\n field: reducedField,\n operator,\n orIndex,\n value: normalizedValue,\n })\n }\n })\n\n useEffect(() => {\n void updateValue(debouncedValue)\n }, [debouncedValue])\n\n // Sync external value changes (e.g. the row being cleared or reset to a placeholder) down into\n // local state, but skip our own committed echo so this never clobbers in-progress typing.\n useEffect(() => {\n if (value !== lastReportedValue.current) {\n lastReportedValue.current = value\n setInternalValue(value)\n }\n }, [value])\n\n const disabled = !reducedField?.fieldPath || isFieldDisabled(reducedField?.field, 'filter')\n\n const handleFieldChange = useCallback(\n async (field: Option<string>) => {\n setInternalValue(undefined)\n await updateCondition({\n type: 'field',\n andIndex,\n field: reducedFields.find((option) => option.fieldPath === field.value),\n operator,\n orIndex,\n value: undefined,\n })\n },\n [andIndex, operator, orIndex, reducedFields, updateCondition],\n )\n\n const handleOperatorChange = useCallback(\n async (operator: Option<Operator>) => {\n const operatorValueTypes = getOperatorValueTypes(reducedField.field.type)\n const validOperatorValue = operatorValueTypes[operator.value] || 'any'\n const isValidValue =\n validOperatorValue === 'any' ||\n typeof value === validOperatorValue ||\n (validOperatorValue === 'boolean' && (value === 'true' || value === 'false'))\n\n if (!isValidValue) {\n // if the current value is not valid for the new operator\n // reset the value before passing it to updateCondition\n setInternalValue(undefined)\n }\n\n await updateCondition({\n type: 'operator',\n andIndex,\n field: reducedField,\n operator: operator.value,\n orIndex,\n value: isValidValue ? value : undefined,\n })\n },\n [andIndex, reducedField, orIndex, updateCondition, value],\n )\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__join`}>\n {isFirstCondition ? (\n <span className={`${baseClass}__join-label`}>{t('general:where')}</span>\n ) : (\n <ReactSelect\n classNames={{\n menu: () => 'condition__join-menu',\n }}\n isClearable={false}\n onChange={(option: Option<'and' | 'or'>) =>\n updateJoin({ andIndex, join: option.value, orIndex })\n }\n options={[\n { label: t('general:and'), value: 'and' },\n { label: t('general:or'), value: 'or' },\n ]}\n value={{ label: join === 'and' ? t('general:and') : t('general:or'), value: join }}\n />\n )}\n </div>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n disabled={disabled}\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n isClearable={false}\n onChange={handleFieldChange}\n options={reducedFields\n .filter((field) => !isFieldDisabled(field.field, 'filter'))\n .map((f) => ({ ...f, value: f.fieldPath }))}\n value={reducedField ? { ...reducedField, value: reducedField.fieldPath } : undefined}\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={disabled}\n isClearable={false}\n onChange={handleOperatorChange}\n options={reducedField?.operators}\n value={reducedField?.operators.find((o) => operator === o.value) || null}\n />\n </div>\n <div className={`${baseClass}__value`}>\n {RenderedFilter || (\n <DefaultFilter\n booleanSelect={booleanSelect}\n disabled={\n !operator || !reducedField || isFieldDisabled(reducedField?.field, 'filter')\n }\n filterOptions={filterOptions}\n internalField={reducedField}\n onChange={setInternalValue}\n operator={operator}\n options={valueOptions}\n value={internalValue ?? ''}\n />\n )}\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__actions-remove`}\n disabled={disableRemoveButton}\n icon={<LineIcon size={24} />}\n onClick={() =>\n removeCondition({\n andIndex,\n orIndex,\n })\n }\n />\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,9 +3,10 @@ import type { WhereBuilderProps } from './types.js';
3
3
  import './index.css';
4
4
  export { WhereBuilderProps };
5
5
  /**
6
- * The WhereBuilder component is used to render the filter controls for a collection's list view
7
- * or in a form (e.g. Query Presets). When `value` and `onChange` are provided, it is controlled
8
- * by the form; otherwise it uses list query state from {@link useListQuery}.
6
+ * Presentational filter builder. It renders the conditions described by `value` and
7
+ * reports edits through `onChange`. It is unaware of where its value is stored the
8
+ * list view wires it to list query state via {@link ListWhereBuilder}, and the Query
9
+ * Presets drawer wires it to form state.
9
10
  */
10
11
  export declare const WhereBuilder: React.FC<WhereBuilderProps>;
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAKV,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAUnB,OAAO,aAAa,CAAA;AAKpB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAwRpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAKV,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAQnB,OAAO,aAAa,CAAA;AAKpB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAsRpD,CAAA"}
@@ -6,8 +6,6 @@ import { isFieldDisabled, transformWhereQuery, validateWhereQuery } from 'payloa
6
6
  import React, { useMemo } from 'react';
7
7
  import { CirclePlusIcon } from '../../icons/CirclePlus/index.js';
8
8
  import { useAuth } from '../../providers/Auth/index.js';
9
- import { useConfig } from '../../providers/Config/index.js';
10
- import { useListQuery } from '../../providers/ListQuery/index.js';
11
9
  import { useTranslation } from '../../providers/Translation/index.js';
12
10
  import { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js';
13
11
  import { Button } from '../Button/index.js';
@@ -16,19 +14,20 @@ import './index.css';
16
14
  import { fieldTypeConditions, getValidFieldOperators } from './field-types.js';
17
15
  const baseClass = 'where-builder';
18
16
  /**
19
- * The WhereBuilder component is used to render the filter controls for a collection's list view
20
- * or in a form (e.g. Query Presets). When `value` and `onChange` are provided, it is controlled
21
- * by the form; otherwise it uses list query state from {@link useListQuery}.
17
+ * Presentational filter builder. It renders the conditions described by `value` and
18
+ * reports edits through `onChange`. It is unaware of where its value is stored the
19
+ * list view wires it to list query state via {@link ListWhereBuilder}, and the Query
20
+ * Presets drawer wires it to form state.
22
21
  */
23
22
  export const WhereBuilder = props => {
24
23
  const {
25
24
  collectionSlug,
26
- fields: fieldsProp,
27
- onChange,
28
- onClose,
25
+ fields,
26
+ onChange: handleWhereChange,
27
+ onEmptyRemove,
29
28
  renderedFilters = undefined,
30
29
  resolvedFilterOptions = undefined,
31
- value: valueProp
30
+ value
32
31
  } = props;
33
32
  const {
34
33
  i18n,
@@ -37,15 +36,6 @@ export const WhereBuilder = props => {
37
36
  const {
38
37
  permissions
39
38
  } = useAuth();
40
- const {
41
- getEntityConfig
42
- } = useConfig();
43
- const listQuery = useListQuery();
44
- const isFormMode = typeof onChange === 'function';
45
- const collectionConfig = useMemo(() => isFormMode ? getEntityConfig({
46
- collectionSlug
47
- }) : null, [isFormMode, collectionSlug, getEntityConfig]);
48
- const fields = isFormMode ? collectionConfig?.fields : fieldsProp;
49
39
  const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields;
50
40
  const reducedFields = useMemo(() => reduceFieldsToOptions({
51
41
  fieldPermissions,
@@ -54,31 +44,24 @@ export const WhereBuilder = props => {
54
44
  }), [fieldPermissions, fields, i18n]);
55
45
  const firstField = useMemo(() => reducedFields.find(f => !isFieldDisabled(f.field, 'filter')), [reducedFields]);
56
46
  const conditions = useMemo(() => {
57
- const whereFromSearch = isFormMode ? valueProp : listQuery.query?.where;
58
- if (whereFromSearch) {
59
- if (validateWhereQuery(whereFromSearch)) {
60
- return whereFromSearch.or ?? [];
47
+ if (value) {
48
+ if (validateWhereQuery(value)) {
49
+ return value.or ?? [];
61
50
  }
62
- const transformedWhere = transformWhereQuery(whereFromSearch);
51
+ const transformedWhere = transformWhereQuery(value);
63
52
  if (validateWhereQuery(transformedWhere)) {
64
53
  return transformedWhere.or ?? [];
65
54
  }
66
- if (!isFormMode) {
67
- console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`); // eslint-disable-line no-console
68
- }
69
55
  }
70
56
  return [];
71
- }, [isFormMode, valueProp, listQuery.query?.where]);
72
- const handleWhereChange = useMemo(() => isFormMode ? where => {
73
- onChange?.(where);
74
- } : listQuery.handleWhereChange, [isFormMode, onChange, listQuery.handleWhereChange]);
75
- const addCondition = React.useCallback(async ({
57
+ }, [value]);
58
+ const addCondition = React.useCallback(({
76
59
  andIndex,
77
60
  field,
78
61
  orIndex,
79
62
  relation
80
63
  }) => {
81
- const newConditions = [...conditions];
64
+ const newConditions = structuredClone(conditions);
82
65
  const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value;
83
66
  if (relation === 'and') {
84
67
  newConditions[orIndex].and.splice(andIndex, 0, {
@@ -95,30 +78,36 @@ export const WhereBuilder = props => {
95
78
  }]
96
79
  });
97
80
  }
98
- await handleWhereChange({
81
+ void handleWhereChange({
99
82
  or: newConditions
100
83
  });
101
84
  }, [conditions, handleWhereChange]);
102
- const updateCondition = React.useCallback(async ({
85
+ const updateCondition = React.useCallback(({
86
+ type,
103
87
  andIndex: andIndex_0,
104
88
  field: field_0,
105
89
  operator: incomingOperator,
106
90
  orIndex: orIndex_0,
107
- value
91
+ value: value_0
108
92
  }) => {
109
93
  // Virtual first row: conditions not yet committed, build from scratch
110
94
  if (conditions.length === 0) {
95
+ // Ignore empty value edits so a cleared row doesn't re-commit itself. Field and
96
+ // operator picks carry empty values too, but must fall through to build the row.
97
+ if (type === 'value' && (value_0 === undefined || value_0 === null || value_0 === '')) {
98
+ return;
99
+ }
111
100
  const {
112
101
  validOperator
113
102
  } = getValidFieldOperators({
114
103
  field: field_0.field,
115
104
  operator: incomingOperator
116
105
  });
117
- await handleWhereChange({
106
+ void handleWhereChange({
118
107
  or: [{
119
108
  and: [{
120
109
  [String(field_0.fieldPath)]: {
121
- [validOperator]: value
110
+ [validOperator]: value_0
122
111
  }
123
112
  }]
124
113
  }]
@@ -135,47 +124,47 @@ export const WhereBuilder = props => {
135
124
  });
136
125
  // Skip if nothing changed
137
126
  const existingValue = existingCondition[String(field_0.fieldPath)]?.[validOperator_0];
138
- if (typeof existingValue !== 'undefined' && existingValue === value) {
127
+ if (typeof existingValue !== 'undefined' && existingValue === value_0) {
139
128
  return;
140
129
  }
141
130
  const newRowCondition = {
142
131
  [String(field_0.fieldPath)]: {
143
- [validOperator_0]: value
132
+ [validOperator_0]: value_0
144
133
  }
145
134
  };
146
135
  if (dequal(existingCondition, newRowCondition)) {
147
136
  return;
148
137
  }
149
- const newConditions_0 = [...conditions];
138
+ const newConditions_0 = structuredClone(conditions);
150
139
  newConditions_0[orIndex_0].and[andIndex_0] = newRowCondition;
151
- await handleWhereChange({
140
+ void handleWhereChange({
152
141
  or: newConditions_0
153
142
  });
154
143
  }
155
144
  }, [conditions, handleWhereChange]);
156
- const removeCondition = React.useCallback(async ({
145
+ const removeCondition = React.useCallback(({
157
146
  andIndex: andIndex_1,
158
147
  orIndex: orIndex_1
159
148
  }) => {
160
149
  // Virtual first row: removing it just closes the panel
161
150
  if (conditions.length === 0) {
162
- onClose?.();
151
+ onEmptyRemove?.();
163
152
  return;
164
153
  }
165
- const newConditions_1 = [...conditions];
154
+ const newConditions_1 = structuredClone(conditions);
166
155
  newConditions_1[orIndex_1].and.splice(andIndex_1, 1);
167
156
  if (newConditions_1[orIndex_1].and.length === 0) {
168
157
  newConditions_1.splice(orIndex_1, 1);
169
158
  }
170
- await handleWhereChange({
159
+ void handleWhereChange({
171
160
  or: newConditions_1
172
161
  });
173
162
  // Removing the last remaining condition closes the filters panel.
174
163
  if (newConditions_1.length === 0) {
175
- onClose?.();
164
+ onEmptyRemove?.();
176
165
  }
177
- }, [conditions, handleWhereChange, onClose]);
178
- const updateJoin = React.useCallback(async ({
166
+ }, [conditions, handleWhereChange, onEmptyRemove]);
167
+ const updateJoin = React.useCallback(({
179
168
  andIndex: andIndex_2,
180
169
  join,
181
170
  orIndex: orIndex_2
@@ -207,29 +196,48 @@ export const WhereBuilder = props => {
207
196
  newConditions_2[newConditions_2.length - 1].and.push(cond_0);
208
197
  }
209
198
  });
210
- await handleWhereChange({
199
+ void handleWhereChange({
211
200
  or: newConditions_2
212
201
  });
213
202
  }, [conditions, handleWhereChange]);
214
- const addFirstFilter = React.useCallback(async () => {
215
- if (firstField) {
216
- await addCondition({
217
- andIndex: 0,
218
- field: firstField,
219
- orIndex: conditions.length,
220
- relation: 'or'
203
+ const addFirstFilter = React.useCallback(() => {
204
+ if (!firstField) {
205
+ return;
206
+ }
207
+ // With no committed conditions, only the virtual placeholder row is shown. Commit it
208
+ // and append a new row so a second row appears on the first click.
209
+ if (conditions.length === 0) {
210
+ const defaultOperator_0 = firstField.operators[0].value;
211
+ const makeRow = () => ({
212
+ and: [{
213
+ [String(firstField.fieldPath)]: {
214
+ [defaultOperator_0]: undefined
215
+ }
216
+ }]
221
217
  });
218
+ void handleWhereChange({
219
+ or: [makeRow(), makeRow()]
220
+ });
221
+ return;
222
222
  }
223
- }, [addCondition, conditions.length, firstField]);
224
- // When conditions is empty in list mode, show a virtual first row immediately
225
- // (derived from the first available field) so the panel never opens blank.
226
- const displayConditions = !isFormMode && conditions.length === 0 && firstField ? [{
223
+ void addCondition({
224
+ andIndex: 0,
225
+ field: firstField,
226
+ orIndex: conditions.length,
227
+ relation: 'or'
228
+ });
229
+ }, [addCondition, conditions.length, firstField, handleWhereChange]);
230
+ // When conditions is empty, show a virtual first row so the panel never opens blank.
231
+ const displayConditions = conditions.length === 0 && firstField ? [{
227
232
  and: [{
228
233
  [firstField.fieldPath]: {
229
234
  [firstField.operators[0].value]: undefined
230
235
  }
231
236
  }]
232
237
  }] : conditions;
238
+ // Disable the remove button only when there are no committed conditions and this host
239
+ // doesn't provide an empty-state removal handler.
240
+ const disableRemoveButton = conditions.length === 0 && !onEmptyRemove;
233
241
  return /*#__PURE__*/_jsx("div", {
234
242
  className: baseClass,
235
243
  children: /*#__PURE__*/_jsxs("div", {
@@ -242,12 +250,13 @@ export const WhereBuilder = props => {
242
250
  const condition = displayConditions[orIndex_3].and[andIndex_3];
243
251
  const fieldPath = Object.keys(condition)[0];
244
252
  const operator = Object.keys(condition?.[fieldPath] || {})?.[0] || undefined;
245
- const value_0 = condition?.[fieldPath]?.[operator] || undefined;
253
+ const value_1 = condition?.[fieldPath]?.[operator] || undefined;
246
254
  const isFirstCondition = orIndex_3 === 0 && andIndex_3 === 0;
247
255
  const join_0 = andIndex_3 === 0 ? 'or' : 'and';
248
256
  return /*#__PURE__*/_jsx(Condition, {
249
257
  addCondition: addCondition,
250
258
  andIndex: andIndex_3,
259
+ disableRemoveButton: disableRemoveButton,
251
260
  fieldPath: fieldPath,
252
261
  filterOptions: resolvedFilterOptions?.get(fieldPath),
253
262
  isFirstCondition: isFirstCondition,
@@ -259,7 +268,7 @@ export const WhereBuilder = props => {
259
268
  RenderedFilter: renderedFilters?.get(fieldPath),
260
269
  updateCondition: updateCondition,
261
270
  updateJoin: updateJoin,
262
- value: value_0
271
+ value: value_1
263
272
  }, andIndex_3);
264
273
  })
265
274
  }, compoundOrKey);