@payloadcms/next 4.0.0-internal.5b1e7cd → 4.0.0-internal.c2b57ce

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 (350) hide show
  1. package/dist/adapters/router.d.ts +5 -0
  2. package/dist/adapters/router.d.ts.map +1 -0
  3. package/dist/adapters/router.js +53 -0
  4. package/dist/adapters/router.js.map +1 -0
  5. package/dist/adapters/server.d.ts +7 -0
  6. package/dist/adapters/server.d.ts.map +1 -0
  7. package/dist/adapters/server.js +39 -0
  8. package/dist/adapters/server.js.map +1 -0
  9. package/dist/cjs/withPayload.cjs +13 -180
  10. package/dist/cjs/withPayload.cjs.map +4 -4
  11. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +1 -1
  12. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
  13. package/dist/elements/DocumentHeader/Tabs/Tab/index.css +47 -0
  14. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts +1 -1
  15. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
  16. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +1 -0
  17. package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
  18. package/dist/elements/DocumentHeader/Tabs/index.css +54 -0
  19. package/dist/elements/DocumentHeader/Tabs/index.d.ts +1 -1
  20. package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
  21. package/dist/elements/DocumentHeader/Tabs/index.js +1 -0
  22. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  23. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.css +11 -0
  24. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.d.ts +1 -1
  25. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.d.ts.map +1 -1
  26. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -1
  27. package/dist/elements/DocumentHeader/Tabs/tabs/index.d.ts.map +1 -1
  28. package/dist/elements/DocumentHeader/Tabs/tabs/index.js +0 -4
  29. package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
  30. package/dist/elements/DocumentHeader/index.css +38 -0
  31. package/dist/elements/DocumentHeader/index.d.ts +1 -1
  32. package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
  33. package/dist/elements/DocumentHeader/index.js +9 -12
  34. package/dist/elements/DocumentHeader/index.js.map +1 -1
  35. package/dist/elements/HierarchyTypeField/index.d.ts +9 -0
  36. package/dist/elements/HierarchyTypeField/index.d.ts.map +1 -0
  37. package/dist/elements/HierarchyTypeField/index.js +114 -0
  38. package/dist/elements/HierarchyTypeField/index.js.map +1 -0
  39. package/dist/elements/HierarchyTypeField/index.server.d.ts +9 -0
  40. package/dist/elements/HierarchyTypeField/index.server.d.ts.map +1 -0
  41. package/dist/elements/HierarchyTypeField/index.server.js +32 -0
  42. package/dist/elements/HierarchyTypeField/index.server.js.map +1 -0
  43. package/dist/elements/Nav/NavSidebarToggle/index.d.ts +8 -0
  44. package/dist/elements/Nav/NavSidebarToggle/index.d.ts.map +1 -0
  45. package/dist/elements/Nav/{NavHamburger → NavSidebarToggle}/index.js +3 -3
  46. package/dist/elements/Nav/NavSidebarToggle/index.js.map +1 -0
  47. package/dist/elements/Nav/NavWrapper/index.d.ts.map +1 -1
  48. package/dist/elements/Nav/NavWrapper/index.js +21 -24
  49. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  50. package/dist/elements/Nav/SidebarTabs/TabError/index.css +29 -0
  51. package/dist/elements/Nav/SidebarTabs/TabError/index.d.ts +8 -0
  52. package/dist/elements/Nav/SidebarTabs/TabError/index.d.ts.map +1 -0
  53. package/dist/elements/Nav/SidebarTabs/TabError/index.js +42 -0
  54. package/dist/elements/Nav/SidebarTabs/TabError/index.js.map +1 -0
  55. package/dist/elements/Nav/SidebarTabs/constants.d.ts +2 -0
  56. package/dist/elements/Nav/SidebarTabs/constants.d.ts.map +1 -0
  57. package/dist/elements/Nav/SidebarTabs/constants.js +2 -0
  58. package/dist/elements/Nav/SidebarTabs/constants.js.map +1 -0
  59. package/dist/elements/Nav/SidebarTabs/index.client.d.ts +22 -0
  60. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -0
  61. package/dist/elements/Nav/SidebarTabs/index.client.js +195 -0
  62. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -0
  63. package/dist/elements/Nav/SidebarTabs/index.css +80 -0
  64. package/dist/elements/Nav/SidebarTabs/index.d.ts +17 -0
  65. package/dist/elements/Nav/SidebarTabs/index.d.ts.map +1 -0
  66. package/dist/elements/Nav/SidebarTabs/index.js +85 -0
  67. package/dist/elements/Nav/SidebarTabs/index.js.map +1 -0
  68. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts +10 -0
  69. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts.map +1 -0
  70. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +54 -0
  71. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -0
  72. package/dist/elements/Nav/getNavPrefs.d.ts.map +1 -1
  73. package/dist/elements/Nav/getNavPrefs.js +36 -2
  74. package/dist/elements/Nav/getNavPrefs.js.map +1 -1
  75. package/dist/elements/Nav/index.client.d.ts.map +1 -1
  76. package/dist/elements/Nav/index.client.js +48 -63
  77. package/dist/elements/Nav/index.client.js.map +1 -1
  78. package/dist/elements/Nav/index.css +132 -0
  79. package/dist/elements/Nav/index.d.ts +1 -1
  80. package/dist/elements/Nav/index.d.ts.map +1 -1
  81. package/dist/elements/Nav/index.js +41 -18
  82. package/dist/elements/Nav/index.js.map +1 -1
  83. package/dist/exports/client.d.ts +3 -2
  84. package/dist/exports/client.d.ts.map +1 -1
  85. package/dist/exports/client.js +3 -2
  86. package/dist/exports/client.js.map +1 -1
  87. package/dist/exports/rsc.d.ts +2 -1
  88. package/dist/exports/rsc.d.ts.map +1 -1
  89. package/dist/exports/rsc.js +2 -1
  90. package/dist/exports/rsc.js.map +1 -1
  91. package/dist/exports/utilities.d.ts +2 -67
  92. package/dist/exports/utilities.d.ts.map +1 -1
  93. package/dist/exports/utilities.js +1 -49
  94. package/dist/exports/utilities.js.map +1 -1
  95. package/dist/layouts/Root/index.d.ts +18 -1
  96. package/dist/layouts/Root/index.d.ts.map +1 -1
  97. package/dist/layouts/Root/index.js +29 -4
  98. package/dist/layouts/Root/index.js.map +1 -1
  99. package/dist/prod/styles.css +1 -1
  100. package/dist/routes/graphql/handler.d.ts.map +1 -1
  101. package/dist/routes/graphql/playground.d.ts.map +1 -1
  102. package/dist/routes/rest/index.d.ts.map +1 -1
  103. package/dist/templates/Default/Wrapper/index.css +40 -0
  104. package/dist/templates/Default/Wrapper/index.d.ts +1 -1
  105. package/dist/templates/Default/Wrapper/index.d.ts.map +1 -1
  106. package/dist/templates/Default/Wrapper/index.js +16 -19
  107. package/dist/templates/Default/Wrapper/index.js.map +1 -1
  108. package/dist/templates/Default/index.css +23 -0
  109. package/dist/templates/Default/index.d.ts +2 -2
  110. package/dist/templates/Default/index.d.ts.map +1 -1
  111. package/dist/templates/Default/index.js +5 -21
  112. package/dist/templates/Default/index.js.map +1 -1
  113. package/dist/templates/Minimal/index.css +25 -0
  114. package/dist/templates/Minimal/index.d.ts +1 -1
  115. package/dist/templates/Minimal/index.d.ts.map +1 -1
  116. package/dist/templates/Minimal/index.js.map +1 -1
  117. package/dist/utilities/getHierarchyAncestry.d.ts +24 -0
  118. package/dist/utilities/getHierarchyAncestry.d.ts.map +1 -0
  119. package/dist/utilities/getHierarchyAncestry.js +103 -0
  120. package/dist/utilities/getHierarchyAncestry.js.map +1 -0
  121. package/dist/utilities/getNextRequestI18n.d.ts.map +1 -1
  122. package/dist/utilities/getPayloadHMR.d.ts.map +1 -1
  123. package/dist/utilities/getRequestHighContrast.d.ts +10 -0
  124. package/dist/utilities/getRequestHighContrast.d.ts.map +1 -0
  125. package/dist/utilities/getRequestHighContrast.js +18 -0
  126. package/dist/utilities/getRequestHighContrast.js.map +1 -0
  127. package/dist/utilities/getRequestTheme.d.ts.map +1 -1
  128. package/dist/utilities/getRouteWithoutAdmin.d.ts.map +1 -1
  129. package/dist/utilities/handleAuthRedirect.d.ts.map +1 -1
  130. package/dist/utilities/handleServerFunctions.js +2 -2
  131. package/dist/utilities/handleServerFunctions.js.map +1 -1
  132. package/dist/utilities/initReq.d.ts.map +1 -1
  133. package/dist/utilities/initReq.js +2 -0
  134. package/dist/utilities/initReq.js.map +1 -1
  135. package/dist/utilities/isCustomAdminView.d.ts.map +1 -1
  136. package/dist/utilities/isPublicAdminRoute.d.ts.map +1 -1
  137. package/dist/utilities/meta.d.ts.map +1 -1
  138. package/dist/utilities/timestamp.d.ts.map +1 -1
  139. package/dist/views/API/RenderJSON/index.d.ts.map +1 -1
  140. package/dist/views/Account/Settings/index.d.ts.map +1 -1
  141. package/dist/views/Account/Settings/index.js +2 -1
  142. package/dist/views/Account/Settings/index.js.map +1 -1
  143. package/dist/views/Account/ToggleHighContrast/index.d.ts +3 -0
  144. package/dist/views/Account/ToggleHighContrast/index.d.ts.map +1 -0
  145. package/dist/views/Account/ToggleHighContrast/index.js +45 -0
  146. package/dist/views/Account/ToggleHighContrast/index.js.map +1 -0
  147. package/dist/views/Account/index.d.ts.map +1 -1
  148. package/dist/views/Account/index.js +1 -0
  149. package/dist/views/Account/index.js.map +1 -1
  150. package/dist/views/CollectionTrash/metadata.d.ts.map +1 -1
  151. package/dist/views/CreateFirstUser/index.client.d.ts.map +1 -1
  152. package/dist/views/CreateFirstUser/index.client.js +32 -25
  153. package/dist/views/CreateFirstUser/index.client.js.map +1 -1
  154. package/dist/views/CreateFirstUser/index.css +69 -0
  155. package/dist/views/CreateFirstUser/index.d.ts +1 -1
  156. package/dist/views/CreateFirstUser/index.d.ts.map +1 -1
  157. package/dist/views/CreateFirstUser/index.js +9 -5
  158. package/dist/views/CreateFirstUser/index.js.map +1 -1
  159. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  160. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +72 -45
  161. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  162. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.d.ts.map +1 -1
  163. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js +25 -22
  164. package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js.map +1 -1
  165. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  166. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +2 -3
  167. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  168. package/dist/views/Dashboard/Default/ModularDashboard/index.css +299 -0
  169. package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts +1 -1
  170. package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts.map +1 -1
  171. package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
  172. package/dist/views/Dashboard/Default/index.d.ts +0 -6
  173. package/dist/views/Dashboard/Default/index.d.ts.map +1 -1
  174. package/dist/views/Dashboard/Default/index.js +3 -0
  175. package/dist/views/Dashboard/Default/index.js.map +1 -1
  176. package/dist/views/Dashboard/index.d.ts.map +1 -1
  177. package/dist/views/Dashboard/index.js +1 -0
  178. package/dist/views/Dashboard/index.js.map +1 -1
  179. package/dist/views/Document/getCustomDocumentViewByKey.d.ts.map +1 -1
  180. package/dist/views/Document/getCustomViewByRoute.d.ts.map +1 -1
  181. package/dist/views/Document/getDocPreferences.d.ts.map +1 -1
  182. package/dist/views/Document/getDocumentData.d.ts.map +1 -1
  183. package/dist/views/Document/getDocumentPermissions.d.ts.map +1 -1
  184. package/dist/views/Document/getDocumentView.d.ts.map +1 -1
  185. package/dist/views/Document/getDocumentView.js +3 -9
  186. package/dist/views/Document/getDocumentView.js.map +1 -1
  187. package/dist/views/Document/getIsLocked.d.ts.map +1 -1
  188. package/dist/views/Document/getVersions.d.ts.map +1 -1
  189. package/dist/views/Document/handleServerFunction.d.ts.map +1 -1
  190. package/dist/views/Document/handleServerFunction.js +1 -0
  191. package/dist/views/Document/handleServerFunction.js.map +1 -1
  192. package/dist/views/Document/index.d.ts.map +1 -1
  193. package/dist/views/Document/index.js +5 -0
  194. package/dist/views/Document/index.js.map +1 -1
  195. package/dist/views/Document/renderDocumentSlots.d.ts.map +1 -1
  196. package/dist/views/Document/renderDocumentSlots.js +17 -8
  197. package/dist/views/Document/renderDocumentSlots.js.map +1 -1
  198. package/dist/views/Hierarchy/index.d.ts +18 -0
  199. package/dist/views/Hierarchy/index.d.ts.map +1 -0
  200. package/dist/views/Hierarchy/index.js +20 -0
  201. package/dist/views/Hierarchy/index.js.map +1 -0
  202. package/dist/views/List/createSerializableValue.d.ts.map +1 -1
  203. package/dist/views/List/extractRelationshipDisplayValue.d.ts.map +1 -1
  204. package/dist/views/List/extractValueOrRelationshipID.d.ts.map +1 -1
  205. package/dist/views/List/handleGroupBy.d.ts.map +1 -1
  206. package/dist/views/List/handleHierarchy.d.ts +18 -0
  207. package/dist/views/List/handleHierarchy.d.ts.map +1 -0
  208. package/dist/views/List/handleHierarchy.js +259 -0
  209. package/dist/views/List/handleHierarchy.js.map +1 -0
  210. package/dist/views/List/handleServerFunction.d.ts.map +1 -1
  211. package/dist/views/List/handleServerFunction.js +1 -0
  212. package/dist/views/List/handleServerFunction.js.map +1 -1
  213. package/dist/views/List/index.css +3 -0
  214. package/dist/views/List/index.d.ts +1 -0
  215. package/dist/views/List/index.d.ts.map +1 -1
  216. package/dist/views/List/index.js +105 -31
  217. package/dist/views/List/index.js.map +1 -1
  218. package/dist/views/List/metadata.d.ts.map +1 -1
  219. package/dist/views/List/renderListViewSlots.d.ts.map +1 -1
  220. package/dist/views/List/renderListViewSlots.js +2 -1
  221. package/dist/views/List/renderListViewSlots.js.map +1 -1
  222. package/dist/views/List/resolveAllFilterOptions.d.ts.map +1 -1
  223. package/dist/views/List/transformColumnsToSelect.d.ts.map +1 -1
  224. package/dist/views/Login/LoginForm/index.css +51 -0
  225. package/dist/views/Login/LoginForm/index.d.ts +1 -1
  226. package/dist/views/Login/LoginForm/index.d.ts.map +1 -1
  227. package/dist/views/Login/LoginForm/index.js +16 -10
  228. package/dist/views/Login/LoginForm/index.js.map +1 -1
  229. package/dist/views/Login/index.css +8 -0
  230. package/dist/views/Login/index.d.ts +1 -1
  231. package/dist/views/Login/index.d.ts.map +1 -1
  232. package/dist/views/Login/index.js +3 -0
  233. package/dist/views/Login/index.js.map +1 -1
  234. package/dist/views/NotFound/index.client.d.ts +2 -4
  235. package/dist/views/NotFound/index.client.d.ts.map +1 -1
  236. package/dist/views/NotFound/index.client.js +25 -42
  237. package/dist/views/NotFound/index.client.js.map +1 -1
  238. package/dist/views/NotFound/index.css +47 -0
  239. package/dist/views/NotFound/index.d.ts.map +1 -1
  240. package/dist/views/NotFound/index.js +2 -3
  241. package/dist/views/NotFound/index.js.map +1 -1
  242. package/dist/views/NotFound/metadata.d.ts.map +1 -1
  243. package/dist/views/Root/generateCustomViewMetadata.d.ts.map +1 -1
  244. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  245. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts +12 -0
  246. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -0
  247. package/dist/views/Root/getCustomGlobalViewByRoute.js +46 -0
  248. package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -0
  249. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  250. package/dist/views/Root/getCustomViewByRoute.d.ts.map +1 -1
  251. package/dist/views/Root/getRouteData.d.ts +1 -4
  252. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  253. package/dist/views/Root/getRouteData.js +83 -110
  254. package/dist/views/Root/getRouteData.js.map +1 -1
  255. package/dist/views/Root/index.d.ts.map +1 -1
  256. package/dist/views/Root/index.js +8 -16
  257. package/dist/views/Root/index.js.map +1 -1
  258. package/dist/views/Root/isPathMatchingRoute.d.ts.map +1 -1
  259. package/dist/views/Root/metadata.d.ts.map +1 -1
  260. package/dist/views/Root/metadata.js +1 -37
  261. package/dist/views/Root/metadata.js.map +1 -1
  262. package/dist/views/Unauthorized/index.css +44 -0
  263. package/dist/views/Unauthorized/index.d.ts +1 -1
  264. package/dist/views/Unauthorized/index.d.ts.map +1 -1
  265. package/dist/views/Unauthorized/index.js +12 -33
  266. package/dist/views/Unauthorized/index.js.map +1 -1
  267. package/dist/views/Verify/index.d.ts.map +1 -1
  268. package/dist/views/Verify/index.js +1 -0
  269. package/dist/views/Verify/index.js.map +1 -1
  270. package/dist/views/Version/Default/index.d.ts.map +1 -1
  271. package/dist/views/Version/Default/index.js +4 -4
  272. package/dist/views/Version/Default/index.js.map +1 -1
  273. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +1 -1
  274. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
  275. package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.d.ts.map +1 -1
  276. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.d.ts.map +1 -1
  277. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.d.ts.map +1 -1
  278. package/dist/views/Version/RenderFieldsToDiff/index.d.ts.map +1 -1
  279. package/dist/views/Version/Restore/index.js +1 -1
  280. package/dist/views/Version/Restore/index.js.map +1 -1
  281. package/dist/views/Version/SelectComparison/VersionDrawer/index.d.ts.map +1 -1
  282. package/dist/views/Version/SelectComparison/VersionDrawer/index.js +0 -1
  283. package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -1
  284. package/dist/views/Version/VersionPillLabel/VersionPillLabel.d.ts +1 -1
  285. package/dist/views/Version/VersionPillLabel/VersionPillLabel.d.ts.map +1 -1
  286. package/dist/views/Version/VersionPillLabel/VersionPillLabel.js.map +1 -1
  287. package/dist/views/Version/VersionPillLabel/index.css +23 -0
  288. package/dist/views/Version/fetchVersions.d.ts.map +1 -1
  289. package/dist/views/Versions/buildColumns.d.ts.map +1 -1
  290. package/dist/views/Versions/buildColumns.js +18 -18
  291. package/dist/views/Versions/buildColumns.js.map +1 -1
  292. package/dist/views/Versions/cells/AutosaveCell/index.css +7 -0
  293. package/dist/views/Versions/cells/AutosaveCell/index.d.ts +1 -1
  294. package/dist/views/Versions/cells/AutosaveCell/index.d.ts.map +1 -1
  295. package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -1
  296. package/dist/views/Versions/index.client.d.ts.map +1 -1
  297. package/dist/views/Versions/index.client.js +7 -23
  298. package/dist/views/Versions/index.client.js.map +1 -1
  299. package/dist/views/Versions/index.css +85 -0
  300. package/dist/views/Versions/index.d.ts +1 -1
  301. package/dist/views/Versions/index.d.ts.map +1 -1
  302. package/dist/views/Versions/index.js +1 -1
  303. package/dist/views/Versions/index.js.map +1 -1
  304. package/dist/withPayload/withPayload.d.ts.map +1 -1
  305. package/dist/withPayload/withPayload.js +9 -27
  306. package/dist/withPayload/withPayload.js.map +1 -1
  307. package/dist/withPayload/withPayload.utils.d.ts +0 -14
  308. package/dist/withPayload/withPayload.utils.d.ts.map +1 -1
  309. package/dist/withPayload/withPayload.utils.js +0 -73
  310. package/dist/withPayload/withPayload.utils.js.map +1 -1
  311. package/package.json +14 -14
  312. package/dist/elements/Nav/NavHamburger/index.d.ts +0 -8
  313. package/dist/elements/Nav/NavHamburger/index.d.ts.map +0 -1
  314. package/dist/elements/Nav/NavHamburger/index.js.map +0 -1
  315. package/dist/templates/Default/NavHamburger/index.d.ts +0 -3
  316. package/dist/templates/Default/NavHamburger/index.d.ts.map +0 -1
  317. package/dist/templates/Default/NavHamburger/index.js +0 -25
  318. package/dist/templates/Default/NavHamburger/index.js.map +0 -1
  319. package/dist/views/BrowseByFolder/buildView.d.ts +0 -13
  320. package/dist/views/BrowseByFolder/buildView.d.ts.map +0 -1
  321. package/dist/views/BrowseByFolder/buildView.js +0 -170
  322. package/dist/views/BrowseByFolder/buildView.js.map +0 -1
  323. package/dist/views/BrowseByFolder/index.d.ts +0 -4
  324. package/dist/views/BrowseByFolder/index.d.ts.map +0 -1
  325. package/dist/views/BrowseByFolder/index.js +0 -20
  326. package/dist/views/BrowseByFolder/index.js.map +0 -1
  327. package/dist/views/BrowseByFolder/metadata.d.ts +0 -4
  328. package/dist/views/BrowseByFolder/metadata.d.ts.map +0 -1
  329. package/dist/views/BrowseByFolder/metadata.js +0 -18
  330. package/dist/views/BrowseByFolder/metadata.js.map +0 -1
  331. package/dist/views/CollectionFolders/buildView.d.ts +0 -15
  332. package/dist/views/CollectionFolders/buildView.d.ts.map +0 -1
  333. package/dist/views/CollectionFolders/buildView.js +0 -156
  334. package/dist/views/CollectionFolders/buildView.js.map +0 -1
  335. package/dist/views/CollectionFolders/index.d.ts +0 -4
  336. package/dist/views/CollectionFolders/index.d.ts.map +0 -1
  337. package/dist/views/CollectionFolders/index.js +0 -20
  338. package/dist/views/CollectionFolders/index.js.map +0 -1
  339. package/dist/views/CollectionFolders/metadata.d.ts +0 -7
  340. package/dist/views/CollectionFolders/metadata.d.ts.map +0 -1
  341. package/dist/views/CollectionFolders/metadata.js +0 -25
  342. package/dist/views/CollectionFolders/metadata.js.map +0 -1
  343. package/dist/views/CollectionFolders/renderFolderViewSlots.d.ts +0 -11
  344. package/dist/views/CollectionFolders/renderFolderViewSlots.d.ts.map +0 -1
  345. package/dist/views/CollectionFolders/renderFolderViewSlots.js +0 -64
  346. package/dist/views/CollectionFolders/renderFolderViewSlots.js.map +0 -1
  347. package/dist/withPayload/withPayloadLegacy.d.ts +0 -2
  348. package/dist/withPayload/withPayloadLegacy.d.ts.map +0 -1
  349. package/dist/withPayload/withPayloadLegacy.js +0 -47
  350. package/dist/withPayload/withPayloadLegacy.js.map +0 -1
