@payloadcms/next 3.80.0-canary.4 → 3.80.0-internal-debug.daef79f

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 (458) hide show
  1. package/dist/auth/login.js +52 -58
  2. package/dist/auth/login.js.map +1 -1
  3. package/dist/auth/logout.js +39 -44
  4. package/dist/auth/logout.js.map +1 -1
  5. package/dist/auth/refresh.js +45 -47
  6. package/dist/auth/refresh.js.map +1 -1
  7. package/dist/cjs/withPayload.cjs +65 -24
  8. package/dist/cjs/withPayload.cjs.map +2 -2
  9. package/dist/config.js +1 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +9 -15
  12. package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js.map +1 -1
  13. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +40 -71
  14. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
  15. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +65 -59
  16. package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
  17. package/dist/elements/DocumentHeader/Tabs/Tab/index.scss +38 -0
  18. package/dist/elements/DocumentHeader/Tabs/index.js +80 -70
  19. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  20. package/dist/elements/DocumentHeader/Tabs/index.scss +54 -0
  21. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +16 -23
  22. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -1
  23. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.scss +10 -0
  24. package/dist/elements/DocumentHeader/Tabs/tabs/index.js +61 -69
  25. package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
  26. package/dist/elements/DocumentHeader/index.js +48 -28
  27. package/dist/elements/DocumentHeader/index.js.map +1 -1
  28. package/dist/elements/DocumentHeader/index.scss +64 -0
  29. package/dist/elements/FormHeader/index.js +30 -16
  30. package/dist/elements/FormHeader/index.js.map +1 -1
  31. package/dist/elements/FormHeader/index.scss +8 -0
  32. package/dist/elements/Logo/index.js +19 -34
  33. package/dist/elements/Logo/index.js.map +1 -1
  34. package/dist/elements/Nav/NavHamburger/index.js +23 -44
  35. package/dist/elements/Nav/NavHamburger/index.js.map +1 -1
  36. package/dist/elements/Nav/NavWrapper/index.js +28 -54
  37. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  38. package/dist/elements/Nav/NavWrapper/index.scss +27 -0
  39. package/dist/elements/Nav/SettingsMenuButton/index.js +33 -39
  40. package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -1
  41. package/dist/elements/Nav/SettingsMenuButton/index.scss +11 -0
  42. package/dist/elements/Nav/getNavPrefs.js +27 -22
  43. package/dist/elements/Nav/getNavPrefs.js.map +1 -1
  44. package/dist/elements/Nav/index.client.js +97 -118
  45. package/dist/elements/Nav/index.client.js.map +1 -1
  46. package/dist/elements/Nav/index.js +191 -170
  47. package/dist/elements/Nav/index.js.map +1 -1
  48. package/dist/elements/Nav/index.scss +173 -0
  49. package/dist/esbuildEntry.d.ts +5 -0
  50. package/dist/esbuildEntry.d.ts.map +1 -0
  51. package/dist/esbuildEntry.js +6 -0
  52. package/dist/esbuildEntry.js.map +1 -0
  53. package/dist/exports/auth.js +1 -0
  54. package/dist/exports/auth.js.map +1 -1
  55. package/dist/exports/client.js +1 -1
  56. package/dist/exports/client.js.map +1 -1
  57. package/dist/exports/layouts.js +1 -0
  58. package/dist/exports/layouts.js.map +1 -1
  59. package/dist/exports/routes.js +1 -0
  60. package/dist/exports/routes.js.map +1 -1
  61. package/dist/exports/rsc.js +1 -0
  62. package/dist/exports/rsc.js.map +1 -1
  63. package/dist/exports/templates.js +1 -0
  64. package/dist/exports/templates.js.map +1 -1
  65. package/dist/exports/utilities.js +7 -12
  66. package/dist/exports/utilities.js.map +1 -1
  67. package/dist/exports/views.js +1 -0
  68. package/dist/exports/views.js.map +1 -1
  69. package/dist/index.js +1 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/layouts/Root/NestProviders.js +21 -20
  72. package/dist/layouts/Root/NestProviders.js.map +1 -1
  73. package/dist/layouts/Root/checkDependencies.js +49 -41
  74. package/dist/layouts/Root/checkDependencies.js.map +1 -1
  75. package/dist/layouts/Root/index.js +128 -103
  76. package/dist/layouts/Root/index.js.map +1 -1
  77. package/dist/prod/styles.css +5 -1
  78. package/dist/routes/graphql/handler.js +114 -122
  79. package/dist/routes/graphql/handler.js.map +1 -1
  80. package/dist/routes/graphql/index.js +1 -0
  81. package/dist/routes/graphql/index.js.map +1 -1
  82. package/dist/routes/graphql/playground.js +28 -27
  83. package/dist/routes/graphql/playground.js.map +1 -1
  84. package/dist/routes/index.js +1 -0
  85. package/dist/routes/index.js.map +1 -1
  86. package/dist/routes/rest/index.js +23 -22
  87. package/dist/routes/rest/index.js.map +1 -1
  88. package/dist/routes/rest/og/image.js +103 -79
  89. package/dist/routes/rest/og/image.js.map +1 -1
  90. package/dist/routes/rest/og/index.js +59 -54
  91. package/dist/routes/rest/og/index.js.map +1 -1
  92. package/dist/templates/Default/NavHamburger/index.js +12 -20
  93. package/dist/templates/Default/NavHamburger/index.js.map +1 -1
  94. package/dist/templates/Default/Wrapper/index.js +20 -44
  95. package/dist/templates/Default/Wrapper/index.js.map +1 -1
  96. package/dist/templates/Default/Wrapper/index.scss +58 -0
  97. package/dist/templates/Default/index.js +147 -116
  98. package/dist/templates/Default/index.js.map +1 -1
  99. package/dist/templates/Default/index.scss +79 -0
  100. package/dist/templates/Minimal/index.js +26 -17
  101. package/dist/templates/Minimal/index.js.map +1 -1
  102. package/dist/templates/Minimal/index.scss +30 -0
  103. package/dist/utilities/getExistingAuthToken.js +3 -2
  104. package/dist/utilities/getExistingAuthToken.js.map +1 -1
  105. package/dist/utilities/getNextRequestI18n.js +12 -13
  106. package/dist/utilities/getNextRequestI18n.js.map +1 -1
  107. package/dist/utilities/getPayloadHMR.js +5 -5
  108. package/dist/utilities/getPayloadHMR.js.map +1 -1
  109. package/dist/utilities/getPreferences.js +27 -22
  110. package/dist/utilities/getPreferences.js.map +1 -1
  111. package/dist/utilities/getRequestLocale.js +13 -14
  112. package/dist/utilities/getRequestLocale.js.map +1 -1
  113. package/dist/utilities/getRequestTheme.js +19 -19
  114. package/dist/utilities/getRequestTheme.js.map +1 -1
  115. package/dist/utilities/getRouteWithoutAdmin.js +3 -5
  116. package/dist/utilities/getRouteWithoutAdmin.js.map +1 -1
  117. package/dist/utilities/handleAuthRedirect.js +22 -36
  118. package/dist/utilities/handleAuthRedirect.js.map +1 -1
  119. package/dist/utilities/handleServerFunctions.js +33 -43
  120. package/dist/utilities/handleServerFunctions.js.map +1 -1
  121. package/dist/utilities/initReq.js +78 -96
  122. package/dist/utilities/initReq.js.map +1 -1
  123. package/dist/utilities/isCustomAdminView.js +22 -26
  124. package/dist/utilities/isCustomAdminView.js.map +1 -1
  125. package/dist/utilities/isPublicAdminRoute.js +26 -20
  126. package/dist/utilities/isPublicAdminRoute.js.map +1 -1
  127. package/dist/utilities/meta.js +68 -63
  128. package/dist/utilities/meta.js.map +1 -1
  129. package/dist/utilities/selectiveCache.js +25 -26
  130. package/dist/utilities/selectiveCache.js.map +1 -1
  131. package/dist/utilities/setPayloadAuthCookie.js +19 -22
  132. package/dist/utilities/setPayloadAuthCookie.js.map +1 -1
  133. package/dist/utilities/slugify.js +24 -33
  134. package/dist/utilities/slugify.js.map +1 -1
  135. package/dist/utilities/timestamp.js +7 -6
  136. package/dist/utilities/timestamp.js.map +1 -1
  137. package/dist/views/API/LocaleSelector/index.js +17 -39
  138. package/dist/views/API/LocaleSelector/index.js.map +1 -1
  139. package/dist/views/API/RenderJSON/index.js +171 -126
  140. package/dist/views/API/RenderJSON/index.js.map +1 -1
  141. package/dist/views/API/RenderJSON/index.scss +129 -0
  142. package/dist/views/API/index.client.js +291 -199
  143. package/dist/views/API/index.client.js.map +1 -1
  144. package/dist/views/API/index.js +7 -2
  145. package/dist/views/API/index.js.map +1 -1
  146. package/dist/views/API/index.scss +119 -0
  147. package/dist/views/API/metadata.js +18 -23
  148. package/dist/views/API/metadata.js.map +1 -1
  149. package/dist/views/Account/ResetPreferences/index.js +78 -102
  150. package/dist/views/Account/ResetPreferences/index.js.map +1 -1
  151. package/dist/views/Account/Settings/LanguageSelector.js +18 -47
  152. package/dist/views/Account/Settings/LanguageSelector.js.map +1 -1
  153. package/dist/views/Account/Settings/index.js +60 -25
  154. package/dist/views/Account/Settings/index.js.map +1 -1
  155. package/dist/views/Account/Settings/index.scss +48 -0
  156. package/dist/views/Account/ToggleTheme/index.js +38 -55
  157. package/dist/views/Account/ToggleTheme/index.js.map +1 -1
  158. package/dist/views/Account/index.client.js +16 -32
  159. package/dist/views/Account/index.client.js.map +1 -1
  160. package/dist/views/Account/index.js +149 -162
  161. package/dist/views/Account/index.js.map +1 -1
  162. package/dist/views/Account/metadata.js +8 -12
  163. package/dist/views/Account/metadata.js.map +1 -1
  164. package/dist/views/BrowseByFolder/buildView.js +138 -157
  165. package/dist/views/BrowseByFolder/buildView.js.map +1 -1
  166. package/dist/views/BrowseByFolder/index.js +16 -16
  167. package/dist/views/BrowseByFolder/index.js.map +1 -1
  168. package/dist/views/BrowseByFolder/metadata.js +13 -15
  169. package/dist/views/BrowseByFolder/metadata.js.map +1 -1
  170. package/dist/views/CollectionFolders/buildView.js +122 -142
  171. package/dist/views/CollectionFolders/buildView.js.map +1 -1
  172. package/dist/views/CollectionFolders/index.js +16 -16
  173. package/dist/views/CollectionFolders/index.js.map +1 -1
  174. package/dist/views/CollectionFolders/metadata.js +18 -21
  175. package/dist/views/CollectionFolders/metadata.js.map +1 -1
  176. package/dist/views/CollectionFolders/renderFolderViewSlots.js +58 -61
  177. package/dist/views/CollectionFolders/renderFolderViewSlots.js.map +1 -1
  178. package/dist/views/CollectionTrash/index.js +17 -17
  179. package/dist/views/CollectionTrash/index.js.map +1 -1
  180. package/dist/views/CollectionTrash/metadata.js +18 -21
  181. package/dist/views/CollectionTrash/metadata.js.map +1 -1
  182. package/dist/views/CreateFirstUser/index.client.js +117 -103
  183. package/dist/views/CreateFirstUser/index.client.js.map +1 -1
  184. package/dist/views/CreateFirstUser/index.js +87 -81
  185. package/dist/views/CreateFirstUser/index.js.map +1 -1
  186. package/dist/views/CreateFirstUser/index.scss +21 -0
  187. package/dist/views/CreateFirstUser/metadata.js +8 -12
  188. package/dist/views/CreateFirstUser/metadata.js.map +1 -1
  189. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +145 -170
  190. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  191. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js +144 -118
  192. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js.map +1 -1
  193. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +59 -72
  194. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
  195. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +435 -414
  196. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  197. package/dist/views/Dashboard/Default/ModularDashboard/index.js +54 -63
  198. package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
  199. package/dist/views/Dashboard/Default/ModularDashboard/index.scss +318 -0
  200. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +65 -96
  201. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  202. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +44 -54
  203. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -1
  204. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +65 -72
  205. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  206. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +193 -175
  207. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -1
  208. package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js +31 -30
  209. package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js.map +1 -1
  210. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.js +18 -17
  211. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.js.map +1 -1
  212. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.js +6 -5
  213. package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.js.map +1 -1
  214. package/dist/views/Dashboard/Default/ModularDashboard/utils/localeUtils.js +69 -74
  215. package/dist/views/Dashboard/Default/ModularDashboard/utils/localeUtils.js.map +1 -1
  216. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js +228 -234
  217. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js.map +1 -1
  218. package/dist/views/Dashboard/Default/index.js +59 -45
  219. package/dist/views/Dashboard/Default/index.js.map +1 -1
  220. package/dist/views/Dashboard/index.js +46 -42
  221. package/dist/views/Dashboard/index.js.map +1 -1
  222. package/dist/views/Dashboard/metadata.js +10 -14
  223. package/dist/views/Dashboard/metadata.js.map +1 -1
  224. package/dist/views/Document/getCustomDocumentViewByKey.js +3 -2
  225. package/dist/views/Document/getCustomDocumentViewByKey.js.map +1 -1
  226. package/dist/views/Document/getCustomViewByRoute.js +27 -30
  227. package/dist/views/Document/getCustomViewByRoute.js.map +1 -1
  228. package/dist/views/Document/getDocPreferences.js +40 -41
  229. package/dist/views/Document/getDocPreferences.js.map +1 -1
  230. package/dist/views/Document/getDocumentData.js +44 -55
  231. package/dist/views/Document/getDocumentData.js.map +1 -1
  232. package/dist/views/Document/getDocumentPermissions.js +114 -117
  233. package/dist/views/Document/getDocumentPermissions.js.map +1 -1
  234. package/dist/views/Document/getDocumentView.js +313 -283
  235. package/dist/views/Document/getDocumentView.js.map +1 -1
  236. package/dist/views/Document/getIsLocked.js +73 -73
  237. package/dist/views/Document/getIsLocked.js.map +1 -1
  238. package/dist/views/Document/getMetaBySegment.js +130 -136
  239. package/dist/views/Document/getMetaBySegment.js.map +1 -1
  240. package/dist/views/Document/getVersions.js +220 -213
  241. package/dist/views/Document/getVersions.js.map +1 -1
  242. package/dist/views/Document/handleServerFunction.js +100 -127
  243. package/dist/views/Document/handleServerFunction.js.map +1 -1
  244. package/dist/views/Document/index.js +319 -359
  245. package/dist/views/Document/index.js.map +1 -1
  246. package/dist/views/Document/metadata.js +2 -1
  247. package/dist/views/Document/metadata.js.map +1 -1
  248. package/dist/views/Document/renderDocumentSlots.js +141 -155
  249. package/dist/views/Document/renderDocumentSlots.js.map +1 -1
  250. package/dist/views/Edit/index.js +10 -6
  251. package/dist/views/Edit/index.js.map +1 -1
  252. package/dist/views/Edit/metadata.js +36 -46
  253. package/dist/views/Edit/metadata.js.map +1 -1
  254. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +130 -164
  255. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
  256. package/dist/views/ForgotPassword/index.js +79 -62
  257. package/dist/views/ForgotPassword/index.js.map +1 -1
  258. package/dist/views/ForgotPassword/metadata.js +8 -12
  259. package/dist/views/ForgotPassword/metadata.js.map +1 -1
  260. package/dist/views/List/createSerializableValue.js +12 -11
  261. package/dist/views/List/createSerializableValue.js.map +1 -1
  262. package/dist/views/List/enrichDocsWithVersionStatus.js +86 -86
  263. package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
  264. package/dist/views/List/extractRelationshipDisplayValue.js +15 -14
  265. package/dist/views/List/extractRelationshipDisplayValue.js.map +1 -1
  266. package/dist/views/List/extractValueOrRelationshipID.js +16 -15
  267. package/dist/views/List/extractValueOrRelationshipID.js.map +1 -1
  268. package/dist/views/List/handleGroupBy.js +133 -150
  269. package/dist/views/List/handleGroupBy.js.map +1 -1
  270. package/dist/views/List/handleServerFunction.js +96 -122
  271. package/dist/views/List/handleServerFunction.js.map +1 -1
  272. package/dist/views/List/index.js +306 -325
  273. package/dist/views/List/index.js.map +1 -1
  274. package/dist/views/List/metadata.js +17 -20
  275. package/dist/views/List/metadata.js.map +1 -1
  276. package/dist/views/List/renderListViewSlots.js +82 -75
  277. package/dist/views/List/renderListViewSlots.js.map +1 -1
  278. package/dist/views/List/resolveAllFilterOptions.js +43 -45
  279. package/dist/views/List/resolveAllFilterOptions.js.map +1 -1
  280. package/dist/views/List/transformColumnsToSelect.js +9 -8
  281. package/dist/views/List/transformColumnsToSelect.js.map +1 -1
  282. package/dist/views/Login/LoginField/index.js +57 -89
  283. package/dist/views/Login/LoginField/index.js.map +1 -1
  284. package/dist/views/Login/LoginForm/index.js +107 -160
  285. package/dist/views/Login/LoginForm/index.js.map +1 -1
  286. package/dist/views/Login/LoginForm/index.scss +10 -0
  287. package/dist/views/Login/index.js +82 -85
  288. package/dist/views/Login/index.js.map +1 -1
  289. package/dist/views/Login/index.scss +10 -0
  290. package/dist/views/Login/metadata.js +8 -12
  291. package/dist/views/Login/metadata.js.map +1 -1
  292. package/dist/views/Logout/LogoutClient.js +84 -120
  293. package/dist/views/Logout/LogoutClient.js.map +1 -1
  294. package/dist/views/Logout/index.js +29 -29
  295. package/dist/views/Logout/index.js.map +1 -1
  296. package/dist/views/Logout/index.scss +25 -0
  297. package/dist/views/Logout/metadata.js +7 -11
  298. package/dist/views/Logout/metadata.js.map +1 -1
  299. package/dist/views/NotFound/index.client.js +71 -82
  300. package/dist/views/NotFound/index.client.js.map +1 -1
  301. package/dist/views/NotFound/index.js +72 -73
  302. package/dist/views/NotFound/index.js.map +1 -1
  303. package/dist/views/NotFound/index.scss +57 -0
  304. package/dist/views/NotFound/metadata.js +7 -9
  305. package/dist/views/NotFound/metadata.js.map +1 -1
  306. package/dist/views/ResetPassword/ResetPasswordForm/index.js +97 -108
  307. package/dist/views/ResetPassword/ResetPasswordForm/index.js.map +1 -1
  308. package/dist/views/ResetPassword/index.js +93 -73
  309. package/dist/views/ResetPassword/index.js.map +1 -1
  310. package/dist/views/ResetPassword/index.scss +11 -0
  311. package/dist/views/ResetPassword/metadata.js +8 -12
  312. package/dist/views/ResetPassword/metadata.js.map +1 -1
  313. package/dist/views/Root/attachViewActions.js +18 -23
  314. package/dist/views/Root/attachViewActions.js.map +1 -1
  315. package/dist/views/Root/generateCustomViewMetadata.js +19 -21
  316. package/dist/views/Root/generateCustomViewMetadata.js.map +1 -1
  317. package/dist/views/Root/getCustomViewByKey.js +12 -14
  318. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  319. package/dist/views/Root/getCustomViewByRoute.js +31 -42
  320. package/dist/views/Root/getCustomViewByRoute.js.map +1 -1
  321. package/dist/views/Root/getDocumentViewInfo.js +24 -23
  322. package/dist/views/Root/getDocumentViewInfo.js.map +1 -1
  323. package/dist/views/Root/getRouteData.js +333 -325
  324. package/dist/views/Root/getRouteData.js.map +1 -1
  325. package/dist/views/Root/index.js +248 -270
  326. package/dist/views/Root/index.js.map +1 -1
  327. package/dist/views/Root/isPathMatchingRoute.js +21 -26
  328. package/dist/views/Root/isPathMatchingRoute.js.map +1 -1
  329. package/dist/views/Root/metadata.js +176 -181
  330. package/dist/views/Root/metadata.js.map +1 -1
  331. package/dist/views/Unauthorized/index.js +54 -46
  332. package/dist/views/Unauthorized/index.js.map +1 -1
  333. package/dist/views/Unauthorized/index.scss +14 -0
  334. package/dist/views/Unauthorized/metadata.js +8 -12
  335. package/dist/views/Unauthorized/metadata.js.map +1 -1
  336. package/dist/views/Verify/index.client.js +25 -43
  337. package/dist/views/Verify/index.client.js.map +1 -1
  338. package/dist/views/Verify/index.js +69 -64
  339. package/dist/views/Verify/index.js.map +1 -1
  340. package/dist/views/Verify/index.scss +16 -0
  341. package/dist/views/Verify/metadata.js +8 -12
  342. package/dist/views/Verify/metadata.js.map +1 -1
  343. package/dist/views/Version/Default/SelectedLocalesContext.js +4 -4
  344. package/dist/views/Version/Default/SelectedLocalesContext.js.map +1 -1
  345. package/dist/views/Version/Default/SetStepNav.js +86 -127
  346. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  347. package/dist/views/Version/Default/index.js +380 -236
  348. package/dist/views/Version/Default/index.js.map +1 -1
  349. package/dist/views/Version/Default/index.scss +170 -0
  350. package/dist/views/Version/Default/types.js +2 -1
  351. package/dist/views/Version/Default/types.js.map +1 -1
  352. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +102 -119
  353. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
  354. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.scss +81 -0
  355. package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js +78 -73
  356. package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js.map +1 -1
  357. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +363 -408
  358. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
  359. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js +40 -51
  360. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -1
  361. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js +38 -70
  362. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -1
  363. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.scss +12 -0
  364. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js +59 -56
  365. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -1
  366. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.scss +9 -0
  367. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +139 -117
  368. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
  369. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.scss +59 -0
  370. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +56 -61
  371. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -1
  372. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +224 -206
  373. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
  374. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.scss +91 -0
  375. package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js +17 -11
  376. package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js.map +1 -1
  377. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +49 -74
  378. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
  379. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.scss +4 -0
  380. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +135 -146
  381. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
  382. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.scss +9 -0
  383. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +57 -82
  384. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
  385. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.scss +4 -0
  386. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js +252 -211
  387. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -1
  388. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.scss +121 -0
  389. package/dist/views/Version/RenderFieldsToDiff/fields/index.js +23 -22
  390. package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -1
  391. package/dist/views/Version/RenderFieldsToDiff/index.js +12 -9
  392. package/dist/views/Version/RenderFieldsToDiff/index.js.map +1 -1
  393. package/dist/views/Version/RenderFieldsToDiff/index.scss +24 -0
  394. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +213 -228
  395. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
  396. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +1005 -826
  397. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -1
  398. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js +2 -1
  399. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js.map +1 -1
  400. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +44 -43
  401. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +1 -1
  402. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +32 -36
  403. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -1
  404. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +145 -129
  405. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -1
  406. package/dist/views/Version/Restore/index.js +117 -92
  407. package/dist/views/Version/Restore/index.js.map +1 -1
  408. package/dist/views/Version/Restore/index.scss +84 -0
  409. package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js +33 -50
  410. package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js.map +1 -1
  411. package/dist/views/Version/SelectComparison/VersionDrawer/index.js +170 -226
  412. package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -1
  413. package/dist/views/Version/SelectComparison/VersionDrawer/index.scss +18 -0
  414. package/dist/views/Version/SelectComparison/index.js +73 -50
  415. package/dist/views/Version/SelectComparison/index.js.map +1 -1
  416. package/dist/views/Version/SelectComparison/index.scss +9 -0
  417. package/dist/views/Version/SelectComparison/types.js +2 -1
  418. package/dist/views/Version/SelectComparison/types.js.map +1 -1
  419. package/dist/views/Version/SelectLocales/index.js +34 -32
  420. package/dist/views/Version/SelectLocales/index.js.map +1 -1
  421. package/dist/views/Version/VersionPillLabel/VersionPillLabel.js +106 -100
  422. package/dist/views/Version/VersionPillLabel/VersionPillLabel.js.map +1 -1
  423. package/dist/views/Version/VersionPillLabel/getVersionLabel.js +30 -35
  424. package/dist/views/Version/VersionPillLabel/getVersionLabel.js.map +1 -1
  425. package/dist/views/Version/VersionPillLabel/index.scss +26 -0
  426. package/dist/views/Version/fetchVersions.js +113 -138
  427. package/dist/views/Version/fetchVersions.js.map +1 -1
  428. package/dist/views/Version/index.js +328 -326
  429. package/dist/views/Version/index.js.map +1 -1
  430. package/dist/views/Version/metadata.js +43 -50
  431. package/dist/views/Version/metadata.js.map +1 -1
  432. package/dist/views/Versions/buildColumns.js +95 -79
  433. package/dist/views/Versions/buildColumns.js.map +1 -1
  434. package/dist/views/Versions/cells/AutosaveCell/index.js +34 -38
  435. package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -1
  436. package/dist/views/Versions/cells/AutosaveCell/index.scss +9 -0
  437. package/dist/views/Versions/cells/CreatedAt/index.js +32 -53
  438. package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -1
  439. package/dist/views/Versions/cells/ID/index.js +10 -8
  440. package/dist/views/Versions/cells/ID/index.js.map +1 -1
  441. package/dist/views/Versions/index.client.js +106 -83
  442. package/dist/views/Versions/index.client.js.map +1 -1
  443. package/dist/views/Versions/index.js +164 -164
  444. package/dist/views/Versions/index.js.map +1 -1
  445. package/dist/views/Versions/index.scss +110 -0
  446. package/dist/views/Versions/metadata.js +37 -44
  447. package/dist/views/Versions/metadata.js.map +1 -1
  448. package/dist/views/Versions/types.js +2 -1
  449. package/dist/views/Versions/types.js.map +1 -1
  450. package/dist/withPayload/withPayload.js +236 -177
  451. package/dist/withPayload/withPayload.js.map +1 -1
  452. package/dist/withPayload/withPayload.spec.js +36 -35
  453. package/dist/withPayload/withPayload.spec.js.map +1 -1
  454. package/dist/withPayload/withPayload.utils.js +65 -73
  455. package/dist/withPayload/withPayload.utils.js.map +1 -1
  456. package/dist/withPayload/withPayloadLegacy.js +41 -40
  457. package/dist/withPayload/withPayloadLegacy.js.map +1 -1
  458. package/package.json +6 -6
