@payloadcms/next 3.0.0-beta.78 → 3.0.0-beta.80

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 (264) hide show
  1. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts +3 -1
  2. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
  3. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +16 -3
  4. package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
  5. package/dist/elements/DocumentHeader/Tabs/getCustomViews.js +2 -2
  6. package/dist/elements/DocumentHeader/Tabs/getCustomViews.js.map +1 -1
  7. package/dist/elements/DocumentHeader/Tabs/getViewConfig.js +2 -2
  8. package/dist/elements/DocumentHeader/Tabs/getViewConfig.js.map +1 -1
  9. package/dist/elements/DocumentHeader/Tabs/index.d.ts +2 -2
  10. package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
  11. package/dist/elements/DocumentHeader/Tabs/index.js +27 -17
  12. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  13. package/dist/elements/DocumentHeader/Tabs/tabs/index.d.ts +2 -0
  14. package/dist/elements/DocumentHeader/Tabs/tabs/index.d.ts.map +1 -1
  15. package/dist/elements/DocumentHeader/Tabs/tabs/index.js +15 -15
  16. package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
  17. package/dist/elements/DocumentHeader/index.d.ts +2 -2
  18. package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
  19. package/dist/elements/DocumentHeader/index.js +2 -2
  20. package/dist/elements/DocumentHeader/index.js.map +1 -1
  21. package/dist/elements/EmailAndUsername/index.d.ts.map +1 -1
  22. package/dist/elements/EmailAndUsername/index.js +31 -27
  23. package/dist/elements/EmailAndUsername/index.js.map +1 -1
  24. package/dist/elements/LeaveWithoutSaving/index.d.ts.map +1 -1
  25. package/dist/elements/LeaveWithoutSaving/index.js +7 -0
  26. package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
  27. package/dist/elements/LeaveWithoutSaving/usePreventLeave.d.ts +2 -1
  28. package/dist/elements/LeaveWithoutSaving/usePreventLeave.d.ts.map +1 -1
  29. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +3 -1
  30. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
  31. package/dist/elements/Logo/index.d.ts.map +1 -1
  32. package/dist/elements/Logo/index.js +8 -5
  33. package/dist/elements/Logo/index.js.map +1 -1
  34. package/dist/elements/Nav/NavWrapper/index.d.ts.map +1 -1
  35. package/dist/elements/Nav/NavWrapper/index.js +4 -2
  36. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  37. package/dist/elements/Nav/NavWrapper/index.scss +4 -1
  38. package/dist/elements/Nav/index.client.d.ts.map +1 -1
  39. package/dist/elements/Nav/index.client.js +1 -1
  40. package/dist/elements/Nav/index.client.js.map +1 -1
  41. package/dist/elements/Nav/index.d.ts.map +1 -1
  42. package/dist/elements/Nav/index.js +21 -27
  43. package/dist/elements/Nav/index.js.map +1 -1
  44. package/dist/elements/Nav/index.scss +4 -1
  45. package/dist/layouts/Root/index.d.ts +5 -4
  46. package/dist/layouts/Root/index.d.ts.map +1 -1
  47. package/dist/layouts/Root/index.js +39 -14
  48. package/dist/layouts/Root/index.js.map +1 -1
  49. package/dist/prod/styles.css +1 -1
  50. package/dist/routes/rest/buildFormState.js +4 -4
  51. package/dist/routes/rest/buildFormState.js.map +1 -1
  52. package/dist/routes/rest/og/image.d.ts +2 -1
  53. package/dist/routes/rest/og/image.d.ts.map +1 -1
  54. package/dist/routes/rest/og/image.js +6 -2
  55. package/dist/routes/rest/og/image.js.map +1 -1
  56. package/dist/routes/rest/og/index.d.ts.map +1 -1
  57. package/dist/routes/rest/og/index.js +7 -3
  58. package/dist/routes/rest/og/index.js.map +1 -1
  59. package/dist/templates/Default/Wrapper/index.d.ts.map +1 -1
  60. package/dist/templates/Default/Wrapper/index.js +4 -2
  61. package/dist/templates/Default/Wrapper/index.js.map +1 -1
  62. package/dist/templates/Default/Wrapper/index.scss +36 -4
  63. package/dist/templates/Default/index.d.ts.map +1 -1
  64. package/dist/templates/Default/index.js +16 -23
  65. package/dist/templates/Default/index.js.map +1 -1
  66. package/dist/utilities/getPayloadHMR.d.ts.map +1 -1
  67. package/dist/utilities/getPayloadHMR.js +13 -1
  68. package/dist/utilities/getPayloadHMR.js.map +1 -1
  69. package/dist/utilities/initPage/index.d.ts +1 -1
  70. package/dist/utilities/initPage/index.d.ts.map +1 -1
  71. package/dist/utilities/initPage/index.js +3 -2
  72. package/dist/utilities/initPage/index.js.map +1 -1
  73. package/dist/utilities/initPage/types.d.ts +2 -1
  74. package/dist/utilities/initPage/types.d.ts.map +1 -1
  75. package/dist/utilities/initPage/types.js.map +1 -1
  76. package/dist/views/API/LocaleSelector/index.d.ts +2 -2
  77. package/dist/views/API/LocaleSelector/index.d.ts.map +1 -1
  78. package/dist/views/API/LocaleSelector/index.js +7 -5
  79. package/dist/views/API/LocaleSelector/index.js.map +1 -1
  80. package/dist/views/API/index.client.d.ts.map +1 -1
  81. package/dist/views/API/index.client.js +39 -33
  82. package/dist/views/API/index.client.js.map +1 -1
  83. package/dist/views/API/index.d.ts +2 -2
  84. package/dist/views/API/index.d.ts.map +1 -1
  85. package/dist/views/API/index.js.map +1 -1
  86. package/dist/views/Account/ToggleTheme/index.d.ts.map +1 -1
  87. package/dist/views/Account/ToggleTheme/index.js +18 -16
  88. package/dist/views/Account/ToggleTheme/index.js.map +1 -1
  89. package/dist/views/Account/index.d.ts.map +1 -1
  90. package/dist/views/Account/index.js +20 -22
  91. package/dist/views/Account/index.js.map +1 -1
  92. package/dist/views/CreateFirstUser/index.client.d.ts.map +1 -1
  93. package/dist/views/CreateFirstUser/index.client.js +10 -10
  94. package/dist/views/CreateFirstUser/index.client.js.map +1 -1
  95. package/dist/views/Dashboard/Default/index.d.ts.map +1 -1
  96. package/dist/views/Dashboard/Default/index.js +21 -27
  97. package/dist/views/Dashboard/Default/index.js.map +1 -1
  98. package/dist/views/Dashboard/index.d.ts.map +1 -1
  99. package/dist/views/Dashboard/index.js +23 -26
  100. package/dist/views/Dashboard/index.js.map +1 -1
  101. package/dist/views/Document/getCustomViewByKey.d.ts.map +1 -1
  102. package/dist/views/Document/getCustomViewByKey.js +1 -2
  103. package/dist/views/Document/getCustomViewByKey.js.map +1 -1
  104. package/dist/views/Document/getCustomViewByRoute.js +2 -2
  105. package/dist/views/Document/getCustomViewByRoute.js.map +1 -1
  106. package/dist/views/Document/getViewsFromConfig.d.ts +9 -4
  107. package/dist/views/Document/getViewsFromConfig.d.ts.map +1 -1
  108. package/dist/views/Document/getViewsFromConfig.js +111 -49
  109. package/dist/views/Document/getViewsFromConfig.js.map +1 -1
  110. package/dist/views/Document/index.d.ts.map +1 -1
  111. package/dist/views/Document/index.js +31 -31
  112. package/dist/views/Document/index.js.map +1 -1
  113. package/dist/views/Edit/Default/Auth/APIKey.d.ts.map +1 -1
  114. package/dist/views/Edit/Default/Auth/APIKey.js +15 -15
  115. package/dist/views/Edit/Default/Auth/APIKey.js.map +1 -1
  116. package/dist/views/Edit/Default/Auth/index.d.ts.map +1 -1
  117. package/dist/views/Edit/Default/Auth/index.js +25 -14
  118. package/dist/views/Edit/Default/Auth/index.js.map +1 -1
  119. package/dist/views/Edit/Default/SetDocumentStepNav/index.d.ts.map +1 -1
  120. package/dist/views/Edit/Default/SetDocumentStepNav/index.js +1 -1
  121. package/dist/views/Edit/Default/SetDocumentStepNav/index.js.map +1 -1
  122. package/dist/views/Edit/Default/index.d.ts.map +1 -1
  123. package/dist/views/Edit/Default/index.js +11 -15
  124. package/dist/views/Edit/Default/index.js.map +1 -1
  125. package/dist/views/Edit/index.client.d.ts.map +1 -1
  126. package/dist/views/Edit/index.client.js +11 -6
  127. package/dist/views/Edit/index.client.js.map +1 -1
  128. package/dist/views/Edit/index.d.ts +2 -2
  129. package/dist/views/Edit/index.d.ts.map +1 -1
  130. package/dist/views/Edit/index.js.map +1 -1
  131. package/dist/views/ForgotPassword/ForgotPasswordForm/index.d.ts.map +1 -1
  132. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +11 -7
  133. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
  134. package/dist/views/List/Default/index.d.ts.map +1 -1
  135. package/dist/views/List/Default/index.js +30 -19
  136. package/dist/views/List/Default/index.js.map +1 -1
  137. package/dist/views/List/index.d.ts.map +1 -1
  138. package/dist/views/List/index.js +47 -40
  139. package/dist/views/List/index.js.map +1 -1
  140. package/dist/views/List/meta.js +1 -1
  141. package/dist/views/List/meta.js.map +1 -1
  142. package/dist/views/LivePreview/Context/context.d.ts +1 -1
  143. package/dist/views/LivePreview/Context/context.d.ts.map +1 -1
  144. package/dist/views/LivePreview/Context/context.js.map +1 -1
  145. package/dist/views/LivePreview/Context/index.d.ts +3 -3
  146. package/dist/views/LivePreview/Context/index.d.ts.map +1 -1
  147. package/dist/views/LivePreview/Context/index.js.map +1 -1
  148. package/dist/views/LivePreview/index.client.d.ts +3 -3
  149. package/dist/views/LivePreview/index.client.d.ts.map +1 -1
  150. package/dist/views/LivePreview/index.client.js +84 -93
  151. package/dist/views/LivePreview/index.client.js.map +1 -1
  152. package/dist/views/LivePreview/index.d.ts +2 -2
  153. package/dist/views/LivePreview/index.d.ts.map +1 -1
  154. package/dist/views/LivePreview/index.js.map +1 -1
  155. package/dist/views/LivePreview/usePopupWindow.d.ts +2 -1
  156. package/dist/views/LivePreview/usePopupWindow.d.ts.map +1 -1
  157. package/dist/views/LivePreview/usePopupWindow.js +1 -1
  158. package/dist/views/LivePreview/usePopupWindow.js.map +1 -1
  159. package/dist/views/Login/LoginField/index.d.ts +3 -3
  160. package/dist/views/Login/LoginField/index.d.ts.map +1 -1
  161. package/dist/views/Login/LoginField/index.js +15 -12
  162. package/dist/views/Login/LoginField/index.js.map +1 -1
  163. package/dist/views/Login/LoginForm/index.d.ts.map +1 -1
  164. package/dist/views/Login/LoginForm/index.js +6 -4
  165. package/dist/views/Login/LoginForm/index.js.map +1 -1
  166. package/dist/views/Login/index.d.ts.map +1 -1
  167. package/dist/views/Login/index.js +21 -27
  168. package/dist/views/Login/index.js.map +1 -1
  169. package/dist/views/NotFound/index.client.d.ts.map +1 -1
  170. package/dist/views/NotFound/index.client.js +1 -1
  171. package/dist/views/NotFound/index.client.js.map +1 -1
  172. package/dist/views/NotFound/index.d.ts +4 -3
  173. package/dist/views/NotFound/index.d.ts.map +1 -1
  174. package/dist/views/NotFound/index.js +2 -1
  175. package/dist/views/NotFound/index.js.map +1 -1
  176. package/dist/views/ResetPassword/index.client.d.ts +1 -1
  177. package/dist/views/ResetPassword/index.client.d.ts.map +1 -1
  178. package/dist/views/ResetPassword/index.client.js +9 -6
  179. package/dist/views/ResetPassword/index.client.js.map +1 -1
  180. package/dist/views/Root/getCustomViewByRoute.d.ts +3 -2
  181. package/dist/views/Root/getCustomViewByRoute.d.ts.map +1 -1
  182. package/dist/views/Root/getCustomViewByRoute.js +13 -10
  183. package/dist/views/Root/getCustomViewByRoute.js.map +1 -1
  184. package/dist/views/Root/getViewFromConfig.d.ts +10 -4
  185. package/dist/views/Root/getViewFromConfig.d.ts.map +1 -1
  186. package/dist/views/Root/getViewFromConfig.js +26 -9
  187. package/dist/views/Root/getViewFromConfig.js.map +1 -1
  188. package/dist/views/Root/index.d.ts +6 -5
  189. package/dist/views/Root/index.d.ts.map +1 -1
  190. package/dist/views/Root/index.js +14 -6
  191. package/dist/views/Root/index.js.map +1 -1
  192. package/dist/views/Unauthorized/index.d.ts +2 -2
  193. package/dist/views/Unauthorized/index.d.ts.map +1 -1
  194. package/dist/views/Unauthorized/index.js.map +1 -1
  195. package/dist/views/Version/Default/SetStepNav.d.ts +8 -8
  196. package/dist/views/Version/Default/SetStepNav.d.ts.map +1 -1
  197. package/dist/views/Version/Default/SetStepNav.js +7 -7
  198. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  199. package/dist/views/Version/Default/index.d.ts.map +1 -1
  200. package/dist/views/Version/Default/index.js +10 -15
  201. package/dist/views/Version/Default/index.js.map +1 -1
  202. package/dist/views/Version/Default/types.d.ts +7 -7
  203. package/dist/views/Version/Default/types.d.ts.map +1 -1
  204. package/dist/views/Version/Default/types.js.map +1 -1
  205. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts +2 -2
  206. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
  207. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +20 -20
  208. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
  209. package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.d.ts +2 -2
  210. package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.d.ts.map +1 -1
  211. package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.js +4 -4
  212. package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.js.map +1 -1
  213. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts +3 -2
  214. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts.map +1 -1
  215. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +3 -3
  216. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
  217. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts +3 -5
  218. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts.map +1 -1
  219. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +1 -1
  220. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
  221. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts +3 -5
  222. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts.map +1 -1
  223. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +2 -2
  224. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
  225. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts +3 -2
  226. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts.map +1 -1
  227. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +1 -1
  228. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
  229. package/dist/views/Version/RenderFieldsToDiff/fields/index.d.ts +21 -28
  230. package/dist/views/Version/RenderFieldsToDiff/fields/index.d.ts.map +1 -1
  231. package/dist/views/Version/RenderFieldsToDiff/fields/index.js +1 -1
  232. package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -1
  233. package/dist/views/Version/RenderFieldsToDiff/fields/types.d.ts +15 -15
  234. package/dist/views/Version/RenderFieldsToDiff/fields/types.d.ts.map +1 -1
  235. package/dist/views/Version/RenderFieldsToDiff/fields/types.js.map +1 -1
  236. package/dist/views/Version/RenderFieldsToDiff/index.d.ts.map +1 -1
  237. package/dist/views/Version/RenderFieldsToDiff/index.js +12 -8
  238. package/dist/views/Version/RenderFieldsToDiff/index.js.map +1 -1
  239. package/dist/views/Version/RenderFieldsToDiff/types.d.ts +9 -9
  240. package/dist/views/Version/RenderFieldsToDiff/types.d.ts.map +1 -1
  241. package/dist/views/Version/RenderFieldsToDiff/types.js.map +1 -1
  242. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  243. package/dist/views/Version/Restore/index.js +1 -1
  244. package/dist/views/Version/Restore/index.js.map +1 -1
  245. package/dist/views/Version/SelectComparison/index.d.ts.map +1 -1
  246. package/dist/views/Version/SelectComparison/index.js +1 -1
  247. package/dist/views/Version/SelectComparison/index.js.map +1 -1
  248. package/dist/views/Version/index.d.ts +2 -2
  249. package/dist/views/Version/index.d.ts.map +1 -1
  250. package/dist/views/Version/index.js.map +1 -1
  251. package/dist/views/Versions/buildColumns.d.ts.map +1 -1
  252. package/dist/views/Versions/buildColumns.js +40 -16
  253. package/dist/views/Versions/buildColumns.js.map +1 -1
  254. package/dist/views/Versions/cells/CreatedAt/index.d.ts.map +1 -1
  255. package/dist/views/Versions/cells/CreatedAt/index.js +1 -1
  256. package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -1
  257. package/dist/views/Versions/index.client.d.ts +4 -4
  258. package/dist/views/Versions/index.client.d.ts.map +1 -1
  259. package/dist/views/Versions/index.client.js +8 -6
  260. package/dist/views/Versions/index.client.js.map +1 -1
  261. package/dist/views/Versions/index.d.ts +2 -2
  262. package/dist/views/Versions/index.d.ts.map +1 -1
  263. package/dist/views/Versions/index.js.map +1 -1
  264. package/package.json +7 -7
