@payloadcms/ui 4.0.0-internal.d3909a9 → 4.0.0-internal.d7d662c

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 (761) hide show
  1. package/dist/css/app.css +2 -2
  2. package/dist/css/colors.css +65 -0
  3. package/dist/elements/APIKeyInput/index.js +22 -23
  4. package/dist/elements/APIKeyInput/index.js.map +1 -1
  5. package/dist/elements/AddNewRelation/index.js +17 -19
  6. package/dist/elements/AddNewRelation/index.js.map +1 -1
  7. package/dist/elements/ArrayAction/index.js +39 -30
  8. package/dist/elements/ArrayAction/index.js.map +1 -1
  9. package/dist/elements/Autosave/index.js +234 -142
  10. package/dist/elements/Autosave/index.js.map +1 -1
  11. package/dist/elements/BulkUpload/ActionsBar/index.js.map +1 -1
  12. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  13. package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -1
  14. package/dist/elements/BulkUpload/DiscardWithoutSaving/index.js.map +1 -1
  15. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  16. package/dist/elements/BulkUpload/EditMany/index.js +29 -21
  17. package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
  18. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  19. package/dist/elements/BulkUpload/index.js +63 -23
  20. package/dist/elements/BulkUpload/index.js.map +1 -1
  21. package/dist/elements/BulkUpload/useUploadCollectionOptions.js.map +1 -1
  22. package/dist/elements/Button/index.css +3 -3
  23. package/dist/elements/Button/index.d.ts.map +1 -1
  24. package/dist/elements/Button/index.js +2 -1
  25. package/dist/elements/Button/index.js.map +1 -1
  26. package/dist/elements/Button/types.d.ts +1 -0
  27. package/dist/elements/Button/types.d.ts.map +1 -1
  28. package/dist/elements/Button/types.js.map +1 -1
  29. package/dist/elements/CardGrid/index.css +0 -1
  30. package/dist/elements/Chip/index.js.map +1 -1
  31. package/dist/elements/ClipboardAction/ClipboardActionLabel.js.map +1 -1
  32. package/dist/elements/ClipboardAction/index.js +213 -88
  33. package/dist/elements/ClipboardAction/index.js.map +1 -1
  34. package/dist/elements/CloseModalOnRouteChange/index.js.map +1 -1
  35. package/dist/elements/CodeEditor/CodeEditor.d.ts.map +1 -1
  36. package/dist/elements/CodeEditor/CodeEditor.js +95 -56
  37. package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
  38. package/dist/elements/CollapseAllToggle/index.js +47 -32
  39. package/dist/elements/CollapseAllToggle/index.js.map +1 -1
  40. package/dist/elements/Collapsible/index.css +15 -4
  41. package/dist/elements/Collapsible/index.d.ts.map +1 -1
  42. package/dist/elements/Collapsible/index.js +46 -38
  43. package/dist/elements/Collapsible/index.js.map +1 -1
  44. package/dist/elements/Collapsible/provider.js +37 -14
  45. package/dist/elements/Collapsible/provider.js.map +1 -1
  46. package/dist/elements/ColumnSelection/Popup.css +4 -0
  47. package/dist/elements/ColumnSelection/Popup.js +10 -2
  48. package/dist/elements/ColumnSelection/Popup.js.map +1 -1
  49. package/dist/elements/ColumnSelection/index.js.map +1 -1
  50. package/dist/elements/CommandPalette/index.css +8 -0
  51. package/dist/elements/ConfirmationModal/index.d.ts +3 -0
  52. package/dist/elements/ConfirmationModal/index.d.ts.map +1 -1
  53. package/dist/elements/ConfirmationModal/index.js +2 -0
  54. package/dist/elements/ConfirmationModal/index.js.map +1 -1
  55. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  56. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  57. package/dist/elements/CreateDocumentButton/index.js +45 -43
  58. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  59. package/dist/elements/DatePicker/index.css +5 -0
  60. package/dist/elements/DatePicker/useDatePickerKeyboard.js.map +1 -1
  61. package/dist/elements/DefaultListViewTabs/index.css +4 -0
  62. package/dist/elements/DefaultListViewTabs/index.js +47 -37
  63. package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
  64. package/dist/elements/DelayedSpinner/index.js.map +1 -1
  65. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  66. package/dist/elements/DeleteDocument/index.js +1 -3
  67. package/dist/elements/DeleteDocument/index.js.map +1 -1
  68. package/dist/elements/Dialog/DialogCancel/index.js.map +1 -1
  69. package/dist/elements/Dialog/DialogConfirm/index.js.map +1 -1
  70. package/dist/elements/Dialog/DialogHeader/index.js.map +1 -1
  71. package/dist/elements/Dialog/DialogModal/index.js.map +1 -1
  72. package/dist/elements/DocumentCard/index.d.ts +2 -0
  73. package/dist/elements/DocumentCard/index.d.ts.map +1 -1
  74. package/dist/elements/DocumentCard/index.js +2 -0
  75. package/dist/elements/DocumentCard/index.js.map +1 -1
  76. package/dist/elements/DocumentControls/index.js +1 -1
  77. package/dist/elements/DocumentControls/index.js.map +1 -1
  78. package/dist/elements/DocumentDrawer/index.js.map +1 -1
  79. package/dist/elements/DocumentFields/index.js +125 -64
  80. package/dist/elements/DocumentFields/index.js.map +1 -1
  81. package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js.map +1 -1
  82. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.d.ts.map +1 -1
  83. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +80 -34
  84. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
  85. package/dist/elements/DocumentHeader/Tabs/Tab/index.css +4 -0
  86. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -1
  87. package/dist/elements/DocumentLocked/index.d.ts.map +1 -1
  88. package/dist/elements/DocumentLocked/index.js +1 -0
  89. package/dist/elements/DocumentLocked/index.js.map +1 -1
  90. package/dist/elements/DocumentStaleData/index.js.map +1 -1
  91. package/dist/elements/DocumentTakeOver/index.js.map +1 -1
  92. package/dist/elements/DraggableSortable/DragOverlayPreview/index.js +2 -0
  93. package/dist/elements/DraggableSortable/DragOverlayPreview/index.js.map +1 -1
  94. package/dist/elements/DraggableSortable/DraggableSortableItem/index.d.ts.map +1 -1
  95. package/dist/elements/DraggableSortable/DraggableSortableItem/index.js +10 -7
  96. package/dist/elements/DraggableSortable/DraggableSortableItem/index.js.map +1 -1
  97. package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts +2 -0
  98. package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts.map +1 -1
  99. package/dist/elements/DraggableSortable/DraggableSortableItem/types.js.map +1 -1
  100. package/dist/elements/DraggableSortable/index.d.ts.map +1 -1
  101. package/dist/elements/DraggableSortable/index.js +104 -170
  102. package/dist/elements/DraggableSortable/index.js.map +1 -1
  103. package/dist/elements/DraggableSortable/types.d.ts +1 -0
  104. package/dist/elements/DraggableSortable/types.d.ts.map +1 -1
  105. package/dist/elements/DraggableSortable/types.js.map +1 -1
  106. package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
  107. package/dist/elements/DraggableSortable/useRowAccessibility.d.ts +14 -0
  108. package/dist/elements/DraggableSortable/useRowAccessibility.d.ts.map +1 -0
  109. package/dist/elements/DraggableSortable/useRowAccessibility.js +99 -0
  110. package/dist/elements/DraggableSortable/useRowAccessibility.js.map +1 -0
  111. package/dist/elements/Drawer/index.js +138 -81
  112. package/dist/elements/Drawer/index.js.map +1 -1
  113. package/dist/elements/Drawer/useDrawerSlug.js.map +1 -1
  114. package/dist/elements/DrawerActionHeader/index.js.map +1 -1
  115. package/dist/elements/DrawerHeader/index.js.map +1 -1
  116. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +177 -62
  117. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
  118. package/dist/elements/EditMany/DrawerContent.js +1 -1
  119. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  120. package/dist/elements/EditMany/index.js.map +1 -1
  121. package/dist/elements/FieldDiffContainer/index.d.ts.map +1 -1
  122. package/dist/elements/FieldDiffContainer/index.js +7 -1
  123. package/dist/elements/FieldDiffContainer/index.js.map +1 -1
  124. package/dist/elements/FieldDiffLabel/index.d.ts +1 -0
  125. package/dist/elements/FieldDiffLabel/index.d.ts.map +1 -1
  126. package/dist/elements/FieldDiffLabel/index.js +2 -0
  127. package/dist/elements/FieldDiffLabel/index.js.map +1 -1
  128. package/dist/elements/FieldSelect/index.js +23 -14
  129. package/dist/elements/FieldSelect/index.js.map +1 -1
  130. package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
  131. package/dist/elements/FileDetails/FileMeta/index.js.map +1 -1
  132. package/dist/elements/FileManager/FilePreview/index.js.map +1 -1
  133. package/dist/elements/FileManager/index.js.map +1 -1
  134. package/dist/elements/FullscreenModal/index.js.map +1 -1
  135. package/dist/elements/GenerateConfirmation/index.js +21 -21
  136. package/dist/elements/GenerateConfirmation/index.js.map +1 -1
  137. package/dist/elements/GroupBy/Popup.js.map +1 -1
  138. package/dist/elements/GroupBy/index.js +120 -66
  139. package/dist/elements/GroupBy/index.js.map +1 -1
  140. package/dist/elements/HTMLDiff/colors.css +7 -0
  141. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
  142. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +51 -42
  143. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -1
  144. package/dist/elements/Hierarchy/DocHeaderButton/index.js +1 -1
  145. package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -1
  146. package/dist/elements/Hierarchy/EditButton/index.js.map +1 -1
  147. package/dist/elements/Hierarchy/HydrateProvider/index.js.map +1 -1
  148. package/dist/elements/Hierarchy/Modal/Footer/index.js.map +1 -1
  149. package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.js +25 -18
  150. package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.js.map +1 -1
  151. package/dist/elements/Hierarchy/Search/HierarchySearchResults.js.map +1 -1
  152. package/dist/elements/Hierarchy/Search/index.js.map +1 -1
  153. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  154. package/dist/elements/Hierarchy/Tree/TreeFocusContext.js.map +1 -1
  155. package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -1
  156. package/dist/elements/Hierarchy/Tree/index.js +10 -5
  157. package/dist/elements/Hierarchy/Tree/index.js.map +1 -1
  158. package/dist/elements/HydrateAuthProvider/index.js.map +1 -1
  159. package/dist/elements/HydratePreferences/index.js.map +1 -1
  160. package/dist/elements/IDLabel/index.js.map +1 -1
  161. package/dist/elements/InputStepper/index.js.map +1 -1
  162. package/dist/elements/ItemsDrawer/ItemSearch/index.js.map +1 -1
  163. package/dist/elements/ItemsDrawer/index.js +186 -105
  164. package/dist/elements/ItemsDrawer/index.js.map +1 -1
  165. package/dist/elements/LLMInstructionsDescription/index.js.map +1 -1
  166. package/dist/elements/LLMInstructionsMenuItem/index.js.map +1 -1
  167. package/dist/elements/LayoutToggle/index.js.map +1 -1
  168. package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
  169. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +1 -1
  170. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
  171. package/dist/elements/Link/index.js +1 -1
  172. package/dist/elements/Link/index.js.map +1 -1
  173. package/dist/elements/ListColumnSelectionButton/index.js.map +1 -1
  174. package/dist/elements/ListControls/index.js.map +1 -1
  175. package/dist/elements/ListDrawer/DrawerContent.js +1 -1
  176. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  177. package/dist/elements/ListDrawer/Provider.d.ts +3 -2
  178. package/dist/elements/ListDrawer/Provider.d.ts.map +1 -1
  179. package/dist/elements/ListDrawer/Provider.js.map +1 -1
  180. package/dist/elements/ListDrawer/index.js.map +1 -1
  181. package/dist/elements/ListGroupByButton/index.js.map +1 -1
  182. package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js.map +1 -1
  183. package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerConfirmSelectionButton.js.map +1 -1
  184. package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerCreateNewDocButton.js.map +1 -1
  185. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  186. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocButton.js +11 -12
  187. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocButton.js.map +1 -1
  188. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +1 -1
  189. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  190. package/dist/elements/ListSelection/index.js.map +1 -1
  191. package/dist/elements/ListWhereBuilder/index.js.map +1 -1
  192. package/dist/elements/LivePreview/DeviceContainer/index.js.map +1 -1
  193. package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
  194. package/dist/elements/LivePreview/Toolbar/SizeInput/index.js.map +1 -1
  195. package/dist/elements/LivePreview/Toolbar/index.js.map +1 -1
  196. package/dist/elements/LivePreview/ToolbarArea/index.js.map +1 -1
  197. package/dist/elements/LivePreview/Window/index.d.ts.map +1 -1
  198. package/dist/elements/LivePreview/Window/index.js +6 -1
  199. package/dist/elements/LivePreview/Window/index.js.map +1 -1
  200. package/dist/elements/LoadMoreRow/index.js.map +1 -1
  201. package/dist/elements/Loading/index.js +62 -18
  202. package/dist/elements/Loading/index.js.map +1 -1
  203. package/dist/elements/LoadingOverlay/index.js +93 -49
  204. package/dist/elements/LoadingOverlay/index.js.map +1 -1
  205. package/dist/elements/Localizer/index.js +133 -108
  206. package/dist/elements/Localizer/index.js.map +1 -1
  207. package/dist/elements/Locked/index.js +54 -37
  208. package/dist/elements/Locked/index.js.map +1 -1
  209. package/dist/elements/Logout/index.js.map +1 -1
  210. package/dist/elements/MiniCarousel/index.js +102 -38
  211. package/dist/elements/MiniCarousel/index.js.map +1 -1
  212. package/dist/elements/Modal/index.d.ts.map +1 -1
  213. package/dist/elements/Modal/index.js +13 -1
  214. package/dist/elements/Modal/index.js.map +1 -1
  215. package/dist/elements/Nav/NavSidebarToggle/index.js.map +1 -1
  216. package/dist/elements/Nav/NavWrapper/index.js +13 -14
  217. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  218. package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -1
  219. package/dist/elements/Nav/SidebarTabs/TabError/index.js.map +1 -1
  220. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -1
  221. package/dist/elements/Nav/SidebarTabs/index.client.js +31 -20
  222. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  223. package/dist/elements/Nav/index.client.js.map +1 -1
  224. package/dist/elements/Nav/index.css +5 -0
  225. package/dist/elements/NavGroup/index.css +27 -3
  226. package/dist/elements/NavGroup/index.js +31 -38
  227. package/dist/elements/NavGroup/index.js.map +1 -1
  228. package/dist/elements/NoListResults/index.css +1 -0
  229. package/dist/elements/NoListResults/index.js +1 -1
  230. package/dist/elements/NoListResults/index.js.map +1 -1
  231. package/dist/elements/PageControls/GroupByPageControls.js.map +1 -1
  232. package/dist/elements/PageControls/index.js.map +1 -1
  233. package/dist/elements/Pagination/ClickableArrow/index.js +10 -11
  234. package/dist/elements/Pagination/ClickableArrow/index.js.map +1 -1
  235. package/dist/elements/Pagination/SimplePagination/index.js.map +1 -1
  236. package/dist/elements/Pagination/index.js +36 -37
  237. package/dist/elements/Pagination/index.js.map +1 -1
  238. package/dist/elements/PerPage/index.js.map +1 -1
  239. package/dist/elements/Pill/index.js.map +1 -1
  240. package/dist/elements/Popup/index.d.ts.map +1 -1
  241. package/dist/elements/Popup/index.js +19 -3
  242. package/dist/elements/Popup/index.js.map +1 -1
  243. package/dist/elements/PreviewButton/index.js.map +1 -1
  244. package/dist/elements/PreviewSizes/index.js +141 -70
  245. package/dist/elements/PreviewSizes/index.js.map +1 -1
  246. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  247. package/dist/elements/PublishButton/ScheduleDrawer/index.js +16 -8
  248. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  249. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  250. package/dist/elements/PublishButton/index.js +1 -0
  251. package/dist/elements/PublishButton/index.js.map +1 -1
  252. package/dist/elements/PublishMany/DrawerContent.js +1 -1
  253. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  254. package/dist/elements/PublishMany/index.js +32 -24
  255. package/dist/elements/PublishMany/index.js.map +1 -1
  256. package/dist/elements/QueryPresets/fields/ColumnsField/index.js +194 -100
  257. package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
  258. package/dist/elements/QueryPresets/fields/GroupByField/index.js +78 -29
  259. package/dist/elements/QueryPresets/fields/GroupByField/index.js.map +1 -1
  260. package/dist/elements/QueryPresets/fields/Heading/index.js.map +1 -1
  261. package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
  262. package/dist/elements/ReactSelect/ClearIndicator/index.js.map +1 -1
  263. package/dist/elements/ReactSelect/MultiValue/index.js +19 -9
  264. package/dist/elements/ReactSelect/MultiValue/index.js.map +1 -1
  265. package/dist/elements/ReactSelect/MultiValueLabel/index.js.map +1 -1
  266. package/dist/elements/ReactSelect/MultiValueRemove/index.js +38 -29
  267. package/dist/elements/ReactSelect/MultiValueRemove/index.js.map +1 -1
  268. package/dist/elements/ReactSelect/ValueContainer/index.js.map +1 -1
  269. package/dist/elements/ReactSelect/index.css +4 -0
  270. package/dist/elements/RelationshipTable/Pagination.js.map +1 -1
  271. package/dist/elements/RelationshipTable/cells/DrawerLink/index.js.map +1 -1
  272. package/dist/elements/RelationshipTable/index.js +1 -1
  273. package/dist/elements/RelationshipTable/index.js.map +1 -1
  274. package/dist/elements/RenderIfInViewport/index.js.map +1 -1
  275. package/dist/elements/RenderTitle/index.js.map +1 -1
  276. package/dist/elements/RestoreMany/index.js +1 -1
  277. package/dist/elements/RestoreMany/index.js.map +1 -1
  278. package/dist/elements/SchedulePublishButton/index.js +111 -39
  279. package/dist/elements/SchedulePublishButton/index.js.map +1 -1
  280. package/dist/elements/Search/SearchInput/index.js.map +1 -1
  281. package/dist/elements/SegmentedControl/index.js.map +1 -1
  282. package/dist/elements/SelectAll/index.js.map +1 -1
  283. package/dist/elements/SelectRow/index.js +31 -21
  284. package/dist/elements/SelectRow/index.js.map +1 -1
  285. package/dist/elements/ShimmerEffect/index.js.map +1 -1
  286. package/dist/elements/SidebarToggle/index.js.map +1 -1
  287. package/dist/elements/SkipToContent/index.js.map +1 -1
  288. package/dist/elements/SortHeader/index.js.map +1 -1
  289. package/dist/elements/SortRow/index.js.map +1 -1
  290. package/dist/elements/Spinner/index.js.map +1 -1
  291. package/dist/elements/StayLoggedIn/index.js.map +1 -1
  292. package/dist/elements/StepNav/SetStepNav.js.map +1 -1
  293. package/dist/elements/StepNav/context.js.map +1 -1
  294. package/dist/elements/Switch/index.css +2 -2
  295. package/dist/elements/Switch/index.js.map +1 -1
  296. package/dist/elements/Table/DefaultCell/fields/Array/index.js +28 -9
  297. package/dist/elements/Table/DefaultCell/fields/Array/index.js.map +1 -1
  298. package/dist/elements/Table/DefaultCell/fields/Blocks/index.js +80 -27
  299. package/dist/elements/Table/DefaultCell/fields/Blocks/index.js.map +1 -1
  300. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js +9 -10
  301. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js.map +1 -1
  302. package/dist/elements/Table/DefaultCell/fields/Date/index.js.map +1 -1
  303. package/dist/elements/Table/DefaultCell/fields/JSON/index.d.ts.map +1 -1
  304. package/dist/elements/Table/DefaultCell/fields/JSON/index.js +21 -32
  305. package/dist/elements/Table/DefaultCell/fields/JSON/index.js.map +1 -1
  306. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
  307. package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
  308. package/dist/elements/Table/DefaultCell/fields/Status/index.js.map +1 -1
  309. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  310. package/dist/elements/Table/GridNavigation/useGridNavigation.js.map +1 -1
  311. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  312. package/dist/elements/Table/TableIdentity.js +32 -16
  313. package/dist/elements/Table/TableIdentity.js.map +1 -1
  314. package/dist/elements/Table/useAriaSort.js.map +1 -1
  315. package/dist/elements/Thumbnail/index.js +133 -53
  316. package/dist/elements/Thumbnail/index.js.map +1 -1
  317. package/dist/elements/ThumbnailCard/index.js.map +1 -1
  318. package/dist/elements/TimezonePicker/index.js +113 -54
  319. package/dist/elements/TimezonePicker/index.js.map +1 -1
  320. package/dist/elements/Toasts/fieldErrors.js.map +1 -1
  321. package/dist/elements/Tooltip/index.js.map +1 -1
  322. package/dist/elements/TrashBanner/index.js.map +1 -1
  323. package/dist/elements/UnpublishMany/DrawerContent.js +1 -1
  324. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  325. package/dist/elements/UnpublishMany/index.js +32 -24
  326. package/dist/elements/UnpublishMany/index.js.map +1 -1
  327. package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -1
  328. package/dist/elements/Upload/index.js.map +1 -1
  329. package/dist/elements/Upload/usePasteFromClipboard.js.map +1 -1
  330. package/dist/elements/Upload/useUploadFromUrl.js.map +1 -1
  331. package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -1
  332. package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -1
  333. package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -1
  334. package/dist/elements/UserMenu/index.d.ts.map +1 -1
  335. package/dist/elements/UserMenu/index.js +2 -1
  336. package/dist/elements/UserMenu/index.js.map +1 -1
  337. package/dist/elements/ViewDescription/index.js.map +1 -1
  338. package/dist/elements/WhereBuilder/Condition/Date/index.js.map +1 -1
  339. package/dist/elements/WhereBuilder/Condition/Number/index.js.map +1 -1
  340. package/dist/elements/WhereBuilder/Condition/Select/index.js.map +1 -1
  341. package/dist/elements/WhereBuilder/Condition/Text/index.js.map +1 -1
  342. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  343. package/dist/elements/WhereBuilder/Condition/index.js +1 -0
  344. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  345. package/dist/exports/client/{CodeEditor-I6PL55BF.js → CodeEditor-23ZGBN6S.js} +2 -2
  346. package/dist/exports/client/{DatePicker-RFCB5VGD.js → DatePicker-AZBZPMY6.js} +2 -2
  347. package/dist/exports/client/chunk-EXVR6BZK.js +27 -0
  348. package/dist/exports/client/chunk-EXVR6BZK.js.map +7 -0
  349. package/dist/exports/client/{chunk-AVJIZPR3.js → chunk-SMBFG6XU.js} +1 -1
  350. package/dist/exports/client/{chunk-AVJIZPR3.js.map → chunk-SMBFG6XU.js.map} +1 -1
  351. package/dist/exports/client/{chunk-O2RR6XEH.js → chunk-ZP2PB6M4.js} +2 -2
  352. package/dist/exports/client/{chunk-O2RR6XEH.js.map → chunk-ZP2PB6M4.js.map} +1 -1
  353. package/dist/exports/client/index.d.ts +2 -2
  354. package/dist/exports/client/index.d.ts.map +1 -1
  355. package/dist/exports/client/index.js +27 -27
  356. package/dist/exports/client/index.js.map +4 -4
  357. package/dist/exports/rsc/index.d.ts +1 -1
  358. package/dist/exports/rsc/index.d.ts.map +1 -1
  359. package/dist/exports/rsc/index.js +1 -1
  360. package/dist/exports/rsc/index.js.map +1 -1
  361. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  362. package/dist/fields/Array/ArrayRow.js +207 -99
  363. package/dist/fields/Array/ArrayRow.js.map +1 -1
  364. package/dist/fields/Array/index.d.ts.map +1 -1
  365. package/dist/fields/Array/index.js +521 -308
  366. package/dist/fields/Array/index.js.map +1 -1
  367. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  368. package/dist/fields/Blocks/BlockRow.js +224 -136
  369. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  370. package/dist/fields/Blocks/BlockSelector/BlockSearch/index.js.map +1 -1
  371. package/dist/fields/Blocks/BlockSelector/index.js +114 -74
  372. package/dist/fields/Blocks/BlockSelector/index.js.map +1 -1
  373. package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
  374. package/dist/fields/Blocks/RowActions.js +75 -55
  375. package/dist/fields/Blocks/RowActions.js.map +1 -1
  376. package/dist/fields/Blocks/SectionTitle/index.css +4 -0
  377. package/dist/fields/Blocks/SectionTitle/index.js.map +1 -1
  378. package/dist/fields/Blocks/index.d.ts.map +1 -1
  379. package/dist/fields/Blocks/index.js +1 -0
  380. package/dist/fields/Blocks/index.js.map +1 -1
  381. package/dist/fields/Checkbox/index.css +3 -3
  382. package/dist/fields/Code/index.d.ts.map +1 -1
  383. package/dist/fields/Code/index.js +3 -2
  384. package/dist/fields/Code/index.js.map +1 -1
  385. package/dist/fields/Collapsible/index.js +114 -73
  386. package/dist/fields/Collapsible/index.js.map +1 -1
  387. package/dist/fields/ConfirmPassword/index.js.map +1 -1
  388. package/dist/fields/DateTime/index.js +215 -121
  389. package/dist/fields/DateTime/index.js.map +1 -1
  390. package/dist/fields/FieldDescription/index.js +29 -21
  391. package/dist/fields/FieldDescription/index.js.map +1 -1
  392. package/dist/fields/FieldError/index.js.map +1 -1
  393. package/dist/fields/FieldLabel/index.js.map +1 -1
  394. package/dist/fields/Group/index.js +75 -46
  395. package/dist/fields/Group/index.js.map +1 -1
  396. package/dist/fields/Hidden/index.js +23 -15
  397. package/dist/fields/Hidden/index.js.map +1 -1
  398. package/dist/fields/JSON/index.d.ts.map +1 -1
  399. package/dist/fields/JSON/index.js +3 -2
  400. package/dist/fields/JSON/index.js.map +1 -1
  401. package/dist/fields/Number/Input.js.map +1 -1
  402. package/dist/fields/Password/input.js +46 -27
  403. package/dist/fields/Password/input.js.map +1 -1
  404. package/dist/fields/RadioGroup/Radio/index.js +35 -35
  405. package/dist/fields/RadioGroup/Radio/index.js.map +1 -1
  406. package/dist/fields/Relationship/Input.js +14 -14
  407. package/dist/fields/Relationship/Input.js.map +1 -1
  408. package/dist/fields/Relationship/index.js +216 -111
  409. package/dist/fields/Relationship/index.js.map +1 -1
  410. package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
  411. package/dist/fields/Relationship/select-components/SingleValue/index.js +9 -11
  412. package/dist/fields/Relationship/select-components/SingleValue/index.js.map +1 -1
  413. package/dist/fields/Select/Input.js +26 -10
  414. package/dist/fields/Select/Input.js.map +1 -1
  415. package/dist/fields/Select/index.js +158 -77
  416. package/dist/fields/Select/index.js.map +1 -1
  417. package/dist/fields/Tabs/Tab/index.js.map +1 -1
  418. package/dist/fields/Tabs/index.css +11 -15
  419. package/dist/fields/Tabs/index.js +120 -112
  420. package/dist/fields/Tabs/index.js.map +1 -1
  421. package/dist/fields/Text/Input.d.ts.map +1 -1
  422. package/dist/fields/Text/Input.js +2 -2
  423. package/dist/fields/Text/Input.js.map +1 -1
  424. package/dist/fields/Text/index.js +172 -95
  425. package/dist/fields/Text/index.js.map +1 -1
  426. package/dist/fields/Text/types.d.ts +2 -1
  427. package/dist/fields/Text/types.d.ts.map +1 -1
  428. package/dist/fields/Text/types.js.map +1 -1
  429. package/dist/fields/Textarea/Input.js +58 -28
  430. package/dist/fields/Textarea/Input.js.map +1 -1
  431. package/dist/fields/Textarea/index.js +97 -55
  432. package/dist/fields/Textarea/index.js.map +1 -1
  433. package/dist/fields/Upload/HasMany/index.js.map +1 -1
  434. package/dist/fields/Upload/Input.d.ts.map +1 -1
  435. package/dist/fields/Upload/Input.js +16 -7
  436. package/dist/fields/Upload/Input.js.map +1 -1
  437. package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
  438. package/dist/fields/Upload/index.css +9 -0
  439. package/dist/fields/Upload/index.js +101 -63
  440. package/dist/fields/Upload/index.js.map +1 -1
  441. package/dist/fields/shared/useRowFocus.js.map +1 -1
  442. package/dist/forms/Form/context.js.map +1 -1
  443. package/dist/forms/Form/index.d.ts.map +1 -1
  444. package/dist/forms/Form/index.js +27 -8
  445. package/dist/forms/Form/index.js.map +1 -1
  446. package/dist/forms/Form/types.d.ts +1 -1
  447. package/dist/forms/Form/types.d.ts.map +1 -1
  448. package/dist/forms/Form/types.js.map +1 -1
  449. package/dist/forms/NullifyField/index.js.map +1 -1
  450. package/dist/forms/RenderFields/RenderField.js.map +1 -1
  451. package/dist/forms/RenderFields/context.js +3 -2
  452. package/dist/forms/RenderFields/context.js.map +1 -1
  453. package/dist/forms/RenderFields/index.js.map +1 -1
  454. package/dist/forms/RowLabel/Context/index.d.ts.map +1 -1
  455. package/dist/forms/RowLabel/Context/index.js +58 -18
  456. package/dist/forms/RowLabel/Context/index.js.map +1 -1
  457. package/dist/forms/Submit/index.js +12 -13
  458. package/dist/forms/Submit/index.js.map +1 -1
  459. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  460. package/dist/forms/useField/index.js +1 -1
  461. package/dist/forms/useField/index.js.map +1 -1
  462. package/dist/forms/withCondition/WatchCondition.js.map +1 -1
  463. package/dist/graphics/Account/Gravatar/index.js +32 -17
  464. package/dist/graphics/Account/Gravatar/index.js.map +1 -1
  465. package/dist/graphics/Account/index.js +27 -18
  466. package/dist/graphics/Account/index.js.map +1 -1
  467. package/dist/hooks/useControllableState.js.map +1 -1
  468. package/dist/hooks/useDebounce.js.map +1 -1
  469. package/dist/hooks/useDebouncedCallback.js.map +1 -1
  470. package/dist/hooks/useDebouncedEffect.js.map +1 -1
  471. package/dist/hooks/useDelay.js.map +1 -1
  472. package/dist/hooks/useDelayedRender.js.map +1 -1
  473. package/dist/hooks/useElementHeightVariable.js.map +1 -1
  474. package/dist/hooks/useHotkey.js.map +1 -1
  475. package/dist/hooks/useIntersect.js.map +1 -1
  476. package/dist/hooks/usePayloadAPI.js.map +1 -1
  477. package/dist/hooks/usePopupWindow.js.map +1 -1
  478. package/dist/hooks/useRelatedCollections.js.map +1 -1
  479. package/dist/hooks/useResize.js.map +1 -1
  480. package/dist/hooks/useThrottledEffect.d.ts.map +1 -1
  481. package/dist/hooks/useThrottledEffect.js +21 -24
  482. package/dist/hooks/useThrottledEffect.js.map +1 -1
  483. package/dist/hooks/useUseAsTitle.js.map +1 -1
  484. package/dist/layouts/Root/RootProviders.d.ts.map +1 -1
  485. package/dist/layouts/Root/RootProviders.js +31 -28
  486. package/dist/layouts/Root/RootProviders.js.map +1 -1
  487. package/dist/providers/Actions/index.js.map +1 -1
  488. package/dist/providers/Auth/AuthSessionDebug/index.js.map +1 -1
  489. package/dist/providers/Auth/index.js +2 -2
  490. package/dist/providers/Auth/index.js.map +1 -1
  491. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +1 -1
  492. package/dist/providers/ClientFunction/index.js.map +1 -1
  493. package/dist/providers/Config/index.js +65 -32
  494. package/dist/providers/Config/index.js.map +1 -1
  495. package/dist/providers/DocumentEvents/index.js.map +1 -1
  496. package/dist/providers/EditDepth/index.js.map +1 -1
  497. package/dist/providers/Embed/index.js.map +1 -1
  498. package/dist/providers/EntityVisibility/index.js.map +1 -1
  499. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  500. package/dist/providers/ListQuery/index.js +5 -5
  501. package/dist/providers/ListQuery/index.js.map +1 -1
  502. package/dist/providers/ListQuery/types.d.ts +6 -1
  503. package/dist/providers/ListQuery/types.d.ts.map +1 -1
  504. package/dist/providers/ListQuery/types.js.map +1 -1
  505. package/dist/providers/ModalAccessibility/index.js.map +1 -1
  506. package/dist/providers/ModalFocus/index.d.ts +15 -0
  507. package/dist/providers/ModalFocus/index.d.ts.map +1 -0
  508. package/dist/providers/ModalFocus/index.js +70 -0
  509. package/dist/providers/ModalFocus/index.js.map +1 -0
  510. package/dist/providers/RouteCache/index.js.map +1 -1
  511. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  512. package/dist/providers/RouteTransition/index.d.ts +3 -2
  513. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  514. package/dist/providers/RouteTransition/index.js +78 -105
  515. package/dist/providers/RouteTransition/index.js.map +1 -1
  516. package/dist/providers/RouterAdapter/index.js.map +1 -1
  517. package/dist/providers/TableColumns/RenderDefaultCell/index.js.map +1 -1
  518. package/dist/providers/TableColumns/index.d.ts.map +1 -1
  519. package/dist/providers/TableColumns/index.js +18 -35
  520. package/dist/providers/TableColumns/index.js.map +1 -1
  521. package/dist/providers/Theme/index.js.map +1 -1
  522. package/dist/providers/ToastContainer/index.js.map +1 -1
  523. package/dist/providers/Translation/index.js.map +1 -1
  524. package/dist/providers/UploadControls/index.js.map +1 -1
  525. package/dist/providers/UploadEdits/index.js.map +1 -1
  526. package/dist/providers/UploadHandlers/index.js.map +1 -1
  527. package/dist/styles.css +66 -1
  528. package/dist/templates/Default/Wrapper/index.js.map +1 -1
  529. package/dist/utilities/serverFunctionRegistry.js +2 -2
  530. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  531. package/dist/views/API/LocaleSelector/index.js.map +1 -1
  532. package/dist/views/API/index.client.d.ts.map +1 -1
  533. package/dist/views/API/index.client.js +1 -0
  534. package/dist/views/API/index.client.js.map +1 -1
  535. package/dist/views/Account/ResetPreferences/index.js +17 -17
  536. package/dist/views/Account/ResetPreferences/index.js.map +1 -1
  537. package/dist/views/Account/Settings/LanguageSelector.js.map +1 -1
  538. package/dist/views/Account/ToggleHighContrast/index.js.map +1 -1
  539. package/dist/views/Account/ToggleTheme/index.js +106 -27
  540. package/dist/views/Account/ToggleTheme/index.js.map +1 -1
  541. package/dist/views/Account/index.client.js.map +1 -1
  542. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  543. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
  544. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  545. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +373 -151
  546. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  547. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  548. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts.map +1 -1
  549. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +2 -1
  550. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -1
  551. package/dist/views/Edit/Auth/APIKeyGenerationModal.js.map +1 -1
  552. package/dist/views/Edit/Auth/index.d.ts.map +1 -1
  553. package/dist/views/Edit/Auth/index.js +13 -11
  554. package/dist/views/Edit/Auth/index.js.map +1 -1
  555. package/dist/views/Edit/SetDocumentStepNav/index.js.map +1 -1
  556. package/dist/views/Edit/SetDocumentTitle/index.js.map +1 -1
  557. package/dist/views/Edit/index.d.ts.map +1 -1
  558. package/dist/views/Edit/index.js +27 -16
  559. package/dist/views/Edit/index.js.map +1 -1
  560. package/dist/views/ForgotPassword/ForgotPasswordForm/index.d.ts.map +1 -1
  561. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +45 -41
  562. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
  563. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
  564. package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -1
  565. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +1 -1
  566. package/dist/views/HierarchyList/HierarchyTable/DateCell.js +8 -9
  567. package/dist/views/HierarchyList/HierarchyTable/DateCell.js.map +1 -1
  568. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.js.map +1 -1
  569. package/dist/views/HierarchyList/TypeFilter/index.js.map +1 -1
  570. package/dist/views/HierarchyList/index.js +2 -2
  571. package/dist/views/HierarchyList/index.js.map +1 -1
  572. package/dist/views/List/DocumentGrid/index.js.map +1 -1
  573. package/dist/views/List/GroupedDocumentGrid/index.js.map +1 -1
  574. package/dist/views/List/ListSelection/index.js.map +1 -1
  575. package/dist/views/Login/LoginField/index.js.map +1 -1
  576. package/dist/views/Login/LoginForm/index.js.map +1 -1
  577. package/dist/views/Logout/LogoutClient.js.map +1 -1
  578. package/dist/views/NotFound/index.client.js.map +1 -1
  579. package/dist/views/ResetPassword/ResetPasswordForm/index.js.map +1 -1
  580. package/dist/views/Verify/index.client.js.map +1 -1
  581. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  582. package/dist/views/Version/Default/index.js +321 -181
  583. package/dist/views/Version/Default/index.js.map +1 -1
  584. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
  585. package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js.map +1 -1
  586. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js +9 -11
  587. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js.map +1 -1
  588. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -1
  589. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js +41 -29
  590. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -1
  591. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -1
  592. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
  593. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +19 -19
  594. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
  595. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
  596. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
  597. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  598. package/dist/views/Version/Restore/index.js +176 -77
  599. package/dist/views/Version/Restore/index.js.map +1 -1
  600. package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js.map +1 -1
  601. package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -1
  602. package/dist/views/Version/SelectComparison/index.js +113 -33
  603. package/dist/views/Version/SelectComparison/index.js.map +1 -1
  604. package/dist/views/Version/SelectLocales/index.js.map +1 -1
  605. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js.map +1 -1
  606. package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -1
  607. package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -1
  608. package/dist/views/Versions/cells/VersionDrawerCreatedAtCell/index.js.map +1 -1
  609. package/dist/views/Versions/index.client.js +9 -11
  610. package/dist/views/Versions/index.client.js.map +1 -1
  611. package/dist/widgets/Activity/Tabs/PinnedDocuments/PinDocumentPicker/index.css +28 -0
  612. package/dist/widgets/Activity/Tabs/PinnedDocuments/PinDocumentPicker/index.d.ts +16 -0
  613. package/dist/widgets/Activity/Tabs/PinnedDocuments/PinDocumentPicker/index.d.ts.map +1 -0
  614. package/dist/widgets/Activity/Tabs/PinnedDocuments/PinDocumentPicker/index.js +98 -0
  615. package/dist/widgets/Activity/Tabs/PinnedDocuments/PinDocumentPicker/index.js.map +1 -0
  616. package/dist/widgets/Activity/Tabs/PinnedDocuments/index.css +70 -0
  617. package/dist/widgets/Activity/Tabs/PinnedDocuments/index.d.ts +13 -0
  618. package/dist/widgets/Activity/Tabs/PinnedDocuments/index.d.ts.map +1 -0
  619. package/dist/widgets/Activity/Tabs/PinnedDocuments/index.js +81 -0
  620. package/dist/widgets/Activity/Tabs/PinnedDocuments/index.js.map +1 -0
  621. package/dist/widgets/{RecentlyViewed/pinnedPreferences.d.ts → Activity/Tabs/PinnedDocuments/preferences.d.ts} +6 -9
  622. package/dist/widgets/Activity/Tabs/PinnedDocuments/preferences.d.ts.map +1 -0
  623. package/dist/widgets/{RecentlyViewed/pinnedPreferences.js → Activity/Tabs/PinnedDocuments/preferences.js} +3 -22
  624. package/dist/widgets/Activity/Tabs/PinnedDocuments/preferences.js.map +1 -0
  625. package/dist/widgets/Activity/Tabs/PinnedDocuments/usePinnedDocuments.d.ts +39 -0
  626. package/dist/widgets/Activity/Tabs/PinnedDocuments/usePinnedDocuments.d.ts.map +1 -0
  627. package/dist/widgets/Activity/Tabs/PinnedDocuments/usePinnedDocuments.js +83 -0
  628. package/dist/widgets/Activity/Tabs/PinnedDocuments/usePinnedDocuments.js.map +1 -0
  629. package/dist/widgets/Activity/Tabs/RecentDocuments/index.d.ts +9 -0
  630. package/dist/widgets/Activity/Tabs/RecentDocuments/index.d.ts.map +1 -0
  631. package/dist/widgets/Activity/Tabs/RecentDocuments/index.js +23 -0
  632. package/dist/widgets/Activity/Tabs/RecentDocuments/index.js.map +1 -0
  633. package/dist/widgets/Activity/components/DocumentList/index.css +61 -0
  634. package/dist/widgets/Activity/components/DocumentList/index.d.ts +15 -0
  635. package/dist/widgets/Activity/components/DocumentList/index.d.ts.map +1 -0
  636. package/dist/widgets/Activity/components/DocumentList/index.js +56 -0
  637. package/dist/widgets/Activity/components/DocumentList/index.js.map +1 -0
  638. package/dist/widgets/Activity/components/EmptyState/index.css +47 -0
  639. package/dist/widgets/Activity/components/EmptyState/index.d.ts +12 -0
  640. package/dist/widgets/Activity/components/EmptyState/index.d.ts.map +1 -0
  641. package/dist/widgets/Activity/components/EmptyState/index.js +37 -0
  642. package/dist/widgets/Activity/components/EmptyState/index.js.map +1 -0
  643. package/dist/widgets/Activity/components/Pagination/index.css +42 -0
  644. package/dist/widgets/Activity/components/Pagination/index.d.ts +20 -0
  645. package/dist/widgets/Activity/components/Pagination/index.d.ts.map +1 -0
  646. package/dist/widgets/Activity/components/Pagination/index.js +125 -0
  647. package/dist/widgets/Activity/components/Pagination/index.js.map +1 -0
  648. package/dist/widgets/Activity/components/StatusPill/index.css +24 -0
  649. package/dist/widgets/Activity/components/StatusPill/index.d.ts +8 -0
  650. package/dist/widgets/Activity/components/StatusPill/index.d.ts.map +1 -0
  651. package/dist/widgets/Activity/components/StatusPill/index.js +18 -0
  652. package/dist/widgets/Activity/components/StatusPill/index.js.map +1 -0
  653. package/dist/widgets/Activity/index.client.d.ts +15 -0
  654. package/dist/widgets/Activity/index.client.d.ts.map +1 -0
  655. package/dist/widgets/Activity/index.client.js +186 -0
  656. package/dist/widgets/Activity/index.client.js.map +1 -0
  657. package/dist/widgets/Activity/index.css +320 -0
  658. package/dist/widgets/Activity/index.d.ts +13 -0
  659. package/dist/widgets/Activity/index.d.ts.map +1 -0
  660. package/dist/widgets/Activity/index.js +100 -0
  661. package/dist/widgets/Activity/index.js.map +1 -0
  662. package/dist/widgets/{RecentlyViewed/index.client.d.ts → Activity/types.d.ts} +5 -13
  663. package/dist/widgets/Activity/types.d.ts.map +1 -0
  664. package/dist/widgets/Activity/types.js +2 -0
  665. package/dist/widgets/Activity/types.js.map +1 -0
  666. package/dist/widgets/Activity/utils/cache.d.ts +33 -0
  667. package/dist/widgets/Activity/utils/cache.d.ts.map +1 -0
  668. package/dist/widgets/Activity/utils/cache.js +72 -0
  669. package/dist/widgets/Activity/utils/cache.js.map +1 -0
  670. package/dist/widgets/Activity/utils/constants.d.ts +5 -0
  671. package/dist/widgets/Activity/utils/constants.d.ts.map +1 -0
  672. package/dist/widgets/Activity/utils/constants.js +4 -0
  673. package/dist/widgets/Activity/utils/constants.js.map +1 -0
  674. package/dist/widgets/Activity/utils/documents.d.ts +11 -0
  675. package/dist/widgets/Activity/utils/documents.d.ts.map +1 -0
  676. package/dist/widgets/Activity/utils/documents.js +38 -0
  677. package/dist/widgets/Activity/utils/documents.js.map +1 -0
  678. package/dist/widgets/Activity/utils/getActivityWidgetDocs.d.ts +20 -0
  679. package/dist/widgets/Activity/utils/getActivityWidgetDocs.d.ts.map +1 -0
  680. package/dist/widgets/{RecentlyViewed/getDocuments.js → Activity/utils/getActivityWidgetDocs.js} +18 -19
  681. package/dist/widgets/Activity/utils/getActivityWidgetDocs.js.map +1 -0
  682. package/dist/widgets/Activity/utils/state.d.ts +44 -0
  683. package/dist/widgets/Activity/utils/state.d.ts.map +1 -0
  684. package/dist/widgets/Activity/utils/state.js +80 -0
  685. package/dist/widgets/Activity/utils/state.js.map +1 -0
  686. package/dist/widgets/Activity/utils/useActivityDocuments.d.ts +35 -0
  687. package/dist/widgets/Activity/utils/useActivityDocuments.d.ts.map +1 -0
  688. package/dist/widgets/Activity/utils/useActivityDocuments.js +141 -0
  689. package/dist/widgets/Activity/utils/useActivityDocuments.js.map +1 -0
  690. package/dist/widgets/Activity/utils/usePageSize.d.ts +11 -0
  691. package/dist/widgets/Activity/utils/usePageSize.d.ts.map +1 -0
  692. package/dist/widgets/Activity/utils/usePageSize.js +35 -0
  693. package/dist/widgets/Activity/utils/usePageSize.js.map +1 -0
  694. package/dist/widgets/CollectionCards/index.client.d.ts +3 -0
  695. package/dist/widgets/CollectionCards/index.client.d.ts.map +1 -1
  696. package/dist/widgets/CollectionCards/index.client.js +3 -0
  697. package/dist/widgets/CollectionCards/index.client.js.map +1 -1
  698. package/dist/widgets/CollectionCards/index.d.ts +3 -0
  699. package/dist/widgets/CollectionCards/index.d.ts.map +1 -1
  700. package/dist/widgets/CollectionCards/index.js +3 -0
  701. package/dist/widgets/CollectionCards/index.js.map +1 -1
  702. package/dist/widgets/CollectionQuery/SortField/index.d.ts +3 -0
  703. package/dist/widgets/CollectionQuery/SortField/index.d.ts.map +1 -1
  704. package/dist/widgets/CollectionQuery/SortField/index.js +181 -73
  705. package/dist/widgets/CollectionQuery/SortField/index.js.map +1 -1
  706. package/dist/widgets/CollectionQuery/index.d.ts +3 -0
  707. package/dist/widgets/CollectionQuery/index.d.ts.map +1 -1
  708. package/dist/widgets/CollectionQuery/index.js +3 -0
  709. package/dist/widgets/CollectionQuery/index.js.map +1 -1
  710. package/dist/widgets/UploadDropzone/CollectionsField/index.d.ts +3 -0
  711. package/dist/widgets/UploadDropzone/CollectionsField/index.d.ts.map +1 -1
  712. package/dist/widgets/UploadDropzone/CollectionsField/index.js +65 -14
  713. package/dist/widgets/UploadDropzone/CollectionsField/index.js.map +1 -1
  714. package/dist/widgets/UploadDropzone/index.client.d.ts +3 -0
  715. package/dist/widgets/UploadDropzone/index.client.d.ts.map +1 -1
  716. package/dist/widgets/UploadDropzone/index.client.js +3 -0
  717. package/dist/widgets/UploadDropzone/index.client.js.map +1 -1
  718. package/dist/widgets/UploadDropzone/index.d.ts +3 -0
  719. package/dist/widgets/UploadDropzone/index.d.ts.map +1 -1
  720. package/dist/widgets/UploadDropzone/index.js +3 -0
  721. package/dist/widgets/UploadDropzone/index.js.map +1 -1
  722. package/dist/widgets/Welcome/index.d.ts +3 -0
  723. package/dist/widgets/Welcome/index.d.ts.map +1 -1
  724. package/dist/widgets/Welcome/index.js +3 -0
  725. package/dist/widgets/Welcome/index.js.map +1 -1
  726. package/dist/widgets/WidgetCard/index.css +0 -20
  727. package/dist/widgets/{RecentlyViewed/CollectionsField → shared/CollectionFilter}/index.css +2 -2
  728. package/dist/widgets/{RecentlyViewed/CollectionsField → shared/CollectionFilter}/index.d.ts +3 -1
  729. package/dist/widgets/shared/CollectionFilter/index.d.ts.map +1 -0
  730. package/dist/widgets/shared/CollectionFilter/index.js +170 -0
  731. package/dist/widgets/shared/CollectionFilter/index.js.map +1 -0
  732. package/package.json +8 -7
  733. package/dist/exports/client/chunk-R7M6BG75.js +0 -27
  734. package/dist/exports/client/chunk-R7M6BG75.js.map +0 -7
  735. package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts.map +0 -1
  736. package/dist/widgets/RecentlyViewed/CollectionsField/index.js +0 -102
  737. package/dist/widgets/RecentlyViewed/CollectionsField/index.js.map +0 -1
  738. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.css +0 -41
  739. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.d.ts +0 -19
  740. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.d.ts.map +0 -1
  741. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.js +0 -121
  742. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.js.map +0 -1
  743. package/dist/widgets/RecentlyViewed/getDocuments.d.ts +0 -20
  744. package/dist/widgets/RecentlyViewed/getDocuments.d.ts.map +0 -1
  745. package/dist/widgets/RecentlyViewed/getDocuments.js.map +0 -1
  746. package/dist/widgets/RecentlyViewed/index.client.d.ts.map +0 -1
  747. package/dist/widgets/RecentlyViewed/index.client.js +0 -409
  748. package/dist/widgets/RecentlyViewed/index.client.js.map +0 -1
  749. package/dist/widgets/RecentlyViewed/index.css +0 -352
  750. package/dist/widgets/RecentlyViewed/index.d.ts +0 -10
  751. package/dist/widgets/RecentlyViewed/index.d.ts.map +0 -1
  752. package/dist/widgets/RecentlyViewed/index.js +0 -47
  753. package/dist/widgets/RecentlyViewed/index.js.map +0 -1
  754. package/dist/widgets/RecentlyViewed/pinnedPreferences.d.ts.map +0 -1
  755. package/dist/widgets/RecentlyViewed/pinnedPreferences.js.map +0 -1
  756. package/dist/widgets/RecentlyViewed/recents.d.ts +0 -8
  757. package/dist/widgets/RecentlyViewed/recents.d.ts.map +0 -1
  758. package/dist/widgets/RecentlyViewed/recents.js +0 -19
  759. package/dist/widgets/RecentlyViewed/recents.js.map +0 -1
  760. /package/dist/exports/client/{CodeEditor-I6PL55BF.js.map → CodeEditor-23ZGBN6S.js.map} +0 -0
  761. /package/dist/exports/client/{DatePicker-RFCB5VGD.js.map → DatePicker-AZBZPMY6.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.js","names":["c","_c","DndContext","DragOverlay","useDraggable","useDroppable","snapCenterToCursor","getTranslation","toWords","React","useEffect","useMemo","useState","Button","Popup","PopupList","ChevronIcon","useTranslation","DashboardStepNav","useDashboardLayout","closestInXAxis","useDashboardSensors","WidgetContent","WidgetEditControl","snapCenterToCursorOnlyForPointer","args","activatorEvent","transform","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","t0","$","clientLayout","initialLayout","widgets","i18n","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","updateWidgetData","activeDragId","setActiveDragId","activeControlsWidgetID","setActiveControlsWidgetID","sensors","t1","t2","t3","t4","Symbol","for","t5","event","over","droppableId","id","i","lastIndexOf","slug","slice","position","active","moveFromIndex","findIndex","widget","item","moveToIndex","widget_0","t6","event_0","_jsxs","children","_jsx","autoScroll","enabled","threshold","x","y","collisionDetection","onDragCancel","onDragEnd","onDragStart","className","style","display","flexWrap","length","map","widget_1","slug_0","label","find","widgetConfig","DraggableItem","disabled","width","t7","dragHandle","filter","Boolean","join","component","onSave","data","widgetData","widgetID","widgetLabel","WidgetWidthDropdown","currentWidth","maxWidth","minWidth","onOpenChange","isOpen","onResize","buttonStyle","extraButtonProps","tabIndex","icon","margin","onClick","round","dropAnimation","duration","modifiers","draggedWidget","widget_2","inert","validOptions","minPercentage","maxPercentage","Object","entries","key","value","percentage","option","isDisabled","onToggleClose","onToggleOpen","popupType","render","close","ButtonGroup","isSelected","toFixed","renderButton","_active","onKeyDown","ariaProps","size","selected","verticalAlign","props","attributes","isDragging","listeners","setActivatorNodeRef","setNodeRef","mergedStyles","opacity","DroppableItem","undefined","ref","role","height","type","isOver","t8","left","right","top","bottom","borderRadius","backgroundColor","marginBottom","marginTop","pointerEvents","zIndex"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Modifier } from '@dnd-kit/core'\nimport type { ClientWidget, WidgetWidth } from 'payload'\n\nimport { DndContext, DragOverlay, useDraggable, useDroppable } from '@dnd-kit/core'\nimport { snapCenterToCursor } from '@dnd-kit/modifiers'\nimport { getTranslation } from '@payloadcms/translations'\nimport { toWords } from 'payload/shared'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { Button } from '../../../../elements/Button/index.js'\nimport { Popup } from '../../../../elements/Popup/index.js'\nimport * as PopupList from '../../../../elements/Popup/PopupButtonList/index.js'\nimport { ChevronIcon } from '../../../../icons/Chevron/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { DashboardStepNav } from './DashboardStepNav.js'\nimport { useDashboardLayout } from './useDashboardLayout.js'\nimport { closestInXAxis } from './utils/collisionDetection.js'\nimport { useDashboardSensors } from './utils/sensors.js'\nimport { WidgetContent } from './WidgetContent/index.js'\nimport { WidgetEditControl } from './WidgetEditControl.js'\n\n/**\n * Custom modifier that only applies snapCenterToCursor for pointer events.\n * During keyboard navigation, we handle positioning ourselves via the coordinate getter.\n */\nconst snapCenterToCursorOnlyForPointer: Modifier = (args) => {\n const { activatorEvent } = args\n\n // Only apply snap for pointer events (mouse/touch), not keyboard\n // Check activatorEvent.type since KeyboardEvent may not exist on server\n if (activatorEvent && 'key' in activatorEvent) {\n return args.transform\n }\n\n return snapCenterToCursor(args)\n}\n\nexport type WidgetItem = {\n data?: Record<string, unknown>\n id: string\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n width: WidgetWidth\n}\n\nexport type WidgetInstanceClient = {\n component: React.ReactNode\n item: WidgetItem\n}\n\nexport type DropTargetWidget = {\n position: 'after' | 'before'\n widget: WidgetInstanceClient\n} | null\n\n/* eslint-disable perfectionist/sort-objects */\nconst WIDTH_TO_PERCENTAGE = {\n 'x-small': 25,\n small: (1 / 3) * 100,\n medium: 50,\n large: (2 / 3) * 100,\n 'x-large': 75,\n full: 100,\n} as const\n\nexport function ModularDashboardClient({\n clientLayout: initialLayout,\n widgets,\n}: {\n clientLayout: WidgetInstanceClient[]\n widgets: ClientWidget[]\n}) {\n const { i18n, t } = useTranslation()\n const {\n addWidget,\n cancel,\n cancelModal,\n currentLayout,\n deleteWidget,\n isEditing,\n moveWidget,\n resetLayout,\n resizeWidget,\n saveLayout,\n setIsEditing,\n updateWidgetData,\n } = useDashboardLayout(initialLayout)\n\n const [activeDragId, setActiveDragId] = useState<null | string>(null)\n const [activeControlsWidgetID, setActiveControlsWidgetID] = useState<null | string>(null)\n const sensors = useDashboardSensors()\n\n useEffect(() => {\n if (!isEditing) {\n setActiveControlsWidgetID(null)\n }\n }, [isEditing])\n\n return (\n <div>\n <DndContext\n autoScroll={{\n enabled: true,\n threshold: {\n x: 0, // No horizontal scroll\n y: 0.2, // Allow vertical scroll at 20% from edge\n },\n }}\n collisionDetection={closestInXAxis}\n // https://github.com/clauderic/dnd-kit/issues/926#issuecomment-1640115665\n id=\"dashboard-dnd-context\"\n onDragCancel={() => {\n setActiveDragId(null)\n }}\n onDragEnd={(event) => {\n setActiveDragId(null)\n\n if (!event.over) {\n return\n }\n const droppableId = event.over.id as string\n const i = droppableId.lastIndexOf('-')\n const slug = droppableId.slice(0, i)\n const position = droppableId.slice(i + 1)\n\n if (slug === event.active.id) {\n return\n }\n\n const moveFromIndex = currentLayout?.findIndex(\n (widget) => widget.item.id === event.active.id,\n )\n let moveToIndex = currentLayout?.findIndex((widget) => widget.item.id === slug)\n if (moveFromIndex < moveToIndex) {\n moveToIndex--\n }\n if (position === 'after') {\n moveToIndex++\n }\n moveWidget({ moveFromIndex, moveToIndex })\n }}\n onDragStart={(event) => {\n setActiveDragId(event.active.id as string)\n }}\n sensors={sensors}\n >\n <div\n className={`modular-dashboard ${isEditing ? 'editing' : ''}`}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n // Don't add gap here! We need to use padding on the widgets instead\n // to make sure all rows have the same width always.\n }}\n >\n {currentLayout?.length === 0 && (\n <div className=\"modular-dashboard__empty\">\n <p>{t('dashboard:noItems')}</p>\n </div>\n )}\n {currentLayout?.map((widget) => {\n const slug = widget.item.id.slice(0, widget.item.id.lastIndexOf('-'))\n const label = getTranslation(\n widgets.find((widgetConfig) => widgetConfig.slug === slug)?.label ?? toWords(slug),\n i18n,\n )\n\n return (\n <DraggableItem\n disabled={!isEditing}\n id={widget.item.id}\n key={widget.item.id}\n label={label}\n style={{\n width: `${WIDTH_TO_PERCENTAGE[widget.item.width]}%`,\n }}\n width={widget.item.width}\n >\n {({ dragHandle }) => (\n <div\n className={[\n 'widget-wrapper',\n isEditing ? 'widget-wrapper--editing' : '',\n activeControlsWidgetID === widget.item.id\n ? 'widget-wrapper--controls-active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <WidgetContent id={`${widget.item.id}-content`} isEditing={isEditing}>\n {widget.component}\n </WidgetContent>\n {dragHandle}\n {isEditing && (\n <div className=\"widget-wrapper__controls\">\n <WidgetEditControl\n onSave={(data) => {\n updateWidgetData(widget.item.id, data)\n }}\n widgetData={widget.item.data}\n widgetID={widget.item.id}\n widgetLabel={label}\n />\n <WidgetWidthDropdown\n currentWidth={widget.item.width}\n maxWidth={widget.item.maxWidth}\n minWidth={widget.item.minWidth}\n onOpenChange={(isOpen) => {\n setActiveControlsWidgetID(isOpen ? widget.item.id : null)\n }}\n onResize={(width) => resizeWidget(widget.item.id, width)}\n widgetLabel={label}\n />\n <Button\n aria-label={t('general:deleteLabel', { label })}\n buttonStyle=\"destructive\"\n className=\"widget-wrapper__delete-btn\"\n extraButtonProps={{ tabIndex: 0 }}\n icon=\"x\"\n margin={false}\n onClick={() => deleteWidget(widget.item.id)}\n round\n />\n </div>\n )}\n </div>\n )}\n </DraggableItem>\n )\n })}\n <DragOverlay\n className=\"drag-overlay\"\n dropAnimation={{\n duration: 100,\n }}\n // Uses custom modifier that only applies for pointer, not keyboard navigation.\n modifiers={[snapCenterToCursorOnlyForPointer]}\n >\n {activeDragId\n ? (() => {\n const draggedWidget = currentLayout?.find(\n (widget) => widget.item.id === activeDragId,\n )\n return draggedWidget ? (\n <div\n aria-hidden=\"true\"\n inert\n style={{\n transform: 'scale(0.25)',\n }}\n >\n <div\n className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}\n >\n <div className=\"widget-content\">{draggedWidget.component}</div>\n </div>\n </div>\n ) : null\n })()\n : null}\n </DragOverlay>\n </div>\n </DndContext>\n <DashboardStepNav\n addWidget={addWidget}\n cancel={cancel}\n isEditing={isEditing}\n resetLayout={resetLayout}\n saveLayout={saveLayout}\n setIsEditing={setIsEditing}\n widgets={widgets}\n />\n {cancelModal}\n </div>\n )\n}\n\nfunction WidgetWidthDropdown({\n currentWidth,\n maxWidth,\n minWidth,\n onOpenChange,\n onResize,\n widgetLabel,\n}: {\n currentWidth: WidgetWidth\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n onOpenChange: (isOpen: boolean) => void\n onResize: (width: WidgetWidth) => void\n widgetLabel: string\n}) {\n const { t } = useTranslation()\n\n // Filter options based on minWidth and maxWidth\n const validOptions = useMemo(() => {\n const minPercentage = WIDTH_TO_PERCENTAGE[minWidth]\n const maxPercentage = WIDTH_TO_PERCENTAGE[maxWidth]\n\n return Object.entries(WIDTH_TO_PERCENTAGE)\n .map(([key, value]) => ({\n width: key as WidgetWidth,\n percentage: value,\n }))\n .filter((option) => option.percentage >= minPercentage && option.percentage <= maxPercentage)\n }, [minWidth, maxWidth])\n\n const isDisabled = validOptions.length <= 1\n\n if (isDisabled) {\n return null\n }\n\n return (\n <Popup\n onToggleClose={() => onOpenChange(false)}\n onToggleOpen={onOpenChange}\n popupType=\"menu\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {validOptions.map((option) => {\n const isSelected = option.width === currentWidth\n return (\n <PopupList.Button\n active={isSelected}\n key={option.width}\n onClick={() => {\n onResize(option.width)\n close()\n }}\n >\n <span className=\"widget-wrapper__size-btn-label\">{option.width}</span>\n <span className=\"widget-wrapper__size-btn-percentage\">\n {option.percentage.toFixed(0)}%\n </span>\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n renderButton={({ active: _active, onClick, onKeyDown, ...ariaProps }) => (\n <Button\n aria-label={t('dashboard:resizeWidget', { label: widgetLabel, size: currentWidth })}\n buttonStyle=\"secondary\"\n className=\"widget-wrapper__size-btn\"\n extraButtonProps={{\n onKeyDown,\n ...ariaProps,\n tabIndex: 0,\n }}\n icon={<ChevronIcon className=\"widget-wrapper__size-btn-icon\" size={16} />}\n margin={false}\n onClick={onClick}\n selected={_active}\n >\n {currentWidth}\n </Button>\n )}\n size=\"small\"\n verticalAlign=\"bottom\"\n />\n )\n}\n\nfunction DraggableItem(props: {\n children: (args: { dragHandle: React.ReactNode }) => React.ReactNode\n disabled?: boolean\n id: string\n label: string\n style?: React.CSSProperties\n width: WidgetWidth\n}) {\n const { t } = useTranslation()\n const { attributes, isDragging, listeners, setActivatorNodeRef, setNodeRef } = useDraggable({\n id: props.id,\n disabled: props.disabled,\n })\n\n const mergedStyles: React.CSSProperties = {\n ...props.style,\n opacity: isDragging ? 0.3 : 1,\n position: 'relative',\n }\n\n return (\n <div className=\"widget\" data-slug={props.id} data-width={props.width} style={mergedStyles}>\n <DroppableItem id={props.id} position=\"before\" />\n <div\n aria-label={props.label}\n aria-labelledby={props.disabled ? undefined : `${props.id}-content`}\n className=\"draggable\"\n id={props.id}\n ref={setNodeRef}\n role=\"group\"\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n }}\n tabIndex={props.disabled ? undefined : 0}\n >\n {props.children({\n dragHandle: !props.disabled && (\n <button\n {...attributes}\n {...listeners}\n aria-describedby={[attributes['aria-describedby'], `${props.id}-content`]\n .filter(Boolean)\n .join(' ')}\n aria-label={t('general:dragToReorder')}\n className=\"widget-wrapper__edit-overlay widget-wrapper__drag-btn\"\n ref={setActivatorNodeRef}\n type=\"button\"\n />\n ),\n })}\n </div>\n <DroppableItem id={props.id} position=\"after\" />\n </div>\n )\n}\n\nfunction DroppableItem({ id, position }: { id: string; position: 'after' | 'before' }) {\n const { setNodeRef, isOver } = useDroppable({ id: `${id}-${position}`, data: { position } })\n\n return (\n <div\n className=\"droppable-widget\"\n data-testid={`${id}-${position}`}\n ref={setNodeRef}\n style={{\n position: 'absolute',\n left: position === 'before' ? -2 : 'auto',\n right: position === 'after' ? -2 : 'auto',\n top: 0,\n bottom: 0,\n borderRadius: '1000px',\n width: '4px',\n backgroundColor: isOver ? 'var(--color-bg-brand-secondary)' : 'transparent',\n marginBottom: '10px',\n marginTop: '10px',\n pointerEvents: 'none',\n zIndex: 1000,\n }}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.client.js","names":["c","_c","DndContext","DragOverlay","useDraggable","useDroppable","snapCenterToCursor","getTranslation","toWords","React","useEffect","useMemo","useState","Button","Popup","PopupList","ChevronIcon","useTranslation","DashboardStepNav","useDashboardLayout","closestInXAxis","useDashboardSensors","WidgetContent","WidgetEditControl","snapCenterToCursorOnlyForPointer","args","activatorEvent","transform","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","t0","$","clientLayout","initialLayout","widgets","i18n","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","updateWidgetData","activeDragId","setActiveDragId","activeControlsWidgetID","setActiveControlsWidgetID","sensors","t1","t2","id","index","widgetID","String","replace","slug","slice","lastIndexOf","label","find","widget","position","findIndex","widget_0","item","describeWidget","t3","active","announceCancel","t4","active_0","over","moveToIndex","getWidgetMoveIndexes","activeID","layout","overID","title","destination","announceMove","event","moveFromIndex","moveToIndex_0","t5","event_0","message","undefined","t6","t7","active_1","onDragCancel","onDragEnd","onDragOver","onDragStart","announcements","t8","t9","t10","t11","Symbol","for","t12","event_1","indexes","t13","event_2","_jsxs","children","_jsx","accessibility","autoScroll","enabled","threshold","x","y","collisionDetection","className","style","display","flexWrap","length","map","widget_1","slug_0","label_0","widgetConfig","DraggableItem","disabled","width","t14","dragHandle","filter","Boolean","join","component","onSave","data","widgetData","widgetLabel","WidgetWidthDropdown","currentWidth","maxWidth","minWidth","onOpenChange","isOpen","onResize","buttonStyle","extraButtonProps","tabIndex","icon","margin","onClick","round","dropAnimation","duration","modifiers","draggedWidget","widget_2","inert","minPercentage","maxPercentage","Object","entries","_temp","option","percentage","validOptions","isDisabled","close","ButtonGroup","option_0","isSelected","toFixed","_active","onKeyDown","ariaProps","size","selected","onToggleClose","onToggleOpen","popupType","render","verticalAlign","key","value","props","attributes","isDragging","listeners","setActivatorNodeRef","setNodeRef","mergedStyles","opacity","DroppableItem","ref","role","height","type","isOver","left","right","top","bottom","borderRadius","backgroundColor","marginBottom","marginTop","pointerEvents","zIndex","endsWith"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Announcements, Modifier, UniqueIdentifier } from '@dnd-kit/core'\nimport type { ClientWidget, WidgetWidth } from 'payload'\n\nimport { DndContext, DragOverlay, useDraggable, useDroppable } from '@dnd-kit/core'\nimport { snapCenterToCursor } from '@dnd-kit/modifiers'\nimport { getTranslation } from '@payloadcms/translations'\nimport { toWords } from 'payload/shared'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { Button } from '../../../../elements/Button/index.js'\nimport { Popup } from '../../../../elements/Popup/index.js'\nimport * as PopupList from '../../../../elements/Popup/PopupButtonList/index.js'\nimport { ChevronIcon } from '../../../../icons/Chevron/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { DashboardStepNav } from './DashboardStepNav.js'\nimport { useDashboardLayout } from './useDashboardLayout.js'\nimport { closestInXAxis } from './utils/collisionDetection.js'\nimport { useDashboardSensors } from './utils/sensors.js'\nimport { WidgetContent } from './WidgetContent/index.js'\nimport { WidgetEditControl } from './WidgetEditControl.js'\n\n/**\n * Custom modifier that only applies snapCenterToCursor for pointer events.\n * During keyboard navigation, we handle positioning ourselves via the coordinate getter.\n */\nconst snapCenterToCursorOnlyForPointer: Modifier = (args) => {\n const { activatorEvent } = args\n\n // Only apply snap for pointer events (mouse/touch), not keyboard\n // Check activatorEvent.type since KeyboardEvent may not exist on server\n if (activatorEvent && 'key' in activatorEvent) {\n return args.transform\n }\n\n return snapCenterToCursor(args)\n}\n\nexport type WidgetItem = {\n data?: Record<string, unknown>\n id: string\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n width: WidgetWidth\n}\n\nexport type WidgetInstanceClient = {\n component: React.ReactNode\n item: WidgetItem\n}\n\nexport type DropTargetWidget = {\n position: 'after' | 'before'\n widget: WidgetInstanceClient\n} | null\n\n/* eslint-disable perfectionist/sort-objects */\nconst WIDTH_TO_PERCENTAGE = {\n 'x-small': 25,\n small: (1 / 3) * 100,\n medium: 50,\n large: (2 / 3) * 100,\n 'x-large': 75,\n full: 100,\n} as const\n\nexport function ModularDashboardClient({\n clientLayout: initialLayout,\n widgets,\n}: {\n clientLayout: WidgetInstanceClient[]\n widgets: ClientWidget[]\n}) {\n const { i18n, t } = useTranslation()\n const {\n addWidget,\n cancel,\n cancelModal,\n currentLayout,\n deleteWidget,\n isEditing,\n moveWidget,\n resetLayout,\n resizeWidget,\n saveLayout,\n setIsEditing,\n updateWidgetData,\n } = useDashboardLayout(initialLayout)\n\n const [activeDragId, setActiveDragId] = useState<null | string>(null)\n const [activeControlsWidgetID, setActiveControlsWidgetID] = useState<null | string>(null)\n const sensors = useDashboardSensors()\n const announcements = useMemo<Announcements>(() => {\n const describeWidget = ({ id, index }: { id: UniqueIdentifier; index?: number }) => {\n const widgetID = String(id).replace(/-(?:before|after)$/, '')\n const slug = widgetID.slice(0, widgetID.lastIndexOf('-'))\n const label = getTranslation(\n widgets.find((widget) => widget.slug === slug)?.label ?? toWords(slug),\n i18n,\n )\n const position = index ?? currentLayout.findIndex((widget) => widget.item.id === widgetID)\n\n return `${label}, ${t('general:order')}: ${position + 1}`\n }\n const announceCancel: Announcements['onDragCancel'] = ({ active }) =>\n `${t('general:cancel')}: ${describeWidget({ id: active.id })}`\n const announceMove: NonNullable<Announcements['onDragOver']> = ({ active, over }) => {\n if (!over) {\n return undefined\n }\n const { moveToIndex } = getWidgetMoveIndexes({\n activeID: active.id,\n layout: currentLayout,\n overID: over.id,\n })\n\n return t('hierarchy:itemsMovedTo', {\n title: describeWidget({ id: active.id }),\n destination: describeWidget({ id: over.id, index: moveToIndex }),\n })\n }\n\n return {\n onDragCancel: announceCancel,\n onDragEnd: (event) => {\n if (event.over) {\n const { moveFromIndex, moveToIndex } = getWidgetMoveIndexes({\n activeID: event.active.id,\n layout: currentLayout,\n overID: event.over.id,\n })\n\n if (moveFromIndex !== moveToIndex) {\n return announceMove(event)\n }\n }\n\n return announceCancel(event)\n },\n onDragOver: (event) => {\n const message = announceMove(event)\n\n return message ? `${t('general:move')}: ${message}` : undefined\n },\n onDragStart: ({ active }) =>\n `${t('general:dragToReorder')}: ${describeWidget({ id: active.id })}`,\n }\n }, [currentLayout, i18n, t, widgets])\n\n useEffect(() => {\n if (!isEditing) {\n setActiveControlsWidgetID(null)\n }\n }, [isEditing])\n\n return (\n <div>\n <DndContext\n accessibility={{ announcements }}\n autoScroll={{\n enabled: true,\n threshold: {\n x: 0, // No horizontal scroll\n y: 0.2, // Allow vertical scroll at 20% from edge\n },\n }}\n collisionDetection={closestInXAxis}\n // https://github.com/clauderic/dnd-kit/issues/926#issuecomment-1640115665\n id=\"dashboard-dnd-context\"\n onDragCancel={() => {\n setActiveDragId(null)\n }}\n onDragEnd={(event) => {\n setActiveDragId(null)\n\n if (!event.over) {\n return\n }\n const indexes = getWidgetMoveIndexes({\n activeID: event.active.id,\n layout: currentLayout,\n overID: event.over.id,\n })\n\n if (indexes.moveFromIndex !== indexes.moveToIndex) {\n moveWidget(indexes)\n }\n }}\n onDragStart={(event) => {\n setActiveDragId(event.active.id as string)\n }}\n sensors={sensors}\n >\n <div\n className={`modular-dashboard ${isEditing ? 'editing' : ''}`}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n // Don't add gap here! We need to use padding on the widgets instead\n // to make sure all rows have the same width always.\n }}\n >\n {currentLayout?.length === 0 && (\n <div className=\"modular-dashboard__empty\">\n <p>{t('dashboard:noItems')}</p>\n </div>\n )}\n {currentLayout?.map((widget) => {\n const slug = widget.item.id.slice(0, widget.item.id.lastIndexOf('-'))\n const label = getTranslation(\n widgets.find((widgetConfig) => widgetConfig.slug === slug)?.label ?? toWords(slug),\n i18n,\n )\n\n return (\n <DraggableItem\n disabled={!isEditing}\n id={widget.item.id}\n key={widget.item.id}\n label={label}\n style={{\n width: `${WIDTH_TO_PERCENTAGE[widget.item.width]}%`,\n }}\n width={widget.item.width}\n >\n {({ dragHandle }) => (\n <div\n className={[\n 'widget-wrapper',\n isEditing ? 'widget-wrapper--editing' : '',\n activeControlsWidgetID === widget.item.id\n ? 'widget-wrapper--controls-active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <WidgetContent id={`${widget.item.id}-content`} isEditing={isEditing}>\n {widget.component}\n </WidgetContent>\n {dragHandle}\n {isEditing && (\n <div className=\"widget-wrapper__controls\">\n <WidgetEditControl\n onSave={(data) => {\n updateWidgetData(widget.item.id, data)\n }}\n widgetData={widget.item.data}\n widgetID={widget.item.id}\n widgetLabel={label}\n />\n <WidgetWidthDropdown\n currentWidth={widget.item.width}\n maxWidth={widget.item.maxWidth}\n minWidth={widget.item.minWidth}\n onOpenChange={(isOpen) => {\n setActiveControlsWidgetID(isOpen ? widget.item.id : null)\n }}\n onResize={(width) => resizeWidget(widget.item.id, width)}\n widgetLabel={label}\n />\n <Button\n aria-label={t('general:deleteLabel', { label })}\n buttonStyle=\"destructive\"\n className=\"widget-wrapper__delete-btn\"\n extraButtonProps={{ tabIndex: 0 }}\n icon=\"x\"\n margin={false}\n onClick={() => deleteWidget(widget.item.id)}\n round\n />\n </div>\n )}\n </div>\n )}\n </DraggableItem>\n )\n })}\n <DragOverlay\n className=\"drag-overlay\"\n dropAnimation={{\n duration: 100,\n }}\n // Uses custom modifier that only applies for pointer, not keyboard navigation.\n modifiers={[snapCenterToCursorOnlyForPointer]}\n >\n {activeDragId\n ? (() => {\n const draggedWidget = currentLayout?.find(\n (widget) => widget.item.id === activeDragId,\n )\n return draggedWidget ? (\n <div\n aria-hidden=\"true\"\n inert\n style={{\n transform: 'scale(0.25)',\n }}\n >\n <div\n className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}\n >\n <div className=\"widget-content\">{draggedWidget.component}</div>\n </div>\n </div>\n ) : null\n })()\n : null}\n </DragOverlay>\n </div>\n </DndContext>\n <DashboardStepNav\n addWidget={addWidget}\n cancel={cancel}\n isEditing={isEditing}\n resetLayout={resetLayout}\n saveLayout={saveLayout}\n setIsEditing={setIsEditing}\n widgets={widgets}\n />\n {cancelModal}\n </div>\n )\n}\n\nfunction WidgetWidthDropdown({\n currentWidth,\n maxWidth,\n minWidth,\n onOpenChange,\n onResize,\n widgetLabel,\n}: {\n currentWidth: WidgetWidth\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n onOpenChange: (isOpen: boolean) => void\n onResize: (width: WidgetWidth) => void\n widgetLabel: string\n}) {\n const { t } = useTranslation()\n\n // Filter options based on minWidth and maxWidth\n const validOptions = useMemo(() => {\n const minPercentage = WIDTH_TO_PERCENTAGE[minWidth]\n const maxPercentage = WIDTH_TO_PERCENTAGE[maxWidth]\n\n return Object.entries(WIDTH_TO_PERCENTAGE)\n .map(([key, value]) => ({\n width: key as WidgetWidth,\n percentage: value,\n }))\n .filter((option) => option.percentage >= minPercentage && option.percentage <= maxPercentage)\n }, [minWidth, maxWidth])\n\n const isDisabled = validOptions.length <= 1\n\n if (isDisabled) {\n return null\n }\n\n return (\n <Popup\n onToggleClose={() => onOpenChange(false)}\n onToggleOpen={onOpenChange}\n popupType=\"menu\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {validOptions.map((option) => {\n const isSelected = option.width === currentWidth\n return (\n <PopupList.Button\n active={isSelected}\n key={option.width}\n onClick={() => {\n onResize(option.width)\n close()\n }}\n >\n <span className=\"widget-wrapper__size-btn-label\">{option.width}</span>\n <span className=\"widget-wrapper__size-btn-percentage\">\n {option.percentage.toFixed(0)}%\n </span>\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n renderButton={({ active: _active, onClick, onKeyDown, ...ariaProps }) => (\n <Button\n aria-label={t('dashboard:resizeWidget', { label: widgetLabel, size: currentWidth })}\n buttonStyle=\"secondary\"\n className=\"widget-wrapper__size-btn\"\n extraButtonProps={{\n onKeyDown,\n ...ariaProps,\n tabIndex: 0,\n }}\n icon={<ChevronIcon className=\"widget-wrapper__size-btn-icon\" size={16} />}\n margin={false}\n onClick={onClick}\n selected={_active}\n >\n {currentWidth}\n </Button>\n )}\n size=\"small\"\n verticalAlign=\"bottom\"\n />\n )\n}\n\nfunction DraggableItem(props: {\n children: (args: { dragHandle: React.ReactNode }) => React.ReactNode\n disabled?: boolean\n id: string\n label: string\n style?: React.CSSProperties\n width: WidgetWidth\n}) {\n const { t } = useTranslation()\n const { attributes, isDragging, listeners, setActivatorNodeRef, setNodeRef } = useDraggable({\n id: props.id,\n disabled: props.disabled,\n })\n\n const mergedStyles: React.CSSProperties = {\n ...props.style,\n opacity: isDragging ? 0.3 : 1,\n position: 'relative',\n }\n\n return (\n <div className=\"widget\" data-slug={props.id} data-width={props.width} style={mergedStyles}>\n <DroppableItem id={props.id} position=\"before\" />\n <div\n aria-label={props.label}\n aria-labelledby={props.disabled ? undefined : `${props.id}-content`}\n className=\"draggable\"\n id={props.id}\n ref={setNodeRef}\n role=\"group\"\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n }}\n tabIndex={props.disabled ? undefined : 0}\n >\n {props.children({\n dragHandle: !props.disabled && (\n <button\n {...attributes}\n {...listeners}\n aria-describedby={[attributes['aria-describedby'], `${props.id}-content`]\n .filter(Boolean)\n .join(' ')}\n aria-label={t('general:dragToReorder')}\n className=\"widget-wrapper__edit-overlay widget-wrapper__drag-btn\"\n ref={setActivatorNodeRef}\n type=\"button\"\n />\n ),\n })}\n </div>\n <DroppableItem id={props.id} position=\"after\" />\n </div>\n )\n}\n\nfunction DroppableItem({ id, position }: { id: string; position: 'after' | 'before' }) {\n const { setNodeRef, isOver } = useDroppable({ id: `${id}-${position}`, data: { position } })\n\n return (\n <div\n className=\"droppable-widget\"\n data-testid={`${id}-${position}`}\n ref={setNodeRef}\n style={{\n position: 'absolute',\n left: position === 'before' ? -2 : 'auto',\n right: position === 'after' ? -2 : 'auto',\n top: 0,\n bottom: 0,\n borderRadius: '1000px',\n width: '4px',\n backgroundColor: isOver ? 'var(--color-bg-brand-secondary)' : 'transparent',\n marginBottom: '10px',\n marginTop: '10px',\n pointerEvents: 'none',\n zIndex: 1000,\n }}\n />\n )\n}\n\nfunction getWidgetMoveIndexes({\n activeID,\n layout,\n overID,\n}: {\n activeID: UniqueIdentifier\n layout: WidgetInstanceClient[]\n overID: UniqueIdentifier\n}) {\n const widgetID = String(overID).replace(/-(?:before|after)$/, '')\n const moveFromIndex = layout.findIndex((widget) => widget.item.id === activeID)\n let moveToIndex = layout.findIndex((widget) => widget.item.id === widgetID)\n\n if (widgetID !== activeID) {\n if (moveFromIndex < moveToIndex) {\n moveToIndex--\n }\n if (String(overID).endsWith('-after')) {\n moveToIndex++\n }\n }\n\n return { moveFromIndex, moveToIndex }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"RenderWidget.js","names":["c","_c","React","useCallback","useEffect","useRef","ShimmerEffect","useServerFunctions","RenderWidget","t0","$","widgetData","widgetId","Component","setComponent","useState","serverFunction","requestIDRef","t1","render","requestID","current","widgetSlug","slice","lastIndexOf","result","name","args","component","t2","createElement","style","background","border","borderRadius","color","padding","textAlign","renderWidget","t3","t4","Symbol","for","_jsx","height","_Fragment","children"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport type {\n RenderWidgetServerFnArgs,\n RenderWidgetServerFnReturnType,\n} from './renderWidgetServerFn.js'\n\nimport { ShimmerEffect } from '../../../../../elements/ShimmerEffect/index.js'\nimport { useServerFunctions } from '../../../../../providers/ServerFunctions/index.js'\n\n/**\n * Utility to render a widget on-demand on the client.\n */\nexport const RenderWidget: React.FC<{\n /**\n * Instance-specific data for this widget\n */\n widgetData?: Record<string, unknown>\n /**\n * Unique ID for this widget instance (format: \"slug-timestamp\")\n */\n widgetId: string\n}> = ({ widgetData, widgetId }) => {\n const [Component, setComponent] = React.useState<null | React.ReactNode>(null)\n const { serverFunction } = useServerFunctions()\n const requestIDRef = useRef(0)\n\n const renderWidget = useCallback(() => {\n async function render() {\n const requestID = ++requestIDRef.current\n setComponent(null)\n\n try {\n const widgetSlug = widgetId.slice(0, widgetId.lastIndexOf('-'))\n\n const result = (await serverFunction({\n name: 'render-widget',\n args: {\n widgetData,\n widgetSlug,\n },\n })) as RenderWidgetServerFnReturnType\n\n if (requestID !== requestIDRef.current) {\n return\n }\n\n setComponent(result.component)\n } catch (_error) {\n if (requestID !== requestIDRef.current) {\n return\n }\n\n // Log error but don't expose details to console in production\n\n // Fallback error component\n setComponent(\n React.createElement(\n 'div',\n {\n style: {\n background: 'var(--color-bg-danger-tertiary)',\n border: 'var(--stroke-width-small) solid var(--color-border-danger)',\n borderRadius: 'var(--radius-medium)',\n color: 'var(--color-text-danger)',\n padding: 'var(--spacer-3)',\n textAlign: 'center',\n },\n },\n 'Failed to load widget. Please try again later.',\n ),\n )\n }\n }\n void render()\n }, [serverFunction, widgetData, widgetId])\n\n useEffect(() => {\n void renderWidget()\n }, [renderWidget])\n\n if (!Component) {\n return <ShimmerEffect height=\"100%\" />\n }\n\n return <>{Component}</>\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ;AAOtD,SAASC,aAAa,QAAQ;AAC9B,SAASC,kBAAkB,QAAQ;AAEnC;;;AAGA,OAAO,MAAMC,YAAA,GASRC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU,UAAA;IAAAC;EAAA,IAAAH,EAAwB;EAC5B,OAAAI,SAAA,EAAAC,YAAA,IAAkCZ,KAAA,CAAAa,QAAA,KAAuC;EACzE;IAAAC;EAAA,IAA2BT,kBAAA;EAC3B,MAAAU,YAAA,GAAqBZ,MAAA,EAAO;EAAA,IAAAa,EAAA;EAAA,IAAAR,CAAA,QAAAM,cAAA,IAAAN,CAAA,QAAAC,UAAA,IAAAD,CAAA,QAAAE,QAAA;IAEKM,EAAA,GAAAA,CAAA;MAC/B,MAAAC,MAAA,kBAAAA,OAAA;QACE,MAAAC,SAAA,GAAoBH,YAAA,CAAAI,OAAA,GAAAJ,YAAA,CAAAI,OAAA,IAAoB;QACxCP,YAAA,KAAa;QAAA;QAAA;UAGX,MAAAQ,UAAA,GAAmBV,QAAA,CAAAW,KAAA,IAAkBX,QAAA,CAAAY,WAAA,CAAqB;UAE1D,MAAAC,MAAA,SAAsBT,cAAA;YAAAU,IAAA,EACd;YAAAC,IAAA;cAAAhB,UAAA;cAAAW;YAAA;UAAA,CAKR;UAAA,IAEIF,SAAA,KAAcH,YAAA,CAAAI,OAAoB;YAAA;UAAA;UAItCP,YAAA,CAAaW,MAAA,CAAAG,SAAgB;QAAA,SAAAC,EAAA;UAAA,IAEzBT,SAAA,KAAcH,YAAA,CAAAI,OAAoB;YAAA;UAAA;UAOtCP,YAAA,CACEZ,KAAA,CAAA4B,aAAA,CACE;YAAAC,KAAA;cAAAC,UAAA,EAGgB;cAAAC,MAAA,EACJ;cAAAC,YAAA,EACM;cAAAC,KAAA,EACP;cAAAC,OAAA,EACE;cAAAC,SAAA,EACE;YAAA;UAAA,GAGf;QAAA;MAAA;MAKHlB,MAAA;IAAA;IACPT,CAAA,MAAAM,cAAA;IAAAN,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAE,QAAA;IAAAF,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAhDA,MAAA4B,YAAA,GAAqBpB,EAgDoB;EAAA,IAAAW,EAAA;EAAA,IAAAU,EAAA;EAAA,IAAA7B,CAAA,QAAA4B,YAAA;IAE/BT,EAAA,GAAAA,CAAA;MACHS,YAAA;IAAA;IACJC,EAAA,IAACD,YAAA;IAAa5B,CAAA,MAAA4B,YAAA;IAAA5B,CAAA,MAAAmB,EAAA;IAAAnB,CAAA,MAAA6B,EAAA;EAAA;IAAAV,EAAA,GAAAnB,CAAA;IAAA6B,EAAA,GAAA7B,CAAA;EAAA;EAFjBN,SAAA,CAAUyB,EAEV,EAAGU,EAAc;EAAA,KAEZ1B,SAAA;IAAA,IAAA2B,EAAA;IAAA,IAAA9B,CAAA,QAAA+B,MAAA,CAAAC,GAAA;MACIF,EAAA,GAAAG,IAAA,CAAArC,aAAA;QAAAsC,MAAA,EAAsB;MAAA,C;;;;;WAAtBJ,E;;;;IAGFA,EAAA,GAAAG,IAAA,CAAAE,SAAA;MAAAC,QAAA,EAAGjC;IAAA,C;;;;;;SAAH2B,E;CACT","ignoreList":[]}
1
+ {"version":3,"file":"RenderWidget.js","names":["c","_c","React","useCallback","useEffect","useRef","ShimmerEffect","useServerFunctions","RenderWidget","t0","$","widgetData","widgetId","Component","setComponent","useState","serverFunction","requestIDRef","t1","render","requestID","current","widgetSlug","slice","lastIndexOf","result","name","args","component","t2","createElement","style","background","border","borderRadius","color","padding","textAlign","renderWidget","t3","t4","Symbol","for","_jsx","height","_Fragment","children"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport type {\n RenderWidgetServerFnArgs,\n RenderWidgetServerFnReturnType,\n} from './renderWidgetServerFn.js'\n\nimport { ShimmerEffect } from '../../../../../elements/ShimmerEffect/index.js'\nimport { useServerFunctions } from '../../../../../providers/ServerFunctions/index.js'\n\n/**\n * Utility to render a widget on-demand on the client.\n */\nexport const RenderWidget: React.FC<{\n /**\n * Instance-specific data for this widget\n */\n widgetData?: Record<string, unknown>\n /**\n * Unique ID for this widget instance (format: \"slug-timestamp\")\n */\n widgetId: string\n}> = ({ widgetData, widgetId }) => {\n const [Component, setComponent] = React.useState<null | React.ReactNode>(null)\n const { serverFunction } = useServerFunctions()\n const requestIDRef = useRef(0)\n\n const renderWidget = useCallback(() => {\n async function render() {\n const requestID = ++requestIDRef.current\n setComponent(null)\n\n try {\n const widgetSlug = widgetId.slice(0, widgetId.lastIndexOf('-'))\n\n const result = (await serverFunction({\n name: 'render-widget',\n args: {\n widgetData,\n widgetSlug,\n },\n })) as RenderWidgetServerFnReturnType\n\n if (requestID !== requestIDRef.current) {\n return\n }\n\n setComponent(result.component)\n } catch (_error) {\n if (requestID !== requestIDRef.current) {\n return\n }\n\n // Log error but don't expose details to console in production\n\n // Fallback error component\n setComponent(\n React.createElement(\n 'div',\n {\n style: {\n background: 'var(--color-bg-danger-tertiary)',\n border: 'var(--stroke-width-small) solid var(--color-border-danger)',\n borderRadius: 'var(--radius-medium)',\n color: 'var(--color-text-danger)',\n padding: 'var(--spacer-3)',\n textAlign: 'center',\n },\n },\n 'Failed to load widget. Please try again later.',\n ),\n )\n }\n }\n void render()\n }, [serverFunction, widgetData, widgetId])\n\n useEffect(() => {\n void renderWidget()\n }, [renderWidget])\n\n if (!Component) {\n return <ShimmerEffect height=\"100%\" />\n }\n\n return <>{Component}</>\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ;AAOtD,SAASC,aAAa,QAAQ;AAC9B,SAASC,kBAAkB,QAAQ;AAEnC;;;AAGA,OAAO,MAAMC,YAAA,GASRC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU,UAAA;IAAAC;EAAA,IAAAH,EAAwB;EAC5B,OAAAI,SAAA,EAAAC,YAAA,IAAkCZ,KAAA,CAAAa,QAAc,CAAyB;EACzE;IAAAC;EAAA,IAA2BT,kBAAA;EAC3B,MAAAU,YAAA,GAAqBZ,MAAA,CAAO;EAAA,IAAAa,EAAA;EAAA,IAAAR,CAAA,QAAAM,cAAA,IAAAN,CAAA,QAAAC,UAAA,IAAAD,CAAA,QAAAE,QAAA;IAEKM,EAAA,GAAAA,CAAA;MAC/B,MAAAC,MAAA,kBAAAA,OAAA;QACE,MAAAC,SAAA,GAAoBH,YAAA,CAAAI,OAAA,GAAAJ,YAAA,CAAAI,OAAoB;QACxCP,YAAA,CAAa;QAAA;QAEb;UACE,MAAAQ,UAAA,GAAmBV,QAAA,CAAAW,KAAc,CAAC,GAAGX,QAAA,CAAAY,WAAoB,CAAC;UAE1D,MAAAC,MAAA,GAAgB,MAAMT,cAAA,CAAe;YAAAU,IAAA,EAC7B;YAAAC,IAAA,EACA;cAAAhB,UAAA;cAAAW;YAGN;UACF;UAEA,IAAIF,SAAA,KAAcH,YAAA,CAAAI,OAAoB;YAAA;UAAA;UAItCP,YAAA,CAAaW,MAAA,CAAAG,SAAgB;QAAA,SAAAC,EAAA;UAE7B,IAAIT,SAAA,KAAcH,YAAA,CAAAI,OAAoB;YAAA;UAAA;UAOtCP,YAAA,CACEZ,KAAA,CAAA4B,aAAmB,CACjB,OACA;YAAAC,KAAA,EACS;cAAAC,UAAA,EACO;cAAAC,MAAA,EACJ;cAAAC,YAAA,EACM;cAAAC,KAAA,EACP;cAAAC,OAAA,EACE;cAAAC,SAAA,EACE;YACb;UACF,GACA;QAAA;MAGN,CACF;MACKlB,MAAA;IAAA,CACP;IAAAT,CAAA,MAAAM,cAAA;IAAAN,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAE,QAAA;IAAAF,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAhDA,MAAA4B,YAAA,GAAqBpB,EAgDoB;EAAA,IAAAW,EAAA;EAAA,IAAAU,EAAA;EAAA,IAAA7B,CAAA,QAAA4B,YAAA;IAE/BT,EAAA,GAAAA,CAAA;MACHS,YAAA;IAAA,CACP;IAAGC,EAAA,IAACD,YAAA,CAAa;IAAA5B,CAAA,MAAA4B,YAAA;IAAA5B,CAAA,MAAAmB,EAAA;IAAAnB,CAAA,MAAA6B,EAAA;EAAA;IAAAV,EAAA,GAAAnB,CAAA;IAAA6B,EAAA,GAAA7B,CAAA;EAAA;EAFjBN,SAAA,CAAUyB,EAEV,EAAGU,EAAc;EAEjB,IAAI,CAAC1B,SAAA;IAAA,IAAA2B,EAAA;IAAA,IAAA9B,CAAA,QAAA+B,MAAA,CAAAC,GAAA;MACIF,EAAA,GAAAG,IAAA,CAACrC,aAAA;QAAAsC,MAAA,EAAqB;;;;;;WAAtBJ,E;;EACT,IAAAA,EAAA;EAAA,IAAA9B,CAAA,QAAAG,SAAA;IAEO2B,EAAA,GAAAG,IAAA,CAAAE,SAAA;MAAAC,QAAA,EAAGjC;;;;;;;SAAH2B,E;CACT","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboardLayout.d.ts","sourceRoot":"","sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/useDashboardLayout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1C,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EAAE,oBAAoB,EAAc,MAAM,mBAAmB,CAAA;AAYzE,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,EAAE;4BAoGvD,MAAM;;;;6BAmDR,MAAM;;iDAhEgB;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;;6BA0EpE,MAAM,YAAY,WAAW;;+BA3J3B,OAAO;iCAiLT,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EA+CnD"}
1
+ {"version":3,"file":"useDashboardLayout.d.ts","sourceRoot":"","sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/useDashboardLayout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1C,OAAO,KAA2C,MAAM,OAAO,CAAA;AAI/D,OAAO,KAAK,EAAE,oBAAoB,EAAc,MAAM,mBAAmB,CAAA;AAYzE,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,EAAE;4BAoGvD,MAAM;;;;6BAmDR,MAAM;;iDAhEgB;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;;6BA0EpE,MAAM,YAAY,WAAW;;+BA3J3B,OAAO;iCAiLT,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EA+CnD"}
@@ -2,6 +2,7 @@ import { arrayMove } from '@dnd-kit/sortable';
2
2
  import { PREFERENCE_KEYS } from 'payload/shared';
3
3
  import React, { useCallback, useEffect, useState } from 'react';
4
4
  import { toast } from 'sonner';
5
+ import { v4 as uuid } from 'uuid';
5
6
  import { ConfirmationModal } from '../../../../elements/ConfirmationModal/index.js';
6
7
  import { useModal } from '../../../../elements/Modal/index.js';
7
8
  import { useConfig } from '../../../../providers/Config/index.js';
@@ -101,7 +102,7 @@ export function useDashboardLayout(initialLayout) {
101
102
  if (!isEditing) {
102
103
  return;
103
104
  }
104
- const widgetId = `${widgetSlug}-${Date.now()}`;
105
+ const widgetId = `${widgetSlug}-${uuid().replaceAll('-', '')}`;
105
106
  const widget = widgets.find(widget => widget.slug === widgetSlug);
106
107
  // Create a new widget instance using RenderWidget
107
108
  const newWidgetInstance = {
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboardLayout.js","names":["arrayMove","PREFERENCE_KEYS","React","useCallback","useEffect","useState","toast","ConfirmationModal","useModal","useConfig","useEmbed","usePreferences","useServerFunctions","useTranslation","RenderWidget","useDashboardLayout","initialLayout","setLayoutPreference","useSetLayoutPreference","isEmbedded","isEditingState","setIsEditingState","isEditing","setIsEditing","shouldEdit","widgets","config","admin","dashboard","currentLayout","setCurrentLayout","openModal","cancelModalSlug","serverFunction","t","saveLayout","layoutData","map","item","error","resetLayout","result","name","args","layout","performCancel","cancel","hasChanges","length","some","widget","index","initialWidget","id","width","JSON","stringify","data","moveWidget","moveFromIndex","moveToIndex","prev","addWidget","widgetSlug","widgetId","Date","now","find","slug","newWidgetInstance","component","createElement","widgetData","maxWidth","minWidth","setTimeout","element","document","getElementById","focus","preventScroll","scrollIntoView","behavior","block","closest","classList","add","remove","deleteWidget","filter","resizeWidget","newWidth","updateWidgetData","cancelModal","body","confirmLabel","heading","modalSlug","onConfirm","setPreference","DASHBOARD_LAYOUT","layouts"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/useDashboardLayout.ts"],"sourcesContent":["import type { WidgetWidth } from 'payload'\n\nimport { arrayMove } from '@dnd-kit/sortable'\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { WidgetInstanceClient, WidgetItem } from './index.client.js'\nimport type { GetDefaultLayoutServerFnReturnType } from './renderWidget/getDefaultLayoutServerFn.js'\n\nimport { ConfirmationModal } from '../../../../elements/ConfirmationModal/index.js'\nimport { useModal } from '../../../../elements/Modal/index.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useEmbed } from '../../../../providers/Embed/index.js'\nimport { usePreferences } from '../../../../providers/Preferences/index.js'\nimport { useServerFunctions } from '../../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { RenderWidget } from './renderWidget/RenderWidget.js'\n\nexport function useDashboardLayout(initialLayout: WidgetInstanceClient[]) {\n const setLayoutPreference = useSetLayoutPreference()\n const { isEmbedded } = useEmbed()\n const [isEditingState, setIsEditingState] = useState(false)\n const isEditing = !isEmbedded && isEditingState\n const setIsEditing = useCallback(\n (shouldEdit: boolean) => setIsEditingState(shouldEdit && !isEmbedded),\n [isEmbedded],\n )\n const { widgets = [] } = useConfig().config.admin.dashboard ?? {}\n const [currentLayout, setCurrentLayout] = useState<WidgetInstanceClient[]>(initialLayout)\n const { openModal } = useModal()\n const cancelModalSlug = 'cancel-dashboard-changes'\n const { serverFunction } = useServerFunctions()\n const { t } = useTranslation()\n\n useEffect(() => {\n if (isEmbedded) {\n setIsEditingState(false)\n setCurrentLayout(initialLayout)\n }\n }, [isEmbedded, initialLayout])\n\n // Sync state when initialLayout prop changes (e.g., when query params change and server component re-renders)\n useEffect(() => {\n if (!isEditing) {\n setCurrentLayout(initialLayout)\n }\n // do not sync while editing. Depending on `isEditing` in this effect causes an\n // unintended rollback when toggling from editing -> view mode after save.\n }, [initialLayout])\n\n const saveLayout = useCallback(async () => {\n try {\n const layoutData: WidgetItem[] = currentLayout.map((item) => item.item)\n setIsEditing(false)\n await setLayoutPreference(layoutData)\n } catch {\n setIsEditing(true)\n toast.error(t('error:failedToSaveLayout'))\n }\n }, [setLayoutPreference, currentLayout, setIsEditing])\n\n const resetLayout = useCallback(async () => {\n try {\n await setLayoutPreference(null)\n\n const result = (await serverFunction({\n name: 'get-default-layout',\n args: {},\n })) as GetDefaultLayoutServerFnReturnType\n\n setCurrentLayout(result.layout)\n setIsEditing(false)\n } catch {\n toast.error(t('error:failedToResetLayout'))\n }\n }, [setLayoutPreference, serverFunction, setIsEditing])\n\n const performCancel = useCallback(() => {\n setCurrentLayout(initialLayout)\n setIsEditing(false)\n }, [initialLayout, setIsEditing])\n\n const cancel = useCallback(() => {\n // Check if layout has changed\n const hasChanges =\n currentLayout.length !== initialLayout.length ||\n currentLayout.some((widget, index) => {\n const initialWidget = initialLayout[index]\n return (\n !initialWidget ||\n widget.item.id !== initialWidget.item.id ||\n widget.item.width !== initialWidget.item.width ||\n JSON.stringify(widget.item.data || {}) !== JSON.stringify(initialWidget.item.data || {})\n )\n })\n\n // If there are changes, show confirmation modal\n if (hasChanges) {\n openModal(cancelModalSlug)\n } else {\n performCancel()\n }\n }, [currentLayout, initialLayout, openModal, cancelModalSlug, performCancel])\n\n const moveWidget = useCallback(\n ({ moveFromIndex, moveToIndex }: { moveFromIndex: number; moveToIndex: number }) => {\n if (moveFromIndex === moveToIndex || moveFromIndex < 0 || moveToIndex < 0) {\n return\n }\n\n setCurrentLayout((prev) => {\n return arrayMove(prev, moveFromIndex, moveToIndex)\n })\n },\n [],\n )\n\n const addWidget = useCallback(\n (widgetSlug: string) => {\n if (!isEditing) {\n return\n }\n\n const widgetId = `${widgetSlug}-${Date.now()}`\n const widget = widgets.find((widget) => widget.slug === widgetSlug)\n\n // Create a new widget instance using RenderWidget\n const newWidgetInstance: WidgetInstanceClient = {\n component: React.createElement(RenderWidget, {\n widgetData: {},\n widgetId,\n }),\n item: {\n id: widgetId,\n data: {},\n maxWidth: widget?.maxWidth ?? 'full',\n minWidth: widget?.minWidth ?? 'x-small',\n width: widget?.minWidth ?? 'x-small',\n },\n }\n\n setCurrentLayout((prev) => [...prev, newWidgetInstance])\n\n // Scroll to the newly added widget after it's rendered and highlight it\n setTimeout(() => {\n const element = document.getElementById(widgetId)\n if (element) {\n element.focus({ preventScroll: true })\n element.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n })\n\n // Add highlight animation to the widget element\n const widget = element.closest('.widget')\n if (widget) {\n widget.classList.add('widget--highlight')\n // Remove the class after animation completes (1.5s fade out)\n setTimeout(() => {\n widget.classList.remove('widget--highlight')\n }, 1500)\n }\n }\n }, 100)\n },\n [isEditing, widgets],\n )\n\n const deleteWidget = useCallback(\n (widgetId: string) => {\n if (!isEditing) {\n return\n }\n setCurrentLayout((prev) => prev.filter((item) => item.item.id !== widgetId))\n },\n [isEditing],\n )\n\n const resizeWidget = useCallback(\n (widgetId: string, newWidth: WidgetWidth) => {\n if (!isEditing) {\n return\n }\n setCurrentLayout((prev) =>\n prev.map((item) =>\n item.item.id === widgetId\n ? {\n ...item,\n item: {\n ...item.item,\n width: newWidth,\n } satisfies WidgetItem,\n }\n : item,\n ),\n )\n },\n [isEditing],\n )\n\n const updateWidgetData = useCallback(\n (widgetId: string, data: Record<string, unknown>) => {\n if (!isEditing) {\n return\n }\n\n setCurrentLayout((prev) =>\n prev.map((item) =>\n item.item.id === widgetId\n ? {\n component: React.createElement(RenderWidget, {\n widgetData: data,\n widgetId,\n }),\n item: {\n ...item.item,\n data,\n } satisfies WidgetItem,\n }\n : item,\n ),\n )\n },\n [isEditing],\n )\n\n const cancelModal = React.createElement(ConfirmationModal, {\n body: t('dashboard:discardMessage'),\n confirmLabel: t('dashboard:discardConfirmLabel'),\n heading: t('dashboard:discardTitle'),\n modalSlug: cancelModalSlug,\n onConfirm: performCancel,\n })\n\n return {\n addWidget,\n cancel,\n cancelModal,\n currentLayout,\n deleteWidget,\n isEditing,\n moveWidget,\n resetLayout,\n resizeWidget,\n saveLayout,\n setIsEditing,\n updateWidgetData,\n }\n}\n\nfunction useSetLayoutPreference() {\n const { setPreference } = usePreferences()\n return useCallback(\n async (layout: null | WidgetItem[]) => {\n await setPreference(PREFERENCE_KEYS.DASHBOARD_LAYOUT, { layouts: layout }, false)\n },\n [setPreference],\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useDashboardLayout.js","names":["arrayMove","PREFERENCE_KEYS","React","useCallback","useEffect","useState","toast","v4","uuid","ConfirmationModal","useModal","useConfig","useEmbed","usePreferences","useServerFunctions","useTranslation","RenderWidget","useDashboardLayout","initialLayout","setLayoutPreference","useSetLayoutPreference","isEmbedded","isEditingState","setIsEditingState","isEditing","setIsEditing","shouldEdit","widgets","config","admin","dashboard","currentLayout","setCurrentLayout","openModal","cancelModalSlug","serverFunction","t","saveLayout","layoutData","map","item","error","resetLayout","result","name","args","layout","performCancel","cancel","hasChanges","length","some","widget","index","initialWidget","id","width","JSON","stringify","data","moveWidget","moveFromIndex","moveToIndex","prev","addWidget","widgetSlug","widgetId","replaceAll","find","slug","newWidgetInstance","component","createElement","widgetData","maxWidth","minWidth","setTimeout","element","document","getElementById","focus","preventScroll","scrollIntoView","behavior","block","closest","classList","add","remove","deleteWidget","filter","resizeWidget","newWidth","updateWidgetData","cancelModal","body","confirmLabel","heading","modalSlug","onConfirm","setPreference","DASHBOARD_LAYOUT","layouts"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/useDashboardLayout.ts"],"sourcesContent":["import type { WidgetWidth } from 'payload'\n\nimport { arrayMove } from '@dnd-kit/sortable'\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\nimport { v4 as uuid } from 'uuid'\n\nimport type { WidgetInstanceClient, WidgetItem } from './index.client.js'\nimport type { GetDefaultLayoutServerFnReturnType } from './renderWidget/getDefaultLayoutServerFn.js'\n\nimport { ConfirmationModal } from '../../../../elements/ConfirmationModal/index.js'\nimport { useModal } from '../../../../elements/Modal/index.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useEmbed } from '../../../../providers/Embed/index.js'\nimport { usePreferences } from '../../../../providers/Preferences/index.js'\nimport { useServerFunctions } from '../../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { RenderWidget } from './renderWidget/RenderWidget.js'\n\nexport function useDashboardLayout(initialLayout: WidgetInstanceClient[]) {\n const setLayoutPreference = useSetLayoutPreference()\n const { isEmbedded } = useEmbed()\n const [isEditingState, setIsEditingState] = useState(false)\n const isEditing = !isEmbedded && isEditingState\n const setIsEditing = useCallback(\n (shouldEdit: boolean) => setIsEditingState(shouldEdit && !isEmbedded),\n [isEmbedded],\n )\n const { widgets = [] } = useConfig().config.admin.dashboard ?? {}\n const [currentLayout, setCurrentLayout] = useState<WidgetInstanceClient[]>(initialLayout)\n const { openModal } = useModal()\n const cancelModalSlug = 'cancel-dashboard-changes'\n const { serverFunction } = useServerFunctions()\n const { t } = useTranslation()\n\n useEffect(() => {\n if (isEmbedded) {\n setIsEditingState(false)\n setCurrentLayout(initialLayout)\n }\n }, [isEmbedded, initialLayout])\n\n // Sync state when initialLayout prop changes (e.g., when query params change and server component re-renders)\n useEffect(() => {\n if (!isEditing) {\n setCurrentLayout(initialLayout)\n }\n // do not sync while editing. Depending on `isEditing` in this effect causes an\n // unintended rollback when toggling from editing -> view mode after save.\n }, [initialLayout])\n\n const saveLayout = useCallback(async () => {\n try {\n const layoutData: WidgetItem[] = currentLayout.map((item) => item.item)\n setIsEditing(false)\n await setLayoutPreference(layoutData)\n } catch {\n setIsEditing(true)\n toast.error(t('error:failedToSaveLayout'))\n }\n }, [setLayoutPreference, currentLayout, setIsEditing])\n\n const resetLayout = useCallback(async () => {\n try {\n await setLayoutPreference(null)\n\n const result = (await serverFunction({\n name: 'get-default-layout',\n args: {},\n })) as GetDefaultLayoutServerFnReturnType\n\n setCurrentLayout(result.layout)\n setIsEditing(false)\n } catch {\n toast.error(t('error:failedToResetLayout'))\n }\n }, [setLayoutPreference, serverFunction, setIsEditing])\n\n const performCancel = useCallback(() => {\n setCurrentLayout(initialLayout)\n setIsEditing(false)\n }, [initialLayout, setIsEditing])\n\n const cancel = useCallback(() => {\n // Check if layout has changed\n const hasChanges =\n currentLayout.length !== initialLayout.length ||\n currentLayout.some((widget, index) => {\n const initialWidget = initialLayout[index]\n return (\n !initialWidget ||\n widget.item.id !== initialWidget.item.id ||\n widget.item.width !== initialWidget.item.width ||\n JSON.stringify(widget.item.data || {}) !== JSON.stringify(initialWidget.item.data || {})\n )\n })\n\n // If there are changes, show confirmation modal\n if (hasChanges) {\n openModal(cancelModalSlug)\n } else {\n performCancel()\n }\n }, [currentLayout, initialLayout, openModal, cancelModalSlug, performCancel])\n\n const moveWidget = useCallback(\n ({ moveFromIndex, moveToIndex }: { moveFromIndex: number; moveToIndex: number }) => {\n if (moveFromIndex === moveToIndex || moveFromIndex < 0 || moveToIndex < 0) {\n return\n }\n\n setCurrentLayout((prev) => {\n return arrayMove(prev, moveFromIndex, moveToIndex)\n })\n },\n [],\n )\n\n const addWidget = useCallback(\n (widgetSlug: string) => {\n if (!isEditing) {\n return\n }\n\n const widgetId = `${widgetSlug}-${uuid().replaceAll('-', '')}`\n const widget = widgets.find((widget) => widget.slug === widgetSlug)\n\n // Create a new widget instance using RenderWidget\n const newWidgetInstance: WidgetInstanceClient = {\n component: React.createElement(RenderWidget, {\n widgetData: {},\n widgetId,\n }),\n item: {\n id: widgetId,\n data: {},\n maxWidth: widget?.maxWidth ?? 'full',\n minWidth: widget?.minWidth ?? 'x-small',\n width: widget?.minWidth ?? 'x-small',\n },\n }\n\n setCurrentLayout((prev) => [...prev, newWidgetInstance])\n\n // Scroll to the newly added widget after it's rendered and highlight it\n setTimeout(() => {\n const element = document.getElementById(widgetId)\n if (element) {\n element.focus({ preventScroll: true })\n element.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n })\n\n // Add highlight animation to the widget element\n const widget = element.closest('.widget')\n if (widget) {\n widget.classList.add('widget--highlight')\n // Remove the class after animation completes (1.5s fade out)\n setTimeout(() => {\n widget.classList.remove('widget--highlight')\n }, 1500)\n }\n }\n }, 100)\n },\n [isEditing, widgets],\n )\n\n const deleteWidget = useCallback(\n (widgetId: string) => {\n if (!isEditing) {\n return\n }\n setCurrentLayout((prev) => prev.filter((item) => item.item.id !== widgetId))\n },\n [isEditing],\n )\n\n const resizeWidget = useCallback(\n (widgetId: string, newWidth: WidgetWidth) => {\n if (!isEditing) {\n return\n }\n setCurrentLayout((prev) =>\n prev.map((item) =>\n item.item.id === widgetId\n ? {\n ...item,\n item: {\n ...item.item,\n width: newWidth,\n } satisfies WidgetItem,\n }\n : item,\n ),\n )\n },\n [isEditing],\n )\n\n const updateWidgetData = useCallback(\n (widgetId: string, data: Record<string, unknown>) => {\n if (!isEditing) {\n return\n }\n\n setCurrentLayout((prev) =>\n prev.map((item) =>\n item.item.id === widgetId\n ? {\n component: React.createElement(RenderWidget, {\n widgetData: data,\n widgetId,\n }),\n item: {\n ...item.item,\n data,\n } satisfies WidgetItem,\n }\n : item,\n ),\n )\n },\n [isEditing],\n )\n\n const cancelModal = React.createElement(ConfirmationModal, {\n body: t('dashboard:discardMessage'),\n confirmLabel: t('dashboard:discardConfirmLabel'),\n heading: t('dashboard:discardTitle'),\n modalSlug: cancelModalSlug,\n onConfirm: performCancel,\n })\n\n return {\n addWidget,\n cancel,\n cancelModal,\n currentLayout,\n deleteWidget,\n isEditing,\n moveWidget,\n resetLayout,\n resizeWidget,\n saveLayout,\n setIsEditing,\n updateWidgetData,\n }\n}\n\nfunction useSetLayoutPreference() {\n const { setPreference } = usePreferences()\n return useCallback(\n async (layout: null | WidgetItem[]) => {\n await setPreference(PREFERENCE_KEYS.DASHBOARD_LAYOUT, { layouts: layout }, false)\n },\n [setPreference],\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"APIKeyGenerationModal.js","names":["c","_c","useModal","React","useCallback","toast","Button","ConfirmationModal","Translation","useDocumentInfo","useTranslation","APIKeyGenerationModal","t0","$","id","apiKeyLast4","highlightField","icon","setKey","willInvalidateExistingKey","t1","undefined","documentID","toggleModal","t","modalSlug","t2","success","handleGenerate","t3","t4","_jsxs","Fragment","children","_jsx","buttonStyle","className","onClick","size","body","elements","1","_temp","i18nKey","heading","onConfirm"],"sources":["../../../../src/views/Edit/Auth/APIKeyGenerationModal.tsx"],"sourcesContent":["'use client'\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport { Button } from '../../../elements/Button/index.js'\nimport { ConfirmationModal } from '../../../elements/ConfirmationModal/index.js'\nimport { Translation } from '../../../elements/Translation/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\n\ntype APIKeyGenerationModalProps = {\n apiKeyLast4?: string\n highlightField: () => void\n icon?: React.ReactNode\n id?: string\n setKey: () => boolean | Promise<boolean | void> | void\n willInvalidateExistingKey?: boolean\n}\n\nexport function APIKeyGenerationModal({\n id,\n apiKeyLast4,\n highlightField,\n icon,\n setKey,\n willInvalidateExistingKey = true,\n}: APIKeyGenerationModalProps) {\n const { id: documentID } = useDocumentInfo()\n const { toggleModal } = useModal()\n const { t } = useTranslation()\n const modalSlug = `generate-confirmation-${documentID}`\n const handleGenerate = useCallback(async () => {\n if ((await setKey()) === false) {\n return\n }\n toast.success(t('authentication:newAPIKeyGenerated'))\n highlightField()\n }, [highlightField, setKey, t])\n\n return (\n <React.Fragment>\n <Button\n aria-label={icon ? t('authentication:generateNewAPIKey') : undefined}\n buttonStyle={icon ? 'ghost' : 'secondary'}\n className={icon ? 'api-key__regenerate-button' : undefined}\n icon={icon}\n id={id}\n onClick={() => toggleModal(modalSlug)}\n size=\"medium\"\n >\n {!icon && t('authentication:generateNewAPIKey')}\n </Button>\n <ConfirmationModal\n body={\n willInvalidateExistingKey && apiKeyLast4 ? (\n <span>\n Generating a new API key will invalidate the key ending in{' '}\n <strong>{apiKeyLast4}</strong>. This will take effect immediately.\n </span>\n ) : willInvalidateExistingKey ? (\n <Translation\n elements={{ 1: ({ children }) => <strong>{children}</strong> }}\n i18nKey=\"authentication:generatingNewAPIKeyWillInvalidate\"\n t={t}\n />\n ) : (\n <span>\n Are you sure you want to generate an API key for user <strong>{documentID}</strong>?\n This will take effect immediately.\n </span>\n )\n }\n confirmLabel={t('authentication:generate')}\n heading={t('authentication:confirmGeneration')}\n modalSlug={modalSlug}\n onConfirm={handleGenerate}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"APIKeyGenerationModal.js","names":["c","_c","useModal","React","useCallback","toast","Button","ConfirmationModal","Translation","useDocumentInfo","useTranslation","APIKeyGenerationModal","t0","$","id","apiKeyLast4","highlightField","icon","setKey","willInvalidateExistingKey","t1","undefined","documentID","toggleModal","t","modalSlug","t2","success","handleGenerate","t3","t4","_jsxs","Fragment","children","_jsx","buttonStyle","className","onClick","size","body","elements","1","_temp","i18nKey","heading","onConfirm"],"sources":["../../../../src/views/Edit/Auth/APIKeyGenerationModal.tsx"],"sourcesContent":["'use client'\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport { Button } from '../../../elements/Button/index.js'\nimport { ConfirmationModal } from '../../../elements/ConfirmationModal/index.js'\nimport { Translation } from '../../../elements/Translation/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\n\ntype APIKeyGenerationModalProps = {\n apiKeyLast4?: string\n highlightField: () => void\n icon?: React.ReactNode\n id?: string\n setKey: () => boolean | Promise<boolean | void> | void\n willInvalidateExistingKey?: boolean\n}\n\nexport function APIKeyGenerationModal({\n id,\n apiKeyLast4,\n highlightField,\n icon,\n setKey,\n willInvalidateExistingKey = true,\n}: APIKeyGenerationModalProps) {\n const { id: documentID } = useDocumentInfo()\n const { toggleModal } = useModal()\n const { t } = useTranslation()\n const modalSlug = `generate-confirmation-${documentID}`\n const handleGenerate = useCallback(async () => {\n if ((await setKey()) === false) {\n return\n }\n toast.success(t('authentication:newAPIKeyGenerated'))\n highlightField()\n }, [highlightField, setKey, t])\n\n return (\n <React.Fragment>\n <Button\n aria-label={icon ? t('authentication:generateNewAPIKey') : undefined}\n buttonStyle={icon ? 'ghost' : 'secondary'}\n className={icon ? 'api-key__regenerate-button' : undefined}\n icon={icon}\n id={id}\n onClick={() => toggleModal(modalSlug)}\n size=\"medium\"\n >\n {!icon && t('authentication:generateNewAPIKey')}\n </Button>\n <ConfirmationModal\n body={\n willInvalidateExistingKey && apiKeyLast4 ? (\n <span>\n Generating a new API key will invalidate the key ending in{' '}\n <strong>{apiKeyLast4}</strong>. This will take effect immediately.\n </span>\n ) : willInvalidateExistingKey ? (\n <Translation\n elements={{ 1: ({ children }) => <strong>{children}</strong> }}\n i18nKey=\"authentication:generatingNewAPIKeyWillInvalidate\"\n t={t}\n />\n ) : (\n <span>\n Are you sure you want to generate an API key for user <strong>{documentID}</strong>?\n This will take effect immediately.\n </span>\n )\n }\n confirmLabel={t('authentication:generate')}\n heading={t('authentication:confirmGeneration')}\n modalSlug={modalSlug}\n onConfirm={handleGenerate}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/Auth/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA8D,MAAM,OAAO,CAAA;AAGlF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAWvC,OAAO,aAAa,CAAA;AAKpB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAyRhC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/Auth/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA8D,MAAM,OAAO,CAAA;AAGlF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAWvC,OAAO,aAAa,CAAA;AAKpB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAsRhC,CAAA"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
- import { formatAdminURL, getFieldPermissions } from 'payload/shared';
5
+ import { flattenTopLevelFields, formatAdminURL, getFieldPermissions } from 'payload/shared';
6
6
  import React, { Fragment, useCallback, useEffect, useMemo, useState } from 'react';
7
7
  import { toast } from 'sonner';
8
8
  import { Button } from '../../../elements/Button/index.js';
@@ -47,7 +47,8 @@ export const Auth = props => {
47
47
  isTrashed
48
48
  } = useDocumentInfo();
49
49
  const {
50
- config: t0
50
+ config: t0,
51
+ getEntityConfig
51
52
  } = useConfig();
52
53
  const {
53
54
  routes: t1
@@ -55,13 +56,15 @@ export const Auth = props => {
55
56
  const {
56
57
  api
57
58
  } = t1;
58
- let showPasswordFields = true;
59
+ const hasPasswordField = flattenTopLevelFields(getEntityConfig({
60
+ collectionSlug
61
+ }).fields).some(_temp2);
62
+ let showPasswordFields = Boolean(docPermissions[operation]);
59
63
  let showUnlock = true;
60
- const hasPasswordFieldOverride = typeof docPermissions.fields === "object" && "password" in docPermissions.fields;
61
64
  const hasLoginFieldOverride = typeof docPermissions.fields === "object" && ("username" in docPermissions.fields || "email" in docPermissions.fields);
62
- if (hasPasswordFieldOverride) {
65
+ if (hasPasswordField) {
63
66
  const {
64
- permissions: passwordPermissions
67
+ operation: passwordPermission
65
68
  } = getFieldPermissions({
66
69
  field: {
67
70
  name: "password",
@@ -71,11 +74,7 @@ export const Auth = props => {
71
74
  parentName: "",
72
75
  permissions: docPermissions?.fields
73
76
  });
74
- if (operation === "create") {
75
- showPasswordFields = passwordPermissions === true || typeof passwordPermissions === "object" && passwordPermissions.create;
76
- } else {
77
- showPasswordFields = passwordPermissions === true || typeof passwordPermissions === "object" && passwordPermissions.update;
78
- }
77
+ showPasswordFields = passwordPermission;
79
78
  }
80
79
  if (hasLoginFieldOverride) {
81
80
  const hasEmailAndUsernameFields = loginWithUsername && (loginWithUsername.requireEmail || loginWithUsername.allowEmailLogin);
@@ -332,4 +331,7 @@ export const Auth = props => {
332
331
  function _temp(reducer) {
333
332
  return reducer[1];
334
333
  }
334
+ function _temp2(field) {
335
+ return field.name === "password";
336
+ }
335
337
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","formatAdminURL","getFieldPermissions","React","Fragment","useCallback","useEffect","useMemo","useState","toast","Button","EmailAndUsernameFields","CheckboxField","ConfirmPasswordField","PasswordField","useFormFields","useFormModified","useConfig","useDocumentInfo","useTranslation","APIKey","baseClass","Auth","props","$","className","collectionSlug","disableLocalStrategy","email","loginWithUsername","operation","readOnly","requirePassword","setValidateBeforeSubmit","useAPIKey","username","verify","changingPassword","setChangingPassword","dispatchFields","_temp","modified","i18n","t","docPermissions","isEditing","isInitializing","isTrashed","config","t0","routes","t1","api","showPasswordFields","showUnlock","hasPasswordFieldOverride","fields","hasLoginFieldOverride","permissions","passwordPermissions","field","name","type","parentName","create","update","hasEmailAndUsernameFields","requireEmail","allowEmailLogin","emailPermission","usernamePermission","enableFields","disabled","apiKeyPermissions","apiKey","canManageAPIKey","Boolean","t2","bb0","unlock","undefined","hasPermissionToUnlock","t3","changingPassword_0","errorMessage","path","valid","handleChangePassword","t4","url","apiRoute","response","fetch","body","JSON","stringify","credentials","headers","language","method","status","success","error","t5","t6","showAuthBlock","showAPIKeyBlock","showVerifyBlock","t7","label","startsWith","charAt","slice","toLowerCase","formatHeaderButtonLabel","Controls","_jsxs","children","_jsx","buttonStyle","id","onClick","size","t8","filter","join","autoComplete","required","indexPath","parentPath","parentSchemaPath","schemaPath","reveal","admin","reducer"],"sources":["../../../../src/views/Edit/Auth/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedFieldPermissions } from 'payload'\n\nimport { formatAdminURL, getFieldPermissions } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { Props } from './types.js'\n\nimport { Button } from '../../../elements/Button/index.js'\nimport { EmailAndUsernameFields } from '../../../elements/EmailAndUsername/index.js'\nimport { CheckboxField } from '../../../fields/Checkbox/index.js'\nimport { ConfirmPasswordField } from '../../../fields/ConfirmPassword/index.js'\nimport { PasswordField } from '../../../fields/Password/index.js'\nimport { useFormFields, useFormModified } from '../../../forms/Form/context.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport './index.css'\nimport { APIKey } from './APIKey.js'\n\nconst baseClass = 'auth-fields'\n\nexport const Auth: React.FC<Props> = (props) => {\n const {\n className,\n collectionSlug,\n disableLocalStrategy,\n email,\n loginWithUsername,\n operation,\n readOnly,\n requirePassword,\n setValidateBeforeSubmit,\n useAPIKey,\n username,\n verify,\n } = props\n\n const [changingPassword, setChangingPassword] = useState(requirePassword)\n const dispatchFields = useFormFields((reducer) => reducer[1])\n const modified = useFormModified()\n const { i18n, t } = useTranslation()\n const { docPermissions, isEditing, isInitializing, isTrashed } = useDocumentInfo()\n\n const {\n config: {\n routes: { api },\n },\n } = useConfig()\n\n let showPasswordFields: SanitizedFieldPermissions = true\n let showUnlock = true\n const hasPasswordFieldOverride =\n typeof docPermissions.fields === 'object' && 'password' in docPermissions.fields\n const hasLoginFieldOverride =\n typeof docPermissions.fields === 'object' &&\n ('username' in docPermissions.fields || 'email' in docPermissions.fields)\n\n if (hasPasswordFieldOverride) {\n const { permissions: passwordPermissions } = getFieldPermissions({\n field: { name: 'password', type: 'text' },\n operation,\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n if (operation === 'create') {\n showPasswordFields =\n passwordPermissions === true ||\n ((typeof passwordPermissions === 'object' &&\n passwordPermissions.create) as SanitizedFieldPermissions)\n } else {\n showPasswordFields =\n passwordPermissions === true ||\n ((typeof passwordPermissions === 'object' &&\n passwordPermissions.update) as SanitizedFieldPermissions)\n }\n }\n\n if (hasLoginFieldOverride) {\n const hasEmailAndUsernameFields =\n loginWithUsername && (loginWithUsername.requireEmail || loginWithUsername.allowEmailLogin)\n\n const { operation: emailPermission } = getFieldPermissions({\n field: { name: 'email', type: 'text' },\n operation: 'read',\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n const { operation: usernamePermission } = getFieldPermissions({\n field: { name: 'username', type: 'text' },\n operation: 'read',\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n if (hasEmailAndUsernameFields) {\n showUnlock = usernamePermission || emailPermission\n } else if (loginWithUsername && !hasEmailAndUsernameFields) {\n showUnlock = usernamePermission\n } else {\n showUnlock = emailPermission\n }\n }\n\n const enableFields =\n (!disableLocalStrategy ||\n (typeof disableLocalStrategy === 'object' && disableLocalStrategy.enableFields === true)) &&\n (showUnlock || showPasswordFields)\n\n const disabled = readOnly || isInitializing || isTrashed\n\n const apiKeyPermissions = docPermissions?.fields === true ? true : docPermissions?.fields?.apiKey\n const canManageAPIKey =\n apiKeyPermissions === true ||\n (typeof apiKeyPermissions === 'object' && Boolean(apiKeyPermissions?.[operation]))\n\n const hasPermissionToUnlock: boolean = useMemo(() => {\n if (docPermissions) {\n return Boolean('unlock' in docPermissions ? docPermissions.unlock : undefined)\n }\n\n return false\n }, [docPermissions])\n\n const handleChangePassword = useCallback(\n (changingPassword: boolean) => {\n if (changingPassword) {\n setValidateBeforeSubmit(true)\n\n dispatchFields({\n type: 'UPDATE',\n errorMessage: t('validation:required'),\n path: 'password',\n valid: false,\n })\n\n dispatchFields({\n type: 'UPDATE',\n errorMessage: t('validation:required'),\n path: 'confirm-password',\n valid: false,\n })\n } else {\n setValidateBeforeSubmit(false)\n dispatchFields({ type: 'REMOVE', path: 'password' })\n dispatchFields({ type: 'REMOVE', path: 'confirm-password' })\n }\n\n setChangingPassword(changingPassword)\n },\n [dispatchFields, t, setValidateBeforeSubmit],\n )\n\n const unlock = useCallback(async () => {\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}/unlock`,\n })\n const response = await fetch(url, {\n body:\n loginWithUsername && username ? JSON.stringify({ username }) : JSON.stringify({ email }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n if (response.status === 200) {\n toast.success(t('authentication:successfullyUnlocked'))\n } else {\n toast.error(t('authentication:failedToUnlock'))\n }\n }, [i18n, api, collectionSlug, email, username, t, loginWithUsername])\n\n useEffect(() => {\n if (!modified) {\n setChangingPassword(false)\n }\n }, [modified])\n\n const showAuthBlock = enableFields\n const showAPIKeyBlock = useAPIKey && canManageAPIKey\n const showVerifyBlock = verify && isEditing\n\n if (!(showAuthBlock || showAPIKeyBlock || showVerifyBlock)) {\n return null\n }\n\n const formatHeaderButtonLabel = (label: string): string => {\n if (!i18n?.language?.startsWith('en') || !label) {\n return label\n }\n\n return label.charAt(0) + label.slice(1).toLowerCase()\n }\n\n const Controls =\n enableFields &&\n (changingPassword ||\n (!changingPassword && !requirePassword && !disableLocalStrategy && showPasswordFields) ||\n (!changingPassword && operation === 'update' && hasPermissionToUnlock)) ? (\n <div className={`${baseClass}__controls`}>\n {changingPassword && !requirePassword && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"cancel-change-password\"\n onClick={() => handleChangePassword(false)}\n size=\"medium\"\n >\n {t('general:cancel')}\n </Button>\n )}\n {!changingPassword && !requirePassword && !disableLocalStrategy && showPasswordFields && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"change-password\"\n onClick={() => handleChangePassword(true)}\n size=\"medium\"\n >\n {formatHeaderButtonLabel(t('authentication:changePassword'))}\n </Button>\n )}\n {!changingPassword && operation === 'update' && hasPermissionToUnlock && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled || !showUnlock}\n id=\"force-unlock\"\n onClick={() => void unlock()}\n size=\"medium\"\n >\n {formatHeaderButtonLabel(t('authentication:forceUnlock'))}\n </Button>\n )}\n </div>\n ) : null\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__header`}>\n <div className={`${baseClass}__title`}>{t('authentication:account')}</div>\n {Controls}\n </div>\n <div className={`${baseClass}__body`}>\n {showAuthBlock && (\n <Fragment>\n <EmailAndUsernameFields\n loginWithUsername={loginWithUsername}\n operation={operation}\n permissions={docPermissions?.fields}\n readOnly={readOnly || isTrashed}\n t={t}\n />\n {(changingPassword || requirePassword) &&\n (!disableLocalStrategy || !enableFields) && (\n <div className={`${baseClass}__changing-password`}>\n <PasswordField\n autoComplete=\"new-password\"\n field={{\n name: 'password',\n label: t('authentication:newPassword'),\n required: true,\n }}\n indexPath=\"\"\n parentPath=\"\"\n parentSchemaPath=\"\"\n path=\"password\"\n schemaPath=\"password\"\n />\n <ConfirmPasswordField disabled={readOnly || isTrashed} />\n </div>\n )}\n </Fragment>\n )}\n {showAPIKeyBlock && (\n <div className={`${baseClass}__api-key`}>\n <APIKey\n readOnly={disabled}\n reveal={typeof useAPIKey === 'object' && useAPIKey.reveal === true}\n />\n </div>\n )}\n {showVerifyBlock && (\n <CheckboxField\n field={{\n name: '_verified',\n admin: { disabled, readOnly },\n label: t('authentication:verified'),\n }}\n path=\"_verified\"\n schemaPath={`${collectionSlug}._verified`}\n />\n )}\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAIA,SAASC,cAAc,EAAEC,mBAAmB,QAAQ;AACpD,OAAOC,KAAA,IAASC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ;AAC3E,SAASC,KAAK,QAAQ;AAItB,SAASC,MAAM,QAAQ;AACvB,SAASC,sBAAsB,QAAQ;AACvC,SAASC,aAAa,QAAQ;AAC9B,SAASC,oBAAoB,QAAQ;AACrC,SAASC,aAAa,QAAQ;AAC9B,SAASC,aAAa,EAAEC,eAAe,QAAQ;AAC/C,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAC/B,OAAO;AACP,SAASC,MAAM,QAAQ;AAEvB,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,IAAA,GAAwBC,KAAA;EAAA,MAAAC,CAAA,GAAAxB,EAAA;EACnC;IAAAyB,SAAA;IAAAC,cAAA;IAAAC,oBAAA;IAAAC,KAAA;IAAAC,iBAAA;IAAAC,SAAA;IAAAC,QAAA;IAAAC,eAAA;IAAAC,uBAAA;IAAAC,SAAA;IAAAC,QAAA;IAAAC;EAAA,IAaIb,KAAA;EAEJ,OAAAc,gBAAA,EAAAC,mBAAA,IAAgD9B,QAAA,CAASwB,eAAA;EACzD,MAAAO,cAAA,GAAuBxB,aAAA,CAAAyB,KAAqC;EAC5D,MAAAC,QAAA,GAAiBzB,eAAA;EACjB;IAAA0B,IAAA;IAAAC;EAAA,IAAoBxB,cAAA;EACpB;IAAAyB,cAAA;IAAAC,SAAA;IAAAC,cAAA;IAAAC;EAAA,IAAiE7B,eAAA;EAEjE;IAAA8B,MAAA,EAAAC;EAAA,IAIIhC,SAAA;EAHM;IAAAiC,MAAA,EAAAC;EAAA,IAAAF,EAEP;EADS;IAAAG;EAAA,IAAAD,EAAO;EAInB,IAAAE,kBAAA;EACA,IAAAC,UAAA;EACA,MAAAC,wBAAA,GACE,OAAOX,cAAA,CAAAY,MAAA,KAA0B,YAAY,cAAcZ,cAAA,CAAAY,MAAqB;EAClF,MAAAC,qBAAA,GACE,OAAOb,cAAA,CAAAY,MAAA,KAA0B,aAChC,cAAcZ,cAAA,CAAAY,MAAqB,IAAI,WAAWZ,cAAA,CAAAY,MAAqB,CAAD;EAAA,IAErED,wBAAA;IACF;MAAAG,WAAA,EAAAC;IAAA,IAA6CzD,mBAAA;MAAA0D,KAAA;QAAAC,IAAA,EAC5B;QAAAC,IAAA,EAAkB;MAAA;MAAAhC,SAAA;MAAAiC,UAAA,EAErB;MAAAL,WAAA,EACCd,cAAA,EAAAY;IAAA,CACf;IAAA,IAEI1B,SAAA,KAAc;MAChBuB,kBAAA,CAAAA,CAAA,CACEM,mBAAA,SAAwB,IACtB,OAAOA,mBAAA,KAAwB,YAC/BA,mBAAA,CAAAK,MAA0B;IAH9B;MAKAX,kBAAA,CAAAA,CAAA,CACEM,mBAAA,SAAwB,IACtB,OAAOA,mBAAA,KAAwB,YAC/BA,mBAAA,CAAAM,MAA0B;IAH9B;EAAA;EAAA,IAOAR,qBAAA;IACF,MAAAS,yBAAA,GACErC,iBAAA,KAAsBA,iBAAA,CAAAsC,YAAA,IAAkCtC,iBAAA,CAAAuC,eAAiC,CAAD;IAE1F;MAAAtC,SAAA,EAAAuC;IAAA,IAAuCnE,mBAAA;MAAA0D,KAAA;QAAAC,IAAA,EACtB;QAAAC,IAAA,EAAe;MAAA;MAAAhC,SAAA,EACnB;MAAAiC,UAAA,EACC;MAAAL,WAAA,EACCd,cAAA,EAAAY;IAAA,CACf;IAEA;MAAA1B,SAAA,EAAAwC;IAAA,IAA0CpE,mBAAA;MAAA0D,KAAA;QAAAC,IAAA,EACzB;QAAAC,IAAA,EAAkB;MAAA;MAAAhC,SAAA,EACtB;MAAAiC,UAAA,EACC;MAAAL,WAAA,EACCd,cAAA,EAAAY;IAAA,CACf;IAAA,IAEIU,yBAAA;MACFZ,UAAA,CAAAA,CAAA,CAAagB,kBAAA,IAAsBD,eAAA;IAAnC;MAAA,IACSxC,iBAAA,KAAsBqC,yBAAA;QAC/BZ,UAAA,CAAAA,CAAA,CAAagB,kBAAA;MAAb;QAEAhB,UAAA,CAAAA,CAAA,CAAae,eAAA;MAAb;IAAA;EAAA;EAIJ,MAAAE,YAAA,GACE,CAAC,CAAC5C,oBAAA,IACC,OAAOA,oBAAA,KAAyB,YAAYA,oBAAA,CAAA4C,YAAA,SAA0C,MACxFjB,UAAA,IAAcD,kBAAiB;EAElC,MAAAmB,QAAA,GAAiBzC,QAAA,IAAYe,cAAA,IAAkBC,SAAA;EAE/C,MAAA0B,iBAAA,GAA0B7B,cAAA,EAAAY,MAAA,SAA2B,UAAcZ,cAAA,EAAAY,MAAA,EAAAkB,MAAwB;EAC3F,MAAAC,eAAA,GACEF,iBAAA,SAAsB,IACrB,OAAOA,iBAAA,KAAsB,YAAYG,OAAA,CAAQH,iBAAA,GAAoB3C,SAAA,CAAU;EAAA,IAAA+C,EAAA;EAAAC,GAAA;IAAA,IAG5ElC,cAAA;MACFiC,EAAA,GAAOD,OAAA,CAAQ,YAAYhC,cAAA,GAAiBA,cAAA,CAAAmC,MAAA,GAAAC,SAAwB;MAAA,MAAAF,GAAA;IAAA;IAGtED,EAAA;EAAO;EALT,MAAAI,qBAAA,GAAuCJ,EAMpB;EAAA,IAAAK,EAAA;EAAA,IAAA1D,CAAA,QAAAe,cAAA,IAAAf,CAAA,QAAAS,uBAAA,IAAAT,CAAA,QAAAmB,CAAA;IAGjBuC,EAAA,GAAAC,kBAAA;MAAA,IACM9C,kBAAA;QACFJ,uBAAA,KAAwB;QAExBM,cAAA;UAAAuB,IAAA,EACQ;UAAAsB,YAAA,EACQzC,CAAA,CAAE;UAAA0C,IAAA,EACV;UAAAC,KAAA;QAAA,CAER;QAEA/C,cAAA;UAAAuB,IAAA,EACQ;UAAAsB,YAAA,EACQzC,CAAA,CAAE;UAAA0C,IAAA,EACV;UAAAC,KAAA;QAAA,CAER;MAAA;QAEArD,uBAAA,MAAwB;QACxBM,cAAA;UAAAuB,IAAA,EAAuB;UAAAuB,IAAA,EAAgB;QAAA,CAAW;QAClD9C,cAAA;UAAAuB,IAAA,EAAuB;UAAAuB,IAAA,EAAgB;QAAA,CAAmB;MAAA;MAG5D/C,mBAAA,CAAoBD,kBAAA;IAAA;IACtBb,CAAA,MAAAe,cAAA;IAAAf,CAAA,MAAAS,uBAAA;IAAAT,CAAA,MAAAmB,CAAA;IAAAnB,CAAA,MAAA0D,EAAA;EAAA;IAAAA,EAAA,GAAA1D,CAAA;EAAA;EAzBF,MAAA+D,oBAAA,GAA6BL,EA0BiB;EAAA,IAAAM,EAAA;EAAA,IAAAhE,CAAA,QAAA4B,GAAA,IAAA5B,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAI,KAAA,IAAAJ,CAAA,QAAAkB,IAAA,IAAAlB,CAAA,QAAAK,iBAAA,IAAAL,CAAA,QAAAmB,CAAA,IAAAnB,CAAA,SAAAW,QAAA;IAGnBqD,EAAA,SAAAA,CAAA;MACzB,MAAAC,GAAA,GAAYxF,cAAA;QAAAyF,QAAA,EACAtC,GAAA;QAAAiC,IAAA,EACJ,IAAI3D,cAAA;MAAuB,CACnC;MACA,MAAAiE,QAAA,SAAuBC,KAAA,CAAMH,GAAA;QAAAI,IAAA,EAEzBhE,iBAAA,IAAqBM,QAAA,GAAW2D,IAAA,CAAAC,SAAA;UAAA5D;QAAA,CAA0B,IAAK2D,IAAA,CAAAC,SAAA;UAAAnE;QAAA,CAAuB;QAAAoE,WAAA,EAC3E;QAAAC,OAAA;UAAA,mBAEQvD,IAAA,CAAAwD,QAAA;UAAA,gBACH;QAAA;QAAAC,MAAA,EAEV;MAAA,CACV;MAAA,IAEIR,QAAA,CAAAS,MAAA,QAAoB;QACtB3F,KAAA,CAAA4F,OAAA,CAAc1D,CAAA,CAAE;MAAA;QAEhBlC,KAAA,CAAA6F,KAAA,CAAY3D,CAAA,CAAE;MAAA;IAAA;IAElBnB,CAAA,MAAA4B,GAAA;IAAA5B,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAI,KAAA;IAAAJ,CAAA,MAAAkB,IAAA;IAAAlB,CAAA,MAAAK,iBAAA;IAAAL,CAAA,MAAAmB,CAAA;IAAAnB,CAAA,OAAAW,QAAA;IAAAX,CAAA,OAAAgE,EAAA;EAAA;IAAAA,EAAA,GAAAhE,CAAA;EAAA;EArBA,MAAAuD,MAAA,GAAeS,EAqBsD;EAAA,IAAAe,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAhF,CAAA,SAAAiB,QAAA;IAE3D8D,EAAA,GAAAA,CAAA;MAAA,KACH9D,QAAA;QACHH,mBAAA,MAAoB;MAAA;IAAA;IAErBkE,EAAA,IAAC/D,QAAA;IAASjB,CAAA,OAAAiB,QAAA;IAAAjB,CAAA,OAAA+E,EAAA;IAAA/E,CAAA,OAAAgF,EAAA;EAAA;IAAAD,EAAA,GAAA/E,CAAA;IAAAgF,EAAA,GAAAhF,CAAA;EAAA;EAJblB,SAAA,CAAUiG,EAIV,EAAGC,EAAU;EAEb,MAAAC,aAAA,GAAsBlC,YAAA;EACtB,MAAAmC,eAAA,GAAwBxE,SAAA,IAAayC,eAAA;EACrC,MAAAgC,eAAA,GAAwBvE,MAAA,IAAUS,SAAA;EAAA,MAE5B4D,aAAA,IAAiBC,eAAA,IAAmBC,eAAc;IAAA;EAAA;EAAA,IAAAC,EAAA;EAAA,IAAApF,CAAA,SAAAkB,IAAA,EAAAwD,QAAA;IAIxBU,EAAA,GAAAC,KAAA;MAAA,IAC1B,CAACnE,IAAA,EAAAwD,QAAA,EAAAY,UAAA,CAA2B,UAAUD,KAAA;QAAA,OACjCA,KAAA;MAAA;MAAA,OAGFA,KAAA,CAAAE,MAAA,EAAa,IAAKF,KAAA,CAAAG,KAAA,EAAY,EAAAC,WAAA,CAAc;IAAA;IACrDzF,CAAA,OAAAkB,IAAA,EAAAwD,QAAA;IAAA1E,CAAA,OAAAoF,EAAA;EAAA;IAAAA,EAAA,GAAApF,CAAA;EAAA;EANA,MAAA0F,uBAAA,GAAgCN,EAMhC;EAEA,MAAAO,QAAA,GACE5C,YAAA,KACClC,gBAAA,IACE,CAACA,gBAAA,KAAqBL,eAAA,KAAoBL,oBAAA,IAAwB0B,kBAAA,IAClE,CAAChB,gBAAA,IAAoBP,SAAA,KAAc,YAAYmD,qBAAqB,IACrEmC,KAAA,CAAC;IAAA3F,SAAA,EAAe,GAAAJ,SAAA,YAAwB;IAAAgG,QAAA,GACrChF,gBAAA,KAAqBL,eAAA,IACpBsF,IAAA,CAAA5G,MAAA;MAAA6G,WAAA,EACc;MAAA/C,QAAA;MAAAgD,EAAA,EAET;MAAAC,OAAA,EAAAA,CAAA,KACYlC,oBAAA,MAAqB;MAAAmC,IAAA,EAC/B;MAAAL,QAAA,EAEJ1E,CAAA,CAAE;IAAA,C,GAGN,CAACN,gBAAA,KAAqBL,eAAA,KAAoBL,oBAAA,IAAwB0B,kBAAA,IACjEiE,IAAA,CAAA5G,MAAA;MAAA6G,WAAA,EACc;MAAA/C,QAAA;MAAAgD,EAAA,EAET;MAAAC,OAAA,EAAAA,CAAA,KACYlC,oBAAA,KAAqB;MAAAmC,IAAA,EAC/B;MAAAL,QAAA,EAEJH,uBAAA,CAAwBvE,CAAA,CAAE;IAAA,C,GAG9B,CAACN,gBAAA,IAAoBP,SAAA,KAAc,YAAYmD,qBAAA,IAC9CqC,IAAA,CAAA5G,MAAA;MAAA6G,WAAA,EACc;MAAA/C,QAAA,EACFA,QAAA,KAAalB,UAAA;MAAAkE,EAAA,EACpB;MAAAC,OAAA,EAAAA,CAAA,UACiB1C,MAAA;MAAA2C,IAAA,EACf;MAAAL,QAAA,EAEJH,uBAAA,CAAwBvE,CAAA,CAAE;IAAA,C;WAI/B;EAAA,IAAAgF,EAAA;EAAA,IAAAnG,CAAA,SAAAC,SAAA;IAGYkG,EAAA,IAAAtG,SAAA,EAAYI,SAAA,EAAAmG,MAAA,CAAAhD,OAAkB;IAAApD,CAAA,OAAAC,SAAA;IAAAD,CAAA,OAAAmG,EAAA;EAAA;IAAAA,EAAA,GAAAnG,CAAA;EAAA;EAAA,OAA9C8F,IAAA,CAAC;IAAA7F,SAAA,EAAekG,EAA8B,CAAAE,IAAA,CAAc;IAAAR,QAAA,EAC1DD,KAAA,CAAC;MAAA3F,SAAA,EAAe,GAAAJ,SAAA,QAAoB;MAAAgG,QAAA,GAClCD,KAAA,CAAC;QAAA3F,SAAA,EAAe,GAAAJ,SAAA,UAAsB;QAAAgG,QAAA,GACpCC,IAAA,CAAC;UAAA7F,SAAA,EAAe,GAAAJ,SAAA,SAAqB;UAAAgG,QAAA,EAAG1E,CAAA,CAAE;QAAA,C,GACzCwE,QAAA;MAAA,C,GAEHC,KAAA,CAAC;QAAA3F,SAAA,EAAe,GAAAJ,SAAA,QAAoB;QAAAgG,QAAA,GACjCZ,aAAA,IACCW,KAAA,CAAAhH,QAAA;UAAAiH,QAAA,GACEC,IAAA,CAAA3G,sBAAA;YAAAkB,iBAAA;YAAAC,SAAA;YAAA4B,WAAA,EAGed,cAAA,EAAAY,MAAA;YAAAzB,QAAA,EACHA,QAAA,IAAYgB,SAAA;YAAAJ;UAAA,C,GAGtB,CAAAN,gBAAA,IAAoBL,eAAc,MACjC,CAACL,oBAAA,KAAyB4C,YAAW,KACpC6C,KAAA,CAAC;YAAA3F,SAAA,EAAe,GAAAJ,SAAA,qBAAiC;YAAAgG,QAAA,GAC/CC,IAAA,CAAAxG,aAAA;cAAAgH,YAAA,EACe;cAAAlE,KAAA;gBAAAC,IAAA,EAEL;gBAAAgD,KAAA,EACClE,CAAA,CAAE;gBAAAoF,QAAA;cAAA;cAAAC,SAAA,EAGD;cAAAC,UAAA,EACC;cAAAC,gBAAA,EACM;cAAA7C,IAAA,EACZ;cAAA8C,UAAA,EACM;YAAA,C,GAEbb,IAAA,CAAAzG,oBAAA;cAAA2D,QAAA,EAAgCzC,QAAA,IAAYgB;YAAA,C;;YAKrD2D,eAAA,IACCY,IAAA,CAAC;UAAA7F,SAAA,EAAe,GAAAJ,SAAA,WAAuB;UAAAgG,QAAA,EACrCC,IAAA,CAAAlG,MAAA;YAAAW,QAAA,EACYyC,QAAA;YAAA4D,MAAA,EACF,OAAOlG,SAAA,KAAc,YAAYA,SAAA,CAAAkG,MAAA;UAAqB,C;YAInEzB,eAAA,IACCW,IAAA,CAAA1G,aAAA;UAAAgD,KAAA;YAAAC,IAAA,EAEU;YAAAwE,KAAA;cAAA7D,QAAA;cAAAzC;YAAA;YAAA8E,KAAA,EAEClE,CAAA,CAAE;UAAA;UAAA0C,IAAA,EAEN;UAAA8C,UAAA,EACO,GAAGzG,cAAA;QAA0B,C;;;;CAOvD;AAzRqC,SAAAc,MAAA8F,OAAA;EAAA,OAiBeA,OAAO;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","flattenTopLevelFields","formatAdminURL","getFieldPermissions","React","Fragment","useCallback","useEffect","useMemo","useState","toast","Button","EmailAndUsernameFields","CheckboxField","ConfirmPasswordField","PasswordField","useFormFields","useFormModified","useConfig","useDocumentInfo","useTranslation","APIKey","baseClass","Auth","props","$","className","collectionSlug","disableLocalStrategy","email","loginWithUsername","operation","readOnly","requirePassword","setValidateBeforeSubmit","useAPIKey","username","verify","changingPassword","setChangingPassword","dispatchFields","_temp","modified","i18n","t","docPermissions","isEditing","isInitializing","isTrashed","config","t0","getEntityConfig","routes","t1","api","hasPasswordField","fields","some","_temp2","showPasswordFields","Boolean","showUnlock","hasLoginFieldOverride","passwordPermission","field","name","type","parentName","permissions","hasEmailAndUsernameFields","requireEmail","allowEmailLogin","emailPermission","usernamePermission","enableFields","disabled","apiKeyPermissions","apiKey","canManageAPIKey","t2","bb0","unlock","undefined","hasPermissionToUnlock","t3","changingPassword_0","errorMessage","path","valid","handleChangePassword","t4","url","apiRoute","response","fetch","body","JSON","stringify","credentials","headers","language","method","status","success","error","t5","t6","showAuthBlock","showAPIKeyBlock","showVerifyBlock","t7","label","startsWith","charAt","slice","toLowerCase","formatHeaderButtonLabel","Controls","_jsxs","children","_jsx","buttonStyle","id","onClick","size","t8","filter","join","autoComplete","required","indexPath","parentPath","parentSchemaPath","schemaPath","reveal","admin","reducer"],"sources":["../../../../src/views/Edit/Auth/index.tsx"],"sourcesContent":["'use client'\n\nimport { flattenTopLevelFields, formatAdminURL, getFieldPermissions } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { Props } from './types.js'\n\nimport { Button } from '../../../elements/Button/index.js'\nimport { EmailAndUsernameFields } from '../../../elements/EmailAndUsername/index.js'\nimport { CheckboxField } from '../../../fields/Checkbox/index.js'\nimport { ConfirmPasswordField } from '../../../fields/ConfirmPassword/index.js'\nimport { PasswordField } from '../../../fields/Password/index.js'\nimport { useFormFields, useFormModified } from '../../../forms/Form/context.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport './index.css'\nimport { APIKey } from './APIKey.js'\n\nconst baseClass = 'auth-fields'\n\nexport const Auth: React.FC<Props> = (props) => {\n const {\n className,\n collectionSlug,\n disableLocalStrategy,\n email,\n loginWithUsername,\n operation,\n readOnly,\n requirePassword,\n setValidateBeforeSubmit,\n useAPIKey,\n username,\n verify,\n } = props\n\n const [changingPassword, setChangingPassword] = useState(requirePassword)\n const dispatchFields = useFormFields((reducer) => reducer[1])\n const modified = useFormModified()\n const { i18n, t } = useTranslation()\n const { docPermissions, isEditing, isInitializing, isTrashed } = useDocumentInfo()\n\n const {\n config: {\n routes: { api },\n },\n getEntityConfig,\n } = useConfig()\n\n const hasPasswordField = useMemo(\n () =>\n flattenTopLevelFields(getEntityConfig({ collectionSlug }).fields).some(\n (field) => field.name === 'password',\n ),\n [collectionSlug, getEntityConfig],\n )\n\n let showPasswordFields = Boolean(docPermissions[operation])\n let showUnlock = true\n const hasLoginFieldOverride =\n typeof docPermissions.fields === 'object' &&\n ('username' in docPermissions.fields || 'email' in docPermissions.fields)\n\n if (hasPasswordField) {\n const { operation: passwordPermission } = getFieldPermissions({\n field: { name: 'password', type: 'text' },\n operation,\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n showPasswordFields = passwordPermission\n }\n\n if (hasLoginFieldOverride) {\n const hasEmailAndUsernameFields =\n loginWithUsername && (loginWithUsername.requireEmail || loginWithUsername.allowEmailLogin)\n\n const { operation: emailPermission } = getFieldPermissions({\n field: { name: 'email', type: 'text' },\n operation: 'read',\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n const { operation: usernamePermission } = getFieldPermissions({\n field: { name: 'username', type: 'text' },\n operation: 'read',\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n if (hasEmailAndUsernameFields) {\n showUnlock = usernamePermission || emailPermission\n } else if (loginWithUsername && !hasEmailAndUsernameFields) {\n showUnlock = usernamePermission\n } else {\n showUnlock = emailPermission\n }\n }\n\n const enableFields =\n (!disableLocalStrategy ||\n (typeof disableLocalStrategy === 'object' && disableLocalStrategy.enableFields === true)) &&\n (showUnlock || showPasswordFields)\n\n const disabled = readOnly || isInitializing || isTrashed\n\n const apiKeyPermissions = docPermissions?.fields === true ? true : docPermissions?.fields?.apiKey\n const canManageAPIKey =\n apiKeyPermissions === true ||\n (typeof apiKeyPermissions === 'object' && Boolean(apiKeyPermissions?.[operation]))\n\n const hasPermissionToUnlock: boolean = useMemo(() => {\n if (docPermissions) {\n return Boolean('unlock' in docPermissions ? docPermissions.unlock : undefined)\n }\n\n return false\n }, [docPermissions])\n\n const handleChangePassword = useCallback(\n (changingPassword: boolean) => {\n if (changingPassword) {\n setValidateBeforeSubmit(true)\n\n dispatchFields({\n type: 'UPDATE',\n errorMessage: t('validation:required'),\n path: 'password',\n valid: false,\n })\n\n dispatchFields({\n type: 'UPDATE',\n errorMessage: t('validation:required'),\n path: 'confirm-password',\n valid: false,\n })\n } else {\n setValidateBeforeSubmit(false)\n dispatchFields({ type: 'REMOVE', path: 'password' })\n dispatchFields({ type: 'REMOVE', path: 'confirm-password' })\n }\n\n setChangingPassword(changingPassword)\n },\n [dispatchFields, t, setValidateBeforeSubmit],\n )\n\n const unlock = useCallback(async () => {\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}/unlock`,\n })\n const response = await fetch(url, {\n body:\n loginWithUsername && username ? JSON.stringify({ username }) : JSON.stringify({ email }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n if (response.status === 200) {\n toast.success(t('authentication:successfullyUnlocked'))\n } else {\n toast.error(t('authentication:failedToUnlock'))\n }\n }, [i18n, api, collectionSlug, email, username, t, loginWithUsername])\n\n useEffect(() => {\n if (!modified) {\n setChangingPassword(false)\n }\n }, [modified])\n\n const showAuthBlock = enableFields\n const showAPIKeyBlock = useAPIKey && canManageAPIKey\n const showVerifyBlock = verify && isEditing\n\n if (!(showAuthBlock || showAPIKeyBlock || showVerifyBlock)) {\n return null\n }\n\n const formatHeaderButtonLabel = (label: string): string => {\n if (!i18n?.language?.startsWith('en') || !label) {\n return label\n }\n\n return label.charAt(0) + label.slice(1).toLowerCase()\n }\n\n const Controls =\n enableFields &&\n (changingPassword ||\n (!changingPassword && !requirePassword && !disableLocalStrategy && showPasswordFields) ||\n (!changingPassword && operation === 'update' && hasPermissionToUnlock)) ? (\n <div className={`${baseClass}__controls`}>\n {changingPassword && !requirePassword && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"cancel-change-password\"\n onClick={() => handleChangePassword(false)}\n size=\"medium\"\n >\n {t('general:cancel')}\n </Button>\n )}\n {!changingPassword && !requirePassword && !disableLocalStrategy && showPasswordFields && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"change-password\"\n onClick={() => handleChangePassword(true)}\n size=\"medium\"\n >\n {formatHeaderButtonLabel(t('authentication:changePassword'))}\n </Button>\n )}\n {!changingPassword && operation === 'update' && hasPermissionToUnlock && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled || !showUnlock}\n id=\"force-unlock\"\n onClick={() => void unlock()}\n size=\"medium\"\n >\n {formatHeaderButtonLabel(t('authentication:forceUnlock'))}\n </Button>\n )}\n </div>\n ) : null\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__header`}>\n <div className={`${baseClass}__title`}>{t('authentication:account')}</div>\n {Controls}\n </div>\n <div className={`${baseClass}__body`}>\n {showAuthBlock && (\n <Fragment>\n <EmailAndUsernameFields\n loginWithUsername={loginWithUsername}\n operation={operation}\n permissions={docPermissions?.fields}\n readOnly={readOnly || isTrashed}\n t={t}\n />\n {(changingPassword || requirePassword) &&\n (!disableLocalStrategy || !enableFields) && (\n <div className={`${baseClass}__changing-password`}>\n <PasswordField\n autoComplete=\"new-password\"\n field={{\n name: 'password',\n label: t('authentication:newPassword'),\n required: true,\n }}\n indexPath=\"\"\n parentPath=\"\"\n parentSchemaPath=\"\"\n path=\"password\"\n schemaPath=\"password\"\n />\n <ConfirmPasswordField disabled={readOnly || isTrashed} />\n </div>\n )}\n </Fragment>\n )}\n {showAPIKeyBlock && (\n <div className={`${baseClass}__api-key`}>\n <APIKey\n readOnly={disabled}\n reveal={typeof useAPIKey === 'object' && useAPIKey.reveal === true}\n />\n </div>\n )}\n {showVerifyBlock && (\n <CheckboxField\n field={{\n name: '_verified',\n admin: { disabled, readOnly },\n label: t('authentication:verified'),\n }}\n path=\"_verified\"\n schemaPath={`${collectionSlug}._verified`}\n />\n )}\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","getTranslation","formatAdminURL","useEffect","useStepNav","useConfig","useDocumentInfo","useDocumentTitle","useEntityVisibility","useTranslation","SetDocumentStepNav","props","$","id","collectionSlug","globalSlug","isTrashed","pluralLabel","useAsTitle","view","undefined","isEditing","isInitializing","title","isEntityVisible","t0","isVisible","setStepNav","i18n","t","config","t1","routes","t2","serverURL","admin","adminRoute","t3","nav","push","label","url","path","t4"],"sources":["../../../../src/views/Edit/SetDocumentStepNav/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL } from 'payload/shared'\nimport { useEffect } from 'react'\n\nimport type { StepNavItem } from '../../../elements/StepNav/index.js'\n\nimport { useStepNav } from '../../../elements/StepNav/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useDocumentTitle } from '../../../providers/DocumentTitle/index.js'\nimport { useEntityVisibility } from '../../../providers/EntityVisibility/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\n\nexport const SetDocumentStepNav: React.FC<{\n collectionSlug?: SanitizedCollectionConfig['slug']\n globalLabel?: SanitizedGlobalConfig['label']\n globalSlug?: SanitizedGlobalConfig['slug']\n id?: number | string\n isTrashed?: boolean\n pluralLabel?: SanitizedCollectionConfig['labels']['plural']\n useAsTitle?: SanitizedCollectionConfig['admin']['useAsTitle']\n view?: string\n}> = (props) => {\n const { id, collectionSlug, globalSlug, isTrashed, pluralLabel, useAsTitle } = props\n\n const view: string | undefined = props?.view || undefined\n\n const { isEditing, isInitializing } = useDocumentInfo()\n const { title } = useDocumentTitle()\n\n const { isEntityVisible } = useEntityVisibility()\n const isVisible = isEntityVisible({ collectionSlug, globalSlug })\n\n const { setStepNav } = useStepNav()\n\n const { i18n, t } = useTranslation()\n\n const {\n config: {\n routes: { admin: adminRoute },\n serverURL,\n },\n } = useConfig()\n\n useEffect(() => {\n const nav: StepNavItem[] = []\n\n if (!isInitializing) {\n if (collectionSlug) {\n // Collection label\n nav.push({\n label: getTranslation(pluralLabel, i18n),\n url: isVisible\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}`,\n })\n : undefined,\n })\n\n // Trash breadcrumb (if in trash view)\n if (isTrashed) {\n nav.push({\n label: t('general:trash'),\n url: isVisible\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/trash`,\n })\n : undefined,\n })\n }\n\n // Document label\n if (isEditing) {\n nav.push({\n label: (useAsTitle && useAsTitle !== 'id' && title) || `${id}`,\n url: isVisible\n ? formatAdminURL({\n adminRoute,\n path: isTrashed\n ? `/collections/${collectionSlug}/trash/${id}`\n : `/collections/${collectionSlug}/${id}`,\n })\n : undefined,\n })\n } else {\n nav.push({\n label: t('general:createNew'),\n })\n }\n } else if (globalSlug) {\n nav.push({\n label: title,\n url: isVisible\n ? formatAdminURL({\n adminRoute,\n path: `/globals/${globalSlug}`,\n })\n : undefined,\n })\n }\n\n // Fallback view (used for versions, previews, etc.)\n if (view) {\n nav.push({\n label: view,\n })\n }\n\n setStepNav(nav)\n }\n }, [\n setStepNav,\n isInitializing,\n isEditing,\n pluralLabel,\n id,\n isTrashed,\n useAsTitle,\n adminRoute,\n t,\n i18n,\n title,\n collectionSlug,\n globalSlug,\n serverURL,\n view,\n isVisible,\n ])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAI1B,SAASC,UAAU,QAAQ;AAC3B,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,mBAAmB,QAAQ;AACpC,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,kBAAA,GASRC,KAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EACH;IAAAa,EAAA;IAAAC,cAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC,WAAA;IAAAC;EAAA,IAA+EP,KAAA;EAE/E,MAAAQ,IAAA,GAAiCR,KAAA,EAAAQ,IAAA,IAAAC,SAAe;EAEhD;IAAAC,SAAA;IAAAC;EAAA,IAAsChB,eAAA;EACtC;IAAAiB;EAAA,IAAkBhB,gBAAA;EAElB;IAAAiB;EAAA,IAA4BhB,mBAAA;EAAA,IAAAiB,EAAA;EAAA,IAAAb,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAY,eAAA;IACVC,EAAA,GAAAD,eAAA;MAAAV,cAAA;MAAAC;IAAA,CAA6C;IAAAH,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAG,UAAA;IAAAH,CAAA,MAAAY,eAAA;IAAAZ,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAA/D,MAAAc,SAAA,GAAkBD,EAA6C;EAE/D;IAAAE;EAAA,IAAuBvB,UAAA;EAEvB;IAAAwB,IAAA;IAAAC;EAAA,IAAoBpB,cAAA;EAEpB;IAAAqB,MAAA,EAAAC;EAAA,IAKI1B,SAAA;EAJM;IAAA2B,MAAA,EAAAC,EAAA;IAAAC;EAAA,IAAAH,EAGP;EAFS;IAAAI,KAAA,EAAAC;EAAA,IAAAH,EAAqB;EAAA,IAAAI,EAAA;EAAA,IAAAzB,CAAA,QAAAwB,UAAA,IAAAxB,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAgB,IAAA,IAAAhB,CAAA,QAAAC,EAAA,IAAAD,CAAA,QAAAS,SAAA,IAAAT,CAAA,SAAAU,cAAA,IAAAV,CAAA,SAAAI,SAAA,IAAAJ,CAAA,SAAAc,SAAA,IAAAd,CAAA,SAAAK,WAAA,IAAAL,CAAA,SAAAe,UAAA,IAAAf,CAAA,SAAAiB,CAAA,IAAAjB,CAAA,SAAAW,KAAA,IAAAX,CAAA,SAAAM,UAAA,IAAAN,CAAA,SAAAO,IAAA;IAKvBkB,EAAA,GAAAA,CAAA;MACR,MAAAC,GAAA;MAA6B,KAExBhB,cAAA;QAAA,IACCR,cAAA;UAEFwB,GAAA,CAAAC,IAAA;YAAAC,KAAA,EACSvC,cAAA,CAAegB,WAAA,EAAaW,IAAA;YAAAa,GAAA,EAC9Bf,SAAA,GACDxB,cAAA;cAAAkC,UAAA;cAAAM,IAAA,EAEQ,gBAAgB5B,cAAA;YAAgB,CACxC,IAAAM;UACA,CACN;UAAA,IAGIJ,SAAA;YACFsB,GAAA,CAAAC,IAAA;cAAAC,KAAA,EACSX,CAAA,CAAE;cAAAY,GAAA,EACJf,SAAA,GACDxB,cAAA;gBAAAkC,UAAA;gBAAAM,IAAA,EAEQ,gBAAgB5B,cAAA;cAAsB,CAC9C,IAAAM;YACA,CACN;UAAA;UAAA,IAIEC,SAAA;YACFiB,GAAA,CAAAC,IAAA;cAAAC,KAAA,EACStB,UAAC,IAAcA,UAAA,KAAe,QAAQK,KAAA,IAAU,GAAGV,EAAA,EAAI;cAAA4B,GAAA,EACzDf,SAAA,GACDxB,cAAA;gBAAAkC,UAAA;gBAAAM,IAAA,EAEQ1B,SAAA,GACF,gBAAgBF,cAAA,UAAwBD,EAAA,EAAI,GAC5C,gBAAgBC,cAAA,IAAkBD,EAAA;cAAI,CAC5C,IAAAO;YACA,CACN;UAAA;YAEAkB,GAAA,CAAAC,IAAA;cAAAC,KAAA,EACSX,CAAA,CAAE;YAAA,CACX;UAAA;QAAA;UAAA,IAEOd,UAAA;YACTuB,GAAA,CAAAC,IAAA;cAAAC,KAAA,EACSjB,KAAA;cAAAkB,GAAA,EACFf,SAAA,GACDxB,cAAA;gBAAAkC,UAAA;gBAAAM,IAAA,EAEQ,YAAY3B,UAAA;cAAY,CAChC,IAAAK;YACA,CACN;UAAA;QAAA;QAAA,IAIED,IAAA;UACFmB,GAAA,CAAAC,IAAA;YAAAC,KAAA,EACSrB;UAAA,CACT;QAAA;QAGFQ,UAAA,CAAWW,GAAA;MAAA;IAAA;IAEf1B,CAAA,MAAAwB,UAAA;IAAAxB,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAG,UAAA;IAAAH,CAAA,MAAAgB,IAAA;IAAAhB,CAAA,MAAAC,EAAA;IAAAD,CAAA,MAAAS,SAAA;IAAAT,CAAA,OAAAU,cAAA;IAAAV,CAAA,OAAAI,SAAA;IAAAJ,CAAA,OAAAc,SAAA;IAAAd,CAAA,OAAAK,WAAA;IAAAL,CAAA,OAAAe,UAAA;IAAAf,CAAA,OAAAiB,CAAA;IAAAjB,CAAA,OAAAW,KAAA;IAAAX,CAAA,OAAAM,UAAA;IAAAN,CAAA,OAAAO,IAAA;IAAAP,CAAA,OAAAyB,EAAA;EAAA;IAAAA,EAAA,GAAAzB,CAAA;EAAA;EAAA,IAAA+B,EAAA;EAAA,IAAA/B,CAAA,SAAAwB,UAAA,IAAAxB,CAAA,SAAAE,cAAA,IAAAF,CAAA,SAAAG,UAAA,IAAAH,CAAA,SAAAgB,IAAA,IAAAhB,CAAA,SAAAC,EAAA,IAAAD,CAAA,SAAAS,SAAA,IAAAT,CAAA,SAAAU,cAAA,IAAAV,CAAA,SAAAI,SAAA,IAAAJ,CAAA,SAAAc,SAAA,IAAAd,CAAA,SAAAK,WAAA,IAAAL,CAAA,SAAAsB,SAAA,IAAAtB,CAAA,SAAAe,UAAA,IAAAf,CAAA,SAAAiB,CAAA,IAAAjB,CAAA,SAAAW,KAAA,IAAAX,CAAA,SAAAM,UAAA,IAAAN,CAAA,SAAAO,IAAA;IAAGwB,EAAA,IACDhB,UAAA,EACAL,cAAA,EACAD,SAAA,EACAJ,WAAA,EACAJ,EAAA,EACAG,SAAA,EACAE,UAAA,EACAkB,UAAA,EACAP,CAAA,EACAD,IAAA,EACAL,KAAA,EACAT,cAAA,EACAC,UAAA,EACAmB,SAAA,EACAf,IAAA,EACAO,SAAA;IACDd,CAAA,OAAAwB,UAAA;IAAAxB,CAAA,OAAAE,cAAA;IAAAF,CAAA,OAAAG,UAAA;IAAAH,CAAA,OAAAgB,IAAA;IAAAhB,CAAA,OAAAC,EAAA;IAAAD,CAAA,OAAAS,SAAA;IAAAT,CAAA,OAAAU,cAAA;IAAAV,CAAA,OAAAI,SAAA;IAAAJ,CAAA,OAAAc,SAAA;IAAAd,CAAA,OAAAK,WAAA;IAAAL,CAAA,OAAAsB,SAAA;IAAAtB,CAAA,OAAAe,UAAA;IAAAf,CAAA,OAAAiB,CAAA;IAAAjB,CAAA,OAAAW,KAAA;IAAAX,CAAA,OAAAM,UAAA;IAAAN,CAAA,OAAAO,IAAA;IAAAP,CAAA,OAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EArFDT,SAAA,CAAUkC,EAoEV,EAAGM,EAiBF;EAAA;AAAA,CAGH","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","getTranslation","formatAdminURL","useEffect","useStepNav","useConfig","useDocumentInfo","useDocumentTitle","useEntityVisibility","useTranslation","SetDocumentStepNav","props","$","id","collectionSlug","globalSlug","isTrashed","pluralLabel","useAsTitle","view","undefined","isEditing","isInitializing","title","isEntityVisible","t0","isVisible","setStepNav","i18n","t","config","t1","routes","t2","serverURL","admin","adminRoute","t3","nav","push","label","url","path","t4"],"sources":["../../../../src/views/Edit/SetDocumentStepNav/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL } from 'payload/shared'\nimport { useEffect } from 'react'\n\nimport type { StepNavItem } from '../../../elements/StepNav/index.js'\n\nimport { useStepNav } from '../../../elements/StepNav/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useDocumentTitle } from '../../../providers/DocumentTitle/index.js'\nimport { useEntityVisibility } from '../../../providers/EntityVisibility/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\n\nexport const SetDocumentStepNav: React.FC<{\n collectionSlug?: SanitizedCollectionConfig['slug']\n globalLabel?: SanitizedGlobalConfig['label']\n globalSlug?: SanitizedGlobalConfig['slug']\n id?: number | string\n isTrashed?: boolean\n pluralLabel?: SanitizedCollectionConfig['labels']['plural']\n useAsTitle?: SanitizedCollectionConfig['admin']['useAsTitle']\n view?: string\n}> = (props) => {\n const { id, collectionSlug, globalSlug, isTrashed, pluralLabel, useAsTitle } = props\n\n const view: string | undefined = props?.view || undefined\n\n const { isEditing, isInitializing } = useDocumentInfo()\n const { title } = useDocumentTitle()\n\n const { isEntityVisible } = useEntityVisibility()\n const isVisible = isEntityVisible({ collectionSlug, globalSlug })\n\n const { setStepNav } = useStepNav()\n\n const { i18n, t } = useTranslation()\n\n const {\n config: {\n routes: { admin: adminRoute },\n serverURL,\n },\n } = useConfig()\n\n useEffect(() => {\n const nav: StepNavItem[] = []\n\n if (!isInitializing) {\n if (collectionSlug) {\n // Collection label\n nav.push({\n label: getTranslation(pluralLabel, i18n),\n url: isVisible\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}`,\n })\n : undefined,\n })\n\n // Trash breadcrumb (if in trash view)\n if (isTrashed) {\n nav.push({\n label: t('general:trash'),\n url: isVisible\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/trash`,\n })\n : undefined,\n })\n }\n\n // Document label\n if (isEditing) {\n nav.push({\n label: (useAsTitle && useAsTitle !== 'id' && title) || `${id}`,\n url: isVisible\n ? formatAdminURL({\n adminRoute,\n path: isTrashed\n ? `/collections/${collectionSlug}/trash/${id}`\n : `/collections/${collectionSlug}/${id}`,\n })\n : undefined,\n })\n } else {\n nav.push({\n label: t('general:createNew'),\n })\n }\n } else if (globalSlug) {\n nav.push({\n label: title,\n url: isVisible\n ? formatAdminURL({\n adminRoute,\n path: `/globals/${globalSlug}`,\n })\n : undefined,\n })\n }\n\n // Fallback view (used for versions, previews, etc.)\n if (view) {\n nav.push({\n label: view,\n })\n }\n\n setStepNav(nav)\n }\n }, [\n setStepNav,\n isInitializing,\n isEditing,\n pluralLabel,\n id,\n isTrashed,\n useAsTitle,\n adminRoute,\n t,\n i18n,\n title,\n collectionSlug,\n globalSlug,\n serverURL,\n view,\n isVisible,\n ])\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useEffect","useRef","useFormFields","useDocumentTitle","useTranslation","formatDocTitle","SetDocumentTitle","props","$","collectionConfig","config","fallback","globalConfig","useAsTitle","admin","t0","t1","fields","field","hasInitialized","i18n","setDocumentTitle","dateFormatFromConfig","dateFormat","value","t2","data","id","title","t3","t4","current","animationFrame","requestAnimationFrame","cancelAnimationFrame"],"sources":["../../../../src/views/Edit/SetDocumentTitle/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, ClientConfig, ClientGlobalConfig } from 'payload'\n\nimport { useEffect, useRef } from 'react'\n\nimport { useFormFields } from '../../../forms/Form/context.js'\nimport { useDocumentTitle } from '../../../providers/DocumentTitle/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { formatDocTitle } from '../../../utilities/formatDocTitle/index.js'\n\nexport const SetDocumentTitle: React.FC<{\n collectionConfig?: ClientCollectionConfig\n config?: ClientConfig\n fallback: string\n globalConfig?: ClientGlobalConfig\n}> = (props) => {\n const { collectionConfig, config, fallback, globalConfig } = props\n\n const useAsTitle = collectionConfig?.admin?.useAsTitle\n\n const field = useFormFields(([fields]) => (useAsTitle && fields && fields?.[useAsTitle]) || null)\n\n const hasInitialized = useRef(false)\n\n const { i18n } = useTranslation()\n\n const { setDocumentTitle } = useDocumentTitle()\n\n const dateFormatFromConfig = config?.admin?.dateFormat\n\n const title = formatDocTitle({\n collectionConfig,\n data: { id: '', [useAsTitle]: field?.value || '' },\n dateFormat: dateFormatFromConfig,\n fallback,\n globalConfig,\n i18n,\n })\n\n useEffect(() => {\n if (!hasInitialized.current) {\n hasInitialized.current = true\n return\n }\n\n // Coalesce rapid field changes before updating the title and step navigation contexts.\n const animationFrame = requestAnimationFrame(() => {\n setDocumentTitle(title)\n })\n\n return () => cancelAnimationFrame(animationFrame)\n }, [setDocumentTitle, title])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,SAAS,EAAEC,MAAM,QAAQ;AAElC,SAASC,aAAa,QAAQ;AAC9B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,gBAAA,GAKRC,KAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EACH;IAAAU,gBAAA;IAAAC,MAAA;IAAAC,QAAA;IAAAC;EAAA,IAA6DL,KAAA;EAE7D,MAAAM,UAAA,GAAmBJ,gBAAA,EAAAK,KAAA,EAAAD,UAAA;EAAyB,IAAAE,EAAA;EAAA,IAAAP,CAAA,QAAAK,UAAA;IAEhBE,EAAA,GAAAC,EAAA;MAAC,OAAAC,MAAA,IAAAD,EAAQ;MAAA,OAAKH,UAAC,IAAcI,MAAA,IAAUA,MAAA,GAASJ,UAAA,CAAW,QAAK;IAAA;IAAAL,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAA5F,MAAAU,KAAA,GAAchB,aAAA,CAAca,EAAgE;EAE5F,MAAAI,cAAA,GAAuBlB,MAAA,MAAO;EAE9B;IAAAmB;EAAA,IAAiBhB,cAAA;EAEjB;IAAAiB;EAAA,IAA6BlB,gBAAA;EAE7B,MAAAmB,oBAAA,GAA6BZ,MAAA,EAAAI,KAAA,EAAAS,UAAA;EAIG,MAAAP,EAAA,GAAAE,KAAA,EAAAM,KAAA,IAAgB;EAAA,IAAAC,EAAA;EAAA,IAAAjB,CAAA,QAAAC,gBAAA,IAAAD,CAAA,QAAAc,oBAAA,IAAAd,CAAA,QAAAG,QAAA,IAAAH,CAAA,QAAAI,YAAA,IAAAJ,CAAA,QAAAY,IAAA,IAAAZ,CAAA,QAAAQ,EAAA,IAAAR,CAAA,QAAAK,UAAA;IAFlCY,EAAA,GAAApB,cAAA;MAAAI,gBAAA;MAAAiB,IAAA;QAAAC,EAAA,EAEA;QAAA,CAAKd,UAAA,GAAaG;MAAgB;MAAAO,UAAA,EAClCD,oBAAA;MAAAX,QAAA;MAAAC,YAAA;MAAAQ;IAAA,CAId;IAAAZ,CAAA,MAAAC,gBAAA;IAAAD,CAAA,MAAAc,oBAAA;IAAAd,CAAA,MAAAG,QAAA;IAAAH,CAAA,MAAAI,YAAA;IAAAJ,CAAA,MAAAY,IAAA;IAAAZ,CAAA,MAAAQ,EAAA;IAAAR,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAPA,MAAAoB,KAAA,GAAcH,EAOd;EAAA,IAAAI,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAtB,CAAA,SAAAa,gBAAA,IAAAb,CAAA,SAAAoB,KAAA;IAEUC,EAAA,GAAAA,CAAA;MAAA,KACHV,cAAA,CAAAY,OAAA;QACHZ,cAAA,CAAAY,OAAA;QAAA;MAAA;MAKF,MAAAC,cAAA,GAAuBC,qBAAA;QACrBZ,gBAAA,CAAiBO,KAAA;MAAA,CACnB;MAAA,aAEaM,oBAAA,CAAqBF,cAAA;IAAA;IACjCF,EAAA,IAACT,gBAAA,EAAkBO,KAAA;IAAMpB,CAAA,OAAAa,gBAAA;IAAAb,CAAA,OAAAoB,KAAA;IAAApB,CAAA,OAAAqB,EAAA;IAAArB,CAAA,OAAAsB,EAAA;EAAA;IAAAD,EAAA,GAAArB,CAAA;IAAAsB,EAAA,GAAAtB,CAAA;EAAA;EAZ5BR,SAAA,CAAU6B,EAYV,EAAGC,EAAyB;EAAA;AAAA,CAG9B","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useEffect","useRef","useFormFields","useDocumentTitle","useTranslation","formatDocTitle","SetDocumentTitle","props","$","collectionConfig","config","fallback","globalConfig","useAsTitle","admin","t0","t1","fields","field","hasInitialized","i18n","setDocumentTitle","dateFormatFromConfig","dateFormat","value","t2","data","id","title","t3","t4","current","animationFrame","requestAnimationFrame","cancelAnimationFrame"],"sources":["../../../../src/views/Edit/SetDocumentTitle/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, ClientConfig, ClientGlobalConfig } from 'payload'\n\nimport { useEffect, useRef } from 'react'\n\nimport { useFormFields } from '../../../forms/Form/context.js'\nimport { useDocumentTitle } from '../../../providers/DocumentTitle/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { formatDocTitle } from '../../../utilities/formatDocTitle/index.js'\n\nexport const SetDocumentTitle: React.FC<{\n collectionConfig?: ClientCollectionConfig\n config?: ClientConfig\n fallback: string\n globalConfig?: ClientGlobalConfig\n}> = (props) => {\n const { collectionConfig, config, fallback, globalConfig } = props\n\n const useAsTitle = collectionConfig?.admin?.useAsTitle\n\n const field = useFormFields(([fields]) => (useAsTitle && fields && fields?.[useAsTitle]) || null)\n\n const hasInitialized = useRef(false)\n\n const { i18n } = useTranslation()\n\n const { setDocumentTitle } = useDocumentTitle()\n\n const dateFormatFromConfig = config?.admin?.dateFormat\n\n const title = formatDocTitle({\n collectionConfig,\n data: { id: '', [useAsTitle]: field?.value || '' },\n dateFormat: dateFormatFromConfig,\n fallback,\n globalConfig,\n i18n,\n })\n\n useEffect(() => {\n if (!hasInitialized.current) {\n hasInitialized.current = true\n return\n }\n\n // Coalesce rapid field changes before updating the title and step navigation contexts.\n const animationFrame = requestAnimationFrame(() => {\n setDocumentTitle(title)\n })\n\n return () => cancelAnimationFrame(animationFrame)\n }, [setDocumentTitle, title])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,SAAS,EAAEC,MAAM,QAAQ;AAElC,SAASC,aAAa,QAAQ;AAC9B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,gBAAA,GAKRC,KAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EACH;IAAAU,gBAAA;IAAAC,MAAA;IAAAC,QAAA;IAAAC;EAAA,IAA6DL,KAAA;EAE7D,MAAAM,UAAA,GAAmBJ,gBAAA,EAAAK,KAAyB,EAAAD,UAAA;EAAA,IAAAE,EAAA;EAAA,IAAAP,CAAA,QAAAK,UAAA;IAEhBE,EAAA,GAAAC,EAAA;MAAC,OAAAC,MAAA,IAAAD,EAAQ;MAAA,OAAKH,UAAe,IAAfI,MAA6C,IAApBA,MAAA,GAASJ,UAAA,CAAgB,IAAlD,IAAkD;IAAA;IAAAL,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAA5F,MAAAU,KAAA,GAAchB,aAAA,CAAca,EAAgE;EAE5F,MAAAI,cAAA,GAAuBlB,MAAA,CAAO;EAE9B;IAAAmB;EAAA,IAAiBhB,cAAA;EAEjB;IAAAiB;EAAA,IAA6BlB,gBAAA;EAE7B,MAAAmB,oBAAA,GAA6BZ,MAAA,EAAAI,KAAe,EAAAS,UAAA;EAIZ,MAAAP,EAAA,GAAAE,KAAA,EAAAM,KAAgB,IAAhB,EAAgB;EAAA,IAAAC,EAAA;EAAA,IAAAjB,CAAA,QAAAC,gBAAA,IAAAD,CAAA,QAAAc,oBAAA,IAAAd,CAAA,QAAAG,QAAA,IAAAH,CAAA,QAAAI,YAAA,IAAAJ,CAAA,QAAAY,IAAA,IAAAZ,CAAA,QAAAQ,EAAA,IAAAR,CAAA,QAAAK,UAAA;IAFlCY,EAAA,GAAApB,cAAA,CAAe;MAAAI,gBAAA;MAAAiB,IAAA,EAErB;QAAAC,EAAA,EAAM;QAAA,CAAKd,UAAA,GAAaG;MAAmB;MAAAO,UAAA,EACrCD,oBAAA;MAAAX,QAAA;MAAAC,YAAA;MAAAQ;IAId;IAAAZ,CAAA,MAAAC,gBAAA;IAAAD,CAAA,MAAAc,oBAAA;IAAAd,CAAA,MAAAG,QAAA;IAAAH,CAAA,MAAAI,YAAA;IAAAJ,CAAA,MAAAY,IAAA;IAAAZ,CAAA,MAAAQ,EAAA;IAAAR,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAPA,MAAAoB,KAAA,GAAcH,EAOd;EAAA,IAAAI,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAtB,CAAA,SAAAa,gBAAA,IAAAb,CAAA,SAAAoB,KAAA;IAEUC,EAAA,GAAAA,CAAA;MACR,IAAI,CAACV,cAAA,CAAAY,OAAsB;QACzBZ,cAAA,CAAAY,OAAA,GAAyB,IAAH;QAAA;MAAA;MAKxB,MAAAC,cAAA,GAAuBC,qBAAA,CAAsB;QAC3CZ,gBAAA,CAAiBO,KAAA;MAAA,CACnB;MAAA,OAEO,MAAMM,oBAAA,CAAqBF,cAAA;IAAA,CACpC;IAAGF,EAAA,IAACT,gBAAA,EAAkBO,KAAA,CAAM;IAAApB,CAAA,OAAAa,gBAAA;IAAAb,CAAA,OAAAoB,KAAA;IAAApB,CAAA,OAAAqB,EAAA;IAAArB,CAAA,OAAAsB,EAAA;EAAA;IAAAD,EAAA,GAAArB,CAAA;IAAAsB,EAAA,GAAAtB,CAAA;EAAA;EAZ5BR,SAAA,CAAU6B,EAYV,EAAGC,EAAyB;EAAA,OAErB;AAAA,CACT","ignoreList":[]}