@payloadcms/ui 3.0.0-canary.28c161d → 3.0.0-canary.291e44c

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 (166) hide show
  1. package/dist/elements/AddNewRelation/index.scss +36 -34
  2. package/dist/elements/AppHeader/index.scss +152 -150
  3. package/dist/elements/ArrayAction/index.scss +23 -21
  4. package/dist/elements/Autosave/index.scss +4 -2
  5. package/dist/elements/Banner/index.scss +51 -49
  6. package/dist/elements/BulkUpload/ActionsBar/index.scss +45 -43
  7. package/dist/elements/BulkUpload/AddFilesView/index.scss +23 -21
  8. package/dist/elements/BulkUpload/AddingFilesView/index.scss +16 -14
  9. package/dist/elements/BulkUpload/DrawerCloseButton/index.scss +23 -21
  10. package/dist/elements/BulkUpload/EditForm/index.scss +6 -4
  11. package/dist/elements/BulkUpload/FileSidebar/index.scss +214 -212
  12. package/dist/elements/BulkUpload/Header/index.scss +11 -9
  13. package/dist/elements/Button/index.scss +202 -200
  14. package/dist/elements/Card/index.scss +58 -56
  15. package/dist/elements/CodeEditor/index.scss +16 -14
  16. package/dist/elements/Collapsible/index.scss +125 -123
  17. package/dist/elements/ColumnSelector/index.scss +36 -34
  18. package/dist/elements/CopyToClipboard/index.scss +21 -19
  19. package/dist/elements/DatePicker/index.scss +309 -307
  20. package/dist/elements/DeleteDocument/index.scss +32 -30
  21. package/dist/elements/DeleteMany/index.scss +29 -27
  22. package/dist/elements/DocumentControls/index.js +1 -1
  23. package/dist/elements/DocumentControls/index.js.map +1 -1
  24. package/dist/elements/DocumentControls/index.scss +190 -188
  25. package/dist/elements/DocumentDrawer/index.scss +55 -53
  26. package/dist/elements/DocumentFields/index.scss +144 -142
  27. package/dist/elements/Drawer/index.scss +111 -109
  28. package/dist/elements/Dropzone/index.scss +32 -30
  29. package/dist/elements/DuplicateDocument/index.scss +31 -29
  30. package/dist/elements/EditMany/index.scss +162 -160
  31. package/dist/elements/EditUpload/index.scss +180 -178
  32. package/dist/elements/ErrorPill/index.scss +27 -25
  33. package/dist/elements/FieldSelect/index.scss +4 -2
  34. package/dist/elements/FileDetails/DraggableFileDetails/index.scss +25 -23
  35. package/dist/elements/FileDetails/FileMeta/index.scss +21 -19
  36. package/dist/elements/FileDetails/StaticFileDetails/index.scss +104 -102
  37. package/dist/elements/GenerateConfirmation/index.scss +29 -27
  38. package/dist/elements/Gutter/index.scss +14 -12
  39. package/dist/elements/Hamburger/index.scss +38 -36
  40. package/dist/elements/IDLabel/index.scss +11 -9
  41. package/dist/elements/ListControls/index.scss +71 -69
  42. package/dist/elements/ListDrawer/index.scss +93 -91
  43. package/dist/elements/ListHeader/index.scss +9 -7
  44. package/dist/elements/ListSelection/index.scss +14 -12
  45. package/dist/elements/Loading/index.scss +108 -106
  46. package/dist/elements/Localizer/LocalizerLabel/index.scss +44 -42
  47. package/dist/elements/Localizer/index.scss +7 -5
  48. package/dist/elements/Locked/index.scss +11 -9
  49. package/dist/elements/Nav/NavToggler/index.scss +9 -7
  50. package/dist/elements/NavGroup/index.scss +43 -41
  51. package/dist/elements/Pagination/ClickableArrow/index.scss +34 -32
  52. package/dist/elements/Pagination/index.scss +40 -38
  53. package/dist/elements/PerPage/index.scss +37 -35
  54. package/dist/elements/Pill/index.scss +103 -101
  55. package/dist/elements/Popup/PopupButtonList/index.scss +45 -43
  56. package/dist/elements/Popup/PopupTrigger/index.scss +23 -21
  57. package/dist/elements/Popup/index.scss +185 -183
  58. package/dist/elements/PreviewSizes/index.scss +115 -113
  59. package/dist/elements/PublishMany/index.scss +28 -26
  60. package/dist/elements/ReactSelect/ClearIndicator/index.scss +6 -4
  61. package/dist/elements/ReactSelect/DropdownIndicator/index.scss +11 -9
  62. package/dist/elements/ReactSelect/MultiValue/index.scss +26 -24
  63. package/dist/elements/ReactSelect/MultiValueLabel/index.scss +16 -14
  64. package/dist/elements/ReactSelect/MultiValueRemove/index.scss +20 -18
  65. package/dist/elements/ReactSelect/ValueContainer/index.scss +22 -20
  66. package/dist/elements/ReactSelect/index.d.ts.map +1 -1
  67. package/dist/elements/ReactSelect/index.js +1 -0
  68. package/dist/elements/ReactSelect/index.js.map +1 -1
  69. package/dist/elements/ReactSelect/index.scss +62 -60
  70. package/dist/elements/RelationshipTable/cells/DrawerLink/index.scss +5 -3
  71. package/dist/elements/RelationshipTable/index.scss +21 -19
  72. package/dist/elements/RenderTitle/index.scss +7 -5
  73. package/dist/elements/SearchFilter/index.scss +31 -28
  74. package/dist/elements/SelectAll/index.scss +5 -3
  75. package/dist/elements/SelectRow/index.scss +6 -4
  76. package/dist/elements/ShimmerEffect/index.scss +26 -24
  77. package/dist/elements/SortColumn/index.scss +51 -49
  78. package/dist/elements/SortComplex/index.scss +27 -25
  79. package/dist/elements/Status/index.scss +45 -43
  80. package/dist/elements/StayLoggedIn/index.scss +28 -26
  81. package/dist/elements/StepNav/index.scss +62 -61
  82. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.scss +20 -18
  83. package/dist/elements/Table/DefaultCell/fields/Code/index.scss +22 -20
  84. package/dist/elements/Table/DefaultCell/fields/File/index.scss +18 -16
  85. package/dist/elements/Table/DefaultCell/fields/JSON/index.scss +20 -18
  86. package/dist/elements/Table/index.scss +74 -72
  87. package/dist/elements/Thumbnail/index.scss +37 -35
  88. package/dist/elements/ThumbnailCard/index.scss +31 -29
  89. package/dist/elements/Tooltip/index.scss +77 -75
  90. package/dist/elements/UnpublishMany/index.scss +28 -26
  91. package/dist/elements/Upload/index.scss +122 -120
  92. package/dist/elements/WhereBuilder/Condition/Number/index.scss +4 -2
  93. package/dist/elements/WhereBuilder/Condition/Relationship/index.scss +9 -7
  94. package/dist/elements/WhereBuilder/Condition/Text/index.scss +4 -2
  95. package/dist/elements/WhereBuilder/Condition/index.scss +43 -41
  96. package/dist/elements/WhereBuilder/index.scss +28 -26
  97. package/dist/exports/client/index.js +3 -3
  98. package/dist/exports/client/index.js.map +3 -3
  99. package/dist/fields/Array/index.scss +74 -72
  100. package/dist/fields/Blocks/BlocksDrawer/BlockSearch/index.scss +25 -23
  101. package/dist/fields/Blocks/BlocksDrawer/index.scss +36 -34
  102. package/dist/fields/Blocks/SectionTitle/index.scss +51 -49
  103. package/dist/fields/Blocks/index.scss +89 -87
  104. package/dist/fields/Checkbox/index.scss +107 -105
  105. package/dist/fields/Code/index.scss +18 -16
  106. package/dist/fields/Collapsible/index.scss +8 -6
  107. package/dist/fields/ConfirmPassword/index.scss +18 -16
  108. package/dist/fields/DateTime/index.scss +13 -11
  109. package/dist/fields/Email/index.scss +21 -19
  110. package/dist/fields/FieldDescription/index.scss +9 -7
  111. package/dist/fields/FieldError/index.scss +13 -11
  112. package/dist/fields/FieldLabel/index.scss +17 -15
  113. package/dist/fields/Group/index.scss +107 -105
  114. package/dist/fields/JSON/index.scss +11 -9
  115. package/dist/fields/Number/index.scss +19 -17
  116. package/dist/fields/Password/index.scss +18 -16
  117. package/dist/fields/Point/index.scss +33 -31
  118. package/dist/fields/RadioGroup/Radio/index.scss +58 -56
  119. package/dist/fields/RadioGroup/index.scss +57 -55
  120. package/dist/fields/Relationship/index.scss +44 -42
  121. package/dist/fields/Relationship/select-components/MultiValueLabel/index.scss +40 -38
  122. package/dist/fields/Relationship/select-components/SingleValue/index.scss +43 -41
  123. package/dist/fields/Row/index.scss +31 -29
  124. package/dist/fields/Select/index.scss +16 -14
  125. package/dist/fields/Tabs/Tab/index.scss +58 -56
  126. package/dist/fields/Tabs/index.scss +46 -44
  127. package/dist/fields/Text/index.scss +23 -21
  128. package/dist/fields/Textarea/index.scss +89 -87
  129. package/dist/fields/Upload/HasMany/index.scss +20 -18
  130. package/dist/fields/Upload/HasOne/index.scss +5 -3
  131. package/dist/fields/Upload/RelationshipContent/index.scss +44 -42
  132. package/dist/fields/Upload/UploadCard/index.scss +21 -19
  133. package/dist/fields/Upload/index.scss +49 -47
  134. package/dist/forms/Form/index.scss +5 -3
  135. package/dist/forms/RenderFields/index.scss +47 -45
  136. package/dist/forms/Submit/index.scss +5 -3
  137. package/dist/graphics/Account/Default/index.scss +43 -41
  138. package/dist/icons/Calendar/index.scss +8 -6
  139. package/dist/icons/Check/index.scss +9 -7
  140. package/dist/icons/Chevron/index.scss +18 -16
  141. package/dist/icons/CloseMenu/index.scss +7 -5
  142. package/dist/icons/Copy/index.scss +9 -7
  143. package/dist/icons/DragHandle/index.scss +9 -7
  144. package/dist/icons/Edit/index.scss +9 -7
  145. package/dist/icons/Line/index.scss +8 -6
  146. package/dist/icons/Link/index.scss +8 -6
  147. package/dist/icons/Lock/index.scss +6 -4
  148. package/dist/icons/LogOut/index.scss +8 -6
  149. package/dist/icons/Menu/index.scss +6 -4
  150. package/dist/icons/More/index.scss +8 -6
  151. package/dist/icons/Plus/index.scss +6 -4
  152. package/dist/icons/Search/index.scss +8 -6
  153. package/dist/icons/Swap/index.scss +9 -7
  154. package/dist/icons/X/index.scss +6 -4
  155. package/dist/providers/Auth/index.d.ts +2 -2
  156. package/dist/providers/Auth/index.d.ts.map +1 -1
  157. package/dist/providers/Auth/index.js +5 -0
  158. package/dist/providers/Auth/index.js.map +1 -1
  159. package/dist/scss/app.scss +166 -162
  160. package/dist/scss/colors.scss +256 -254
  161. package/dist/scss/resets.scss +9 -7
  162. package/dist/scss/toastify.scss +42 -40
  163. package/dist/scss/toasts.scss +105 -103
  164. package/dist/scss/type.scss +81 -79
  165. package/dist/styles.css +1 -1
  166. package/package.json +5 -5