@@ -61,6 +61,7 @@ const Component = ({ isActive, onCancel, onConfirm })=>{
61
61
  });
62
62
  };
63
63
  export const LeaveWithoutSaving = ()=>{
64
+ const { closeModal } = useModal();
64
65
  const modified = useFormModified();
65
66
  const { user } = useAuth();
66
67
  const [show, setShow] = React.useState(false);
@@ -69,8 +70,14 @@ export const LeaveWithoutSaving = ()=>{
69
70
  const onPrevent = useCallback(()=>{
70
71
  setShow(true);
71
72
  }, []);
73
+ const handleAccept = useCallback(()=>{
74
+ closeModal(modalSlug);
75
+ }, [
76
+ closeModal
77
+ ]);
72
78
  usePreventLeave({
73
79
  hasAccepted,
80
+ onAccept: handleAccept,
74
81
  onPrevent,
75
82
  prevent
76
83
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport { Button, Modal, useAuth, useFormModified, useModal, useTranslation } from '@payloadcms/ui'\nimport React, { useCallback, useEffect } from 'react'\n\nimport './index.scss'\nimport { usePreventLeave } from './usePreventLeave.js'\n\nconst modalSlug = 'leave-without-saving'\n\nconst baseClass = 'leave-without-saving'\n\nconst Component: React.FC<{\n isActive: boolean\n onCancel: () => void\n onConfirm: () => void\n}> = ({ isActive, onCancel, onConfirm }) => {\n const { closeModal, modalState, openModal } = useModal()\n const { t } = useTranslation()\n\n // Manually check for modal state as 'esc' key will not trigger the nav inactivity\n // useEffect(() => {\n // if (!modalState?.[modalSlug]?.isOpen && isActive) {\n // onCancel()\n // }\n // }, [modalState, isActive, onCancel])\n\n useEffect(() => {\n if (isActive) openModal(modalSlug)\n else closeModal(modalSlug)\n }, [isActive, openModal, closeModal])\n\n return (\n <Modal className={baseClass} onClose={onCancel} slug={modalSlug}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{t('general:leaveWithoutSaving')}</h1>\n <p>{t('general:changesNotSaved')}</p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button buttonStyle=\"secondary\" onClick={onCancel} size=\"large\">\n {t('general:stayOnThisPage')}\n </Button>\n <Button onClick={onConfirm} size=\"large\">\n {t('general:leaveAnyway')}\n </Button>\n </div>\n </div>\n </Modal>\n )\n}\n\nexport const LeaveWithoutSaving: React.FC = () => {\n const modified = useFormModified()\n const { user } = useAuth()\n const [show, setShow] = React.useState(false)\n const [hasAccepted, setHasAccepted] = React.useState(false)\n\n const prevent = Boolean(modified && user)\n\n const onPrevent = useCallback(() => {\n setShow(true)\n }, [])\n\n usePreventLeave({ hasAccepted, onPrevent, prevent })\n\n return (\n <Component\n isActive={show}\n onCancel={() => {\n setShow(false)\n }}\n onConfirm={() => {\n setHasAccepted(true)\n }}\n />\n )\n}\n"],"names":["Button","Modal","useAuth","useFormModified","useModal","useTranslation","React","useCallback","useEffect","usePreventLeave","modalSlug","baseClass","Component","isActive","onCancel","onConfirm","closeModal","modalState","openModal","t","className","onClose","slug","div","h1","p","buttonStyle","onClick","size","LeaveWithoutSaving","modified","user","show","setShow","useState","hasAccepted","setHasAccepted","prevent","Boolean","onPrevent"],"mappings":"AAAA;;AACA,SAASA,MAAM,EAAEC,KAAK,EAAEC,OAAO,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,iBAAgB;AAClG,OAAOC,SAASC,WAAW,EAAEC,SAAS,QAAQ,QAAO;AAGrD,SAASC,eAAe,QAAQ,uBAAsB;AAEtD,MAAMC,YAAY;AAElB,MAAMC,YAAY;AAElB,MAAMC,YAID,CAAC,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,EAAE;IACrC,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGd;IAC9C,MAAM,EAAEe,CAAC,EAAE,GAAGd;IAEd,kFAAkF;IAClF,oBAAoB;IACpB,wDAAwD;IACxD,iBAAiB;IACjB,MAAM;IACN,uCAAuC;IAEvCG,UAAU;QACR,IAAIK,UAAUK,UAAUR;aACnBM,WAAWN;IAClB,GAAG;QAACG;QAAUK;QAAWF;KAAW;IAEpC,qBACE,KAACf;QAAMmB,WAAWT;QAAWU,SAASP;QAAUQ,MAAMZ;kBACpD,cAAA,MAACa;YAAIH,WAAW,CAAC,EAAET,UAAU,SAAS,CAAC;;8BACrC,MAACY;oBAAIH,WAAW,CAAC,EAAET,UAAU,SAAS,CAAC;;sCACrC,KAACa;sCAAIL,EAAE;;sCACP,KAACM;sCAAGN,EAAE;;;;8BAER,MAACI;oBAAIH,WAAW,CAAC,EAAET,UAAU,UAAU,CAAC;;sCACtC,KAACX;4BAAO0B,aAAY;4BAAYC,SAASb;4BAAUc,MAAK;sCACrDT,EAAE;;sCAEL,KAACnB;4BAAO2B,SAASZ;4BAAWa,MAAK;sCAC9BT,EAAE;;;;;;;AAMf;AAEA,OAAO,MAAMU,qBAA+B;IAC1C,MAAMC,WAAW3B;IACjB,MAAM,EAAE4B,IAAI,EAAE,GAAG7B;IACjB,MAAM,CAAC8B,MAAMC,QAAQ,GAAG3B,MAAM4B,QAAQ,CAAC;IACvC,MAAM,CAACC,aAAaC,eAAe,GAAG9B,MAAM4B,QAAQ,CAAC;IAErD,MAAMG,UAAUC,QAAQR,YAAYC;IAEpC,MAAMQ,YAAYhC,YAAY;QAC5B0B,QAAQ;IACV,GAAG,EAAE;IAELxB,gBAAgB;QAAE0B;QAAaI;QAAWF;IAAQ;IAElD,qBACE,KAACzB;QACCC,UAAUmB;QACVlB,UAAU;YACRmB,QAAQ;QACV;QACAlB,WAAW;YACTqB,eAAe;QACjB;;AAGN,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport { Button, Modal, useAuth, useFormModified, useModal, useTranslation } from '@payloadcms/ui'\nimport React, { useCallback, useEffect } from 'react'\n\nimport './index.scss'\nimport { usePreventLeave } from './usePreventLeave.js'\n\nconst modalSlug = 'leave-without-saving'\n\nconst baseClass = 'leave-without-saving'\n\nconst Component: React.FC<{\n isActive: boolean\n onCancel: () => void\n onConfirm: () => void\n}> = ({ isActive, onCancel, onConfirm }) => {\n const { closeModal, modalState, openModal } = useModal()\n const { t } = useTranslation()\n\n // Manually check for modal state as 'esc' key will not trigger the nav inactivity\n // useEffect(() => {\n // if (!modalState?.[modalSlug]?.isOpen && isActive) {\n // onCancel()\n // }\n // }, [modalState, isActive, onCancel])\n\n useEffect(() => {\n if (isActive) openModal(modalSlug)\n else closeModal(modalSlug)\n }, [isActive, openModal, closeModal])\n\n return (\n <Modal className={baseClass} onClose={onCancel} slug={modalSlug}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{t('general:leaveWithoutSaving')}</h1>\n <p>{t('general:changesNotSaved')}</p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button buttonStyle=\"secondary\" onClick={onCancel} size=\"large\">\n {t('general:stayOnThisPage')}\n </Button>\n <Button onClick={onConfirm} size=\"large\">\n {t('general:leaveAnyway')}\n </Button>\n </div>\n </div>\n </Modal>\n )\n}\n\nexport const LeaveWithoutSaving: React.FC = () => {\n const { closeModal } = useModal()\n const modified = useFormModified()\n const { user } = useAuth()\n const [show, setShow] = React.useState(false)\n const [hasAccepted, setHasAccepted] = React.useState(false)\n\n const prevent = Boolean(modified && user)\n\n const onPrevent = useCallback(() => {\n setShow(true)\n }, [])\n\n const handleAccept = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal])\n\n usePreventLeave({ hasAccepted, onAccept: handleAccept, onPrevent, prevent })\n\n return (\n <Component\n isActive={show}\n onCancel={() => {\n setShow(false)\n }}\n onConfirm={() => {\n setHasAccepted(true)\n }}\n />\n )\n}\n"],"names":["Button","Modal","useAuth","useFormModified","useModal","useTranslation","React","useCallback","useEffect","usePreventLeave","modalSlug","baseClass","Component","isActive","onCancel","onConfirm","closeModal","modalState","openModal","t","className","onClose","slug","div","h1","p","buttonStyle","onClick","size","LeaveWithoutSaving","modified","user","show","setShow","useState","hasAccepted","setHasAccepted","prevent","Boolean","onPrevent","handleAccept","onAccept"],"mappings":"AAAA;;AACA,SAASA,MAAM,EAAEC,KAAK,EAAEC,OAAO,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,iBAAgB;AAClG,OAAOC,SAASC,WAAW,EAAEC,SAAS,QAAQ,QAAO;AAGrD,SAASC,eAAe,QAAQ,uBAAsB;AAEtD,MAAMC,YAAY;AAElB,MAAMC,YAAY;AAElB,MAAMC,YAID,CAAC,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,EAAE;IACrC,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGd;IAC9C,MAAM,EAAEe,CAAC,EAAE,GAAGd;IAEd,kFAAkF;IAClF,oBAAoB;IACpB,wDAAwD;IACxD,iBAAiB;IACjB,MAAM;IACN,uCAAuC;IAEvCG,UAAU;QACR,IAAIK,UAAUK,UAAUR;aACnBM,WAAWN;IAClB,GAAG;QAACG;QAAUK;QAAWF;KAAW;IAEpC,qBACE,KAACf;QAAMmB,WAAWT;QAAWU,SAASP;QAAUQ,MAAMZ;kBACpD,cAAA,MAACa;YAAIH,WAAW,CAAC,EAAET,UAAU,SAAS,CAAC;;8BACrC,MAACY;oBAAIH,WAAW,CAAC,EAAET,UAAU,SAAS,CAAC;;sCACrC,KAACa;sCAAIL,EAAE;;sCACP,KAACM;sCAAGN,EAAE;;;;8BAER,MAACI;oBAAIH,WAAW,CAAC,EAAET,UAAU,UAAU,CAAC;;sCACtC,KAACX;4BAAO0B,aAAY;4BAAYC,SAASb;4BAAUc,MAAK;sCACrDT,EAAE;;sCAEL,KAACnB;4BAAO2B,SAASZ;4BAAWa,MAAK;sCAC9BT,EAAE;;;;;;;AAMf;AAEA,OAAO,MAAMU,qBAA+B;IAC1C,MAAM,EAAEb,UAAU,EAAE,GAAGZ;IACvB,MAAM0B,WAAW3B;IACjB,MAAM,EAAE4B,IAAI,EAAE,GAAG7B;IACjB,MAAM,CAAC8B,MAAMC,QAAQ,GAAG3B,MAAM4B,QAAQ,CAAC;IACvC,MAAM,CAACC,aAAaC,eAAe,GAAG9B,MAAM4B,QAAQ,CAAC;IAErD,MAAMG,UAAUC,QAAQR,YAAYC;IAEpC,MAAMQ,YAAYhC,YAAY;QAC5B0B,QAAQ;IACV,GAAG,EAAE;IAEL,MAAMO,eAAejC,YAAY;QAC/BS,WAAWN;IACb,GAAG;QAACM;KAAW;IAEfP,gBAAgB;QAAE0B;QAAaM,UAAUD;QAAcD;QAAWF;IAAQ;IAE1E,qBACE,KAACzB;QACCC,UAAUmB;QACVlB,UAAU;YACRmB,QAAQ;QACV;QACAlB,WAAW;YACTqB,eAAe;QACjB;;AAGN,EAAC"}
@@ -1,7 +1,8 @@
1
1
  export declare const useBeforeUnload: (enabled?: (() => boolean) | boolean, message?: string) => void;
2
- export declare const usePreventLeave: ({ hasAccepted, message, onPrevent, prevent, }: {
2
+ export declare const usePreventLeave: ({ hasAccepted, message, onAccept, onPrevent, prevent, }: {
3
3
  hasAccepted: boolean;
4
4
  message?: string;
5
+ onAccept?: () => void;
5
6
  onPrevent?: () => void;
6
7
  prevent: boolean;
7
8
  }) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"usePreventLeave.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"names":[],"mappings":"AAyBA,eAAO,MAAM,eAAe,aAAa,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,YAAmB,MAAM,SA6B1F,CAAA;AAED,eAAO,MAAM,eAAe,kDAKzB;IACD,WAAW,EAAE,OAAO,CAAA;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,SA+EA,CAAA"}
1
+ {"version":3,"file":"usePreventLeave.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"names":[],"mappings":"AAyBA,eAAO,MAAM,eAAe,aAAa,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,YAAmB,MAAM,SA6B1F,CAAA;AAED,eAAO,MAAM,eAAe,4DAMzB;IACD,WAAW,EAAE,OAAO,CAAA;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,SAgFA,CAAA"}
@@ -40,7 +40,7 @@ export const useBeforeUnload = (enabled = true, message)=>{
40
40
  handler
41
41
  ]);
42
42
  };
43
- export const usePreventLeave = ({ hasAccepted = false, message = 'Are you sure want to leave this page?', onPrevent, prevent = true })=>{
43
+ export const usePreventLeave = ({ hasAccepted = false, message = 'Are you sure want to leave this page?', onAccept, onPrevent, prevent = true })=>{
44
44
  // check when page is about to be reloaded
45
45
  useBeforeUnload(prevent, message);
46
46
  const router = useRouter();
@@ -103,10 +103,12 @@ export const usePreventLeave = ({ hasAccepted = false, message = 'Are you sure w
103
103
  ]);
104
104
  useEffect(()=>{
105
105
  if (hasAccepted && cancelledURL.current) {
106
+ if (onAccept) onAccept();
106
107
  router.push(cancelledURL.current);
107
108
  }
108
109
  }, [
109
110
  hasAccepted,
111
+ onAccept,
110
112
  router
111
113
  ]);
112
114
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: T | null,\n ...args: [string, Function | null, ...any] | Parameters<T['addEventListener']>\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>))\n }\n}\n\nfunction off<T extends Document | EventTarget | HTMLElement | Window>(\n obj: T | null,\n ...args: [string, Function | null, ...any] | Parameters<T['removeEventListener']>\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>))\n }\n}\n\nexport const useBeforeUnload = (enabled: (() => boolean) | boolean = true, message?: string) => {\n const handler = useCallback(\n (event: BeforeUnloadEvent) => {\n const finalEnabled = typeof enabled === 'function' ? enabled() : true\n\n if (!finalEnabled) {\n return\n }\n\n event.preventDefault()\n\n if (message) {\n event.returnValue = message\n }\n\n return message\n },\n [enabled, message],\n )\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n on(window, 'beforeunload', handler)\n\n return () => off(window, 'beforeunload', handler)\n }, [enabled, handler])\n}\n\nexport const usePreventLeave = ({\n hasAccepted = false,\n message = 'Are you sure want to leave this page?',\n onPrevent,\n prevent = true,\n}: {\n hasAccepted: boolean\n // if no `onPrevent` is provided, the message will be displayed in a confirm dialog\n message?: string\n // to use a custom confirmation dialog, provide a function that returns a boolean\n onPrevent?: () => void\n prevent: boolean\n}) => {\n // check when page is about to be reloaded\n useBeforeUnload(prevent, message)\n\n const router = useRouter()\n const cancelledURL = useRef<string>('')\n\n // check when page is about to be changed\n useEffect(() => {\n function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string) {\n const currentUrlObj = new URL(currentUrl)\n const newUrlObj = new URL(newUrl)\n // Compare hostname, pathname, and search parameters\n if (\n currentUrlObj.hostname === newUrlObj.hostname &&\n currentUrlObj.pathname === newUrlObj.pathname &&\n currentUrlObj.search === newUrlObj.search\n ) {\n // Check if the new URL is just an anchor of the current URL page\n const currentHash = currentUrlObj.hash\n const newHash = newUrlObj.hash\n return (\n currentHash !== newHash &&\n currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '')\n )\n }\n return false\n }\n\n function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null {\n while (element && element.tagName.toLowerCase() !== 'a') {\n element = element.parentElement\n }\n return element as HTMLAnchorElement\n }\n function handleClick(event: MouseEvent) {\n try {\n const target = event.target as HTMLElement\n const anchor = findClosestAnchor(target)\n if (anchor) {\n const currentUrl = window.location.href\n const newUrl = anchor.href\n const isAnchor = isAnchorOfCurrentUrl(currentUrl, newUrl)\n const isDownloadLink = anchor.download !== ''\n\n const isPageLeaving = !(newUrl === currentUrl || isAnchor || isDownloadLink)\n\n if (isPageLeaving && prevent && (!onPrevent ? !window.confirm(message) : true)) {\n // Keep a reference of the href\n cancelledURL.current = newUrl\n\n // Cancel the route change\n event.preventDefault()\n event.stopPropagation()\n\n if (typeof onPrevent === 'function') {\n onPrevent()\n }\n }\n }\n } catch (err) {\n alert(err)\n }\n }\n\n // Add the global click event listener\n document.addEventListener('click', handleClick, true)\n\n // Clean up the global click event listener when the component is unmounted\n return () => {\n document.removeEventListener('click', handleClick, true)\n }\n }, [onPrevent, prevent, message])\n\n useEffect(() => {\n if (hasAccepted && cancelledURL.current) {\n router.push(cancelledURL.current)\n }\n }, [hasAccepted, router])\n}\n"],"names":["useRouter","useCallback","useEffect","useRef","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","enabled","message","handler","event","finalEnabled","preventDefault","returnValue","window","usePreventLeave","hasAccepted","onPrevent","prevent","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isPageLeaving","confirm","current","stopPropagation","err","alert","document","push"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: T | null,\n ...args: [string, Function | null, ...any] | Parameters<T['addEventListener']>\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>))\n }\n}\n\nfunction off<T extends Document | EventTarget | HTMLElement | Window>(\n obj: T | null,\n ...args: [string, Function | null, ...any] | Parameters<T['removeEventListener']>\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>))\n }\n}\n\nexport const useBeforeUnload = (enabled: (() => boolean) | boolean = true, message?: string) => {\n const handler = useCallback(\n (event: BeforeUnloadEvent) => {\n const finalEnabled = typeof enabled === 'function' ? enabled() : true\n\n if (!finalEnabled) {\n return\n }\n\n event.preventDefault()\n\n if (message) {\n event.returnValue = message\n }\n\n return message\n },\n [enabled, message],\n )\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n on(window, 'beforeunload', handler)\n\n return () => off(window, 'beforeunload', handler)\n }, [enabled, handler])\n}\n\nexport const usePreventLeave = ({\n hasAccepted = false,\n message = 'Are you sure want to leave this page?',\n onAccept,\n onPrevent,\n prevent = true,\n}: {\n hasAccepted: boolean\n // if no `onPrevent` is provided, the message will be displayed in a confirm dialog\n message?: string\n onAccept?: () => void\n // to use a custom confirmation dialog, provide a function that returns a boolean\n onPrevent?: () => void\n prevent: boolean\n}) => {\n // check when page is about to be reloaded\n useBeforeUnload(prevent, message)\n\n const router = useRouter()\n const cancelledURL = useRef<string>('')\n\n // check when page is about to be changed\n useEffect(() => {\n function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string) {\n const currentUrlObj = new URL(currentUrl)\n const newUrlObj = new URL(newUrl)\n // Compare hostname, pathname, and search parameters\n if (\n currentUrlObj.hostname === newUrlObj.hostname &&\n currentUrlObj.pathname === newUrlObj.pathname &&\n currentUrlObj.search === newUrlObj.search\n ) {\n // Check if the new URL is just an anchor of the current URL page\n const currentHash = currentUrlObj.hash\n const newHash = newUrlObj.hash\n return (\n currentHash !== newHash &&\n currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '')\n )\n }\n return false\n }\n\n function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null {\n while (element && element.tagName.toLowerCase() !== 'a') {\n element = element.parentElement\n }\n return element as HTMLAnchorElement\n }\n function handleClick(event: MouseEvent) {\n try {\n const target = event.target as HTMLElement\n const anchor = findClosestAnchor(target)\n if (anchor) {\n const currentUrl = window.location.href\n const newUrl = anchor.href\n const isAnchor = isAnchorOfCurrentUrl(currentUrl, newUrl)\n const isDownloadLink = anchor.download !== ''\n\n const isPageLeaving = !(newUrl === currentUrl || isAnchor || isDownloadLink)\n\n if (isPageLeaving && prevent && (!onPrevent ? !window.confirm(message) : true)) {\n // Keep a reference of the href\n cancelledURL.current = newUrl\n\n // Cancel the route change\n event.preventDefault()\n event.stopPropagation()\n\n if (typeof onPrevent === 'function') {\n onPrevent()\n }\n }\n }\n } catch (err) {\n alert(err)\n }\n }\n\n // Add the global click event listener\n document.addEventListener('click', handleClick, true)\n\n // Clean up the global click event listener when the component is unmounted\n return () => {\n document.removeEventListener('click', handleClick, true)\n }\n }, [onPrevent, prevent, message])\n\n useEffect(() => {\n if (hasAccepted && cancelledURL.current) {\n if (onAccept) onAccept()\n router.push(cancelledURL.current)\n }\n }, [hasAccepted, onAccept, router])\n}\n"],"names":["useRouter","useCallback","useEffect","useRef","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","enabled","message","handler","event","finalEnabled","preventDefault","returnValue","window","usePreventLeave","hasAccepted","onAccept","onPrevent","prevent","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isPageLeaving","confirm","current","stopPropagation","err","alert","document","push"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Logo/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA4BtC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Logo/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA6BtC,CAAA"}
@@ -1,15 +1,14 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { PayloadLogo, RenderCustomComponent } from '@payloadcms/ui/shared';
2
+ import { PayloadLogo, RenderComponent, getCreateMappedComponent } from '@payloadcms/ui/shared';
3
3
  import React from 'react';
4
4
  export const Logo = (props)=>{
5
5
  const { i18n, locale, params, payload, permissions, searchParams, user } = props;
6
6
  const { admin: { components: { graphics: { Logo: CustomLogo } = {
7
7
  Logo: undefined
8
8
  } } = {} } = {} } = payload.config;
9
- return /*#__PURE__*/ _jsx(RenderCustomComponent, {
10
- CustomComponent: CustomLogo,
11
- DefaultComponent: PayloadLogo,
12
- serverOnlyProps: {
9
+ const createMappedComponent = getCreateMappedComponent({
10
+ importMap: payload.importMap,
11
+ serverProps: {
13
12
  i18n,
14
13
  locale,
15
14
  params,
@@ -19,6 +18,10 @@ export const Logo = (props)=>{
19
18
  user
20
19
  }
21
20
  });
21
+ const mappedCustomLogo = createMappedComponent(CustomLogo, undefined, PayloadLogo, 'CustomLogo');
22
+ return /*#__PURE__*/ _jsx(RenderComponent, {
23
+ mappedComponent: mappedCustomLogo
24
+ });
22
25
  };
23
26
 
24
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Logo/index.tsx"],"sourcesContent":["import type { ServerProps } from 'payload'\n\nimport { PayloadLogo, RenderCustomComponent } from '@payloadcms/ui/shared'\nimport React from 'react'\n\nexport const Logo: React.FC<ServerProps> = (props) => {\n const { i18n, locale, params, payload, permissions, searchParams, user } = props\n\n const {\n admin: {\n components: {\n graphics: { Logo: CustomLogo } = {\n Logo: undefined,\n },\n } = {},\n } = {},\n } = payload.config\n\n return (\n <RenderCustomComponent\n CustomComponent={CustomLogo}\n DefaultComponent={PayloadLogo}\n serverOnlyProps={{\n i18n,\n locale,\n params,\n payload,\n permissions,\n searchParams,\n user,\n }}\n />\n )\n}\n"],"names":["PayloadLogo","RenderCustomComponent","React","Logo","props","i18n","locale","params","payload","permissions","searchParams","user","admin","components","graphics","CustomLogo","undefined","config","CustomComponent","DefaultComponent","serverOnlyProps"],"mappings":";AAEA,SAASA,WAAW,EAAEC,qBAAqB,QAAQ,wBAAuB;AAC1E,OAAOC,WAAW,QAAO;AAEzB,OAAO,MAAMC,OAA8B,CAACC;IAC1C,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAEC,WAAW,EAAEC,YAAY,EAAEC,IAAI,EAAE,GAAGP;IAE3E,MAAM,EACJQ,OAAO,EACLC,YAAY,EACVC,UAAU,EAAEX,MAAMY,UAAU,EAAE,GAAG;QAC/BZ,MAAMa;IACR,CAAC,EACF,GAAG,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EACP,GAAGR,QAAQS,MAAM;IAElB,qBACE,KAAChB;QACCiB,iBAAiBH;QACjBI,kBAAkBnB;QAClBoB,iBAAiB;YACff;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;;AAGN,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/Logo/index.tsx"],"sourcesContent":["import type { ServerProps } from 'payload'\n\nimport { PayloadLogo, RenderComponent, getCreateMappedComponent } from '@payloadcms/ui/shared'\nimport React from 'react'\n\nexport const Logo: React.FC<ServerProps> = (props) => {\n const { i18n, locale, params, payload, permissions, searchParams, user } = props\n\n const {\n admin: {\n components: {\n graphics: { Logo: CustomLogo } = {\n Logo: undefined,\n },\n } = {},\n } = {},\n } = payload.config\n\n const createMappedComponent = getCreateMappedComponent({\n importMap: payload.importMap,\n serverProps: {\n i18n,\n locale,\n params,\n payload,\n permissions,\n searchParams,\n user,\n },\n })\n\n const mappedCustomLogo = createMappedComponent(CustomLogo, undefined, PayloadLogo, 'CustomLogo')\n\n return <RenderComponent mappedComponent={mappedCustomLogo} />\n}\n"],"names":["PayloadLogo","RenderComponent","getCreateMappedComponent","React","Logo","props","i18n","locale","params","payload","permissions","searchParams","user","admin","components","graphics","CustomLogo","undefined","config","createMappedComponent","importMap","serverProps","mappedCustomLogo","mappedComponent"],"mappings":";AAEA,SAASA,WAAW,EAAEC,eAAe,EAAEC,wBAAwB,QAAQ,wBAAuB;AAC9F,OAAOC,WAAW,QAAO;AAEzB,OAAO,MAAMC,OAA8B,CAACC;IAC1C,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAEC,WAAW,EAAEC,YAAY,EAAEC,IAAI,EAAE,GAAGP;IAE3E,MAAM,EACJQ,OAAO,EACLC,YAAY,EACVC,UAAU,EAAEX,MAAMY,UAAU,EAAE,GAAG;QAC/BZ,MAAMa;IACR,CAAC,EACF,GAAG,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EACP,GAAGR,QAAQS,MAAM;IAElB,MAAMC,wBAAwBjB,yBAAyB;QACrDkB,WAAWX,QAAQW,SAAS;QAC5BC,aAAa;YACXf;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;IACF;IAEA,MAAMU,mBAAmBH,sBAAsBH,YAAYC,WAAWjB,aAAa;IAEnF,qBAAO,KAACC;QAAgBsB,iBAAiBD;;AAC3C,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/NavWrapper/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAYA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/NavWrapper/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAqBA,CAAA"}
@@ -4,11 +4,13 @@ import { useNav } from '@payloadcms/ui';
4
4
  import React from 'react';
5
5
  export const NavWrapper = (props)=>{
6
6
  const { baseClass, children } = props;
7
- const { navOpen, navRef } = useNav();
7
+ const { hydrated, navOpen, navRef, shouldAnimate } = useNav();
8
8
  return /*#__PURE__*/ _jsx("aside", {
9
9
  className: [
10
10
  baseClass,
11
- navOpen && `${baseClass}--nav-open`
11
+ navOpen && `${baseClass}--nav-open`,
12
+ shouldAnimate && `${baseClass}--nav-animate`,
13
+ hydrated && `${baseClass}--nav-hydrated`
12
14
  ].filter(Boolean).join(' '),
13
15
  children: /*#__PURE__*/ _jsx("div", {
14
16
  className: `${baseClass}__scroll`,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/elements/Nav/NavWrapper/index.tsx"],"sourcesContent":["'use client'\nimport { useNav } from '@payloadcms/ui'\nimport React from 'react'\n\nimport './index.scss'\n\nexport const NavWrapper: React.FC<{\n baseClass?: string\n children: React.ReactNode\n}> = (props) => {\n const { baseClass, children } = props\n\n const { navOpen, navRef } = useNav()\n\n return (\n <aside className={[baseClass, navOpen && `${baseClass}--nav-open`].filter(Boolean).join(' ')}>\n <div className={`${baseClass}__scroll`} ref={navRef}>\n {children}\n </div>\n </aside>\n )\n}\n"],"names":["useNav","React","NavWrapper","props","baseClass","children","navOpen","navRef","aside","className","filter","Boolean","join","div","ref"],"mappings":"AAAA;;AACA,SAASA,MAAM,QAAQ,iBAAgB;AACvC,OAAOC,WAAW,QAAO;AAIzB,OAAO,MAAMC,aAGR,CAACC;IACJ,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGF;IAEhC,MAAM,EAAEG,OAAO,EAAEC,MAAM,EAAE,GAAGP;IAE5B,qBACE,KAACQ;QAAMC,WAAW;YAACL;YAAWE,WAAW,CAAC,EAAEF,UAAU,UAAU,CAAC;SAAC,CAACM,MAAM,CAACC,SAASC,IAAI,CAAC;kBACtF,cAAA,KAACC;YAAIJ,WAAW,CAAC,EAAEL,UAAU,QAAQ,CAAC;YAAEU,KAAKP;sBAC1CF;;;AAIT,EAAC"}
1
+ {"version":3,"sources":["../../../../src/elements/Nav/NavWrapper/index.tsx"],"sourcesContent":["'use client'\nimport { useNav } from '@payloadcms/ui'\nimport React from 'react'\n\nimport './index.scss'\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 >\n <div className={`${baseClass}__scroll`} ref={navRef}>\n {children}\n </div>\n </aside>\n )\n}\n"],"names":["useNav","React","NavWrapper","props","baseClass","children","hydrated","navOpen","navRef","shouldAnimate","aside","className","filter","Boolean","join","div","ref"],"mappings":"AAAA;;AACA,SAASA,MAAM,QAAQ,iBAAgB;AACvC,OAAOC,WAAW,QAAO;AAIzB,OAAO,MAAMC,aAGR,CAACC;IACJ,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGF;IAEhC,MAAM,EAAEG,QAAQ,EAAEC,OAAO,EAAEC,MAAM,EAAEC,aAAa,EAAE,GAAGT;IAErD,qBACE,KAACU;QACCC,WAAW;YACTP;YACAG,WAAW,CAAC,EAAEH,UAAU,UAAU,CAAC;YACnCK,iBAAiB,CAAC,EAAEL,UAAU,aAAa,CAAC;YAC5CE,YAAY,CAAC,EAAEF,UAAU,cAAc,CAAC;SACzC,CACEQ,MAAM,CAACC,SACPC,IAAI,CAAC;kBAER,cAAA,KAACC;YAAIJ,WAAW,CAAC,EAAEP,UAAU,QAAQ,CAAC;YAAEY,KAAKR;sBAC1CH;;;AAIT,EAAC"}
@@ -9,7 +9,10 @@
9
9
  width: var(--nav-width);
10
10
  border-right: 1px solid var(--theme-elevation-100);
11
11
  opacity: 0;
12
- transition: opacity var(--nav-trans-time) ease-in-out;
12
+
13
+ &--nav-animate {
14
+ transition: opacity var(--nav-trans-time) ease-in-out;
15
+ }
13
16
 
14
17
  &--nav-open {
15
18
  opacity: 1;
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/elements/Nav/index.client.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAIvC,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAyFpC,CAAA"}
1
+ {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/elements/Nav/index.client.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAIvC,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EA2FpC,CAAA"}
@@ -11,7 +11,7 @@ export const DefaultNavClient = ()=>{
11
11
  const { permissions } = useAuth();
12
12
  const { isEntityVisible } = useEntityVisibility();
13
13
  const pathname = usePathname();
14
- const { collections, globals, routes: { admin: adminRoute } } = useConfig();
14
+ const { config: { collections, globals, routes: { admin: adminRoute } } } = useConfig();
15
15
  const { i18n } = useTranslation();
16
16
  const { navOpen } = useNav();
17
17
  const groups = groupNavItems([
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Nav/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { EntityToGroup } from '@payloadcms/ui/shared'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n ChevronIcon,\n NavGroup,\n useAuth,\n useConfig,\n useEntityVisibility,\n useNav,\n useTranslation,\n} from '@payloadcms/ui'\nimport { EntityType, formatAdminURL, groupNavItems } from '@payloadcms/ui/shared'\nimport LinkWithDefault from 'next/link.js'\nimport { usePathname } from 'next/navigation.js'\nimport React, { Fragment } from 'react'\n\nconst baseClass = 'nav'\n\nexport const DefaultNavClient: React.FC = () => {\n const { permissions } = useAuth()\n const { isEntityVisible } = useEntityVisibility()\n const pathname = usePathname()\n\n const {\n collections,\n globals,\n routes: { admin: adminRoute },\n } = useConfig()\n\n const { i18n } = useTranslation()\n const { navOpen } = useNav()\n\n const groups = groupNavItems(\n [\n ...collections\n .filter(({ slug }) => isEntityVisible({ collectionSlug: slug }))\n .map((collection) => {\n const entityToGroup: EntityToGroup = {\n type: EntityType.collection,\n entity: collection,\n }\n\n return entityToGroup\n }),\n ...globals\n .filter(({ slug }) => isEntityVisible({ globalSlug: slug }))\n .map((global) => {\n const entityToGroup: EntityToGroup = {\n type: EntityType.global,\n entity: global,\n }\n\n return entityToGroup\n }),\n ],\n permissions,\n i18n,\n )\n\n return (\n <Fragment>\n {groups.map(({ entities, label }, key) => {\n return (\n <NavGroup key={key} label={label}>\n {entities.map(({ type, entity }, i) => {\n let entityLabel: string\n let href: string\n let id: string\n\n if (type === EntityType.collection) {\n href = formatAdminURL({ adminRoute, path: `/collections/${entity.slug}` })\n entityLabel = getTranslation(entity.labels.plural, i18n)\n id = `nav-${entity.slug}`\n }\n\n if (type === EntityType.global) {\n href = formatAdminURL({ adminRoute, path: `/globals/${entity.slug}` })\n entityLabel = getTranslation(entity.label, i18n)\n id = `nav-global-${entity.slug}`\n }\n\n const Link = (LinkWithDefault.default ||\n LinkWithDefault) as typeof LinkWithDefault.default\n\n const LinkElement = Link || 'a'\n const activeCollection = pathname.endsWith(href)\n\n return (\n <LinkElement\n className={[`${baseClass}__link`, activeCollection && `active`]\n .filter(Boolean)\n .join(' ')}\n href={href}\n id={id}\n key={i}\n tabIndex={!navOpen ? -1 : undefined}\n >\n {activeCollection && <div className={`${baseClass}__link-indicator`} />}\n <span className={`${baseClass}__link-label`}>{entityLabel}</span>\n </LinkElement>\n )\n })}\n </NavGroup>\n )\n })}\n </Fragment>\n )\n}\n"],"names":["getTranslation","NavGroup","useAuth","useConfig","useEntityVisibility","useNav","useTranslation","EntityType","formatAdminURL","groupNavItems","LinkWithDefault","usePathname","React","Fragment","baseClass","DefaultNavClient","permissions","isEntityVisible","pathname","collections","globals","routes","admin","adminRoute","i18n","navOpen","groups","filter","slug","collectionSlug","map","collection","entityToGroup","type","entity","globalSlug","global","entities","label","key","i","entityLabel","href","id","path","labels","plural","Link","default","LinkElement","activeCollection","endsWith","className","Boolean","join","tabIndex","undefined","div","span"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/Nav/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { EntityToGroup } from '@payloadcms/ui/shared'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n ChevronIcon,\n NavGroup,\n useAuth,\n useConfig,\n useEntityVisibility,\n useNav,\n useTranslation,\n} from '@payloadcms/ui'\nimport { EntityType, formatAdminURL, groupNavItems } from '@payloadcms/ui/shared'\nimport LinkWithDefault from 'next/link.js'\nimport { usePathname } from 'next/navigation.js'\nimport React, { Fragment } from 'react'\n\nconst baseClass = 'nav'\n\nexport const DefaultNavClient: React.FC = () => {\n const { permissions } = useAuth()\n const { isEntityVisible } = useEntityVisibility()\n const pathname = usePathname()\n\n const {\n config: {\n collections,\n globals,\n routes: { admin: adminRoute },\n },\n } = useConfig()\n\n const { i18n } = useTranslation()\n const { navOpen } = useNav()\n\n const groups = groupNavItems(\n [\n ...collections\n .filter(({ slug }) => isEntityVisible({ collectionSlug: slug }))\n .map((collection) => {\n const entityToGroup: EntityToGroup = {\n type: EntityType.collection,\n entity: collection,\n }\n\n return entityToGroup\n }),\n ...globals\n .filter(({ slug }) => isEntityVisible({ globalSlug: slug }))\n .map((global) => {\n const entityToGroup: EntityToGroup = {\n type: EntityType.global,\n entity: global,\n }\n\n return entityToGroup\n }),\n ],\n permissions,\n i18n,\n )\n\n return (\n <Fragment>\n {groups.map(({ entities, label }, key) => {\n return (\n <NavGroup key={key} label={label}>\n {entities.map(({ type, entity }, i) => {\n let entityLabel: string\n let href: string\n let id: string\n\n if (type === EntityType.collection) {\n href = formatAdminURL({ adminRoute, path: `/collections/${entity.slug}` })\n entityLabel = getTranslation(entity.labels.plural, i18n)\n id = `nav-${entity.slug}`\n }\n\n if (type === EntityType.global) {\n href = formatAdminURL({ adminRoute, path: `/globals/${entity.slug}` })\n entityLabel = getTranslation(entity.label, i18n)\n id = `nav-global-${entity.slug}`\n }\n\n const Link = (LinkWithDefault.default ||\n LinkWithDefault) as typeof LinkWithDefault.default\n\n const LinkElement = Link || 'a'\n const activeCollection = pathname.endsWith(href)\n\n return (\n <LinkElement\n className={[`${baseClass}__link`, activeCollection && `active`]\n .filter(Boolean)\n .join(' ')}\n href={href}\n id={id}\n key={i}\n tabIndex={!navOpen ? -1 : undefined}\n >\n {activeCollection && <div className={`${baseClass}__link-indicator`} />}\n <span className={`${baseClass}__link-label`}>{entityLabel}</span>\n </LinkElement>\n )\n })}\n </NavGroup>\n )\n })}\n </Fragment>\n )\n}\n"],"names":["getTranslation","NavGroup","useAuth","useConfig","useEntityVisibility","useNav","useTranslation","EntityType","formatAdminURL","groupNavItems","LinkWithDefault","usePathname","React","Fragment","baseClass","DefaultNavClient","permissions","isEntityVisible","pathname","config","collections","globals","routes","admin","adminRoute","i18n","navOpen","groups","filter","slug","collectionSlug","map","collection","entityToGroup","type","entity","globalSlug","global","entities","label","key","i","entityLabel","href","id","path","labels","plural","Link","default","LinkElement","activeCollection","endsWith","className","Boolean","join","tabIndex","undefined","div","span"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Nav/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,cAAc,CAAA;AAQrB,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAA;AAElC,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAkEzC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Nav/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,cAAc,CAAA;AAMrB,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAA;AAElC,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAwDzC,CAAA"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Logout } from '@payloadcms/ui';
3
+ import { RenderComponent, getCreateMappedComponent } from '@payloadcms/ui/shared';
3
4
  import React from 'react';
4
5
  import { NavHamburger } from './NavHamburger/index.js';
5
6
  import { NavWrapper } from './NavWrapper/index.js';
6
7
  const baseClass = 'nav';
7
- import { WithServerSideProps } from '@payloadcms/ui/shared';
8
8
  import { DefaultNavClient } from './index.client.js';
9
9
  export const DefaultNav = (props)=>{
10
10
  const { i18n, locale, params, payload, permissions, searchParams, user } = props;
@@ -12,39 +12,33 @@ export const DefaultNav = (props)=>{
12
12
  return null;
13
13
  }
14
14
  const { admin: { components: { afterNavLinks, beforeNavLinks } } } = payload.config;
15
- const BeforeNavLinks = Array.isArray(beforeNavLinks) ? beforeNavLinks.map((Component, i)=>/*#__PURE__*/ _jsx(WithServerSideProps, {
16
- Component: Component,
17
- serverOnlyProps: {
18
- i18n,
19
- locale,
20
- params,
21
- payload,
22
- permissions,
23
- searchParams,
24
- user
25
- }
26
- }, i)) : null;
27
- const AfterNavLinks = Array.isArray(afterNavLinks) ? afterNavLinks.map((Component, i)=>/*#__PURE__*/ _jsx(WithServerSideProps, {
28
- Component: Component,
29
- serverOnlyProps: {
30
- i18n,
31
- locale,
32
- params,
33
- payload,
34
- permissions,
35
- searchParams,
36
- user
37
- }
38
- }, i)) : null;
15
+ const createMappedComponent = getCreateMappedComponent({
16
+ importMap: payload.importMap,
17
+ serverProps: {
18
+ i18n,
19
+ locale,
20
+ params,
21
+ payload,
22
+ permissions,
23
+ searchParams,
24
+ user
25
+ }
26
+ });
27
+ const mappedBeforeNavLinks = createMappedComponent(beforeNavLinks, undefined, undefined, 'beforeNavLinks');
28
+ const mappedAfterNavLinks = createMappedComponent(afterNavLinks, undefined, undefined, 'afterNavLinks');
39
29
  return /*#__PURE__*/ _jsxs(NavWrapper, {
40
30
  baseClass: baseClass,
41
31
  children: [
42
32
  /*#__PURE__*/ _jsxs("nav", {
43
33
  className: `${baseClass}__wrap`,
44
34
  children: [
45
- Array.isArray(BeforeNavLinks) && BeforeNavLinks.map((Component)=>Component),
35
+ /*#__PURE__*/ _jsx(RenderComponent, {
36
+ mappedComponent: mappedBeforeNavLinks
37
+ }),
46
38
  /*#__PURE__*/ _jsx(DefaultNavClient, {}),
47
- Array.isArray(AfterNavLinks) && AfterNavLinks.map((Component)=>Component),
39
+ /*#__PURE__*/ _jsx(RenderComponent, {
40
+ mappedComponent: mappedAfterNavLinks
41
+ }),
48
42
  /*#__PURE__*/ _jsx("div", {
49
43
  className: `${baseClass}__controls`,
50
44
  children: /*#__PURE__*/ _jsx(Logout, {})
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Nav/index.tsx"],"sourcesContent":["import type { ServerProps } from 'payload'\n\nimport { Logout } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { NavHamburger } from './NavHamburger/index.js'\nimport { NavWrapper } from './NavWrapper/index.js'\nimport './index.scss'\n\nconst baseClass = 'nav'\n\nimport { WithServerSideProps } from '@payloadcms/ui/shared'\n\nimport { DefaultNavClient } from './index.client.js'\n\nexport type NavProps = ServerProps\n\nexport const DefaultNav: React.FC<NavProps> = (props) => {\n const { i18n, locale, params, payload, permissions, searchParams, user } = props\n\n if (!payload?.config) {\n return null\n }\n\n const {\n admin: {\n components: { afterNavLinks, beforeNavLinks },\n },\n } = payload.config\n\n const BeforeNavLinks = Array.isArray(beforeNavLinks)\n ? beforeNavLinks.map((Component, i) => (\n <WithServerSideProps\n Component={Component}\n key={i}\n serverOnlyProps={{\n i18n,\n locale,\n params,\n payload,\n permissions,\n searchParams,\n user,\n }}\n />\n ))\n : null\n\n const AfterNavLinks = Array.isArray(afterNavLinks)\n ? afterNavLinks.map((Component, i) => (\n <WithServerSideProps\n Component={Component}\n key={i}\n serverOnlyProps={{\n i18n,\n locale,\n params,\n payload,\n permissions,\n searchParams,\n user,\n }}\n />\n ))\n : null\n\n return (\n <NavWrapper baseClass={baseClass}>\n <nav className={`${baseClass}__wrap`}>\n {Array.isArray(BeforeNavLinks) && BeforeNavLinks.map((Component) => Component)}\n <DefaultNavClient />\n {Array.isArray(AfterNavLinks) && AfterNavLinks.map((Component) => Component)}\n <div className={`${baseClass}__controls`}>\n <Logout />\n </div>\n </nav>\n <div className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <NavHamburger baseClass={baseClass} />\n </div>\n </div>\n </NavWrapper>\n )\n}\n"],"names":["Logout","React","NavHamburger","NavWrapper","baseClass","WithServerSideProps","DefaultNavClient","DefaultNav","props","i18n","locale","params","payload","permissions","searchParams","user","config","admin","components","afterNavLinks","beforeNavLinks","BeforeNavLinks","Array","isArray","map","Component","i","serverOnlyProps","AfterNavLinks","nav","className","div"],"mappings":";AAEA,SAASA,MAAM,QAAQ,iBAAgB;AACvC,OAAOC,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,0BAAyB;AACtD,SAASC,UAAU,QAAQ,wBAAuB;AAGlD,MAAMC,YAAY;AAElB,SAASC,mBAAmB,QAAQ,wBAAuB;AAE3D,SAASC,gBAAgB,QAAQ,oBAAmB;AAIpD,OAAO,MAAMC,aAAiC,CAACC;IAC7C,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAEC,WAAW,EAAEC,YAAY,EAAEC,IAAI,EAAE,GAAGP;IAE3E,IAAI,CAACI,SAASI,QAAQ;QACpB,OAAO;IACT;IAEA,MAAM,EACJC,OAAO,EACLC,YAAY,EAAEC,aAAa,EAAEC,cAAc,EAAE,EAC9C,EACF,GAAGR,QAAQI,MAAM;IAElB,MAAMK,iBAAiBC,MAAMC,OAAO,CAACH,kBACjCA,eAAeI,GAAG,CAAC,CAACC,WAAWC,kBAC7B,KAACrB;YACCoB,WAAWA;YAEXE,iBAAiB;gBACflB;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;YACF;WATKW,MAYT;IAEJ,MAAME,gBAAgBN,MAAMC,OAAO,CAACJ,iBAChCA,cAAcK,GAAG,CAAC,CAACC,WAAWC,kBAC5B,KAACrB;YACCoB,WAAWA;YAEXE,iBAAiB;gBACflB;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;YACF;WATKW,MAYT;IAEJ,qBACE,MAACvB;QAAWC,WAAWA;;0BACrB,MAACyB;gBAAIC,WAAW,CAAC,EAAE1B,UAAU,MAAM,CAAC;;oBACjCkB,MAAMC,OAAO,CAACF,mBAAmBA,eAAeG,GAAG,CAAC,CAACC,YAAcA;kCACpE,KAACnB;oBACAgB,MAAMC,OAAO,CAACK,kBAAkBA,cAAcJ,GAAG,CAAC,CAACC,YAAcA;kCAClE,KAACM;wBAAID,WAAW,CAAC,EAAE1B,UAAU,UAAU,CAAC;kCACtC,cAAA,KAACJ;;;;0BAGL,KAAC+B;gBAAID,WAAW,CAAC,EAAE1B,UAAU,QAAQ,CAAC;0BACpC,cAAA,KAAC2B;oBAAID,WAAW,CAAC,EAAE1B,UAAU,gBAAgB,CAAC;8BAC5C,cAAA,KAACF;wBAAaE,WAAWA;;;;;;AAKnC,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/Nav/index.tsx"],"sourcesContent":["import type { ServerProps } from 'payload'\n\nimport { Logout } from '@payloadcms/ui'\nimport { RenderComponent, getCreateMappedComponent } from '@payloadcms/ui/shared'\nimport React from 'react'\n\nimport { NavHamburger } from './NavHamburger/index.js'\nimport { NavWrapper } from './NavWrapper/index.js'\nimport './index.scss'\n\nconst baseClass = 'nav'\n\nimport { DefaultNavClient } from './index.client.js'\n\nexport type NavProps = ServerProps\n\nexport const DefaultNav: React.FC<NavProps> = (props) => {\n const { i18n, locale, params, payload, permissions, searchParams, user } = props\n\n if (!payload?.config) {\n return null\n }\n\n const {\n admin: {\n components: { afterNavLinks, beforeNavLinks },\n },\n } = payload.config\n\n const createMappedComponent = getCreateMappedComponent({\n importMap: payload.importMap,\n serverProps: {\n i18n,\n locale,\n params,\n payload,\n permissions,\n searchParams,\n user,\n },\n })\n\n const mappedBeforeNavLinks = createMappedComponent(\n beforeNavLinks,\n undefined,\n undefined,\n 'beforeNavLinks',\n )\n const mappedAfterNavLinks = createMappedComponent(\n afterNavLinks,\n undefined,\n undefined,\n 'afterNavLinks',\n )\n\n return (\n <NavWrapper baseClass={baseClass}>\n <nav className={`${baseClass}__wrap`}>\n <RenderComponent mappedComponent={mappedBeforeNavLinks} />\n <DefaultNavClient />\n <RenderComponent mappedComponent={mappedAfterNavLinks} />\n <div className={`${baseClass}__controls`}>\n <Logout />\n </div>\n </nav>\n <div className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <NavHamburger baseClass={baseClass} />\n </div>\n </div>\n </NavWrapper>\n )\n}\n"],"names":["Logout","RenderComponent","getCreateMappedComponent","React","NavHamburger","NavWrapper","baseClass","DefaultNavClient","DefaultNav","props","i18n","locale","params","payload","permissions","searchParams","user","config","admin","components","afterNavLinks","beforeNavLinks","createMappedComponent","importMap","serverProps","mappedBeforeNavLinks","undefined","mappedAfterNavLinks","nav","className","mappedComponent","div"],"mappings":";AAEA,SAASA,MAAM,QAAQ,iBAAgB;AACvC,SAASC,eAAe,EAAEC,wBAAwB,QAAQ,wBAAuB;AACjF,OAAOC,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,0BAAyB;AACtD,SAASC,UAAU,QAAQ,wBAAuB;AAGlD,MAAMC,YAAY;AAElB,SAASC,gBAAgB,QAAQ,oBAAmB;AAIpD,OAAO,MAAMC,aAAiC,CAACC;IAC7C,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAEC,WAAW,EAAEC,YAAY,EAAEC,IAAI,EAAE,GAAGP;IAE3E,IAAI,CAACI,SAASI,QAAQ;QACpB,OAAO;IACT;IAEA,MAAM,EACJC,OAAO,EACLC,YAAY,EAAEC,aAAa,EAAEC,cAAc,EAAE,EAC9C,EACF,GAAGR,QAAQI,MAAM;IAElB,MAAMK,wBAAwBpB,yBAAyB;QACrDqB,WAAWV,QAAQU,SAAS;QAC5BC,aAAa;YACXd;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;IACF;IAEA,MAAMS,uBAAuBH,sBAC3BD,gBACAK,WACAA,WACA;IAEF,MAAMC,sBAAsBL,sBAC1BF,eACAM,WACAA,WACA;IAGF,qBACE,MAACrB;QAAWC,WAAWA;;0BACrB,MAACsB;gBAAIC,WAAW,CAAC,EAAEvB,UAAU,MAAM,CAAC;;kCAClC,KAACL;wBAAgB6B,iBAAiBL;;kCAClC,KAAClB;kCACD,KAACN;wBAAgB6B,iBAAiBH;;kCAClC,KAACI;wBAAIF,WAAW,CAAC,EAAEvB,UAAU,UAAU,CAAC;kCACtC,cAAA,KAACN;;;;0BAGL,KAAC+B;gBAAIF,WAAW,CAAC,EAAEvB,UAAU,QAAQ,CAAC;0BACpC,cAAA,KAACyB;oBAAIF,WAAW,CAAC,EAAEvB,UAAU,gBAAgB,CAAC;8BAC5C,cAAA,KAACF;wBAAaE,WAAWA;;;;;;AAKnC,EAAC"}
@@ -9,9 +9,12 @@
9
9
  width: var(--nav-width);
10
10
  border-right: 1px solid var(--theme-elevation-100);
11
11
  opacity: 0;
12
- transition: opacity var(--nav-trans-time) ease-in-out;
13
12
  overflow: hidden;
14
13
 
14
+ &--nav-animate {
15
+ transition: opacity var(--nav-trans-time) ease-in-out;
16
+ }
17
+
15
18
  &--nav-open {
16
19
  opacity: 1;
17
20
  }
@@ -1,12 +1,13 @@
1
- import type { SanitizedConfig } from 'payload';
1
+ import type { ImportMap, SanitizedConfig } from 'payload';
2
2
  import '@payloadcms/ui/scss/app.scss';
3
3
  import React from 'react';
4
4
  export declare const metadata: {
5
5
  description: string;
6
6
  title: string;
7
7
  };
8
- export declare const RootLayout: ({ children, config: configPromise, }: {
9
- children: React.ReactNode;
10
- config: Promise<SanitizedConfig>;
8
+ export declare const RootLayout: ({ children, config: configPromise, importMap, }: {
9
+ readonly children: React.ReactNode;
10
+ readonly config: Promise<SanitizedConfig>;
11
+ readonly importMap: ImportMap;
11
12
  }) => Promise<React.JSX.Element>;
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/Root/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,SAAS,CAAA;AAI9D,OAAO,8BAA8B,CAAA;AAKrC,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,eAAO,MAAM,QAAQ;;;CAGpB,CAAA;AAED,eAAO,MAAM,UAAU,yCAGpB;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CACjC,+BAoGA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/Root/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAkB,eAAe,EAAE,MAAM,SAAS,CAAA;AAIzE,OAAO,8BAA8B,CAAA;AAIrC,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,eAAO,MAAM,QAAQ;;;CAGpB,CAAA;AAED,eAAO,MAAM,UAAU,oDAIpB;IACD,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;CAC9B,+BAqIA,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { initI18n, rtlLanguages } from '@payloadcms/translations';
3
3
  import { RootProvider } from '@payloadcms/ui';
4
- import { buildComponentMap } from '@payloadcms/ui/utilities/buildComponentMap';
4
+ import { createClientConfig } from '@payloadcms/ui/utilities/createClientConfig';
5
5
  import { headers as getHeaders, cookies as nextCookies } from 'next/headers.js';
6
- import { createClientConfig, createLocalReq, parseCookies } from 'payload';
6
+ import { createLocalReq, parseCookies } from 'payload';
7
7
  import React from 'react';
8
8
  import { getPayloadHMR } from '../../utilities/getPayloadHMR.js';
9
9
  import { getRequestLanguage } from '../../utilities/getRequestLanguage.js';
@@ -14,7 +14,7 @@ export const metadata = {
14
14
  description: 'Generated by Next.js',
15
15
  title: 'Next.js'
16
16
  };
17
- export const RootLayout = async ({ children, config: configPromise })=>{
17
+ export const RootLayout = async ({ children, config: configPromise, importMap })=>{
18
18
  const config = await configPromise;
19
19
  const headers = getHeaders();
20
20
  const cookies = parseCookies(headers);
@@ -49,9 +49,14 @@ export const RootLayout = async ({ children, config: configPromise })=>{
49
49
  headers,
50
50
  req
51
51
  });
52
- const clientConfig = await createClientConfig({
52
+ const { clientConfig, render } = await createClientConfig({
53
+ DefaultEditView,
54
+ DefaultListView,
55
+ children,
53
56
  config,
54
- t: i18n.t
57
+ i18n,
58
+ importMap,
59
+ payload
55
60
  });
56
61
  const dir = rtlLanguages.includes(languageCode) ? 'RTL' : 'LTR';
57
62
  const languageOptions = Object.entries(config.i18n.supportedLanguages || {}).reduce((acc, [language, languageConfig])=>{
@@ -72,13 +77,33 @@ export const RootLayout = async ({ children, config: configPromise })=>{
72
77
  value: lang
73
78
  });
74
79
  }
75
- const { componentMap, wrappedChildren } = buildComponentMap({
76
- DefaultEditView,
77
- DefaultListView,
78
- children,
79
- i18n,
80
- payload
81
- });
80
+ const navPreferences = user ? (await payload.find({
81
+ collection: 'payload-preferences',
82
+ depth: 0,
83
+ limit: 1,
84
+ req,
85
+ user,
86
+ where: {
87
+ and: [
88
+ {
89
+ key: {
90
+ equals: 'nav'
91
+ }
92
+ },
93
+ {
94
+ 'user.relationTo': {
95
+ equals: user.collection
96
+ }
97
+ },
98
+ {
99
+ 'user.value': {
100
+ equals: user.id
101
+ }
102
+ }
103
+ ]
104
+ }
105
+ }))?.docs?.[0] : null;
106
+ const isNavOpen = navPreferences?.value?.open ?? true;
82
107
  return /*#__PURE__*/ _jsx("html", {
83
108
  "data-theme": theme,
84
109
  dir: dir,
@@ -86,10 +111,10 @@ export const RootLayout = async ({ children, config: configPromise })=>{
86
111
  children: /*#__PURE__*/ _jsxs("body", {
87
112
  children: [
88
113
  /*#__PURE__*/ _jsx(RootProvider, {
89
- componentMap: componentMap,
90
114
  config: clientConfig,
91
115
  dateFNSKey: i18n.dateFNSKey,
92
116
  fallbackLang: clientConfig.i18n.fallbackLanguage,
117
+ isNavOpen: isNavOpen,
93
118
  languageCode: languageCode,
94
119
  languageOptions: languageOptions,
95
120
  permissions: permissions,
@@ -97,7 +122,7 @@ export const RootLayout = async ({ children, config: configPromise })=>{
97
122
  theme: theme,
98
123
  translations: i18n.translations,
99
124
  user: user,
100
- children: wrappedChildren
125
+ children: render
101
126
  }),
102
127
  /*#__PURE__*/ _jsx("div", {
103
128
  id: "portal"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layouts/Root/index.tsx"],"sourcesContent":["import type { AcceptedLanguages, I18nClient } from '@payloadcms/translations'\nimport type { PayloadRequest, SanitizedConfig } from 'payload'\n\nimport { initI18n, rtlLanguages } from '@payloadcms/translations'\nimport { RootProvider } from '@payloadcms/ui'\nimport '@payloadcms/ui/scss/app.scss'\nimport { buildComponentMap } from '@payloadcms/ui/utilities/buildComponentMap'\nimport { headers as getHeaders, cookies as nextCookies } from 'next/headers.js'\nimport { createClientConfig, createLocalReq, parseCookies } from 'payload'\nimport * as qs from 'qs-esm'\nimport React from 'react'\n\nimport { getPayloadHMR } from '../../utilities/getPayloadHMR.js'\nimport { getRequestLanguage } from '../../utilities/getRequestLanguage.js'\nimport { getRequestTheme } from '../../utilities/getRequestTheme.js'\nimport { DefaultEditView } from '../../views/Edit/Default/index.js'\nimport { DefaultListView } from '../../views/List/Default/index.js'\n\nexport const metadata = {\n description: 'Generated by Next.js',\n title: 'Next.js',\n}\n\nexport const RootLayout = async ({\n children,\n config: configPromise,\n}: {\n children: React.ReactNode\n config: Promise<SanitizedConfig>\n}) => {\n const config = await configPromise\n\n const headers = getHeaders()\n const cookies = parseCookies(headers)\n\n const languageCode = getRequestLanguage({\n config,\n cookies,\n headers,\n })\n\n const theme = getRequestTheme({\n config,\n cookies,\n headers,\n })\n\n const payload = await getPayloadHMR({ config })\n\n const i18n: I18nClient = await initI18n({\n config: config.i18n,\n context: 'client',\n language: languageCode,\n })\n\n const req = await createLocalReq(\n {\n fallbackLocale: null,\n req: {\n headers,\n host: headers.get('host'),\n i18n,\n url: `${payload.config.serverURL}`,\n } as PayloadRequest,\n },\n payload,\n )\n const { permissions, user } = await payload.auth({ headers, req })\n\n const clientConfig = await createClientConfig({ config, t: i18n.t })\n\n const dir = (rtlLanguages as unknown as AcceptedLanguages[]).includes(languageCode)\n ? 'RTL'\n : 'LTR'\n\n const languageOptions = Object.entries(config.i18n.supportedLanguages || {}).reduce(\n (acc, [language, languageConfig]) => {\n if (Object.keys(config.i18n.supportedLanguages).includes(language)) {\n acc.push({\n label: languageConfig.translations.general.thisLanguage,\n value: language,\n })\n }\n\n return acc\n },\n [],\n )\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async function switchLanguageServerAction(lang: string): Promise<void> {\n 'use server'\n nextCookies().set({\n name: `${config.cookiePrefix || 'payload'}-lng`,\n path: '/',\n value: lang,\n })\n }\n\n const { componentMap, wrappedChildren } = buildComponentMap({\n DefaultEditView,\n DefaultListView,\n children,\n i18n,\n payload,\n })\n\n return (\n <html data-theme={theme} dir={dir} lang={languageCode}>\n <body>\n <RootProvider\n componentMap={componentMap}\n config={clientConfig}\n dateFNSKey={i18n.dateFNSKey}\n fallbackLang={clientConfig.i18n.fallbackLanguage}\n languageCode={languageCode}\n languageOptions={languageOptions}\n permissions={permissions}\n switchLanguageServerAction={switchLanguageServerAction}\n theme={theme}\n translations={i18n.translations}\n user={user}\n >\n {wrappedChildren}\n </RootProvider>\n <div id=\"portal\" />\n </body>\n </html>\n )\n}\n"],"names":["initI18n","rtlLanguages","RootProvider","buildComponentMap","headers","getHeaders","cookies","nextCookies","createClientConfig","createLocalReq","parseCookies","React","getPayloadHMR","getRequestLanguage","getRequestTheme","DefaultEditView","DefaultListView","metadata","description","title","RootLayout","children","config","configPromise","languageCode","theme","payload","i18n","context","language","req","fallbackLocale","host","get","url","serverURL","permissions","user","auth","clientConfig","t","dir","includes","languageOptions","Object","entries","supportedLanguages","reduce","acc","languageConfig","keys","push","label","translations","general","thisLanguage","value","switchLanguageServerAction","lang","set","name","cookiePrefix","path","componentMap","wrappedChildren","html","data-theme","body","dateFNSKey","fallbackLang","fallbackLanguage","div","id"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/layouts/Root/index.tsx"],"sourcesContent":["import type { AcceptedLanguages, I18nClient } from '@payloadcms/translations'\nimport type { ImportMap, PayloadRequest, SanitizedConfig } from 'payload'\n\nimport { initI18n, rtlLanguages } from '@payloadcms/translations'\nimport { RootProvider } from '@payloadcms/ui'\nimport '@payloadcms/ui/scss/app.scss'\nimport { createClientConfig } from '@payloadcms/ui/utilities/createClientConfig'\nimport { headers as getHeaders, cookies as nextCookies } from 'next/headers.js'\nimport { createLocalReq, parseCookies } from 'payload'\nimport React from 'react'\n\nimport { getPayloadHMR } from '../../utilities/getPayloadHMR.js'\nimport { getRequestLanguage } from '../../utilities/getRequestLanguage.js'\nimport { getRequestTheme } from '../../utilities/getRequestTheme.js'\nimport { DefaultEditView } from '../../views/Edit/Default/index.js'\nimport { DefaultListView } from '../../views/List/Default/index.js'\n\nexport const metadata = {\n description: 'Generated by Next.js',\n title: 'Next.js',\n}\n\nexport const RootLayout = async ({\n children,\n config: configPromise,\n importMap,\n}: {\n readonly children: React.ReactNode\n readonly config: Promise<SanitizedConfig>\n readonly importMap: ImportMap\n}) => {\n const config = await configPromise\n\n const headers = getHeaders()\n const cookies = parseCookies(headers)\n\n const languageCode = getRequestLanguage({\n config,\n cookies,\n headers,\n })\n\n const theme = getRequestTheme({\n config,\n cookies,\n headers,\n })\n\n const payload = await getPayloadHMR({ config })\n\n const i18n: I18nClient = await initI18n({\n config: config.i18n,\n context: 'client',\n language: languageCode,\n })\n\n const req = await createLocalReq(\n {\n fallbackLocale: null,\n req: {\n headers,\n host: headers.get('host'),\n i18n,\n url: `${payload.config.serverURL}`,\n } as PayloadRequest,\n },\n payload,\n )\n const { permissions, user } = await payload.auth({ headers, req })\n\n const { clientConfig, render } = await createClientConfig({\n DefaultEditView,\n DefaultListView,\n children,\n config,\n i18n,\n importMap,\n payload,\n })\n\n const dir = (rtlLanguages as unknown as AcceptedLanguages[]).includes(languageCode)\n ? 'RTL'\n : 'LTR'\n\n const languageOptions = Object.entries(config.i18n.supportedLanguages || {}).reduce(\n (acc, [language, languageConfig]) => {\n if (Object.keys(config.i18n.supportedLanguages).includes(language)) {\n acc.push({\n label: languageConfig.translations.general.thisLanguage,\n value: language,\n })\n }\n\n return acc\n },\n [],\n )\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async function switchLanguageServerAction(lang: string): Promise<void> {\n 'use server'\n nextCookies().set({\n name: `${config.cookiePrefix || 'payload'}-lng`,\n path: '/',\n value: lang,\n })\n }\n\n const navPreferences = user\n ? (\n await payload.find({\n collection: 'payload-preferences',\n depth: 0,\n limit: 1,\n req,\n user,\n where: {\n and: [\n {\n key: {\n equals: 'nav',\n },\n },\n {\n 'user.relationTo': {\n equals: user.collection,\n },\n },\n {\n 'user.value': {\n equals: user.id,\n },\n },\n ],\n },\n })\n )?.docs?.[0]\n : null\n\n const isNavOpen = (navPreferences?.value as any)?.open ?? true\n\n return (\n <html data-theme={theme} dir={dir} lang={languageCode}>\n <body>\n <RootProvider\n config={clientConfig}\n dateFNSKey={i18n.dateFNSKey}\n fallbackLang={clientConfig.i18n.fallbackLanguage}\n isNavOpen={isNavOpen}\n languageCode={languageCode}\n languageOptions={languageOptions}\n permissions={permissions}\n switchLanguageServerAction={switchLanguageServerAction}\n theme={theme}\n translations={i18n.translations}\n user={user}\n >\n {render}\n </RootProvider>\n <div id=\"portal\" />\n </body>\n </html>\n )\n}\n"],"names":["initI18n","rtlLanguages","RootProvider","createClientConfig","headers","getHeaders","cookies","nextCookies","createLocalReq","parseCookies","React","getPayloadHMR","getRequestLanguage","getRequestTheme","DefaultEditView","DefaultListView","metadata","description","title","RootLayout","children","config","configPromise","importMap","languageCode","theme","payload","i18n","context","language","req","fallbackLocale","host","get","url","serverURL","permissions","user","auth","clientConfig","render","dir","includes","languageOptions","Object","entries","supportedLanguages","reduce","acc","languageConfig","keys","push","label","translations","general","thisLanguage","value","switchLanguageServerAction","lang","set","name","cookiePrefix","path","navPreferences","find","collection","depth","limit","where","and","key","equals","id","docs","isNavOpen","open","html","data-theme","body","dateFNSKey","fallbackLang","fallbackLanguage","div"],"mappings":"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"}