@payloadcms/next 3.71.0-internal-debug.80dab4c → 3.71.0-internal.27e1e08

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 (448) hide show
  1. package/dist/auth/login.js +58 -52
  2. package/dist/auth/login.js.map +1 -1
  3. package/dist/auth/logout.js +44 -39
  4. package/dist/auth/logout.js.map +1 -1
  5. package/dist/auth/refresh.js +47 -45
  6. package/dist/auth/refresh.js.map +1 -1
  7. package/dist/cjs/withPayload.cjs +23 -61
  8. package/dist/cjs/withPayload.cjs.map +2 -2
  9. package/dist/config.js +0 -1
  10. package/dist/config.js.map +1 -1
  11. package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +15 -9
  12. package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js.map +1 -1
  13. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +71 -40
  14. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
  15. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +59 -65
  16. package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
  17. package/dist/elements/DocumentHeader/Tabs/index.js +70 -80
  18. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  19. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +23 -16
  20. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -1
  21. package/dist/elements/DocumentHeader/Tabs/tabs/index.js +69 -61
  22. package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
  23. package/dist/elements/DocumentHeader/index.js +28 -48
  24. package/dist/elements/DocumentHeader/index.js.map +1 -1
  25. package/dist/elements/FormHeader/index.js +16 -30
  26. package/dist/elements/FormHeader/index.js.map +1 -1
  27. package/dist/elements/Logo/index.js +34 -19
  28. package/dist/elements/Logo/index.js.map +1 -1
  29. package/dist/elements/Nav/NavHamburger/index.js +44 -23
  30. package/dist/elements/Nav/NavHamburger/index.js.map +1 -1
  31. package/dist/elements/Nav/NavWrapper/index.js +54 -28
  32. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  33. package/dist/elements/Nav/SettingsMenuButton/index.js +39 -33
  34. package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -1
  35. package/dist/elements/Nav/getNavPrefs.js +22 -27
  36. package/dist/elements/Nav/getNavPrefs.js.map +1 -1
  37. package/dist/elements/Nav/index.client.js +118 -97
  38. package/dist/elements/Nav/index.client.js.map +1 -1
  39. package/dist/elements/Nav/index.js +127 -148
  40. package/dist/elements/Nav/index.js.map +1 -1
  41. package/dist/exports/auth.js +0 -1
  42. package/dist/exports/auth.js.map +1 -1
  43. package/dist/exports/client.js +1 -1
  44. package/dist/exports/client.js.map +1 -1
  45. package/dist/exports/layouts.js +0 -1
  46. package/dist/exports/layouts.js.map +1 -1
  47. package/dist/exports/routes.js +0 -1
  48. package/dist/exports/routes.js.map +1 -1
  49. package/dist/exports/rsc.js +0 -1
  50. package/dist/exports/rsc.js.map +1 -1
  51. package/dist/exports/templates.js +0 -1
  52. package/dist/exports/templates.js.map +1 -1
  53. package/dist/exports/utilities.js +12 -7
  54. package/dist/exports/utilities.js.map +1 -1
  55. package/dist/exports/views.js +0 -1
  56. package/dist/exports/views.js.map +1 -1
  57. package/dist/index.js +0 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/layouts/Root/NestProviders.js +20 -21
  60. package/dist/layouts/Root/NestProviders.js.map +1 -1
  61. package/dist/layouts/Root/checkDependencies.js +41 -49
  62. package/dist/layouts/Root/checkDependencies.js.map +1 -1
  63. package/dist/layouts/Root/index.js +103 -128
  64. package/dist/layouts/Root/index.js.map +1 -1
  65. package/dist/prod/styles.css +1 -5
  66. package/dist/routes/graphql/handler.js +122 -114
  67. package/dist/routes/graphql/handler.js.map +1 -1
  68. package/dist/routes/graphql/index.js +0 -1
  69. package/dist/routes/graphql/index.js.map +1 -1
  70. package/dist/routes/graphql/playground.js +27 -28
  71. package/dist/routes/graphql/playground.js.map +1 -1
  72. package/dist/routes/index.js +0 -1
  73. package/dist/routes/index.js.map +1 -1
  74. package/dist/routes/rest/index.js +22 -23
  75. package/dist/routes/rest/index.js.map +1 -1
  76. package/dist/routes/rest/og/image.js +79 -103
  77. package/dist/routes/rest/og/image.js.map +1 -1
  78. package/dist/routes/rest/og/index.js +54 -59
  79. package/dist/routes/rest/og/index.js.map +1 -1
  80. package/dist/templates/Default/NavHamburger/index.js +20 -12
  81. package/dist/templates/Default/NavHamburger/index.js.map +1 -1
  82. package/dist/templates/Default/Wrapper/index.js +44 -20
  83. package/dist/templates/Default/Wrapper/index.js.map +1 -1
  84. package/dist/templates/Default/index.js +116 -147
  85. package/dist/templates/Default/index.js.map +1 -1
  86. package/dist/templates/Minimal/index.js +17 -26
  87. package/dist/templates/Minimal/index.js.map +1 -1
  88. package/dist/utilities/getExistingAuthToken.js +2 -3
  89. package/dist/utilities/getExistingAuthToken.js.map +1 -1
  90. package/dist/utilities/getNextRequestI18n.js +13 -12
  91. package/dist/utilities/getNextRequestI18n.js.map +1 -1
  92. package/dist/utilities/getPayloadHMR.js +5 -5
  93. package/dist/utilities/getPayloadHMR.js.map +1 -1
  94. package/dist/utilities/getPreferences.js +22 -27
  95. package/dist/utilities/getPreferences.js.map +1 -1
  96. package/dist/utilities/getRequestLocale.js +14 -13
  97. package/dist/utilities/getRequestLocale.js.map +1 -1
  98. package/dist/utilities/getRequestTheme.js +19 -19
  99. package/dist/utilities/getRequestTheme.js.map +1 -1
  100. package/dist/utilities/getRouteWithoutAdmin.js +5 -3
  101. package/dist/utilities/getRouteWithoutAdmin.js.map +1 -1
  102. package/dist/utilities/handleAuthRedirect.js +36 -22
  103. package/dist/utilities/handleAuthRedirect.js.map +1 -1
  104. package/dist/utilities/handleServerFunctions.js +41 -34
  105. package/dist/utilities/handleServerFunctions.js.map +1 -1
  106. package/dist/utilities/initReq.js +96 -78
  107. package/dist/utilities/initReq.js.map +1 -1
  108. package/dist/utilities/isCustomAdminView.js +26 -22
  109. package/dist/utilities/isCustomAdminView.js.map +1 -1
  110. package/dist/utilities/isPublicAdminRoute.js +20 -26
  111. package/dist/utilities/isPublicAdminRoute.js.map +1 -1
  112. package/dist/utilities/meta.js +63 -68
  113. package/dist/utilities/meta.js.map +1 -1
  114. package/dist/utilities/selectiveCache.js +26 -25
  115. package/dist/utilities/selectiveCache.js.map +1 -1
  116. package/dist/utilities/setPayloadAuthCookie.js +22 -19
  117. package/dist/utilities/setPayloadAuthCookie.js.map +1 -1
  118. package/dist/utilities/slugify.js +33 -24
  119. package/dist/utilities/slugify.js.map +1 -1
  120. package/dist/utilities/timestamp.js +6 -7
  121. package/dist/utilities/timestamp.js.map +1 -1
  122. package/dist/views/API/LocaleSelector/index.js +39 -17
  123. package/dist/views/API/LocaleSelector/index.js.map +1 -1
  124. package/dist/views/API/RenderJSON/index.js +126 -171
  125. package/dist/views/API/RenderJSON/index.js.map +1 -1
  126. package/dist/views/API/index.client.js +197 -290
  127. package/dist/views/API/index.client.js.map +1 -1
  128. package/dist/views/API/index.js +2 -7
  129. package/dist/views/API/index.js.map +1 -1
  130. package/dist/views/API/metadata.js +23 -18
  131. package/dist/views/API/metadata.js.map +1 -1
  132. package/dist/views/Account/ResetPreferences/index.js +102 -78
  133. package/dist/views/Account/ResetPreferences/index.js.map +1 -1
  134. package/dist/views/Account/Settings/LanguageSelector.js +47 -18
  135. package/dist/views/Account/Settings/LanguageSelector.js.map +1 -1
  136. package/dist/views/Account/Settings/index.js +25 -60
  137. package/dist/views/Account/Settings/index.js.map +1 -1
  138. package/dist/views/Account/ToggleTheme/index.js +55 -38
  139. package/dist/views/Account/ToggleTheme/index.js.map +1 -1
  140. package/dist/views/Account/index.client.js +32 -16
  141. package/dist/views/Account/index.client.js.map +1 -1
  142. package/dist/views/Account/index.js +158 -147
  143. package/dist/views/Account/index.js.map +1 -1
  144. package/dist/views/Account/metadata.js +12 -8
  145. package/dist/views/Account/metadata.js.map +1 -1
  146. package/dist/views/BrowseByFolder/buildView.js +157 -138
  147. package/dist/views/BrowseByFolder/buildView.js.map +1 -1
  148. package/dist/views/BrowseByFolder/index.js +16 -16
  149. package/dist/views/BrowseByFolder/index.js.map +1 -1
  150. package/dist/views/BrowseByFolder/metadata.js +15 -13
  151. package/dist/views/BrowseByFolder/metadata.js.map +1 -1
  152. package/dist/views/CollectionFolders/buildView.js +142 -122
  153. package/dist/views/CollectionFolders/buildView.js.map +1 -1
  154. package/dist/views/CollectionFolders/index.js +16 -16
  155. package/dist/views/CollectionFolders/index.js.map +1 -1
  156. package/dist/views/CollectionFolders/metadata.js +21 -18
  157. package/dist/views/CollectionFolders/metadata.js.map +1 -1
  158. package/dist/views/CollectionFolders/renderFolderViewSlots.js +61 -58
  159. package/dist/views/CollectionFolders/renderFolderViewSlots.js.map +1 -1
  160. package/dist/views/CollectionTrash/index.js +17 -17
  161. package/dist/views/CollectionTrash/index.js.map +1 -1
  162. package/dist/views/CollectionTrash/metadata.js +21 -18
  163. package/dist/views/CollectionTrash/metadata.js.map +1 -1
  164. package/dist/views/CreateFirstUser/index.client.js +103 -117
  165. package/dist/views/CreateFirstUser/index.client.js.map +1 -1
  166. package/dist/views/CreateFirstUser/index.js +81 -87
  167. package/dist/views/CreateFirstUser/index.js.map +1 -1
  168. package/dist/views/CreateFirstUser/metadata.js +12 -8
  169. package/dist/views/CreateFirstUser/metadata.js.map +1 -1
  170. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +138 -147
  171. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  172. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +405 -423
  173. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  174. package/dist/views/Dashboard/Default/ModularDashboard/index.js +75 -72
  175. package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
  176. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +89 -62
  177. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  178. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +47 -40
  179. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -1
  180. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +65 -64
  181. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  182. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +147 -164
  183. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -1
  184. package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js +30 -31
  185. package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js.map +1 -1
  186. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js +229 -223
  187. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js.map +1 -1
  188. package/dist/views/Dashboard/Default/index.js +45 -59
  189. package/dist/views/Dashboard/Default/index.js.map +1 -1
  190. package/dist/views/Dashboard/index.js +42 -46
  191. package/dist/views/Dashboard/index.js.map +1 -1
  192. package/dist/views/Dashboard/metadata.js +14 -10
  193. package/dist/views/Dashboard/metadata.js.map +1 -1
  194. package/dist/views/Document/getCustomDocumentViewByKey.js +2 -3
  195. package/dist/views/Document/getCustomDocumentViewByKey.js.map +1 -1
  196. package/dist/views/Document/getCustomViewByRoute.js +30 -27
  197. package/dist/views/Document/getCustomViewByRoute.js.map +1 -1
  198. package/dist/views/Document/getDocPreferences.js +41 -40
  199. package/dist/views/Document/getDocPreferences.js.map +1 -1
  200. package/dist/views/Document/getDocumentData.js +55 -44
  201. package/dist/views/Document/getDocumentData.js.map +1 -1
  202. package/dist/views/Document/getDocumentPermissions.js +80 -77
  203. package/dist/views/Document/getDocumentPermissions.js.map +1 -1
  204. package/dist/views/Document/getDocumentView.js +283 -313
  205. package/dist/views/Document/getDocumentView.js.map +1 -1
  206. package/dist/views/Document/getIsLocked.js +66 -66
  207. package/dist/views/Document/getIsLocked.js.map +1 -1
  208. package/dist/views/Document/getMetaBySegment.js +136 -130
  209. package/dist/views/Document/getMetaBySegment.js.map +1 -1
  210. package/dist/views/Document/getVersions.js +195 -205
  211. package/dist/views/Document/getVersions.js.map +1 -1
  212. package/dist/views/Document/handleServerFunction.js +128 -103
  213. package/dist/views/Document/handleServerFunction.js.map +1 -1
  214. package/dist/views/Document/index.js +355 -316
  215. package/dist/views/Document/index.js.map +1 -1
  216. package/dist/views/Document/metadata.js +1 -2
  217. package/dist/views/Document/metadata.js.map +1 -1
  218. package/dist/views/Document/renderDocumentSlots.js +132 -121
  219. package/dist/views/Document/renderDocumentSlots.js.map +1 -1
  220. package/dist/views/Edit/index.js +6 -10
  221. package/dist/views/Edit/index.js.map +1 -1
  222. package/dist/views/Edit/metadata.js +46 -36
  223. package/dist/views/Edit/metadata.js.map +1 -1
  224. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +164 -130
  225. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
  226. package/dist/views/ForgotPassword/index.js +62 -79
  227. package/dist/views/ForgotPassword/index.js.map +1 -1
  228. package/dist/views/ForgotPassword/metadata.js +12 -8
  229. package/dist/views/ForgotPassword/metadata.js.map +1 -1
  230. package/dist/views/List/createSerializableValue.js +11 -12
  231. package/dist/views/List/createSerializableValue.js.map +1 -1
  232. package/dist/views/List/enrichDocsWithVersionStatus.js +86 -86
  233. package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
  234. package/dist/views/List/extractRelationshipDisplayValue.js +14 -15
  235. package/dist/views/List/extractRelationshipDisplayValue.js.map +1 -1
  236. package/dist/views/List/extractValueOrRelationshipID.js +15 -16
  237. package/dist/views/List/extractValueOrRelationshipID.js.map +1 -1
  238. package/dist/views/List/handleGroupBy.js +150 -133
  239. package/dist/views/List/handleGroupBy.js.map +1 -1
  240. package/dist/views/List/handleServerFunction.js +121 -98
  241. package/dist/views/List/handleServerFunction.js.map +1 -1
  242. package/dist/views/List/index.js +323 -305
  243. package/dist/views/List/index.js.map +1 -1
  244. package/dist/views/List/metadata.js +20 -17
  245. package/dist/views/List/metadata.js.map +1 -1
  246. package/dist/views/List/renderListViewSlots.js +75 -82
  247. package/dist/views/List/renderListViewSlots.js.map +1 -1
  248. package/dist/views/List/resolveAllFilterOptions.js +45 -43
  249. package/dist/views/List/resolveAllFilterOptions.js.map +1 -1
  250. package/dist/views/List/transformColumnsToSelect.js +8 -9
  251. package/dist/views/List/transformColumnsToSelect.js.map +1 -1
  252. package/dist/views/Login/LoginField/index.js +89 -57
  253. package/dist/views/Login/LoginField/index.js.map +1 -1
  254. package/dist/views/Login/LoginForm/index.js +160 -107
  255. package/dist/views/Login/LoginForm/index.js.map +1 -1
  256. package/dist/views/Login/index.js +85 -82
  257. package/dist/views/Login/index.js.map +1 -1
  258. package/dist/views/Login/metadata.js +12 -8
  259. package/dist/views/Login/metadata.js.map +1 -1
  260. package/dist/views/Logout/LogoutClient.js +120 -84
  261. package/dist/views/Logout/LogoutClient.js.map +1 -1
  262. package/dist/views/Logout/index.js +29 -29
  263. package/dist/views/Logout/index.js.map +1 -1
  264. package/dist/views/Logout/metadata.js +11 -7
  265. package/dist/views/Logout/metadata.js.map +1 -1
  266. package/dist/views/NotFound/index.client.js +82 -71
  267. package/dist/views/NotFound/index.client.js.map +1 -1
  268. package/dist/views/NotFound/index.js +73 -72
  269. package/dist/views/NotFound/index.js.map +1 -1
  270. package/dist/views/NotFound/metadata.js +9 -7
  271. package/dist/views/NotFound/metadata.js.map +1 -1
  272. package/dist/views/ResetPassword/ResetPasswordForm/index.js +108 -97
  273. package/dist/views/ResetPassword/ResetPasswordForm/index.js.map +1 -1
  274. package/dist/views/ResetPassword/index.js +73 -93
  275. package/dist/views/ResetPassword/index.js.map +1 -1
  276. package/dist/views/ResetPassword/metadata.js +12 -8
  277. package/dist/views/ResetPassword/metadata.js.map +1 -1
  278. package/dist/views/Root/attachViewActions.js +23 -18
  279. package/dist/views/Root/attachViewActions.js.map +1 -1
  280. package/dist/views/Root/generateCustomViewMetadata.js +21 -19
  281. package/dist/views/Root/generateCustomViewMetadata.js.map +1 -1
  282. package/dist/views/Root/getCustomViewByKey.js +14 -12
  283. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  284. package/dist/views/Root/getCustomViewByRoute.js +42 -31
  285. package/dist/views/Root/getCustomViewByRoute.js.map +1 -1
  286. package/dist/views/Root/getDocumentViewInfo.js +23 -24
  287. package/dist/views/Root/getDocumentViewInfo.js.map +1 -1
  288. package/dist/views/Root/getRouteData.js +325 -333
  289. package/dist/views/Root/getRouteData.js.map +1 -1
  290. package/dist/views/Root/index.js +270 -248
  291. package/dist/views/Root/index.js.map +1 -1
  292. package/dist/views/Root/isPathMatchingRoute.js +26 -21
  293. package/dist/views/Root/isPathMatchingRoute.js.map +1 -1
  294. package/dist/views/Root/metadata.js +181 -176
  295. package/dist/views/Root/metadata.js.map +1 -1
  296. package/dist/views/Unauthorized/index.js +46 -54
  297. package/dist/views/Unauthorized/index.js.map +1 -1
  298. package/dist/views/Unauthorized/metadata.js +12 -8
  299. package/dist/views/Unauthorized/metadata.js.map +1 -1
  300. package/dist/views/Verify/index.client.js +43 -25
  301. package/dist/views/Verify/index.client.js.map +1 -1
  302. package/dist/views/Verify/index.js +64 -69
  303. package/dist/views/Verify/index.js.map +1 -1
  304. package/dist/views/Verify/metadata.js +12 -8
  305. package/dist/views/Verify/metadata.js.map +1 -1
  306. package/dist/views/Version/Default/SelectedLocalesContext.js +4 -4
  307. package/dist/views/Version/Default/SelectedLocalesContext.js.map +1 -1
  308. package/dist/views/Version/Default/SetStepNav.js +127 -86
  309. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  310. package/dist/views/Version/Default/index.js +236 -380
  311. package/dist/views/Version/Default/index.js.map +1 -1
  312. package/dist/views/Version/Default/types.js +1 -2
  313. package/dist/views/Version/Default/types.js.map +1 -1
  314. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +119 -102
  315. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
  316. package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js +73 -78
  317. package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js.map +1 -1
  318. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +408 -363
  319. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
  320. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js +51 -40
  321. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -1
  322. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js +67 -35
  323. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -1
  324. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js +56 -59
  325. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -1
  326. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +117 -139
  327. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
  328. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +41 -36
  329. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -1
  330. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +178 -192
  331. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
  332. package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js +11 -17
  333. package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js.map +1 -1
  334. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +73 -48
  335. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
  336. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +143 -132
  337. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
  338. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +81 -56
  339. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
  340. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js +211 -252
  341. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -1
  342. package/dist/views/Version/RenderFieldsToDiff/fields/index.js +22 -23
  343. package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -1
  344. package/dist/views/Version/RenderFieldsToDiff/index.js +9 -12
  345. package/dist/views/Version/RenderFieldsToDiff/index.js.map +1 -1
  346. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +228 -213
  347. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
  348. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +826 -1005
  349. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -1
  350. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js +1 -2
  351. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js.map +1 -1
  352. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +43 -44
  353. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +1 -1
  354. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldPathsModified.js +22 -25
  355. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldPathsModified.js.map +1 -1
  356. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +36 -32
  357. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -1
  358. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +129 -145
  359. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -1
  360. package/dist/views/Version/Restore/index.js +93 -117
  361. package/dist/views/Version/Restore/index.js.map +1 -1
  362. package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js +50 -33
  363. package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js.map +1 -1
  364. package/dist/views/Version/SelectComparison/VersionDrawer/index.js +226 -170
  365. package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -1
  366. package/dist/views/Version/SelectComparison/index.js +50 -73
  367. package/dist/views/Version/SelectComparison/index.js.map +1 -1
  368. package/dist/views/Version/SelectComparison/types.js +1 -2
  369. package/dist/views/Version/SelectComparison/types.js.map +1 -1
  370. package/dist/views/Version/SelectLocales/index.js +32 -34
  371. package/dist/views/Version/SelectLocales/index.js.map +1 -1
  372. package/dist/views/Version/VersionPillLabel/VersionPillLabel.js +95 -104
  373. package/dist/views/Version/VersionPillLabel/VersionPillLabel.js.map +1 -1
  374. package/dist/views/Version/VersionPillLabel/getVersionLabel.js +27 -23
  375. package/dist/views/Version/VersionPillLabel/getVersionLabel.js.map +1 -1
  376. package/dist/views/Version/fetchVersions.js +138 -113
  377. package/dist/views/Version/fetchVersions.js.map +1 -1
  378. package/dist/views/Version/index.js +323 -325
  379. package/dist/views/Version/index.js.map +1 -1
  380. package/dist/views/Version/metadata.js +50 -43
  381. package/dist/views/Version/metadata.js.map +1 -1
  382. package/dist/views/Versions/buildColumns.js +79 -95
  383. package/dist/views/Versions/buildColumns.js.map +1 -1
  384. package/dist/views/Versions/cells/AutosaveCell/index.js +38 -34
  385. package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -1
  386. package/dist/views/Versions/cells/CreatedAt/index.js +53 -32
  387. package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -1
  388. package/dist/views/Versions/cells/ID/index.js +8 -10
  389. package/dist/views/Versions/cells/ID/index.js.map +1 -1
  390. package/dist/views/Versions/index.client.js +83 -106
  391. package/dist/views/Versions/index.client.js.map +1 -1
  392. package/dist/views/Versions/index.js +143 -143
  393. package/dist/views/Versions/index.js.map +1 -1
  394. package/dist/views/Versions/metadata.js +44 -37
  395. package/dist/views/Versions/metadata.js.map +1 -1
  396. package/dist/views/Versions/types.js +1 -2
  397. package/dist/views/Versions/types.js.map +1 -1
  398. package/dist/withPayload/withPayload.js +143 -198
  399. package/dist/withPayload/withPayload.js.map +1 -1
  400. package/dist/withPayload/withPayload.utils.js +95 -92
  401. package/dist/withPayload/withPayload.utils.js.map +1 -1
  402. package/dist/withPayload/withPayloadLegacy.js +40 -42
  403. package/dist/withPayload/withPayloadLegacy.js.map +1 -1
  404. package/package.json +7 -7
  405. package/dist/elements/DocumentHeader/Tabs/Tab/index.scss +0 -38
  406. package/dist/elements/DocumentHeader/Tabs/index.scss +0 -54
  407. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.scss +0 -9
  408. package/dist/elements/DocumentHeader/index.scss +0 -64
  409. package/dist/elements/FormHeader/index.scss +0 -8
  410. package/dist/elements/Nav/NavWrapper/index.scss +0 -27
  411. package/dist/elements/Nav/SettingsMenuButton/index.scss +0 -11
  412. package/dist/elements/Nav/index.scss +0 -173
  413. package/dist/esbuildEntry.d.ts +0 -5
  414. package/dist/esbuildEntry.d.ts.map +0 -1
  415. package/dist/esbuildEntry.js +0 -6
  416. package/dist/esbuildEntry.js.map +0 -1
  417. package/dist/templates/Default/Wrapper/index.scss +0 -58
  418. package/dist/templates/Default/index.scss +0 -79
  419. package/dist/templates/Minimal/index.scss +0 -30
  420. package/dist/views/API/RenderJSON/index.scss +0 -129
  421. package/dist/views/API/index.scss +0 -119
  422. package/dist/views/Account/Settings/index.scss +0 -48
  423. package/dist/views/CreateFirstUser/index.scss +0 -21
  424. package/dist/views/Dashboard/Default/ModularDashboard/index.scss +0 -316
  425. package/dist/views/Login/LoginForm/index.scss +0 -10
  426. package/dist/views/Login/index.scss +0 -10
  427. package/dist/views/Logout/index.scss +0 -25
  428. package/dist/views/NotFound/index.scss +0 -57
  429. package/dist/views/ResetPassword/index.scss +0 -11
  430. package/dist/views/Unauthorized/index.scss +0 -14
  431. package/dist/views/Verify/index.scss +0 -16
  432. package/dist/views/Version/Default/index.scss +0 -170
  433. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.scss +0 -81
  434. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.scss +0 -12
  435. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.scss +0 -9
  436. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.scss +0 -59
  437. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.scss +0 -91
  438. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.scss +0 -4
  439. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.scss +0 -9
  440. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.scss +0 -4
  441. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.scss +0 -121
  442. package/dist/views/Version/RenderFieldsToDiff/index.scss +0 -24
  443. package/dist/views/Version/Restore/index.scss +0 -84
  444. package/dist/views/Version/SelectComparison/VersionDrawer/index.scss +0 -18
  445. package/dist/views/Version/SelectComparison/index.scss +0 -9
  446. package/dist/views/Version/VersionPillLabel/index.scss +0 -26
  447. package/dist/views/Versions/cells/AutosaveCell/index.scss +0 -9
  448. package/dist/views/Versions/index.scss +0 -110
