@payloadcms/ui 4.0.0-internal.8001944 → 4.0.0-internal.8089ef7

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 (715) hide show
  1. package/dist/css/app.css +1 -1
  2. package/dist/css/forms.css +0 -1
  3. package/dist/css/spacing.css +1 -1
  4. package/dist/css/typography.css +161 -55
  5. package/dist/elements/APIKeyInput/index.css +2 -2
  6. package/dist/elements/AppHeader/index.css +1 -1
  7. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  8. package/dist/elements/AppHeader/index.js +9 -2
  9. package/dist/elements/AppHeader/index.js.map +1 -1
  10. package/dist/elements/Autosave/index.d.ts.map +1 -1
  11. package/dist/elements/Autosave/index.js +10 -3
  12. package/dist/elements/Autosave/index.js.map +1 -1
  13. package/dist/elements/Banner/index.css +3 -4
  14. package/dist/elements/BulkUpload/EditMany/index.css +4 -5
  15. package/dist/elements/BulkUpload/FileSidebar/index.css +0 -1
  16. package/dist/elements/BulkUpload/FileSidebar/index.js +1 -1
  17. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  18. package/dist/elements/Button/index.css +31 -1
  19. package/dist/elements/Button/types.d.ts +1 -1
  20. package/dist/elements/Button/types.d.ts.map +1 -1
  21. package/dist/elements/Button/types.js.map +1 -1
  22. package/dist/elements/Card/index.css +3 -4
  23. package/dist/elements/CardGrid/index.css +20 -0
  24. package/dist/elements/CardGrid/index.d.ts +13 -0
  25. package/dist/elements/CardGrid/index.d.ts.map +1 -0
  26. package/dist/elements/CardGrid/index.js +23 -0
  27. package/dist/elements/CardGrid/index.js.map +1 -0
  28. package/dist/elements/Chip/index.css +0 -1
  29. package/dist/elements/CloseModalOnRouteChange/index.d.ts.map +1 -1
  30. package/dist/elements/CloseModalOnRouteChange/index.js +27 -19
  31. package/dist/elements/CloseModalOnRouteChange/index.js.map +1 -1
  32. package/dist/elements/CodeEditor/CodeEditor.d.ts.map +1 -1
  33. package/dist/elements/CodeEditor/CodeEditor.js +5 -0
  34. package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
  35. package/dist/elements/Collapsible/index.css +4 -1
  36. package/dist/elements/ColumnSelection/Popup.css +6 -11
  37. package/dist/elements/CommandPalette/index.css +3 -8
  38. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  39. package/dist/elements/CopyToClipboard/index.js +62 -54
  40. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  41. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  42. package/dist/elements/CreateDocumentButton/index.js +56 -33
  43. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  44. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  45. package/dist/elements/DatePicker/DatePicker.js +88 -15
  46. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  47. package/dist/elements/DatePicker/hasAmbiguousYearInput.d.ts +8 -0
  48. package/dist/elements/DatePicker/hasAmbiguousYearInput.d.ts.map +1 -0
  49. package/dist/elements/DatePicker/hasAmbiguousYearInput.js +37 -0
  50. package/dist/elements/DatePicker/hasAmbiguousYearInput.js.map +1 -0
  51. package/dist/elements/DatePicker/index.css +27 -17
  52. package/dist/elements/DatePicker/useDatePickerKeyboard.d.ts +18 -0
  53. package/dist/elements/DatePicker/useDatePickerKeyboard.d.ts.map +1 -0
  54. package/dist/elements/DatePicker/useDatePickerKeyboard.js +212 -0
  55. package/dist/elements/DatePicker/useDatePickerKeyboard.js.map +1 -0
  56. package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
  57. package/dist/elements/DefaultListViewTabs/index.js +9 -7
  58. package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
  59. package/dist/elements/Dialog/DialogTitle/index.css +1 -1
  60. package/dist/elements/Dialog/index.css +1 -2
  61. package/dist/elements/DocumentCard/index.css +73 -0
  62. package/dist/elements/DocumentCard/index.d.ts +18 -0
  63. package/dist/elements/DocumentCard/index.d.ts.map +1 -0
  64. package/dist/elements/DocumentCard/index.js +182 -0
  65. package/dist/elements/DocumentCard/index.js.map +1 -0
  66. package/dist/elements/DocumentControls/index.css +14 -15
  67. package/dist/elements/DocumentControls/index.d.ts +4 -2
  68. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  69. package/dist/elements/DocumentControls/index.js.map +1 -1
  70. package/dist/elements/DocumentDrawer/DrawerHeader/index.css +4 -7
  71. package/dist/elements/DocumentDrawer/types.d.ts +1 -5
  72. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  73. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  74. package/dist/elements/DocumentFields/RequiredFieldsInfo/index.css +2 -2
  75. package/dist/elements/DocumentFields/index.css +5 -5
  76. package/dist/elements/DocumentFields/index.d.ts.map +1 -1
  77. package/dist/elements/DocumentFields/index.js +1 -2
  78. package/dist/elements/DocumentFields/index.js.map +1 -1
  79. package/dist/elements/DocumentHeader/index.css +1 -1
  80. package/dist/elements/Drawer/index.css +4 -5
  81. package/dist/elements/Drawer/types.d.ts +2 -2
  82. package/dist/elements/Drawer/types.d.ts.map +1 -1
  83. package/dist/elements/Drawer/types.js.map +1 -1
  84. package/dist/elements/EditMany/index.css +4 -5
  85. package/dist/elements/EditUpload/index.css +3 -4
  86. package/dist/elements/EditUpload/index.d.ts.map +1 -1
  87. package/dist/elements/EditUpload/index.js +13 -2
  88. package/dist/elements/EditUpload/index.js.map +1 -1
  89. package/dist/elements/EditUpload/library.css +6 -13
  90. package/dist/elements/ErrorPill/index.css +0 -1
  91. package/dist/elements/FieldDiffContainer/index.css +0 -1
  92. package/dist/elements/FieldDiffLabel/index.css +4 -5
  93. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts +1 -1
  94. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -1
  95. package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
  96. package/dist/elements/FileDetails/FileMeta/index.d.ts +1 -1
  97. package/dist/elements/FileDetails/FileMeta/index.d.ts.map +1 -1
  98. package/dist/elements/FileDetails/FileMeta/index.js +41 -21
  99. package/dist/elements/FileDetails/FileMeta/index.js.map +1 -1
  100. package/dist/elements/FileDetails/StaticFileDetails/index.d.ts +1 -1
  101. package/dist/elements/FileDetails/StaticFileDetails/index.d.ts.map +1 -1
  102. package/dist/elements/FileDetails/StaticFileDetails/index.js.map +1 -1
  103. package/dist/elements/FileDetails/index.d.ts +1 -1
  104. package/dist/elements/FileDetails/index.d.ts.map +1 -1
  105. package/dist/elements/FileDetails/index.js.map +1 -1
  106. package/dist/elements/FileManager/FilePreview/index.css +2 -3
  107. package/dist/elements/FileManager/FilePreview/index.js +4 -4
  108. package/dist/elements/FileManager/FilePreview/index.js.map +1 -1
  109. package/dist/elements/FileManager/FileToolbar/index.css +2 -3
  110. package/dist/elements/FileManager/index.css +0 -1
  111. package/dist/elements/FileManager/index.d.ts.map +1 -1
  112. package/dist/elements/FileManager/index.js +13 -6
  113. package/dist/elements/FileManager/index.js.map +1 -1
  114. package/dist/elements/FormHeader/index.css +0 -2
  115. package/dist/elements/GroupBy/Popup.css +3 -6
  116. package/dist/elements/HTMLDiff/index.css +0 -1
  117. package/dist/elements/Hierarchy/ActionsMenu/index.css +18 -0
  118. package/dist/elements/Hierarchy/ActionsMenu/index.d.ts +35 -0
  119. package/dist/elements/Hierarchy/ActionsMenu/index.d.ts.map +1 -0
  120. package/dist/elements/Hierarchy/ActionsMenu/index.js +99 -0
  121. package/dist/elements/Hierarchy/ActionsMenu/index.js.map +1 -0
  122. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +18 -16
  123. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
  124. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -1
  125. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +40 -36
  126. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -1
  127. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -1
  128. package/dist/elements/Hierarchy/ColumnBrowser/index.js +15 -58
  129. package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -1
  130. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +2 -0
  131. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -1
  132. package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -1
  133. package/dist/elements/Hierarchy/DocHeaderButton/index.css +12 -0
  134. package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -1
  135. package/dist/elements/Hierarchy/DocHeaderButton/index.js +88 -13
  136. package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -1
  137. package/dist/elements/Hierarchy/EditButton/index.d.ts +8 -0
  138. package/dist/elements/Hierarchy/EditButton/index.d.ts.map +1 -0
  139. package/dist/elements/Hierarchy/EditButton/index.js +93 -0
  140. package/dist/elements/Hierarchy/EditButton/index.js.map +1 -0
  141. package/dist/elements/Hierarchy/Field/getHierarchyFilterOptions.d.ts +9 -0
  142. package/dist/elements/Hierarchy/Field/getHierarchyFilterOptions.d.ts.map +1 -0
  143. package/dist/elements/Hierarchy/Field/getHierarchyFilterOptions.js +41 -0
  144. package/dist/elements/Hierarchy/Field/getHierarchyFilterOptions.js.map +1 -0
  145. package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -1
  146. package/dist/elements/Hierarchy/Field/index.client.js +120 -105
  147. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -1
  148. package/dist/elements/Hierarchy/Field/index.css +0 -1
  149. package/dist/elements/Hierarchy/Modal/Footer/index.css +33 -0
  150. package/dist/elements/Hierarchy/Modal/Footer/index.d.ts +21 -0
  151. package/dist/elements/Hierarchy/Modal/Footer/index.d.ts.map +1 -0
  152. package/dist/elements/Hierarchy/Modal/Footer/index.js +122 -0
  153. package/dist/elements/Hierarchy/Modal/Footer/index.js.map +1 -0
  154. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts +8 -3
  155. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -1
  156. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js +38 -12
  157. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -1
  158. package/dist/elements/Hierarchy/Modal/index.css +0 -56
  159. package/dist/elements/Hierarchy/Modal/index.d.ts +5 -3
  160. package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -1
  161. package/dist/elements/Hierarchy/Modal/index.js +90 -102
  162. package/dist/elements/Hierarchy/Modal/index.js.map +1 -1
  163. package/dist/elements/Hierarchy/Modal/selection.d.ts +12 -0
  164. package/dist/elements/Hierarchy/Modal/selection.d.ts.map +1 -0
  165. package/dist/elements/Hierarchy/Modal/selection.js +40 -0
  166. package/dist/elements/Hierarchy/Modal/selection.js.map +1 -0
  167. package/dist/elements/Hierarchy/Modal/types.d.ts +4 -0
  168. package/dist/elements/Hierarchy/Modal/types.d.ts.map +1 -1
  169. package/dist/elements/Hierarchy/Modal/types.js.map +1 -1
  170. package/dist/elements/Hierarchy/Modal/useHierarchyModal.d.ts.map +1 -1
  171. package/dist/elements/Hierarchy/Modal/useHierarchyModal.js +1 -1
  172. package/dist/elements/Hierarchy/Modal/useHierarchyModal.js.map +1 -1
  173. package/dist/elements/Hierarchy/MoveMany/index.d.ts +3 -3
  174. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  175. package/dist/elements/Hierarchy/MoveMany/index.js +79 -92
  176. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  177. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  178. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +7 -1
  179. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  180. package/dist/elements/Hierarchy/Tree/index.css +1 -1
  181. package/dist/elements/HydratePreferences/index.d.ts +8 -0
  182. package/dist/elements/HydratePreferences/index.d.ts.map +1 -0
  183. package/dist/elements/HydratePreferences/index.js +34 -0
  184. package/dist/elements/HydratePreferences/index.js.map +1 -0
  185. package/dist/elements/IDLabel/index.css +5 -7
  186. package/dist/elements/ItemsDrawer/ItemSearch/index.css +0 -1
  187. package/dist/elements/LLMInstructionsCell/index.css +11 -0
  188. package/dist/elements/LLMInstructionsCell/index.d.ts +5 -0
  189. package/dist/elements/LLMInstructionsCell/index.d.ts.map +1 -0
  190. package/dist/elements/LLMInstructionsCell/index.js +24 -0
  191. package/dist/elements/LLMInstructionsCell/index.js.map +1 -0
  192. package/dist/elements/LLMInstructionsDescription/index.css +79 -0
  193. package/dist/elements/LLMInstructionsDescription/index.d.ts +6 -0
  194. package/dist/elements/LLMInstructionsDescription/index.d.ts.map +1 -0
  195. package/dist/elements/LLMInstructionsDescription/index.js +40 -0
  196. package/dist/elements/LLMInstructionsDescription/index.js.map +1 -0
  197. package/dist/elements/LLMInstructionsMenuItem/index.d.ts +5 -0
  198. package/dist/elements/LLMInstructionsMenuItem/index.d.ts.map +1 -0
  199. package/dist/elements/LLMInstructionsMenuItem/index.js +46 -0
  200. package/dist/elements/LLMInstructionsMenuItem/index.js.map +1 -0
  201. package/dist/elements/LayoutToggle/index.d.ts +8 -0
  202. package/dist/elements/LayoutToggle/index.d.ts.map +1 -0
  203. package/dist/elements/LayoutToggle/index.js +56 -0
  204. package/dist/elements/LayoutToggle/index.js.map +1 -0
  205. package/dist/elements/Link/index.d.ts.map +1 -1
  206. package/dist/elements/Link/index.js +3 -0
  207. package/dist/elements/Link/index.js.map +1 -1
  208. package/dist/elements/ListControls/index.d.ts.map +1 -1
  209. package/dist/elements/ListControls/index.js +2 -1
  210. package/dist/elements/ListControls/index.js.map +1 -1
  211. package/dist/elements/ListControls/types.d.ts +1 -10
  212. package/dist/elements/ListControls/types.d.ts.map +1 -1
  213. package/dist/elements/ListControls/types.js.map +1 -1
  214. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  215. package/dist/elements/ListDrawer/DrawerContent.js +2 -3
  216. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  217. package/dist/elements/ListDrawer/Provider.d.ts +0 -6
  218. package/dist/elements/ListDrawer/Provider.d.ts.map +1 -1
  219. package/dist/elements/ListDrawer/Provider.js.map +1 -1
  220. package/dist/elements/ListDrawer/index.d.ts.map +1 -1
  221. package/dist/elements/ListDrawer/index.js +1 -1
  222. package/dist/elements/ListDrawer/index.js.map +1 -1
  223. package/dist/elements/ListDrawer/types.d.ts +1 -0
  224. package/dist/elements/ListDrawer/types.d.ts.map +1 -1
  225. package/dist/elements/ListDrawer/types.js.map +1 -1
  226. package/dist/elements/ListHeader/DrawerRelationshipSelect/index.d.ts.map +1 -1
  227. package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js +24 -20
  228. package/dist/elements/ListHeader/DrawerRelationshipSelect/index.js.map +1 -1
  229. package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerConfirmSelectionButton.d.ts +6 -0
  230. package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerConfirmSelectionButton.d.ts.map +1 -0
  231. package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerConfirmSelectionButton.js +61 -0
  232. package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerConfirmSelectionButton.js.map +1 -0
  233. package/dist/elements/ListHeader/DrawerTitleActions/index.d.ts +1 -0
  234. package/dist/elements/ListHeader/DrawerTitleActions/index.d.ts.map +1 -1
  235. package/dist/elements/ListHeader/DrawerTitleActions/index.js +1 -0
  236. package/dist/elements/ListHeader/DrawerTitleActions/index.js.map +1 -1
  237. package/dist/elements/ListHeader/index.css +4 -5
  238. package/dist/elements/MiniCarousel/index.d.ts +1 -1
  239. package/dist/elements/MiniCarousel/index.d.ts.map +1 -1
  240. package/dist/elements/MiniCarousel/index.js +6 -6
  241. package/dist/elements/MiniCarousel/index.js.map +1 -1
  242. package/dist/elements/Nav/NavWrapper/index.d.ts.map +1 -1
  243. package/dist/elements/Nav/NavWrapper/index.js +19 -14
  244. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  245. package/dist/elements/Nav/SidebarTabs/index.client.js +1 -1
  246. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  247. package/dist/elements/Nav/SidebarTabs/index.css +2 -1
  248. package/dist/elements/Nav/index.js +1 -2
  249. package/dist/elements/Nav/index.js.map +1 -1
  250. package/dist/elements/NavGroup/index.css +3 -4
  251. package/dist/elements/NoListResults/index.css +2 -3
  252. package/dist/elements/PageControls/index.css +4 -1
  253. package/dist/elements/PageControls/index.d.ts.map +1 -1
  254. package/dist/elements/PageControls/index.js +22 -8
  255. package/dist/elements/PageControls/index.js.map +1 -1
  256. package/dist/elements/Pagination/SimplePagination/index.css +0 -1
  257. package/dist/elements/Pagination/index.css +0 -2
  258. package/dist/elements/PerPage/index.css +0 -1
  259. package/dist/elements/Pill/index.css +0 -1
  260. package/dist/elements/Popup/PopupButtonList/index.css +4 -2
  261. package/dist/elements/Popup/PopupButtonList/index.d.ts +1 -0
  262. package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
  263. package/dist/elements/Popup/PopupButtonList/index.js +4 -0
  264. package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
  265. package/dist/elements/Popup/PopupGroupLabel/index.css +0 -1
  266. package/dist/elements/PreviewSizes/index.d.ts +1 -1
  267. package/dist/elements/PreviewSizes/index.d.ts.map +1 -1
  268. package/dist/elements/PreviewSizes/index.js +9 -9
  269. package/dist/elements/PreviewSizes/index.js.map +1 -1
  270. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  271. package/dist/elements/PublishButton/index.js +71 -8
  272. package/dist/elements/PublishButton/index.js.map +1 -1
  273. package/dist/elements/PublishButton/validateAllLocales.d.ts +11 -0
  274. package/dist/elements/PublishButton/validateAllLocales.d.ts.map +1 -0
  275. package/dist/elements/PublishButton/validateAllLocales.js +263 -0
  276. package/dist/elements/PublishButton/validateAllLocales.js.map +1 -0
  277. package/dist/elements/QueryPresets/fields/Heading/index.css +0 -1
  278. package/dist/elements/ReactSelect/MultiValueLabel/index.css +0 -1
  279. package/dist/elements/ReactSelect/index.css +0 -3
  280. package/dist/elements/RelationshipTable/AddNewButton.d.ts.map +1 -1
  281. package/dist/elements/RelationshipTable/AddNewButton.js +3 -0
  282. package/dist/elements/RelationshipTable/AddNewButton.js.map +1 -1
  283. package/dist/elements/RenderTitle/index.css +9 -7
  284. package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
  285. package/dist/elements/SaveDraftButton/index.js +15 -2
  286. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  287. package/dist/elements/Search/SearchInput/index.css +0 -1
  288. package/dist/elements/Search/SearchInput/index.js +1 -1
  289. package/dist/elements/Search/SearchInput/index.js.map +1 -1
  290. package/dist/elements/SegmentedControl/index.css +9 -0
  291. package/dist/elements/SegmentedControl/index.d.ts +20 -0
  292. package/dist/elements/SegmentedControl/index.d.ts.map +1 -0
  293. package/dist/elements/SegmentedControl/index.js +162 -0
  294. package/dist/elements/SegmentedControl/index.js.map +1 -0
  295. package/dist/elements/SidebarRow/index.css +1 -2
  296. package/dist/elements/SortColumn/index.css +1 -2
  297. package/dist/elements/Spinner/index.css +0 -2
  298. package/dist/elements/Status/index.css +3 -4
  299. package/dist/elements/StepNav/index.css +15 -9
  300. package/dist/elements/StepNav/index.d.ts.map +1 -1
  301. package/dist/elements/StepNav/index.js +7 -0
  302. package/dist/elements/StepNav/index.js.map +1 -1
  303. package/dist/elements/StepNav/types.d.ts +2 -0
  304. package/dist/elements/StepNav/types.d.ts.map +1 -1
  305. package/dist/elements/StepNav/types.js.map +1 -1
  306. package/dist/elements/Switch/index.css +0 -1
  307. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.css +0 -1
  308. package/dist/elements/Table/DefaultCell/fields/Code/index.css +0 -1
  309. package/dist/elements/Table/DefaultCell/fields/File/index.js +1 -1
  310. package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
  311. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.css +0 -9
  312. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -1
  313. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +100 -43
  314. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
  315. package/dist/elements/Table/DefaultCell/fields/JSON/index.css +0 -1
  316. package/dist/elements/Table/DefaultCell/fields/Status/index.css +0 -1
  317. package/dist/elements/Table/index.css +1 -1
  318. package/dist/elements/TableSection/index.css +4 -5
  319. package/dist/elements/Tabs/index.css +5 -5
  320. package/dist/elements/Tabs/index.d.ts +4 -0
  321. package/dist/elements/Tabs/index.d.ts.map +1 -1
  322. package/dist/elements/Tabs/index.js +30 -1
  323. package/dist/elements/Tabs/index.js.map +1 -1
  324. package/dist/elements/ThumbnailCard/index.css +0 -1
  325. package/dist/elements/TimezonePicker/index.css +0 -3
  326. package/dist/elements/Tooltip/index.css +0 -1
  327. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  328. package/dist/elements/Tooltip/index.js +1 -0
  329. package/dist/elements/Tooltip/index.js.map +1 -1
  330. package/dist/elements/Upload/getEditorFileSrc.d.ts +11 -0
  331. package/dist/elements/Upload/getEditorFileSrc.d.ts.map +1 -0
  332. package/dist/elements/Upload/getEditorFileSrc.js +6 -0
  333. package/dist/elements/Upload/getEditorFileSrc.js.map +1 -0
  334. package/dist/elements/Upload/index.css +2 -3
  335. package/dist/elements/Upload/index.d.ts +1 -1
  336. package/dist/elements/Upload/index.d.ts.map +1 -1
  337. package/dist/elements/Upload/index.js +12 -7
  338. package/dist/elements/Upload/index.js.map +1 -1
  339. package/dist/elements/UserMenu/index.css +7 -10
  340. package/dist/exports/client/CodeEditor-S7MOGZSR.js +14 -0
  341. package/dist/exports/client/CodeEditor-S7MOGZSR.js.map +7 -0
  342. package/dist/exports/client/DatePicker-POZJVQP4.js +14 -0
  343. package/dist/exports/client/DatePicker-POZJVQP4.js.map +7 -0
  344. package/dist/exports/client/chunk-2AY67NFV.js +29 -0
  345. package/dist/exports/client/chunk-2AY67NFV.js.map +7 -0
  346. package/dist/exports/client/chunk-AVJIZPR3.js +14 -0
  347. package/dist/exports/client/chunk-AVJIZPR3.js.map +7 -0
  348. package/dist/exports/client/chunk-Z42OBP5U.js +27 -0
  349. package/dist/exports/client/chunk-Z42OBP5U.js.map +7 -0
  350. package/dist/exports/client/index.d.ts +19 -1
  351. package/dist/exports/client/index.d.ts.map +1 -1
  352. package/dist/exports/client/index.js +100 -1
  353. package/dist/exports/client/index.js.map +4 -4
  354. package/dist/exports/rsc/index.d.ts +1 -0
  355. package/dist/exports/rsc/index.d.ts.map +1 -1
  356. package/dist/exports/rsc/index.js +1 -0
  357. package/dist/exports/rsc/index.js.map +1 -1
  358. package/dist/exports/shared/index.js +2 -2
  359. package/dist/exports/shared/index.js.map +3 -3
  360. package/dist/fields/Array/index.css +4 -0
  361. package/dist/fields/Blocks/SectionTitle/index.css +3 -5
  362. package/dist/fields/Blocks/index.css +2 -2
  363. package/dist/fields/Checkbox/Input.js +1 -1
  364. package/dist/fields/Checkbox/Input.js.map +1 -1
  365. package/dist/fields/Checkbox/index.css +4 -0
  366. package/dist/fields/DateTime/index.d.ts.map +1 -1
  367. package/dist/fields/DateTime/index.js +9 -2
  368. package/dist/fields/DateTime/index.js.map +1 -1
  369. package/dist/fields/FieldLabel/index.css +1 -2
  370. package/dist/fields/Group/index.css +5 -8
  371. package/dist/fields/Join/index.css +3 -4
  372. package/dist/fields/RadioGroup/Radio/index.css +0 -1
  373. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  374. package/dist/fields/Relationship/Input.js +25 -17
  375. package/dist/fields/Relationship/Input.js.map +1 -1
  376. package/dist/fields/Relationship/optionsReducer.d.ts.map +1 -1
  377. package/dist/fields/Relationship/optionsReducer.js +2 -0
  378. package/dist/fields/Relationship/optionsReducer.js.map +1 -1
  379. package/dist/fields/Relationship/types.d.ts +8 -0
  380. package/dist/fields/Relationship/types.d.ts.map +1 -1
  381. package/dist/fields/Relationship/types.js.map +1 -1
  382. package/dist/fields/Select/Input.d.ts.map +1 -1
  383. package/dist/fields/Select/Input.js +17 -15
  384. package/dist/fields/Select/Input.js.map +1 -1
  385. package/dist/fields/Select/index.css +7 -0
  386. package/dist/fields/Tabs/Tab/index.d.ts +2 -0
  387. package/dist/fields/Tabs/Tab/index.d.ts.map +1 -1
  388. package/dist/fields/Tabs/Tab/index.js +15 -9
  389. package/dist/fields/Tabs/Tab/index.js.map +1 -1
  390. package/dist/fields/Tabs/index.css +14 -14
  391. package/dist/fields/Tabs/index.d.ts.map +1 -1
  392. package/dist/fields/Tabs/index.js +179 -116
  393. package/dist/fields/Tabs/index.js.map +1 -1
  394. package/dist/fields/Upload/HasMany/index.js +1 -1
  395. package/dist/fields/Upload/HasMany/index.js.map +1 -1
  396. package/dist/fields/Upload/HasOne/index.js +1 -1
  397. package/dist/fields/Upload/HasOne/index.js.map +1 -1
  398. package/dist/fields/Upload/Input.d.ts.map +1 -1
  399. package/dist/fields/Upload/Input.js +13 -4
  400. package/dist/fields/Upload/Input.js.map +1 -1
  401. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  402. package/dist/forms/Form/fieldReducer.js +6 -9
  403. package/dist/forms/Form/fieldReducer.js.map +1 -1
  404. package/dist/forms/Form/index.d.ts.map +1 -1
  405. package/dist/forms/Form/index.js +0 -1
  406. package/dist/forms/Form/index.js.map +1 -1
  407. package/dist/forms/Form/types.d.ts +0 -5
  408. package/dist/forms/Form/types.d.ts.map +1 -1
  409. package/dist/forms/Form/types.js.map +1 -1
  410. package/dist/forms/RenderFields/index.css +2 -5
  411. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +2 -2
  412. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  413. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  414. package/dist/forms/fieldSchemasToFormState/index.d.ts +2 -2
  415. package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
  416. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  417. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts +2 -2
  418. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
  419. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  420. package/dist/forms/fieldSchemasToFormState/types.d.ts +2 -2
  421. package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
  422. package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
  423. package/dist/forms/useField/types.d.ts +0 -4
  424. package/dist/forms/useField/types.d.ts.map +1 -1
  425. package/dist/forms/useField/types.js.map +1 -1
  426. package/dist/icons/Arrow/index.d.ts +1 -1
  427. package/dist/icons/Arrow/index.d.ts.map +1 -1
  428. package/dist/icons/Arrow/index.js +7 -1
  429. package/dist/icons/Arrow/index.js.map +1 -1
  430. package/dist/icons/Clock/index.d.ts +6 -0
  431. package/dist/icons/Clock/index.d.ts.map +1 -0
  432. package/dist/icons/Clock/index.js +18 -0
  433. package/dist/icons/Clock/index.js.map +1 -0
  434. package/dist/icons/Pin/index.d.ts +7 -0
  435. package/dist/icons/Pin/index.d.ts.map +1 -0
  436. package/dist/icons/Pin/index.js +23 -0
  437. package/dist/icons/Pin/index.js.map +1 -0
  438. package/dist/icons/Sidebar/index.d.ts.map +1 -1
  439. package/dist/icons/Sidebar/index.js +2 -0
  440. package/dist/icons/Sidebar/index.js.map +1 -1
  441. package/dist/icons/Table/index.css +1 -0
  442. package/dist/icons/Table/index.d.ts +7 -0
  443. package/dist/icons/Table/index.d.ts.map +1 -0
  444. package/dist/icons/Table/index.js +25 -0
  445. package/dist/icons/Table/index.js.map +1 -0
  446. package/dist/layouts/Root/getRootLayoutData.d.ts +3 -6
  447. package/dist/layouts/Root/getRootLayoutData.d.ts.map +1 -1
  448. package/dist/layouts/Root/getRootLayoutData.js +14 -13
  449. package/dist/layouts/Root/getRootLayoutData.js.map +1 -1
  450. package/dist/layouts/Root/index.d.ts +1 -1
  451. package/dist/layouts/Root/index.d.ts.map +1 -1
  452. package/dist/layouts/Root/index.js +11 -18
  453. package/dist/layouts/Root/index.js.map +1 -1
  454. package/dist/providers/ListQuery/getSearchWithListQuery.d.ts +7 -0
  455. package/dist/providers/ListQuery/getSearchWithListQuery.d.ts.map +1 -0
  456. package/dist/providers/ListQuery/getSearchWithListQuery.js +22 -0
  457. package/dist/providers/ListQuery/getSearchWithListQuery.js.map +1 -0
  458. package/dist/providers/ListQuery/index.d.ts.map +1 -1
  459. package/dist/providers/ListQuery/index.js +11 -12
  460. package/dist/providers/ListQuery/index.js.map +1 -1
  461. package/dist/providers/ListQuery/types.d.ts +0 -4
  462. package/dist/providers/ListQuery/types.d.ts.map +1 -1
  463. package/dist/providers/ListQuery/types.js.map +1 -1
  464. package/dist/providers/Preferences/index.d.ts +7 -1
  465. package/dist/providers/Preferences/index.d.ts.map +1 -1
  466. package/dist/providers/Preferences/index.js +62 -20
  467. package/dist/providers/Preferences/index.js.map +1 -1
  468. package/dist/providers/RouteCache/index.d.ts.map +1 -1
  469. package/dist/providers/RouteCache/index.js +38 -37
  470. package/dist/providers/RouteCache/index.js.map +1 -1
  471. package/dist/providers/TableColumns/RenderDefaultCell/index.d.ts.map +1 -1
  472. package/dist/providers/TableColumns/RenderDefaultCell/index.js +1 -2
  473. package/dist/providers/TableColumns/RenderDefaultCell/index.js.map +1 -1
  474. package/dist/providers/TableColumns/buildColumnState/index.d.ts +1 -0
  475. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  476. package/dist/providers/TableColumns/buildColumnState/index.js +2 -0
  477. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  478. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts +2 -1
  479. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
  480. package/dist/providers/TableColumns/buildColumnState/renderCell.js +12 -28
  481. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  482. package/dist/providers/TableColumns/types.d.ts +1 -34
  483. package/dist/providers/TableColumns/types.d.ts.map +1 -1
  484. package/dist/providers/TableColumns/types.js.map +1 -1
  485. package/dist/providers/ToastContainer/index.css +6 -7
  486. package/dist/providers/Translation/index.d.ts.map +1 -1
  487. package/dist/providers/Translation/index.js +11 -1
  488. package/dist/providers/Translation/index.js.map +1 -1
  489. package/dist/styles.css +163 -58
  490. package/dist/utilities/appendCacheTag.d.ts +1 -0
  491. package/dist/utilities/appendCacheTag.d.ts.map +1 -1
  492. package/dist/utilities/appendCacheTag.js +2 -1
  493. package/dist/utilities/appendCacheTag.js.map +1 -1
  494. package/dist/utilities/buildClientFieldSchemaMap/index.d.ts.map +1 -1
  495. package/dist/utilities/buildClientFieldSchemaMap/index.js +9 -4
  496. package/dist/utilities/buildClientFieldSchemaMap/index.js.map +1 -1
  497. package/dist/utilities/filterLLMInstructionsMenuItems.d.ts +9 -0
  498. package/dist/utilities/filterLLMInstructionsMenuItems.d.ts.map +1 -0
  499. package/dist/utilities/filterLLMInstructionsMenuItems.js +37 -0
  500. package/dist/utilities/filterLLMInstructionsMenuItems.js.map +1 -0
  501. package/dist/utilities/filterOutUploadFields.js +1 -1
  502. package/dist/utilities/filterOutUploadFields.js.map +1 -1
  503. package/dist/utilities/getClientConfig.d.ts +5 -1
  504. package/dist/utilities/getClientConfig.d.ts.map +1 -1
  505. package/dist/utilities/getClientConfig.js +2 -1
  506. package/dist/utilities/getClientConfig.js.map +1 -1
  507. package/dist/utilities/getClientSchemaMap.d.ts.map +1 -1
  508. package/dist/utilities/getClientSchemaMap.js +2 -1
  509. package/dist/utilities/getClientSchemaMap.js.map +1 -1
  510. package/dist/utilities/getDocumentThumbnail.d.ts +6 -0
  511. package/dist/utilities/getDocumentThumbnail.d.ts.map +1 -0
  512. package/dist/utilities/getDocumentThumbnail.js +27 -0
  513. package/dist/utilities/getDocumentThumbnail.js.map +1 -0
  514. package/dist/utilities/getDocumentThumbnailPopulate.d.ts +7 -0
  515. package/dist/utilities/getDocumentThumbnailPopulate.d.ts.map +1 -0
  516. package/dist/utilities/getDocumentThumbnailPopulate.js +23 -0
  517. package/dist/utilities/getDocumentThumbnailPopulate.js.map +1 -0
  518. package/dist/utilities/getDocumentThumbnailSelect.d.ts +7 -0
  519. package/dist/utilities/getDocumentThumbnailSelect.d.ts.map +1 -0
  520. package/dist/utilities/getDocumentThumbnailSelect.js +24 -0
  521. package/dist/utilities/getDocumentThumbnailSelect.js.map +1 -0
  522. package/dist/utilities/hierarchyCollectionRestrictions.d.ts +15 -0
  523. package/dist/utilities/hierarchyCollectionRestrictions.d.ts.map +1 -0
  524. package/dist/utilities/hierarchyCollectionRestrictions.js +17 -0
  525. package/dist/utilities/hierarchyCollectionRestrictions.js.map +1 -0
  526. package/dist/utilities/renderTable.d.ts +2 -1
  527. package/dist/utilities/renderTable.d.ts.map +1 -1
  528. package/dist/utilities/renderTable.js +2 -0
  529. package/dist/utilities/renderTable.js.map +1 -1
  530. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  531. package/dist/utilities/schedulePublishHandler.js +3 -0
  532. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  533. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  534. package/dist/utilities/serverFunctionRegistry.js +2 -0
  535. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  536. package/dist/utilities/traverseForLocalizedFields.d.ts +7 -2
  537. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  538. package/dist/utilities/traverseForLocalizedFields.js +22 -8
  539. package/dist/utilities/traverseForLocalizedFields.js.map +1 -1
  540. package/dist/views/API/index.css +1 -2
  541. package/dist/views/CreateFirstUser/index.css +0 -2
  542. package/dist/views/CreateFirstUser/index.d.ts.map +1 -1
  543. package/dist/views/CreateFirstUser/index.js +4 -2
  544. package/dist/views/CreateFirstUser/index.js.map +1 -1
  545. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  546. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +31 -21
  547. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  548. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +1 -2
  549. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  550. package/dist/views/Dashboard/Default/ModularDashboard/index.css +4 -3
  551. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts +1 -1
  552. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts.map +1 -1
  553. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +16 -4
  554. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -1
  555. package/dist/views/Document/index.js +1 -1
  556. package/dist/views/Document/index.js.map +1 -1
  557. package/dist/views/Document/renderDocumentSlots.d.ts +1 -1
  558. package/dist/views/Document/renderDocumentSlots.d.ts.map +1 -1
  559. package/dist/views/Document/renderDocumentSlots.js +10 -3
  560. package/dist/views/Document/renderDocumentSlots.js.map +1 -1
  561. package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
  562. package/dist/views/Edit/Auth/APIKey.js +1 -0
  563. package/dist/views/Edit/Auth/APIKey.js.map +1 -1
  564. package/dist/views/Edit/Auth/index.css +4 -5
  565. package/dist/views/Edit/index.css +26 -0
  566. package/dist/views/Edit/index.d.ts.map +1 -1
  567. package/dist/views/Edit/index.js +1 -1
  568. package/dist/views/Edit/index.js.map +1 -1
  569. package/dist/views/ForgotPassword/index.d.ts.map +1 -1
  570. package/dist/views/ForgotPassword/index.js +1 -3
  571. package/dist/views/ForgotPassword/index.js.map +1 -1
  572. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -1
  573. package/dist/views/HierarchyList/DocumentListSelection/index.js +103 -105
  574. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
  575. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts +4 -1
  576. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts.map +1 -1
  577. package/dist/views/HierarchyList/HierarchyListHeader/index.js +26 -14
  578. package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -1
  579. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts.map +1 -1
  580. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js +44 -86
  581. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +1 -1
  582. package/dist/views/HierarchyList/HierarchyTable/index.css +8 -31
  583. package/dist/views/HierarchyList/HierarchyTable/index.d.ts +3 -1
  584. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
  585. package/dist/views/HierarchyList/HierarchyTable/index.js +78 -5
  586. package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
  587. package/dist/views/HierarchyList/getHierarchyListURL.d.ts +7 -0
  588. package/dist/views/HierarchyList/getHierarchyListURL.d.ts.map +1 -0
  589. package/dist/views/HierarchyList/getHierarchyListURL.js +22 -0
  590. package/dist/views/HierarchyList/getHierarchyListURL.js.map +1 -0
  591. package/dist/views/HierarchyList/index.d.ts.map +1 -1
  592. package/dist/views/HierarchyList/index.js +35 -11
  593. package/dist/views/HierarchyList/index.js.map +1 -1
  594. package/dist/views/List/DocumentGrid/index.d.ts +17 -0
  595. package/dist/views/List/DocumentGrid/index.d.ts.map +1 -0
  596. package/dist/views/List/DocumentGrid/index.js +117 -0
  597. package/dist/views/List/DocumentGrid/index.js.map +1 -0
  598. package/dist/views/List/GroupedDocumentGrid/index.css +17 -0
  599. package/dist/views/List/GroupedDocumentGrid/index.d.ts +14 -0
  600. package/dist/views/List/GroupedDocumentGrid/index.d.ts.map +1 -0
  601. package/dist/views/List/GroupedDocumentGrid/index.js +99 -0
  602. package/dist/views/List/GroupedDocumentGrid/index.js.map +1 -0
  603. package/dist/views/List/ListHeader/index.css +4 -5
  604. package/dist/views/List/ListHeader/index.d.ts +3 -1
  605. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  606. package/dist/views/List/ListHeader/index.js +15 -4
  607. package/dist/views/List/ListHeader/index.js.map +1 -1
  608. package/dist/views/List/enrichDocsWithVersionStatus.d.ts.map +1 -1
  609. package/dist/views/List/enrichDocsWithVersionStatus.js +3 -1
  610. package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
  611. package/dist/views/List/getDocumentListItemURL.d.ts +9 -0
  612. package/dist/views/List/getDocumentListItemURL.d.ts.map +1 -0
  613. package/dist/views/List/getDocumentListItemURL.js +23 -0
  614. package/dist/views/List/getDocumentListItemURL.js.map +1 -0
  615. package/dist/views/List/handleGroupBy.d.ts +6 -2
  616. package/dist/views/List/handleGroupBy.d.ts.map +1 -1
  617. package/dist/views/List/handleGroupBy.js +13 -3
  618. package/dist/views/List/handleGroupBy.js.map +1 -1
  619. package/dist/views/List/index.client.d.ts.map +1 -1
  620. package/dist/views/List/index.client.js +63 -18
  621. package/dist/views/List/index.client.js.map +1 -1
  622. package/dist/views/List/index.css +1 -1
  623. package/dist/views/List/index.d.ts.map +1 -1
  624. package/dist/views/List/index.js +91 -11
  625. package/dist/views/List/index.js.map +1 -1
  626. package/dist/views/List/renderListViewSlots.d.ts +3 -2
  627. package/dist/views/List/renderListViewSlots.d.ts.map +1 -1
  628. package/dist/views/List/renderListViewSlots.js +12 -4
  629. package/dist/views/List/renderListViewSlots.js.map +1 -1
  630. package/dist/views/List/resolveDocumentListItemURL.d.ts +11 -0
  631. package/dist/views/List/resolveDocumentListItemURL.d.ts.map +1 -0
  632. package/dist/views/List/resolveDocumentListItemURL.js +30 -0
  633. package/dist/views/List/resolveDocumentListItemURL.js.map +1 -0
  634. package/dist/views/NotFound/index.css +0 -2
  635. package/dist/views/ResetPassword/index.d.ts.map +1 -1
  636. package/dist/views/ResetPassword/index.js +1 -3
  637. package/dist/views/ResetPassword/index.js.map +1 -1
  638. package/dist/views/Root/getRouteData.d.ts +1 -8
  639. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  640. package/dist/views/Root/getRouteData.js +3 -12
  641. package/dist/views/Root/getRouteData.js.map +1 -1
  642. package/dist/views/Unauthorized/index.css +0 -2
  643. package/dist/views/Unauthorized/index.d.ts.map +1 -1
  644. package/dist/views/Unauthorized/index.js +2 -1
  645. package/dist/views/Unauthorized/index.js.map +1 -1
  646. package/dist/views/Version/Default/index.css +7 -11
  647. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.css +0 -1
  648. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +2 -12
  649. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
  650. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.css +0 -1
  651. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js +2 -2
  652. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js.map +1 -1
  653. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js +2 -2
  654. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -1
  655. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js +2 -2
  656. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -1
  657. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js +2 -2
  658. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -1
  659. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.css +3 -4
  660. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +2 -2
  661. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
  662. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.css +0 -1
  663. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +2 -2
  664. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
  665. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts.map +1 -1
  666. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +2 -2
  667. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
  668. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +8 -8
  669. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
  670. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +2 -2
  671. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
  672. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.css +0 -1
  673. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.d.ts.map +1 -1
  674. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js +2 -2
  675. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -1
  676. package/dist/views/Versions/VersionPillLabel/index.css +1 -2
  677. package/dist/views/Versions/index.css +1 -1
  678. package/dist/widgets/CollectionCards/index.css +0 -1
  679. package/dist/widgets/CollectionQuery/index.css +4 -6
  680. package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts.map +1 -1
  681. package/dist/widgets/RecentlyViewed/CollectionsField/index.js +31 -5
  682. package/dist/widgets/RecentlyViewed/CollectionsField/index.js.map +1 -1
  683. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.css +41 -0
  684. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.d.ts +19 -0
  685. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.d.ts.map +1 -0
  686. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.js +121 -0
  687. package/dist/widgets/RecentlyViewed/PinDocumentPicker/index.js.map +1 -0
  688. package/dist/widgets/RecentlyViewed/getDocuments.d.ts +20 -0
  689. package/dist/widgets/RecentlyViewed/getDocuments.d.ts.map +1 -0
  690. package/dist/widgets/RecentlyViewed/getDocuments.js +251 -0
  691. package/dist/widgets/RecentlyViewed/getDocuments.js.map +1 -0
  692. package/dist/widgets/RecentlyViewed/index.client.d.ts +41 -0
  693. package/dist/widgets/RecentlyViewed/index.client.d.ts.map +1 -0
  694. package/dist/widgets/RecentlyViewed/index.client.js +404 -0
  695. package/dist/widgets/RecentlyViewed/index.client.js.map +1 -0
  696. package/dist/widgets/RecentlyViewed/index.css +352 -0
  697. package/dist/widgets/RecentlyViewed/index.d.ts +1 -1
  698. package/dist/widgets/RecentlyViewed/index.d.ts.map +1 -1
  699. package/dist/widgets/RecentlyViewed/index.js +33 -134
  700. package/dist/widgets/RecentlyViewed/index.js.map +1 -1
  701. package/dist/widgets/RecentlyViewed/pinnedPreferences.d.ts +18 -0
  702. package/dist/widgets/RecentlyViewed/pinnedPreferences.d.ts.map +1 -0
  703. package/dist/widgets/RecentlyViewed/pinnedPreferences.js +81 -0
  704. package/dist/widgets/RecentlyViewed/pinnedPreferences.js.map +1 -0
  705. package/dist/widgets/RecentlyViewed/recents.d.ts +8 -0
  706. package/dist/widgets/RecentlyViewed/recents.d.ts.map +1 -0
  707. package/dist/widgets/RecentlyViewed/recents.js +19 -0
  708. package/dist/widgets/RecentlyViewed/recents.js.map +1 -0
  709. package/dist/widgets/Welcome/index.css +16 -9
  710. package/dist/widgets/WidgetCard/index.css +4 -8
  711. package/package.json +8 -8
  712. package/dist/utilities/dateLocales.d.ts +0 -30
  713. package/dist/utilities/dateLocales.d.ts.map +0 -1
  714. package/dist/utilities/dateLocales.js +0 -57
  715. package/dist/utilities/dateLocales.js.map +0 -1