@@ -8,7 +8,7 @@ import React from 'react';
8
8
  * @internal
9
9
  */
10
10
  export const NavWrapper = props => {
11
- const $ = _c(11);
11
+ const $ = _c(10);
12
12
  const {
13
13
  baseClass,
14
14
  children
@@ -16,46 +16,43 @@ export const NavWrapper = props => {
16
16
  const {
17
17
  hydrated,
18
18
  navOpen,
19
- navRef,
20
- shouldAnimate
19
+ navRef
21
20
  } = useNav();
22
21
  const t0 = navOpen && `${baseClass}--nav-open`;
23
- const t1 = shouldAnimate && `${baseClass}--nav-animate`;
24
- const t2 = hydrated && `${baseClass}--nav-hydrated`;
25
- let t3;
26
- if ($[0] !== baseClass || $[1] !== t0 || $[2] !== t1 || $[3] !== t2) {
27
- t3 = [baseClass, t0, t1, t2].filter(Boolean);
22
+ const t1 = hydrated && `${baseClass}--nav-hydrated`;
23
+ let t2;
24
+ if ($[0] !== baseClass || $[1] !== t0 || $[2] !== t1) {
25
+ t2 = [baseClass, t0, t1].filter(Boolean);
28
26
  $[0] = baseClass;
29
27
  $[1] = t0;
30
28
  $[2] = t1;
31
29
  $[3] = t2;
32
- $[4] = t3;
33
30
  } else {
34
- t3 = $[4];
31
+ t2 = $[3];
35
32
  }
36
- const t4 = t3.join(" ");
37
- const t5 = !navOpen ? true : undefined;
38
- const t6 = `${baseClass}__scroll`;
39
- let t7;
40
- if ($[5] !== children || $[6] !== navRef || $[7] !== t4 || $[8] !== t5 || $[9] !== t6) {
41
- t7 = _jsx("aside", {
42
- className: t4,
43
- inert: t5,
33
+ const t3 = t2.join(" ");
34
+ const t4 = !navOpen ? true : undefined;
35
+ const t5 = `${baseClass}__scroll`;
36
+ let t6;
37
+ if ($[4] !== children || $[5] !== navRef || $[6] !== t3 || $[7] !== t4 || $[8] !== t5) {
38
+ t6 = _jsx("aside", {
39
+ className: t3,
40
+ inert: t4,
44
41
  children: _jsx("div", {
45
- className: t6,
42
+ className: t5,
46
43
  ref: navRef,
47
44
  children
48
45
  })
49
46
  });
50
- $[5] = children;
51
- $[6] = navRef;
47
+ $[4] = children;
48
+ $[5] = navRef;
49
+ $[6] = t3;
52
50
  $[7] = t4;
53
51
  $[8] = t5;
54
52
  $[9] = t6;
55
- $[10] = t7;
56
53
  } else {
57
- t7 = $[10];
54
+ t6 = $[9];
58
55
  }
59
- return t7;
56
+ return t6;
60
57
  };
61
58
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useNav","React","NavWrapper","props","$","baseClass","children","hydrated","navOpen","navRef","shouldAnimate","t0","t1","t2","t3","filter","Boolean","t4","join","t5","undefined","t6","t7","_jsx","className","inert","ref"],"sources":["../../../../src/elements/Nav/NavWrapper/index.tsx"],"sourcesContent":["'use client'\nimport { useNav } from '@payloadcms/ui'\nimport React from 'react'\n\nimport './index.scss'\n\n/**\n * @internal\n */\nexport const NavWrapper: React.FC<{\n baseClass?: string\n children: React.ReactNode\n}> = (props) => {\n const { baseClass, children } = props\n\n const { hydrated, navOpen, navRef, shouldAnimate } = useNav()\n\n return (\n <aside\n className={[\n baseClass,\n navOpen && `${baseClass}--nav-open`,\n shouldAnimate && `${baseClass}--nav-animate`,\n hydrated && `${baseClass}--nav-hydrated`,\n ]\n .filter(Boolean)\n .join(' ')}\n inert={!navOpen ? true : undefined}\n >\n <div className={`${baseClass}__scroll`} ref={navRef}>\n {children}\n </div>\n </aside>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,MAAM,QAAQ;AACvB,OAAOC,KAAA,MAAW;AAIlB;;;AAGA,OAAO,MAAMC,UAAA,GAGRC,KAAA;EAAA,MAAAC,CAAA,GAAAL,EAAA;EACH;IAAAM,SAAA;IAAAC;EAAA,IAAgCH,KAAA;EAEhC;IAAAI,QAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC;EAAA,IAAqDV,MAAA;EAM/C,MAAAW,EAAA,GAAAH,OAAA,IAAW,GAAGH,SAAA,YAAqB;EACnC,MAAAO,EAAA,GAAAF,aAAA,IAAiB,GAAGL,SAAA,eAAwB;EAC5C,MAAAQ,EAAA,GAAAN,QAAA,IAAY,GAAGF,SAAA,gBAAyB;EAAA,IAAAS,EAAA;EAAA,IAAAV,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAO,EAAA,IAAAP,CAAA,QAAAQ,EAAA,IAAAR,CAAA,QAAAS,EAAA;IAJ/BC,EAAA,IACTT,SAAA,EACAM,EAAmC,EACnCC,EAA4C,EAC5CC,EAAwC,EAAAE,MAAA,CAAAC,OAEhC;IAAAZ,CAAA,MAAAC,SAAA;IAAAD,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;IAAAR,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EANC,MAAAa,EAAA,GAAAH,EAMD,CAAAI,IAAA,CACF;EACD,MAAAC,EAAA,IAACX,OAAA,UAAAY,SAAiB;EAET,MAAAC,EAAA,MAAGhB,SAAA,UAAmB;EAAA,IAAAiB,EAAA;EAAA,IAAAlB,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAK,MAAA,IAAAL,CAAA,QAAAa,EAAA,IAAAb,CAAA,QAAAe,EAAA,IAAAf,CAAA,QAAAiB,EAAA;IAXxCC,EAAA,GAAAC,IAAA,CAAC;MAAAC,SAAA,EACYP,EAOH;MAAAQ,KAAA,EACDN,EAAkB;MAAAb,QAAA,EAEzBiB,IAAA,CAAC;QAAAC,SAAA,EAAeH,EAAsB;QAAAK,GAAA,EAAOjB,MAAA;QAAAH;MAAA,C;;;;;;;;;;;SAX/CgB,E;CAgBJ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useNav","React","NavWrapper","props","$","baseClass","children","hydrated","navOpen","navRef","t0","t1","t2","filter","Boolean","t3","join","t4","undefined","t5","t6","_jsx","className","inert","ref"],"sources":["../../../../src/elements/Nav/NavWrapper/index.tsx"],"sourcesContent":["'use client'\nimport { useNav } from '@payloadcms/ui'\nimport React from 'react'\n\nimport './index.scss'\n\n/**\n * @internal\n */\nexport const NavWrapper: React.FC<{\n baseClass?: string\n children: React.ReactNode\n}> = (props) => {\n const { baseClass, children } = props\n\n const { hydrated, navOpen, navRef } = useNav()\n\n return (\n <aside\n className={[\n baseClass,\n navOpen && `${baseClass}--nav-open`,\n hydrated && `${baseClass}--nav-hydrated`,\n ]\n .filter(Boolean)\n .join(' ')}\n inert={!navOpen ? true : undefined}\n >\n <div className={`${baseClass}__scroll`} ref={navRef}>\n {children}\n </div>\n </aside>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,MAAM,QAAQ;AACvB,OAAOC,KAAA,MAAW;AAIlB;;;AAGA,OAAO,MAAMC,UAAA,GAGRC,KAAA;EAAA,MAAAC,CAAA,GAAAL,EAAA;EACH;IAAAM,SAAA;IAAAC;EAAA,IAAgCH,KAAA;EAEhC;IAAAI,QAAA;IAAAC,OAAA;IAAAC;EAAA,IAAsCT,MAAA;EAMhC,MAAAU,EAAA,GAAAF,OAAA,IAAW,GAAGH,SAAA,YAAqB;EACnC,MAAAM,EAAA,GAAAJ,QAAA,IAAY,GAAGF,SAAA,gBAAyB;EAAA,IAAAO,EAAA;EAAA,IAAAR,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAM,EAAA,IAAAN,CAAA,QAAAO,EAAA;IAH/BC,EAAA,IACTP,SAAA,EACAK,EAAmC,EACnCC,EAAwC,EAAAE,MAAA,CAAAC,OAEhC;IAAAV,CAAA,MAAAC,SAAA;IAAAD,CAAA,MAAAM,EAAA;IAAAN,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EALC,MAAAW,EAAA,GAAAH,EAKD,CAAAI,IAAA,CACF;EACD,MAAAC,EAAA,IAACT,OAAA,UAAAU,SAAiB;EAET,MAAAC,EAAA,MAAGd,SAAA,UAAmB;EAAA,IAAAe,EAAA;EAAA,IAAAhB,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAK,MAAA,IAAAL,CAAA,QAAAW,EAAA,IAAAX,CAAA,QAAAa,EAAA,IAAAb,CAAA,QAAAe,EAAA;IAVxCC,EAAA,GAAAC,IAAA,CAAC;MAAAC,SAAA,EACYP,EAMH;MAAAQ,KAAA,EACDN,EAAkB;MAAAX,QAAA,EAEzBe,IAAA,CAAC;QAAAC,SAAA,EAAeH,EAAsB;QAAAK,GAAA,EAAOf,MAAA;QAAAH;MAAA,C;;;;;;;;;;;SAV/Cc,E;CAeJ","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ @layer payload-default {
2
+ .sidebar-tab-error__content {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 2px;
6
+ line-height: 1.4;
7
+
8
+ strong {
9
+ font-weight: 600;
10
+ }
11
+
12
+ span {
13
+ opacity: 0.8;
14
+ font-size: 0.625rem;
15
+ }
16
+ }
17
+
18
+ .sidebar-tab-error__retry {
19
+ all: unset;
20
+ margin-top: var(--spacer-1);
21
+ font-size: 0.625rem;
22
+ text-decoration: underline;
23
+ cursor: pointer;
24
+
25
+ &:hover {
26
+ opacity: 0.8;
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import './index.css';
3
+ export type TabErrorProps = {
4
+ message: string;
5
+ onRetry: () => void;
6
+ };
7
+ export declare const TabError: React.FC<TabErrorProps>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/Nav/SidebarTabs/TabError/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,aAAa,CAAA;AAIpB,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAY5C,CAAA"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+
3
+ import { c as _c } from "react/compiler-runtime";
4
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ import { useTranslation } from '@payloadcms/ui';
6
+ import React from 'react';
7
+ const baseClass = 'sidebar-tab-error';
8
+ export const TabError = t0 => {
9
+ const $ = _c(4);
10
+ const {
11
+ message,
12
+ onRetry
13
+ } = t0;
14
+ const {
15
+ t
16
+ } = useTranslation();
17
+ let t1;
18
+ if ($[0] !== message || $[1] !== onRetry || $[2] !== t) {
19
+ t1 = _jsx("div", {
20
+ className: baseClass,
21
+ children: _jsxs("div", {
22
+ className: `${baseClass}__content`,
23
+ children: [_jsx("span", {
24
+ children: message
25
+ }), _jsx("button", {
26
+ className: `${baseClass}__retry`,
27
+ onClick: onRetry,
28
+ type: "button",
29
+ children: t("general:retry")
30
+ })]
31
+ })
32
+ });
33
+ $[0] = message;
34
+ $[1] = onRetry;
35
+ $[2] = t;
36
+ $[3] = t1;
37
+ } else {
38
+ t1 = $[3];
39
+ }
40
+ return t1;
41
+ };
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["c","_c","useTranslation","React","baseClass","TabError","t0","$","message","onRetry","t","t1","_jsx","className","children","_jsxs","onClick","type"],"sources":["../../../../../src/elements/Nav/SidebarTabs/TabError/index.tsx"],"sourcesContent":["'use client'\n\nimport { useTranslation } from '@payloadcms/ui'\nimport React from 'react'\n\nimport './index.css'\n\nconst baseClass = 'sidebar-tab-error'\n\nexport type TabErrorProps = {\n message: string\n onRetry: () => void\n}\n\nexport const TabError: React.FC<TabErrorProps> = ({ message, onRetry }) => {\n const { t } = useTranslation()\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__content`}>\n <span>{message}</span>\n <button className={`${baseClass}__retry`} onClick={onRetry} type=\"button\">\n {t('general:retry')}\n </button>\n </div>\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,cAAc,QAAQ;AAC/B,OAAOC,KAAA,MAAW;AAIlB,MAAMC,SAAA,GAAY;AAOlB,OAAO,MAAMC,QAAA,GAAoCC,EAAA;EAAA,MAAAC,CAAA,GAAAN,EAAA;EAAC;IAAAO,OAAA;IAAAC;EAAA,IAAAH,EAAoB;EACpE;IAAAI;EAAA,IAAcR,cAAA;EAAA,IAAAS,EAAA;EAAA,IAAAJ,CAAA,QAAAC,OAAA,IAAAD,CAAA,QAAAE,OAAA,IAAAF,CAAA,QAAAG,CAAA;IAEZC,EAAA,GAAAC,IAAA,CAAC;MAAAC,SAAA,EAAAT,SAAA;MAAAU,QAAA,EACCC,KAAA,CAAC;QAAAF,SAAA,EAAe,GAAAT,SAAA,WAAuB;QAAAU,QAAA,GACrCF,IAAA,CAAC;UAAAE,QAAA,EAAMN;QAAA,C,GACPI,IAAA,CAAC;UAAAC,SAAA,EAAkB,GAAAT,SAAA,SAAqB;UAAAY,OAAA,EAAWP,OAAA;UAAAQ,IAAA,EAAc;UAAAH,QAAA,EAC9DJ,CAAA,CAAE;QAAA,C;;;;;;;;;;SAJTC,E;CASJ","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_NAV_TAB_SLUG = "nav";
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/SidebarTabs/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,QAAQ,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const DEFAULT_NAV_TAB_SLUG = 'nav';
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":["DEFAULT_NAV_TAB_SLUG"],"sources":["../../../../src/elements/Nav/SidebarTabs/constants.ts"],"sourcesContent":["export const DEFAULT_NAV_TAB_SLUG = 'nav'\n"],"mappings":"AAAA,OAAO,MAAMA,oBAAA,GAAuB","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ export type TabMetadata = {
3
+ icon: React.ReactNode;
4
+ isDefaultActive?: boolean;
5
+ label: string;
6
+ /** Whether this tab can be loaded/revalidated via serverFunction */
7
+ lazyLoadable?: boolean;
8
+ slug: string;
9
+ };
10
+ export type SidebarTabsClientProps = {
11
+ baseClass: string;
12
+ initialActiveTabID: string;
13
+ initialTabContents: Record<string, React.ReactNode>;
14
+ /**
15
+ * Delay before showing loading spinner (in ms), prevents flashing on fast loads
16
+ * @default 200
17
+ */
18
+ loadingDelay?: number;
19
+ tabs: TabMetadata[];
20
+ };
21
+ export declare const SidebarTabsClient: React.FC<SidebarTabsClientProps>;
22
+ //# sourceMappingURL=index.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/SidebarTabs/index.client.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAwC,MAAM,OAAO,CAAA;AAM5D,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,WAAW,EAAE,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA4L9D,CAAA"}
@@ -0,0 +1,195 @@
1
+ 'use client';
2
+
3
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
+ import { DelayedSpinner, SidebarTabsProvider, Tooltip, usePreferences, useServerFunctions } from '@payloadcms/ui';
5
+ import { PREFERENCE_KEYS } from 'payload/shared';
6
+ import React, { useCallback, useRef, useState } from 'react';
7
+ import { TabError } from './TabError/index.js';
8
+ export const SidebarTabsClient = ({
9
+ baseClass,
10
+ initialActiveTabID,
11
+ initialTabContents,
12
+ loadingDelay = 200,
13
+ tabs
14
+ }) => {
15
+ const {
16
+ setPreference
17
+ } = usePreferences();
18
+ const {
19
+ serverFunction
20
+ } = useServerFunctions();
21
+ const [activeTabID, setActiveTabID] = useState(initialActiveTabID);
22
+ const [tabContent, setTabContent] = useState(initialTabContents);
23
+ const [loadingTab, setLoadingTab] = useState(null);
24
+ const [hoveredTab, setHoveredTab] = useState(null);
25
+ const loadingTabsRef = useRef(new Set());
26
+ const tabContentRef = useRef(initialTabContents);
27
+ // Update cached content when server provides new initialTabContents
28
+ // This is needed because useState only uses initialValue on first mount
29
+ React.useEffect(() => {
30
+ tabContentRef.current = {
31
+ ...tabContentRef.current,
32
+ ...initialTabContents
33
+ };
34
+ setTabContent(prev => ({
35
+ ...prev,
36
+ ...initialTabContents
37
+ }));
38
+ }, [initialTabContents]);
39
+ const loadTabContent = useCallback(async (tabSlug, {
40
+ revalidate = false
41
+ } = {}) => {
42
+ const hasCachedContent = Boolean(tabContentRef.current[tabSlug]);
43
+ // Skip if already loaded (unless revalidating) or currently loading
44
+ if (hasCachedContent && !revalidate || loadingTabsRef.current.has(tabSlug)) {
45
+ return;
46
+ }
47
+ // Mark as loading - only show spinner if no cached content
48
+ loadingTabsRef.current.add(tabSlug);
49
+ if (!hasCachedContent) {
50
+ setLoadingTab(tabSlug);
51
+ }
52
+ try {
53
+ const result = await serverFunction({
54
+ name: 'render-tab',
55
+ args: {
56
+ tabSlug
57
+ }
58
+ });
59
+ const newContent_0 = {
60
+ ...tabContentRef.current,
61
+ [tabSlug]: result.component
62
+ };
63
+ tabContentRef.current = newContent_0;
64
+ setTabContent(newContent_0);
65
+ } catch (error) {
66
+ // On revalidate failure, keep showing cached content
67
+ if (hasCachedContent && revalidate) {
68
+ return;
69
+ }
70
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
71
+ const handleRetry = () => {
72
+ // Clear the error and retry loading
73
+ const clearedContent = {
74
+ ...tabContentRef.current
75
+ };
76
+ delete clearedContent[tabSlug];
77
+ tabContentRef.current = clearedContent;
78
+ setTabContent(clearedContent);
79
+ void loadTabContent(tabSlug);
80
+ };
81
+ const newContent = {
82
+ ...tabContentRef.current,
83
+ [tabSlug]: /*#__PURE__*/_jsx(TabError, {
84
+ message: errorMessage,
85
+ onRetry: handleRetry
86
+ })
87
+ };
88
+ tabContentRef.current = newContent;
89
+ setTabContent(newContent);
90
+ } finally {
91
+ loadingTabsRef.current.delete(tabSlug);
92
+ setLoadingTab(null);
93
+ }
94
+ }, [serverFunction]);
95
+ const reloadTabContent = useCallback(tabSlug_0 => {
96
+ // Clear cached content to force reload
97
+ const clearedContent_0 = {
98
+ ...tabContentRef.current
99
+ };
100
+ delete clearedContent_0[tabSlug_0];
101
+ tabContentRef.current = clearedContent_0;
102
+ setTabContent(clearedContent_0);
103
+ void loadTabContent(tabSlug_0);
104
+ }, [loadTabContent]);
105
+ const handleTabChange = useCallback(slug => {
106
+ setActiveTabID(slug);
107
+ void setPreference(PREFERENCE_KEYS.NAV_SIDEBAR_ACTIVE_TAB, {
108
+ activeTab: slug
109
+ });
110
+ // Only revalidate tabs that can be loaded via serverFunction
111
+ // Pre-rendered React elements (like default nav) can't be revalidated
112
+ const tab = tabs.find(t => t.slug === slug);
113
+ void loadTabContent(slug, {
114
+ revalidate: tab?.lazyLoadable ?? false
115
+ });
116
+ }, [setPreference, loadTabContent, tabs]);
117
+ const handleTabKeyDown = useCallback((e, currentIndex) => {
118
+ if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
119
+ e.preventDefault();
120
+ const direction = e.key === 'ArrowLeft' ? -1 : 1;
121
+ const newIndex = (currentIndex + direction + tabs.length) % tabs.length;
122
+ const newTab = tabs[newIndex];
123
+ handleTabChange(newTab.slug);
124
+ // Focus will be handled by the tabIndex change
125
+ setTimeout(() => {
126
+ document.querySelector(`.${baseClass}__tab--active`)?.focus();
127
+ }, 0);
128
+ }
129
+ }, [baseClass, handleTabChange, tabs]);
130
+ const activeContent = tabContent[activeTabID];
131
+ // If there's only one tab (the default nav), render it without tab UI
132
+ if (tabs.length === 1) {
133
+ return /*#__PURE__*/_jsx(_Fragment, {
134
+ children: activeContent
135
+ });
136
+ }
137
+ return /*#__PURE__*/_jsx(SidebarTabsProvider, {
138
+ activeTabSlug: activeTabID,
139
+ reloadTabContent: reloadTabContent,
140
+ children: /*#__PURE__*/_jsxs("div", {
141
+ className: baseClass,
142
+ children: [/*#__PURE__*/_jsx("div", {
143
+ className: `${baseClass}__tabs`,
144
+ role: "tablist",
145
+ children: tabs.map((tab_0, index) => {
146
+ const isActive = tab_0.slug === activeTabID;
147
+ return /*#__PURE__*/_jsxs("button", {
148
+ "aria-selected": isActive,
149
+ className: `${baseClass}__tab ${isActive ? `${baseClass}__tab--active` : ''}`,
150
+ onClick: () => handleTabChange(tab_0.slug),
151
+ onKeyDown: e_0 => handleTabKeyDown(e_0, index),
152
+ onMouseEnter: () => setHoveredTab(tab_0.slug),
153
+ onMouseLeave: () => setHoveredTab(null),
154
+ role: "tab",
155
+ tabIndex: isActive ? 0 : -1,
156
+ type: "button",
157
+ children: [/*#__PURE__*/_jsx(Tooltip, {
158
+ className: `${baseClass}__tooltip`,
159
+ position: "bottom",
160
+ show: hoveredTab === tab_0.slug,
161
+ children: tab_0.label
162
+ }), /*#__PURE__*/_jsx("span", {
163
+ className: `${baseClass}__tab-icon`,
164
+ children: tab_0.icon
165
+ }), /*#__PURE__*/_jsx("span", {
166
+ className: `${baseClass}__tab-label`,
167
+ children: tab_0.label
168
+ })]
169
+ }, tab_0.slug);
170
+ })
171
+ }), /*#__PURE__*/_jsxs("div", {
172
+ className: `${baseClass}__content`,
173
+ role: "tabpanel",
174
+ children: [/*#__PURE__*/_jsx(DelayedSpinner, {
175
+ baseClass: baseClass,
176
+ delay: loadingDelay,
177
+ isLoading: loadingTab === activeTabID
178
+ }), tabs.map(tab_1 => {
179
+ const content = tabContent[tab_1.slug];
180
+ if (!content) {
181
+ return null;
182
+ }
183
+ const isActive_0 = tab_1.slug === activeTabID && loadingTab !== activeTabID;
184
+ return /*#__PURE__*/_jsx("div", {
185
+ style: isActive_0 ? undefined : {
186
+ display: 'none'
187
+ },
188
+ children: content
189
+ }, tab_1.slug);
190
+ })]
191
+ })]
192
+ })
193
+ });
194
+ };
195
+ //# sourceMappingURL=index.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.client.js","names":["DelayedSpinner","SidebarTabsProvider","Tooltip","usePreferences","useServerFunctions","PREFERENCE_KEYS","React","useCallback","useRef","useState","TabError","SidebarTabsClient","baseClass","initialActiveTabID","initialTabContents","loadingDelay","tabs","setPreference","serverFunction","activeTabID","setActiveTabID","tabContent","setTabContent","loadingTab","setLoadingTab","hoveredTab","setHoveredTab","loadingTabsRef","Set","tabContentRef","useEffect","current","prev","loadTabContent","tabSlug","revalidate","hasCachedContent","Boolean","has","add","result","name","args","newContent","component","error","errorMessage","Error","message","handleRetry","clearedContent","_jsx","onRetry","delete","reloadTabContent","handleTabChange","slug","NAV_SIDEBAR_ACTIVE_TAB","activeTab","tab","find","t","lazyLoadable","handleTabKeyDown","e","currentIndex","key","preventDefault","direction","newIndex","length","newTab","setTimeout","document","querySelector","focus","activeContent","_Fragment","activeTabSlug","_jsxs","className","role","map","index","isActive","onClick","onKeyDown","onMouseEnter","onMouseLeave","tabIndex","type","position","show","label","icon","delay","isLoading","content","style","undefined","display"],"sources":["../../../../src/elements/Nav/SidebarTabs/index.client.tsx"],"sourcesContent":["'use client'\n\nimport {\n DelayedSpinner,\n SidebarTabsProvider,\n Tooltip,\n usePreferences,\n useServerFunctions,\n} from '@payloadcms/ui'\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useRef, useState } from 'react'\n\nimport type { RenderTabServerFnArgs, RenderTabServerFnReturnType } from './renderTabServerFn.js'\n\nimport { TabError } from './TabError/index.js'\n\nexport type TabMetadata = {\n icon: React.ReactNode\n isDefaultActive?: boolean\n label: string\n /** Whether this tab can be loaded/revalidated via serverFunction */\n lazyLoadable?: boolean\n slug: string\n}\n\nexport type SidebarTabsClientProps = {\n baseClass: string\n initialActiveTabID: string\n initialTabContents: Record<string, React.ReactNode>\n /**\n * Delay before showing loading spinner (in ms), prevents flashing on fast loads\n * @default 200\n */\n loadingDelay?: number\n tabs: TabMetadata[]\n}\n\nexport const SidebarTabsClient: React.FC<SidebarTabsClientProps> = ({\n baseClass,\n initialActiveTabID,\n initialTabContents,\n loadingDelay = 200,\n tabs,\n}) => {\n const { setPreference } = usePreferences()\n const { serverFunction } = useServerFunctions()\n\n const [activeTabID, setActiveTabID] = useState(initialActiveTabID)\n const [tabContent, setTabContent] = useState<Record<string, React.ReactNode>>(initialTabContents)\n const [loadingTab, setLoadingTab] = useState<null | string>(null)\n const [hoveredTab, setHoveredTab] = useState<null | string>(null)\n const loadingTabsRef = useRef<Set<string>>(new Set())\n const tabContentRef = useRef(initialTabContents)\n\n // Update cached content when server provides new initialTabContents\n // This is needed because useState only uses initialValue on first mount\n React.useEffect(() => {\n tabContentRef.current = { ...tabContentRef.current, ...initialTabContents }\n setTabContent((prev) => ({ ...prev, ...initialTabContents }))\n }, [initialTabContents])\n\n const loadTabContent = useCallback(\n async (tabSlug: string, { revalidate = false }: { revalidate?: boolean } = {}) => {\n const hasCachedContent = Boolean(tabContentRef.current[tabSlug])\n\n // Skip if already loaded (unless revalidating) or currently loading\n if ((hasCachedContent && !revalidate) || loadingTabsRef.current.has(tabSlug)) {\n return\n }\n\n // Mark as loading - only show spinner if no cached content\n loadingTabsRef.current.add(tabSlug)\n if (!hasCachedContent) {\n setLoadingTab(tabSlug)\n }\n\n try {\n const result = (await serverFunction({\n name: 'render-tab',\n args: { tabSlug } as RenderTabServerFnArgs,\n })) as RenderTabServerFnReturnType\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: result.component,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } catch (error) {\n // On revalidate failure, keep showing cached content\n if (hasCachedContent && revalidate) {\n return\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n\n const handleRetry = () => {\n // Clear the error and retry loading\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n void loadTabContent(tabSlug)\n }\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: <TabError message={errorMessage} onRetry={handleRetry} />,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } finally {\n loadingTabsRef.current.delete(tabSlug)\n setLoadingTab(null)\n }\n },\n [serverFunction],\n )\n\n const reloadTabContent = useCallback(\n (tabSlug: string) => {\n // Clear cached content to force reload\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n\n void loadTabContent(tabSlug)\n },\n [loadTabContent],\n )\n\n const handleTabChange = useCallback(\n (slug: string) => {\n setActiveTabID(slug)\n void setPreference(PREFERENCE_KEYS.NAV_SIDEBAR_ACTIVE_TAB, { activeTab: slug })\n // Only revalidate tabs that can be loaded via serverFunction\n // Pre-rendered React elements (like default nav) can't be revalidated\n const tab = tabs.find((t) => t.slug === slug)\n void loadTabContent(slug, { revalidate: tab?.lazyLoadable ?? false })\n },\n [setPreference, loadTabContent, tabs],\n )\n\n const handleTabKeyDown = useCallback(\n (e: React.KeyboardEvent, currentIndex: number) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const direction = e.key === 'ArrowLeft' ? -1 : 1\n const newIndex = (currentIndex + direction + tabs.length) % tabs.length\n const newTab = tabs[newIndex]\n handleTabChange(newTab.slug)\n // Focus will be handled by the tabIndex change\n setTimeout(() => {\n document.querySelector<HTMLButtonElement>(`.${baseClass}__tab--active`)?.focus()\n }, 0)\n }\n },\n [baseClass, handleTabChange, tabs],\n )\n\n const activeContent = tabContent[activeTabID]\n\n // If there's only one tab (the default nav), render it without tab UI\n if (tabs.length === 1) {\n return <>{activeContent}</>\n }\n\n return (\n <SidebarTabsProvider activeTabSlug={activeTabID} reloadTabContent={reloadTabContent}>\n <div className={baseClass}>\n <div className={`${baseClass}__tabs`} role=\"tablist\">\n {tabs.map((tab, index) => {\n const isActive = tab.slug === activeTabID\n\n return (\n <button\n aria-selected={isActive}\n className={`${baseClass}__tab ${isActive ? `${baseClass}__tab--active` : ''}`}\n key={tab.slug}\n onClick={() => handleTabChange(tab.slug)}\n onKeyDown={(e) => handleTabKeyDown(e, index)}\n onMouseEnter={() => setHoveredTab(tab.slug)}\n onMouseLeave={() => setHoveredTab(null)}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n type=\"button\"\n >\n <Tooltip\n className={`${baseClass}__tooltip`}\n position=\"bottom\"\n show={hoveredTab === tab.slug}\n >\n {tab.label}\n </Tooltip>\n <span className={`${baseClass}__tab-icon`}>{tab.icon}</span>\n <span className={`${baseClass}__tab-label`}>{tab.label}</span>\n </button>\n )\n })}\n </div>\n <div className={`${baseClass}__content`} role=\"tabpanel\">\n <DelayedSpinner\n baseClass={baseClass}\n delay={loadingDelay}\n isLoading={loadingTab === activeTabID}\n />\n {tabs.map((tab) => {\n const content = tabContent[tab.slug]\n if (!content) {\n return null\n }\n const isActive = tab.slug === activeTabID && loadingTab !== activeTabID\n return (\n <div key={tab.slug} style={isActive ? undefined : { display: 'none' }}>\n {content}\n </div>\n )\n })}\n </div>\n </div>\n </SidebarTabsProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,80 @@
1
+ @layer payload-default {
2
+ .sidebar-tabs {
3
+ display: flex;
4
+ flex-direction: column;
5
+ width: 100%;
6
+ flex-grow: 1;
7
+ gap: var(--spacer-2-5);
8
+ }
9
+
10
+ .sidebar-tabs__tabs {
11
+ display: flex;
12
+ gap: 0;
13
+ background-color: var(--color-bg-secondary);
14
+ border-radius: var(--radius-medium);
15
+ width: 100%;
16
+ }
17
+
18
+ .sidebar-tabs__tab {
19
+ all: unset;
20
+ box-sizing: border-box;
21
+ display: flex;
22
+ flex: 1;
23
+ align-items: center;
24
+ justify-content: center;
25
+ height: var(--spacer-4);
26
+ padding: 0 var(--spacer-1);
27
+ cursor: pointer;
28
+ border-radius: var(--radius-medium);
29
+ border: var(--stroke-width-small) solid transparent;
30
+ background-color: transparent;
31
+ color: var(--color-icon-secondary);
32
+ transition:
33
+ background-color 0.15s ease,
34
+ border-color 0.15s ease,
35
+ color 0.15s ease;
36
+ position: relative;
37
+
38
+ &:hover {
39
+ color: var(--color-icon);
40
+ }
41
+ }
42
+
43
+ .sidebar-tabs__tab--active {
44
+ background-color: var(--color-bg);
45
+ border-color: var(--color-border);
46
+ color: var(--color-icon);
47
+ }
48
+
49
+ .sidebar-tabs__tab-icon {
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ transition: opacity 0.15s ease;
54
+ }
55
+
56
+ /* Visually hidden but still accessible for screen readers */
57
+ .sidebar-tabs__tab-label {
58
+ position: absolute;
59
+ width: 1px;
60
+ height: 1px;
61
+ padding: 0;
62
+ overflow: hidden;
63
+ clip: rect(0, 0, 0, 0);
64
+ white-space: nowrap;
65
+ border-width: 0;
66
+ }
67
+
68
+ .sidebar-tabs__content {
69
+ width: 100%;
70
+ flex-grow: 1;
71
+ position: relative;
72
+ }
73
+
74
+ .sidebar-tabs__loading {
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ min-height: calc(var(--spacer-6) * 2.5);
79
+ }
80
+ }
@@ -0,0 +1,17 @@
1
+ import type { NavPreferences, PayloadComponent, SidebarTab } from 'payload';
2
+ import React from 'react';
3
+ import type { NavProps } from '../index.js';
4
+ import './index.css';
5
+ type SidebarTabWithReactNode = {
6
+ components: {
7
+ Content: PayloadComponent | React.ReactNode;
8
+ Icon: PayloadComponent | React.ReactNode;
9
+ };
10
+ } & Omit<SidebarTab, 'components'>;
11
+ export type SidebarTabsProps = {
12
+ navPreferences: NavPreferences;
13
+ tabs: SidebarTabWithReactNode[];
14
+ } & NavProps;
15
+ export declare const SidebarTabs: React.FC<SidebarTabsProps>;
16
+ export {};
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/SidebarTabs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAI3E,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG3C,OAAO,aAAa,CAAA;AAEpB,KAAK,uBAAuB,GAAG;IAC7B,UAAU,EAAE;QACV,OAAO,EAAE,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAA;QAC3C,IAAI,EAAE,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAA;KACzC,CAAA;CACF,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;AAElC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,EAAE,cAAc,CAAA;IAC9B,IAAI,EAAE,uBAAuB,EAAE,CAAA;CAChC,GAAG,QAAQ,CAAA;AAIZ,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA4FlD,CAAA"}
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { getTranslation } from '@payloadcms/translations';
3
+ import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent';
4
+ import React from 'react';
5
+ import { SidebarTabsClient } from './index.client.js';
6
+ const baseClass = 'sidebar-tabs';
7
+ export const SidebarTabs = props => {
8
+ const {
9
+ documentSubViewType,
10
+ i18n,
11
+ locale,
12
+ navPreferences,
13
+ params,
14
+ payload,
15
+ permissions,
16
+ req,
17
+ searchParams,
18
+ tabs,
19
+ user,
20
+ viewType
21
+ } = props;
22
+ // Determine which tab should be active on initial load
23
+ // First try saved preference, then default tab, then first tab
24
+ const preferredTabSlug = navPreferences.activeTab || tabs.find(tab => tab.isDefaultActive)?.slug || tabs[0]?.slug;
25
+ // Verify the preferred tab actually exists, otherwise fall back to default or first tab
26
+ const activeTab = tabs.find(t => t.slug === preferredTabSlug) || tabs.find(tab => tab.isDefaultActive) || tabs[0];
27
+ const initialActiveTabID = activeTab?.slug || tabs[0]?.slug;
28
+ // Build initial tab contents
29
+ // Strategy: Pre-render tabs that are already React elements (can't be lazy-loaded),
30
+ // and only render the initially active tab if it's a CustomComponent (can be lazy-loaded)
31
+ const initialTabContents = {};
32
+ const renderComponent = component => {
33
+ // Check if component is already a React node (payload provided React component)
34
+ if (/*#__PURE__*/React.isValidElement(component)) {
35
+ return component;
36
+ } else {
37
+ // Otherwise render it as a CustomComponent
38
+ return RenderServerComponent({
39
+ clientProps: {
40
+ documentSubViewType,
41
+ viewType
42
+ },
43
+ Component: component,
44
+ importMap: payload.importMap,
45
+ serverProps: {
46
+ i18n,
47
+ locale,
48
+ params,
49
+ payload,
50
+ permissions,
51
+ req,
52
+ searchParams,
53
+ user
54
+ }
55
+ });
56
+ }
57
+ };
58
+ for (const tab of tabs) {
59
+ if (/*#__PURE__*/React.isValidElement(tab.components.Content)) {
60
+ initialTabContents[tab.slug] = tab.components.Content;
61
+ }
62
+ }
63
+ // If the active tab is a CustomComponent (lazy-loadable), render it now
64
+ if (activeTab && ! /*#__PURE__*/React.isValidElement(activeTab.components.Content)) {
65
+ initialTabContents[activeTab.slug] = renderComponent(activeTab.components.Content);
66
+ }
67
+ return /*#__PURE__*/_jsx(SidebarTabsClient, {
68
+ baseClass: baseClass,
69
+ initialActiveTabID: initialActiveTabID,
70
+ initialTabContents: initialTabContents,
71
+ tabs: tabs.map(tab => {
72
+ const labelText = tab.label ? getTranslation(tab.label, i18n) : tab.slug;
73
+ // CustomComponents can be lazy-loaded/revalidated, React elements cannot
74
+ const isLazyLoadable = ! /*#__PURE__*/React.isValidElement(tab.components.Content);
75
+ return {
76
+ slug: tab.slug,
77
+ icon: renderComponent(tab.components.Icon),
78
+ isDefaultActive: tab.isDefaultActive,
79
+ label: labelText,
80
+ lazyLoadable: isLazyLoadable
81
+ };
82
+ })
83
+ });
84
+ };
85
+ //# sourceMappingURL=index.js.map