@@ -4,185 +4,203 @@ import { PREFERENCE_KEYS } from 'payload/shared';
4
4
  import React, { useCallback, useEffect, useState } from 'react';
5
5
  import { RenderWidget } from './renderWidget/RenderWidget.js';
6
6
  export function useDashboardLayout(initialLayout) {
7
- const setLayoutPreference = useSetLayoutPreference();
8
- const [isEditing, setIsEditing] = useState(false);
9
- const {
10
- widgets = []
11
- } = useConfig().config.admin.dashboard ?? {};
12
- const [currentLayout, setCurrentLayout] = useState(initialLayout);
13
- const {
14
- openModal
15
- } = useModal();
16
- const cancelModalSlug = 'cancel-dashboard-changes';
17
- const {
18
- serverFunction
19
- } = useServerFunctions();
20
- const {
21
- t
22
- } = useTranslation();
23
- // Sync state when initialLayout prop changes (e.g., when query params change and server component re-renders)
24
- useEffect(() => {
25
- if (!isEditing) {
26
- setCurrentLayout(initialLayout);
27
- }
28
- // do not sync while editing. Depending on `isEditing` in this effect causes an
7
+ const setLayoutPreference = useSetLayoutPreference();
8
+ const [isEditing, setIsEditing] = useState(false);
9
+ const { widgets = [] } = useConfig().config.admin.dashboard ?? {};
10
+ const [currentLayout, setCurrentLayout] = useState(initialLayout);
11
+ const { openModal } = useModal();
12
+ const cancelModalSlug = 'cancel-dashboard-changes';
13
+ const { serverFunction } = useServerFunctions();
14
+ const { t } = useTranslation();
15
+ // Sync state when initialLayout prop changes (e.g., when query params change and server component re-renders)
16
+ useEffect(()=>{
17
+ if (!isEditing) {
18
+ setCurrentLayout(initialLayout);
19
+ }
20
+ }, // do not sync while editing. Depending on `isEditing` in this effect causes an
29
21
  // unintended rollback when toggling from editing -> view mode after save.
30
- }, [initialLayout]);
31
- const saveLayout = useCallback(async () => {
32
- try {
33
- const layoutData = currentLayout.map(item => item.item);
34
- setIsEditing(false);
35
- await setLayoutPreference(layoutData);
36
- } catch {
37
- setIsEditing(true);
38
- toast.error(t('error:failedToSaveLayout'));
39
- }
40
- }, [setLayoutPreference, currentLayout]);
41
- const resetLayout = useCallback(async () => {
42
- try {
43
- await setLayoutPreference(null);
44
- const result = await serverFunction({
45
- name: 'get-default-layout',
46
- args: {}
47
- });
48
- setCurrentLayout(result.layout);
49
- setIsEditing(false);
50
- } catch {
51
- toast.error(t('error:failedToResetLayout'));
52
- }
53
- }, [setLayoutPreference, serverFunction]);
54
- const performCancel = useCallback(() => {
55
- setCurrentLayout(initialLayout);
56
- setIsEditing(false);
57
- }, [initialLayout]);
58
- const cancel = useCallback(() => {
59
- // Check if layout has changed
60
- const hasChanges = currentLayout.length !== initialLayout.length || currentLayout.some((widget, index) => {
61
- const initialWidget = initialLayout[index];
62
- return !initialWidget || widget.item.id !== initialWidget.item.id || widget.item.width !== initialWidget.item.width || JSON.stringify(widget.item.data || {}) !== JSON.stringify(initialWidget.item.data || {});
63
- });
64
- // If there are changes, show confirmation modal
65
- if (hasChanges) {
66
- openModal(cancelModalSlug);
67
- } else {
68
- performCancel();
69
- }
70
- }, [currentLayout, initialLayout, openModal, cancelModalSlug, performCancel]);
71
- const moveWidget = useCallback(({
72
- moveFromIndex,
73
- moveToIndex
74
- }) => {
75
- if (moveFromIndex === moveToIndex || moveFromIndex < 0 || moveToIndex < 0) {
76
- return;
77
- }
78
- setCurrentLayout(prev => {
79
- return arrayMove(prev, moveFromIndex, moveToIndex);
80
- });
81
- }, []);
82
- const addWidget = useCallback(widgetSlug => {
83
- if (!isEditing) {
84
- return;
85
- }
86
- const widgetId = `${widgetSlug}-${Date.now()}`;
87
- const widget = widgets.find(widget => widget.slug === widgetSlug);
88
- // Create a new widget instance using RenderWidget
89
- const newWidgetInstance = {
90
- component: React.createElement(RenderWidget, {
91
- widgetData: {},
92
- widgetId
93
- }),
94
- item: {
95
- id: widgetId,
96
- data: {},
97
- maxWidth: widget?.maxWidth ?? 'full',
98
- minWidth: widget?.minWidth ?? 'x-small',
99
- width: widget?.minWidth ?? 'x-small'
100
- }
101
- };
102
- setCurrentLayout(prev => [...prev, newWidgetInstance]);
103
- // Scroll to the newly added widget after it's rendered and highlight it
104
- setTimeout(() => {
105
- const element = document.getElementById(widgetId);
106
- if (element) {
107
- element.scrollIntoView({
108
- behavior: 'smooth',
109
- block: 'center'
22
+ [
23
+ initialLayout
24
+ ]);
25
+ const saveLayout = useCallback(async ()=>{
26
+ try {
27
+ const layoutData = currentLayout.map((item)=>item.item);
28
+ setIsEditing(false);
29
+ await setLayoutPreference(layoutData);
30
+ } catch {
31
+ setIsEditing(true);
32
+ toast.error(t('error:failedToSaveLayout'));
33
+ }
34
+ }, [
35
+ setLayoutPreference,
36
+ currentLayout
37
+ ]);
38
+ const resetLayout = useCallback(async ()=>{
39
+ try {
40
+ await setLayoutPreference(null);
41
+ const result = await serverFunction({
42
+ name: 'get-default-layout',
43
+ args: {}
44
+ });
45
+ setCurrentLayout(result.layout);
46
+ setIsEditing(false);
47
+ } catch {
48
+ toast.error(t('error:failedToResetLayout'));
49
+ }
50
+ }, [
51
+ setLayoutPreference,
52
+ serverFunction
53
+ ]);
54
+ const performCancel = useCallback(()=>{
55
+ setCurrentLayout(initialLayout);
56
+ setIsEditing(false);
57
+ }, [
58
+ initialLayout
59
+ ]);
60
+ const cancel = useCallback(()=>{
61
+ // Check if layout has changed
62
+ const hasChanges = currentLayout.length !== initialLayout.length || currentLayout.some((widget, index)=>{
63
+ const initialWidget = initialLayout[index];
64
+ return !initialWidget || widget.item.id !== initialWidget.item.id || widget.item.width !== initialWidget.item.width || JSON.stringify(widget.item.data || {}) !== JSON.stringify(initialWidget.item.data || {});
65
+ });
66
+ // If there are changes, show confirmation modal
67
+ if (hasChanges) {
68
+ openModal(cancelModalSlug);
69
+ } else {
70
+ performCancel();
71
+ }
72
+ }, [
73
+ currentLayout,
74
+ initialLayout,
75
+ openModal,
76
+ cancelModalSlug,
77
+ performCancel
78
+ ]);
79
+ const moveWidget = useCallback(({ moveFromIndex, moveToIndex })=>{
80
+ if (moveFromIndex === moveToIndex || moveFromIndex < 0 || moveToIndex < 0) {
81
+ return;
82
+ }
83
+ setCurrentLayout((prev)=>{
84
+ return arrayMove(prev, moveFromIndex, moveToIndex);
110
85
  });
111
- // Add highlight animation to the widget element
112
- const widget = element.closest('.widget');
113
- if (widget) {
114
- widget.classList.add('widget--highlight');
115
- // Remove the class after animation completes (1.5s fade out)
116
- setTimeout(() => {
117
- widget.classList.remove('widget--highlight');
118
- }, 1500);
86
+ }, []);
87
+ const addWidget = useCallback((widgetSlug)=>{
88
+ if (!isEditing) {
89
+ return;
90
+ }
91
+ const widgetId = `${widgetSlug}-${Date.now()}`;
92
+ const widget = widgets.find((widget)=>widget.slug === widgetSlug);
93
+ // Create a new widget instance using RenderWidget
94
+ const newWidgetInstance = {
95
+ component: React.createElement(RenderWidget, {
96
+ widgetData: {},
97
+ widgetId
98
+ }),
99
+ item: {
100
+ id: widgetId,
101
+ data: {},
102
+ maxWidth: widget?.maxWidth ?? 'full',
103
+ minWidth: widget?.minWidth ?? 'x-small',
104
+ width: widget?.minWidth ?? 'x-small'
105
+ }
106
+ };
107
+ setCurrentLayout((prev)=>[
108
+ ...prev,
109
+ newWidgetInstance
110
+ ]);
111
+ // Scroll to the newly added widget after it's rendered and highlight it
112
+ setTimeout(()=>{
113
+ const element = document.getElementById(widgetId);
114
+ if (element) {
115
+ element.scrollIntoView({
116
+ behavior: 'smooth',
117
+ block: 'center'
118
+ });
119
+ // Add highlight animation to the widget element
120
+ const widget = element.closest('.widget');
121
+ if (widget) {
122
+ widget.classList.add('widget--highlight');
123
+ // Remove the class after animation completes (1.5s fade out)
124
+ setTimeout(()=>{
125
+ widget.classList.remove('widget--highlight');
126
+ }, 1500);
127
+ }
128
+ }
129
+ }, 100);
130
+ }, [
131
+ isEditing,
132
+ widgets
133
+ ]);
134
+ const deleteWidget = useCallback((widgetId)=>{
135
+ if (!isEditing) {
136
+ return;
137
+ }
138
+ setCurrentLayout((prev)=>prev.filter((item)=>item.item.id !== widgetId));
139
+ }, [
140
+ isEditing
141
+ ]);
142
+ const resizeWidget = useCallback((widgetId, newWidth)=>{
143
+ if (!isEditing) {
144
+ return;
119
145
  }
120
- }
121
- }, 100);
122
- }, [isEditing, widgets]);
123
- const deleteWidget = useCallback(widgetId => {
124
- if (!isEditing) {
125
- return;
126
- }
127
- setCurrentLayout(prev => prev.filter(item => item.item.id !== widgetId));
128
- }, [isEditing]);
129
- const resizeWidget = useCallback((widgetId, newWidth) => {
130
- if (!isEditing) {
131
- return;
132
- }
133
- setCurrentLayout(prev => prev.map(item => item.item.id === widgetId ? {
134
- ...item,
135
- item: {
136
- ...item.item,
137
- width: newWidth
138
- }
139
- } : item));
140
- }, [isEditing]);
141
- const updateWidgetData = useCallback((widgetId, data) => {
142
- if (!isEditing) {
143
- return;
144
- }
145
- setCurrentLayout(prev => prev.map(item => item.item.id === widgetId ? {
146
- component: React.createElement(RenderWidget, {
147
- widgetData: data,
148
- widgetId
149
- }),
150
- item: {
151
- ...item.item,
152
- data
153
- }
154
- } : item));
155
- }, [isEditing]);
156
- const cancelModal = React.createElement(ConfirmationModal, {
157
- body: t('dashboard:discardMessage'),
158
- confirmLabel: t('dashboard:discardConfirmLabel'),
159
- heading: t('dashboard:discardTitle'),
160
- modalSlug: cancelModalSlug,
161
- onConfirm: performCancel
162
- });
163
- return {
164
- addWidget,
165
- cancel,
166
- cancelModal,
167
- currentLayout,
168
- deleteWidget,
169
- isEditing,
170
- moveWidget,
171
- resetLayout,
172
- resizeWidget,
173
- saveLayout,
174
- setIsEditing,
175
- updateWidgetData
176
- };
146
+ setCurrentLayout((prev)=>prev.map((item)=>item.item.id === widgetId ? {
147
+ ...item,
148
+ item: {
149
+ ...item.item,
150
+ width: newWidth
151
+ }
152
+ } : item));
153
+ }, [
154
+ isEditing
155
+ ]);
156
+ const updateWidgetData = useCallback((widgetId, data)=>{
157
+ if (!isEditing) {
158
+ return;
159
+ }
160
+ setCurrentLayout((prev)=>prev.map((item)=>item.item.id === widgetId ? {
161
+ component: React.createElement(RenderWidget, {
162
+ widgetData: data,
163
+ widgetId
164
+ }),
165
+ item: {
166
+ ...item.item,
167
+ data
168
+ }
169
+ } : item));
170
+ }, [
171
+ isEditing
172
+ ]);
173
+ const cancelModal = React.createElement(ConfirmationModal, {
174
+ body: t('dashboard:discardMessage'),
175
+ confirmLabel: t('dashboard:discardConfirmLabel'),
176
+ heading: t('dashboard:discardTitle'),
177
+ modalSlug: cancelModalSlug,
178
+ onConfirm: performCancel
179
+ });
180
+ return {
181
+ addWidget,
182
+ cancel,
183
+ cancelModal,
184
+ currentLayout,
185
+ deleteWidget,
186
+ isEditing,
187
+ moveWidget,
188
+ resetLayout,
189
+ resizeWidget,
190
+ saveLayout,
191
+ setIsEditing,
192
+ updateWidgetData
193
+ };
177
194
  }
178
195
  function useSetLayoutPreference() {
179
- const {
180
- setPreference
181
- } = usePreferences();
182
- return useCallback(async layout => {
183
- await setPreference(PREFERENCE_KEYS.DASHBOARD_LAYOUT, {
184
- layouts: layout
185
- }, false);
186
- }, [setPreference]);
196
+ const { setPreference } = usePreferences();
197
+ return useCallback(async (layout)=>{
198
+ await setPreference(PREFERENCE_KEYS.DASHBOARD_LAYOUT, {
199
+ layouts: layout
200
+ }, false);
201
+ }, [
202
+ setPreference
203
+ ]);
187
204
  }
205
+
188
206
  //# sourceMappingURL=useDashboardLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboardLayout.js","names":["arrayMove","ConfirmationModal","toast","useConfig","useModal","usePreferences","useServerFunctions","useTranslation","PREFERENCE_KEYS","React","useCallback","useEffect","useState","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","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 {\n ConfirmationModal,\n toast,\n useConfig,\n useModal,\n usePreferences,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { WidgetInstanceClient, WidgetItem } from './index.client.js'\nimport type { GetDefaultLayoutServerFnReturnType } from './renderWidget/getDefaultLayoutServerFn.js'\n\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.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,"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/useDashboardLayout.ts"],"sourcesContent":["import type { WidgetWidth } from 'payload'\n\nimport { arrayMove } from '@dnd-kit/sortable'\nimport {\n ConfirmationModal,\n toast,\n useConfig,\n useModal,\n usePreferences,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui'\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { WidgetInstanceClient, WidgetItem } from './index.client.js'\nimport type { GetDefaultLayoutServerFnReturnType } from './renderWidget/getDefaultLayoutServerFn.js'\n\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.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"],"names":["arrayMove","ConfirmationModal","toast","useConfig","useModal","usePreferences","useServerFunctions","useTranslation","PREFERENCE_KEYS","React","useCallback","useEffect","useState","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","scrollIntoView","behavior","block","closest","classList","add","remove","deleteWidget","filter","resizeWidget","newWidth","updateWidgetData","cancelModal","body","confirmLabel","heading","modalSlug","onConfirm","setPreference","DASHBOARD_LAYOUT","layouts"],"mappings":"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"}
@@ -1,38 +1,39 @@
1
1
  /**
2
2
  * Collision detection that considers the X
3
3
  * axis only with respect to the position of the pointer (or collisionRect for keyboard)
4
- */export const closestInXAxis = args => {
5
- const collisions = [];
6
- // Use pointer coordinates if available (mouse/touch), otherwise use collisionRect center (keyboard)
7
- let x;
8
- let y;
9
- if (args.pointerCoordinates) {
10
- x = args.pointerCoordinates.x;
11
- y = args.pointerCoordinates.y;
12
- } else if (args.collisionRect) {
13
- // For keyboard navigation, use the center of the collisionRect
14
- x = args.collisionRect.left + args.collisionRect.width / 2;
15
- y = args.collisionRect.top + args.collisionRect.height / 2;
16
- } else {
17
- return [];
18
- }
19
- for (const container of args.droppableContainers) {
20
- const rect = args.droppableRects.get(container.id);
21
- if (!rect) {
22
- continue;
4
+ */ export const closestInXAxis = (args)=>{
5
+ const collisions = [];
6
+ // Use pointer coordinates if available (mouse/touch), otherwise use collisionRect center (keyboard)
7
+ let x;
8
+ let y;
9
+ if (args.pointerCoordinates) {
10
+ x = args.pointerCoordinates.x;
11
+ y = args.pointerCoordinates.y;
12
+ } else if (args.collisionRect) {
13
+ // For keyboard navigation, use the center of the collisionRect
14
+ x = args.collisionRect.left + args.collisionRect.width / 2;
15
+ y = args.collisionRect.top + args.collisionRect.height / 2;
16
+ } else {
17
+ return [];
23
18
  }
24
- // Only consider widgets in the same row (same Y axis)
25
- if (y >= rect.top && y <= rect.bottom) {
26
- const centerX = rect.left + rect.width / 2;
27
- const distance = Math.abs(x - centerX);
28
- collisions.push({
29
- id: String(container.id),
30
- data: {
31
- value: distance
19
+ for (const container of args.droppableContainers){
20
+ const rect = args.droppableRects.get(container.id);
21
+ if (!rect) {
22
+ continue;
23
+ }
24
+ // Only consider widgets in the same row (same Y axis)
25
+ if (y >= rect.top && y <= rect.bottom) {
26
+ const centerX = rect.left + rect.width / 2;
27
+ const distance = Math.abs(x - centerX);
28
+ collisions.push({
29
+ id: String(container.id),
30
+ data: {
31
+ value: distance
32
+ }
33
+ });
32
34
  }
33
- });
34
35
  }
35
- }
36
- return collisions.sort((a, b) => a.data.value - b.data.value);
36
+ return collisions.sort((a, b)=>a.data.value - b.data.value);
37
37
  };
38
+
38
39
  //# sourceMappingURL=collisionDetection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collisionDetection.js","names":["closestInXAxis","args","collisions","x","y","pointerCoordinates","collisionRect","left","width","top","height","container","droppableContainers","rect","droppableRects","get","id","bottom","centerX","distance","Math","abs","push","String","data","value","sort","a","b"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.ts"],"sourcesContent":["import type { CollisionDetection } from '@dnd-kit/core'\n\n/**\n * Collision detection that considers the X\n * axis only with respect to the position of the pointer (or collisionRect for keyboard)\n */\nexport const closestInXAxis: CollisionDetection = (args) => {\n const collisions: Array<{ data: { value: number }; id: string }> = []\n\n // Use pointer coordinates if available (mouse/touch), otherwise use collisionRect center (keyboard)\n let x: number\n let y: number\n\n if (args.pointerCoordinates) {\n x = args.pointerCoordinates.x\n y = args.pointerCoordinates.y\n } else if (args.collisionRect) {\n // For keyboard navigation, use the center of the collisionRect\n x = args.collisionRect.left + args.collisionRect.width / 2\n y = args.collisionRect.top + args.collisionRect.height / 2\n } else {\n return []\n }\n\n for (const container of args.droppableContainers) {\n const rect = args.droppableRects.get(container.id)\n if (!rect) {\n continue\n }\n\n // Only consider widgets in the same row (same Y axis)\n if (y >= rect.top && y <= rect.bottom) {\n const centerX = rect.left + rect.width / 2\n const distance = Math.abs(x - centerX)\n collisions.push({ id: String(container.id), data: { value: distance } })\n }\n }\n\n return collisions.sort((a, b) => a.data.value - b.data.value)\n}\n"],"mappings":"AAEA;;;GAIA,OAAO,MAAMA,cAAA,GAAsCC,IAAA;EACjD,MAAMC,UAAA,GAA6D,EAAE;EAErE;EACA,IAAIC,CAAA;EACJ,IAAIC,CAAA;EAEJ,IAAIH,IAAA,CAAKI,kBAAkB,EAAE;IAC3BF,CAAA,GAAIF,IAAA,CAAKI,kBAAkB,CAACF,CAAC;IAC7BC,CAAA,GAAIH,IAAA,CAAKI,kBAAkB,CAACD,CAAC;EAC/B,OAAO,IAAIH,IAAA,CAAKK,aAAa,EAAE;IAC7B;IACAH,CAAA,GAAIF,IAAA,CAAKK,aAAa,CAACC,IAAI,GAAGN,IAAA,CAAKK,aAAa,CAACE,KAAK,GAAG;IACzDJ,CAAA,GAAIH,IAAA,CAAKK,aAAa,CAACG,GAAG,GAAGR,IAAA,CAAKK,aAAa,CAACI,MAAM,GAAG;EAC3D,OAAO;IACL,OAAO,EAAE;EACX;EAEA,KAAK,MAAMC,SAAA,IAAaV,IAAA,CAAKW,mBAAmB,EAAE;IAChD,MAAMC,IAAA,GAAOZ,IAAA,CAAKa,cAAc,CAACC,GAAG,CAACJ,SAAA,CAAUK,EAAE;IACjD,IAAI,CAACH,IAAA,EAAM;MACT;IACF;IAEA;IACA,IAAIT,CAAA,IAAKS,IAAA,CAAKJ,GAAG,IAAIL,CAAA,IAAKS,IAAA,CAAKI,MAAM,EAAE;MACrC,MAAMC,OAAA,GAAUL,IAAA,CAAKN,IAAI,GAAGM,IAAA,CAAKL,KAAK,GAAG;MACzC,MAAMW,QAAA,GAAWC,IAAA,CAAKC,GAAG,CAAClB,CAAA,GAAIe,OAAA;MAC9BhB,UAAA,CAAWoB,IAAI,CAAC;QAAEN,EAAA,EAAIO,MAAA,CAAOZ,SAAA,CAAUK,EAAE;QAAGQ,IAAA,EAAM;UAAEC,KAAA,EAAON;QAAS;MAAE;IACxE;EACF;EAEA,OAAOjB,UAAA,CAAWwB,IAAI,CAAC,CAACC,CAAA,EAAGC,CAAA,KAAMD,CAAA,CAAEH,IAAI,CAACC,KAAK,GAAGG,CAAA,CAAEJ,IAAI,CAACC,KAAK;AAC9D","ignoreList":[]}
1
+ {"version":3,"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.ts"],"sourcesContent":["import type { CollisionDetection } from '@dnd-kit/core'\n\n/**\n * Collision detection that considers the X\n * axis only with respect to the position of the pointer (or collisionRect for keyboard)\n */\nexport const closestInXAxis: CollisionDetection = (args) => {\n const collisions: Array<{ data: { value: number }; id: string }> = []\n\n // Use pointer coordinates if available (mouse/touch), otherwise use collisionRect center (keyboard)\n let x: number\n let y: number\n\n if (args.pointerCoordinates) {\n x = args.pointerCoordinates.x\n y = args.pointerCoordinates.y\n } else if (args.collisionRect) {\n // For keyboard navigation, use the center of the collisionRect\n x = args.collisionRect.left + args.collisionRect.width / 2\n y = args.collisionRect.top + args.collisionRect.height / 2\n } else {\n return []\n }\n\n for (const container of args.droppableContainers) {\n const rect = args.droppableRects.get(container.id)\n if (!rect) {\n continue\n }\n\n // Only consider widgets in the same row (same Y axis)\n if (y >= rect.top && y <= rect.bottom) {\n const centerX = rect.left + rect.width / 2\n const distance = Math.abs(x - centerX)\n collisions.push({ id: String(container.id), data: { value: distance } })\n }\n }\n\n return collisions.sort((a, b) => a.data.value - b.data.value)\n}\n"],"names":["closestInXAxis","args","collisions","x","y","pointerCoordinates","collisionRect","left","width","top","height","container","droppableContainers","rect","droppableRects","get","id","bottom","centerX","distance","Math","abs","push","String","data","value","sort","a","b"],"mappings":"AAEA;;;CAGC,GACD,OAAO,MAAMA,iBAAqC,CAACC;IACjD,MAAMC,aAA6D,EAAE;IAErE,oGAAoG;IACpG,IAAIC;IACJ,IAAIC;IAEJ,IAAIH,KAAKI,kBAAkB,EAAE;QAC3BF,IAAIF,KAAKI,kBAAkB,CAACF,CAAC;QAC7BC,IAAIH,KAAKI,kBAAkB,CAACD,CAAC;IAC/B,OAAO,IAAIH,KAAKK,aAAa,EAAE;QAC7B,+DAA+D;QAC/DH,IAAIF,KAAKK,aAAa,CAACC,IAAI,GAAGN,KAAKK,aAAa,CAACE,KAAK,GAAG;QACzDJ,IAAIH,KAAKK,aAAa,CAACG,GAAG,GAAGR,KAAKK,aAAa,CAACI,MAAM,GAAG;IAC3D,OAAO;QACL,OAAO,EAAE;IACX;IAEA,KAAK,MAAMC,aAAaV,KAAKW,mBAAmB,CAAE;QAChD,MAAMC,OAAOZ,KAAKa,cAAc,CAACC,GAAG,CAACJ,UAAUK,EAAE;QACjD,IAAI,CAACH,MAAM;YACT;QACF;QAEA,sDAAsD;QACtD,IAAIT,KAAKS,KAAKJ,GAAG,IAAIL,KAAKS,KAAKI,MAAM,EAAE;YACrC,MAAMC,UAAUL,KAAKN,IAAI,GAAGM,KAAKL,KAAK,GAAG;YACzC,MAAMW,WAAWC,KAAKC,GAAG,CAAClB,IAAIe;YAC9BhB,WAAWoB,IAAI,CAAC;gBAAEN,IAAIO,OAAOZ,UAAUK,EAAE;gBAAGQ,MAAM;oBAAEC,OAAON;gBAAS;YAAE;QACxE;IACF;IAEA,OAAOjB,WAAWwB,IAAI,CAAC,CAACC,GAAGC,IAAMD,EAAEH,IAAI,CAACC,KAAK,GAAGG,EAAEJ,IAAI,CAACC,KAAK;AAC9D,EAAC"}
@@ -1,21 +1,22 @@
1
1
  export async function getItemsFromConfig(defaultLayout, req, widgets) {
2
- let widgetInstances;
3
- if (typeof defaultLayout === 'function') {
4
- widgetInstances = await defaultLayout({
5
- req
2
+ let widgetInstances;
3
+ if (typeof defaultLayout === 'function') {
4
+ widgetInstances = await defaultLayout({
5
+ req
6
+ });
7
+ } else {
8
+ widgetInstances = defaultLayout;
9
+ }
10
+ return widgetInstances.map((widgetInstance, index)=>{
11
+ const widget = widgets.find((w)=>w.slug === widgetInstance.widgetSlug);
12
+ return {
13
+ id: `${widgetInstance.widgetSlug}-${index}`,
14
+ data: widgetInstance.data,
15
+ maxWidth: widget?.maxWidth ?? 'full',
16
+ minWidth: widget?.minWidth ?? 'x-small',
17
+ width: widgetInstance.width || 'x-small'
18
+ };
6
19
  });
7
- } else {
8
- widgetInstances = defaultLayout;
9
- }
10
- return widgetInstances.map((widgetInstance, index) => {
11
- const widget = widgets.find(w => w.slug === widgetInstance.widgetSlug);
12
- return {
13
- id: `${widgetInstance.widgetSlug}-${index}`,
14
- data: widgetInstance.data,
15
- maxWidth: widget?.maxWidth ?? 'full',
16
- minWidth: widget?.minWidth ?? 'x-small',
17
- width: widgetInstance.width || 'x-small'
18
- };
19
- });
20
20
  }
21
+
21
22
  //# sourceMappingURL=getItemsFromConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getItemsFromConfig.js","names":["getItemsFromConfig","defaultLayout","req","widgets","widgetInstances","map","widgetInstance","index","widget","find","w","slug","widgetSlug","id","data","maxWidth","minWidth","width"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.ts"],"sourcesContent":["import type { DashboardConfig, PayloadRequest, Widget, WidgetInstance } from 'payload'\n\nimport type { WidgetItem } from '../index.client.js'\n\nexport async function getItemsFromConfig(\n defaultLayout: NonNullable<DashboardConfig['defaultLayout']>,\n req: PayloadRequest,\n widgets: Pick<Widget, 'maxWidth' | 'minWidth' | 'slug'>[],\n): Promise<WidgetItem[]> {\n let widgetInstances: WidgetInstance[]\n if (typeof defaultLayout === 'function') {\n widgetInstances = await defaultLayout({ req })\n } else {\n widgetInstances = defaultLayout\n }\n\n return widgetInstances.map((widgetInstance, index) => {\n const widget = widgets.find((w) => w.slug === widgetInstance.widgetSlug)\n return {\n id: `${widgetInstance.widgetSlug}-${index}`,\n data: widgetInstance.data,\n maxWidth: widget?.maxWidth ?? 'full',\n minWidth: widget?.minWidth ?? 'x-small',\n width: widgetInstance.width || 'x-small',\n }\n })\n}\n"],"mappings":"AAIA,OAAO,eAAeA,mBACpBC,aAA4D,EAC5DC,GAAmB,EACnBC,OAAyD;EAEzD,IAAIC,eAAA;EACJ,IAAI,OAAOH,aAAA,KAAkB,YAAY;IACvCG,eAAA,GAAkB,MAAMH,aAAA,CAAc;MAAEC;IAAI;EAC9C,OAAO;IACLE,eAAA,GAAkBH,aAAA;EACpB;EAEA,OAAOG,eAAA,CAAgBC,GAAG,CAAC,CAACC,cAAA,EAAgBC,KAAA;IAC1C,MAAMC,MAAA,GAASL,OAAA,CAAQM,IAAI,CAAEC,CAAA,IAAMA,CAAA,CAAEC,IAAI,KAAKL,cAAA,CAAeM,UAAU;IACvE,OAAO;MACLC,EAAA,EAAI,GAAGP,cAAA,CAAeM,UAAU,IAAIL,KAAA,EAAO;MAC3CO,IAAA,EAAMR,cAAA,CAAeQ,IAAI;MACzBC,QAAA,EAAUP,MAAA,EAAQO,QAAA,IAAY;MAC9BC,QAAA,EAAUR,MAAA,EAAQQ,QAAA,IAAY;MAC9BC,KAAA,EAAOX,cAAA,CAAeW,KAAK,IAAI;IACjC;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.ts"],"sourcesContent":["import type { DashboardConfig, PayloadRequest, Widget, WidgetInstance } from 'payload'\n\nimport type { WidgetItem } from '../index.client.js'\n\nexport async function getItemsFromConfig(\n defaultLayout: NonNullable<DashboardConfig['defaultLayout']>,\n req: PayloadRequest,\n widgets: Pick<Widget, 'maxWidth' | 'minWidth' | 'slug'>[],\n): Promise<WidgetItem[]> {\n let widgetInstances: WidgetInstance[]\n if (typeof defaultLayout === 'function') {\n widgetInstances = await defaultLayout({ req })\n } else {\n widgetInstances = defaultLayout\n }\n\n return widgetInstances.map((widgetInstance, index) => {\n const widget = widgets.find((w) => w.slug === widgetInstance.widgetSlug)\n return {\n id: `${widgetInstance.widgetSlug}-${index}`,\n data: widgetInstance.data,\n maxWidth: widget?.maxWidth ?? 'full',\n minWidth: widget?.minWidth ?? 'x-small',\n width: widgetInstance.width || 'x-small',\n }\n })\n}\n"],"names":["getItemsFromConfig","defaultLayout","req","widgets","widgetInstances","map","widgetInstance","index","widget","find","w","slug","widgetSlug","id","data","maxWidth","minWidth","width"],"mappings":"AAIA,OAAO,eAAeA,mBACpBC,aAA4D,EAC5DC,GAAmB,EACnBC,OAAyD;IAEzD,IAAIC;IACJ,IAAI,OAAOH,kBAAkB,YAAY;QACvCG,kBAAkB,MAAMH,cAAc;YAAEC;QAAI;IAC9C,OAAO;QACLE,kBAAkBH;IACpB;IAEA,OAAOG,gBAAgBC,GAAG,CAAC,CAACC,gBAAgBC;QAC1C,MAAMC,SAASL,QAAQM,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKL,eAAeM,UAAU;QACvE,OAAO;YACLC,IAAI,GAAGP,eAAeM,UAAU,CAAC,CAAC,EAAEL,OAAO;YAC3CO,MAAMR,eAAeQ,IAAI;YACzBC,UAAUP,QAAQO,YAAY;YAC9BC,UAAUR,QAAQQ,YAAY;YAC9BC,OAAOX,eAAeW,KAAK,IAAI;QACjC;IACF;AACF"}
@@ -1,10 +1,11 @@
1
1
  import { PREFERENCE_KEYS } from 'payload/shared';
2
2
  import { getPreferences } from '../../../../../utilities/getPreferences.js';
3
3
  export async function getItemsFromPreferences(payload, user) {
4
- const savedPreferences = await getPreferences(PREFERENCE_KEYS.DASHBOARD_LAYOUT, payload, user.id, user.collection);
5
- if (!savedPreferences?.value || typeof savedPreferences.value !== 'object' || !('layouts' in savedPreferences.value)) {
6
- return null;
7
- }
8
- return savedPreferences.value.layouts;
4
+ const savedPreferences = await getPreferences(PREFERENCE_KEYS.DASHBOARD_LAYOUT, payload, user.id, user.collection);
5
+ if (!savedPreferences?.value || typeof savedPreferences.value !== 'object' || !('layouts' in savedPreferences.value)) {
6
+ return null;
7
+ }
8
+ return savedPreferences.value.layouts;
9
9
  }
10
+
10
11
  //# sourceMappingURL=getItemsFromPreferences.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getItemsFromPreferences.js","names":["PREFERENCE_KEYS","getPreferences","getItemsFromPreferences","payload","user","savedPreferences","DASHBOARD_LAYOUT","id","collection","value","layouts"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.ts"],"sourcesContent":["import type { BasePayload, TypedUser } from 'payload'\n\nimport { PREFERENCE_KEYS } from 'payload/shared'\n\nimport type { WidgetItem } from '../index.client.js'\n\nimport { getPreferences } from '../../../../../utilities/getPreferences.js'\n\nexport async function getItemsFromPreferences(\n payload: BasePayload,\n user: TypedUser,\n): Promise<null | WidgetItem[]> {\n const savedPreferences = await getPreferences(\n PREFERENCE_KEYS.DASHBOARD_LAYOUT,\n payload,\n user.id,\n user.collection,\n )\n if (\n !savedPreferences?.value ||\n typeof savedPreferences.value !== 'object' ||\n !('layouts' in savedPreferences.value)\n ) {\n return null\n }\n return savedPreferences.value.layouts as null | WidgetItem[]\n}\n"],"mappings":"AAEA,SAASA,eAAe,QAAQ;AAIhC,SAASC,cAAc,QAAQ;AAE/B,OAAO,eAAeC,wBACpBC,OAAoB,EACpBC,IAAe;EAEf,MAAMC,gBAAA,GAAmB,MAAMJ,cAAA,CAC7BD,eAAA,CAAgBM,gBAAgB,EAChCH,OAAA,EACAC,IAAA,CAAKG,EAAE,EACPH,IAAA,CAAKI,UAAU;EAEjB,IACE,CAACH,gBAAA,EAAkBI,KAAA,IACnB,OAAOJ,gBAAA,CAAiBI,KAAK,KAAK,YAClC,EAAE,aAAaJ,gBAAA,CAAiBI,KAAK,CAAD,EACpC;IACA,OAAO;EACT;EACA,OAAOJ,gBAAA,CAAiBI,KAAK,CAACC,OAAO;AACvC","ignoreList":[]}
1
+ {"version":3,"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.ts"],"sourcesContent":["import type { BasePayload, TypedUser } from 'payload'\n\nimport { PREFERENCE_KEYS } from 'payload/shared'\n\nimport type { WidgetItem } from '../index.client.js'\n\nimport { getPreferences } from '../../../../../utilities/getPreferences.js'\n\nexport async function getItemsFromPreferences(\n payload: BasePayload,\n user: TypedUser,\n): Promise<null | WidgetItem[]> {\n const savedPreferences = await getPreferences(\n PREFERENCE_KEYS.DASHBOARD_LAYOUT,\n payload,\n user.id,\n user.collection,\n )\n if (\n !savedPreferences?.value ||\n typeof savedPreferences.value !== 'object' ||\n !('layouts' in savedPreferences.value)\n ) {\n return null\n }\n return savedPreferences.value.layouts as null | WidgetItem[]\n}\n"],"names":["PREFERENCE_KEYS","getPreferences","getItemsFromPreferences","payload","user","savedPreferences","DASHBOARD_LAYOUT","id","collection","value","layouts"],"mappings":"AAEA,SAASA,eAAe,QAAQ,iBAAgB;AAIhD,SAASC,cAAc,QAAQ,6CAA4C;AAE3E,OAAO,eAAeC,wBACpBC,OAAoB,EACpBC,IAAe;IAEf,MAAMC,mBAAmB,MAAMJ,eAC7BD,gBAAgBM,gBAAgB,EAChCH,SACAC,KAAKG,EAAE,EACPH,KAAKI,UAAU;IAEjB,IACE,CAACH,kBAAkBI,SACnB,OAAOJ,iBAAiBI,KAAK,KAAK,YAClC,CAAE,CAAA,aAAaJ,iBAAiBI,KAAK,AAAD,GACpC;QACA,OAAO;IACT;IACA,OAAOJ,iBAAiBI,KAAK,CAACC,OAAO;AACvC"}