@payloadcms/ui 4.0.0-internal.bc5cf8c → 4.0.0-internal.c3ac604

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 (874) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/css/app.css +121 -0
  3. package/dist/css/forms.css +6 -9
  4. package/dist/css/spacing.css +11 -3
  5. package/dist/css/theme.css +2 -1
  6. package/dist/css/z-index.css +10 -0
  7. package/dist/elements/APIKeyInput/index.css +4 -4
  8. package/dist/elements/AddNewRelation/index.css +27 -28
  9. package/dist/elements/AnimateHeight/usePatchAnimateHeight.d.ts.map +1 -1
  10. package/dist/elements/AppHeader/index.css +2 -18
  11. package/dist/elements/AppHeader/index.d.ts +2 -1
  12. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  13. package/dist/elements/AppHeader/index.js +10 -8
  14. package/dist/elements/AppHeader/index.js.map +1 -1
  15. package/dist/elements/ArrayAction/index.d.ts +2 -0
  16. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  17. package/dist/elements/ArrayAction/index.js +65 -23
  18. package/dist/elements/ArrayAction/index.js.map +1 -1
  19. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +2 -2
  20. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  21. package/dist/elements/BulkUpload/FileSidebar/index.css +4 -0
  22. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +2 -2
  23. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
  24. package/dist/elements/BulkUpload/FormsManager/createFormData.js +4 -15
  25. package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
  26. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  27. package/dist/elements/BulkUpload/FormsManager/index.js +1 -1
  28. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  29. package/dist/elements/Button/index.d.ts.map +1 -1
  30. package/dist/elements/Button/index.js +5 -0
  31. package/dist/elements/Button/index.js.map +1 -1
  32. package/dist/elements/ClipboardAction/ClipboardActionLabel.d.ts.map +1 -1
  33. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts +8 -1
  34. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts.map +1 -1
  35. package/dist/elements/ClipboardAction/clipboardUtilities.js +40 -8
  36. package/dist/elements/ClipboardAction/clipboardUtilities.js.map +1 -1
  37. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +120 -0
  38. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +1 -0
  39. package/dist/elements/ClipboardAction/index.d.ts.map +1 -1
  40. package/dist/elements/ClipboardAction/index.js +18 -1
  41. package/dist/elements/ClipboardAction/index.js.map +1 -1
  42. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +144 -0
  43. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +1 -0
  44. package/dist/elements/ClipboardAction/types.d.ts +3 -0
  45. package/dist/elements/ClipboardAction/types.d.ts.map +1 -1
  46. package/dist/elements/ClipboardAction/types.js.map +1 -1
  47. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts +10 -0
  48. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts.map +1 -0
  49. package/dist/elements/ClipboardAction/useCanPasteClipboard.js +21 -0
  50. package/dist/elements/ClipboardAction/useCanPasteClipboard.js.map +1 -0
  51. package/dist/elements/CodeEditor/CodeEditor.d.ts.map +1 -1
  52. package/dist/elements/CodeEditor/index.css +5 -5
  53. package/dist/elements/Collapsible/index.d.ts.map +1 -1
  54. package/dist/elements/Collapsible/index.js +2 -0
  55. package/dist/elements/Collapsible/index.js.map +1 -1
  56. package/dist/elements/ColumnSelection/Popup.d.ts.map +1 -1
  57. package/dist/elements/ColumnSelection/Popup.js +6 -6
  58. package/dist/elements/ColumnSelection/Popup.js.map +1 -1
  59. package/dist/elements/ColumnSelection/matchesColumnSearch.d.ts +10 -0
  60. package/dist/elements/ColumnSelection/matchesColumnSearch.d.ts.map +1 -0
  61. package/dist/elements/ColumnSelection/matchesColumnSearch.js +21 -0
  62. package/dist/elements/ColumnSelection/matchesColumnSearch.js.map +1 -0
  63. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js +87 -0
  64. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js.map +1 -0
  65. package/dist/elements/CommandPalette/index.css +0 -7
  66. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  67. package/dist/elements/CreateDocumentButton/index.js +4 -1
  68. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  69. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  70. package/dist/elements/DatePicker/DatePicker.js +1 -0
  71. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  72. package/dist/elements/DatePicker/getFormattedLocale.d.ts.map +1 -1
  73. package/dist/elements/DatePicker/index.css +4 -4
  74. package/dist/elements/DatePicker/index.js +1 -1
  75. package/dist/elements/DatePicker/index.js.map +1 -1
  76. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  77. package/dist/elements/DeleteDocument/index.js +16 -1
  78. package/dist/elements/DeleteDocument/index.js.map +1 -1
  79. package/dist/elements/Dialog/DialogTitle/index.d.ts.map +1 -1
  80. package/dist/elements/DocumentControls/index.css +0 -2
  81. package/dist/elements/DocumentControls/index.d.ts +2 -2
  82. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  83. package/dist/elements/DocumentControls/index.js +1 -0
  84. package/dist/elements/DocumentControls/index.js.map +1 -1
  85. package/dist/elements/DocumentDrawer/DrawerHeader/index.d.ts +2 -2
  86. package/dist/elements/DocumentDrawer/DrawerHeader/index.d.ts.map +1 -1
  87. package/dist/elements/DocumentDrawer/DrawerHeader/index.js.map +1 -1
  88. package/dist/elements/DocumentFields/index.css +9 -0
  89. package/dist/elements/DocumentHeader/Tabs/tabs/index.d.ts.map +1 -1
  90. package/dist/elements/DocumentLocked/index.d.ts +2 -2
  91. package/dist/elements/DocumentLocked/index.d.ts.map +1 -1
  92. package/dist/elements/DocumentLocked/index.js.map +1 -1
  93. package/dist/elements/DraggableSortable/DragOverlayPreview/index.css +1 -1
  94. package/dist/elements/DraggableSortable/useDraggableSortable/index.d.ts.map +1 -1
  95. package/dist/elements/Drawer/index.d.ts.map +1 -1
  96. package/dist/elements/Drawer/index.js +1 -0
  97. package/dist/elements/Drawer/index.js.map +1 -1
  98. package/dist/elements/Drawer/useDrawerSlug.d.ts.map +1 -1
  99. package/dist/elements/DrawerActionHeader/index.d.ts.map +1 -1
  100. package/dist/elements/EditMany/DrawerContent.js +2 -2
  101. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  102. package/dist/elements/EditUpload/index.d.ts.map +1 -1
  103. package/dist/elements/EditUpload/index.js +4 -0
  104. package/dist/elements/EditUpload/index.js.map +1 -1
  105. package/dist/elements/FieldSelect/reduceFieldOptions.d.ts.map +1 -1
  106. package/dist/elements/FieldSelect/reduceFieldOptions.js +3 -1
  107. package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
  108. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +143 -0
  109. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +1 -0
  110. package/dist/elements/FileDetails/StaticFileDetails/index.css +8 -9
  111. package/dist/elements/FileManager/FilePreview/index.css +3 -3
  112. package/dist/elements/FileManager/index.css +36 -23
  113. package/dist/elements/FileManager/index.d.ts +1 -1
  114. package/dist/elements/FileManager/index.d.ts.map +1 -1
  115. package/dist/elements/FileManager/index.js +15 -4
  116. package/dist/elements/FileManager/index.js.map +1 -1
  117. package/dist/elements/HTMLDiff/diff/index.d.ts.map +1 -1
  118. package/dist/elements/HTMLDiff/index.d.ts.map +1 -1
  119. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.css +3 -1
  120. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +1 -1
  121. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -1
  122. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +1 -1
  123. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -1
  124. package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -1
  125. package/dist/elements/Hierarchy/DocHeaderButton/index.js +12 -12
  126. package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -1
  127. package/dist/elements/Hierarchy/Field/index.client.js +14 -14
  128. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -1
  129. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -0
  130. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -0
  131. package/dist/elements/Hierarchy/Modal/index.css +88 -0
  132. package/dist/elements/Hierarchy/Modal/index.d.ts +20 -0
  133. package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -0
  134. package/dist/elements/Hierarchy/{Drawer → Modal}/index.js +105 -81
  135. package/dist/elements/Hierarchy/Modal/index.js.map +1 -0
  136. package/dist/elements/Hierarchy/{Drawer → Modal}/types.d.ts +22 -18
  137. package/dist/elements/Hierarchy/Modal/types.d.ts.map +1 -0
  138. package/dist/elements/Hierarchy/Modal/types.js.map +1 -0
  139. package/dist/elements/Hierarchy/Modal/useHierarchyModal.d.ts +30 -0
  140. package/dist/elements/Hierarchy/Modal/useHierarchyModal.d.ts.map +1 -0
  141. package/dist/elements/Hierarchy/{Drawer/useHierarchyDrawer.js → Modal/useHierarchyModal.js} +51 -50
  142. package/dist/elements/Hierarchy/Modal/useHierarchyModal.js.map +1 -0
  143. package/dist/elements/Hierarchy/MoveMany/index.d.ts +2 -2
  144. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  145. package/dist/elements/Hierarchy/MoveMany/index.js +9 -9
  146. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  147. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -1
  148. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  149. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +109 -89
  150. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  151. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
  152. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +2 -0
  153. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
  154. package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts +1 -1
  155. package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts.map +1 -1
  156. package/dist/elements/Hierarchy/Tree/TreeNode/index.css +38 -14
  157. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -1
  158. package/dist/elements/Hierarchy/Tree/TreeNode/index.js +37 -31
  159. package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -1
  160. package/dist/elements/Hierarchy/Tree/index.css +1 -1
  161. package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -1
  162. package/dist/elements/Hierarchy/Tree/index.js +18 -5
  163. package/dist/elements/Hierarchy/Tree/index.js.map +1 -1
  164. package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -1
  165. package/dist/elements/InputStepper/index.css +0 -1
  166. package/dist/elements/LeaveWithoutSaving/index.d.ts.map +1 -1
  167. package/dist/elements/LeaveWithoutSaving/usePreventLeave.d.ts.map +1 -1
  168. package/dist/elements/ListControls/index.js +1 -1
  169. package/dist/elements/ListControls/index.js.map +1 -1
  170. package/dist/elements/ListDrawer/index.d.ts.map +1 -1
  171. package/dist/elements/LivePreview/Toolbar/SizeInput/index.d.ts.map +1 -1
  172. package/dist/elements/LivePreview/Toolbar/SizeInput/index.js +1 -0
  173. package/dist/elements/LivePreview/Toolbar/SizeInput/index.js.map +1 -1
  174. package/dist/elements/LivePreview/Window/index.css +6 -0
  175. package/dist/elements/LoadingOverlay/reducer.d.ts.map +1 -1
  176. package/dist/elements/Locked/index.css +0 -5
  177. package/dist/elements/Locked/index.d.ts +2 -2
  178. package/dist/elements/Locked/index.d.ts.map +1 -1
  179. package/dist/elements/Locked/index.js +38 -19
  180. package/dist/elements/Locked/index.js.map +1 -1
  181. package/dist/elements/MiniCarousel/index.css +39 -37
  182. package/dist/elements/Nav/SettingsMenuButton/index.css +5 -0
  183. package/dist/elements/Nav/SettingsMenuButton/index.d.ts +1 -1
  184. package/dist/elements/Nav/SettingsMenuButton/index.d.ts.map +1 -1
  185. package/dist/elements/Nav/SettingsMenuButton/index.js +1 -1
  186. package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -1
  187. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -1
  188. package/dist/elements/Nav/SidebarTabs/index.client.js +12 -5
  189. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  190. package/dist/elements/Nav/SidebarTabs/index.css +0 -5
  191. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts +1 -0
  192. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts.map +1 -1
  193. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +2 -1
  194. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
  195. package/dist/elements/Nav/index.css +0 -5
  196. package/dist/elements/NavGroup/index.css +0 -1
  197. package/dist/elements/Pagination/index.css +5 -0
  198. package/dist/elements/Pagination/index.d.ts.map +1 -1
  199. package/dist/elements/Pagination/index.js +21 -21
  200. package/dist/elements/Pagination/index.js.map +1 -1
  201. package/dist/elements/Popup/PopupTrigger/index.d.ts +1 -0
  202. package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
  203. package/dist/elements/Popup/PopupTrigger/index.js +3 -0
  204. package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
  205. package/dist/elements/Popup/index.d.ts +6 -0
  206. package/dist/elements/Popup/index.d.ts.map +1 -1
  207. package/dist/elements/Popup/index.js +2 -0
  208. package/dist/elements/Popup/index.js.map +1 -1
  209. package/dist/elements/PreviewButton/index.d.ts +1 -2
  210. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  211. package/dist/elements/PreviewButton/index.js +11 -5
  212. package/dist/elements/PreviewButton/index.js.map +1 -1
  213. package/dist/elements/PreviewSizes/index.css +8 -9
  214. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts.map +1 -1
  215. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.d.ts.map +1 -1
  216. package/dist/elements/ReactSelect/ClearIndicator/index.css +0 -1
  217. package/dist/elements/ReactSelect/DefaultMenuPortal.d.ts +7 -0
  218. package/dist/elements/ReactSelect/DefaultMenuPortal.d.ts.map +1 -0
  219. package/dist/elements/ReactSelect/DefaultMenuPortal.js +120 -0
  220. package/dist/elements/ReactSelect/DefaultMenuPortal.js.map +1 -0
  221. package/dist/elements/ReactSelect/DropdownIndicator/index.css +1 -1
  222. package/dist/elements/ReactSelect/DropdownIndicator/index.d.ts.map +1 -1
  223. package/dist/elements/ReactSelect/DropdownIndicator/index.js +19 -12
  224. package/dist/elements/ReactSelect/DropdownIndicator/index.js.map +1 -1
  225. package/dist/elements/ReactSelect/MultiValue/index.css +0 -1
  226. package/dist/elements/ReactSelect/MultiValueLabel/index.css +2 -2
  227. package/dist/elements/ReactSelect/getCaptureMenuScroll.d.ts.map +1 -1
  228. package/dist/elements/ReactSelect/getMenuListStyles.d.ts +1 -1
  229. package/dist/elements/ReactSelect/getMenuListStyles.d.ts.map +1 -1
  230. package/dist/elements/ReactSelect/getMenuListStyles.js +13 -5
  231. package/dist/elements/ReactSelect/getMenuListStyles.js.map +1 -1
  232. package/dist/elements/ReactSelect/getMenuStyles.d.ts +10 -0
  233. package/dist/elements/ReactSelect/getMenuStyles.d.ts.map +1 -0
  234. package/dist/elements/ReactSelect/getMenuStyles.js +21 -0
  235. package/dist/elements/ReactSelect/getMenuStyles.js.map +1 -0
  236. package/dist/elements/ReactSelect/index.css +10 -6
  237. package/dist/elements/ReactSelect/index.d.ts.map +1 -1
  238. package/dist/elements/ReactSelect/index.js +25 -102
  239. package/dist/elements/ReactSelect/index.js.map +1 -1
  240. package/dist/elements/ReactSelect/types.d.ts +2 -2
  241. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  242. package/dist/elements/ReactSelect/types.js.map +1 -1
  243. package/dist/elements/RelationshipTable/AddNewButton.d.ts +2 -2
  244. package/dist/elements/RelationshipTable/AddNewButton.d.ts.map +1 -1
  245. package/dist/elements/RelationshipTable/Pagination.d.ts +0 -1
  246. package/dist/elements/RelationshipTable/Pagination.d.ts.map +1 -1
  247. package/dist/elements/RelationshipTable/Pagination.js +27 -77
  248. package/dist/elements/RelationshipTable/Pagination.js.map +1 -1
  249. package/dist/elements/RelationshipTable/index.css +1 -4
  250. package/dist/elements/RelationshipTable/index.d.ts +1 -0
  251. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  252. package/dist/elements/RelationshipTable/index.js +36 -3
  253. package/dist/elements/RelationshipTable/index.js.map +1 -1
  254. package/dist/elements/RenderTitle/index.css +4 -0
  255. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  256. package/dist/elements/RenderTitle/index.js +18 -13
  257. package/dist/elements/RenderTitle/index.js.map +1 -1
  258. package/dist/elements/Search/ListSearchFilter/index.d.ts.map +1 -1
  259. package/dist/elements/Search/ListSearchFilter/index.js +1 -0
  260. package/dist/elements/Search/ListSearchFilter/index.js.map +1 -1
  261. package/dist/elements/Search/SearchInput/index.d.ts +2 -0
  262. package/dist/elements/Search/SearchInput/index.d.ts.map +1 -1
  263. package/dist/elements/Search/SearchInput/index.js +22 -19
  264. package/dist/elements/Search/SearchInput/index.js.map +1 -1
  265. package/dist/elements/SelectAll/index.css +3 -1
  266. package/dist/elements/SelectRow/index.d.ts +5 -4
  267. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  268. package/dist/elements/SelectRow/index.js +10 -7
  269. package/dist/elements/SelectRow/index.js.map +1 -1
  270. package/dist/elements/SidebarRow/index.css +0 -2
  271. package/dist/elements/SidebarToggle/index.css +0 -17
  272. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  273. package/dist/elements/SortColumn/index.js +42 -38
  274. package/dist/elements/SortColumn/index.js.map +1 -1
  275. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +24 -24
  276. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
  277. package/dist/elements/Table/DefaultCell/fields/index.d.ts +1 -1
  278. package/dist/elements/Table/DefaultCell/fields/index.d.ts.map +1 -1
  279. package/dist/elements/Table/OrderableRow.d.ts.map +1 -1
  280. package/dist/elements/Table/OrderableRowDragPreview.d.ts.map +1 -1
  281. package/dist/elements/Table/index.css +26 -2
  282. package/dist/elements/TableSection/index.css +0 -1
  283. package/dist/elements/Tabs/index.d.ts.map +1 -1
  284. package/dist/elements/Thumbnail/createThumbnail.d.ts.map +1 -1
  285. package/dist/elements/Thumbnail/index.d.ts +1 -1
  286. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  287. package/dist/elements/Thumbnail/index.js.map +1 -1
  288. package/dist/elements/TimezonePicker/index.css +1 -1
  289. package/dist/elements/TimezonePicker/index.d.ts.map +1 -1
  290. package/dist/elements/TimezonePicker/index.js +5 -1
  291. package/dist/elements/TimezonePicker/index.js.map +1 -1
  292. package/dist/elements/Tooltip/index.css +15 -34
  293. package/dist/elements/Tooltip/index.d.ts +11 -3
  294. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  295. package/dist/elements/Tooltip/index.js +151 -85
  296. package/dist/elements/Tooltip/index.js.map +1 -1
  297. package/dist/elements/Upload/index.css +0 -5
  298. package/dist/elements/Upload/index.d.ts.map +1 -1
  299. package/dist/elements/UserMenu/SubMenuHeader/index.d.ts.map +1 -1
  300. package/dist/elements/UserMenu/SubMenuHeader/index.js +8 -9
  301. package/dist/elements/UserMenu/SubMenuHeader/index.js.map +1 -1
  302. package/dist/elements/UserMenu/index.css +26 -1
  303. package/dist/elements/UserMenu/index.d.ts +1 -0
  304. package/dist/elements/UserMenu/index.d.ts.map +1 -1
  305. package/dist/elements/UserMenu/index.js +2 -1
  306. package/dist/elements/UserMenu/index.js.map +1 -1
  307. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.d.ts.map +1 -1
  308. package/dist/elements/WhereBuilder/Condition/Select/formatOptions.d.ts.map +1 -1
  309. package/dist/elements/WhereBuilder/Condition/validOperators.d.ts.map +1 -1
  310. package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
  311. package/dist/exports/client/index.d.ts +7 -3
  312. package/dist/exports/client/index.d.ts.map +1 -1
  313. package/dist/exports/client/index.js +1 -1
  314. package/dist/exports/client/index.js.map +3 -3
  315. package/dist/exports/layouts.d.ts +1 -0
  316. package/dist/exports/layouts.d.ts.map +1 -1
  317. package/dist/exports/layouts.js +1 -0
  318. package/dist/exports/layouts.js.map +1 -1
  319. package/dist/exports/rsc/index.d.ts +3 -0
  320. package/dist/exports/rsc/index.d.ts.map +1 -1
  321. package/dist/exports/rsc/index.js +3 -0
  322. package/dist/exports/rsc/index.js.map +1 -1
  323. package/dist/exports/shared/index.d.ts +1 -0
  324. package/dist/exports/shared/index.d.ts.map +1 -1
  325. package/dist/exports/shared/index.js +2 -2
  326. package/dist/exports/shared/index.js.map +4 -4
  327. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  328. package/dist/fields/Array/ArrayRow.js +97 -160
  329. package/dist/fields/Array/ArrayRow.js.map +1 -1
  330. package/dist/fields/Array/index.d.ts +1 -1
  331. package/dist/fields/Array/index.d.ts.map +1 -1
  332. package/dist/fields/Array/index.js +7 -4
  333. package/dist/fields/Array/index.js.map +1 -1
  334. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  335. package/dist/fields/Blocks/BlockRow.js +134 -195
  336. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  337. package/dist/fields/Blocks/RowActions.d.ts +2 -0
  338. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  339. package/dist/fields/Blocks/RowActions.js +23 -20
  340. package/dist/fields/Blocks/RowActions.js.map +1 -1
  341. package/dist/fields/Blocks/SectionTitle/index.d.ts.map +1 -1
  342. package/dist/fields/Blocks/SectionTitle/index.js +1 -0
  343. package/dist/fields/Blocks/SectionTitle/index.js.map +1 -1
  344. package/dist/fields/Blocks/index.d.ts +1 -1
  345. package/dist/fields/Blocks/index.d.ts.map +1 -1
  346. package/dist/fields/Blocks/index.js +9 -6
  347. package/dist/fields/Blocks/index.js.map +1 -1
  348. package/dist/fields/Checkbox/Input.d.ts +2 -0
  349. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  350. package/dist/fields/Checkbox/Input.js +32 -26
  351. package/dist/fields/Checkbox/Input.js.map +1 -1
  352. package/dist/fields/Checkbox/index.css +37 -73
  353. package/dist/fields/Checkbox/index.d.ts +1 -1
  354. package/dist/fields/Code/index.css +1 -1
  355. package/dist/fields/Code/index.d.ts +2 -2
  356. package/dist/fields/Collapsible/index.d.ts +1 -1
  357. package/dist/fields/ConfirmPassword/index.d.ts +4 -0
  358. package/dist/fields/ConfirmPassword/index.d.ts.map +1 -1
  359. package/dist/fields/ConfirmPassword/index.js +37 -33
  360. package/dist/fields/ConfirmPassword/index.js.map +1 -1
  361. package/dist/fields/DateTime/index.d.ts +1 -1
  362. package/dist/fields/Email/index.d.ts +1 -1
  363. package/dist/fields/FieldError/index.css +0 -9
  364. package/dist/fields/FieldError/index.d.ts.map +1 -1
  365. package/dist/fields/FieldError/index.js +19 -9
  366. package/dist/fields/FieldError/index.js.map +1 -1
  367. package/dist/fields/Group/index.css +1 -7
  368. package/dist/fields/Group/index.d.ts +2 -2
  369. package/dist/fields/JSON/index.d.ts +1 -1
  370. package/dist/fields/Join/index.css +9 -0
  371. package/dist/fields/Join/index.d.ts +1 -1
  372. package/dist/fields/Join/index.d.ts.map +1 -1
  373. package/dist/fields/Join/index.js +13 -9
  374. package/dist/fields/Join/index.js.map +1 -1
  375. package/dist/fields/Number/Input.d.ts.map +1 -1
  376. package/dist/fields/Number/Input.js +29 -25
  377. package/dist/fields/Number/Input.js.map +1 -1
  378. package/dist/fields/Number/index.d.ts +1 -1
  379. package/dist/fields/Number/types.d.ts +4 -0
  380. package/dist/fields/Number/types.d.ts.map +1 -1
  381. package/dist/fields/Number/types.js.map +1 -1
  382. package/dist/fields/Password/input.d.ts.map +1 -1
  383. package/dist/fields/Password/input.js +33 -29
  384. package/dist/fields/Password/input.js.map +1 -1
  385. package/dist/fields/Password/types.d.ts +7 -3
  386. package/dist/fields/Password/types.d.ts.map +1 -1
  387. package/dist/fields/Password/types.js.map +1 -1
  388. package/dist/fields/Point/index.d.ts +1 -1
  389. package/dist/fields/RadioGroup/index.css +0 -7
  390. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  391. package/dist/fields/Relationship/Input.js +36 -14
  392. package/dist/fields/Relationship/Input.js.map +1 -1
  393. package/dist/fields/Relationship/findOptionsByValue.d.ts.map +1 -1
  394. package/dist/fields/Relationship/index.d.ts +1 -1
  395. package/dist/fields/Relationship/optionsReducer.d.ts.map +1 -1
  396. package/dist/fields/Relationship/select-components/MultiValueLabel/index.css +2 -2
  397. package/dist/fields/Relationship/types.d.ts +4 -0
  398. package/dist/fields/Relationship/types.d.ts.map +1 -1
  399. package/dist/fields/Relationship/types.js.map +1 -1
  400. package/dist/fields/Row/index.d.ts +1 -1
  401. package/dist/fields/Select/Input.d.ts +4 -0
  402. package/dist/fields/Select/Input.d.ts.map +1 -1
  403. package/dist/fields/Select/Input.js +45 -40
  404. package/dist/fields/Select/Input.js.map +1 -1
  405. package/dist/fields/Select/index.d.ts +1 -1
  406. package/dist/fields/Select/index.d.ts.map +1 -1
  407. package/dist/fields/Slug/index.css +0 -1
  408. package/dist/fields/Slug/index.d.ts +7 -5
  409. package/dist/fields/Slug/index.d.ts.map +1 -1
  410. package/dist/fields/Slug/index.js +79 -113
  411. package/dist/fields/Slug/index.js.map +1 -1
  412. package/dist/fields/Tabs/index.d.ts +1 -1
  413. package/dist/fields/Text/Input.d.ts.map +1 -1
  414. package/dist/fields/Text/Input.js +25 -21
  415. package/dist/fields/Text/Input.js.map +1 -1
  416. package/dist/fields/Text/index.d.ts +1 -1
  417. package/dist/fields/Text/types.d.ts +6 -2
  418. package/dist/fields/Text/types.d.ts.map +1 -1
  419. package/dist/fields/Text/types.js.map +1 -1
  420. package/dist/fields/Textarea/Input.d.ts.map +1 -1
  421. package/dist/fields/Textarea/Input.js +27 -23
  422. package/dist/fields/Textarea/Input.js.map +1 -1
  423. package/dist/fields/Textarea/index.css +1 -1
  424. package/dist/fields/Textarea/index.d.ts +1 -1
  425. package/dist/fields/Textarea/types.d.ts +4 -0
  426. package/dist/fields/Textarea/types.d.ts.map +1 -1
  427. package/dist/fields/Textarea/types.js.map +1 -1
  428. package/dist/fields/Upload/index.css +19 -4
  429. package/dist/fields/index.d.ts.map +1 -1
  430. package/dist/fields/index.js +2 -0
  431. package/dist/fields/index.js.map +1 -1
  432. package/dist/fields/mergeFieldStyles.d.ts +1 -1
  433. package/dist/fields/mergeFieldStyles.d.ts.map +1 -1
  434. package/dist/forms/Form/context.d.ts.map +1 -1
  435. package/dist/forms/Form/createNestedClientFieldPath.d.ts.map +1 -1
  436. package/dist/forms/Form/errorMessages.d.ts.map +1 -1
  437. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  438. package/dist/forms/Form/fieldReducer.js +3 -1
  439. package/dist/forms/Form/fieldReducer.js.map +1 -1
  440. package/dist/forms/Form/index.d.ts.map +1 -1
  441. package/dist/forms/Form/index.js +9 -15
  442. package/dist/forms/Form/index.js.map +1 -1
  443. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  444. package/dist/forms/Form/reduceToSerializableFields.d.ts.map +1 -1
  445. package/dist/forms/Form/rowHelpers.d.ts.map +1 -1
  446. package/dist/forms/Form/rows.d.ts.map +1 -1
  447. package/dist/forms/Form/types.d.ts +3 -3
  448. package/dist/forms/Form/types.d.ts.map +1 -1
  449. package/dist/forms/Form/types.js.map +1 -1
  450. package/dist/forms/RenderFields/RenderField.d.ts +1 -1
  451. package/dist/forms/RenderFields/RenderField.d.ts.map +1 -1
  452. package/dist/forms/RenderFields/RenderField.js +10 -0
  453. package/dist/forms/RenderFields/RenderField.js.map +1 -1
  454. package/dist/forms/RenderFields/index.css +17 -3
  455. package/dist/forms/WatchChildErrors/buildPathSegments.d.ts.map +1 -1
  456. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  457. package/dist/forms/WatchChildErrors/index.js +2 -2
  458. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  459. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +1 -0
  460. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  461. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +22 -6
  462. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  463. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/index.d.ts +2 -2
  464. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/index.d.ts.map +1 -1
  465. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/index.js.map +1 -1
  466. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/iterateFields.d.ts +2 -2
  467. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/iterateFields.d.ts.map +1 -1
  468. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/iterateFields.js.map +1 -1
  469. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.d.ts +2 -2
  470. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.d.ts.map +1 -1
  471. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js.map +1 -1
  472. package/dist/forms/fieldSchemasToFormState/index.d.ts +2 -1
  473. package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
  474. package/dist/forms/fieldSchemasToFormState/index.js +2 -0
  475. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  476. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts +2 -1
  477. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
  478. package/dist/forms/fieldSchemasToFormState/iterateFields.js +2 -0
  479. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  480. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  481. package/dist/forms/fieldSchemasToFormState/renderField.js +1 -3
  482. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  483. package/dist/forms/useField/index.d.ts.map +1 -1
  484. package/dist/forms/withCondition/index.d.ts +1 -1
  485. package/dist/forms/withCondition/index.d.ts.map +1 -1
  486. package/dist/graphics/Icon/index.js +1 -1
  487. package/dist/graphics/Icon/index.js.map +1 -1
  488. package/dist/hooks/useDebouncedCallback.d.ts.map +1 -1
  489. package/dist/hooks/useDelay.d.ts.map +1 -1
  490. package/dist/hooks/useElementHeightVariable.d.ts.map +1 -1
  491. package/dist/hooks/useHotkey.d.ts.map +1 -1
  492. package/dist/hooks/useIntersect.d.ts.map +1 -1
  493. package/dist/hooks/usePopupWindow.d.ts +1 -1
  494. package/dist/hooks/usePopupWindow.d.ts.map +1 -1
  495. package/dist/hooks/useRelatedCollections.d.ts.map +1 -1
  496. package/dist/hooks/useResize.d.ts.map +1 -1
  497. package/dist/hooks/useUseAsTitle.d.ts.map +1 -1
  498. package/dist/layouts/Root/index.d.ts +1 -1
  499. package/dist/layouts/Root/index.d.ts.map +1 -1
  500. package/dist/layouts/Root/index.js +15 -5
  501. package/dist/layouts/Root/index.js.map +1 -1
  502. package/dist/layouts/Root/index.spec.js +20 -0
  503. package/dist/layouts/Root/index.spec.js.map +1 -0
  504. package/dist/layouts/Root/viewport.d.ts +5 -0
  505. package/dist/layouts/Root/viewport.d.ts.map +1 -0
  506. package/dist/layouts/Root/viewport.js +17 -0
  507. package/dist/layouts/Root/viewport.js.map +1 -0
  508. package/dist/providers/Auth/index.d.ts +8 -10
  509. package/dist/providers/Auth/index.d.ts.map +1 -1
  510. package/dist/providers/Auth/index.js +3 -8
  511. package/dist/providers/Auth/index.js.map +1 -1
  512. package/dist/providers/ClientFunction/index.d.ts.map +1 -1
  513. package/dist/providers/DocumentInfo/index.js.map +1 -1
  514. package/dist/providers/DocumentInfo/types.d.ts +6 -6
  515. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  516. package/dist/providers/DocumentInfo/types.js.map +1 -1
  517. package/dist/providers/DocumentInfo/useGetDocPermissions.d.ts.map +1 -1
  518. package/dist/providers/DocumentTitle/index.d.ts +1 -0
  519. package/dist/providers/DocumentTitle/index.d.ts.map +1 -1
  520. package/dist/providers/DocumentTitle/index.js +2 -0
  521. package/dist/providers/DocumentTitle/index.js.map +1 -1
  522. package/dist/providers/Embed/index.d.ts +24 -0
  523. package/dist/providers/Embed/index.d.ts.map +1 -0
  524. package/dist/providers/Embed/index.js +105 -0
  525. package/dist/providers/Embed/index.js.map +1 -0
  526. package/dist/providers/FormErrorHandler/index.d.ts +20 -0
  527. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -0
  528. package/dist/providers/FormErrorHandler/index.js +6 -0
  529. package/dist/providers/FormErrorHandler/index.js.map +1 -0
  530. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  531. package/dist/providers/ListQuery/index.js +8 -1
  532. package/dist/providers/ListQuery/index.js.map +1 -1
  533. package/dist/providers/ListQuery/mergeQuery.d.ts.map +1 -1
  534. package/dist/providers/ListQuery/sanitizeQuery.d.ts.map +1 -1
  535. package/dist/providers/LivePreview/sizeReducer.d.ts +1 -1
  536. package/dist/providers/LivePreview/sizeReducer.d.ts.map +1 -1
  537. package/dist/providers/Root/index.d.ts +3 -2
  538. package/dist/providers/Root/index.d.ts.map +1 -1
  539. package/dist/providers/Root/index.js +33 -27
  540. package/dist/providers/Root/index.js.map +1 -1
  541. package/dist/providers/SidebarTabs/index.d.ts +3 -2
  542. package/dist/providers/SidebarTabs/index.d.ts.map +1 -1
  543. package/dist/providers/SidebarTabs/index.js.map +1 -1
  544. package/dist/providers/TableColumns/buildColumnState/filterFields.d.ts.map +1 -1
  545. package/dist/providers/TableColumns/buildColumnState/filterFieldsWithPermissions.d.ts.map +1 -1
  546. package/dist/providers/TableColumns/buildColumnState/findValueFromPath.d.ts.map +1 -1
  547. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  548. package/dist/providers/TableColumns/buildColumnState/index.js +1 -1
  549. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  550. package/dist/providers/TableColumns/buildColumnState/index.spec.js +40 -0
  551. package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +1 -0
  552. package/dist/providers/TableColumns/getInitialColumns.d.ts +1 -1
  553. package/dist/providers/TableColumns/getInitialColumns.d.ts.map +1 -1
  554. package/dist/providers/Theme/index.d.ts +5 -2
  555. package/dist/providers/Theme/index.d.ts.map +1 -1
  556. package/dist/providers/Theme/index.js +109 -96
  557. package/dist/providers/Theme/index.js.map +1 -1
  558. package/dist/providers/Theme/shared.d.ts +3 -0
  559. package/dist/providers/Theme/shared.d.ts.map +1 -0
  560. package/dist/providers/Theme/shared.js +2 -0
  561. package/dist/providers/Theme/shared.js.map +1 -0
  562. package/dist/providers/UploadEdits/index.d.ts.map +1 -1
  563. package/dist/providers/UploadHandlers/index.d.ts +2 -7
  564. package/dist/providers/UploadHandlers/index.d.ts.map +1 -1
  565. package/dist/providers/UploadHandlers/index.js +102 -42
  566. package/dist/providers/UploadHandlers/index.js.map +1 -1
  567. package/dist/styles.css +31 -14
  568. package/dist/templates/Default/index.d.ts.map +1 -1
  569. package/dist/templates/Default/index.js +6 -0
  570. package/dist/templates/Default/index.js.map +1 -1
  571. package/dist/utilities/api.d.ts.map +1 -1
  572. package/dist/utilities/buildClientFieldSchemaMap/index.d.ts.map +1 -1
  573. package/dist/utilities/buildClientFieldSchemaMap/traverseFields.d.ts.map +1 -1
  574. package/dist/utilities/buildFieldSchemaMap/index.d.ts.map +1 -1
  575. package/dist/utilities/buildFieldSchemaMap/traverseFields.d.ts.map +1 -1
  576. package/dist/utilities/buildFormState.d.ts +2 -2
  577. package/dist/utilities/buildFormState.d.ts.map +1 -1
  578. package/dist/utilities/buildFormState.js +1 -0
  579. package/dist/utilities/buildFormState.js.map +1 -1
  580. package/dist/utilities/checkDependencies.d.ts.map +1 -1
  581. package/dist/utilities/combineFieldLabel.d.ts.map +1 -1
  582. package/dist/utilities/combineFieldLabel.js +5 -1
  583. package/dist/utilities/combineFieldLabel.js.map +1 -1
  584. package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
  585. package/dist/utilities/copyDataFromLocale.js +1 -0
  586. package/dist/utilities/copyDataFromLocale.js.map +1 -1
  587. package/dist/utilities/filterOutUploadFields.d.ts.map +1 -1
  588. package/dist/utilities/findLocaleFromCode.d.ts.map +1 -1
  589. package/dist/utilities/formatAbsoluteURL.d.ts.map +1 -1
  590. package/dist/utilities/formatDocTitle/formatDateTitle.d.ts.map +1 -1
  591. package/dist/utilities/formatDocTitle/formatRelationshipTitle.d.ts.map +1 -1
  592. package/dist/utilities/formatDocTitle/index.d.ts +1 -1
  593. package/dist/utilities/formatDocTitle/index.d.ts.map +1 -1
  594. package/dist/utilities/formatDocTitle/index.js +1 -1
  595. package/dist/utilities/formatDocTitle/index.js.map +1 -1
  596. package/dist/utilities/formatFields.d.ts.map +1 -1
  597. package/dist/utilities/formatMetadata.d.ts.map +1 -1
  598. package/dist/utilities/formatRelativeDate.d.ts +15 -0
  599. package/dist/utilities/formatRelativeDate.d.ts.map +1 -0
  600. package/dist/utilities/formatRelativeDate.js +62 -0
  601. package/dist/utilities/formatRelativeDate.js.map +1 -0
  602. package/dist/utilities/generateFieldID.d.ts +1 -1
  603. package/dist/utilities/generateFieldID.d.ts.map +1 -1
  604. package/dist/utilities/generateFieldID.js +2 -2
  605. package/dist/utilities/generateFieldID.js.map +1 -1
  606. package/dist/utilities/getColumns.d.ts.map +1 -1
  607. package/dist/utilities/getDisplayedFieldValue.d.ts.map +1 -1
  608. package/dist/utilities/getDocPreferences.d.ts +2 -2
  609. package/dist/utilities/getDocPreferences.d.ts.map +1 -1
  610. package/dist/utilities/getDocPreferences.js.map +1 -1
  611. package/dist/utilities/getDocumentData.d.ts +2 -2
  612. package/dist/utilities/getDocumentData.d.ts.map +1 -1
  613. package/dist/utilities/getDocumentData.js.map +1 -1
  614. package/dist/utilities/getDocumentPermissions.d.ts.map +1 -1
  615. package/dist/utilities/getGlobalData.d.ts +2 -2
  616. package/dist/utilities/getGlobalData.d.ts.map +1 -1
  617. package/dist/utilities/getGlobalData.js.map +1 -1
  618. package/dist/utilities/getHasScheduledPublish.d.ts +2 -2
  619. package/dist/utilities/getHasScheduledPublish.d.ts.map +1 -1
  620. package/dist/utilities/getHasScheduledPublish.js.map +1 -1
  621. package/dist/utilities/getIsLocked.d.ts +2 -2
  622. package/dist/utilities/getIsLocked.d.ts.map +1 -1
  623. package/dist/utilities/getIsLocked.js.map +1 -1
  624. package/dist/utilities/getLanguageDir.d.ts +12 -0
  625. package/dist/utilities/getLanguageDir.d.ts.map +1 -0
  626. package/dist/utilities/getLanguageDir.js +12 -0
  627. package/dist/utilities/getLanguageDir.js.map +1 -0
  628. package/dist/utilities/getOffsetTop.d.ts.map +1 -1
  629. package/dist/utilities/getRequestEmbed.d.ts +14 -0
  630. package/dist/utilities/getRequestEmbed.d.ts.map +1 -0
  631. package/dist/utilities/getRequestEmbed.js +10 -0
  632. package/dist/utilities/getRequestEmbed.js.map +1 -0
  633. package/dist/utilities/getRequestHighContrast.d.ts.map +1 -1
  634. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  635. package/dist/utilities/getRequestTheme.d.ts +1 -1
  636. package/dist/utilities/getRequestTheme.d.ts.map +1 -1
  637. package/dist/utilities/getRequestTheme.js +1 -1
  638. package/dist/utilities/getRequestTheme.js.map +1 -1
  639. package/dist/utilities/getRouteWithoutAdmin.d.ts.map +1 -1
  640. package/dist/utilities/getSupportedMonacoLocale.d.ts.map +1 -1
  641. package/dist/utilities/getVersions.d.ts +2 -2
  642. package/dist/utilities/getVersions.d.ts.map +1 -1
  643. package/dist/utilities/getVersions.js +2 -5
  644. package/dist/utilities/getVersions.js.map +1 -1
  645. package/dist/utilities/handleAuthRedirect.d.ts +2 -2
  646. package/dist/utilities/handleAuthRedirect.d.ts.map +1 -1
  647. package/dist/utilities/handleAuthRedirect.js.map +1 -1
  648. package/dist/utilities/handleBackToDashboard.d.ts.map +1 -1
  649. package/dist/utilities/handleFormStateLocking.d.ts +2 -2
  650. package/dist/utilities/handleFormStateLocking.d.ts.map +1 -1
  651. package/dist/utilities/handleFormStateLocking.js.map +1 -1
  652. package/dist/utilities/handleGoBack.d.ts.map +1 -1
  653. package/dist/utilities/handleLivePreview.d.ts +1 -0
  654. package/dist/utilities/handleLivePreview.d.ts.map +1 -1
  655. package/dist/utilities/handlePreview.d.ts.map +1 -1
  656. package/dist/utilities/handleServerFunctions.d.ts +32 -8
  657. package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
  658. package/dist/utilities/handleServerFunctions.js +17 -37
  659. package/dist/utilities/handleServerFunctions.js.map +1 -1
  660. package/dist/utilities/handleStaleDataCheck.d.ts.map +1 -1
  661. package/dist/utilities/handleTakeOver.d.ts +5 -5
  662. package/dist/utilities/handleTakeOver.d.ts.map +1 -1
  663. package/dist/utilities/handleTakeOver.js.map +1 -1
  664. package/dist/utilities/hasOptionLabelJSXElement.d.ts.map +1 -1
  665. package/dist/utilities/hasSavePermission.d.ts.map +1 -1
  666. package/dist/utilities/initReq.d.ts.map +1 -1
  667. package/dist/utilities/isClientUserObject.d.ts +2 -2
  668. package/dist/utilities/isClientUserObject.d.ts.map +1 -1
  669. package/dist/utilities/isClientUserObject.js.map +1 -1
  670. package/dist/utilities/isCustomAdminView.d.ts.map +1 -1
  671. package/dist/utilities/isEditing.d.ts.map +1 -1
  672. package/dist/utilities/isPathMatchingRoute.d.ts.map +1 -1
  673. package/dist/utilities/isPublicAdminRoute.d.ts.map +1 -1
  674. package/dist/utilities/isURLAllowed.d.ts.map +1 -1
  675. package/dist/utilities/isURLAllowed.js +9 -3
  676. package/dist/utilities/isURLAllowed.js.map +1 -1
  677. package/dist/utilities/recentlyViewed.d.ts +16 -0
  678. package/dist/utilities/recentlyViewed.d.ts.map +1 -0
  679. package/dist/utilities/recentlyViewed.js +21 -0
  680. package/dist/utilities/recentlyViewed.js.map +1 -0
  681. package/dist/utilities/recentlyViewed.spec.js +92 -0
  682. package/dist/utilities/recentlyViewed.spec.js.map +1 -0
  683. package/dist/utilities/reduceFieldsToOptions.d.ts.map +1 -1
  684. package/dist/utilities/reduceFieldsToValuesWithValidation.d.ts.map +1 -1
  685. package/dist/utilities/renderTable.d.ts +2 -2
  686. package/dist/utilities/renderTable.d.ts.map +1 -1
  687. package/dist/utilities/renderTable.js +18 -2
  688. package/dist/utilities/renderTable.js.map +1 -1
  689. package/dist/utilities/resolveFilterOptions.d.ts +1 -1
  690. package/dist/utilities/resolveFilterOptions.d.ts.map +1 -1
  691. package/dist/utilities/sanitizeFilterOptionsQuery.d.ts.map +1 -1
  692. package/dist/utilities/scrollToID.d.ts.map +1 -1
  693. package/dist/utilities/selectiveCache.d.ts.map +1 -1
  694. package/dist/utilities/serverFunctionRegistry.d.ts +12 -7
  695. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  696. package/dist/utilities/serverFunctionRegistry.js +25 -7
  697. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  698. package/dist/utilities/setsAreEqual.d.ts.map +1 -1
  699. package/dist/utilities/slugify.d.ts +1 -1
  700. package/dist/utilities/slugify.d.ts.map +1 -1
  701. package/dist/utilities/slugify.js +50 -7
  702. package/dist/utilities/slugify.js.map +1 -1
  703. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  704. package/dist/utilities/upsertPreferences.d.ts.map +1 -1
  705. package/dist/views/Account/ResetPreferences/index.d.ts +2 -2
  706. package/dist/views/Account/ResetPreferences/index.d.ts.map +1 -1
  707. package/dist/views/Account/ResetPreferences/index.js.map +1 -1
  708. package/dist/views/Account/Settings/index.d.ts +2 -2
  709. package/dist/views/Account/Settings/index.d.ts.map +1 -1
  710. package/dist/views/Account/Settings/index.js.map +1 -1
  711. package/dist/views/CollectionTrash/generateCollectionTrashMetadata.d.ts.map +1 -1
  712. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.d.ts.map +1 -1
  713. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js +27 -23
  714. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js.map +1 -1
  715. package/dist/views/Dashboard/Default/ModularDashboard/index.css +2 -8
  716. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +5 -5
  717. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  718. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +10 -10
  719. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  720. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.d.ts +2 -2
  721. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.d.ts.map +1 -1
  722. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.js.map +1 -1
  723. package/dist/views/Dashboard/Default/index.d.ts +2 -2
  724. package/dist/views/Dashboard/Default/index.d.ts.map +1 -1
  725. package/dist/views/Dashboard/Default/index.js.map +1 -1
  726. package/dist/views/Document/getCustomDocumentViewByKey.d.ts +1 -1
  727. package/dist/views/Document/getCustomDocumentViewByKey.d.ts.map +1 -1
  728. package/dist/views/Document/getCustomViewByRoute.d.ts +1 -1
  729. package/dist/views/Document/getCustomViewByRoute.d.ts.map +1 -1
  730. package/dist/views/Document/getDocumentView.d.ts.map +1 -1
  731. package/dist/views/Document/getMetaBySegment.d.ts.map +1 -1
  732. package/dist/views/Document/index.d.ts +1 -1
  733. package/dist/views/Document/index.d.ts.map +1 -1
  734. package/dist/views/Document/index.js +17 -1
  735. package/dist/views/Document/index.js.map +1 -1
  736. package/dist/views/Document/recordRecentlyViewed.d.ts +12 -0
  737. package/dist/views/Document/recordRecentlyViewed.d.ts.map +1 -0
  738. package/dist/views/Document/recordRecentlyViewed.js +40 -0
  739. package/dist/views/Document/recordRecentlyViewed.js.map +1 -0
  740. package/dist/views/Edit/index.css +61 -53
  741. package/dist/views/Edit/index.d.ts.map +1 -1
  742. package/dist/views/Edit/index.js +1 -1
  743. package/dist/views/Edit/index.js.map +1 -1
  744. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts +2 -2
  745. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts.map +1 -1
  746. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js.map +1 -1
  747. package/dist/views/HierarchyList/HierarchyTable/types.d.ts +2 -2
  748. package/dist/views/HierarchyList/HierarchyTable/types.d.ts.map +1 -1
  749. package/dist/views/HierarchyList/HierarchyTable/types.js.map +1 -1
  750. package/dist/views/HierarchyList/TypeFilter/index.d.ts.map +1 -1
  751. package/dist/views/HierarchyList/TypeFilter/index.js +3 -0
  752. package/dist/views/HierarchyList/TypeFilter/index.js.map +1 -1
  753. package/dist/views/HierarchyList/index.d.ts.map +1 -1
  754. package/dist/views/HierarchyList/index.js +2 -6
  755. package/dist/views/HierarchyList/index.js.map +1 -1
  756. package/dist/views/List/createSerializableValue.d.ts.map +1 -1
  757. package/dist/views/List/extractRelationshipDisplayValue.d.ts.map +1 -1
  758. package/dist/views/List/extractValueOrRelationshipID.d.ts.map +1 -1
  759. package/dist/views/List/generateListViewMetadata.d.ts.map +1 -1
  760. package/dist/views/List/handleGroupBy.d.ts.map +1 -1
  761. package/dist/views/List/handleHierarchy.d.ts +1 -1
  762. package/dist/views/List/handleHierarchy.d.ts.map +1 -1
  763. package/dist/views/List/index.d.ts.map +1 -1
  764. package/dist/views/List/index.js +5 -7
  765. package/dist/views/List/index.js.map +1 -1
  766. package/dist/views/List/renderListViewSlots.d.ts.map +1 -1
  767. package/dist/views/List/resolveAllFilterOptions.d.ts.map +1 -1
  768. package/dist/views/List/transformColumnsToSelect.d.ts.map +1 -1
  769. package/dist/views/Logout/LogoutClient.js +28 -32
  770. package/dist/views/Logout/LogoutClient.js.map +1 -1
  771. package/dist/views/Logout/index.d.ts.map +1 -1
  772. package/dist/views/Logout/index.js +11 -0
  773. package/dist/views/Logout/index.js.map +1 -1
  774. package/dist/views/NotFound/page.d.ts.map +1 -1
  775. package/dist/views/Root/generateCustomViewMetadata.d.ts.map +1 -1
  776. package/dist/views/Root/generatePageMetadata.d.ts.map +1 -1
  777. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts +1 -1
  778. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  779. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts +1 -1
  780. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
  781. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  782. package/dist/views/Root/getCustomViewByRoute.d.ts.map +1 -1
  783. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  784. package/dist/views/Root/index.d.ts +12 -1
  785. package/dist/views/Root/index.d.ts.map +1 -1
  786. package/dist/views/Root/index.js +10 -3
  787. package/dist/views/Root/index.js.map +1 -1
  788. package/dist/views/Unauthorized/index.d.ts.map +1 -1
  789. package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.d.ts.map +1 -1
  790. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.d.ts.map +1 -1
  791. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.d.ts.map +1 -1
  792. package/dist/views/Version/RenderFieldsToDiff/fields/index.d.ts.map +1 -1
  793. package/dist/views/Version/RenderFieldsToDiff/fields/index.js +1 -0
  794. package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -1
  795. package/dist/views/Version/RenderFieldsToDiff/index.d.ts.map +1 -1
  796. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.d.ts.map +1 -1
  797. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +1 -0
  798. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
  799. package/dist/views/Version/SelectComparison/VersionDrawer/index.d.ts.map +1 -1
  800. package/dist/views/Version/SelectComparison/index.d.ts.map +1 -1
  801. package/dist/views/Version/SelectComparison/index.js +1 -0
  802. package/dist/views/Version/SelectComparison/index.js.map +1 -1
  803. package/dist/views/Versions/buildColumns.d.ts +1 -1
  804. package/dist/views/Versions/buildColumns.d.ts.map +1 -1
  805. package/dist/views/Versions/fetchVersions.d.ts +8 -8
  806. package/dist/views/Versions/fetchVersions.d.ts.map +1 -1
  807. package/dist/views/Versions/fetchVersions.js.map +1 -1
  808. package/dist/views/Versions/types.d.ts +2 -2
  809. package/dist/views/Versions/types.d.ts.map +1 -1
  810. package/dist/views/Versions/types.js.map +1 -1
  811. package/dist/widgets/CollectionCards/getCollectionCardsData.d.ts +2 -2
  812. package/dist/widgets/CollectionCards/getCollectionCardsData.d.ts.map +1 -1
  813. package/dist/widgets/CollectionCards/getCollectionCardsData.js.map +1 -1
  814. package/dist/widgets/CollectionCards/index.client.js.map +1 -1
  815. package/dist/widgets/CollectionQuery/SortField/index.d.ts +3 -0
  816. package/dist/widgets/CollectionQuery/SortField/index.d.ts.map +1 -0
  817. package/dist/widgets/CollectionQuery/SortField/index.js +118 -0
  818. package/dist/widgets/CollectionQuery/SortField/index.js.map +1 -0
  819. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.d.ts +18 -0
  820. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.d.ts.map +1 -0
  821. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.js +91 -0
  822. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.js.map +1 -0
  823. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js +100 -0
  824. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js.map +1 -0
  825. package/dist/widgets/CollectionQuery/index.css +64 -0
  826. package/dist/widgets/CollectionQuery/index.d.ts +16 -0
  827. package/dist/widgets/CollectionQuery/index.d.ts.map +1 -0
  828. package/dist/widgets/CollectionQuery/index.js +328 -0
  829. package/dist/widgets/CollectionQuery/index.js.map +1 -0
  830. package/dist/widgets/RecentlyViewed/CollectionsField/index.css +14 -0
  831. package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts +10 -0
  832. package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts.map +1 -0
  833. package/dist/widgets/RecentlyViewed/CollectionsField/index.js +76 -0
  834. package/dist/widgets/RecentlyViewed/CollectionsField/index.js.map +1 -0
  835. package/dist/widgets/RecentlyViewed/index.d.ts +10 -0
  836. package/dist/widgets/RecentlyViewed/index.d.ts.map +1 -0
  837. package/dist/widgets/RecentlyViewed/index.js +148 -0
  838. package/dist/widgets/RecentlyViewed/index.js.map +1 -0
  839. package/dist/widgets/WidgetCard/index.css +155 -0
  840. package/dist/widgets/WidgetCard/index.d.ts +19 -0
  841. package/dist/widgets/WidgetCard/index.d.ts.map +1 -0
  842. package/dist/widgets/WidgetCard/index.js +49 -0
  843. package/dist/widgets/WidgetCard/index.js.map +1 -0
  844. package/package.json +7 -515
  845. package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.d.ts.map +0 -1
  846. package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.js.map +0 -1
  847. package/dist/elements/Hierarchy/Drawer/index.css +0 -90
  848. package/dist/elements/Hierarchy/Drawer/index.d.ts +0 -20
  849. package/dist/elements/Hierarchy/Drawer/index.d.ts.map +0 -1
  850. package/dist/elements/Hierarchy/Drawer/index.js.map +0 -1
  851. package/dist/elements/Hierarchy/Drawer/types.d.ts.map +0 -1
  852. package/dist/elements/Hierarchy/Drawer/types.js.map +0 -1
  853. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.d.ts +0 -30
  854. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.d.ts.map +0 -1
  855. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.js.map +0 -1
  856. package/dist/elements/Nav/NavToggler/index.css +0 -12
  857. package/dist/elements/Nav/NavToggler/index.d.ts +0 -9
  858. package/dist/elements/Nav/NavToggler/index.d.ts.map +0 -1
  859. package/dist/elements/Nav/NavToggler/index.js +0 -91
  860. package/dist/elements/Nav/NavToggler/index.js.map +0 -1
  861. package/dist/elements/Nav/SettingsMenuButton/index.scss +0 -11
  862. package/dist/elements/RelationshipTable/Pagination.css +0 -39
  863. package/dist/scss/app.scss +0 -183
  864. package/dist/scss/colors.scss +0 -191
  865. package/dist/scss/custom.css +0 -1
  866. package/dist/scss/queries.scss +0 -27
  867. package/dist/scss/styles.scss +0 -9
  868. package/dist/scss/svg.scss +0 -10
  869. package/dist/scss/toastify.scss +0 -61
  870. package/dist/scss/vars.scss +0 -192
  871. package/dist/scss/z-index.scss +0 -9
  872. /package/dist/elements/Hierarchy/{Drawer → Modal}/fetchAncestorPath.d.ts +0 -0
  873. /package/dist/elements/Hierarchy/{Drawer → Modal}/fetchAncestorPath.js +0 -0
  874. /package/dist/elements/Hierarchy/{Drawer → Modal}/types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","Modal","useModal","React","createContext","use","useCallback","useEffect","useId","useLayoutEffect","useMemo","useState","ChevronIcon","useTranslation","Button","baseClass","drawerZBase","formatDrawerSlug","slug","depth","useDrawerSlug","DrawerToggler","t0","$","buttonStyle","children","className","disabled","onClick","rest","openModal","t1","e","handleClick","_jsx","type","Drawer","props","DrawerDepthProvider","DrawerInner","Header","headerActions","hoverTitle","title","t","closeModal","modalState","drawerDepth","useDrawerDepth","uid","openDrawerDepths","registerDrawer","unregisterDrawer","useDrawerStack","isOpen","t2","layersFromTop","filter","length","animateIn","setAnimateIn","t3","t4","t5","t6","Boolean","t7","join","t8","t9","t10","t11","_jsxs","closeOnBlur","style","zIndex","id","undefined","icon","direction","size","map","_temp","DrawerDepthContext","parentDepth","value","DrawerStackContext","DrawerStackProvider","openDrawers","setOpenDrawers","prev","next","Object","values","action","i","margin","label"],"sources":["../../../src/elements/Drawer/index.tsx"],"sourcesContent":["'use client'\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport React, {\n createContext,\n use,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react'\n\nimport type { Props, TogglerProps } from './types.js'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport './index.css'\n\nconst baseClass = 'drawer'\n\nexport const drawerZBase = 100\n\nexport const formatDrawerSlug = ({ slug, depth }: { depth: number; slug: string }): string =>\n `drawer_${depth}_${slug}`\n\nexport { useDrawerSlug } from './useDrawerSlug.js'\n\nexport const DrawerToggler: React.FC<TogglerProps> = ({\n slug,\n buttonStyle,\n children,\n className,\n disabled,\n onClick,\n ...rest\n}) => {\n const { openModal } = useModal()\n\n const handleClick = useCallback(\n (e) => {\n openModal(slug)\n if (typeof onClick === 'function') {\n onClick(e)\n }\n },\n [openModal, slug, onClick],\n )\n\n if (buttonStyle) {\n return (\n <Button\n buttonStyle={buttonStyle}\n className={className}\n disabled={disabled}\n onClick={handleClick}\n {...rest}\n >\n {children}\n </Button>\n )\n }\n\n return (\n <button className={className} disabled={disabled} onClick={handleClick} type=\"button\" {...rest}>\n {children}\n </button>\n )\n}\n\nexport const Drawer: React.FC<Props> = (props) => (\n <DrawerDepthProvider>\n <DrawerInner {...props} />\n </DrawerDepthProvider>\n)\n\nconst DrawerInner: React.FC<Props> = ({\n slug,\n children,\n className,\n Header,\n headerActions,\n hoverTitle,\n title,\n}) => {\n const { t } = useTranslation()\n const { closeModal, modalState } = useModal()\n const drawerDepth = useDrawerDepth()\n const uid = useId()\n const { openDrawerDepths, registerDrawer, unregisterDrawer } = useDrawerStack()\n\n const isOpen = !!modalState[slug]?.isOpen\n\n useEffect(() => {\n if (isOpen) {\n registerDrawer(uid, drawerDepth)\n\n return () => unregisterDrawer(uid)\n }\n }, [isOpen, uid, drawerDepth, registerDrawer, unregisterDrawer])\n\n const layersFromTop = openDrawerDepths.filter((depth) => depth > drawerDepth).length\n\n const [animateIn, setAnimateIn] = useState(isOpen)\n\n useLayoutEffect(() => {\n setAnimateIn(isOpen)\n }, [isOpen])\n\n if (isOpen) {\n // IMPORTANT: do not render the drawer until it is explicitly open, this is to avoid large html trees especially when nesting drawers\n return (\n <Modal\n className={[className, baseClass, animateIn && `${baseClass}--is-open`]\n .filter(Boolean)\n .join(' ')}\n // Fixes https://github.com/payloadcms/payload/issues/13778\n closeOnBlur={false}\n slug={slug}\n style={\n {\n '--drawer-layer-offset': `calc(${layersFromTop} * var(--spacer-3))`,\n zIndex: drawerZBase + drawerDepth,\n } as React.CSSProperties\n }\n >\n <div className={`${baseClass}__blur-bg`} />\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__close`}\n id={`close-drawer__${slug}`}\n onClick={() => closeModal(slug)}\n type=\"button\"\n />\n <div className={`${baseClass}__content`}>\n <div className={`${baseClass}__blur-bg-content`} />\n <div className={`${baseClass}__content-children`}>\n {Header}\n {Header === undefined && (\n <div className={`${baseClass}__header`}>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__header__close`}\n icon={<ChevronIcon direction=\"left\" size={24} />}\n onClick={() => closeModal(slug)}\n />\n <h2 className={`${baseClass}__header__title`} title={hoverTitle ? title : null}>\n {title}\n </h2>\n {headerActions && headerActions.length > 0 && (\n <div className={`${baseClass}__header__actions`}>\n {headerActions.map((action, i) => (\n <Button\n buttonStyle={action.style || 'secondary'}\n disabled={action.disabled}\n key={i}\n margin={false}\n onClick={action.onClick}\n size=\"medium\"\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n )}\n {children}\n </div>\n </div>\n </Modal>\n )\n }\n\n return null\n}\n\nexport const DrawerDepthContext = createContext(0)\n\nexport const DrawerDepthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const parentDepth = useDrawerDepth()\n const depth = parentDepth + 1\n\n return <DrawerDepthContext value={depth}>{children}</DrawerDepthContext>\n}\n\nexport const useDrawerDepth = (): number => use(DrawerDepthContext)\n\ntype DrawerStackContextType = {\n /** Depths of every currently-open drawer, used to compute layer offsets. */\n openDrawerDepths: number[]\n registerDrawer: (uid: string, depth: number) => void\n unregisterDrawer: (uid: string) => void\n}\n\nconst DrawerStackContext = createContext<DrawerStackContextType>({\n openDrawerDepths: [],\n registerDrawer: () => {},\n unregisterDrawer: () => {},\n})\n\n/**\n * Tracks the depths of all currently-open drawers so each drawer can compute\n * its leftward offset relative to the rest of the open stack.\n *\n * Why this is needed: drawers are anchored to the right edge and stack as real\n * layers. When a child drawer opens on top of its parent(s), every drawer\n * beneath it must slide left to peek out from underneath the active (topmost)\n * drawer — and slide back when that child closes. A drawer's own depth is\n * static, so it cannot know on its own whether something deeper is currently\n * open; that requires shared runtime state about the whole open stack.\n *\n * We track real `Drawer` instances (rather than scanning modal state by slug\n * name) so confirmation modals like `leave-without-saving-...` never count, and\n * so stacking never depends on slug naming conventions.\n */\nexport const DrawerStackProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [openDrawers, setOpenDrawers] = useState<Record<string, number>>({})\n\n const registerDrawer = useCallback((uid: string, depth: number) => {\n setOpenDrawers((prev) => (prev[uid] === depth ? prev : { ...prev, [uid]: depth }))\n }, [])\n\n const unregisterDrawer = useCallback((uid: string) => {\n setOpenDrawers((prev) => {\n if (!(uid in prev)) {\n return prev\n }\n\n const next = { ...prev }\n delete next[uid]\n return next\n })\n }, [])\n\n const value = useMemo<DrawerStackContextType>(\n () => ({\n openDrawerDepths: Object.values(openDrawers),\n registerDrawer,\n unregisterDrawer,\n }),\n [openDrawers, registerDrawer, unregisterDrawer],\n )\n\n return <DrawerStackContext value={value}>{children}</DrawerStackContext>\n}\n\nexport const useDrawerStack = (): DrawerStackContextType => use(DrawerStackContext)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","Modal","useModal","React","createContext","use","useCallback","useEffect","useId","useLayoutEffect","useMemo","useState","ChevronIcon","useTranslation","Button","baseClass","drawerZBase","formatDrawerSlug","slug","depth","useDrawerSlug","DrawerToggler","t0","$","buttonStyle","children","className","disabled","onClick","rest","openModal","t1","e","handleClick","_jsx","type","Drawer","props","DrawerDepthProvider","DrawerInner","Header","headerActions","hoverTitle","title","t","closeModal","modalState","drawerDepth","useDrawerDepth","uid","openDrawerDepths","registerDrawer","unregisterDrawer","useDrawerStack","isOpen","t2","layersFromTop","filter","length","animateIn","setAnimateIn","t3","t4","t5","t6","Boolean","t7","join","t8","t9","t10","t11","_jsxs","closeOnBlur","lockBodyScroll","style","zIndex","id","undefined","icon","direction","size","map","_temp","DrawerDepthContext","parentDepth","value","DrawerStackContext","DrawerStackProvider","openDrawers","setOpenDrawers","prev","next","Object","values","action","i","margin","label"],"sources":["../../../src/elements/Drawer/index.tsx"],"sourcesContent":["'use client'\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport React, {\n createContext,\n use,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react'\n\nimport type { Props, TogglerProps } from './types.js'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport './index.css'\n\nconst baseClass = 'drawer'\n\nexport const drawerZBase = 100\n\nexport const formatDrawerSlug = ({ slug, depth }: { depth: number; slug: string }): string =>\n `drawer_${depth}_${slug}`\n\nexport { useDrawerSlug } from './useDrawerSlug.js'\n\nexport const DrawerToggler: React.FC<TogglerProps> = ({\n slug,\n buttonStyle,\n children,\n className,\n disabled,\n onClick,\n ...rest\n}) => {\n const { openModal } = useModal()\n\n const handleClick = useCallback(\n (e) => {\n openModal(slug)\n if (typeof onClick === 'function') {\n onClick(e)\n }\n },\n [openModal, slug, onClick],\n )\n\n if (buttonStyle) {\n return (\n <Button\n buttonStyle={buttonStyle}\n className={className}\n disabled={disabled}\n onClick={handleClick}\n {...rest}\n >\n {children}\n </Button>\n )\n }\n\n return (\n <button className={className} disabled={disabled} onClick={handleClick} type=\"button\" {...rest}>\n {children}\n </button>\n )\n}\n\nexport const Drawer: React.FC<Props> = (props) => (\n <DrawerDepthProvider>\n <DrawerInner {...props} />\n </DrawerDepthProvider>\n)\n\nconst DrawerInner: React.FC<Props> = ({\n slug,\n children,\n className,\n Header,\n headerActions,\n hoverTitle,\n title,\n}) => {\n const { t } = useTranslation()\n const { closeModal, modalState } = useModal()\n const drawerDepth = useDrawerDepth()\n const uid = useId()\n const { openDrawerDepths, registerDrawer, unregisterDrawer } = useDrawerStack()\n\n const isOpen = !!modalState[slug]?.isOpen\n\n useEffect(() => {\n if (isOpen) {\n registerDrawer(uid, drawerDepth)\n\n return () => unregisterDrawer(uid)\n }\n }, [isOpen, uid, drawerDepth, registerDrawer, unregisterDrawer])\n\n const layersFromTop = openDrawerDepths.filter((depth) => depth > drawerDepth).length\n\n const [animateIn, setAnimateIn] = useState(isOpen)\n\n useLayoutEffect(() => {\n setAnimateIn(isOpen)\n }, [isOpen])\n\n if (isOpen) {\n // IMPORTANT: do not render the drawer until it is explicitly open, this is to avoid large html trees especially when nesting drawers\n return (\n <Modal\n className={[className, baseClass, animateIn && `${baseClass}--is-open`]\n .filter(Boolean)\n .join(' ')}\n // Fixes https://github.com/payloadcms/payload/issues/13778\n closeOnBlur={false}\n // Prevents body-scroll-lock from blocking iOS touch scroll inside the drawer; background scroll is handled by CSS (`body:has(.drawer--is-open)`).\n lockBodyScroll={false}\n slug={slug}\n style={\n {\n '--drawer-layer-offset': `calc(${layersFromTop} * var(--spacer-3))`,\n zIndex: drawerZBase + drawerDepth,\n } as React.CSSProperties\n }\n >\n <div className={`${baseClass}__blur-bg`} />\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__close`}\n id={`close-drawer__${slug}`}\n onClick={() => closeModal(slug)}\n type=\"button\"\n />\n <div className={`${baseClass}__content`}>\n <div className={`${baseClass}__blur-bg-content`} />\n <div className={`${baseClass}__content-children`}>\n {Header}\n {Header === undefined && (\n <div className={`${baseClass}__header`}>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__header__close`}\n icon={<ChevronIcon direction=\"left\" size={24} />}\n onClick={() => closeModal(slug)}\n />\n <h2 className={`${baseClass}__header__title`} title={hoverTitle ? title : null}>\n {title}\n </h2>\n {headerActions && headerActions.length > 0 && (\n <div className={`${baseClass}__header__actions`}>\n {headerActions.map((action, i) => (\n <Button\n buttonStyle={action.style || 'secondary'}\n disabled={action.disabled}\n key={i}\n margin={false}\n onClick={action.onClick}\n size=\"medium\"\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n )}\n {children}\n </div>\n </div>\n </Modal>\n )\n }\n\n return null\n}\n\nexport const DrawerDepthContext = createContext(0)\n\nexport const DrawerDepthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const parentDepth = useDrawerDepth()\n const depth = parentDepth + 1\n\n return <DrawerDepthContext value={depth}>{children}</DrawerDepthContext>\n}\n\nexport const useDrawerDepth = (): number => use(DrawerDepthContext)\n\ntype DrawerStackContextType = {\n /** Depths of every currently-open drawer, used to compute layer offsets. */\n openDrawerDepths: number[]\n registerDrawer: (uid: string, depth: number) => void\n unregisterDrawer: (uid: string) => void\n}\n\nconst DrawerStackContext = createContext<DrawerStackContextType>({\n openDrawerDepths: [],\n registerDrawer: () => {},\n unregisterDrawer: () => {},\n})\n\n/**\n * Tracks the depths of all currently-open drawers so each drawer can compute\n * its leftward offset relative to the rest of the open stack.\n *\n * Why this is needed: drawers are anchored to the right edge and stack as real\n * layers. When a child drawer opens on top of its parent(s), every drawer\n * beneath it must slide left to peek out from underneath the active (topmost)\n * drawer — and slide back when that child closes. A drawer's own depth is\n * static, so it cannot know on its own whether something deeper is currently\n * open; that requires shared runtime state about the whole open stack.\n *\n * We track real `Drawer` instances (rather than scanning modal state by slug\n * name) so confirmation modals like `leave-without-saving-...` never count, and\n * so stacking never depends on slug naming conventions.\n */\nexport const DrawerStackProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [openDrawers, setOpenDrawers] = useState<Record<string, number>>({})\n\n const registerDrawer = useCallback((uid: string, depth: number) => {\n setOpenDrawers((prev) => (prev[uid] === depth ? prev : { ...prev, [uid]: depth }))\n }, [])\n\n const unregisterDrawer = useCallback((uid: string) => {\n setOpenDrawers((prev) => {\n if (!(uid in prev)) {\n return prev\n }\n\n const next = { ...prev }\n delete next[uid]\n return next\n })\n }, [])\n\n const value = useMemo<DrawerStackContextType>(\n () => ({\n openDrawerDepths: Object.values(openDrawers),\n registerDrawer,\n unregisterDrawer,\n }),\n [openDrawers, registerDrawer, unregisterDrawer],\n )\n\n return <DrawerStackContext value={value}>{children}</DrawerStackContext>\n}\n\nexport const useDrawerStack = (): DrawerStackContextType => use(DrawerStackContext)\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useDrawerSlug.d.ts","sourceRoot":"","sources":["../../../src/elements/Drawer/useDrawerSlug.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAO5C,CAAA"}