@@ -1,12 +1,14 @@
1
1
  @import '../../scss/styles';
2
2
 
3
- .icon--swap {
4
- height: $baseline;
5
- width: $baseline;
3
+ @layer payload-default {
4
+ .icon--swap {
5
+ height: $baseline;
6
+ width: $baseline;
6
7
 
7
- .stroke {
8
- fill: none;
9
- stroke: currentColor;
10
- stroke-width: $style-stroke-width-s;
8
+ .stroke {
9
+ fill: none;
10
+ stroke: currentColor;
11
+ stroke-width: $style-stroke-width-s;
12
+ }
11
13
  }
12
14
  }
@@ -1,8 +1,10 @@
1
1
  @import '../../scss/styles';
2
2
 
3
- .icon--x {
4
- .stroke {
5
- stroke: currentColor;
6
- stroke-width: $style-stroke-width-s;
3
+ @layer payload-default {
4
+ .icon--x {
5
+ .stroke {
6
+ stroke: currentColor;
7
+ stroke-width: $style-stroke-width-s;
8
+ }
7
9
  }
8
10
  }
@@ -1,7 +1,7 @@
1
- import type { ClientUser, Permissions } from 'payload';
1
+ import type { ClientUser, Permissions, User } from 'payload';
2
2
  import React from 'react';
3
3
  export type AuthContext<T = ClientUser> = {
4
- fetchFullUser: () => Promise<void>;
4
+ fetchFullUser: () => Promise<null | User>;
5
5
  logOut: () => Promise<void>;
6
6
  permissions?: Permissions;
7
7
  refreshCookie: (forceRefresh?: boolean) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAqB,WAAW,EAAE,MAAM,SAAS,CAAA;AAKzE,OAAO,KAAsE,MAAM,OAAO,CAAA;AAU1F,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAClD,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;CAChB,CAAA;AAMD,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACzB,CAAA;AACD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,WAAW,GAClB,EAAE,KAAK,qBAoSP;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,oBAAmB,WAAW,CAAC,CAAC,CAA0C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAqB,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAK/E,OAAO,KAAsE,MAAM,OAAO,CAAA;AAU1F,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IACzC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAClD,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;CAChB,CAAA;AAMD,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACzB,CAAA;AACD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,WAAW,GAClB,EAAE,KAAK,qBA2SP;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,oBAAmB,WAAW,CAAC,CAAC,CAA0C,CAAA"}
@@ -166,14 +166,17 @@ export function AuthProvider({
166
166
  const fetchFullUser = React.useCallback(async () => {
167
167
  try {
168
168
  const request_2 = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {
169
+ credentials: 'include',
169
170
  headers: {
170
171
  'Accept-Language': i18n.language
171
172
  }
172
173
  });
173
174
  if (request_2.status === 200) {
174
175
  const json_3 = await request_2.json();
176
+ let user_0 = null;
175
177
  if (json_3?.user) {
176
178
  setUser(json_3.user);
179
+ user_0 = json_3.user;
177
180
  if (json_3?.token) {
178
181
  setTokenAndExpiration(json_3);
179
182
  }
@@ -181,10 +184,12 @@ export function AuthProvider({
181
184
  setUser(null);
182
185
  revokeTokenAndExpire();
183
186
  }
187
+ return user_0;
184
188
  }
185
189
  } catch (e_3) {
186
190
  toast.error(`Fetching user failed: ${e_3.message}`);
187
191
  }
192
+ return null;
188
193
  }, [serverURL, apiRoute, userSlug, i18n.language, setTokenAndExpiration, revokeTokenAndExpire]);
189
194
  // On mount, get user and set
190
195
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","usePathname","useRouter","qs","React","createContext","useCallback","useContext","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useTranslation","requests","formatAdminURL","useConfig","Context","maxTimeoutTime","AuthProvider","children","permissions","initialPermissions","user","initialUser","setUser","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","config","admin","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","id","redirectToInactivityRoute","window","location","startsWith","redirectParam","encodeURIComponent","replace","path","revokeTokenAndExpire","undefined","setTokenAndExpiration","json","token","refreshedToken","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","refresh","request","post","headers","language","status","e","error","message","refreshCookieAsync","skipSetUser","logOut","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","reminder","max","min","clearTimeout","forceLogOut","_jsx","Provider","value","useAuth"],"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, MeOperationResult, Permissions } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, useCallback, useContext, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { useConfig } from '../Config/index.js'\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<void>\n logOut: () => Promise<void>\n permissions?: Permissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: Permissions) => void\n setUser: (user: T) => void\n strategy?: string\n token?: string\n tokenExpiration?: number\n user?: null | T\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: Permissions\n user?: ClientUser | null\n}\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const [user, setUser] = useState<ClientUser | null>(initialUser)\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpiration, setTokenExpiration] = useState<number>()\n const pathname = usePathname()\n const router = useRouter()\n\n const { config } = useConfig()\n\n const {\n admin: {\n routes: { inactivity: logoutInactivityRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n } = config\n\n const [permissions, setPermissions] = useState<Permissions>(initialPermissions)\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n if (window.location.pathname.startsWith(adminRoute)) {\n const redirectParam = `?redirect=${encodeURIComponent(window.location.pathname)}`\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${redirectParam}`,\n }),\n )\n } else {\n router.replace(\n formatAdminURL({\n adminRoute,\n path: logoutInactivityRoute,\n }),\n )\n }\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n }, [])\n\n const setTokenAndExpiration = useCallback(\n (json) => {\n const token = json?.token || json?.refreshedToken\n if (token && json?.exp) {\n setTokenInMemory(token)\n setTokenExpiration(json.exp)\n } else {\n revokeTokenAndExpire()\n }\n },\n [revokeTokenAndExpire],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now\n\n if (forceRefresh || (tokenExpiration && remainingTime < 120)) {\n setTimeout(() => {\n async function refresh() {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json = await request.json()\n setUser(json.user)\n\n setTokenAndExpiration(json)\n } else {\n setUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }\n\n void refresh()\n }, 1000)\n }\n },\n [\n tokenExpiration,\n serverURL,\n apiRoute,\n userSlug,\n i18n,\n redirectToInactivityRoute,\n setTokenAndExpiration,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n if (!skipSetUser) {\n setUser(json.user)\n setTokenAndExpiration(json)\n }\n return json.user\n }\n\n setUser(null)\n redirectToInactivityRoute()\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [serverURL, apiRoute, userSlug, i18n, redirectToInactivityRoute, setTokenAndExpiration],\n )\n\n const logOut = useCallback(async () => {\n setUser(null)\n revokeTokenAndExpire()\n try {\n await requests.post(`${serverURL}${apiRoute}/${userSlug}/logout`)\n } catch (e) {\n toast.error(`Logging out failed: ${e.message}`)\n }\n }, [serverURL, apiRoute, userSlug, revokeTokenAndExpire])\n\n const refreshPermissions = useCallback(\n async ({ locale }: { locale?: string } = {}) => {\n const params = qs.stringify(\n {\n locale,\n },\n {\n addQueryPrefix: true,\n },\n )\n\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/access${params}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: Permissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n },\n [serverURL, apiRoute, i18n],\n )\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: MeOperationResult = await request.json()\n\n if (json?.user) {\n setUser(json.user)\n\n if (json?.token) {\n setTokenAndExpiration(json)\n }\n } else {\n setUser(null)\n revokeTokenAndExpire()\n }\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n }, [serverURL, apiRoute, userSlug, i18n.language, setTokenAndExpiration, revokeTokenAndExpire])\n\n // On mount, get user and set\n useEffect(() => {\n void fetchFullUser()\n }, [fetchFullUser])\n\n // When location changes, refresh cookie\n useEffect(() => {\n if (id) {\n refreshCookie()\n }\n }, [debouncedLocationChange, refreshCookie, id])\n\n // When initialUser changes, reset in state\n useEffect(() => {\n setUser(initialUser)\n }, [initialUser])\n\n useEffect(() => {\n setLastLocationChange(Date.now())\n }, [pathname])\n\n useEffect(() => {\n let reminder: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n reminder = setTimeout(\n () => {\n openModal(stayLoggedInModalSlug)\n },\n Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime)),\n )\n }\n\n return () => {\n if (reminder) {\n clearTimeout(reminder)\n }\n }\n }, [tokenExpiration, openModal])\n\n useEffect(() => {\n let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n forceLogOut = setTimeout(\n () => {\n setUser(null)\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n },\n Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0),\n )\n }\n\n return () => {\n if (forceLogOut) {\n clearTimeout(forceLogOut)\n }\n }\n }, [tokenExpiration, closeAllModals, i18n, redirectToInactivityRoute, revokeTokenAndExpire])\n\n return (\n <Context.Provider\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser,\n token: tokenInMemory,\n user,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => useContext(Context) as AuthContext<T>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","usePathname","useRouter","qs","React","createContext","useCallback","useContext","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useTranslation","requests","formatAdminURL","useConfig","Context","maxTimeoutTime","AuthProvider","children","permissions","initialPermissions","user","initialUser","setUser","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","config","admin","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","id","redirectToInactivityRoute","window","location","startsWith","redirectParam","encodeURIComponent","replace","path","revokeTokenAndExpire","undefined","setTokenAndExpiration","json","token","refreshedToken","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","refresh","request","post","headers","language","status","e","error","message","refreshCookieAsync","skipSetUser","logOut","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","credentials","reminder","max","min","clearTimeout","forceLogOut","_jsx","Provider","value","useAuth"],"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, MeOperationResult, Permissions, User } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, useCallback, useContext, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { useConfig } from '../Config/index.js'\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<null | User>\n logOut: () => Promise<void>\n permissions?: Permissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: Permissions) => void\n setUser: (user: T) => void\n strategy?: string\n token?: string\n tokenExpiration?: number\n user?: null | T\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: Permissions\n user?: ClientUser | null\n}\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const [user, setUser] = useState<ClientUser | null>(initialUser)\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpiration, setTokenExpiration] = useState<number>()\n const pathname = usePathname()\n const router = useRouter()\n\n const { config } = useConfig()\n\n const {\n admin: {\n routes: { inactivity: logoutInactivityRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n } = config\n\n const [permissions, setPermissions] = useState<Permissions>(initialPermissions)\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n if (window.location.pathname.startsWith(adminRoute)) {\n const redirectParam = `?redirect=${encodeURIComponent(window.location.pathname)}`\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${redirectParam}`,\n }),\n )\n } else {\n router.replace(\n formatAdminURL({\n adminRoute,\n path: logoutInactivityRoute,\n }),\n )\n }\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n }, [])\n\n const setTokenAndExpiration = useCallback(\n (json) => {\n const token = json?.token || json?.refreshedToken\n if (token && json?.exp) {\n setTokenInMemory(token)\n setTokenExpiration(json.exp)\n } else {\n revokeTokenAndExpire()\n }\n },\n [revokeTokenAndExpire],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now\n\n if (forceRefresh || (tokenExpiration && remainingTime < 120)) {\n setTimeout(() => {\n async function refresh() {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json = await request.json()\n setUser(json.user)\n\n setTokenAndExpiration(json)\n } else {\n setUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }\n\n void refresh()\n }, 1000)\n }\n },\n [\n tokenExpiration,\n serverURL,\n apiRoute,\n userSlug,\n i18n,\n redirectToInactivityRoute,\n setTokenAndExpiration,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n if (!skipSetUser) {\n setUser(json.user)\n setTokenAndExpiration(json)\n }\n return json.user\n }\n\n setUser(null)\n redirectToInactivityRoute()\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [serverURL, apiRoute, userSlug, i18n, redirectToInactivityRoute, setTokenAndExpiration],\n )\n\n const logOut = useCallback(async () => {\n setUser(null)\n revokeTokenAndExpire()\n try {\n await requests.post(`${serverURL}${apiRoute}/${userSlug}/logout`)\n } catch (e) {\n toast.error(`Logging out failed: ${e.message}`)\n }\n }, [serverURL, apiRoute, userSlug, revokeTokenAndExpire])\n\n const refreshPermissions = useCallback(\n async ({ locale }: { locale?: string } = {}) => {\n const params = qs.stringify(\n {\n locale,\n },\n {\n addQueryPrefix: true,\n },\n )\n\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/access${params}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: Permissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n },\n [serverURL, apiRoute, i18n],\n )\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: MeOperationResult = await request.json()\n let user = null\n\n if (json?.user) {\n setUser(json.user)\n user = json.user\n\n if (json?.token) {\n setTokenAndExpiration(json)\n }\n } else {\n setUser(null)\n revokeTokenAndExpire()\n }\n\n return user\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n\n return null\n }, [serverURL, apiRoute, userSlug, i18n.language, setTokenAndExpiration, revokeTokenAndExpire])\n\n // On mount, get user and set\n useEffect(() => {\n void fetchFullUser()\n }, [fetchFullUser])\n\n // When location changes, refresh cookie\n useEffect(() => {\n if (id) {\n refreshCookie()\n }\n }, [debouncedLocationChange, refreshCookie, id])\n\n // When initialUser changes, reset in state\n useEffect(() => {\n setUser(initialUser)\n }, [initialUser])\n\n useEffect(() => {\n setLastLocationChange(Date.now())\n }, [pathname])\n\n useEffect(() => {\n let reminder: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n reminder = setTimeout(\n () => {\n openModal(stayLoggedInModalSlug)\n },\n Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime)),\n )\n }\n\n return () => {\n if (reminder) {\n clearTimeout(reminder)\n }\n }\n }, [tokenExpiration, openModal])\n\n useEffect(() => {\n let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n forceLogOut = setTimeout(\n () => {\n setUser(null)\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n },\n Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0),\n )\n }\n\n return () => {\n if (forceLogOut) {\n clearTimeout(forceLogOut)\n }\n }\n }, [tokenExpiration, closeAllModals, i18n, redirectToInactivityRoute, revokeTokenAndExpire])\n\n return (\n <Context.Provider\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser,\n token: tokenInMemory,\n user,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => useContext(Context) as AuthContext<T>\n"],"mappings":"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","ignoreList":[]}
@@ -1,203 +1,207 @@
1
+ @layer payload-default, payload;
2
+
1
3
  @import 'styles';