@@ -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 if (!event.over) {\n setActiveDragId(null)\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 setActiveDragId(null)\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","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,11 +1,12 @@
1
1
  @layer payload-default {
2
2
  .modular-dashboard {
3
- margin: calc(var(--spacer-2-5) / -2);
4
- width: calc(100% + var(--spacer-2-5));
3
+ margin: calc(var(--spacer-4) / -2);
4
+ width: calc(100% + var(--spacer-4));
5
+ padding-block-end: var(--spacer-6);
5
6
  }
6
7
 
7
8
  .modular-dashboard .widget {
8
- padding: calc(var(--spacer-2-5) / 2);
9
+ padding: calc(var(--spacer-4) / 2);
9
10
  }
10
11
 
11
12
  .modular-dashboard .widget-content {
@@ -15,7 +15,7 @@ export declare function useDashboardLayout(initialLayout: WidgetInstanceClient[]
15
15
  resetLayout: () => Promise<void>;
16
16
  resizeWidget: (widgetId: string, newWidth: WidgetWidth) => void;
17
17
  saveLayout: () => Promise<void>;
18
- setIsEditing: React.Dispatch<React.SetStateAction<boolean>>;
18
+ setIsEditing: (shouldEdit: boolean) => void;
19
19
  updateWidgetData: (widgetId: string, data: Record<string, unknown>) => void;
20
20
  };
21
21
  //# sourceMappingURL=useDashboardLayout.d.ts.map
@@ -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;AAWzE,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,EAAE;4BAuFvD,MAAM;;;;6BAmDR,MAAM;;iDAhEgB;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;;6BA0EpE,MAAM,YAAY,WAAW;;;iCAsB7B,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;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"}
@@ -5,13 +5,19 @@ import { toast } from 'sonner';
5
5
  import { ConfirmationModal } from '../../../../elements/ConfirmationModal/index.js';
6
6
  import { useModal } from '../../../../elements/Modal/index.js';
7
7
  import { useConfig } from '../../../../providers/Config/index.js';
8
+ import { useEmbed } from '../../../../providers/Embed/index.js';
8
9
  import { usePreferences } from '../../../../providers/Preferences/index.js';
9
10
  import { useServerFunctions } from '../../../../providers/ServerFunctions/index.js';
10
11
  import { useTranslation } from '../../../../providers/Translation/index.js';
11
12
  import { RenderWidget } from './renderWidget/RenderWidget.js';
12
13
  export function useDashboardLayout(initialLayout) {
13
14
  const setLayoutPreference = useSetLayoutPreference();
14
- const [isEditing, setIsEditing] = useState(false);
15
+ const {
16
+ isEmbedded
17
+ } = useEmbed();
18
+ const [isEditingState, setIsEditingState] = useState(false);
19
+ const isEditing = !isEmbedded && isEditingState;
20
+ const setIsEditing = useCallback(shouldEdit => setIsEditingState(shouldEdit && !isEmbedded), [isEmbedded]);
15
21
  const {
16
22
  widgets = []
17
23
  } = useConfig().config.admin.dashboard ?? {};
@@ -26,6 +32,12 @@ export function useDashboardLayout(initialLayout) {
26
32
  const {
27
33
  t
28
34
  } = useTranslation();
35
+ useEffect(() => {
36
+ if (isEmbedded) {
37
+ setIsEditingState(false);
38
+ setCurrentLayout(initialLayout);
39
+ }
40
+ }, [isEmbedded, initialLayout]);
29
41
  // Sync state when initialLayout prop changes (e.g., when query params change and server component re-renders)
30
42
  useEffect(() => {
31
43
  if (!isEditing) {
@@ -43,7 +55,7 @@ export function useDashboardLayout(initialLayout) {
43
55
  setIsEditing(true);
44
56
  toast.error(t('error:failedToSaveLayout'));
45
57
  }
46
- }, [setLayoutPreference, currentLayout]);
58
+ }, [setLayoutPreference, currentLayout, setIsEditing]);
47
59
  const resetLayout = useCallback(async () => {
48
60
  try {
49
61
  await setLayoutPreference(null);
@@ -56,11 +68,11 @@ export function useDashboardLayout(initialLayout) {
56
68
  } catch {
57
69
  toast.error(t('error:failedToResetLayout'));
58
70
  }
59
- }, [setLayoutPreference, serverFunction]);
71
+ }, [setLayoutPreference, serverFunction, setIsEditing]);
60
72
  const performCancel = useCallback(() => {
61
73
  setCurrentLayout(initialLayout);
62
74
  setIsEditing(false);
63
- }, [initialLayout]);
75
+ }, [initialLayout, setIsEditing]);
64
76
  const cancel = useCallback(() => {
65
77
  // Check if layout has changed
66
78
  const hasChanges = currentLayout.length !== initialLayout.length || currentLayout.some((widget, index) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboardLayout.js","names":["arrayMove","PREFERENCE_KEYS","React","useCallback","useEffect","useState","toast","ConfirmationModal","useModal","useConfig","usePreferences","useServerFunctions","useTranslation","RenderWidget","useDashboardLayout","initialLayout","setLayoutPreference","useSetLayoutPreference","isEditing","setIsEditing","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 { 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 [isEditing, setIsEditing] = useState(false)\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 // 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])\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])\n\n const performCancel = useCallback(() => {\n setCurrentLayout(initialLayout)\n setIsEditing(false)\n }, [initialLayout])\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","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":[]}
@@ -300,7 +300,7 @@ export const renderDocument = async ({
300
300
  throw new Error('not-found');
301
301
  }
302
302
  }
303
- const documentSlots = renderDocumentSlots({
303
+ const documentSlots = await renderDocumentSlots({
304
304
  id,
305
305
  collectionConfig,
306
306
  doc: doc,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isolateObjectProperty","logError","formatAdminURL","hasAutosaveEnabled","hasDraftsEnabled","React","DocumentHeader","RenderServerComponent","DocumentInfoProvider","EditDepthProvider","HydrateAuthProvider","LivePreviewProvider","buildFormState","getDocPreferences","getDocumentData","getDocumentPermissions","getHasScheduledPublish","getIsLocked","getVersions","handleLivePreview","handlePreview","isEditing","getIsEditing","getPreferences","NotFoundView","UnauthorizedViewWithGutter","getDocumentView","recordRecentlyViewed","renderDocumentSlots","renderDocument","disableActions","documentSubViewType","drawerSlug","importMap","initialData","initPageResult","overrideEntityVisibility","params","redirectAfterCreate","redirectAfterDelete","redirectAfterDuplicate","redirectAfterRestore","searchParams","user","userWithReadAccess","versions","viewType","collectionConfig","docID","idFromArgs","globalConfig","locale","permissions","req","i18n","payload","config","routes","admin","adminRoute","api","apiRoute","visibleEntities","segments","Array","isArray","collectionSlug","slug","undefined","globalSlug","id","doc","redirectURL","path","encodeURIComponent","server","redirect","Error","isTrashedDoc","Boolean","deletedAt","reqForPermissions","transactionID","reqForLockCheck","docPreferences","docPermissions","hasDeletePermission","hasPublishPermission","hasSavePermission","hasTrashPermission","currentEditor","isLocked","lastUpdateTime","entityPreferences","Promise","all","data","collection","operation","recentlyViewedPromise","hasPublishedDoc","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","state","formState","hasScheduledPublish","code","fallbackLocale","readOnly","renderAllFields","schemaPath","skipValidation","documentViewServerProps","routeSegments","collections","find","visibleSlug","globals","formattedParams","URLSearchParams","append","apiQueryParams","toString","apiURL","View","showHeader","RootViewOverride","components","views","edit","root","Component","shouldAutosave","validateDraftData","drafts","validate","create","depth","draft","overrideAccess","documentSlots","Description","clientProps","isLivePreviewEnabled","livePreviewConfig","livePreviewURL","isPreviewEnabled","previewURL","Document","_jsx","initialState","isTrashed","_jsxs","breakpoints","isLivePreviewing","value","editViewType","openByDefault","typeofLivePreviewURL","url","AfterHeader","serverProps","DocumentView","props","RenderedDocument","error","message","startsWith","err","notFound"],"sources":["../../../src/views/Document/index.tsx"],"sourcesContent":["import type {\n AdminViewServerProps,\n CollectionPreferences,\n Data,\n DocumentViewClientProps,\n DocumentViewServerProps,\n DocumentViewServerPropsOnly,\n EditViewComponent,\n PayloadComponent,\n RenderDocumentVersionsProperties,\n} from 'payload'\n\nimport { isolateObjectProperty, logError } from 'payload'\nimport { formatAdminURL, hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared'\nimport React from 'react'\n\nimport { DocumentHeader } from '../../elements/DocumentHeader/index.js'\nimport { RenderServerComponent } from '../../elements/RenderServerComponent/index.js'\n/* eslint-disable payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds */\nimport {\n DocumentInfoProvider,\n EditDepthProvider,\n HydrateAuthProvider,\n LivePreviewProvider,\n} from '../../exports/client/index.js'\n/* eslint-enable payload/no-imports-from-exports-dir */\nimport { buildFormState } from '../../utilities/buildFormState.js'\nimport { getDocPreferences } from '../../utilities/getDocPreferences.js'\nimport { getDocumentData } from '../../utilities/getDocumentData.js'\nimport { getDocumentPermissions } from '../../utilities/getDocumentPermissions.js'\nimport { getHasScheduledPublish } from '../../utilities/getHasScheduledPublish.js'\nimport { getIsLocked } from '../../utilities/getIsLocked.js'\nimport { getVersions } from '../../utilities/getVersions.js'\nimport { handleLivePreview } from '../../utilities/handleLivePreview.js'\nimport { handlePreview } from '../../utilities/handlePreview.js'\nimport { isEditing as getIsEditing } from '../../utilities/isEditing.js'\nimport { getPreferences } from '../../utilities/upsertPreferences.js'\nimport { NotFoundView } from '../NotFound/index.js'\nimport { UnauthorizedViewWithGutter } from '../Unauthorized/index.js'\nimport { getDocumentView } from './getDocumentView.js'\nimport { recordRecentlyViewed } from './recordRecentlyViewed.js'\nimport { renderDocumentSlots } from './renderDocumentSlots.js'\n\nexport { getDocumentView } from './getDocumentView.js'\n\nexport type ViewToRender =\n | EditViewComponent\n | PayloadComponent<DocumentViewServerProps>\n | React.FC\n | React.FC<DocumentViewClientProps>\n\n/**\n * This function is responsible for rendering\n * an Edit Document view on the server for both:\n * - default document edit views\n * - on-demand edit views within drawers\n */\nexport const renderDocument = async ({\n disableActions,\n documentSubViewType,\n drawerSlug,\n importMap,\n initialData,\n initPageResult,\n overrideEntityVisibility,\n params,\n redirectAfterCreate,\n redirectAfterDelete,\n redirectAfterDuplicate,\n redirectAfterRestore,\n searchParams,\n user: userWithReadAccess,\n versions,\n viewType,\n}: {\n drawerSlug?: string\n overrideEntityVisibility?: boolean\n readonly redirectAfterCreate?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly redirectAfterRestore?: boolean\n versions?: RenderDocumentVersionsProperties\n} & AdminViewServerProps): Promise<{\n data: Data\n Document: React.ReactNode\n}> => {\n const {\n collectionConfig,\n docID: idFromArgs,\n globalConfig,\n locale,\n permissions,\n req,\n req: {\n i18n,\n payload,\n payload: {\n config,\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n },\n },\n user,\n },\n visibleEntities,\n } = initPageResult\n\n const segments = Array.isArray(params?.segments) ? params.segments : []\n const collectionSlug = collectionConfig?.slug || undefined\n const globalSlug = globalConfig?.slug || undefined\n let isEditing = getIsEditing({ id: idFromArgs, collectionSlug, globalSlug })\n\n // Fetch the doc required for the view\n let doc =\n !idFromArgs && !globalSlug\n ? initialData || null\n : await getDocumentData({\n id: idFromArgs,\n collectionSlug,\n globalSlug,\n locale,\n payload,\n req,\n segments,\n user,\n })\n\n if (isEditing && !doc) {\n // If it's a collection document that doesn't exist, redirect to collection list\n if (collectionSlug) {\n const redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}?notFound=${encodeURIComponent(idFromArgs)}`,\n })\n req.server.redirect(redirectURL)\n } else {\n // For globals or other cases, keep the 404 behavior\n throw new Error('not-found')\n }\n }\n\n const isTrashedDoc = Boolean(doc && 'deletedAt' in doc && typeof doc?.deletedAt === 'string')\n\n // CRITICAL FIX FOR TRANSACTION RACE CONDITION:\n // When running parallel operations with Promise.all, if they share the same req object\n // and one operation calls initTransaction() which MUTATES req.transactionID, that mutation\n // is visible to all parallel operations. This causes:\n // 1. Operation A (e.g., getDocumentPermissions → docAccessOperation) calls initTransaction()\n // which sets req.transactionID = Promise, then resolves it to a UUID\n // 2. Operation B (e.g., getIsLocked) running in parallel receives the SAME req with the mutated transactionID\n // 3. Operation A (does not even know that Operation B even exists and is stil using the transactionID) commits/ends its transaction\n // 4. Operation B tries to use the now-expired session → MongoExpiredSessionError!\n //\n // Solution: Use isolateObjectProperty to create a Proxy that isolates the 'transactionID' property.\n // This allows each operation to have its own transactionID without affecting the parent req.\n // If parent req already has a transaction, preserve it (don't isolate), since this\n // issue only arises when one of the operations calls initTransaction() themselves -\n // because then, that operation will also try to commit/end the transaction itself.\n\n // If the transactionID is already set, the parallel operations will not try to\n // commit/end the transaction themselves, so we don't need to isolate the\n // transactionID property.\n const reqForPermissions = req.transactionID ? req : isolateObjectProperty(req, 'transactionID')\n const reqForLockCheck = req.transactionID ? req : isolateObjectProperty(req, 'transactionID')\n\n const [\n docPreferences,\n {\n docPermissions,\n hasDeletePermission,\n hasPublishPermission,\n hasSavePermission,\n hasTrashPermission,\n },\n { currentEditor, isLocked, lastUpdateTime },\n entityPreferences,\n ] = await Promise.all([\n // Get document preferences\n getDocPreferences({\n id: idFromArgs,\n collectionSlug,\n globalSlug,\n payload,\n user,\n }),\n\n // Get permissions - isolated transactionID prevents cross-contamination\n getDocumentPermissions({\n id: idFromArgs,\n collectionConfig,\n data: doc,\n globalConfig,\n req: reqForPermissions,\n }),\n\n // Fetch document lock state - isolated transactionID prevents cross-contamination\n getIsLocked({\n id: idFromArgs,\n collectionConfig,\n globalConfig,\n isEditing,\n req: reqForLockCheck,\n }),\n\n // get entity preferences\n getPreferences<CollectionPreferences>(\n collectionSlug ? `collection-${collectionSlug}` : `global-${globalSlug}`,\n payload,\n req.user.id,\n req.user.collection,\n ),\n ])\n\n const operation = (collectionSlug && idFromArgs) || globalSlug ? 'update' : 'create'\n\n // Record the document as recently viewed (collections only, never on the create route or for\n // trashed docs). Runs concurrently with the work below and never throws.\n const recentlyViewedPromise =\n collectionSlug && idFromArgs && doc && !isTrashedDoc\n ? recordRecentlyViewed({ id: idFromArgs, collectionSlug, req })\n : undefined\n\n const [\n { hasPublishedDoc, mostRecentVersionIsAutosaved, unpublishedVersionCount, versionCount },\n { state: formState },\n hasScheduledPublish,\n ] = await Promise.all([\n getVersions({\n id: idFromArgs,\n collectionConfig,\n doc,\n docPermissions,\n globalConfig,\n locale: locale?.code,\n payload,\n user,\n }),\n buildFormState({\n id: idFromArgs,\n collectionSlug,\n data: doc,\n docPermissions,\n docPreferences,\n fallbackLocale: false,\n globalSlug,\n locale: locale?.code,\n operation,\n readOnly: isTrashedDoc || isLocked,\n renderAllFields: true,\n req,\n schemaPath: collectionSlug || globalSlug,\n skipValidation: true,\n user: userWithReadAccess,\n }),\n getHasScheduledPublish({\n id: idFromArgs,\n collectionConfig,\n globalConfig,\n hasPublishPermission,\n payload,\n }),\n ])\n\n await recentlyViewedPromise\n\n const documentViewServerProps: DocumentViewServerPropsOnly = {\n doc,\n hasPublishedDoc,\n i18n,\n initPageResult,\n locale,\n params,\n payload,\n permissions,\n routeSegments: segments,\n searchParams,\n server: req.server,\n user: userWithReadAccess,\n versions,\n }\n\n if (\n !overrideEntityVisibility &&\n ((collectionSlug &&\n !visibleEntities?.collections?.find((visibleSlug) => visibleSlug === collectionSlug)) ||\n (globalSlug && !visibleEntities?.globals?.find((visibleSlug) => visibleSlug === globalSlug)))\n ) {\n throw new Error('not-found')\n }\n\n const formattedParams = new URLSearchParams()\n\n if (hasDraftsEnabled(collectionConfig || globalConfig)) {\n formattedParams.append('draft', 'true')\n }\n\n if (locale?.code) {\n formattedParams.append('locale', locale.code)\n }\n\n const apiQueryParams = `?${formattedParams.toString()}`\n\n const apiURL = formatAdminURL({\n apiRoute,\n path: collectionSlug\n ? `/${collectionSlug}/${idFromArgs}${apiQueryParams}`\n : globalSlug\n ? `/${globalSlug}${apiQueryParams}`\n : '',\n })\n\n let View: ViewToRender = null\n\n let showHeader = true\n\n const RootViewOverride =\n collectionConfig?.admin?.components?.views?.edit?.root &&\n 'Component' in collectionConfig.admin.components.views.edit.root\n ? collectionConfig?.admin?.components?.views?.edit?.root?.Component\n : globalConfig?.admin?.components?.views?.edit?.root &&\n 'Component' in globalConfig.admin.components.views.edit.root\n ? globalConfig?.admin?.components?.views?.edit?.root?.Component\n : null\n\n if (RootViewOverride) {\n View = RootViewOverride\n showHeader = false\n } else {\n ;({ View } = getDocumentView({\n collectionConfig,\n config,\n docPermissions,\n globalConfig,\n routeSegments: segments,\n }))\n\n if (View === UnauthorizedViewWithGutter) {\n showHeader = false\n }\n }\n\n if (!View) {\n View = NotFoundView as React.FC<AdminViewServerProps>\n }\n\n /**\n * Handle case where autoSave is enabled and the document is being created\n * => create document and redirect\n */\n const shouldAutosave = hasSavePermission && hasAutosaveEnabled(collectionConfig || globalConfig)\n\n const validateDraftData =\n collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.validate\n\n let id = idFromArgs\n\n if (shouldAutosave && !validateDraftData && !idFromArgs && collectionSlug) {\n doc = await payload.create({\n collection: collectionSlug,\n data: initialData || {},\n depth: 0,\n draft: true,\n fallbackLocale: false,\n locale: locale?.code,\n overrideAccess: false,\n req,\n user,\n })\n\n if (doc?.id) {\n id = doc.id\n isEditing = getIsEditing({ id: doc.id, collectionSlug, globalSlug })\n\n if (!drawerSlug && redirectAfterCreate !== false) {\n const redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${doc.id}`,\n })\n\n req.server.redirect(redirectURL)\n }\n } else {\n throw new Error('not-found')\n }\n }\n\n const documentSlots = renderDocumentSlots({\n id,\n collectionConfig,\n doc: doc as Record<string, unknown>,\n globalConfig,\n hasSavePermission,\n locale,\n permissions,\n req,\n user: userWithReadAccess,\n })\n\n // Extract Description from documentSlots to pass to DocumentHeader\n const { Description } = documentSlots\n\n const clientProps: DocumentViewClientProps = {\n formState,\n ...documentSlots,\n documentSubViewType,\n viewType,\n }\n\n const { isLivePreviewEnabled, livePreviewConfig, livePreviewURL } = await handleLivePreview({\n collectionSlug,\n config,\n data: doc,\n globalSlug,\n operation,\n req,\n })\n\n const { isPreviewEnabled, previewURL } = await handlePreview({\n collectionSlug,\n config,\n data: doc,\n globalSlug,\n operation,\n req,\n })\n\n return {\n data: doc,\n Document: (\n <DocumentInfoProvider\n apiURL={apiURL}\n collectionSlug={collectionConfig?.slug}\n currentEditor={currentEditor}\n disableActions={disableActions ?? false}\n docPermissions={docPermissions}\n globalSlug={globalConfig?.slug}\n hasDeletePermission={hasDeletePermission}\n hasPublishedDoc={hasPublishedDoc}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n hasScheduledPublish={hasScheduledPublish}\n hasTrashPermission={hasTrashPermission}\n id={id}\n initialData={doc}\n initialState={formState}\n isEditing={isEditing}\n isLocked={isLocked}\n isTrashed={isTrashedDoc}\n key={locale?.code}\n lastUpdateTime={lastUpdateTime}\n mostRecentVersionIsAutosaved={mostRecentVersionIsAutosaved}\n redirectAfterCreate={redirectAfterCreate}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n redirectAfterRestore={redirectAfterRestore}\n unpublishedVersionCount={unpublishedVersionCount}\n versionCount={versionCount}\n >\n <LivePreviewProvider\n breakpoints={livePreviewConfig?.breakpoints}\n isLivePreviewEnabled={isLivePreviewEnabled && operation !== 'create'}\n isLivePreviewing={Boolean(\n (entityPreferences?.value?.editViewType === undefined\n ? livePreviewConfig?.openByDefault\n : entityPreferences.value.editViewType === 'live-preview') && livePreviewURL,\n )}\n isPreviewEnabled={Boolean(isPreviewEnabled)}\n previewURL={previewURL}\n typeofLivePreviewURL={typeof livePreviewConfig?.url as 'function' | 'string' | undefined}\n url={livePreviewURL}\n >\n {showHeader && !drawerSlug && (\n <DocumentHeader\n AfterHeader={Description}\n collectionConfig={collectionConfig}\n globalConfig={globalConfig}\n permissions={permissions}\n req={req}\n user={userWithReadAccess}\n />\n )}\n <HydrateAuthProvider permissions={permissions} />\n <EditDepthProvider>\n {RenderServerComponent({\n clientProps,\n Component: View,\n importMap,\n serverProps: documentViewServerProps,\n })}\n </EditDepthProvider>\n </LivePreviewProvider>\n </DocumentInfoProvider>\n ),\n }\n}\n\nexport async function DocumentView(props: AdminViewServerProps) {\n try {\n const { Document: RenderedDocument } = await renderDocument(props)\n return RenderedDocument\n } catch (error) {\n if (error?.message === 'NEXT_REDIRECT') {\n throw error\n }\n\n // The TanStack adapter's `req.server.redirect()` throws `redirect:<url>` as a\n // control-flow signal — the target is already recorded on `req.server` and\n // honored upstream in `loadAdminPage`. It isn't a real error, so swallow it\n // without logging, mirroring the `NEXT_REDIRECT` guard above.\n if (error?.message?.startsWith('redirect:')) {\n return\n }\n\n logError({ err: error, payload: props.initPageResult.req.payload })\n\n if (error.message === 'not-found') {\n props.initPageResult.req.server.notFound()\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["isolateObjectProperty","logError","formatAdminURL","hasAutosaveEnabled","hasDraftsEnabled","React","DocumentHeader","RenderServerComponent","DocumentInfoProvider","EditDepthProvider","HydrateAuthProvider","LivePreviewProvider","buildFormState","getDocPreferences","getDocumentData","getDocumentPermissions","getHasScheduledPublish","getIsLocked","getVersions","handleLivePreview","handlePreview","isEditing","getIsEditing","getPreferences","NotFoundView","UnauthorizedViewWithGutter","getDocumentView","recordRecentlyViewed","renderDocumentSlots","renderDocument","disableActions","documentSubViewType","drawerSlug","importMap","initialData","initPageResult","overrideEntityVisibility","params","redirectAfterCreate","redirectAfterDelete","redirectAfterDuplicate","redirectAfterRestore","searchParams","user","userWithReadAccess","versions","viewType","collectionConfig","docID","idFromArgs","globalConfig","locale","permissions","req","i18n","payload","config","routes","admin","adminRoute","api","apiRoute","visibleEntities","segments","Array","isArray","collectionSlug","slug","undefined","globalSlug","id","doc","redirectURL","path","encodeURIComponent","server","redirect","Error","isTrashedDoc","Boolean","deletedAt","reqForPermissions","transactionID","reqForLockCheck","docPreferences","docPermissions","hasDeletePermission","hasPublishPermission","hasSavePermission","hasTrashPermission","currentEditor","isLocked","lastUpdateTime","entityPreferences","Promise","all","data","collection","operation","recentlyViewedPromise","hasPublishedDoc","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","state","formState","hasScheduledPublish","code","fallbackLocale","readOnly","renderAllFields","schemaPath","skipValidation","documentViewServerProps","routeSegments","collections","find","visibleSlug","globals","formattedParams","URLSearchParams","append","apiQueryParams","toString","apiURL","View","showHeader","RootViewOverride","components","views","edit","root","Component","shouldAutosave","validateDraftData","drafts","validate","create","depth","draft","overrideAccess","documentSlots","Description","clientProps","isLivePreviewEnabled","livePreviewConfig","livePreviewURL","isPreviewEnabled","previewURL","Document","_jsx","initialState","isTrashed","_jsxs","breakpoints","isLivePreviewing","value","editViewType","openByDefault","typeofLivePreviewURL","url","AfterHeader","serverProps","DocumentView","props","RenderedDocument","error","message","startsWith","err","notFound"],"sources":["../../../src/views/Document/index.tsx"],"sourcesContent":["import type {\n AdminViewServerProps,\n CollectionPreferences,\n Data,\n DocumentViewClientProps,\n DocumentViewServerProps,\n DocumentViewServerPropsOnly,\n EditViewComponent,\n PayloadComponent,\n RenderDocumentVersionsProperties,\n} from 'payload'\n\nimport { isolateObjectProperty, logError } from 'payload'\nimport { formatAdminURL, hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared'\nimport React from 'react'\n\nimport { DocumentHeader } from '../../elements/DocumentHeader/index.js'\nimport { RenderServerComponent } from '../../elements/RenderServerComponent/index.js'\n/* eslint-disable payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds */\nimport {\n DocumentInfoProvider,\n EditDepthProvider,\n HydrateAuthProvider,\n LivePreviewProvider,\n} from '../../exports/client/index.js'\n/* eslint-enable payload/no-imports-from-exports-dir */\nimport { buildFormState } from '../../utilities/buildFormState.js'\nimport { getDocPreferences } from '../../utilities/getDocPreferences.js'\nimport { getDocumentData } from '../../utilities/getDocumentData.js'\nimport { getDocumentPermissions } from '../../utilities/getDocumentPermissions.js'\nimport { getHasScheduledPublish } from '../../utilities/getHasScheduledPublish.js'\nimport { getIsLocked } from '../../utilities/getIsLocked.js'\nimport { getVersions } from '../../utilities/getVersions.js'\nimport { handleLivePreview } from '../../utilities/handleLivePreview.js'\nimport { handlePreview } from '../../utilities/handlePreview.js'\nimport { isEditing as getIsEditing } from '../../utilities/isEditing.js'\nimport { getPreferences } from '../../utilities/upsertPreferences.js'\nimport { NotFoundView } from '../NotFound/index.js'\nimport { UnauthorizedViewWithGutter } from '../Unauthorized/index.js'\nimport { getDocumentView } from './getDocumentView.js'\nimport { recordRecentlyViewed } from './recordRecentlyViewed.js'\nimport { renderDocumentSlots } from './renderDocumentSlots.js'\n\nexport { getDocumentView } from './getDocumentView.js'\n\nexport type ViewToRender =\n | EditViewComponent\n | PayloadComponent<DocumentViewServerProps>\n | React.FC\n | React.FC<DocumentViewClientProps>\n\n/**\n * This function is responsible for rendering\n * an Edit Document view on the server for both:\n * - default document edit views\n * - on-demand edit views within drawers\n */\nexport const renderDocument = async ({\n disableActions,\n documentSubViewType,\n drawerSlug,\n importMap,\n initialData,\n initPageResult,\n overrideEntityVisibility,\n params,\n redirectAfterCreate,\n redirectAfterDelete,\n redirectAfterDuplicate,\n redirectAfterRestore,\n searchParams,\n user: userWithReadAccess,\n versions,\n viewType,\n}: {\n drawerSlug?: string\n overrideEntityVisibility?: boolean\n readonly redirectAfterCreate?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly redirectAfterRestore?: boolean\n versions?: RenderDocumentVersionsProperties\n} & AdminViewServerProps): Promise<{\n data: Data\n Document: React.ReactNode\n}> => {\n const {\n collectionConfig,\n docID: idFromArgs,\n globalConfig,\n locale,\n permissions,\n req,\n req: {\n i18n,\n payload,\n payload: {\n config,\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n },\n },\n user,\n },\n visibleEntities,\n } = initPageResult\n\n const segments = Array.isArray(params?.segments) ? params.segments : []\n const collectionSlug = collectionConfig?.slug || undefined\n const globalSlug = globalConfig?.slug || undefined\n let isEditing = getIsEditing({ id: idFromArgs, collectionSlug, globalSlug })\n\n // Fetch the doc required for the view\n let doc =\n !idFromArgs && !globalSlug\n ? initialData || null\n : await getDocumentData({\n id: idFromArgs,\n collectionSlug,\n globalSlug,\n locale,\n payload,\n req,\n segments,\n user,\n })\n\n if (isEditing && !doc) {\n // If it's a collection document that doesn't exist, redirect to collection list\n if (collectionSlug) {\n const redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}?notFound=${encodeURIComponent(idFromArgs)}`,\n })\n req.server.redirect(redirectURL)\n } else {\n // For globals or other cases, keep the 404 behavior\n throw new Error('not-found')\n }\n }\n\n const isTrashedDoc = Boolean(doc && 'deletedAt' in doc && typeof doc?.deletedAt === 'string')\n\n // CRITICAL FIX FOR TRANSACTION RACE CONDITION:\n // When running parallel operations with Promise.all, if they share the same req object\n // and one operation calls initTransaction() which MUTATES req.transactionID, that mutation\n // is visible to all parallel operations. This causes:\n // 1. Operation A (e.g., getDocumentPermissions → docAccessOperation) calls initTransaction()\n // which sets req.transactionID = Promise, then resolves it to a UUID\n // 2. Operation B (e.g., getIsLocked) running in parallel receives the SAME req with the mutated transactionID\n // 3. Operation A (does not even know that Operation B even exists and is stil using the transactionID) commits/ends its transaction\n // 4. Operation B tries to use the now-expired session → MongoExpiredSessionError!\n //\n // Solution: Use isolateObjectProperty to create a Proxy that isolates the 'transactionID' property.\n // This allows each operation to have its own transactionID without affecting the parent req.\n // If parent req already has a transaction, preserve it (don't isolate), since this\n // issue only arises when one of the operations calls initTransaction() themselves -\n // because then, that operation will also try to commit/end the transaction itself.\n\n // If the transactionID is already set, the parallel operations will not try to\n // commit/end the transaction themselves, so we don't need to isolate the\n // transactionID property.\n const reqForPermissions = req.transactionID ? req : isolateObjectProperty(req, 'transactionID')\n const reqForLockCheck = req.transactionID ? req : isolateObjectProperty(req, 'transactionID')\n\n const [\n docPreferences,\n {\n docPermissions,\n hasDeletePermission,\n hasPublishPermission,\n hasSavePermission,\n hasTrashPermission,\n },\n { currentEditor, isLocked, lastUpdateTime },\n entityPreferences,\n ] = await Promise.all([\n // Get document preferences\n getDocPreferences({\n id: idFromArgs,\n collectionSlug,\n globalSlug,\n payload,\n user,\n }),\n\n // Get permissions - isolated transactionID prevents cross-contamination\n getDocumentPermissions({\n id: idFromArgs,\n collectionConfig,\n data: doc,\n globalConfig,\n req: reqForPermissions,\n }),\n\n // Fetch document lock state - isolated transactionID prevents cross-contamination\n getIsLocked({\n id: idFromArgs,\n collectionConfig,\n globalConfig,\n isEditing,\n req: reqForLockCheck,\n }),\n\n // get entity preferences\n getPreferences<CollectionPreferences>(\n collectionSlug ? `collection-${collectionSlug}` : `global-${globalSlug}`,\n payload,\n req.user.id,\n req.user.collection,\n ),\n ])\n\n const operation = (collectionSlug && idFromArgs) || globalSlug ? 'update' : 'create'\n\n // Record the document as recently viewed (collections only, never on the create route or for\n // trashed docs). Runs concurrently with the work below and never throws.\n const recentlyViewedPromise =\n collectionSlug && idFromArgs && doc && !isTrashedDoc\n ? recordRecentlyViewed({ id: idFromArgs, collectionSlug, req })\n : undefined\n\n const [\n { hasPublishedDoc, mostRecentVersionIsAutosaved, unpublishedVersionCount, versionCount },\n { state: formState },\n hasScheduledPublish,\n ] = await Promise.all([\n getVersions({\n id: idFromArgs,\n collectionConfig,\n doc,\n docPermissions,\n globalConfig,\n locale: locale?.code,\n payload,\n user,\n }),\n buildFormState({\n id: idFromArgs,\n collectionSlug,\n data: doc,\n docPermissions,\n docPreferences,\n fallbackLocale: false,\n globalSlug,\n locale: locale?.code,\n operation,\n readOnly: isTrashedDoc || isLocked,\n renderAllFields: true,\n req,\n schemaPath: collectionSlug || globalSlug,\n skipValidation: true,\n user: userWithReadAccess,\n }),\n getHasScheduledPublish({\n id: idFromArgs,\n collectionConfig,\n globalConfig,\n hasPublishPermission,\n payload,\n }),\n ])\n\n await recentlyViewedPromise\n\n const documentViewServerProps: DocumentViewServerPropsOnly = {\n doc,\n hasPublishedDoc,\n i18n,\n initPageResult,\n locale,\n params,\n payload,\n permissions,\n routeSegments: segments,\n searchParams,\n server: req.server,\n user: userWithReadAccess,\n versions,\n }\n\n if (\n !overrideEntityVisibility &&\n ((collectionSlug &&\n !visibleEntities?.collections?.find((visibleSlug) => visibleSlug === collectionSlug)) ||\n (globalSlug && !visibleEntities?.globals?.find((visibleSlug) => visibleSlug === globalSlug)))\n ) {\n throw new Error('not-found')\n }\n\n const formattedParams = new URLSearchParams()\n\n if (hasDraftsEnabled(collectionConfig || globalConfig)) {\n formattedParams.append('draft', 'true')\n }\n\n if (locale?.code) {\n formattedParams.append('locale', locale.code)\n }\n\n const apiQueryParams = `?${formattedParams.toString()}`\n\n const apiURL = formatAdminURL({\n apiRoute,\n path: collectionSlug\n ? `/${collectionSlug}/${idFromArgs}${apiQueryParams}`\n : globalSlug\n ? `/${globalSlug}${apiQueryParams}`\n : '',\n })\n\n let View: ViewToRender = null\n\n let showHeader = true\n\n const RootViewOverride =\n collectionConfig?.admin?.components?.views?.edit?.root &&\n 'Component' in collectionConfig.admin.components.views.edit.root\n ? collectionConfig?.admin?.components?.views?.edit?.root?.Component\n : globalConfig?.admin?.components?.views?.edit?.root &&\n 'Component' in globalConfig.admin.components.views.edit.root\n ? globalConfig?.admin?.components?.views?.edit?.root?.Component\n : null\n\n if (RootViewOverride) {\n View = RootViewOverride\n showHeader = false\n } else {\n ;({ View } = getDocumentView({\n collectionConfig,\n config,\n docPermissions,\n globalConfig,\n routeSegments: segments,\n }))\n\n if (View === UnauthorizedViewWithGutter) {\n showHeader = false\n }\n }\n\n if (!View) {\n View = NotFoundView as React.FC<AdminViewServerProps>\n }\n\n /**\n * Handle case where autoSave is enabled and the document is being created\n * => create document and redirect\n */\n const shouldAutosave = hasSavePermission && hasAutosaveEnabled(collectionConfig || globalConfig)\n\n const validateDraftData =\n collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.validate\n\n let id = idFromArgs\n\n if (shouldAutosave && !validateDraftData && !idFromArgs && collectionSlug) {\n doc = await payload.create({\n collection: collectionSlug,\n data: initialData || {},\n depth: 0,\n draft: true,\n fallbackLocale: false,\n locale: locale?.code,\n overrideAccess: false,\n req,\n user,\n })\n\n if (doc?.id) {\n id = doc.id\n isEditing = getIsEditing({ id: doc.id, collectionSlug, globalSlug })\n\n if (!drawerSlug && redirectAfterCreate !== false) {\n const redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${doc.id}`,\n })\n\n req.server.redirect(redirectURL)\n }\n } else {\n throw new Error('not-found')\n }\n }\n\n const documentSlots = await renderDocumentSlots({\n id,\n collectionConfig,\n doc: doc as Record<string, unknown>,\n globalConfig,\n hasSavePermission,\n locale,\n permissions,\n req,\n user: userWithReadAccess,\n })\n\n // Extract Description from documentSlots to pass to DocumentHeader\n const { Description } = documentSlots\n\n const clientProps: DocumentViewClientProps = {\n formState,\n ...documentSlots,\n documentSubViewType,\n viewType,\n }\n\n const { isLivePreviewEnabled, livePreviewConfig, livePreviewURL } = await handleLivePreview({\n collectionSlug,\n config,\n data: doc,\n globalSlug,\n operation,\n req,\n })\n\n const { isPreviewEnabled, previewURL } = await handlePreview({\n collectionSlug,\n config,\n data: doc,\n globalSlug,\n operation,\n req,\n })\n\n return {\n data: doc,\n Document: (\n <DocumentInfoProvider\n apiURL={apiURL}\n collectionSlug={collectionConfig?.slug}\n currentEditor={currentEditor}\n disableActions={disableActions ?? false}\n docPermissions={docPermissions}\n globalSlug={globalConfig?.slug}\n hasDeletePermission={hasDeletePermission}\n hasPublishedDoc={hasPublishedDoc}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n hasScheduledPublish={hasScheduledPublish}\n hasTrashPermission={hasTrashPermission}\n id={id}\n initialData={doc}\n initialState={formState}\n isEditing={isEditing}\n isLocked={isLocked}\n isTrashed={isTrashedDoc}\n key={locale?.code}\n lastUpdateTime={lastUpdateTime}\n mostRecentVersionIsAutosaved={mostRecentVersionIsAutosaved}\n redirectAfterCreate={redirectAfterCreate}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n redirectAfterRestore={redirectAfterRestore}\n unpublishedVersionCount={unpublishedVersionCount}\n versionCount={versionCount}\n >\n <LivePreviewProvider\n breakpoints={livePreviewConfig?.breakpoints}\n isLivePreviewEnabled={isLivePreviewEnabled && operation !== 'create'}\n isLivePreviewing={Boolean(\n (entityPreferences?.value?.editViewType === undefined\n ? livePreviewConfig?.openByDefault\n : entityPreferences.value.editViewType === 'live-preview') && livePreviewURL,\n )}\n isPreviewEnabled={Boolean(isPreviewEnabled)}\n previewURL={previewURL}\n typeofLivePreviewURL={typeof livePreviewConfig?.url as 'function' | 'string' | undefined}\n url={livePreviewURL}\n >\n {showHeader && !drawerSlug && (\n <DocumentHeader\n AfterHeader={Description}\n collectionConfig={collectionConfig}\n globalConfig={globalConfig}\n permissions={permissions}\n req={req}\n user={userWithReadAccess}\n />\n )}\n <HydrateAuthProvider permissions={permissions} />\n <EditDepthProvider>\n {RenderServerComponent({\n clientProps,\n Component: View,\n importMap,\n serverProps: documentViewServerProps,\n })}\n </EditDepthProvider>\n </LivePreviewProvider>\n </DocumentInfoProvider>\n ),\n }\n}\n\nexport async function DocumentView(props: AdminViewServerProps) {\n try {\n const { Document: RenderedDocument } = await renderDocument(props)\n return RenderedDocument\n } catch (error) {\n if (error?.message === 'NEXT_REDIRECT') {\n throw error\n }\n\n // The TanStack adapter's `req.server.redirect()` throws `redirect:<url>` as a\n // control-flow signal — the target is already recorded on `req.server` and\n // honored upstream in `loadAdminPage`. It isn't a real error, so swallow it\n // without logging, mirroring the `NEXT_REDIRECT` guard above.\n if (error?.message?.startsWith('redirect:')) {\n return\n }\n\n logError({ err: error, payload: props.initPageResult.req.payload })\n\n if (error.message === 'not-found') {\n props.initPageResult.req.server.notFound()\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,7 @@ export declare const renderDocumentSlots: (args: {
9
9
  permissions: SanitizedPermissions;
10
10
  req: PayloadRequest;
11
11
  user?: PayloadRequest['user'];
12
- }) => DocumentSlots;
12
+ }) => Promise<DocumentSlots>;
13
13
  export declare const renderDocumentSlotsHandler: ServerFunction<{
14
14
  collectionSlug: string;
15
15
  id?: number | string;
@@ -1 +1 @@
1
- {"version":3,"file":"renderDocumentSlots.d.ts","sourceRoot":"","sources":["../../../src/views/Document/renderDocumentSlots.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EAEb,MAAM,EAEN,cAAc,EAGd,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EAGpB,cAAc,EAOf,MAAM,SAAS,CAAA;AAShB,eAAO,MAAM,mBAAmB,EAAE,CAAC,IAAI,EAAE;IACvC,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,oBAAoB,CAAA;IACjC,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC9B,KAAK,aAyOL,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,cAAc,CAAC;IACtD,cAAc,EAAE,MAAM,CAAA;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACrB,CA8CA,CAAA"}
1
+ {"version":3,"file":"renderDocumentSlots.d.ts","sourceRoot":"","sources":["../../../src/views/Document/renderDocumentSlots.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EAEb,MAAM,EAEN,cAAc,EAGd,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EAGpB,cAAc,EAOf,MAAM,SAAS,CAAA;AAUhB,eAAO,MAAM,mBAAmB,EAAE,CAAC,IAAI,EAAE;IACvC,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,oBAAoB,CAAA;IACjC,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC9B,KAAK,OAAO,CAAC,aAAa,CAiP1B,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,cAAc,CAAC;IACtD,cAAc,EAAE,MAAM,CAAA;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACrB,CA8CA,CAAA"}
@@ -2,8 +2,9 @@ import { hasDraftsEnabled, matchMimeType } from 'payload/shared';
2
2
  import { RenderServerComponent } from '../../elements/RenderServerComponent/index.js';
3
3
  // eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds
4
4
  import { ViewDescription } from '../../exports/client/index.js';
5
+ import { filterLLMInstructionsMenuItems } from '../../utilities/filterLLMInstructionsMenuItems.js';
5
6
  import { getDocumentPermissions } from '../../utilities/getDocumentPermissions.js';
6
- export const renderDocumentSlots = args => {
7
+ export const renderDocumentSlots = async args => {
7
8
  const {
8
9
  id,
9
10
  collectionConfig,
@@ -43,8 +44,14 @@ export const renderDocumentSlots = args => {
43
44
  serverProps
44
45
  });
45
46
  }
46
- const EditMenuItems = collectionConfig?.admin?.components?.edit?.editMenuItems;
47
- if (EditMenuItems) {
47
+ const EditMenuItems = await filterLLMInstructionsMenuItems({
48
+ collectionSlug: collectionConfig?.slug,
49
+ globalSlug: globalConfig?.slug,
50
+ menuItems: collectionConfig?.admin?.components?.edit?.editMenuItems || globalConfig?.admin?.components?.edit?.editMenuItems,
51
+ permissions,
52
+ req
53
+ });
54
+ if (EditMenuItems?.length) {
48
55
  components.EditMenuItems = RenderServerComponent({
49
56
  Component: EditMenuItems,
50
57
  importMap: req.payload.importMap,