@@ -1 +1 @@
1
- {"version":3,"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 { ChevronIcon, Popup, PopupList, useTranslation, XIcon } from '@payloadcms/ui'\nimport React, { useMemo, useState } from 'react'\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\nimport { DashboardStepNav } from './DashboardStepNav.js'\nimport { useDashboardLayout } from './useDashboardLayout.js'\nimport { closestInXAxis } from './utils/collisionDetection.js'\nimport { useDashboardSensors } from './utils/sensors.js'\n\nexport type WidgetItem = {\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 { 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 } = useDashboardLayout(initialLayout)\n\n const [activeDragId, setActiveDragId] = useState<null | string>(null)\n const sensors = useDashboardSensors()\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>\n There are no widgets on your dashboard. You can add them from the \"Dashboard\" menu\n located in the top bar.\n </p>\n </div>\n )}\n {currentLayout?.map((widget, _index) => (\n <React.Fragment key={widget.item.id}>\n <DraggableItem\n disabled={!isEditing}\n id={widget.item.id}\n style={{\n width: `${WIDTH_TO_PERCENTAGE[widget.item.width]}%`,\n padding: '6px',\n }}\n width={widget.item.width}\n >\n <div className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}>\n <div aria-hidden={isEditing} className=\"widget-content\" inert={isEditing}>\n {widget.component}\n </div>\n {isEditing && (\n <div\n className=\"widget-wrapper__controls\"\n onPointerDown={(e) => e.stopPropagation()}\n >\n <WidgetWidthDropdown\n currentWidth={widget.item.width}\n maxWidth={widget.item.maxWidth}\n minWidth={widget.item.minWidth}\n onResize={(width) => resizeWidget(widget.item.id, width)}\n />\n <button\n className=\"widget-wrapper__delete-btn\"\n onClick={() => deleteWidget(widget.item.id)}\n type=\"button\"\n >\n <span className=\"sr-only\">\n {t('dashboard:deleteWidget', { id: widget.item.id })}\n </span>\n <XIcon />\n </button>\n </div>\n )}\n </div>\n </DraggableItem>\n </React.Fragment>\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 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 onResize,\n}: {\n currentWidth: WidgetWidth\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n onResize: (width: WidgetWidth) => void\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 return (\n <Popup\n button={\n <button\n className=\"widget-wrapper__size-btn\"\n disabled={isDisabled}\n onPointerDown={(e) => e.stopPropagation()}\n type=\"button\"\n >\n <span className=\"widget-wrapper__size-btn-text\">{currentWidth}</span>\n <ChevronIcon className=\"widget-wrapper__size-btn-icon\" />\n </button>\n }\n buttonType=\"custom\"\n disabled={isDisabled}\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 size=\"small\"\n verticalAlign=\"bottom\"\n />\n )\n}\n\nfunction DraggableItem(props: {\n children: React.ReactNode\n disabled?: boolean\n id: string\n style?: React.CSSProperties\n width: WidgetWidth\n}) {\n const { attributes, isDragging, listeners, 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 // Only apply draggable attributes and listeners when not disabled\n // to prevent disabling interactive elements inside the widget\n const draggableProps = props.disabled ? {} : { ...listeners, ...attributes }\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 className=\"draggable\"\n id={props.id}\n ref={setNodeRef}\n {...draggableProps}\n style={{\n width: '100%',\n height: '100%',\n }}\n >\n {props.children}\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(--theme-success-400)' : 'transparent',\n marginBottom: '10px',\n marginTop: '10px',\n pointerEvents: 'none',\n zIndex: 1000,\n }}\n />\n )\n}\n"],"names":["DndContext","DragOverlay","useDraggable","useDroppable","snapCenterToCursor","ChevronIcon","Popup","PopupList","useTranslation","XIcon","React","useMemo","useState","snapCenterToCursorOnlyForPointer","args","activatorEvent","transform","DashboardStepNav","useDashboardLayout","closestInXAxis","useDashboardSensors","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","clientLayout","initialLayout","widgets","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","activeDragId","setActiveDragId","sensors","div","autoScroll","enabled","threshold","x","y","collisionDetection","id","onDragCancel","onDragEnd","event","over","droppableId","i","lastIndexOf","slug","slice","position","active","moveFromIndex","findIndex","widget","item","moveToIndex","onDragStart","className","style","display","flexWrap","length","p","map","_index","Fragment","DraggableItem","disabled","width","padding","aria-hidden","inert","component","onPointerDown","e","stopPropagation","WidgetWidthDropdown","currentWidth","maxWidth","minWidth","onResize","button","onClick","type","span","dropAnimation","duration","modifiers","draggedWidget","find","validOptions","minPercentage","maxPercentage","Object","entries","key","value","percentage","filter","option","isDisabled","buttonType","render","close","ButtonGroup","isSelected","Button","toFixed","size","verticalAlign","props","attributes","isDragging","listeners","setNodeRef","mergedStyles","opacity","draggableProps","data-slug","data-width","DroppableItem","ref","height","children","isOver","data","data-testid","left","right","top","bottom","borderRadius","backgroundColor","marginBottom","marginTop","pointerEvents","zIndex"],"mappings":"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"}
1
+ {"version":3,"file":"index.client.js","names":["c","_c","DndContext","DragOverlay","useDraggable","useDroppable","snapCenterToCursor","ChevronIcon","Popup","PopupList","useTranslation","XIcon","React","useMemo","useState","snapCenterToCursorOnlyForPointer","args","activatorEvent","transform","DashboardStepNav","useDashboardLayout","closestInXAxis","useDashboardSensors","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","t0","$","clientLayout","initialLayout","widgets","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","activeDragId","setActiveDragId","sensors","t1","t2","Symbol","for","t3","event","over","droppableId","id","i","lastIndexOf","slug","slice","position","active","moveFromIndex","findIndex","widget","item","moveToIndex","widget_0","t4","event_0","_jsxs","children","_jsx","autoScroll","enabled","threshold","x","y","collisionDetection","onDragCancel","onDragEnd","onDragStart","className","style","display","flexWrap","length","map","widget_1","_index","Fragment","DraggableItem","disabled","width","padding","inert","component","onPointerDown","_temp","WidgetWidthDropdown","currentWidth","maxWidth","minWidth","onResize","onClick","type","dropAnimation","duration","modifiers","draggedWidget","find","widget_2","e","stopPropagation","validOptions","minPercentage","maxPercentage","Object","entries","key","value","percentage","filter","option","isDisabled","button","buttonType","render","close","ButtonGroup","isSelected","Button","toFixed","size","verticalAlign","props","attributes","isDragging","listeners","setNodeRef","mergedStyles","opacity","draggableProps","DroppableItem","ref","height","data","isOver","t5","t6","t7","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 { ChevronIcon, Popup, PopupList, useTranslation, XIcon } from '@payloadcms/ui'\nimport React, { useMemo, useState } from 'react'\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\nimport { DashboardStepNav } from './DashboardStepNav.js'\nimport { useDashboardLayout } from './useDashboardLayout.js'\nimport { closestInXAxis } from './utils/collisionDetection.js'\nimport { useDashboardSensors } from './utils/sensors.js'\n\nexport type WidgetItem = {\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 { 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 } = useDashboardLayout(initialLayout)\n\n const [activeDragId, setActiveDragId] = useState<null | string>(null)\n const sensors = useDashboardSensors()\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>\n There are no widgets on your dashboard. You can add them from the \"Dashboard\" menu\n located in the top bar.\n </p>\n </div>\n )}\n {currentLayout?.map((widget, _index) => (\n <React.Fragment key={widget.item.id}>\n <DraggableItem\n disabled={!isEditing}\n id={widget.item.id}\n style={{\n width: `${WIDTH_TO_PERCENTAGE[widget.item.width]}%`,\n padding: '6px',\n }}\n width={widget.item.width}\n >\n <div className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}>\n <div aria-hidden={isEditing} className=\"widget-content\" inert={isEditing}>\n {widget.component}\n </div>\n {isEditing && (\n <div\n className=\"widget-wrapper__controls\"\n onPointerDown={(e) => e.stopPropagation()}\n >\n <WidgetWidthDropdown\n currentWidth={widget.item.width}\n maxWidth={widget.item.maxWidth}\n minWidth={widget.item.minWidth}\n onResize={(width) => resizeWidget(widget.item.id, width)}\n />\n <button\n className=\"widget-wrapper__delete-btn\"\n onClick={() => deleteWidget(widget.item.id)}\n type=\"button\"\n >\n <span className=\"sr-only\">\n {t('dashboard:deleteWidget', { id: widget.item.id })}\n </span>\n <XIcon />\n </button>\n </div>\n )}\n </div>\n </DraggableItem>\n </React.Fragment>\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 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 onResize,\n}: {\n currentWidth: WidgetWidth\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n onResize: (width: WidgetWidth) => void\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 return (\n <Popup\n button={\n <button\n className=\"widget-wrapper__size-btn\"\n disabled={isDisabled}\n onPointerDown={(e) => e.stopPropagation()}\n type=\"button\"\n >\n <span className=\"widget-wrapper__size-btn-text\">{currentWidth}</span>\n <ChevronIcon className=\"widget-wrapper__size-btn-icon\" />\n </button>\n }\n buttonType=\"custom\"\n disabled={isDisabled}\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 size=\"small\"\n verticalAlign=\"bottom\"\n />\n )\n}\n\nfunction DraggableItem(props: {\n children: React.ReactNode\n disabled?: boolean\n id: string\n style?: React.CSSProperties\n width: WidgetWidth\n}) {\n const { attributes, isDragging, listeners, 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 // Only apply draggable attributes and listeners when not disabled\n // to prevent disabling interactive elements inside the widget\n const draggableProps = props.disabled ? {} : { ...listeners, ...attributes }\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 className=\"draggable\"\n id={props.id}\n ref={setNodeRef}\n {...draggableProps}\n style={{\n width: '100%',\n height: '100%',\n }}\n >\n {props.children}\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(--theme-success-400)' : '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,84 +1,87 @@
1
- import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent';
3
3
  import React from 'react';
4
4
  import { getPreferences } from '../../../../utilities/getPreferences.js';
5
5
  import { ModularDashboardClient } from './index.client.js';
6
- import './index.scss';
7
6
  export async function ModularDashboard(props) {
8
- const { defaultLayout = [], widgets = [] } = props.payload.config.admin.dashboard || {};
9
- const { importMap } = props.payload;
10
- const { user } = props;
11
- const { req } = props.initPageResult;
12
- const { i18n } = req;
13
- const layout = await getItemsFromPreferences(props.payload, user) ?? await getItemsFromConfig(defaultLayout, req, widgets);
14
- const serverLayout = layout.map((layoutItem)=>{
15
- const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'));
16
- return {
17
- component: RenderServerComponent({
18
- Component: widgets.find((widget)=>widget.slug === widgetSlug)?.ComponentPath,
19
- importMap,
20
- serverProps: {
21
- req,
22
- widgetSlug
23
- }
24
- }),
25
- // TODO: widgets will support state in the future
26
- // widgetData: layoutItem.data,
27
- item: layoutItem
28
- };
29
- });
30
- // Resolve function labels to static labels for client components
31
- const clientWidgets = widgets.map((widget)=>{
32
- const { ComponentPath: _, label, ...rest } = widget;
33
- return {
34
- ...rest,
35
- label: typeof label === 'function' ? label({
36
- i18n,
37
- t: i18n.t
38
- }) : label
39
- };
40
- });
41
- return /*#__PURE__*/ _jsxDEV("div", {
42
- children: /*#__PURE__*/ _jsxDEV(ModularDashboardClient, {
43
- clientLayout: serverLayout,
44
- widgets: clientWidgets
45
- }, void 0, false, {
46
- fileName: "src/views/Dashboard/Default/ModularDashboard/index.tsx",
47
- lineNumber: 64,
48
- columnNumber: 7
49
- }, this)
50
- }, void 0, false, {
51
- fileName: "src/views/Dashboard/Default/ModularDashboard/index.tsx",
52
- lineNumber: 63,
53
- columnNumber: 5
54
- }, this);
7
+ const {
8
+ defaultLayout = [],
9
+ widgets = []
10
+ } = props.payload.config.admin.dashboard || {};
11
+ const {
12
+ importMap
13
+ } = props.payload;
14
+ const {
15
+ user
16
+ } = props;
17
+ const {
18
+ req
19
+ } = props.initPageResult;
20
+ const {
21
+ i18n
22
+ } = req;
23
+ const layout = (await getItemsFromPreferences(props.payload, user)) ?? (await getItemsFromConfig(defaultLayout, req, widgets));
24
+ const serverLayout = layout.map(layoutItem => {
25
+ const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'));
26
+ return {
27
+ component: RenderServerComponent({
28
+ Component: widgets.find(widget => widget.slug === widgetSlug)?.ComponentPath,
29
+ importMap,
30
+ serverProps: {
31
+ req,
32
+ widgetSlug
33
+ }
34
+ }),
35
+ item: layoutItem
36
+ };
37
+ });
38
+ // Resolve function labels to static labels for client components
39
+ const clientWidgets = widgets.map(widget => {
40
+ const {
41
+ ComponentPath: _,
42
+ label,
43
+ ...rest
44
+ } = widget;
45
+ return {
46
+ ...rest,
47
+ label: typeof label === 'function' ? label({
48
+ i18n,
49
+ t: i18n.t
50
+ }) : label
51
+ };
52
+ });
53
+ return /*#__PURE__*/_jsx("div", {
54
+ children: /*#__PURE__*/_jsx(ModularDashboardClient, {
55
+ clientLayout: serverLayout,
56
+ widgets: clientWidgets
57
+ })
58
+ });
55
59
  }
56
60
  async function getItemsFromPreferences(payload, user) {
57
- const savedPreferences = await getPreferences('dashboard-layout', payload, user.id, user.collection);
58
- if (!savedPreferences?.value || typeof savedPreferences.value !== 'object' || !('layouts' in savedPreferences.value)) {
59
- return null;
60
- }
61
- return savedPreferences.value.layouts;
61
+ const savedPreferences = await getPreferences('dashboard-layout', payload, user.id, user.collection);
62
+ if (!savedPreferences?.value || typeof savedPreferences.value !== 'object' || !('layouts' in savedPreferences.value)) {
63
+ return null;
64
+ }
65
+ return savedPreferences.value.layouts;
62
66
  }
63
67
  async function getItemsFromConfig(defaultLayout, req, widgets) {
64
- // Handle function format
65
- let widgetInstances;
66
- if (typeof defaultLayout === 'function') {
67
- widgetInstances = await defaultLayout({
68
- req
69
- });
70
- } else {
71
- widgetInstances = defaultLayout;
72
- }
73
- return widgetInstances.map((widgetInstance, index)=>{
74
- const widget = widgets.find((widget)=>widget.slug === widgetInstance.widgetSlug);
75
- return {
76
- id: `${widgetInstance.widgetSlug}-${index}`,
77
- maxWidth: widget?.maxWidth ?? 'full',
78
- minWidth: widget?.minWidth ?? 'x-small',
79
- width: widgetInstance.width || 'x-small'
80
- };
68
+ // Handle function format
69
+ let widgetInstances;
70
+ if (typeof defaultLayout === 'function') {
71
+ widgetInstances = await defaultLayout({
72
+ req
81
73
  });
74
+ } else {
75
+ widgetInstances = defaultLayout;
76
+ }
77
+ return widgetInstances.map((widgetInstance, index) => {
78
+ const widget = widgets.find(widget => widget.slug === widgetInstance.widgetSlug);
79
+ return {
80
+ id: `${widgetInstance.widgetSlug}-${index}`,
81
+ maxWidth: widget?.maxWidth ?? 'full',
82
+ minWidth: widget?.minWidth ?? 'x-small',
83
+ width: widgetInstance.width || 'x-small'
84
+ };
85
+ });
82
86
  }
83
-
84
87
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.tsx"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\nimport type {\n BasePayload,\n ClientWidget,\n DashboardConfig,\n PayloadRequest,\n TypedUser,\n Widget,\n WidgetInstance,\n WidgetServerProps,\n} from 'payload'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\nimport React from 'react'\n\nimport type { DashboardViewServerProps } from '../index.js'\nimport type { WidgetInstanceClient, WidgetItem } from './index.client.js'\n\nimport { getPreferences } from '../../../../utilities/getPreferences.js'\nimport { ModularDashboardClient } from './index.client.js'\nimport './index.scss'\n\ntype ServerLayout = WidgetInstanceClient[]\n\nexport async function ModularDashboard(props: DashboardViewServerProps) {\n const { defaultLayout = [], widgets = [] } = props.payload.config.admin.dashboard || {}\n const { importMap } = props.payload\n const { user } = props\n const { req } = props.initPageResult\n const { i18n } = req\n\n const layout =\n (await getItemsFromPreferences(props.payload, user)) ??\n (await getItemsFromConfig(defaultLayout, req, widgets))\n\n const serverLayout: ServerLayout = layout.map((layoutItem) => {\n const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'))\n return {\n component: RenderServerComponent({\n Component: widgets.find((widget) => widget.slug === widgetSlug)?.ComponentPath,\n importMap,\n serverProps: {\n req,\n widgetSlug,\n // TODO: widgets will support state in the future\n // widgetData: layoutItem.data,\n } satisfies WidgetServerProps,\n }),\n item: layoutItem,\n }\n })\n\n // Resolve function labels to static labels for client components\n const clientWidgets: ClientWidget[] = widgets.map((widget) => {\n const { ComponentPath: _, label, ...rest } = widget\n return {\n ...rest,\n label: typeof label === 'function' ? label({ i18n, t: i18n.t as TFunction }) : label,\n }\n })\n\n return (\n <div>\n <ModularDashboardClient clientLayout={serverLayout} widgets={clientWidgets} />\n </div>\n )\n}\n\nasync function getItemsFromPreferences(\n payload: BasePayload,\n user: TypedUser,\n): Promise<null | WidgetItem[]> {\n const savedPreferences = await getPreferences(\n '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\nasync function getItemsFromConfig(\n defaultLayout: NonNullable<DashboardConfig['defaultLayout']>,\n req: PayloadRequest,\n widgets: Widget[],\n): Promise<WidgetItem[]> {\n // Handle function format\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((widget) => widget.slug === widgetInstance.widgetSlug)\n return {\n id: `${widgetInstance.widgetSlug}-${index}`,\n maxWidth: widget?.maxWidth ?? 'full',\n minWidth: widget?.minWidth ?? 'x-small',\n width: widgetInstance.width || 'x-small',\n }\n })\n}\n"],"names":["RenderServerComponent","React","getPreferences","ModularDashboardClient","ModularDashboard","props","defaultLayout","widgets","payload","config","admin","dashboard","importMap","user","req","initPageResult","i18n","layout","getItemsFromPreferences","getItemsFromConfig","serverLayout","map","layoutItem","widgetSlug","id","slice","lastIndexOf","component","Component","find","widget","slug","ComponentPath","serverProps","item","clientWidgets","_","label","rest","t","div","clientLayout","savedPreferences","collection","value","layouts","widgetInstances","widgetInstance","index","maxWidth","minWidth","width"],"mappings":";AAYA,SAASA,qBAAqB,QAAQ,gDAA+C;AACrF,OAAOC,WAAW,QAAO;AAKzB,SAASC,cAAc,QAAQ,0CAAyC;AACxE,SAASC,sBAAsB,QAAQ,oBAAmB;AAC1D,OAAO,eAAc;AAIrB,OAAO,eAAeC,iBAAiBC,KAA+B;IACpE,MAAM,EAAEC,gBAAgB,EAAE,EAAEC,UAAU,EAAE,EAAE,GAAGF,MAAMG,OAAO,CAACC,MAAM,CAACC,KAAK,CAACC,SAAS,IAAI,CAAC;IACtF,MAAM,EAAEC,SAAS,EAAE,GAAGP,MAAMG,OAAO;IACnC,MAAM,EAAEK,IAAI,EAAE,GAAGR;IACjB,MAAM,EAAES,GAAG,EAAE,GAAGT,MAAMU,cAAc;IACpC,MAAM,EAAEC,IAAI,EAAE,GAAGF;IAEjB,MAAMG,SACJ,AAAC,MAAMC,wBAAwBb,MAAMG,OAAO,EAAEK,SAC7C,MAAMM,mBAAmBb,eAAeQ,KAAKP;IAEhD,MAAMa,eAA6BH,OAAOI,GAAG,CAAC,CAACC;QAC7C,MAAMC,aAAaD,WAAWE,EAAE,CAACC,KAAK,CAAC,GAAGH,WAAWE,EAAE,CAACE,WAAW,CAAC;QACpE,OAAO;YACLC,WAAW3B,sBAAsB;gBAC/B4B,WAAWrB,QAAQsB,IAAI,CAAC,CAACC,SAAWA,OAAOC,IAAI,KAAKR,aAAaS;gBACjEpB;gBACAqB,aAAa;oBACXnB;oBACAS;gBAGF;YACF;YAHI,iDAAiD;YACjD,+BAA+B;YAGnCW,MAAMZ;QACR;IACF;IAEA,iEAAiE;IACjE,MAAMa,gBAAgC5B,QAAQc,GAAG,CAAC,CAACS;QACjD,MAAM,EAAEE,eAAeI,CAAC,EAAEC,KAAK,EAAE,GAAGC,MAAM,GAAGR;QAC7C,OAAO;YACL,GAAGQ,IAAI;YACPD,OAAO,OAAOA,UAAU,aAAaA,MAAM;gBAAErB;gBAAMuB,GAAGvB,KAAKuB,CAAC;YAAc,KAAKF;QACjF;IACF;IAEA,qBACE,QAACG;kBACC,cAAA,QAACrC;YAAuBsC,cAAcrB;YAAcb,SAAS4B;;;;;;;;;;;AAGnE;AAEA,eAAejB,wBACbV,OAAoB,EACpBK,IAAe;IAEf,MAAM6B,mBAAmB,MAAMxC,eAC7B,oBACAM,SACAK,KAAKW,EAAE,EACPX,KAAK8B,UAAU;IAEjB,IACE,CAACD,kBAAkBE,SACnB,OAAOF,iBAAiBE,KAAK,KAAK,YAClC,CAAE,CAAA,aAAaF,iBAAiBE,KAAK,AAAD,GACpC;QACA,OAAO;IACT;IACA,OAAOF,iBAAiBE,KAAK,CAACC,OAAO;AACvC;AAEA,eAAe1B,mBACbb,aAA4D,EAC5DQ,GAAmB,EACnBP,OAAiB;IAEjB,yBAAyB;IACzB,IAAIuC;IACJ,IAAI,OAAOxC,kBAAkB,YAAY;QACvCwC,kBAAkB,MAAMxC,cAAc;YAAEQ;QAAI;IAC9C,OAAO;QACLgC,kBAAkBxC;IACpB;IAEA,OAAOwC,gBAAgBzB,GAAG,CAAC,CAAC0B,gBAAgBC;QAC1C,MAAMlB,SAASvB,QAAQsB,IAAI,CAAC,CAACC,SAAWA,OAAOC,IAAI,KAAKgB,eAAexB,UAAU;QACjF,OAAO;YACLC,IAAI,GAAGuB,eAAexB,UAAU,CAAC,CAAC,EAAEyB,OAAO;YAC3CC,UAAUnB,QAAQmB,YAAY;YAC9BC,UAAUpB,QAAQoB,YAAY;YAC9BC,OAAOJ,eAAeI,KAAK,IAAI;QACjC;IACF;AACF"}
1
+ {"version":3,"file":"index.js","names":["RenderServerComponent","React","getPreferences","ModularDashboardClient","ModularDashboard","props","defaultLayout","widgets","payload","config","admin","dashboard","importMap","user","req","initPageResult","i18n","layout","getItemsFromPreferences","getItemsFromConfig","serverLayout","map","layoutItem","widgetSlug","id","slice","lastIndexOf","component","Component","find","widget","slug","ComponentPath","serverProps","item","clientWidgets","_","label","rest","t","_jsx","clientLayout","savedPreferences","collection","value","layouts","widgetInstances","widgetInstance","index","maxWidth","minWidth","width"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.tsx"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\nimport type {\n BasePayload,\n ClientWidget,\n DashboardConfig,\n PayloadRequest,\n TypedUser,\n Widget,\n WidgetInstance,\n WidgetServerProps,\n} from 'payload'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\nimport React from 'react'\n\nimport type { DashboardViewServerProps } from '../index.js'\nimport type { WidgetInstanceClient, WidgetItem } from './index.client.js'\n\nimport { getPreferences } from '../../../../utilities/getPreferences.js'\nimport { ModularDashboardClient } from './index.client.js'\nimport './index.scss'\n\ntype ServerLayout = WidgetInstanceClient[]\n\nexport async function ModularDashboard(props: DashboardViewServerProps) {\n const { defaultLayout = [], widgets = [] } = props.payload.config.admin.dashboard || {}\n const { importMap } = props.payload\n const { user } = props\n const { req } = props.initPageResult\n const { i18n } = req\n\n const layout =\n (await getItemsFromPreferences(props.payload, user)) ??\n (await getItemsFromConfig(defaultLayout, req, widgets))\n\n const serverLayout: ServerLayout = layout.map((layoutItem) => {\n const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'))\n return {\n component: RenderServerComponent({\n Component: widgets.find((widget) => widget.slug === widgetSlug)?.ComponentPath,\n importMap,\n serverProps: {\n req,\n widgetSlug,\n // TODO: widgets will support state in the future\n // widgetData: layoutItem.data,\n } satisfies WidgetServerProps,\n }),\n item: layoutItem,\n }\n })\n\n // Resolve function labels to static labels for client components\n const clientWidgets: ClientWidget[] = widgets.map((widget) => {\n const { ComponentPath: _, label, ...rest } = widget\n return {\n ...rest,\n label: typeof label === 'function' ? label({ i18n, t: i18n.t as TFunction }) : label,\n }\n })\n\n return (\n <div>\n <ModularDashboardClient clientLayout={serverLayout} widgets={clientWidgets} />\n </div>\n )\n}\n\nasync function getItemsFromPreferences(\n payload: BasePayload,\n user: TypedUser,\n): Promise<null | WidgetItem[]> {\n const savedPreferences = await getPreferences(\n '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\nasync function getItemsFromConfig(\n defaultLayout: NonNullable<DashboardConfig['defaultLayout']>,\n req: PayloadRequest,\n widgets: Widget[],\n): Promise<WidgetItem[]> {\n // Handle function format\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((widget) => widget.slug === widgetInstance.widgetSlug)\n return {\n id: `${widgetInstance.widgetSlug}-${index}`,\n maxWidth: widget?.maxWidth ?? 'full',\n minWidth: widget?.minWidth ?? 'x-small',\n width: widgetInstance.width || 'x-small',\n }\n })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,72 +1,99 @@
1
1
  'use client';
2
- import { jsxDEV as _jsxDEV, Fragment as _Fragment } from "react/jsx-dev-runtime";
2
+
3
+ import { c as _c } from "react/compiler-runtime";
4
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
3
5
  import { ShimmerEffect, useServerFunctions } from '@payloadcms/ui';
4
6
  import React, { useCallback, useEffect, useRef } from 'react';
5
7
  /**
6
8
  * Utility to render a widget on-demand on the client.
7
- */ export const RenderWidget = /**
8
- * Instance-specific data for this widget
9
- */ // TODO: widgetData?: Record<string, unknown>
10
- /**
11
- * Unique ID for this widget instance (format: "slug-timestamp")
12
- */ ({ /* widgetData, */ widgetId })=>{
13
- const [Component, setComponent] = React.useState(null);
14
- const { serverFunction } = useServerFunctions();
15
- const renderWidget = useCallback(()=>{
16
- async function render() {
17
- try {
18
- const widgetSlug = widgetId.slice(0, widgetId.lastIndexOf('-'));
19
- const result = await serverFunction({
20
- name: 'render-widget',
21
- args: {
22
- // TODO: widgets will support state in the future
23
- // widgetData,
24
- widgetSlug
25
- }
26
- });
27
- setComponent(result.component);
28
- } catch (error) {
29
- // Log error but don't expose details to console in production
30
- // Fallback error component
31
- setComponent(/*#__PURE__*/ React.createElement('div', {
32
- style: {
33
- background: 'var(--theme-error-50)',
34
- border: '1px solid var(--theme-error-200)',
35
- borderRadius: '4px',
36
- color: 'var(--theme-error-text)',
37
- padding: '20px',
38
- textAlign: 'center'
39
- }
40
- }, 'Failed to load widget. Please try again later.'));
9
+ */
10
+ export const RenderWidget = t0 => {
11
+ const $ = _c(9);
12
+ const {
13
+ widgetId
14
+ } = t0;
15
+ const [Component, setComponent] = React.useState(null);
16
+ const {
17
+ serverFunction
18
+ } = useServerFunctions();
19
+ let t1;
20
+ if ($[0] !== serverFunction || $[1] !== widgetId) {
21
+ t1 = () => {
22
+ const render = async function render() {
23
+ ;
24
+ try {
25
+ const widgetSlug = widgetId.slice(0, widgetId.lastIndexOf("-"));
26
+ const result = await serverFunction({
27
+ name: "render-widget",
28
+ args: {
29
+ widgetSlug
41
30
  }
31
+ });
32
+ setComponent(result.component);
33
+ } catch (t2) {
34
+ setComponent(React.createElement("div", {
35
+ style: {
36
+ background: "var(--theme-error-50)",
37
+ border: "1px solid var(--theme-error-200)",
38
+ borderRadius: "4px",
39
+ color: "var(--theme-error-text)",
40
+ padding: "20px",
41
+ textAlign: "center"
42
+ }
43
+ }, "Failed to load widget. Please try again later."));
42
44
  }
43
- void render();
44
- }, [
45
- serverFunction,
46
- widgetId
47
- ]);
48
- /* widgetData, */ const mounted = useRef(false);
49
- useEffect(()=>{
50
- if (mounted.current) {
51
- return;
52
- }
53
- mounted.current = true;
54
- void renderWidget();
55
- }, [
56
- renderWidget
57
- ]);
58
- if (!Component) {
59
- return /*#__PURE__*/ _jsxDEV(ShimmerEffect, {
60
- height: "100%"
61
- }, void 0, false, {
62
- fileName: "src/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.tsx",
63
- lineNumber: 78,
64
- columnNumber: 12
65
- }, this);
45
+ };
46
+ render();
47
+ };
48
+ $[0] = serverFunction;
49
+ $[1] = widgetId;
50
+ $[2] = t1;
51
+ } else {
52
+ t1 = $[2];
53
+ }
54
+ const renderWidget = t1;
55
+ const mounted = useRef(false);
56
+ let t2;
57
+ let t3;
58
+ if ($[3] !== renderWidget) {
59
+ t2 = () => {
60
+ if (mounted.current) {
61
+ return;
62
+ }
63
+ mounted.current = true;
64
+ renderWidget();
65
+ };
66
+ t3 = [renderWidget];
67
+ $[3] = renderWidget;
68
+ $[4] = t2;
69
+ $[5] = t3;
70
+ } else {
71
+ t2 = $[4];
72
+ t3 = $[5];
73
+ }
74
+ useEffect(t2, t3);
75
+ if (!Component) {
76
+ let t4;
77
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
78
+ t4 = _jsx(ShimmerEffect, {
79
+ height: "100%"
80
+ });
81
+ $[6] = t4;
82
+ } else {
83
+ t4 = $[6];
66
84
  }
67
- return /*#__PURE__*/ _jsxDEV(_Fragment, {
68
- children: Component
69
- }, void 0, false);
85
+ return t4;
86
+ }
87
+ let t4;
88
+ if ($[7] !== Component) {
89
+ t4 = _jsx(_Fragment, {
90
+ children: Component
91
+ });
92
+ $[7] = Component;
93
+ $[8] = t4;
94
+ } else {
95
+ t4 = $[8];
96
+ }
97
+ return t4;
70
98
  };
71
-
72
99
  //# sourceMappingURL=RenderWidget.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.tsx"],"sourcesContent":["'use client'\n\nimport { ShimmerEffect, useServerFunctions } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport type {\n RenderWidgetServerFnArgs,\n RenderWidgetServerFnReturnType,\n} from './renderWidgetServerFn.js'\n\n/**\n * Utility to render a widget on-demand on the client.\n */\nexport const RenderWidget: React.FC<{\n /**\n * Instance-specific data for this widget\n */\n // TODO: widgetData?: Record<string, unknown>\n /**\n * Unique ID for this widget instance (format: \"slug-timestamp\")\n */\n widgetId: string\n}> = ({ /* widgetData, */ widgetId }) => {\n const [Component, setComponent] = React.useState<null | React.ReactNode>(null)\n const { serverFunction } = useServerFunctions()\n\n const renderWidget = useCallback(() => {\n async function render() {\n try {\n const widgetSlug = widgetId.slice(0, widgetId.lastIndexOf('-'))\n\n const result = (await serverFunction({\n name: 'render-widget',\n args: {\n // TODO: widgets will support state in the future\n // widgetData,\n widgetSlug,\n } as RenderWidgetServerFnArgs,\n })) as RenderWidgetServerFnReturnType\n\n setComponent(result.component)\n } catch (error) {\n // Log error but don't expose details to console in production\n\n // Fallback error component\n setComponent(\n React.createElement(\n 'div',\n {\n style: {\n background: 'var(--theme-error-50)',\n border: '1px solid var(--theme-error-200)',\n borderRadius: '4px',\n color: 'var(--theme-error-text)',\n padding: '20px',\n textAlign: 'center',\n },\n },\n 'Failed to load widget. Please try again later.',\n ),\n )\n }\n }\n void render()\n }, [serverFunction, widgetId /* widgetData, */])\n\n const mounted = useRef(false)\n\n useEffect(() => {\n if (mounted.current) {\n return\n }\n mounted.current = true\n void renderWidget()\n }, [renderWidget])\n\n if (!Component) {\n return <ShimmerEffect height=\"100%\" />\n }\n\n return <>{Component}</>\n}\n"],"names":["ShimmerEffect","useServerFunctions","React","useCallback","useEffect","useRef","RenderWidget","widgetId","Component","setComponent","useState","serverFunction","renderWidget","render","widgetSlug","slice","lastIndexOf","result","name","args","component","error","createElement","style","background","border","borderRadius","color","padding","textAlign","mounted","current","height"],"mappings":"AAAA;;AAEA,SAASA,aAAa,EAAEC,kBAAkB,QAAQ,iBAAgB;AAClE,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,QAAO;AAO7D;;CAEC,GACD,OAAO,MAAMC,eACX;;GAEC,GACD,6CAA6C;AAC7C;;GAEC,GAEE,CAAC,EAAE,eAAe,GAAGC,QAAQ,EAAE;IAClC,MAAM,CAACC,WAAWC,aAAa,GAAGP,MAAMQ,QAAQ,CAAyB;IACzE,MAAM,EAAEC,cAAc,EAAE,GAAGV;IAE3B,MAAMW,eAAeT,YAAY;QAC/B,eAAeU;YACb,IAAI;gBACF,MAAMC,aAAaP,SAASQ,KAAK,CAAC,GAAGR,SAASS,WAAW,CAAC;gBAE1D,MAAMC,SAAU,MAAMN,eAAe;oBACnCO,MAAM;oBACNC,MAAM;wBACJ,iDAAiD;wBACjD,cAAc;wBACdL;oBACF;gBACF;gBAEAL,aAAaQ,OAAOG,SAAS;YAC/B,EAAE,OAAOC,OAAO;gBACd,8DAA8D;gBAE9D,2BAA2B;gBAC3BZ,2BACEP,MAAMoB,aAAa,CACjB,OACA;oBACEC,OAAO;wBACLC,YAAY;wBACZC,QAAQ;wBACRC,cAAc;wBACdC,OAAO;wBACPC,SAAS;wBACTC,WAAW;oBACb;gBACF,GACA;YAGN;QACF;QACA,KAAKhB;IACP,GAAG;QAACF;QAAgBJ;KAA2B;IAAlB,eAAe,GAE5C,MAAMuB,UAAUzB,OAAO;IAEvBD,UAAU;QACR,IAAI0B,QAAQC,OAAO,EAAE;YACnB;QACF;QACAD,QAAQC,OAAO,GAAG;QAClB,KAAKnB;IACP,GAAG;QAACA;KAAa;IAEjB,IAAI,CAACJ,WAAW;QACd,qBAAO,QAACR;YAAcgC,QAAO;;;;;;IAC/B;IAEA,qBAAO;kBAAGxB;;AACZ,EAAC"}
1
+ {"version":3,"file":"RenderWidget.js","names":["c","_c","ShimmerEffect","useServerFunctions","React","useCallback","useEffect","useRef","RenderWidget","t0","$","widgetId","Component","setComponent","useState","serverFunction","t1","render","widgetSlug","slice","lastIndexOf","result","name","args","component","t2","createElement","style","background","border","borderRadius","color","padding","textAlign","renderWidget","mounted","t3","current","t4","Symbol","for","_jsx","height","_Fragment","children"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.tsx"],"sourcesContent":["'use client'\n\nimport { ShimmerEffect, useServerFunctions } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport type {\n RenderWidgetServerFnArgs,\n RenderWidgetServerFnReturnType,\n} from './renderWidgetServerFn.js'\n\n/**\n * Utility to render a widget on-demand on the client.\n */\nexport const RenderWidget: React.FC<{\n /**\n * Instance-specific data for this widget\n */\n // TODO: widgetData?: Record<string, unknown>\n /**\n * Unique ID for this widget instance (format: \"slug-timestamp\")\n */\n widgetId: string\n}> = ({ /* widgetData, */ widgetId }) => {\n const [Component, setComponent] = React.useState<null | React.ReactNode>(null)\n const { serverFunction } = useServerFunctions()\n\n const renderWidget = useCallback(() => {\n async function render() {\n try {\n const widgetSlug = widgetId.slice(0, widgetId.lastIndexOf('-'))\n\n const result = (await serverFunction({\n name: 'render-widget',\n args: {\n // TODO: widgets will support state in the future\n // widgetData,\n widgetSlug,\n } as RenderWidgetServerFnArgs,\n })) as RenderWidgetServerFnReturnType\n\n setComponent(result.component)\n } catch (error) {\n // Log error but don't expose details to console in production\n\n // Fallback error component\n setComponent(\n React.createElement(\n 'div',\n {\n style: {\n background: 'var(--theme-error-50)',\n border: '1px solid var(--theme-error-200)',\n borderRadius: '4px',\n color: 'var(--theme-error-text)',\n padding: '20px',\n textAlign: 'center',\n },\n },\n 'Failed to load widget. Please try again later.',\n ),\n )\n }\n }\n void render()\n }, [serverFunction, widgetId /* widgetData, */])\n\n const mounted = useRef(false)\n\n useEffect(() => {\n if (mounted.current) {\n return\n }\n mounted.current = true\n void renderWidget()\n }, [renderWidget])\n\n if (!Component) {\n return <ShimmerEffect height=\"100%\" />\n }\n\n return <>{Component}</>\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,aAAa,EAAEC,kBAAkB,QAAQ;AAClD,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ;AAOtD;;;AAGA,OAAO,MAAMC,YAAA,GASRC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU;EAAA,IAAAF,EAA8B;EAClC,OAAAG,SAAA,EAAAC,YAAA,IAAkCT,KAAA,CAAAU,QAAA,KAAuC;EACzE;IAAAC;EAAA,IAA2BZ,kBAAA;EAAA,IAAAa,EAAA;EAAA,IAAAN,CAAA,QAAAK,cAAA,IAAAL,CAAA,QAAAC,QAAA;IAEMK,EAAA,GAAAA,CAAA;MAC/B,MAAAC,MAAA,kBAAAA,OAAA;QAAA;QAAA;UAEI,MAAAC,UAAA,GAAmBP,QAAA,CAAAQ,KAAA,IAAkBR,QAAA,CAAAS,WAAA,CAAqB;UAE1D,MAAAC,MAAA,SAAsBN,cAAA;YAAAO,IAAA,EACd;YAAAC,IAAA;cAAAL;YAAA;UAAA,CAMR;UAEAL,YAAA,CAAaQ,MAAA,CAAAG,SAAgB;QAAA,SAAAC,EAAA;UAK7BZ,YAAA,CACET,KAAA,CAAAsB,aAAA,CACE;YAAAC,KAAA;cAAAC,UAAA,EAGgB;cAAAC,MAAA,EACJ;cAAAC,YAAA,EACM;cAAAC,KAAA,EACP;cAAAC,OAAA,EACE;cAAAC,SAAA,EACE;YAAA;UAAA,GAGf;QAAA;MAAA;MAKHhB,MAAA;IAAA;IACPP,CAAA,MAAAK,cAAA;IAAAL,CAAA,MAAAC,QAAA;IAAAD,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAtCA,MAAAwB,YAAA,GAAqBlB,EAsC0B;EAE/C,MAAAmB,OAAA,GAAgB5B,MAAA,MAAO;EAAA,IAAAkB,EAAA;EAAA,IAAAW,EAAA;EAAA,IAAA1B,CAAA,QAAAwB,YAAA;IAEbT,EAAA,GAAAA,CAAA;MAAA,IACJU,OAAA,CAAAE,OAAA;QAAA;MAAA;MAGJF,OAAA,CAAAE,OAAA;MACKH,YAAA;IAAA;IACJE,EAAA,IAACF,YAAA;IAAaxB,CAAA,MAAAwB,YAAA;IAAAxB,CAAA,MAAAe,EAAA;IAAAf,CAAA,MAAA0B,EAAA;EAAA;IAAAX,EAAA,GAAAf,CAAA;IAAA0B,EAAA,GAAA1B,CAAA;EAAA;EANjBJ,SAAA,CAAUmB,EAMV,EAAGW,EAAc;EAAA,KAEZxB,SAAA;IAAA,IAAA0B,EAAA;IAAA,IAAA5B,CAAA,QAAA6B,MAAA,CAAAC,GAAA;MACIF,EAAA,GAAAG,IAAA,CAAAvC,aAAA;QAAAwC,MAAA,EAAsB;MAAA,C;;;;;WAAtBJ,E;;;;IAGFA,EAAA,GAAAG,IAAA,CAAAE,SAAA;MAAAC,QAAA,EAAGhC;IAAA,C;;;;;;SAAH0B,E;CACT","ignoreList":[]}
@@ -2,50 +2,57 @@ import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerCompo
2
2
  /**
3
3
  * Server function to get the default dashboard layout on-demand.
4
4
  * Used when resetting the dashboard to its default configuration.
5
- */ export const getDefaultLayoutHandler = async ({ req })=>{
6
- if (!req.user) {
7
- throw new Error('Unauthorized');
8
- }
9
- const { defaultLayout = [], widgets = [] } = req.payload.config.admin.dashboard || {};
10
- const { importMap } = req.payload;
11
- const layoutItems = await getItemsFromConfig(defaultLayout, req, widgets);
12
- const layout = layoutItems.map((layoutItem)=>{
13
- const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'));
14
- return {
15
- component: RenderServerComponent({
16
- Component: widgets.find((widget)=>widget.slug === widgetSlug)?.ComponentPath,
17
- importMap,
18
- serverProps: {
19
- req,
20
- widgetSlug
21
- }
22
- }),
23
- item: layoutItem
24
- };
25
- });
5
+ */
6
+ export const getDefaultLayoutHandler = async ({
7
+ req
8
+ }) => {
9
+ if (!req.user) {
10
+ throw new Error('Unauthorized');
11
+ }
12
+ const {
13
+ defaultLayout = [],
14
+ widgets = []
15
+ } = req.payload.config.admin.dashboard || {};
16
+ const {
17
+ importMap
18
+ } = req.payload;
19
+ const layoutItems = await getItemsFromConfig(defaultLayout, req, widgets);
20
+ const layout = layoutItems.map(layoutItem => {
21
+ const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'));
26
22
  return {
27
- layout
23
+ component: RenderServerComponent({
24
+ Component: widgets.find(widget => widget.slug === widgetSlug)?.ComponentPath,
25
+ importMap,
26
+ serverProps: {
27
+ req,
28
+ widgetSlug
29
+ }
30
+ }),
31
+ item: layoutItem
28
32
  };
33
+ });
34
+ return {
35
+ layout
36
+ };
29
37
  };
30
38
  async function getItemsFromConfig(defaultLayout, req, widgets) {
31
- // Handle function format
32
- let widgetInstances;
33
- if (typeof defaultLayout === 'function') {
34
- widgetInstances = await defaultLayout({
35
- req
36
- });
37
- } else {
38
- widgetInstances = defaultLayout;
39
- }
40
- return widgetInstances.map((widgetInstance, index)=>{
41
- const widget = widgets.find((w)=>w.slug === widgetInstance.widgetSlug);
42
- return {
43
- id: `${widgetInstance.widgetSlug}-${index}`,
44
- maxWidth: widget?.maxWidth ?? 'full',
45
- minWidth: widget?.minWidth ?? 'x-small',
46
- width: widgetInstance.width || 'x-small'
47
- };
39
+ // Handle function format
40
+ let widgetInstances;
41
+ if (typeof defaultLayout === 'function') {
42
+ widgetInstances = await defaultLayout({
43
+ req
48
44
  });
45
+ } else {
46
+ widgetInstances = defaultLayout;
47
+ }
48
+ return widgetInstances.map((widgetInstance, index) => {
49
+ const widget = widgets.find(w => w.slug === widgetInstance.widgetSlug);
50
+ return {
51
+ id: `${widgetInstance.widgetSlug}-${index}`,
52
+ maxWidth: widget?.maxWidth ?? 'full',
53
+ minWidth: widget?.minWidth ?? 'x-small',
54
+ width: widgetInstance.width || 'x-small'
55
+ };
56
+ });
49
57
  }
50
-
51
58
  //# sourceMappingURL=getDefaultLayoutServerFn.js.map