1
+ {"version":3,"file":"useDrawerSlug.d.ts","sourceRoot":"","sources":["../../../src/elements/Drawer/useDrawerSlug.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,SAAU,MAAM,KAAG,MAO5C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DrawerActionHeader/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,aAAa,CAAA;AAIpB,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;CACzC,CAAA;AACD,eAAO,MAAM,kBAAkB,GAAI,iEAOhC,sBAAsB,sBAyBxB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DrawerActionHeader/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,aAAa,CAAA;AAIpB,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;CACzC,CAAA;AACD,eAAO,MAAM,kBAAkB,oEAO5B,sBAAsB,sBAyBxB,CAAA"}
@@ -324,8 +324,8 @@ export const EditManyDrawerContent = props => {
324
324
  skipValidation: true
325
325
  });
326
326
  dispatchFields({
327
- type: 'UPDATE_MANY',
328
- formState: state_0
327
+ type: 'MERGE_SERVER_STATE',
328
+ serverState: state_0
329
329
  });
330
330
  setIsInitializing(false);
331
331
  }, [getFormState, collection.slug, collectionPermissions, setSelectedFields]);
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.js","names":["c","_c","useModal","getTranslation","combineWhereConstraints","formatAdminURL","mergeListSearchAndWhere","unflatten","qs","React","useCallback","useEffect","useMemo","useState","useForm","Form","RenderField","FormSubmit","ChevronIcon","useAuth","useConfig","DocumentInfoProvider","useLocale","OperationContext","useRouter","useSearchParams","useServerFunctions","useTranslation","abortAndIgnore","handleAbortRef","parseSearchParams","Button","FieldSelect","baseClass","Submit","t0","$","action","disabled","submit","t","t1","method","skipValidation","save","t2","_jsx","className","onClick","size","children","PublishButton","overrides","_status","SaveDraftButton","buttonStyle","EditManyDrawerContent","props","collection","fields","labels","plural","singular","count","drawerSlug","ids","onSuccess","onSuccessFromProps","selectAll","selectedFields","setSelectedFields","where","permissions","user","code","locale","closeModal","config","routes","api","apiRoute","getFormState","i18n","isInitializing","setIsInitializing","router","abortFormStateRef","useRef","collectionPermissions","collections","slug","searchParams","select","reduce","acc","option","value","path","onChange","formState","prevFormState","submitted","controller","state","collectionSlug","docPermissions","docPreferences","operation","schemaPath","signal","current","abortFormState","queryString","whereConstraints","push","queryWithSearch","collectionConfig","search","get","id","not_equals","in","stringify","addQueryPrefix","replace","_r","Date","now","page","undefined","onFieldSelect","dispatchFields","selected","type","title","label","currentEditor","hasPublishedDoc","initialData","isLocked","lastUpdateTime","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","_jsxs","icon","direction","versions","drafts","Fragment","length","map","i","field","fieldPermissions","clientFieldConfig","indexPath","parentPath","parentSchemaPath"],"sources":["../../../src/elements/EditMany/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectType, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n combineWhereConstraints,\n formatAdminURL,\n mergeListSearchAndWhere,\n unflatten,\n} from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\nimport type { OnFieldSelect } from '../FieldSelect/index.js'\nimport type { FieldOption } from '../FieldSelect/reduceFieldOptions.js'\nimport type { EditManyProps } from './index.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { RenderField } from '../../forms/RenderFields/RenderField.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { OperationContext } from '../../providers/Operation/index.js'\nimport { useRouter, useSearchParams } from '../../providers/RouterAdapter/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { Button } from '../Button/index.js'\nimport { FieldSelect } from '../FieldSelect/index.js'\nimport { baseClass } from './index.js'\nimport './index.css'\nimport '../../forms/RenderFields/index.css'\n\nconst Submit: React.FC<{\n readonly action: string\n readonly disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit className={`${baseClass}__save`} disabled={disabled} onClick={save} size=\"medium\">\n {t('general:save')}\n </FormSubmit>\n )\n}\n\nconst PublishButton: React.FC<{\n action: string\n disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: {\n _status: 'published',\n },\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit\n className={`${baseClass}__publish`}\n disabled={disabled}\n onClick={save}\n size=\"medium\"\n >\n {t('version:publishChanges')}\n </FormSubmit>\n )\n}\n\nconst SaveDraftButton: React.FC<{\n action: string\n disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit\n buttonStyle=\"secondary\"\n className={`${baseClass}__draft`}\n disabled={disabled}\n onClick={save}\n size=\"medium\"\n >\n {t('version:saveDraft')}\n </FormSubmit>\n )\n}\n\ntype EditManyDrawerContentProps = {\n /**\n * The total count of selected items\n */\n count?: number\n /**\n * The slug of the drawer\n */\n drawerSlug: string\n /**\n * The IDs of the selected items\n */\n ids?: (number | string)[]\n /**\n * The function to call after a successful action\n */\n onSuccess?: () => void\n /**\n * Whether all items are selected\n */\n selectAll?: boolean\n /**\n * The fields that are selected to bulk edit\n */\n selectedFields: FieldOption[]\n /**\n * The function to set the selected fields to bulk edit\n */\n setSelectedFields: (fields: FieldOption[]) => void\n where?: Where\n} & EditManyProps\n\nexport const EditManyDrawerContent: React.FC<EditManyDrawerContentProps> = (props) => {\n const {\n collection,\n collection: { fields, labels: { plural, singular } } = {},\n count,\n drawerSlug,\n ids,\n onSuccess: onSuccessFromProps,\n selectAll,\n selectedFields,\n setSelectedFields,\n where,\n } = props\n\n const { permissions, user } = useAuth()\n const { code: locale } = useLocale()\n\n const { closeModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n },\n } = useConfig()\n\n const { getFormState } = useServerFunctions()\n\n const { i18n, t } = useTranslation()\n\n const [isInitializing, setIsInitializing] = useState(false)\n\n const router = useRouter()\n const abortFormStateRef = React.useRef<AbortController>(null)\n const collectionPermissions = permissions?.collections?.[collection.slug]\n const searchParams = useSearchParams()\n\n const select = useMemo<SelectType>(() => {\n return unflatten(\n selectedFields.reduce((acc, option) => {\n acc[option.value.path] = true\n return acc\n }, {} as SelectType),\n )\n }, [selectedFields])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState, submitted }) => {\n const controller = handleAbortRef(abortFormStateRef)\n\n const { state } = await getFormState({\n collectionSlug: collection.slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState: prevFormState,\n operation: 'update',\n schemaPath: collection.slug,\n select,\n signal: controller.signal,\n skipValidation: !submitted,\n })\n\n abortFormStateRef.current = null\n\n return state\n },\n [getFormState, collection, collectionPermissions, select],\n )\n\n useEffect(() => {\n const abortFormState = abortFormStateRef.current\n\n return () => {\n abortAndIgnore(abortFormState)\n }\n }, [])\n\n const queryString = useMemo((): string => {\n const whereConstraints: Where[] = []\n\n if (where) {\n whereConstraints.push(where)\n }\n\n const queryWithSearch = mergeListSearchAndWhere({\n collectionConfig: collection,\n search: searchParams.get('search'),\n })\n\n if (queryWithSearch) {\n whereConstraints.push(queryWithSearch)\n }\n\n if (selectAll) {\n // Match the current filter/search, or default to all docs\n whereConstraints.push(\n (parseSearchParams(searchParams)?.where as Where) || {\n id: {\n not_equals: '',\n },\n },\n )\n } else {\n // If we're not selecting all, we need to select specific docs\n whereConstraints.push({\n id: {\n in: ids || [],\n },\n })\n }\n\n return qs.stringify(\n {\n locale,\n select: {},\n where: combineWhereConstraints(whereConstraints),\n },\n { addQueryPrefix: true },\n )\n }, [collection, searchParams, selectAll, ids, locale, where])\n\n const onSuccess = () => {\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n _r: Date.now(), // Cache buster to force fresh data fetch. Prevents an e2e race condition where sometimes the data is not updated.\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n closeModal(drawerSlug)\n\n if (typeof onSuccessFromProps === 'function') {\n onSuccessFromProps()\n }\n }\n\n const onFieldSelect = useCallback<OnFieldSelect>(\n async ({ dispatchFields, formState, selected }) => {\n setIsInitializing(true)\n\n setSelectedFields(selected || [])\n\n const { state } = await getFormState({\n collectionSlug: collection.slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState,\n operation: 'update',\n schemaPath: collection.slug,\n select: unflatten(\n selected.reduce((acc, option) => {\n acc[option.value.path] = true\n return acc\n }, {} as SelectType),\n ),\n skipValidation: true,\n })\n\n dispatchFields({\n type: 'UPDATE_MANY',\n formState: state,\n })\n\n setIsInitializing(false)\n },\n [getFormState, collection.slug, collectionPermissions, setSelectedFields],\n )\n\n const title = t('general:editingLabel', {\n count,\n label: getTranslation(count > 1 ? plural : singular, i18n),\n })\n\n return (\n <DocumentInfoProvider\n collectionSlug={collection.slug}\n currentEditor={user}\n hasPublishedDoc={false}\n id={null}\n initialData={{}}\n isLocked={false}\n lastUpdateTime={0}\n mostRecentVersionIsAutosaved={false}\n unpublishedVersionCount={0}\n versionCount={0}\n >\n <OperationContext value=\"update\">\n <Form\n className={`${baseClass}__form`}\n isInitializing={isInitializing}\n onChange={[onChange]}\n onSuccess={onSuccess}\n >\n <div className={`${baseClass}__header`}>\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__header__close`}\n icon={<ChevronIcon direction=\"left\" size={24} />}\n onClick={() => closeModal(drawerSlug)}\n />\n <h2 className={`${baseClass}__header__title`} title={title}>\n {title}\n </h2>\n <div className={`${baseClass}__header__actions`}>\n {collection?.versions?.drafts ? (\n <React.Fragment>\n <SaveDraftButton\n action={formatAdminURL({\n apiRoute,\n path: `/${collection.slug}${queryString}&draft=true`,\n })}\n disabled={selectedFields.length === 0}\n />\n <PublishButton\n action={formatAdminURL({\n apiRoute,\n path: `/${collection.slug}${queryString}&draft=true`,\n })}\n disabled={selectedFields.length === 0}\n />\n </React.Fragment>\n ) : (\n <Submit\n action={formatAdminURL({\n apiRoute,\n path: `/${collection.slug}${queryString}`,\n })}\n disabled={selectedFields.length === 0}\n />\n )}\n </div>\n </div>\n <div className={`${baseClass}__body`}>\n <div className={`${baseClass}__select-fields`}>\n <FieldSelect\n fields={fields}\n onChange={onFieldSelect}\n permissions={collectionPermissions.fields}\n />\n </div>\n {selectedFields.length === 0 ? null : (\n <div className={`${baseClass}__edit`}>\n <div className=\"render-fields\">\n {selectedFields.map((option, i) => {\n const {\n value: { field, fieldPermissions, path },\n } = option\n\n return (\n <RenderField\n clientFieldConfig={field}\n indexPath=\"\"\n key={`${path}-${i}`}\n parentPath=\"\"\n parentSchemaPath=\"\"\n path={path}\n permissions={fieldPermissions}\n />\n )\n })}\n </div>\n </div>\n )}\n </div>\n </Form>\n </OperationContext>\n </DocumentInfoProvider>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAIA,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SACEC,uBAAuB,EACvBC,cAAc,EACdC,uBAAuB,EACvBC,SAAS,QACJ;AACP,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ;AAOjE,SAASC,OAAO,QAAQ;AACxB,SAASC,IAAI,QAAQ;AACrB,SAASC,WAAW,QAAQ;AAC5B,SAASC,UAAU,QAAQ;AAC3B,SAASC,WAAW,QAAQ;AAC5B,SAASC,OAAO,QAAQ;AACxB,SAASC,SAAS,QAAQ;AAC1B,SAASC,oBAAoB,QAAQ;AACrC,SAASC,SAAS,QAAQ;AAC1B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,SAAS,EAAEC,eAAe,QAAQ;AAC3C,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,EAAEC,cAAc,QAAQ;AAC/C,SAASC,iBAAiB,QAAQ;AAClC,SAASC,MAAM,QAAQ;AACvB,SAASC,WAAW,QAAQ;AAC5B,SAASC,SAAS,QAAQ;AAC1B,OAAO;AACP,OAAO;AAEP,MAAMC,MAAA,GAGDC,EAAA;EAAA,MAAAC,CAAA,GAAAnC,EAAA;EAAC;IAAAoC,MAAA;IAAAC;EAAA,IAAAH,EAAoB;EACxB;IAAAI;EAAA,IAAmBzB,OAAA;EACnB;IAAA0B;EAAA,IAAcb,cAAA;EAAA,IAAAc,EAAA;EAAA,IAAAL,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAG,MAAA;IAEWE,EAAA,GAAAA,CAAA;MAClBF,MAAA;QAAAF,MAAA;QAAAK,MAAA,EAEK;QAAAC,cAAA;MAAA,CAEV;IAAA;IACFP,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAG,MAAA;IAAAH,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EANA,MAAAQ,IAAA,GAAaH,EAMM;EAAA,IAAAI,EAAA;EAAA,IAAAT,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAQ,IAAA,IAAAR,CAAA,QAAAI,CAAA;IAGjBK,EAAA,GAAAC,IAAA,CAAA7B,UAAA;MAAA8B,SAAA,EAAuB,GAAAd,SAAA,QAAoB;MAAAK,QAAA;MAAAU,OAAA,EAA+BJ,IAAA;MAAAK,IAAA,EAAW;MAAAC,QAAA,EAClFV,CAAA,CAAE;IAAA,C;;;;;;;;SADLK,E;CAIJ;AAEA,MAAMM,aAAA,GAGDhB,EAAA;EAAA,MAAAC,CAAA,GAAAnC,EAAA;EAAC;IAAAoC,MAAA;IAAAC;EAAA,IAAAH,EAAoB;EACxB;IAAAI;EAAA,IAAmBzB,OAAA;EACnB;IAAA0B;EAAA,IAAcb,cAAA;EAAA,IAAAc,EAAA;EAAA,IAAAL,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAG,MAAA;IAEWE,EAAA,GAAAA,CAAA;MAClBF,MAAA;QAAAF,MAAA;QAAAK,MAAA,EAEK;QAAAU,SAAA;UAAAC,OAAA,EAEG;QAAA;QAAAV,cAAA;MAAA,CAGb;IAAA;IACFP,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAG,MAAA;IAAAH,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EATA,MAAAQ,IAAA,GAAaH,EASM;EAAA,IAAAI,EAAA;EAAA,IAAAT,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAQ,IAAA,IAAAR,CAAA,QAAAI,CAAA;IAGjBK,EAAA,GAAAC,IAAA,CAAA7B,UAAA;MAAA8B,SAAA,EACa,GAAAd,SAAA,WAAuB;MAAAK,QAAA;MAAAU,OAAA,EAEzBJ,IAAA;MAAAK,IAAA,EACJ;MAAAC,QAAA,EAEJV,CAAA,CAAE;IAAA,C;;;;;;;;SANLK,E;CASJ;AAEA,MAAMS,eAAA,GAGDnB,EAAA;EAAA,MAAAC,CAAA,GAAAnC,EAAA;EAAC;IAAAoC,MAAA;IAAAC;EAAA,IAAAH,EAAoB;EACxB;IAAAI;EAAA,IAAmBzB,OAAA;EACnB;IAAA0B;EAAA,IAAcb,cAAA;EAAA,IAAAc,EAAA;EAAA,IAAAL,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAG,MAAA;IAEWE,EAAA,GAAAA,CAAA;MAClBF,MAAA;QAAAF,MAAA;QAAAK,MAAA,EAEK;QAAAU,SAAA;UAAAC,OAAA,EAEG;QAAA;QAAAV,cAAA;MAAA,CAGb;IAAA;IACFP,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAG,MAAA;IAAAH,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EATA,MAAAQ,IAAA,GAAaH,EASM;EAAA,IAAAI,EAAA;EAAA,IAAAT,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAQ,IAAA,IAAAR,CAAA,QAAAI,CAAA;IAGjBK,EAAA,GAAAC,IAAA,CAAA7B,UAAA;MAAAsC,WAAA,EACc;MAAAR,SAAA,EACD,GAAAd,SAAA,SAAqB;MAAAK,QAAA;MAAAU,OAAA,EAEvBJ,IAAA;MAAAK,IAAA,EACJ;MAAAC,QAAA,EAEJV,CAAA,CAAE;IAAA,C;;;;;;;;SAPLK,E;CAUJ;AAkCA,OAAO,MAAMW,qBAAA,GAA+DC,KAAA;EAC1E,MAAM;IACJC,UAAU;IACVA,UAAA,EAAY;MAAEC,MAAM;MAAEC,MAAA,EAAQ;QAAEC,MAAM;QAAEC;MAAQ;IAAE,CAAE,GAAG,CAAC,CAAC;IACzDC,KAAK;IACLC,UAAU;IACVC,GAAG;IACHC,SAAA,EAAWC,kBAAkB;IAC7BC,SAAS;IACTC,cAAc;IACdC,iBAAiB;IACjBC;EAAK,CACN,GAAGd,KAAA;EAEJ,MAAM;IAAEe,WAAW;IAAEC;EAAI,CAAE,GAAGtD,OAAA;EAC9B,MAAM;IAAEuD,IAAA,EAAMC;EAAM,CAAE,GAAGrD,SAAA;EAEzB,MAAM;IAAEsD;EAAU,CAAE,GAAG1E,QAAA;EAEvB,MAAM;IACJ2E,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC,GAAA,EAAKC;MAAQ;IAAE;EAC1B,CACF,GAAG5D,SAAA;EAEJ,MAAM;IAAE6D;EAAY,CAAE,GAAGvD,kBAAA;EAEzB,MAAM;IAAEwD,IAAI;IAAE1C;EAAC,CAAE,GAAGb,cAAA;EAEpB,MAAM,CAACwD,cAAA,EAAgBC,iBAAA,CAAkB,GAAGvE,QAAA,CAAS;EAErD,MAAMwE,MAAA,GAAS7D,SAAA;EACf,MAAM8D,iBAAA,GAAoB7E,KAAA,CAAM8E,MAAM,CAAkB;EACxD,MAAMC,qBAAA,GAAwBhB,WAAA,EAAaiB,WAAA,GAAc/B,UAAA,CAAWgC,IAAI,CAAC;EACzE,MAAMC,YAAA,GAAelE,eAAA;EAErB,MAAMmE,MAAA,GAAShF,OAAA,CAAoB;IACjC,OAAOL,SAAA,CACL8D,cAAA,CAAewB,MAAM,CAAC,CAACC,GAAA,EAAKC,MAAA;MAC1BD,GAAG,CAACC,MAAA,CAAOC,KAAK,CAACC,IAAI,CAAC,GAAG;MACzB,OAAOH,GAAA;IACT,GAAG,CAAC;EAER,GAAG,CAACzB,cAAA,CAAe;EAEnB,MAAM6B,QAAA,GAAqCxF,WAAA,CACzC,OAAO;IAAEyF,SAAA,EAAWC,aAAa;IAAEC;EAAS,CAAE;IAC5C,MAAMC,UAAA,GAAazE,cAAA,CAAeyD,iBAAA;IAElC,MAAM;MAAEiB;IAAK,CAAE,GAAG,MAAMtB,YAAA,CAAa;MACnCuB,cAAA,EAAgB9C,UAAA,CAAWgC,IAAI;MAC/Be,cAAA,EAAgBjB,qBAAA;MAChBkB,cAAA,EAAgB;MAChBP,SAAA,EAAWC,aAAA;MACXO,SAAA,EAAW;MACXC,UAAA,EAAYlD,UAAA,CAAWgC,IAAI;MAC3BE,MAAA;MACAiB,MAAA,EAAQP,UAAA,CAAWO,MAAM;MACzBlE,cAAA,EAAgB,CAAC0D;IACnB;IAEAf,iBAAA,CAAkBwB,OAAO,GAAG;IAE5B,OAAOP,KAAA;EACT,GACA,CAACtB,YAAA,EAAcvB,UAAA,EAAY8B,qBAAA,EAAuBI,MAAA,CAAO;EAG3DjF,SAAA,CAAU;IACR,MAAMoG,cAAA,GAAiBzB,iBAAA,CAAkBwB,OAAO;IAEhD,OAAO;MACLlF,cAAA,CAAemF,cAAA;IACjB;EACF,GAAG,EAAE;EAEL,MAAMC,WAAA,GAAcpG,OAAA,CAAQ;IAC1B,MAAMqG,gBAAA,GAA4B,EAAE;IAEpC,IAAI1C,KAAA,EAAO;MACT0C,gBAAA,CAAiBC,IAAI,CAAC3C,KAAA;IACxB;IAEA,MAAM4C,eAAA,GAAkB7G,uBAAA,CAAwB;MAC9C8G,gBAAA,EAAkB1D,UAAA;MAClB2D,MAAA,EAAQ1B,YAAA,CAAa2B,GAAG,CAAC;IAC3B;IAEA,IAAIH,eAAA,EAAiB;MACnBF,gBAAA,CAAiBC,IAAI,CAACC,eAAA;IACxB;IAEA,IAAI/C,SAAA,EAAW;MACb;MACA6C,gBAAA,CAAiBC,IAAI,CACnBpF,iBAAC,CAAkB6D,YAAA,GAAepB,KAAA,IAAmB;QACnDgD,EAAA,EAAI;UACFC,UAAA,EAAY;QACd;MACF;IAEJ,OAAO;MACL;MACAP,gBAAA,CAAiBC,IAAI,CAAC;QACpBK,EAAA,EAAI;UACFE,EAAA,EAAIxD,GAAA,IAAO;QACb;MACF;IACF;IAEA,OAAOzD,EAAA,CAAGkH,SAAS,CACjB;MACE/C,MAAA;MACAiB,MAAA,EAAQ,CAAC;MACTrB,KAAA,EAAOnE,uBAAA,CAAwB6G,gBAAA;IACjC,GACA;MAAEU,cAAA,EAAgB;IAAK;EAE3B,GAAG,CAACjE,UAAA,EAAYiC,YAAA,EAAcvB,SAAA,EAAWH,GAAA,EAAKU,MAAA,EAAQJ,KAAA,CAAM;EAE5D,MAAML,SAAA,GAAYA,CAAA;IAChBmB,MAAA,CAAOuC,OAAO,CACZpH,EAAA,CAAGkH,SAAS,CACV;MACE,GAAG5F,iBAAA,CAAkB6D,YAAA,CAAa;MAClCkC,EAAA,EAAIC,IAAA,CAAKC,GAAG;MACZC,IAAA,EAAM5D,SAAA,GAAY,MAAM6D;IAC1B,GACA;MAAEN,cAAA,EAAgB;IAAK;IAG3B/C,UAAA,CAAWZ,UAAA;IAEX,IAAI,OAAOG,kBAAA,KAAuB,YAAY;MAC5CA,kBAAA;IACF;EACF;EAEA,MAAM+D,aAAA,GAAgBxH,WAAA,CACpB,OAAO;IAAEyH,cAAc;IAAEhC,SAAS;IAAEiC;EAAQ,CAAE;IAC5ChD,iBAAA,CAAkB;IAElBd,iBAAA,CAAkB8D,QAAA,IAAY,EAAE;IAEhC,MAAM;MAAE7B,KAAK,EAALA;IAAK,CAAE,GAAG,MAAMtB,YAAA,CAAa;MACnCuB,cAAA,EAAgB9C,UAAA,CAAWgC,IAAI;MAC/Be,cAAA,EAAgBjB,qBAAA;MAChBkB,cAAA,EAAgB;MAChBP,SAAA;MACAQ,SAAA,EAAW;MACXC,UAAA,EAAYlD,UAAA,CAAWgC,IAAI;MAC3BE,MAAA,EAAQrF,SAAA,CACN6H,QAAA,CAASvC,MAAM,CAAC,CAACC,KAAA,EAAKC,QAAA;QACpBD,KAAG,CAACC,QAAA,CAAOC,KAAK,CAACC,IAAI,CAAC,GAAG;QACzB,OAAOH,KAAA;MACT,GAAG,CAAC;MAENnD,cAAA,EAAgB;IAClB;IAEAwF,cAAA,CAAe;MACbE,IAAA,EAAM;MACNlC,SAAA,EAAWI;IACb;IAEAnB,iBAAA,CAAkB;EACpB,GACA,CAACH,YAAA,EAAcvB,UAAA,CAAWgC,IAAI,EAAEF,qBAAA,EAAuBlB,iBAAA,CAAkB;EAG3E,MAAMgE,KAAA,GAAQ9F,CAAA,CAAE,wBAAwB;IACtCuB,KAAA;IACAwE,KAAA,EAAOpI,cAAA,CAAe4D,KAAA,GAAQ,IAAIF,MAAA,GAASC,QAAA,EAAUoB,IAAA;EACvD;EAEA,oBACEpC,IAAA,CAACzB,oBAAA;IACCmF,cAAA,EAAgB9C,UAAA,CAAWgC,IAAI;IAC/B8C,aAAA,EAAe/D,IAAA;IACfgE,eAAA,EAAiB;IACjBlB,EAAA,EAAI;IACJmB,WAAA,EAAa,CAAC;IACdC,QAAA,EAAU;IACVC,cAAA,EAAgB;IAChBC,4BAAA,EAA8B;IAC9BC,uBAAA,EAAyB;IACzBC,YAAA,EAAc;cAEd,aAAAjG,IAAA,CAACvB,gBAAA;MAAiByE,KAAA,EAAM;gBACtB,aAAAgD,KAAA,CAACjI,IAAA;QACCgC,SAAA,EAAW,GAAGd,SAAA,QAAiB;QAC/BkD,cAAA,EAAgBA,cAAA;QAChBe,QAAA,EAAU,CAACA,QAAA,CAAS;QACpBhC,SAAA,EAAWA,SAAA;gCAEX8E,KAAA,CAAC;UAAIjG,SAAA,EAAW,GAAGd,SAAA,UAAmB;kCACpCa,IAAA,CAACf,MAAA;YACC,cAAYS,CAAA,CAAE;YACde,WAAA,EAAY;YACZR,SAAA,EAAW,GAAGd,SAAA,iBAA0B;YACxCgH,IAAA,eAAMnG,IAAA,CAAC5B,WAAA;cAAYgI,SAAA,EAAU;cAAOjG,IAAA,EAAM;;YAC1CD,OAAA,EAASA,CAAA,KAAM4B,UAAA,CAAWZ,UAAA;2BAE5BlB,IAAA,CAAC;YAAGC,SAAA,EAAW,GAAGd,SAAA,iBAA0B;YAAEqG,KAAA,EAAOA,KAAA;sBAClDA;2BAEHxF,IAAA,CAAC;YAAIC,SAAA,EAAW,GAAGd,SAAA,mBAA4B;sBAC5CyB,UAAA,EAAYyF,QAAA,EAAUC,MAAA,gBACrBJ,KAAA,CAACvI,KAAA,CAAM4I,QAAQ;sCACbvG,IAAA,CAACQ,eAAA;gBACCjB,MAAA,EAAQhC,cAAA,CAAe;kBACrB2E,QAAA;kBACAiB,IAAA,EAAM,IAAIvC,UAAA,CAAWgC,IAAI,GAAGsB,WAAA;gBAC9B;gBACA1E,QAAA,EAAU+B,cAAA,CAAeiF,MAAM,KAAK;+BAEtCxG,IAAA,CAACK,aAAA;gBACCd,MAAA,EAAQhC,cAAA,CAAe;kBACrB2E,QAAA;kBACAiB,IAAA,EAAM,IAAIvC,UAAA,CAAWgC,IAAI,GAAGsB,WAAA;gBAC9B;gBACA1E,QAAA,EAAU+B,cAAA,CAAeiF,MAAM,KAAK;;8BAIxCxG,IAAA,CAACZ,MAAA;cACCG,MAAA,EAAQhC,cAAA,CAAe;gBACrB2E,QAAA;gBACAiB,IAAA,EAAM,IAAIvC,UAAA,CAAWgC,IAAI,GAAGsB,WAAA;cAC9B;cACA1E,QAAA,EAAU+B,cAAA,CAAeiF,MAAM,KAAK;;;yBAK5CN,KAAA,CAAC;UAAIjG,SAAA,EAAW,GAAGd,SAAA,QAAiB;kCAClCa,IAAA,CAAC;YAAIC,SAAA,EAAW,GAAGd,SAAA,iBAA0B;sBAC3C,aAAAa,IAAA,CAACd,WAAA;cACC2B,MAAA,EAAQA,MAAA;cACRuC,QAAA,EAAUgC,aAAA;cACV1D,WAAA,EAAagB,qBAAA,CAAsB7B;;cAGtCU,cAAA,CAAeiF,MAAM,KAAK,IAAI,oBAC7BxG,IAAA,CAAC;YAAIC,SAAA,EAAW,GAAGd,SAAA,QAAiB;sBAClC,aAAAa,IAAA,CAAC;cAAIC,SAAA,EAAU;wBACZsB,cAAA,CAAekF,GAAG,CAAC,CAACxD,QAAA,EAAQyD,CAAA;gBAC3B,MAAM;kBACJxD,KAAA,EAAO;oBAAEyD,KAAK;oBAAEC,gBAAgB;oBAAEzD;kBAAI;gBAAE,CACzC,GAAGF,QAAA;gBAEJ,oBACEjD,IAAA,CAAC9B,WAAA;kBACC2I,iBAAA,EAAmBF,KAAA;kBACnBG,SAAA,EAAU;kBAEVC,UAAA,EAAW;kBACXC,gBAAA,EAAiB;kBACjB7D,IAAA,EAAMA,IAAA;kBACNzB,WAAA,EAAakF;mBAJR,GAAGzD,IAAA,IAAQuD,CAAA,EAAG;cAOzB;;;;;;;AASlB","ignoreList":[]}
1
+ {"version":3,"file":"DrawerContent.js","names":["c","_c","useModal","getTranslation","combineWhereConstraints","formatAdminURL","mergeListSearchAndWhere","unflatten","qs","React","useCallback","useEffect","useMemo","useState","useForm","Form","RenderField","FormSubmit","ChevronIcon","useAuth","useConfig","DocumentInfoProvider","useLocale","OperationContext","useRouter","useSearchParams","useServerFunctions","useTranslation","abortAndIgnore","handleAbortRef","parseSearchParams","Button","FieldSelect","baseClass","Submit","t0","$","action","disabled","submit","t","t1","method","skipValidation","save","t2","_jsx","className","onClick","size","children","PublishButton","overrides","_status","SaveDraftButton","buttonStyle","EditManyDrawerContent","props","collection","fields","labels","plural","singular","count","drawerSlug","ids","onSuccess","onSuccessFromProps","selectAll","selectedFields","setSelectedFields","where","permissions","user","code","locale","closeModal","config","routes","api","apiRoute","getFormState","i18n","isInitializing","setIsInitializing","router","abortFormStateRef","useRef","collectionPermissions","collections","slug","searchParams","select","reduce","acc","option","value","path","onChange","formState","prevFormState","submitted","controller","state","collectionSlug","docPermissions","docPreferences","operation","schemaPath","signal","current","abortFormState","queryString","whereConstraints","push","queryWithSearch","collectionConfig","search","get","id","not_equals","in","stringify","addQueryPrefix","replace","_r","Date","now","page","undefined","onFieldSelect","dispatchFields","selected","type","serverState","title","label","currentEditor","hasPublishedDoc","initialData","isLocked","lastUpdateTime","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","_jsxs","icon","direction","versions","drafts","Fragment","length","map","i","field","fieldPermissions","clientFieldConfig","indexPath","parentPath","parentSchemaPath"],"sources":["../../../src/elements/EditMany/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectType, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n combineWhereConstraints,\n formatAdminURL,\n mergeListSearchAndWhere,\n unflatten,\n} from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\nimport type { OnFieldSelect } from '../FieldSelect/index.js'\nimport type { FieldOption } from '../FieldSelect/reduceFieldOptions.js'\nimport type { EditManyProps } from './index.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { RenderField } from '../../forms/RenderFields/RenderField.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { OperationContext } from '../../providers/Operation/index.js'\nimport { useRouter, useSearchParams } from '../../providers/RouterAdapter/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { Button } from '../Button/index.js'\nimport { FieldSelect } from '../FieldSelect/index.js'\nimport { baseClass } from './index.js'\nimport './index.css'\nimport '../../forms/RenderFields/index.css'\n\nconst Submit: React.FC<{\n readonly action: string\n readonly disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit className={`${baseClass}__save`} disabled={disabled} onClick={save} size=\"medium\">\n {t('general:save')}\n </FormSubmit>\n )\n}\n\nconst PublishButton: React.FC<{\n action: string\n disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: {\n _status: 'published',\n },\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit\n className={`${baseClass}__publish`}\n disabled={disabled}\n onClick={save}\n size=\"medium\"\n >\n {t('version:publishChanges')}\n </FormSubmit>\n )\n}\n\nconst SaveDraftButton: React.FC<{\n action: string\n disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit\n buttonStyle=\"secondary\"\n className={`${baseClass}__draft`}\n disabled={disabled}\n onClick={save}\n size=\"medium\"\n >\n {t('version:saveDraft')}\n </FormSubmit>\n )\n}\n\ntype EditManyDrawerContentProps = {\n /**\n * The total count of selected items\n */\n count?: number\n /**\n * The slug of the drawer\n */\n drawerSlug: string\n /**\n * The IDs of the selected items\n */\n ids?: (number | string)[]\n /**\n * The function to call after a successful action\n */\n onSuccess?: () => void\n /**\n * Whether all items are selected\n */\n selectAll?: boolean\n /**\n * The fields that are selected to bulk edit\n */\n selectedFields: FieldOption[]\n /**\n * The function to set the selected fields to bulk edit\n */\n setSelectedFields: (fields: FieldOption[]) => void\n where?: Where\n} & EditManyProps\n\nexport const EditManyDrawerContent: React.FC<EditManyDrawerContentProps> = (props) => {\n const {\n collection,\n collection: { fields, labels: { plural, singular } } = {},\n count,\n drawerSlug,\n ids,\n onSuccess: onSuccessFromProps,\n selectAll,\n selectedFields,\n setSelectedFields,\n where,\n } = props\n\n const { permissions, user } = useAuth()\n const { code: locale } = useLocale()\n\n const { closeModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n },\n } = useConfig()\n\n const { getFormState } = useServerFunctions()\n\n const { i18n, t } = useTranslation()\n\n const [isInitializing, setIsInitializing] = useState(false)\n\n const router = useRouter()\n const abortFormStateRef = React.useRef<AbortController>(null)\n const collectionPermissions = permissions?.collections?.[collection.slug]\n const searchParams = useSearchParams()\n\n const select = useMemo<SelectType>(() => {\n return unflatten(\n selectedFields.reduce((acc, option) => {\n acc[option.value.path] = true\n return acc\n }, {} as SelectType),\n )\n }, [selectedFields])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState, submitted }) => {\n const controller = handleAbortRef(abortFormStateRef)\n\n const { state } = await getFormState({\n collectionSlug: collection.slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState: prevFormState,\n operation: 'update',\n schemaPath: collection.slug,\n select,\n signal: controller.signal,\n skipValidation: !submitted,\n })\n\n abortFormStateRef.current = null\n\n return state\n },\n [getFormState, collection, collectionPermissions, select],\n )\n\n useEffect(() => {\n const abortFormState = abortFormStateRef.current\n\n return () => {\n abortAndIgnore(abortFormState)\n }\n }, [])\n\n const queryString = useMemo((): string => {\n const whereConstraints: Where[] = []\n\n if (where) {\n whereConstraints.push(where)\n }\n\n const queryWithSearch = mergeListSearchAndWhere({\n collectionConfig: collection,\n search: searchParams.get('search'),\n })\n\n if (queryWithSearch) {\n whereConstraints.push(queryWithSearch)\n }\n\n if (selectAll) {\n // Match the current filter/search, or default to all docs\n whereConstraints.push(\n (parseSearchParams(searchParams)?.where as Where) || {\n id: {\n not_equals: '',\n },\n },\n )\n } else {\n // If we're not selecting all, we need to select specific docs\n whereConstraints.push({\n id: {\n in: ids || [],\n },\n })\n }\n\n return qs.stringify(\n {\n locale,\n select: {},\n where: combineWhereConstraints(whereConstraints),\n },\n { addQueryPrefix: true },\n )\n }, [collection, searchParams, selectAll, ids, locale, where])\n\n const onSuccess = () => {\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n _r: Date.now(), // Cache buster to force fresh data fetch. Prevents an e2e race condition where sometimes the data is not updated.\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n closeModal(drawerSlug)\n\n if (typeof onSuccessFromProps === 'function') {\n onSuccessFromProps()\n }\n }\n\n const onFieldSelect = useCallback<OnFieldSelect>(\n async ({ dispatchFields, formState, selected }) => {\n setIsInitializing(true)\n\n setSelectedFields(selected || [])\n\n const { state } = await getFormState({\n collectionSlug: collection.slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState,\n operation: 'update',\n schemaPath: collection.slug,\n select: unflatten(\n selected.reduce((acc, option) => {\n acc[option.value.path] = true\n return acc\n }, {} as SelectType),\n ),\n skipValidation: true,\n })\n\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n serverState: state,\n })\n\n setIsInitializing(false)\n },\n [getFormState, collection.slug, collectionPermissions, setSelectedFields],\n )\n\n const title = t('general:editingLabel', {\n count,\n label: getTranslation(count > 1 ? plural : singular, i18n),\n })\n\n return (\n <DocumentInfoProvider\n collectionSlug={collection.slug}\n currentEditor={user}\n hasPublishedDoc={false}\n id={null}\n initialData={{}}\n isLocked={false}\n lastUpdateTime={0}\n mostRecentVersionIsAutosaved={false}\n unpublishedVersionCount={0}\n versionCount={0}\n >\n <OperationContext value=\"update\">\n <Form\n className={`${baseClass}__form`}\n isInitializing={isInitializing}\n onChange={[onChange]}\n onSuccess={onSuccess}\n >\n <div className={`${baseClass}__header`}>\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__header__close`}\n icon={<ChevronIcon direction=\"left\" size={24} />}\n onClick={() => closeModal(drawerSlug)}\n />\n <h2 className={`${baseClass}__header__title`} title={title}>\n {title}\n </h2>\n <div className={`${baseClass}__header__actions`}>\n {collection?.versions?.drafts ? (\n <React.Fragment>\n <SaveDraftButton\n action={formatAdminURL({\n apiRoute,\n path: `/${collection.slug}${queryString}&draft=true`,\n })}\n disabled={selectedFields.length === 0}\n />\n <PublishButton\n action={formatAdminURL({\n apiRoute,\n path: `/${collection.slug}${queryString}&draft=true`,\n })}\n disabled={selectedFields.length === 0}\n />\n </React.Fragment>\n ) : (\n <Submit\n action={formatAdminURL({\n apiRoute,\n path: `/${collection.slug}${queryString}`,\n })}\n disabled={selectedFields.length === 0}\n />\n )}\n </div>\n </div>\n <div className={`${baseClass}__body`}>\n <div className={`${baseClass}__select-fields`}>\n <FieldSelect\n fields={fields}\n onChange={onFieldSelect}\n permissions={collectionPermissions.fields}\n />\n </div>\n {selectedFields.length === 0 ? null : (\n <div className={`${baseClass}__edit`}>\n <div className=\"render-fields\">\n {selectedFields.map((option, i) => {\n const {\n value: { field, fieldPermissions, path },\n } = option\n\n return (\n <RenderField\n clientFieldConfig={field}\n indexPath=\"\"\n key={`${path}-${i}`}\n parentPath=\"\"\n parentSchemaPath=\"\"\n path={path}\n permissions={fieldPermissions}\n />\n )\n })}\n </div>\n </div>\n )}\n </div>\n </Form>\n </OperationContext>\n </DocumentInfoProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/EditUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C,OAAO,KAA2B,MAAM,OAAO,CAAA;AAW/C,OAAO,aAAa,CAAA;AACpB,OAAO,eAAe,CAAA;AAItB,KAAK,aAAa,GAAG;IACnB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,iBAAiB,CAAC,EAAE,aAAa,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAUD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA4PhD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/EditUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C,OAAO,KAA2B,MAAM,OAAO,CAAA;AAW/C,OAAO,aAAa,CAAA;AACpB,OAAO,eAAe,CAAA;AAItB,KAAK,aAAa,GAAG;IACnB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,iBAAiB,CAAC,EAAE,aAAa,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAUD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAgQhD,CAAA"}
@@ -205,6 +205,7 @@ export const EditUpload = ({
205
205
  path: "cropWidth",
206
206
  prefix: "W",
207
207
  readOnly: !imageLoaded,
208
+ size: "medium",
208
209
  value: Number(cropWidthPx)
209
210
  }), /*#__PURE__*/_jsx(NumberInput, {
210
211
  ariaLabel: t('upload:height'),
@@ -215,6 +216,7 @@ export const EditUpload = ({
215
216
  path: "cropHeight",
216
217
  prefix: "H",
217
218
  readOnly: !imageLoaded,
219
+ size: "medium",
218
220
  value: Number(cropHeightPx)
219
221
  })]
220
222
  })]