2
4
  @import './toasts.scss';
3
5
  @import './colors.scss';
4
6
 
5
- :root {
6
- --base-px: 20;
7
- --base-body-size: 13;
8
- --base: calc((var(--base-px) / var(--base-body-size)) * 1rem);
9
-
10
- --breakpoint-xs-width: #{$breakpoint-xs-width};
11
- --breakpoint-s-width: #{$breakpoint-s-width};
12
- --breakpoint-m-width: #{$breakpoint-m-width};
13
- --breakpoint-l-width: #{$breakpoint-l-width};
14
- --scrollbar-width: 17px;
15
-
16
- --theme-bg: var(--theme-elevation-0);
17
- --theme-input-bg: var(--theme-elevation-0);
18
- --theme-text: var(--theme-elevation-800);
19
- --theme-overlay: rgba(5, 5, 5, 0.5);
20
- --theme-baseline: #{$baseline-px};
21
- --theme-baseline-body-size: #{$baseline-body-size};
22
- --font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
23
- sans-serif;
24
- --font-serif: 'Georgia', 'Bitstream Charter', 'Charis SIL', Utopia, 'URW Bookman L', serif;
25
- --font-mono: 'SF Mono', Menlo, Consolas, Monaco, monospace;
26
-
27
- --style-radius-s: #{$style-radius-s};
28
- --style-radius-m: #{$style-radius-m};
29
- --style-radius-l: #{$style-radius-l};
30
-
31
- --z-popup: 10;
32
- --z-nav: 20;
33
- --z-modal: 30;
34
- --z-status: 40;
35
-
36
- --accessibility-outline: 2px solid var(--theme-text);
37
- --accessibility-outline-offset: 2px;
38
-
39
- --gutter-h: #{base(3)};
40
- --spacing-view-bottom: var(--gutter-h);
41
- --doc-controls-height: calc(var(--base) * 2.8);
42
- --app-header-height: calc(var(--base) * 2.8);
43
- --nav-width: 275px;
44
- --nav-trans-time: 150ms;
45
-
46
- @include mid-break {
47
- --gutter-h: #{base(2)};
48
- --app-header-height: calc(var(--base) * 2.4);
49
- --doc-controls-height: calc(var(--base) * 2.4);
50
- }
51
-
52
- @include small-break {
53
- --gutter-h: #{base(0.8)};
54
- --spacing-view-bottom: calc(var(--base) * 2);
55
- --nav-width: 100vw;
56
- }
57
- }
7
+ @layer payload-default {
8
+ :root {
9
+ --base-px: 20;
10
+ --base-body-size: 13;
11
+ --base: calc((var(--base-px) / var(--base-body-size)) * 1rem);
58
12
 
59
- /////////////////////////////
60
- // GLOBAL STYLES
61
- /////////////////////////////
13
+ --breakpoint-xs-width: #{$breakpoint-xs-width};
14
+ --breakpoint-s-width: #{$breakpoint-s-width};
15
+ --breakpoint-m-width: #{$breakpoint-m-width};
16
+ --breakpoint-l-width: #{$breakpoint-l-width};
17
+ --scrollbar-width: 17px;
62
18
 
63
- * {
64
- box-sizing: border-box;
65
- }
19
+ --theme-bg: var(--theme-elevation-0);
20
+ --theme-input-bg: var(--theme-elevation-0);
21
+ --theme-text: var(--theme-elevation-800);
22
+ --theme-overlay: rgba(5, 5, 5, 0.5);
23
+ --theme-baseline: #{$baseline-px};
24
+ --theme-baseline-body-size: #{$baseline-body-size};
25
+ --font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
26
+ sans-serif;
27
+ --font-serif: 'Georgia', 'Bitstream Charter', 'Charis SIL', Utopia, 'URW Bookman L', serif;
28
+ --font-mono: 'SF Mono', Menlo, Consolas, Monaco, monospace;
29
+
30
+ --style-radius-s: #{$style-radius-s};
31
+ --style-radius-m: #{$style-radius-m};
32
+ --style-radius-l: #{$style-radius-l};
33
+
34
+ --z-popup: 10;
35
+ --z-nav: 20;
36
+ --z-modal: 30;
37
+ --z-status: 40;
38
+
39
+ --accessibility-outline: 2px solid var(--theme-text);
40
+ --accessibility-outline-offset: 2px;
41
+
42
+ --gutter-h: #{base(3)};
43
+ --spacing-view-bottom: var(--gutter-h);
44
+ --doc-controls-height: calc(var(--base) * 2.8);
45
+ --app-header-height: calc(var(--base) * 2.8);
46
+ --nav-width: 275px;
47
+ --nav-trans-time: 150ms;
48
+
49
+ @include mid-break {
50
+ --gutter-h: #{base(2)};
51
+ --app-header-height: calc(var(--base) * 2.4);
52
+ --doc-controls-height: calc(var(--base) * 2.4);
53
+ }
66
54
 
67
- html {
68
- @extend %body;
69
- background: var(--theme-bg);
70
- -webkit-font-smoothing: antialiased;
55
+ @include small-break {
56
+ --gutter-h: #{base(0.8)};
57
+ --spacing-view-bottom: calc(var(--base) * 2);
58
+ --nav-width: 100vw;
59
+ }
60
+ }
71
61
 
72
- &[data-theme='dark'] {
73
- --theme-bg: var(--theme-elevation-0);
74
- --theme-text: var(--theme-elevation-1000);
75
- --theme-input-bg: var(--theme-elevation-50);
76
- --theme-overlay: rgba(5, 5, 5, 0.75);
77
- color-scheme: dark;
62
+ /////////////////////////////
63
+ // GLOBAL STYLES
64
+ /////////////////////////////
65
+
66
+ * {
67
+ box-sizing: border-box;
68
+ }
78
69
 
79
- ::selection {
80
- color: var(--color-base-1000);
70
+ html {
71
+ @extend %body;
72
+ background: var(--theme-bg);
73
+ -webkit-font-smoothing: antialiased;
74
+
75
+ &[data-theme='dark'] {
76
+ --theme-bg: var(--theme-elevation-0);
77
+ --theme-text: var(--theme-elevation-1000);
78
+ --theme-input-bg: var(--theme-elevation-50);
79
+ --theme-overlay: rgba(5, 5, 5, 0.75);
80
+ color-scheme: dark;
81
+
82
+ ::selection {
83
+ color: var(--color-base-1000);
84
+ }
85
+
86
+ ::-moz-selection {
87
+ color: var(--color-base-1000);
88
+ }
81
89
  }
82
90
 
83
- ::-moz-selection {
84
- color: var(--color-base-1000);
91
+ @include mid-break {
92
+ font-size: 12px;
85
93
  }
86
94
  }
87
95
 
88
- @include mid-break {
89
- font-size: 12px;
96
+ html,
97
+ body,
98
+ #app {
99
+ height: 100%;
90
100
  }
91
- }
92
101
 
93
- html,
94
- body,
95
- #app {
96
- height: 100%;
97
- }
102
+ body {
103
+ font-family: var(--font-body);
104
+ font-weight: 400;
105
+ color: var(--theme-text);
106
+ margin: 0;
107
+ // this is for the nav to be able to push the document over
108
+ overflow-x: hidden;
109
+ }
98
110
 
99
- body {
100
- font-family: var(--font-body);
101
- font-weight: 400;
102
- color: var(--theme-text);
103
- margin: 0;
104
- // this is for the nav to be able to push the document over
105
- overflow-x: hidden;
106
- }
111
+ ::selection {
112
+ background: var(--color-success-250);
113
+ color: var(--theme-base-800);
114
+ }
107
115
 
108
- ::selection {
109
- background: var(--color-success-250);
110
- color: var(--theme-base-800);
111
- }
116
+ ::-moz-selection {
117
+ background: var(--color-success-250);
118
+ color: var(--theme-base-800);
119
+ }
112
120
 
113
- ::-moz-selection {
114
- background: var(--color-success-250);
115
- color: var(--theme-base-800);
116
- }
121
+ img {
122
+ max-width: 100%;
123
+ height: auto;
124
+ display: block;
125
+ }
117
126
 
118
- img {
119
- max-width: 100%;
120
- height: auto;
121
- display: block;
122
- }
127
+ h1 {
128
+ @extend %h1;
129
+ }
123
130
 
124
- h1 {
125
- @extend %h1;
126
- }
131
+ h2 {
132
+ @extend %h2;
133
+ }
127
134
 
128
- h2 {
129
- @extend %h2;
130
- }
135
+ h3 {
136
+ @extend %h3;
137
+ }
131
138
 
132
- h3 {
133
- @extend %h3;
134
- }
139
+ h4 {
140
+ @extend %h4;
141
+ }
135
142
 
136
- h4 {
137
- @extend %h4;
138
- }
143
+ h5 {
144
+ @extend %h5;
145
+ }
139
146
 
140
- h5 {
141
- @extend %h5;
142
- }
147
+ h6 {
148
+ @extend %h6;
149
+ }
143
150
 
144
- h6 {
145
- @extend %h6;
146
- }
151
+ p {
152
+ margin: 0;
153
+ }
147
154
 
148
- p {
149
- margin: 0;
150
- }
155
+ ul,
156
+ ol {
157
+ padding-left: $baseline;
158
+ margin: 0;
159
+ }
151
160
 
152
- ul,
153
- ol {
154
- padding-left: $baseline;
155
- margin: 0;
156
- }
161
+ :focus-visible {
162
+ outline: var(--accessibility-outline);
163
+ }
157
164
 
158
- :focus-visible {
159
- outline: var(--accessibility-outline);
160
- }
165
+ a {
166
+ color: currentColor;
161
167
 
162
- a {
163
- color: currentColor;
168
+ &:focus {
169
+ &:not(:focus-visible) {
170
+ opacity: 0.8;
171
+ }
172
+ outline: none;
173
+ }
164
174
 
165
- &:focus {
166
- &:not(:focus-visible) {
167
- opacity: 0.8;
175
+ &:active {
176
+ opacity: 0.7;
177
+ outline: none;
168
178
  }
169
- outline: none;
170
179
  }
171
180
 
172
- &:active {
173
- opacity: 0.7;
174
- outline: none;
181
+ svg {
182
+ vertical-align: middle;
175
183
  }
176
- }
177
184
 
178
- svg {
179
- vertical-align: middle;
180
- }
185
+ dialog {
186
+ width: 100%;
187
+ border: 0;
188
+ padding: 0;
189
+ color: currentColor;
190
+ }
181
191
 
182
- dialog {
183
- width: 100%;
184
- border: 0;
185
- padding: 0;
186
- color: currentColor;
187
- }
192
+ .payload__modal-item {
193
+ min-height: 100%;
194
+ background: transparent;
195
+ }
188
196
 
189
- .payload__modal-item {
190
- min-height: 100%;
191
- background: transparent;
192
- }
197
+ .payload__modal-container--enterDone {
198
+ overflow: auto;
199
+ }
193
200
 
194
- .payload__modal-container--enterDone {
195
- overflow: auto;
196
- }
201
+ .payload__modal-item--enter,
202
+ .payload__modal-item--enterDone {
203
+ z-index: var(--z-modal);
204
+ }
197
205
 
198
- .payload__modal-item--enter,
199
- .payload__modal-item--enterDone {
200
- z-index: var(--z-modal);
206
+ // @import '~payload-user-css'; TODO: re-enable this
201
207
  }
202
-
203
- // @import '~payload-user-css'; TODO: re-enable this