@@ -244,6 +246,7 @@ export const EditUpload = ({
244
246
  }),
245
247
  path: "focalX",
246
248
  prefix: "X",
249
+ size: "medium",
247
250
  suffix: "%",
248
251
  value: Math.round(focalPosition.x)
249
252
  }), /*#__PURE__*/_jsx(NumberInput, {
@@ -256,6 +259,7 @@ export const EditUpload = ({
256
259
  }),
257
260
  path: "focalY",
258
261
  prefix: "Y",
262
+ size: "medium",
259
263
  suffix: "%",
260
264
  value: Math.round(focalPosition.y)
261
265
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","React","useRef","useState","ReactCrop","editDrawerSlug","NumberInput","PlusIcon","ResetIcon","useTranslation","appendCacheTag","Button","DialogFooter","DialogHeader","DialogModal","baseClass","defaultCrop","height","unit","width","x","y","EditUpload","fileName","fileSrc","imageCacheTag","initialCrop","initialFocalPoint","onSave","showCrop","showFocalPoint","closeModal","t","crop","setCrop","defaultFocalPosition","focalPosition","setFocalPosition","checkBounds","setCheckBounds","uncroppedPixelHeight","setUncroppedPixelHeight","uncroppedPixelWidth","setUncroppedPixelWidth","focalWrapRef","undefined","imageRef","cropRef","imageLoaded","setImageLoaded","onImageLoad","e","currentTarget","naturalHeight","naturalWidth","fineTuneCrop","dimension","value","intValue","parseInt","Number","isNaN","percentage","prev","fineTuneFocalPosition","coordinate","prevPosition","saveEdits","focalPoint","heightInPixels","Math","round","widthInPixels","onDragEnd","useCallback","centerFocalPoint","fileSrcToUse","cropWidthPx","toFixed","cropHeightPx","_jsxs","className","closeOnBlur","size","slug","_jsx","showClose","title","ref","style","aspectRatio","onChange","_","c","onComplete","renderSelectionAddon","alt","onLoad","src","DraggableElement","boundsRef","containerRef","initialPosition","onClick","type","ariaLabel","target","path","prefix","readOnly","max","min","suffix","buttonStyle","disabled","children","position","setPosition","isDragging","setIsDragging","dragRef","positionRef","current","getCoordinates","mouseX","mouseY","containerRect","getBoundingClientRect","left","top","handleMouseDown","event","preventDefault","useEffect","handleMove","clientX","clientY","handleUp","document","addEventListener","removeEventListener","filter","Boolean","join","onMouseDown"],"sources":["../../../src/elements/EditUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useRef, useState } from 'react'\nimport ReactCrop from 'react-image-crop'\n\nimport { editDrawerSlug } from '../../elements/Upload/index.js'\nimport { NumberInput } from '../../fields/Number/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { ResetIcon } from '../../icons/Reset/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { appendCacheTag } from '../../utilities/appendCacheTag.js'\nimport { Button } from '../Button/index.js'\nimport { DialogFooter, DialogHeader, DialogModal } from '../Dialog/index.js'\nimport './index.css'\nimport './library.css'\n\nconst baseClass = 'edit-upload'\n\ntype FocalPosition = {\n x: number\n y: number\n}\n\nexport type EditUploadProps = {\n fileName: string\n fileSrc: string\n imageCacheTag?: false | string\n initialCrop?: UploadEdits['crop']\n initialFocalPoint?: FocalPosition\n onSave?: (uploadEdits: UploadEdits) => void\n showCrop?: boolean\n showFocalPoint?: boolean\n}\n\nconst defaultCrop: UploadEdits['crop'] = {\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n}\n\nexport const EditUpload: React.FC<EditUploadProps> = ({\n fileName,\n fileSrc,\n imageCacheTag,\n initialCrop,\n initialFocalPoint,\n onSave,\n showCrop,\n showFocalPoint,\n}) => {\n const { closeModal } = useModal()\n const { t } = useTranslation()\n\n const [crop, setCrop] = useState<UploadEdits['crop']>(() => ({\n ...defaultCrop,\n ...(initialCrop || {}),\n }))\n\n const defaultFocalPosition: FocalPosition = { x: 50, y: 50 }\n\n const [focalPosition, setFocalPosition] = useState<FocalPosition>(() => ({\n ...defaultFocalPosition,\n ...initialFocalPoint,\n }))\n\n const [checkBounds, setCheckBounds] = useState<boolean>(false)\n const [uncroppedPixelHeight, setUncroppedPixelHeight] = useState<number>(0)\n const [uncroppedPixelWidth, setUncroppedPixelWidth] = useState<number>(0)\n\n const focalWrapRef = useRef<HTMLDivElement | undefined>(undefined)\n const imageRef = useRef<HTMLImageElement | undefined>(undefined)\n const cropRef = useRef<HTMLDivElement | undefined>(undefined)\n\n const [imageLoaded, setImageLoaded] = useState<boolean>(false)\n\n const onImageLoad = (e) => {\n setUncroppedPixelHeight(e.currentTarget.naturalHeight)\n setUncroppedPixelWidth(e.currentTarget.naturalWidth)\n setImageLoaded(true)\n }\n\n const fineTuneCrop = ({ dimension, value }: { dimension: 'height' | 'width'; value: string }) => {\n const intValue = parseInt(value)\n if (Number.isNaN(intValue)) {\n return null\n }\n const percentage =\n 100 * (intValue / (dimension === 'width' ? uncroppedPixelWidth : uncroppedPixelHeight))\n if (percentage <= 0 || percentage > 100) {\n return null\n }\n setCrop((prev) => ({ ...prev, [dimension]: percentage }))\n }\n\n const fineTuneFocalPosition = ({\n coordinate,\n value,\n }: {\n coordinate: 'x' | 'y'\n value: string\n }) => {\n const intValue = parseInt(value)\n if (intValue >= 0 && intValue <= 100) {\n setFocalPosition((prevPosition) => ({ ...prevPosition, [coordinate]: intValue }))\n }\n }\n\n const saveEdits = () => {\n if (typeof onSave === 'function') {\n onSave({\n crop: crop ? crop : undefined,\n focalPoint: focalPosition,\n heightInPixels: Math.round((crop.height / 100) * uncroppedPixelHeight),\n widthInPixels: Math.round((crop.width / 100) * uncroppedPixelWidth),\n })\n }\n closeModal(editDrawerSlug)\n }\n\n const onDragEnd = React.useCallback(({ x, y }) => {\n setFocalPosition({ x, y })\n setCheckBounds(false)\n }, [])\n\n const centerFocalPoint = () => {\n setFocalPosition({ x: 50, y: 50 })\n }\n\n const fileSrcToUse = fileSrc ? appendCacheTag(fileSrc, imageCacheTag) : undefined\n\n const cropWidthPx = ((crop.width / 100) * uncroppedPixelWidth).toFixed(0)\n const cropHeightPx = ((crop.height / 100) * uncroppedPixelHeight).toFixed(0)\n\n return (\n <DialogModal\n className={`${baseClass}__dialog`}\n closeOnBlur={false}\n size=\"large\"\n slug={editDrawerSlug}\n >\n <DialogHeader showClose title={`${t('general:editing')} ${fileName}`} />\n <div className={`${baseClass}__body`}>\n <div className={`${baseClass}__content`}>\n {/* Canvas area */}\n <div className={`${baseClass}__crop`}>\n <div\n className={`${baseClass}__focal-wrapper`}\n ref={focalWrapRef}\n style={{ aspectRatio: `${uncroppedPixelWidth / uncroppedPixelHeight}` }}\n >\n {showCrop ? (\n <ReactCrop\n className={`${baseClass}__reactCrop`}\n crop={crop}\n onChange={(_, c) => setCrop(c)}\n onComplete={() => setCheckBounds(true)}\n renderSelectionAddon={() => (\n <div className={`${baseClass}__crop-window`} ref={cropRef} />\n )}\n >\n <img\n alt={t('upload:setCropArea')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n </ReactCrop>\n ) : (\n <img\n alt={t('upload:setFocalPoint')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n )}\n {showFocalPoint && (\n <DraggableElement\n boundsRef={showCrop ? cropRef : imageRef}\n checkBounds={showCrop ? checkBounds : false}\n className={`${baseClass}__focalPoint`}\n containerRef={focalWrapRef}\n initialPosition={focalPosition}\n onDragEnd={onDragEnd}\n setCheckBounds={showCrop ? setCheckBounds : false}\n >\n <PlusIcon />\n </DraggableElement>\n )}\n </div>\n </div>\n\n {/* Sidebar */}\n {(showCrop || showFocalPoint) && (\n <div className={`${baseClass}__sidebar`}>\n {showCrop && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>\n <span className={`${baseClass}__section-title`}>{t('upload:crop')}</span>\n <button\n aria-label={t('general:reset')}\n className={`${baseClass}__reset`}\n onClick={() => setCrop({ height: 100, unit: '%', width: 100, x: 0, y: 0 })}\n type=\"button\"\n >\n <ResetIcon />\n </button>\n </div>\n <div className={`${baseClass}__fieldset`}>\n <NumberInput\n ariaLabel={t('upload:width')}\n onChange={(e) => fineTuneCrop({ dimension: 'width', value: e.target.value })}\n path=\"cropWidth\"\n prefix=\"W\"\n readOnly={!imageLoaded}\n value={Number(cropWidthPx)}\n />\n <NumberInput\n ariaLabel={t('upload:height')}\n onChange={(e) => fineTuneCrop({ dimension: 'height', value: e.target.value })}\n path=\"cropHeight\"\n prefix=\"H\"\n readOnly={!imageLoaded}\n value={Number(cropHeightPx)}\n />\n </div>\n </div>\n )}\n\n {showFocalPoint && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>\n <span className={`${baseClass}__section-title`}>{t('upload:focalPoint')}</span>\n <button\n aria-label={t('general:reset')}\n className={`${baseClass}__reset`}\n onClick={centerFocalPoint}\n type=\"button\"\n >\n <ResetIcon />\n </button>\n </div>\n <div className={`${baseClass}__fieldset`}>\n <NumberInput\n ariaLabel={`${t('upload:focalPoint')} X`}\n max={100}\n min={0}\n onChange={(e) =>\n fineTuneFocalPosition({ coordinate: 'x', value: e.target.value })\n }\n path=\"focalX\"\n prefix=\"X\"\n suffix=\"%\"\n value={Math.round(focalPosition.x)}\n />\n <NumberInput\n ariaLabel={`${t('upload:focalPoint')} Y`}\n max={100}\n min={0}\n onChange={(e) =>\n fineTuneFocalPosition({ coordinate: 'y', value: e.target.value })\n }\n path=\"focalY\"\n prefix=\"Y\"\n suffix=\"%\"\n value={Math.round(focalPosition.y)}\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n <DialogFooter>\n <Button\n aria-label={t('general:cancel')}\n buttonStyle=\"secondary\"\n onClick={() => closeModal(editDrawerSlug)}\n >\n {t('general:cancel')}\n </Button>\n <Button\n aria-label={t('general:applyChanges')}\n buttonStyle=\"primary\"\n disabled={!imageLoaded}\n onClick={saveEdits}\n >\n {t('general:applyChanges')}\n </Button>\n </DialogFooter>\n </DialogModal>\n )\n}\n\nconst DraggableElement = ({\n boundsRef,\n checkBounds,\n children,\n className,\n containerRef,\n initialPosition = { x: 50, y: 50 },\n onDragEnd,\n setCheckBounds,\n}) => {\n const [position, setPosition] = useState({ x: initialPosition.x, y: initialPosition.y })\n const [isDragging, setIsDragging] = useState(false)\n const dragRef = useRef<HTMLButtonElement | undefined>(undefined)\n // Keep a ref to the latest position so global mouseup handler can read it without a stale closure\n const positionRef = useRef(position)\n positionRef.current = position\n\n const getCoordinates = React.useCallback(\n (mouseX: number, mouseY: number) => {\n const containerRect = containerRef.current.getBoundingClientRect()\n const x = ((mouseX - containerRect.left) / containerRect.width) * 100\n const y = ((mouseY - containerRect.top) / containerRect.height) * 100\n return { x: Math.max(0, Math.min(100, x)), y: Math.max(0, Math.min(100, y)) }\n },\n [containerRef],\n )\n\n const handleMouseDown = (event) => {\n event.preventDefault()\n setIsDragging(true)\n }\n\n // Attach global listeners while dragging — this ensures events fire even when\n // the cursor leaves the focal wrapper area during a fast drag\n React.useEffect(() => {\n if (!isDragging) {\n return\n }\n\n const handleMove = (e: MouseEvent) => {\n if (!containerRef.current) {\n return\n }\n const { x, y } = getCoordinates(e.clientX, e.clientY)\n setPosition({ x, y })\n }\n\n const handleUp = () => {\n setIsDragging(false)\n onDragEnd(positionRef.current)\n }\n\n document.addEventListener('mousemove', handleMove)\n document.addEventListener('mouseup', handleUp)\n\n return () => {\n document.removeEventListener('mousemove', handleMove)\n document.removeEventListener('mouseup', handleUp)\n }\n }, [isDragging, getCoordinates, onDragEnd, containerRef])\n\n // Re-check position when crop changes (the crop window may have moved)\n React.useEffect(() => {\n if (isDragging || !checkBounds || !dragRef.current) {\n return\n }\n const { height, left, top, width } = dragRef.current.getBoundingClientRect()\n const { x, y } = getCoordinates(left + width / 2, top + height / 2)\n onDragEnd({ x, y })\n setPosition({ x, y })\n setCheckBounds(false)\n }, [getCoordinates, isDragging, checkBounds, setCheckBounds, onDragEnd])\n\n React.useEffect(() => {\n setPosition({ x: initialPosition.x, y: initialPosition.y })\n }, [initialPosition.x, initialPosition.y])\n\n return (\n <div className={`${baseClass}__draggable-container`}>\n <button\n className={[`${baseClass}__draggable`, className].filter(Boolean).join(' ')}\n onMouseDown={handleMouseDown}\n ref={dragRef}\n style={{ left: `${position.x}%`, top: `${position.y}%` }}\n type=\"button\"\n >\n {children}\n </button>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","React","useRef","useState","ReactCrop","editDrawerSlug","NumberInput","PlusIcon","ResetIcon","useTranslation","appendCacheTag","Button","DialogFooter","DialogHeader","DialogModal","baseClass","defaultCrop","height","unit","width","x","y","EditUpload","fileName","fileSrc","imageCacheTag","initialCrop","initialFocalPoint","onSave","showCrop","showFocalPoint","closeModal","t","crop","setCrop","defaultFocalPosition","focalPosition","setFocalPosition","checkBounds","setCheckBounds","uncroppedPixelHeight","setUncroppedPixelHeight","uncroppedPixelWidth","setUncroppedPixelWidth","focalWrapRef","undefined","imageRef","cropRef","imageLoaded","setImageLoaded","onImageLoad","e","currentTarget","naturalHeight","naturalWidth","fineTuneCrop","dimension","value","intValue","parseInt","Number","isNaN","percentage","prev","fineTuneFocalPosition","coordinate","prevPosition","saveEdits","focalPoint","heightInPixels","Math","round","widthInPixels","onDragEnd","useCallback","centerFocalPoint","fileSrcToUse","cropWidthPx","toFixed","cropHeightPx","_jsxs","className","closeOnBlur","size","slug","_jsx","showClose","title","ref","style","aspectRatio","onChange","_","c","onComplete","renderSelectionAddon","alt","onLoad","src","DraggableElement","boundsRef","containerRef","initialPosition","onClick","type","ariaLabel","target","path","prefix","readOnly","max","min","suffix","buttonStyle","disabled","children","position","setPosition","isDragging","setIsDragging","dragRef","positionRef","current","getCoordinates","mouseX","mouseY","containerRect","getBoundingClientRect","left","top","handleMouseDown","event","preventDefault","useEffect","handleMove","clientX","clientY","handleUp","document","addEventListener","removeEventListener","filter","Boolean","join","onMouseDown"],"sources":["../../../src/elements/EditUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useRef, useState } from 'react'\nimport ReactCrop from 'react-image-crop'\n\nimport { editDrawerSlug } from '../../elements/Upload/index.js'\nimport { NumberInput } from '../../fields/Number/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { ResetIcon } from '../../icons/Reset/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { appendCacheTag } from '../../utilities/appendCacheTag.js'\nimport { Button } from '../Button/index.js'\nimport { DialogFooter, DialogHeader, DialogModal } from '../Dialog/index.js'\nimport './index.css'\nimport './library.css'\n\nconst baseClass = 'edit-upload'\n\ntype FocalPosition = {\n x: number\n y: number\n}\n\nexport type EditUploadProps = {\n fileName: string\n fileSrc: string\n imageCacheTag?: false | string\n initialCrop?: UploadEdits['crop']\n initialFocalPoint?: FocalPosition\n onSave?: (uploadEdits: UploadEdits) => void\n showCrop?: boolean\n showFocalPoint?: boolean\n}\n\nconst defaultCrop: UploadEdits['crop'] = {\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n}\n\nexport const EditUpload: React.FC<EditUploadProps> = ({\n fileName,\n fileSrc,\n imageCacheTag,\n initialCrop,\n initialFocalPoint,\n onSave,\n showCrop,\n showFocalPoint,\n}) => {\n const { closeModal } = useModal()\n const { t } = useTranslation()\n\n const [crop, setCrop] = useState<UploadEdits['crop']>(() => ({\n ...defaultCrop,\n ...(initialCrop || {}),\n }))\n\n const defaultFocalPosition: FocalPosition = { x: 50, y: 50 }\n\n const [focalPosition, setFocalPosition] = useState<FocalPosition>(() => ({\n ...defaultFocalPosition,\n ...initialFocalPoint,\n }))\n\n const [checkBounds, setCheckBounds] = useState<boolean>(false)\n const [uncroppedPixelHeight, setUncroppedPixelHeight] = useState<number>(0)\n const [uncroppedPixelWidth, setUncroppedPixelWidth] = useState<number>(0)\n\n const focalWrapRef = useRef<HTMLDivElement | undefined>(undefined)\n const imageRef = useRef<HTMLImageElement | undefined>(undefined)\n const cropRef = useRef<HTMLDivElement | undefined>(undefined)\n\n const [imageLoaded, setImageLoaded] = useState<boolean>(false)\n\n const onImageLoad = (e) => {\n setUncroppedPixelHeight(e.currentTarget.naturalHeight)\n setUncroppedPixelWidth(e.currentTarget.naturalWidth)\n setImageLoaded(true)\n }\n\n const fineTuneCrop = ({ dimension, value }: { dimension: 'height' | 'width'; value: string }) => {\n const intValue = parseInt(value)\n if (Number.isNaN(intValue)) {\n return null\n }\n const percentage =\n 100 * (intValue / (dimension === 'width' ? uncroppedPixelWidth : uncroppedPixelHeight))\n if (percentage <= 0 || percentage > 100) {\n return null\n }\n setCrop((prev) => ({ ...prev, [dimension]: percentage }))\n }\n\n const fineTuneFocalPosition = ({\n coordinate,\n value,\n }: {\n coordinate: 'x' | 'y'\n value: string\n }) => {\n const intValue = parseInt(value)\n if (intValue >= 0 && intValue <= 100) {\n setFocalPosition((prevPosition) => ({ ...prevPosition, [coordinate]: intValue }))\n }\n }\n\n const saveEdits = () => {\n if (typeof onSave === 'function') {\n onSave({\n crop: crop ? crop : undefined,\n focalPoint: focalPosition,\n heightInPixels: Math.round((crop.height / 100) * uncroppedPixelHeight),\n widthInPixels: Math.round((crop.width / 100) * uncroppedPixelWidth),\n })\n }\n closeModal(editDrawerSlug)\n }\n\n const onDragEnd = React.useCallback(({ x, y }) => {\n setFocalPosition({ x, y })\n setCheckBounds(false)\n }, [])\n\n const centerFocalPoint = () => {\n setFocalPosition({ x: 50, y: 50 })\n }\n\n const fileSrcToUse = fileSrc ? appendCacheTag(fileSrc, imageCacheTag) : undefined\n\n const cropWidthPx = ((crop.width / 100) * uncroppedPixelWidth).toFixed(0)\n const cropHeightPx = ((crop.height / 100) * uncroppedPixelHeight).toFixed(0)\n\n return (\n <DialogModal\n className={`${baseClass}__dialog`}\n closeOnBlur={false}\n size=\"large\"\n slug={editDrawerSlug}\n >\n <DialogHeader showClose title={`${t('general:editing')} ${fileName}`} />\n <div className={`${baseClass}__body`}>\n <div className={`${baseClass}__content`}>\n {/* Canvas area */}\n <div className={`${baseClass}__crop`}>\n <div\n className={`${baseClass}__focal-wrapper`}\n ref={focalWrapRef}\n style={{ aspectRatio: `${uncroppedPixelWidth / uncroppedPixelHeight}` }}\n >\n {showCrop ? (\n <ReactCrop\n className={`${baseClass}__reactCrop`}\n crop={crop}\n onChange={(_, c) => setCrop(c)}\n onComplete={() => setCheckBounds(true)}\n renderSelectionAddon={() => (\n <div className={`${baseClass}__crop-window`} ref={cropRef} />\n )}\n >\n <img\n alt={t('upload:setCropArea')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n </ReactCrop>\n ) : (\n <img\n alt={t('upload:setFocalPoint')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n )}\n {showFocalPoint && (\n <DraggableElement\n boundsRef={showCrop ? cropRef : imageRef}\n checkBounds={showCrop ? checkBounds : false}\n className={`${baseClass}__focalPoint`}\n containerRef={focalWrapRef}\n initialPosition={focalPosition}\n onDragEnd={onDragEnd}\n setCheckBounds={showCrop ? setCheckBounds : false}\n >\n <PlusIcon />\n </DraggableElement>\n )}\n </div>\n </div>\n\n {/* Sidebar */}\n {(showCrop || showFocalPoint) && (\n <div className={`${baseClass}__sidebar`}>\n {showCrop && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>\n <span className={`${baseClass}__section-title`}>{t('upload:crop')}</span>\n <button\n aria-label={t('general:reset')}\n className={`${baseClass}__reset`}\n onClick={() => setCrop({ height: 100, unit: '%', width: 100, x: 0, y: 0 })}\n type=\"button\"\n >\n <ResetIcon />\n </button>\n </div>\n <div className={`${baseClass}__fieldset`}>\n <NumberInput\n ariaLabel={t('upload:width')}\n onChange={(e) => fineTuneCrop({ dimension: 'width', value: e.target.value })}\n path=\"cropWidth\"\n prefix=\"W\"\n readOnly={!imageLoaded}\n size=\"medium\"\n value={Number(cropWidthPx)}\n />\n <NumberInput\n ariaLabel={t('upload:height')}\n onChange={(e) => fineTuneCrop({ dimension: 'height', value: e.target.value })}\n path=\"cropHeight\"\n prefix=\"H\"\n readOnly={!imageLoaded}\n size=\"medium\"\n value={Number(cropHeightPx)}\n />\n </div>\n </div>\n )}\n\n {showFocalPoint && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>\n <span className={`${baseClass}__section-title`}>{t('upload:focalPoint')}</span>\n <button\n aria-label={t('general:reset')}\n className={`${baseClass}__reset`}\n onClick={centerFocalPoint}\n type=\"button\"\n >\n <ResetIcon />\n </button>\n </div>\n <div className={`${baseClass}__fieldset`}>\n <NumberInput\n ariaLabel={`${t('upload:focalPoint')} X`}\n max={100}\n min={0}\n onChange={(e) =>\n fineTuneFocalPosition({ coordinate: 'x', value: e.target.value })\n }\n path=\"focalX\"\n prefix=\"X\"\n size=\"medium\"\n suffix=\"%\"\n value={Math.round(focalPosition.x)}\n />\n <NumberInput\n ariaLabel={`${t('upload:focalPoint')} Y`}\n max={100}\n min={0}\n onChange={(e) =>\n fineTuneFocalPosition({ coordinate: 'y', value: e.target.value })\n }\n path=\"focalY\"\n prefix=\"Y\"\n size=\"medium\"\n suffix=\"%\"\n value={Math.round(focalPosition.y)}\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n <DialogFooter>\n <Button\n aria-label={t('general:cancel')}\n buttonStyle=\"secondary\"\n onClick={() => closeModal(editDrawerSlug)}\n >\n {t('general:cancel')}\n </Button>\n <Button\n aria-label={t('general:applyChanges')}\n buttonStyle=\"primary\"\n disabled={!imageLoaded}\n onClick={saveEdits}\n >\n {t('general:applyChanges')}\n </Button>\n </DialogFooter>\n </DialogModal>\n )\n}\n\nconst DraggableElement = ({\n boundsRef,\n checkBounds,\n children,\n className,\n containerRef,\n initialPosition = { x: 50, y: 50 },\n onDragEnd,\n setCheckBounds,\n}) => {\n const [position, setPosition] = useState({ x: initialPosition.x, y: initialPosition.y })\n const [isDragging, setIsDragging] = useState(false)\n const dragRef = useRef<HTMLButtonElement | undefined>(undefined)\n // Keep a ref to the latest position so global mouseup handler can read it without a stale closure\n const positionRef = useRef(position)\n positionRef.current = position\n\n const getCoordinates = React.useCallback(\n (mouseX: number, mouseY: number) => {\n const containerRect = containerRef.current.getBoundingClientRect()\n const x = ((mouseX - containerRect.left) / containerRect.width) * 100\n const y = ((mouseY - containerRect.top) / containerRect.height) * 100\n return { x: Math.max(0, Math.min(100, x)), y: Math.max(0, Math.min(100, y)) }\n },\n [containerRef],\n )\n\n const handleMouseDown = (event) => {\n event.preventDefault()\n setIsDragging(true)\n }\n\n // Attach global listeners while dragging — this ensures events fire even when\n // the cursor leaves the focal wrapper area during a fast drag\n React.useEffect(() => {\n if (!isDragging) {\n return\n }\n\n const handleMove = (e: MouseEvent) => {\n if (!containerRef.current) {\n return\n }\n const { x, y } = getCoordinates(e.clientX, e.clientY)\n setPosition({ x, y })\n }\n\n const handleUp = () => {\n setIsDragging(false)\n onDragEnd(positionRef.current)\n }\n\n document.addEventListener('mousemove', handleMove)\n document.addEventListener('mouseup', handleUp)\n\n return () => {\n document.removeEventListener('mousemove', handleMove)\n document.removeEventListener('mouseup', handleUp)\n }\n }, [isDragging, getCoordinates, onDragEnd, containerRef])\n\n // Re-check position when crop changes (the crop window may have moved)\n React.useEffect(() => {\n if (isDragging || !checkBounds || !dragRef.current) {\n return\n }\n const { height, left, top, width } = dragRef.current.getBoundingClientRect()\n const { x, y } = getCoordinates(left + width / 2, top + height / 2)\n onDragEnd({ x, y })\n setPosition({ x, y })\n setCheckBounds(false)\n }, [getCoordinates, isDragging, checkBounds, setCheckBounds, onDragEnd])\n\n React.useEffect(() => {\n setPosition({ x: initialPosition.x, y: initialPosition.y })\n }, [initialPosition.x, initialPosition.y])\n\n return (\n <div className={`${baseClass}__draggable-container`}>\n <button\n className={[`${baseClass}__draggable`, className].filter(Boolean).join(' ')}\n onMouseDown={handleMouseDown}\n ref={dragRef}\n style={{ left: `${position.x}%`, top: `${position.y}%` }}\n type=\"button\"\n >\n {children}\n </button>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"reduceFieldOptions.d.ts","sourceRoot":"","sources":["../../../src/elements/FieldSelect/reduceFieldOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAahF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,WAAW,CAAA;IAClB,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,KAAK,EAAE,aAAa,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,OAAO,WAAW,KAAG,OAOrD,CAAA;AAEH,eAAO,MAAM,kBAAkB,GAAI,oEAOhC;IACD,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAChB;QACE,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,CAAA;KAC/C,GACD,yBAAyB,CAAA;CAC9B,KAAG,WAAW,EAkFd,CAAA"}
1
+ {"version":3,"file":"reduceFieldOptions.d.ts","sourceRoot":"","sources":["../../../src/elements/FieldSelect/reduceFieldOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAahF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,WAAW,CAAA;IAClB,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,KAAK,EAAE,aAAa,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,kBAAkB,UAAW,WAAW,KAAG,OAOrD,CAAA;AAEH,eAAO,MAAM,kBAAkB,uEAO5B;IACD,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAChB;QACE,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,CAAA;KAC/C,GACD,yBAAyB,CAAA;CAC9B,KAAG,WAAW,EA8Fd,CAAA"}
@@ -47,12 +47,14 @@ export const reduceFieldOptions = ({
47
47
  return [...fieldsToUse, ...field.tabs.reduce((tabFields, tab) => {
48
48
  if ('fields' in tab) {
49
49
  const isNamedTab = 'name' in tab && tab.name;
50
+ const namedTabPermissions = isNamedTab && fieldPermissions && fieldPermissions !== true ? fieldPermissions[tab.name] : undefined;
51
+ const tabPermissions = isNamedTab ? namedTabPermissions === true ? true : namedTabPermissions?.fields ?? fieldPermissions : fieldPermissions;
50
52
  return [...tabFields, ...reduceFieldOptions({
51
53
  fields: tab.fields,
52
54
  labelPrefix,
53
55
  parentPath: path,
54
56
  path: isNamedTab ? createNestedClientFieldPath(path, tab) : path,
55
- permissions: fieldPermissions
57
+ permissions: tabPermissions
56
58
  })];
57
59
  }
58
60
  }, [])];
@@ -1 +1 @@
1
- {"version":3,"file":"reduceFieldOptions.js","names":["fieldAffectsData","fieldHasSubFields","fieldIsHiddenOrDisabled","getFieldPermissions","isFieldDisabled","createNestedClientFieldPath","combineFieldLabel","ignoreFromBulkEdit","field","Boolean","type","unique","readOnly","reduceFieldOptions","fields","formState","labelPrefix","parentPath","path","permissions","CustomLabel","customComponents","Label","reduce","fieldsToUse","operation","hasOperationPermission","fieldPermissions","read","hasReadPermission","parentName","includes","split","length","fieldHasLabel","label","prefix","tabs","tabFields","tab","isNamedTab","name","formattedField","value"],"sources":["../../../src/elements/FieldSelect/reduceFieldOptions.ts"],"sourcesContent":["import type { ClientField, FormState, SanitizedFieldPermissions } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldIsHiddenOrDisabled,\n getFieldPermissions,\n isFieldDisabled,\n} from 'payload/shared'\n\nimport { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js'\nimport { combineFieldLabel } from '../../utilities/combineFieldLabel.js'\n\nexport type SelectedField = {\n field: ClientField\n fieldPermissions: SanitizedFieldPermissions\n path: string\n}\n\nexport type FieldOption = {\n label: React.ReactNode\n value: SelectedField\n}\n\nexport const ignoreFromBulkEdit = (field: ClientField): boolean =>\n Boolean(\n (fieldAffectsData(field) || field.type === 'ui') &&\n (isFieldDisabled(field, 'bulkEdit') ||\n field.unique ||\n fieldIsHiddenOrDisabled(field) ||\n ('readOnly' in field && field.readOnly)),\n )\n\nexport const reduceFieldOptions = ({\n fields,\n formState,\n labelPrefix = null,\n parentPath = '',\n path = '',\n permissions,\n}: {\n readonly fields: ClientField[]\n readonly formState?: FormState\n readonly labelPrefix?: React.ReactNode\n readonly parentPath?: string\n readonly path?: string\n readonly permissions:\n | {\n [fieldName: string]: SanitizedFieldPermissions\n }\n | SanitizedFieldPermissions\n}): FieldOption[] => {\n if (!fields) {\n return []\n }\n\n const CustomLabel = formState?.[path]?.customComponents?.Label\n\n return fields?.reduce((fieldsToUse, field) => {\n const {\n operation: hasOperationPermission,\n permissions: fieldPermissions,\n read: hasReadPermission,\n } = getFieldPermissions({\n field,\n operation: 'update',\n parentName: parentPath?.includes('.')\n ? parentPath.split('.')[parentPath.split('.').length - 1]\n : parentPath,\n permissions,\n })\n\n // escape for a variety of reasons, include ui fields as they have `name`.\n if (\n (fieldAffectsData(field) || field.type === 'ui') &&\n (isFieldDisabled(field, 'bulkEdit') ||\n field.unique ||\n fieldIsHiddenOrDisabled(field) ||\n ('readOnly' in field && field.readOnly) ||\n !hasOperationPermission ||\n !hasReadPermission)\n ) {\n return fieldsToUse\n }\n\n if (!(field.type === 'array' || field.type === 'blocks') && fieldHasSubFields(field)) {\n const fieldHasLabel = 'label' in field && field.label\n return [\n ...fieldsToUse,\n ...reduceFieldOptions({\n fields: field.fields,\n labelPrefix: fieldHasLabel\n ? combineFieldLabel({ CustomLabel, field, prefix: labelPrefix })\n : labelPrefix,\n parentPath: path,\n path: createNestedClientFieldPath(path, field),\n permissions: fieldPermissions,\n }),\n ]\n }\n\n if (field.type === 'tabs' && 'tabs' in field) {\n return [\n ...fieldsToUse,\n ...field.tabs.reduce((tabFields, tab) => {\n if ('fields' in tab) {\n const isNamedTab = 'name' in tab && tab.name\n return [\n ...tabFields,\n ...reduceFieldOptions({\n fields: tab.fields,\n labelPrefix,\n parentPath: path,\n path: isNamedTab ? createNestedClientFieldPath(path, tab as ClientField) : path,\n permissions: fieldPermissions,\n }),\n ]\n }\n }, []),\n ]\n }\n\n const formattedField: FieldOption = {\n label: combineFieldLabel({ CustomLabel, field, prefix: labelPrefix }),\n value: {\n field,\n fieldPermissions: fieldPermissions as SanitizedFieldPermissions,\n path: createNestedClientFieldPath(path, field),\n },\n }\n\n return [...fieldsToUse, formattedField]\n }, [])\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"reduceFieldOptions.js","names":["fieldAffectsData","fieldHasSubFields","fieldIsHiddenOrDisabled","getFieldPermissions","isFieldDisabled","createNestedClientFieldPath","combineFieldLabel","ignoreFromBulkEdit","field","Boolean","type","unique","readOnly","reduceFieldOptions","fields","formState","labelPrefix","parentPath","path","permissions","CustomLabel","customComponents","Label","reduce","fieldsToUse","operation","hasOperationPermission","fieldPermissions","read","hasReadPermission","parentName","includes","split","length","fieldHasLabel","label","prefix","tabs","tabFields","tab","isNamedTab","name","namedTabPermissions","undefined","tabPermissions","formattedField","value"],"sources":["../../../src/elements/FieldSelect/reduceFieldOptions.ts"],"sourcesContent":["import type { ClientField, FormState, SanitizedFieldPermissions } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldIsHiddenOrDisabled,\n getFieldPermissions,\n isFieldDisabled,\n} from 'payload/shared'\n\nimport { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js'\nimport { combineFieldLabel } from '../../utilities/combineFieldLabel.js'\n\nexport type SelectedField = {\n field: ClientField\n fieldPermissions: SanitizedFieldPermissions\n path: string\n}\n\nexport type FieldOption = {\n label: React.ReactNode\n value: SelectedField\n}\n\nexport const ignoreFromBulkEdit = (field: ClientField): boolean =>\n Boolean(\n (fieldAffectsData(field) || field.type === 'ui') &&\n (isFieldDisabled(field, 'bulkEdit') ||\n field.unique ||\n fieldIsHiddenOrDisabled(field) ||\n ('readOnly' in field && field.readOnly)),\n )\n\nexport const reduceFieldOptions = ({\n fields,\n formState,\n labelPrefix = null,\n parentPath = '',\n path = '',\n permissions,\n}: {\n readonly fields: ClientField[]\n readonly formState?: FormState\n readonly labelPrefix?: React.ReactNode\n readonly parentPath?: string\n readonly path?: string\n readonly permissions:\n | {\n [fieldName: string]: SanitizedFieldPermissions\n }\n | SanitizedFieldPermissions\n}): FieldOption[] => {\n if (!fields) {\n return []\n }\n\n const CustomLabel = formState?.[path]?.customComponents?.Label\n\n return fields?.reduce((fieldsToUse, field) => {\n const {\n operation: hasOperationPermission,\n permissions: fieldPermissions,\n read: hasReadPermission,\n } = getFieldPermissions({\n field,\n operation: 'update',\n parentName: parentPath?.includes('.')\n ? parentPath.split('.')[parentPath.split('.').length - 1]\n : parentPath,\n permissions,\n })\n\n // escape for a variety of reasons, include ui fields as they have `name`.\n if (\n (fieldAffectsData(field) || field.type === 'ui') &&\n (isFieldDisabled(field, 'bulkEdit') ||\n field.unique ||\n fieldIsHiddenOrDisabled(field) ||\n ('readOnly' in field && field.readOnly) ||\n !hasOperationPermission ||\n !hasReadPermission)\n ) {\n return fieldsToUse\n }\n\n if (!(field.type === 'array' || field.type === 'blocks') && fieldHasSubFields(field)) {\n const fieldHasLabel = 'label' in field && field.label\n return [\n ...fieldsToUse,\n ...reduceFieldOptions({\n fields: field.fields,\n labelPrefix: fieldHasLabel\n ? combineFieldLabel({ CustomLabel, field, prefix: labelPrefix })\n : labelPrefix,\n parentPath: path,\n path: createNestedClientFieldPath(path, field),\n permissions: fieldPermissions,\n }),\n ]\n }\n\n if (field.type === 'tabs' && 'tabs' in field) {\n return [\n ...fieldsToUse,\n ...field.tabs.reduce((tabFields, tab) => {\n if ('fields' in tab) {\n const isNamedTab = 'name' in tab && tab.name\n\n const namedTabPermissions =\n isNamedTab && fieldPermissions && fieldPermissions !== true\n ? fieldPermissions[tab.name]\n : undefined\n\n const tabPermissions = isNamedTab\n ? namedTabPermissions === true\n ? true\n : (namedTabPermissions?.fields ?? fieldPermissions)\n : fieldPermissions\n\n return [\n ...tabFields,\n ...reduceFieldOptions({\n fields: tab.fields,\n labelPrefix,\n parentPath: path,\n path: isNamedTab ? createNestedClientFieldPath(path, tab as ClientField) : path,\n permissions: tabPermissions,\n }),\n ]\n }\n }, []),\n ]\n }\n\n const formattedField: FieldOption = {\n label: combineFieldLabel({ CustomLabel, field, prefix: labelPrefix }),\n value: {\n field,\n fieldPermissions: fieldPermissions as SanitizedFieldPermissions,\n path: createNestedClientFieldPath(path, field),\n },\n }\n\n return [...fieldsToUse, formattedField]\n }, [])\n}\n"],"mappings":"AAEA,SACEA,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,EACvBC,mBAAmB,EACnBC,eAAe,QACV;AAEP,SAASC,2BAA2B,QAAQ;AAC5C,SAASC,iBAAiB,QAAQ;AAalC,OAAO,MAAMC,kBAAA,GAAsBC,KAAA,IACjCC,OAAA,CACE,CAACT,gBAAA,CAAiBQ,KAAA,KAAUA,KAAA,CAAME,IAAI,KAAK,IAAG,MAC3CN,eAAA,CAAgBI,KAAA,EAAO,eACtBA,KAAA,CAAMG,MAAM,IACZT,uBAAA,CAAwBM,KAAA,KACvB,cAAcA,KAAA,IAASA,KAAA,CAAMI,QAAQ;AAG9C,OAAO,MAAMC,kBAAA,GAAqBA,CAAC;EACjCC,MAAM;EACNC,SAAS;EACTC,WAAA,GAAc,IAAI;EAClBC,UAAA,GAAa,EAAE;EACfC,IAAA,GAAO,EAAE;EACTC;AAAW,CAYZ;EACC,IAAI,CAACL,MAAA,EAAQ;IACX,OAAO,EAAE;EACX;EAEA,MAAMM,WAAA,GAAcL,SAAA,GAAYG,IAAA,CAAK,EAAEG,gBAAA,EAAkBC,KAAA;EAEzD,OAAOR,MAAA,EAAQS,MAAA,CAAO,CAACC,WAAA,EAAahB,KAAA;IAClC,MAAM;MACJiB,SAAA,EAAWC,sBAAsB;MACjCP,WAAA,EAAaQ,gBAAgB;MAC7BC,IAAA,EAAMC;IAAiB,CACxB,GAAG1B,mBAAA,CAAoB;MACtBK,KAAA;MACAiB,SAAA,EAAW;MACXK,UAAA,EAAYb,UAAA,EAAYc,QAAA,CAAS,OAC7Bd,UAAA,CAAWe,KAAK,CAAC,IAAI,CAACf,UAAA,CAAWe,KAAK,CAAC,KAAKC,MAAM,GAAG,EAAE,GACvDhB,UAAA;MACJE;IACF;IAEA;IACA,IACE,CAACnB,gBAAA,CAAiBQ,KAAA,KAAUA,KAAA,CAAME,IAAI,KAAK,IAAG,MAC7CN,eAAA,CAAgBI,KAAA,EAAO,eACtBA,KAAA,CAAMG,MAAM,IACZT,uBAAA,CAAwBM,KAAA,KACvB,cAAcA,KAAA,IAASA,KAAA,CAAMI,QAAQ,IACtC,CAACc,sBAAA,IACD,CAACG,iBAAgB,GACnB;MACA,OAAOL,WAAA;IACT;IAEA,IAAI,EAAEhB,KAAA,CAAME,IAAI,KAAK,WAAWF,KAAA,CAAME,IAAI,KAAK,QAAO,KAAMT,iBAAA,CAAkBO,KAAA,GAAQ;MACpF,MAAM0B,aAAA,GAAgB,WAAW1B,KAAA,IAASA,KAAA,CAAM2B,KAAK;MACrD,OAAO,C,GACFX,WAAA,E,GACAX,kBAAA,CAAmB;QACpBC,MAAA,EAAQN,KAAA,CAAMM,MAAM;QACpBE,WAAA,EAAakB,aAAA,GACT5B,iBAAA,CAAkB;UAAEc,WAAA;UAAaZ,KAAA;UAAO4B,MAAA,EAAQpB;QAAY,KAC5DA,WAAA;QACJC,UAAA,EAAYC,IAAA;QACZA,IAAA,EAAMb,2BAAA,CAA4Ba,IAAA,EAAMV,KAAA;QACxCW,WAAA,EAAaQ;MACf,GACD;IACH;IAEA,IAAInB,KAAA,CAAME,IAAI,KAAK,UAAU,UAAUF,KAAA,EAAO;MAC5C,OAAO,C,GACFgB,WAAA,E,GACAhB,KAAA,CAAM6B,IAAI,CAACd,MAAM,CAAC,CAACe,SAAA,EAAWC,GAAA;QAC/B,IAAI,YAAYA,GAAA,EAAK;UACnB,MAAMC,UAAA,GAAa,UAAUD,GAAA,IAAOA,GAAA,CAAIE,IAAI;UAE5C,MAAMC,mBAAA,GACJF,UAAA,IAAcb,gBAAA,IAAoBA,gBAAA,KAAqB,OACnDA,gBAAgB,CAACY,GAAA,CAAIE,IAAI,CAAC,GAC1BE,SAAA;UAEN,MAAMC,cAAA,GAAiBJ,UAAA,GACnBE,mBAAA,KAAwB,OACtB,OACCA,mBAAA,EAAqB5B,MAAA,IAAUa,gBAAA,GAClCA,gBAAA;UAEJ,OAAO,C,GACFW,SAAA,E,GACAzB,kBAAA,CAAmB;YACpBC,MAAA,EAAQyB,GAAA,CAAIzB,MAAM;YAClBE,WAAA;YACAC,UAAA,EAAYC,IAAA;YACZA,IAAA,EAAMsB,UAAA,GAAanC,2BAAA,CAA4Ba,IAAA,EAAMqB,GAAA,IAAsBrB,IAAA;YAC3EC,WAAA,EAAayB;UACf,GACD;QACH;MACF,GAAG,EAAE,EACN;IACH;IAEA,MAAMC,cAAA,GAA8B;MAClCV,KAAA,EAAO7B,iBAAA,CAAkB;QAAEc,WAAA;QAAaZ,KAAA;QAAO4B,MAAA,EAAQpB;MAAY;MACnE8B,KAAA,EAAO;QACLtC,KAAA;QACAmB,gBAAA,EAAkBA,gBAAA;QAClBT,IAAA,EAAMb,2BAAA,CAA4Ba,IAAA,EAAMV,KAAA;MAC1C;IACF;IAEA,OAAO,C,GAAIgB,WAAA,EAAaqB,cAAA,CAAe;EACzC,GAAG,EAAE;AACP","ignoreList":[]}
@@ -0,0 +1,143 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ // Mock the JSX label builder: irrelevant to permission logic and avoids needing a React runtime here.
3
+ vi.mock('../../utilities/combineFieldLabel.js', () => ({
4
+ combineFieldLabel: () => null
5
+ }));
6
+ import { reduceFieldOptions } from './reduceFieldOptions.js';
7
+ const text = name => ({
8
+ name,
9
+ type: 'text'
10
+ });
11
+ const namesOf = options => options.map(option => 'name' in option.value.field ? option.value.field.name : undefined);
12
+ const optionsFor = (fields, permissions) => reduceFieldOptions({
13
+ fields,
14
+ permissions: permissions
15
+ });
16
+ // Granted sets the operation to `true`; denied omits the key, mirroring `populateFieldPermissions`.
17
+ const granted = {
18
+ create: true,
19
+ read: true,
20
+ update: true
21
+ };
22
+ const readOnly = {
23
+ create: true,
24
+ read: true
25
+ };
26
+ describe('reduceFieldOptions', () => {
27
+ it('excludes a restricted field inside a named tab while keeping its clean siblings', () => {
28
+ const fields = [{
29
+ type: 'tabs',
30
+ tabs: [{
31
+ name: 'namedTab',
32
+ fields: [text('okInTab'), text('restrictedInTab')]
33
+ }]
34
+ }];
35
+ const permissions = {
36
+ namedTab: {
37
+ ...granted,
38
+ fields: {
39
+ okInTab: granted,
40
+ restrictedInTab: readOnly
41
+ }
42
+ }
43
+ };
44
+ const options = optionsFor(fields, permissions);
45
+ const names = namesOf(options);
46
+ expect(names).toContain('okInTab');
47
+ expect(names).not.toContain('restrictedInTab');
48
+ });
49
+ it('excludes a restricted field inside a nested named tab', () => {
50
+ const fields = [{
51
+ type: 'tabs',
52
+ tabs: [{
53
+ name: 'outerTab',
54
+ fields: [{
55
+ type: 'tabs',
56
+ tabs: [{
57
+ name: 'innerTab',
58
+ fields: [text('deepOk'), text('deepRestricted')]
59
+ }]
60
+ }]
61
+ }]
62
+ }];
63
+ const permissions = {
64
+ outerTab: {
65
+ ...granted,
66
+ fields: {
67
+ innerTab: {
68
+ ...granted,
69
+ fields: {
70
+ deepOk: granted,
71
+ deepRestricted: readOnly
72
+ }
73
+ }
74
+ }
75
+ }
76
+ };
77
+ const options = optionsFor(fields, permissions);
78
+ const names = namesOf(options);
79
+ expect(names).toContain('deepOk');
80
+ expect(names).not.toContain('deepRestricted');
81
+ });
82
+ it('only affects the named tab that contains the restricted field', () => {
83
+ const fields = [{
84
+ type: 'tabs',
85
+ tabs: [{
86
+ name: 'cleanTab',
87
+ fields: [text('cleanField')]
88
+ }, {
89
+ name: 'restrictedHostTab',
90
+ fields: [text('restrictedField')]
91
+ }]
92
+ }];
93
+ const permissions = {
94
+ cleanTab: {
95
+ ...granted,
96
+ fields: {
97
+ cleanField: granted
98
+ }
99
+ },
100
+ restrictedHostTab: {
101
+ ...granted,
102
+ fields: {
103
+ restrictedField: readOnly
104
+ }
105
+ }
106
+ };
107
+ const options = optionsFor(fields, permissions);
108
+ const names = namesOf(options);
109
+ expect(names).toContain('cleanField');
110
+ expect(names).not.toContain('restrictedField');
111
+ });
112
+ it('includes every named-tab field when permissions are fully granted', () => {
113
+ const fields = [{
114
+ type: 'tabs',
115
+ tabs: [{
116
+ name: 'namedTab',
117
+ fields: [text('a'), text('b')]
118
+ }]
119
+ }];
120
+ const options = optionsFor(fields, true);
121
+ const names = namesOf(options);
122
+ expect(names).toEqual(expect.arrayContaining(['a', 'b']));
123
+ });
124
+ it('applies parent permissions to an unnamed tab and excludes its restricted fields', () => {
125
+ const fields = [{
126
+ type: 'tabs',
127
+ tabs: [{
128
+ label: 'Unnamed',
129
+ fields: [text('okAtRoot'), text('restrictedAtRoot')]
130
+ }]
131
+ }];
132
+ // Unnamed tabs share the parent's permission map, so subfields resolve at the parent level.
133
+ const permissions = {
134
+ okAtRoot: granted,
135
+ restrictedAtRoot: readOnly
136
+ };
137
+ const options = optionsFor(fields, permissions);
138
+ const names = namesOf(options);
139
+ expect(names).toContain('okAtRoot');
140
+ expect(names).not.toContain('restrictedAtRoot');
141
+ });
142
+ });
143
+ //# sourceMappingURL=reduceFieldOptions.spec.js.map