@payloadcms/ui 4.0.0-internal.cd69eef → 4.0.0-internal.d1cc1d3

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 (292) hide show
  1. package/dist/css/app.css +121 -0
  2. package/dist/css/forms.css +0 -6
  3. package/dist/css/spacing.css +11 -3
  4. package/dist/css/z-index.css +1 -0
  5. package/dist/elements/AddNewRelation/index.css +0 -1
  6. package/dist/elements/AppHeader/index.css +0 -3
  7. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  8. package/dist/elements/AppHeader/index.js +5 -1
  9. package/dist/elements/AppHeader/index.js.map +1 -1
  10. package/dist/elements/ArrayAction/index.d.ts +2 -0
  11. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  12. package/dist/elements/ArrayAction/index.js +65 -24
  13. package/dist/elements/ArrayAction/index.js.map +1 -1
  14. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +2 -2
  15. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  16. package/dist/elements/BulkUpload/FileSidebar/index.css +4 -0
  17. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts +8 -1
  18. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts.map +1 -1
  19. package/dist/elements/ClipboardAction/clipboardUtilities.js +40 -8
  20. package/dist/elements/ClipboardAction/clipboardUtilities.js.map +1 -1
  21. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +120 -0
  22. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +1 -0
  23. package/dist/elements/ClipboardAction/index.d.ts.map +1 -1
  24. package/dist/elements/ClipboardAction/index.js +17 -1
  25. package/dist/elements/ClipboardAction/index.js.map +1 -1
  26. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +144 -0
  27. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +1 -0
  28. package/dist/elements/ClipboardAction/types.d.ts +3 -0
  29. package/dist/elements/ClipboardAction/types.d.ts.map +1 -1
  30. package/dist/elements/ClipboardAction/types.js.map +1 -1
  31. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts +10 -0
  32. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts.map +1 -0
  33. package/dist/elements/ClipboardAction/useCanPasteClipboard.js +21 -0
  34. package/dist/elements/ClipboardAction/useCanPasteClipboard.js.map +1 -0
  35. package/dist/elements/CodeEditor/index.css +0 -5
  36. package/dist/elements/CommandPalette/index.css +0 -7
  37. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  38. package/dist/elements/CreateDocumentButton/index.js +4 -1
  39. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  40. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  41. package/dist/elements/DatePicker/DatePicker.js +1 -0
  42. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  43. package/dist/elements/DatePicker/index.css +1 -1
  44. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  45. package/dist/elements/DeleteDocument/index.js +16 -1
  46. package/dist/elements/DeleteDocument/index.js.map +1 -1
  47. package/dist/elements/EditMany/DrawerContent.js +2 -2
  48. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  49. package/dist/elements/FieldSelect/reduceFieldOptions.d.ts.map +1 -1
  50. package/dist/elements/FieldSelect/reduceFieldOptions.js +3 -1
  51. package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
  52. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +143 -0
  53. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +1 -0
  54. package/dist/elements/FileDetails/StaticFileDetails/index.css +8 -9
  55. package/dist/elements/FileManager/FilePreview/index.css +3 -3
  56. package/dist/elements/FileManager/index.css +36 -23
  57. package/dist/elements/FileManager/index.d.ts.map +1 -1
  58. package/dist/elements/FileManager/index.js +15 -4
  59. package/dist/elements/FileManager/index.js.map +1 -1
  60. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +0 -1
  61. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  62. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +109 -89
  63. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  64. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
  65. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +2 -0
  66. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
  67. package/dist/elements/Hierarchy/Tree/TreeNode/index.css +0 -1
  68. package/dist/elements/InputStepper/index.css +0 -1
  69. package/dist/elements/Locked/index.css +0 -8
  70. package/dist/elements/Locked/index.d.ts.map +1 -1
  71. package/dist/elements/Locked/index.js +70 -64
  72. package/dist/elements/Locked/index.js.map +1 -1
  73. package/dist/elements/MiniCarousel/index.css +39 -37
  74. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -1
  75. package/dist/elements/Nav/SidebarTabs/index.client.js +12 -5
  76. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  77. package/dist/elements/Nav/SidebarTabs/index.css +0 -5
  78. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts +1 -0
  79. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts.map +1 -1
  80. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +2 -1
  81. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
  82. package/dist/elements/NavGroup/index.css +0 -1
  83. package/dist/elements/PreviewButton/index.d.ts +1 -2
  84. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  85. package/dist/elements/PreviewButton/index.js +11 -5
  86. package/dist/elements/PreviewButton/index.js.map +1 -1
  87. package/dist/elements/PreviewSizes/index.css +8 -9
  88. package/dist/elements/ReactSelect/ClearIndicator/index.css +0 -1
  89. package/dist/elements/ReactSelect/MultiValue/index.css +0 -1
  90. package/dist/elements/ReactSelect/MultiValueLabel/index.css +2 -2
  91. package/dist/elements/ReactSelect/index.css +0 -3
  92. package/dist/elements/RelationshipTable/Pagination.d.ts +0 -1
  93. package/dist/elements/RelationshipTable/Pagination.d.ts.map +1 -1
  94. package/dist/elements/RelationshipTable/Pagination.js +27 -77
  95. package/dist/elements/RelationshipTable/Pagination.js.map +1 -1
  96. package/dist/elements/RelationshipTable/index.css +0 -2
  97. package/dist/elements/RelationshipTable/index.d.ts +1 -0
  98. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  99. package/dist/elements/RelationshipTable/index.js +36 -3
  100. package/dist/elements/RelationshipTable/index.js.map +1 -1
  101. package/dist/elements/RenderTitle/index.css +4 -0
  102. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  103. package/dist/elements/RenderTitle/index.js +18 -13
  104. package/dist/elements/RenderTitle/index.js.map +1 -1
  105. package/dist/elements/SelectRow/index.d.ts +4 -3
  106. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  107. package/dist/elements/SelectRow/index.js +10 -7
  108. package/dist/elements/SelectRow/index.js.map +1 -1
  109. package/dist/elements/SidebarToggle/index.css +0 -17
  110. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  111. package/dist/elements/SortColumn/index.js +42 -38
  112. package/dist/elements/SortColumn/index.js.map +1 -1
  113. package/dist/elements/Table/OrderableRow.d.ts +3 -1
  114. package/dist/elements/Table/OrderableRow.d.ts.map +1 -1
  115. package/dist/elements/Table/OrderableRow.js +17 -1
  116. package/dist/elements/Table/OrderableRow.js.map +1 -1
  117. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  118. package/dist/elements/Table/OrderableTable.js +19 -2
  119. package/dist/elements/Table/OrderableTable.js.map +1 -1
  120. package/dist/elements/Table/index.css +1 -0
  121. package/dist/elements/TableSection/index.css +0 -1
  122. package/dist/elements/TimezonePicker/index.d.ts.map +1 -1
  123. package/dist/elements/TimezonePicker/index.js +5 -1
  124. package/dist/elements/TimezonePicker/index.js.map +1 -1
  125. package/dist/elements/Tooltip/index.css +15 -34
  126. package/dist/elements/Tooltip/index.d.ts +11 -3
  127. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  128. package/dist/elements/Tooltip/index.js +151 -85
  129. package/dist/elements/Tooltip/index.js.map +1 -1
  130. package/dist/elements/Upload/index.css +0 -5
  131. package/dist/exports/client/index.d.ts +3 -0
  132. package/dist/exports/client/index.d.ts.map +1 -1
  133. package/dist/exports/client/index.js +1 -1
  134. package/dist/exports/client/index.js.map +3 -3
  135. package/dist/exports/shared/index.d.ts +1 -0
  136. package/dist/exports/shared/index.d.ts.map +1 -1
  137. package/dist/exports/shared/index.js +2 -2
  138. package/dist/exports/shared/index.js.map +4 -4
  139. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  140. package/dist/fields/Array/ArrayRow.js +97 -160
  141. package/dist/fields/Array/ArrayRow.js.map +1 -1
  142. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  143. package/dist/fields/Blocks/BlockRow.js +134 -195
  144. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  145. package/dist/fields/Blocks/RowActions.d.ts +2 -0
  146. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  147. package/dist/fields/Blocks/RowActions.js +23 -20
  148. package/dist/fields/Blocks/RowActions.js.map +1 -1
  149. package/dist/fields/Blocks/index.js +3 -3
  150. package/dist/fields/Blocks/index.js.map +1 -1
  151. package/dist/fields/Checkbox/Input.d.ts +2 -0
  152. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  153. package/dist/fields/Checkbox/Input.js +32 -26
  154. package/dist/fields/Checkbox/Input.js.map +1 -1
  155. package/dist/fields/Checkbox/index.css +37 -73
  156. package/dist/fields/FieldError/index.css +0 -9
  157. package/dist/fields/FieldError/index.d.ts.map +1 -1
  158. package/dist/fields/FieldError/index.js +19 -9
  159. package/dist/fields/FieldError/index.js.map +1 -1
  160. package/dist/fields/Join/index.css +9 -0
  161. package/dist/fields/Join/index.d.ts.map +1 -1
  162. package/dist/fields/Join/index.js +13 -9
  163. package/dist/fields/Join/index.js.map +1 -1
  164. package/dist/fields/RadioGroup/index.css +0 -7
  165. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  166. package/dist/fields/Relationship/Input.js +32 -14
  167. package/dist/fields/Relationship/Input.js.map +1 -1
  168. package/dist/fields/Relationship/select-components/MultiValueLabel/index.css +1 -1
  169. package/dist/fields/Slug/index.css +0 -1
  170. package/dist/fields/Slug/index.d.ts.map +1 -1
  171. package/dist/fields/Slug/index.js +75 -111
  172. package/dist/fields/Slug/index.js.map +1 -1
  173. package/dist/fields/Upload/index.css +19 -4
  174. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  175. package/dist/forms/Form/fieldReducer.js +3 -1
  176. package/dist/forms/Form/fieldReducer.js.map +1 -1
  177. package/dist/forms/Form/index.d.ts.map +1 -1
  178. package/dist/forms/Form/index.js +6 -1
  179. package/dist/forms/Form/index.js.map +1 -1
  180. package/dist/forms/Form/types.d.ts +1 -1
  181. package/dist/forms/Form/types.d.ts.map +1 -1
  182. package/dist/forms/Form/types.js.map +1 -1
  183. package/dist/forms/RenderFields/index.css +16 -2
  184. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  185. package/dist/forms/WatchChildErrors/index.js +2 -2
  186. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  187. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -1
  188. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  189. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  190. package/dist/forms/fieldSchemasToFormState/renderField.js +1 -3
  191. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  192. package/dist/layouts/Root/index.d.ts +1 -1
  193. package/dist/layouts/Root/index.d.ts.map +1 -1
  194. package/dist/layouts/Root/index.js +12 -4
  195. package/dist/layouts/Root/index.js.map +1 -1
  196. package/dist/providers/DocumentTitle/index.d.ts +1 -0
  197. package/dist/providers/DocumentTitle/index.d.ts.map +1 -1
  198. package/dist/providers/DocumentTitle/index.js +2 -0
  199. package/dist/providers/DocumentTitle/index.js.map +1 -1
  200. package/dist/providers/Embed/index.d.ts +24 -0
  201. package/dist/providers/Embed/index.d.ts.map +1 -0
  202. package/dist/providers/Embed/index.js +105 -0
  203. package/dist/providers/Embed/index.js.map +1 -0
  204. package/dist/providers/FormErrorHandler/index.d.ts +20 -0
  205. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -0
  206. package/dist/providers/FormErrorHandler/index.js +6 -0
  207. package/dist/providers/FormErrorHandler/index.js.map +1 -0
  208. package/dist/providers/Root/index.d.ts +1 -0
  209. package/dist/providers/Root/index.d.ts.map +1 -1
  210. package/dist/providers/Root/index.js +33 -27
  211. package/dist/providers/Root/index.js.map +1 -1
  212. package/dist/providers/SidebarTabs/index.d.ts +3 -2
  213. package/dist/providers/SidebarTabs/index.d.ts.map +1 -1
  214. package/dist/providers/SidebarTabs/index.js.map +1 -1
  215. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  216. package/dist/providers/TableColumns/buildColumnState/index.js +1 -1
  217. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  218. package/dist/providers/TableColumns/buildColumnState/index.spec.js +40 -0
  219. package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +1 -0
  220. package/dist/providers/Theme/index.d.ts +5 -2
  221. package/dist/providers/Theme/index.d.ts.map +1 -1
  222. package/dist/providers/Theme/index.js +109 -96
  223. package/dist/providers/Theme/index.js.map +1 -1
  224. package/dist/providers/Theme/shared.d.ts +3 -0
  225. package/dist/providers/Theme/shared.d.ts.map +1 -0
  226. package/dist/providers/Theme/shared.js +2 -0
  227. package/dist/providers/Theme/shared.js.map +1 -0
  228. package/dist/providers/UploadHandlers/index.js +2 -2
  229. package/dist/providers/UploadHandlers/index.js.map +1 -1
  230. package/dist/styles.css +13 -10
  231. package/dist/utilities/combineFieldLabel.d.ts.map +1 -1
  232. package/dist/utilities/combineFieldLabel.js +5 -1
  233. package/dist/utilities/combineFieldLabel.js.map +1 -1
  234. package/dist/utilities/generateFieldID.d.ts +1 -1
  235. package/dist/utilities/generateFieldID.d.ts.map +1 -1
  236. package/dist/utilities/generateFieldID.js +2 -2
  237. package/dist/utilities/generateFieldID.js.map +1 -1
  238. package/dist/utilities/getLanguageDir.d.ts +12 -0
  239. package/dist/utilities/getLanguageDir.d.ts.map +1 -0
  240. package/dist/utilities/getLanguageDir.js +12 -0
  241. package/dist/utilities/getLanguageDir.js.map +1 -0
  242. package/dist/utilities/getRequestEmbed.d.ts +14 -0
  243. package/dist/utilities/getRequestEmbed.d.ts.map +1 -0
  244. package/dist/utilities/getRequestEmbed.js +10 -0
  245. package/dist/utilities/getRequestEmbed.js.map +1 -0
  246. package/dist/utilities/getRequestTheme.d.ts +1 -1
  247. package/dist/utilities/getRequestTheme.d.ts.map +1 -1
  248. package/dist/utilities/getRequestTheme.js +1 -1
  249. package/dist/utilities/getRequestTheme.js.map +1 -1
  250. package/dist/utilities/handleServerFunctions.d.ts +32 -8
  251. package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
  252. package/dist/utilities/handleServerFunctions.js +17 -37
  253. package/dist/utilities/handleServerFunctions.js.map +1 -1
  254. package/dist/utilities/renderTable.d.ts.map +1 -1
  255. package/dist/utilities/renderTable.js +18 -2
  256. package/dist/utilities/renderTable.js.map +1 -1
  257. package/dist/utilities/serverFunctionRegistry.d.ts +12 -7
  258. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  259. package/dist/utilities/serverFunctionRegistry.js +25 -7
  260. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  261. package/dist/utilities/slugify.d.ts.map +1 -1
  262. package/dist/utilities/slugify.js +49 -6
  263. package/dist/utilities/slugify.js.map +1 -1
  264. package/dist/views/Dashboard/Default/ModularDashboard/index.css +0 -8
  265. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +4 -4
  266. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  267. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +10 -10
  268. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  269. package/dist/views/Edit/index.css +61 -53
  270. package/dist/views/HierarchyList/index.css +1 -1
  271. package/dist/views/List/index.css +1 -1
  272. package/dist/views/List/index.d.ts.map +1 -1
  273. package/dist/views/List/index.js +4 -0
  274. package/dist/views/List/index.js.map +1 -1
  275. package/dist/views/Logout/index.d.ts.map +1 -1
  276. package/dist/views/Logout/index.js +11 -0
  277. package/dist/views/Logout/index.js.map +1 -1
  278. package/dist/views/Root/index.d.ts +12 -1
  279. package/dist/views/Root/index.d.ts.map +1 -1
  280. package/dist/views/Root/index.js +10 -3
  281. package/dist/views/Root/index.js.map +1 -1
  282. package/package.json +5 -10
  283. package/dist/elements/RelationshipTable/Pagination.css +0 -39
  284. package/dist/scss/app.scss +0 -183
  285. package/dist/scss/colors.scss +0 -191
  286. package/dist/scss/custom.css +0 -1
  287. package/dist/scss/queries.scss +0 -27
  288. package/dist/scss/styles.scss +0 -9
  289. package/dist/scss/svg.scss +0 -10
  290. package/dist/scss/toastify.scss +0 -61
  291. package/dist/scss/vars.scss +0 -192
  292. package/dist/scss/z-index.scss +0 -9
@@ -4,6 +4,9 @@ import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
5
  import React, { createContext, use, useCallback, useEffect, useState } from 'react';
6
6
  import { useConfig } from '../Config/index.js';
7
+ import { useSearchParams } from '../RouterAdapter/index.js';
8
+ import { defaultTheme } from './shared.js';
9
+ export { defaultTheme };
7
10
  const initialContext = {
8
11
  autoMode: true,
9
12
  highContrastMode: false,
@@ -37,7 +40,7 @@ const detectHighContrastMode = cookieKey => {
37
40
  }
38
41
  return isHighContrast;
39
42
  };
40
- export const defaultTheme = 'light';
43
+ const isValidThemeParam = value => value === 'auto' || value === 'light' || value === 'dark';
41
44
  /**
42
45
  * Provides theme context to its children.
43
46
  *
@@ -48,9 +51,12 @@ export const defaultTheme = 'light';
48
51
  * scoped visual the `theme` prop sets the local theme, but setThemeoverride
49
52
  * and setHighContrastMode bubble up through each level to the root provider so
50
53
  * mutations always affect the global user preference.
54
+ *
55
+ * The ThemeProvider also reads the `?theme=light|dark|auto` query parameter and
56
+ * persists it to the theme cookie using the same mechanism as manual theme selection.
51
57
  */
52
58
  export const ThemeProvider = t0 => {
53
- const $ = _c(30);
59
+ const $ = _c(32);
54
60
  const {
55
61
  children,
56
62
  highContrastMode: initialHighContrastMode,
@@ -64,80 +70,13 @@ export const ThemeProvider = t0 => {
64
70
  const preselectedTheme = config.admin.theme;
65
71
  const themeCookieKey = `${config.cookiePrefix || "payload"}-theme`;
66
72
  const contrastCookieKey = `${config.cookiePrefix || "payload"}-high-contrast-mode`;
73
+ const themeParam = useSearchParams().get("theme")?.toLowerCase();
67
74
  const [theme, setThemeState] = useState(themeOverride ?? defaultTheme);
68
75
  const [autoMode, setAutoMode] = useState(!isScoped);
69
76
  const [highContrastMode, setHighContrastModeState] = useState(isScoped ? outerContext.highContrastMode ?? false : initialHighContrastMode ?? false);
70
77
  let t1;
71
- if ($[0] !== isScoped || $[1] !== outerContext) {
72
- t1 = () => {
73
- if (isScoped) {
74
- setHighContrastModeState(outerContext.highContrastMode);
75
- }
76
- };
77
- $[0] = isScoped;
78
- $[1] = outerContext;
79
- $[2] = t1;
80
- } else {
81
- t1 = $[2];
82
- }
83
- const t2 = outerContext?.highContrastMode;
84
- let t3;
85
- if ($[3] !== isScoped || $[4] !== t2) {
86
- t3 = [isScoped, t2];
87
- $[3] = isScoped;
88
- $[4] = t2;
89
- $[5] = t3;
90
- } else {
91
- t3 = $[5];
92
- }
93
- useEffect(t1, t3);
94
- let t4;
95
- let t5;
96
- if ($[6] !== isScoped || $[7] !== preselectedTheme || $[8] !== themeCookieKey) {
97
- t4 = () => {
98
- if (isScoped || preselectedTheme !== "all") {
99
- return;
100
- }
101
- const {
102
- isAutoMode,
103
- theme: detectedTheme
104
- } = detectTheme(themeCookieKey);
105
- setThemeState(detectedTheme);
106
- setAutoMode(isAutoMode);
107
- };
108
- t5 = [isScoped, preselectedTheme, themeCookieKey];
109
- $[6] = isScoped;
110
- $[7] = preselectedTheme;
111
- $[8] = themeCookieKey;
112
- $[9] = t4;
113
- $[10] = t5;
114
- } else {
115
- t4 = $[9];
116
- t5 = $[10];
117
- }
118
- useEffect(t4, t5);
119
- let t6;
120
- let t7;
121
- if ($[11] !== contrastCookieKey || $[12] !== isScoped) {
122
- t6 = () => {
123
- if (isScoped) {
124
- return;
125
- }
126
- setHighContrastModeState(detectHighContrastMode(contrastCookieKey));
127
- };
128
- t7 = [isScoped, contrastCookieKey];
129
- $[11] = contrastCookieKey;
130
- $[12] = isScoped;
131
- $[13] = t6;
132
- $[14] = t7;
133
- } else {
134
- t6 = $[13];
135
- t7 = $[14];
136
- }
137
- useEffect(t6, t7);
138
- let t8;
139
- if ($[15] !== isScoped || $[16] !== outerContext || $[17] !== themeCookieKey) {
140
- t8 = (themeToSet, options) => {
78
+ if ($[0] !== isScoped || $[1] !== outerContext || $[2] !== themeCookieKey) {
79
+ t1 = (themeToSet, options) => {
141
80
  if (isScoped && !options?.scoped) {
142
81
  outerContext.setTheme(themeToSet, options);
143
82
  return;
@@ -150,17 +89,17 @@ export const ThemeProvider = t0 => {
150
89
  document.documentElement.setAttribute("data-theme", resolvedTheme);
151
90
  }
152
91
  };
153
- $[15] = isScoped;
154
- $[16] = outerContext;
155
- $[17] = themeCookieKey;
156
- $[18] = t8;
92
+ $[0] = isScoped;
93
+ $[1] = outerContext;
94
+ $[2] = themeCookieKey;
95
+ $[3] = t1;
157
96
  } else {
158
- t8 = $[18];
97
+ t1 = $[3];
159
98
  }
160
- const setTheme = t8;
161
- let t9;
162
- if ($[19] !== contrastCookieKey || $[20] !== isScoped || $[21] !== outerContext) {
163
- t9 = (isHighContrast, options_0) => {
99
+ const setTheme = t1;
100
+ let t2;
101
+ if ($[4] !== contrastCookieKey || $[5] !== isScoped || $[6] !== outerContext) {
102
+ t2 = (isHighContrast, options_0) => {
164
103
  if (isScoped && !options_0?.scoped) {
165
104
  outerContext.setHighContrastMode(isHighContrast, options_0);
166
105
  return;
@@ -175,18 +114,92 @@ export const ThemeProvider = t0 => {
175
114
  }
176
115
  }
177
116
  };
178
- $[19] = contrastCookieKey;
179
- $[20] = isScoped;
180
- $[21] = outerContext;
181
- $[22] = t9;
117
+ $[4] = contrastCookieKey;
118
+ $[5] = isScoped;
119
+ $[6] = outerContext;
120
+ $[7] = t2;
121
+ } else {
122
+ t2 = $[7];
123
+ }
124
+ const setHighContrastMode = t2;
125
+ let t3;
126
+ if ($[8] !== isScoped || $[9] !== outerContext) {
127
+ t3 = () => {
128
+ if (isScoped) {
129
+ setHighContrastModeState(outerContext.highContrastMode);
130
+ }
131
+ };
132
+ $[8] = isScoped;
133
+ $[9] = outerContext;
134
+ $[10] = t3;
135
+ } else {
136
+ t3 = $[10];
137
+ }
138
+ const t4 = outerContext?.highContrastMode;
139
+ let t5;
140
+ if ($[11] !== isScoped || $[12] !== t4) {
141
+ t5 = [isScoped, t4];
142
+ $[11] = isScoped;
143
+ $[12] = t4;
144
+ $[13] = t5;
145
+ } else {
146
+ t5 = $[13];
147
+ }
148
+ useEffect(t3, t5);
149
+ let t6;
150
+ let t7;
151
+ if ($[14] !== isScoped || $[15] !== preselectedTheme || $[16] !== setTheme || $[17] !== themeCookieKey || $[18] !== themeParam) {
152
+ t6 = () => {
153
+ if (isScoped || preselectedTheme !== "all") {
154
+ return;
155
+ }
156
+ if (isValidThemeParam(themeParam)) {
157
+ setTheme(themeParam);
158
+ return;
159
+ }
160
+ const {
161
+ isAutoMode,
162
+ theme: detectedTheme
163
+ } = detectTheme(themeCookieKey);
164
+ setThemeState(detectedTheme);
165
+ setAutoMode(isAutoMode);
166
+ };
167
+ t7 = [isScoped, preselectedTheme, themeCookieKey, themeParam, setTheme];
168
+ $[14] = isScoped;
169
+ $[15] = preselectedTheme;
170
+ $[16] = setTheme;
171
+ $[17] = themeCookieKey;
172
+ $[18] = themeParam;
173
+ $[19] = t6;
174
+ $[20] = t7;
175
+ } else {
176
+ t6 = $[19];
177
+ t7 = $[20];
178
+ }
179
+ useEffect(t6, t7);
180
+ let t8;
181
+ let t9;
182
+ if ($[21] !== contrastCookieKey || $[22] !== isScoped) {
183
+ t8 = () => {
184
+ if (isScoped) {
185
+ return;
186
+ }
187
+ setHighContrastModeState(detectHighContrastMode(contrastCookieKey));
188
+ };
189
+ t9 = [isScoped, contrastCookieKey];
190
+ $[21] = contrastCookieKey;
191
+ $[22] = isScoped;
192
+ $[23] = t8;
193
+ $[24] = t9;
182
194
  } else {
183
- t9 = $[22];
195
+ t8 = $[23];
196
+ t9 = $[24];
184
197
  }
185
- const setHighContrastMode = t9;
198
+ useEffect(t8, t9);
186
199
  const t10 = isScoped ? outerContext.autoMode : autoMode;
187
200
  const t11 = isScoped ? outerContext.theme : theme;
188
201
  let t12;
189
- if ($[23] !== children || $[24] !== highContrastMode || $[25] !== setHighContrastMode || $[26] !== setTheme || $[27] !== t10 || $[28] !== t11) {
202
+ if ($[25] !== children || $[26] !== highContrastMode || $[27] !== setHighContrastMode || $[28] !== setTheme || $[29] !== t10 || $[30] !== t11) {
190
203
  t12 = _jsx(Context, {
191
204
  value: {
192
205
  autoMode: t10,
@@ -197,15 +210,15 @@ export const ThemeProvider = t0 => {
197
210
  },
198
211
  children
199
212
  });
200
- $[23] = children;
201
- $[24] = highContrastMode;
202
- $[25] = setHighContrastMode;
203
- $[26] = setTheme;
204
- $[27] = t10;
205
- $[28] = t11;
206
- $[29] = t12;
213
+ $[25] = children;
214
+ $[26] = highContrastMode;
215
+ $[27] = setHighContrastMode;
216
+ $[28] = setTheme;
217
+ $[29] = t10;
218
+ $[30] = t11;
219
+ $[31] = t12;
207
220
  } else {
208
- t12 = $[29];
221
+ t12 = $[31];
209
222
  }
210
223
  return t12;
211
224
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","createContext","use","useCallback","useEffect","useState","useConfig","initialContext","autoMode","highContrastMode","setHighContrastMode","setTheme","theme","Context","undefined","setCookie","cname","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","document","cookie","detectTheme","cookieKey","fromCookie","window","split","find","row","startsWith","matchMedia","matches","documentElement","setAttribute","isAutoMode","detectHighContrastMode","isHighContrast","removeAttribute","defaultTheme","ThemeProvider","t0","$","children","initialHighContrastMode","themeOverride","outerContext","isScoped","config","preselectedTheme","admin","themeCookieKey","cookiePrefix","contrastCookieKey","setThemeState","setAutoMode","setHighContrastModeState","t1","t2","t3","t4","t5","detectedTheme","t6","t7","t8","themeToSet","options","scoped","resolvedTheme","t9","options_0","String","t10","t11","t12","_jsx","value","useTheme"],"sources":["../../../src/providers/Theme/index.tsx"],"sourcesContent":["'use client'\nimport React, { createContext, use, useCallback, useEffect, useState } from 'react'\n\nimport { useConfig } from '../Config/index.js'\n\nexport type Theme = 'dark' | 'light'\n\nexport type ThemeContext = {\n autoMode: boolean\n highContrastMode: boolean\n setHighContrastMode: (isHighContrast: boolean, options?: { scoped?: boolean }) => void\n setTheme: (theme: 'auto' | Theme, options?: { scoped?: boolean }) => void\n theme: Theme\n}\n\nconst initialContext: ThemeContext = {\n autoMode: true,\n highContrastMode: false,\n setHighContrastMode: () => null,\n setTheme: () => null,\n theme: 'light',\n}\n\nconst Context = createContext<ThemeContext | undefined>(undefined)\n\nfunction setCookie(cname: string, cvalue: string, exdays: number) {\n const d = new Date()\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000)\n const expires = 'expires=' + d.toUTCString()\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/'\n}\n\nconst detectTheme = (cookieKey: string): { isAutoMode: boolean; theme: Theme } => {\n const fromCookie = window.document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${cookieKey}=`))\n ?.split('=')[1]\n\n const theme: Theme =\n fromCookie === 'light' || fromCookie === 'dark'\n ? fromCookie\n : window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n\n document.documentElement.setAttribute('data-theme', theme)\n\n return { isAutoMode: fromCookie !== 'light' && fromCookie !== 'dark', theme }\n}\n\nconst detectHighContrastMode = (cookieKey: string): boolean => {\n const fromCookie =\n window.document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${cookieKey}=`))\n ?.split('=')[1] ?? null\n\n const isHighContrast =\n fromCookie === 'true'\n ? true\n : fromCookie === 'false'\n ? false\n : !!(window.matchMedia && window.matchMedia('(prefers-contrast: more)').matches)\n\n if (isHighContrast) {\n document.documentElement.setAttribute('data-enhanced-contrast', '')\n } else {\n document.documentElement.removeAttribute('data-enhanced-contrast')\n }\n\n return isHighContrast\n}\n\nexport const defaultTheme: Theme = 'light'\n\n/**\n * Provides theme context to its children.\n *\n * At the root (no parent ThemeProvider): reads/writes cookies, responds to\n * OS preference, owns setTheme and setHighContrastMode.\n *\n * When nested inside another ThemeProvider (e.g. inside a Popup): acts as a\n * scoped visual the `theme` prop sets the local theme, but setThemeoverride\n * and setHighContrastMode bubble up through each level to the root provider so\n * mutations always affect the global user preference.\n */\nexport const ThemeProvider: React.FC<{\n children?: React.ReactNode\n highContrastMode?: boolean\n theme?: Theme\n}> = ({ children, highContrastMode: initialHighContrastMode, theme: themeOverride }) => {\n const outerContext = use(Context)\n const isScoped = outerContext !== undefined\n\n const { config } = useConfig()\n const preselectedTheme = config.admin.theme\n const themeCookieKey = `${config.cookiePrefix || 'payload'}-theme`\n const contrastCookieKey = `${config.cookiePrefix || 'payload'}-high-contrast-mode`\n\n const [theme, setThemeState] = useState<Theme>(themeOverride ?? defaultTheme)\n const [autoMode, setAutoMode] = useState<boolean>(!isScoped)\n const [highContrastMode, setHighContrastModeState] = useState<boolean>(\n isScoped ? (outerContext.highContrastMode ?? false) : (initialHighContrastMode ?? false),\n )\n\n // Keep highContrastMode in sync with the outer provider when scoped.\n useEffect(() => {\n if (isScoped) {\n setHighContrastModeState(outerContext.highContrastMode)\n }\n }, [isScoped, outerContext?.highContrastMode])\n\n useEffect(() => {\n if (isScoped || preselectedTheme !== 'all') {\n return\n }\n const { isAutoMode, theme: detectedTheme } = detectTheme(themeCookieKey)\n setThemeState(detectedTheme)\n setAutoMode(isAutoMode)\n }, [isScoped, preselectedTheme, themeCookieKey])\n\n useEffect(() => {\n if (isScoped) {\n return\n }\n setHighContrastModeState(detectHighContrastMode(contrastCookieKey))\n }, [isScoped, contrastCookieKey])\n\n // Setters bubble up to the root provider by default. Pass { scoped: true }\n // to update only the local (scoped) theme without affecting global state.\n const setTheme = useCallback(\n (themeToSet: 'auto' | Theme, options?: { scoped?: boolean }) => {\n if (isScoped && !options?.scoped) {\n outerContext.setTheme(themeToSet, options)\n return\n }\n const resolvedTheme: Theme =\n themeToSet === 'auto'\n ? window.matchMedia?.('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : themeToSet\n\n setThemeState(resolvedTheme)\n setAutoMode(themeToSet === 'auto')\n\n if (!isScoped) {\n setCookie(themeCookieKey, themeToSet, themeToSet === 'auto' ? -1 : 365)\n document.documentElement.setAttribute('data-theme', resolvedTheme)\n }\n },\n [isScoped, outerContext, themeCookieKey],\n )\n\n const setHighContrastMode = useCallback(\n (isHighContrast: boolean, options?: { scoped?: boolean }) => {\n if (isScoped && !options?.scoped) {\n outerContext.setHighContrastMode(isHighContrast, options)\n return\n }\n setHighContrastModeState(isHighContrast)\n if (!isScoped) {\n setCookie(contrastCookieKey, String(isHighContrast), 365)\n if (isHighContrast) {\n document.documentElement.setAttribute('data-enhanced-contrast', '')\n } else {\n document.documentElement.removeAttribute('data-enhanced-contrast')\n }\n }\n },\n [isScoped, outerContext, contrastCookieKey],\n )\n\n return (\n <Context\n value={{\n autoMode: isScoped ? outerContext.autoMode : autoMode,\n highContrastMode,\n setHighContrastMode,\n setTheme,\n theme: isScoped ? outerContext.theme : theme,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport const useTheme = (): ThemeContext => use(Context) ?? initialContext\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","createContext","use","useCallback","useEffect","useState","useConfig","useSearchParams","defaultTheme","initialContext","autoMode","highContrastMode","setHighContrastMode","setTheme","theme","Context","undefined","setCookie","cname","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","document","cookie","detectTheme","cookieKey","fromCookie","window","split","find","row","startsWith","matchMedia","matches","documentElement","setAttribute","isAutoMode","detectHighContrastMode","isHighContrast","removeAttribute","isValidThemeParam","value","ThemeProvider","t0","$","children","initialHighContrastMode","themeOverride","outerContext","isScoped","config","preselectedTheme","admin","themeCookieKey","cookiePrefix","contrastCookieKey","themeParam","get","toLowerCase","setThemeState","setAutoMode","setHighContrastModeState","t1","themeToSet","options","scoped","resolvedTheme","t2","options_0","String","t3","t4","t5","t6","t7","detectedTheme","t8","t9","t10","t11","t12","_jsx","useTheme"],"sources":["../../../src/providers/Theme/index.tsx"],"sourcesContent":["'use client'\nimport React, { createContext, use, useCallback, useEffect, useState } from 'react'\n\nimport { useConfig } from '../Config/index.js'\nimport { useSearchParams } from '../RouterAdapter/index.js'\nimport { defaultTheme, type Theme } from './shared.js'\n\nexport { defaultTheme, type Theme }\n\nexport type ThemeContext = {\n autoMode: boolean\n highContrastMode: boolean\n setHighContrastMode: (isHighContrast: boolean, options?: { scoped?: boolean }) => void\n setTheme: (theme: 'auto' | Theme, options?: { scoped?: boolean }) => void\n theme: Theme\n}\n\nconst initialContext: ThemeContext = {\n autoMode: true,\n highContrastMode: false,\n setHighContrastMode: () => null,\n setTheme: () => null,\n theme: 'light',\n}\n\nconst Context = createContext<ThemeContext | undefined>(undefined)\n\nfunction setCookie(cname: string, cvalue: string, exdays: number) {\n const d = new Date()\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000)\n const expires = 'expires=' + d.toUTCString()\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/'\n}\n\nconst detectTheme = (cookieKey: string): { isAutoMode: boolean; theme: Theme } => {\n const fromCookie = window.document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${cookieKey}=`))\n ?.split('=')[1]\n\n const theme: Theme =\n fromCookie === 'light' || fromCookie === 'dark'\n ? fromCookie\n : window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n\n document.documentElement.setAttribute('data-theme', theme)\n\n return { isAutoMode: fromCookie !== 'light' && fromCookie !== 'dark', theme }\n}\n\nconst detectHighContrastMode = (cookieKey: string): boolean => {\n const fromCookie =\n window.document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${cookieKey}=`))\n ?.split('=')[1] ?? null\n\n const isHighContrast =\n fromCookie === 'true'\n ? true\n : fromCookie === 'false'\n ? false\n : !!(window.matchMedia && window.matchMedia('(prefers-contrast: more)').matches)\n\n if (isHighContrast) {\n document.documentElement.setAttribute('data-enhanced-contrast', '')\n } else {\n document.documentElement.removeAttribute('data-enhanced-contrast')\n }\n\n return isHighContrast\n}\n\nconst isValidThemeParam = (value: null | string): value is 'auto' | Theme =>\n value === 'auto' || value === 'light' || value === 'dark'\n\n/**\n * Provides theme context to its children.\n *\n * At the root (no parent ThemeProvider): reads/writes cookies, responds to\n * OS preference, owns setTheme and setHighContrastMode.\n *\n * When nested inside another ThemeProvider (e.g. inside a Popup): acts as a\n * scoped visual the `theme` prop sets the local theme, but setThemeoverride\n * and setHighContrastMode bubble up through each level to the root provider so\n * mutations always affect the global user preference.\n *\n * The ThemeProvider also reads the `?theme=light|dark|auto` query parameter and\n * persists it to the theme cookie using the same mechanism as manual theme selection.\n */\nexport const ThemeProvider: React.FC<{\n children?: React.ReactNode\n highContrastMode?: boolean\n theme?: Theme\n}> = ({ children, highContrastMode: initialHighContrastMode, theme: themeOverride }) => {\n const outerContext = use(Context)\n const isScoped = outerContext !== undefined\n\n const { config } = useConfig()\n const preselectedTheme = config.admin.theme\n const themeCookieKey = `${config.cookiePrefix || 'payload'}-theme`\n const contrastCookieKey = `${config.cookiePrefix || 'payload'}-high-contrast-mode`\n\n const themeParam = useSearchParams().get('theme')?.toLowerCase()\n\n const [theme, setThemeState] = useState<Theme>(themeOverride ?? defaultTheme)\n const [autoMode, setAutoMode] = useState<boolean>(!isScoped)\n const [highContrastMode, setHighContrastModeState] = useState<boolean>(\n isScoped ? (outerContext.highContrastMode ?? false) : (initialHighContrastMode ?? false),\n )\n\n // Setters bubble up to the root provider by default. Pass { scoped: true }\n // to update only the local (scoped) theme without affecting global state.\n const setTheme = useCallback(\n (themeToSet: 'auto' | Theme, options?: { scoped?: boolean }) => {\n if (isScoped && !options?.scoped) {\n outerContext.setTheme(themeToSet, options)\n return\n }\n const resolvedTheme: Theme =\n themeToSet === 'auto'\n ? window.matchMedia?.('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : themeToSet\n\n setThemeState(resolvedTheme)\n setAutoMode(themeToSet === 'auto')\n\n if (!isScoped) {\n setCookie(themeCookieKey, themeToSet, themeToSet === 'auto' ? -1 : 365)\n document.documentElement.setAttribute('data-theme', resolvedTheme)\n }\n },\n [isScoped, outerContext, themeCookieKey],\n )\n\n const setHighContrastMode = useCallback(\n (isHighContrast: boolean, options?: { scoped?: boolean }) => {\n if (isScoped && !options?.scoped) {\n outerContext.setHighContrastMode(isHighContrast, options)\n return\n }\n setHighContrastModeState(isHighContrast)\n if (!isScoped) {\n setCookie(contrastCookieKey, String(isHighContrast), 365)\n if (isHighContrast) {\n document.documentElement.setAttribute('data-enhanced-contrast', '')\n } else {\n document.documentElement.removeAttribute('data-enhanced-contrast')\n }\n }\n },\n [isScoped, outerContext, contrastCookieKey],\n )\n\n // Keep highContrastMode in sync with the outer provider when scoped.\n useEffect(() => {\n if (isScoped) {\n setHighContrastModeState(outerContext.highContrastMode)\n }\n }, [isScoped, outerContext?.highContrastMode])\n\n // Resolve the root theme: a valid `?theme` param wins (applied via setTheme so\n // it persists to the theme cookie exactly like a manual selection; otherwise\n // fall back to the cookie or OS preference.\n useEffect(() => {\n if (isScoped || preselectedTheme !== 'all') {\n return\n }\n if (isValidThemeParam(themeParam)) {\n setTheme(themeParam)\n return\n }\n const { isAutoMode, theme: detectedTheme } = detectTheme(themeCookieKey)\n setThemeState(detectedTheme)\n setAutoMode(isAutoMode)\n }, [isScoped, preselectedTheme, themeCookieKey, themeParam, setTheme])\n\n useEffect(() => {\n if (isScoped) {\n return\n }\n setHighContrastModeState(detectHighContrastMode(contrastCookieKey))\n }, [isScoped, contrastCookieKey])\n\n return (\n <Context\n value={{\n autoMode: isScoped ? outerContext.autoMode : autoMode,\n highContrastMode,\n setHighContrastMode,\n setTheme,\n theme: isScoped ? outerContext.theme : theme,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport const useTheme = (): ThemeContext => use(Context) ?? initialContext\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export type Theme = 'dark' | 'light';
2
+ export declare const defaultTheme: Theme;
3
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/providers/Theme/shared.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAEpC,eAAO,MAAM,YAAY,EAAE,KAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const defaultTheme = 'light';
2
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","names":["defaultTheme"],"sources":["../../../src/providers/Theme/shared.ts"],"sourcesContent":["export type Theme = 'dark' | 'light'\n\nexport const defaultTheme: Theme = 'light'\n"],"mappings":"AAEA,OAAO,MAAMA,YAAA,GAAsB","ignoreList":[]}
@@ -28,7 +28,7 @@ export const UploadHandlersProvider = t0 => {
28
28
  } = t2;
29
29
  if (!getEntityConfig({
30
30
  collectionSlug
31
- })?.upload?.uploadInstructions) {
31
+ })?.upload?.uploadInstructions.useInAdmin) {
32
32
  return null;
33
33
  }
34
34
  return async t3 => {
@@ -96,7 +96,7 @@ export const UploadHandlersProvider = t0 => {
96
96
  });
97
97
  return typeof result === "object" && result !== null ? {
98
98
  ...uploadedFile,
99
- directUpload: result
99
+ uploadReference: result
100
100
  } : uploadedFile;
101
101
  };
102
102
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","formatAdminURL","React","useConfig","Context","createContext","UploadHandlersProvider","t0","$","children","config","getEntityConfig","t1","routes","api","serverURL","uploadInstructionsURL","apiRoute","path","getUploadHandler","t2","collectionSlug","upload","uploadInstructions","t3","docPrefix","file","response","fetch","body","JSON","stringify","filename","name","filesize","size","mimeType","type","credentials","headers","method","ok","errors","json","Error","map","_temp","join","instructions","uploadedFile","url","request","status","result","Promise","resolve","reject","event","CustomEvent","cancelable","detail","data","updateFilename","window","dispatchEvent","directUpload","_jsx","value","useUploadHandlers","context","use","message"],"sources":["../../../src/providers/UploadHandlers/index.tsx"],"sourcesContent":["'use client'\nimport type { UploadCollectionSlug, UploadInstructions } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport React from 'react'\n\nimport { useConfig } from '../Config/index.js'\n\ntype UploadHandler = (args: {\n docPrefix?: string\n file: File\n}) => Promise<UploadInstructions['file']>\n\nexport type UploadHandlersContext = {\n getUploadHandler: (args: { collectionSlug: UploadCollectionSlug }) => null | UploadHandler\n}\n\nconst Context = React.createContext<null | UploadHandlersContext>(null)\n\nexport const UploadHandlersProvider = ({ children }) => {\n const { config, getEntityConfig } = useConfig()\n const uploadInstructionsURL = formatAdminURL({\n apiRoute: config.routes.api,\n path: '/upload-instructions',\n serverURL: config.serverURL,\n })\n const getUploadHandler: UploadHandlersContext['getUploadHandler'] = ({ collectionSlug }) => {\n if (!getEntityConfig({ collectionSlug })?.upload?.uploadInstructions) {\n return null\n }\n\n return async ({ docPrefix, file }) => {\n const response = await fetch(uploadInstructionsURL, {\n body: JSON.stringify({\n collectionSlug,\n docPrefix,\n filename: file.name,\n filesize: file.size,\n mimeType: file.type,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n })\n\n if (!response.ok) {\n const { errors } = (await response.json()) as { errors: { message: string }[] }\n throw new Error(errors.map(({ message }) => message).join(', '))\n }\n\n const instructions = (await response.json()) as UploadInstructions\n let uploadedFile = instructions.file\n\n if (instructions.type === 'http') {\n const { url, ...request } = instructions.request\n const upload = await fetch(url, { body: file, ...request })\n\n if (!upload.ok) {\n throw new Error(`Upload failed with status ${upload.status}`)\n }\n\n return uploadedFile\n }\n\n const result = await new Promise<unknown>((resolve, reject) => {\n const event = new CustomEvent(`payload:upload:${instructions.name}`, {\n cancelable: true,\n detail: {\n collectionSlug,\n data: instructions.data,\n docPrefix,\n file,\n reject,\n resolve,\n updateFilename: (filename: string) => {\n uploadedFile = { ...uploadedFile, filename }\n },\n },\n })\n\n if (window.dispatchEvent(event)) {\n reject(new Error(`Unsupported upload instruction: ${instructions.name}`))\n }\n })\n\n return typeof result === 'object' && result !== null\n ? { ...uploadedFile, directUpload: result as Record<string, unknown> }\n : uploadedFile\n }\n }\n\n return <Context value={{ getUploadHandler }}>{children}</Context>\n}\n\nexport const useUploadHandlers = (): UploadHandlersContext => {\n const context = React.use(Context)\n\n if (context === null) {\n throw new Error('useUploadHandlers must be used within UploadHandlersProvider')\n }\n\n return context\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,cAAc,QAAQ;AAC/B,OAAOC,KAAA,MAAW;AAElB,SAASC,SAAS,QAAQ;AAW1B,MAAMC,OAAA,gBAAUF,KAAA,CAAMG,aAAa,CAA+B;AAElE,OAAO,MAAMC,sBAAA,GAAyBC,EAAA;EAAA,MAAAC,CAAA,GAAAR,EAAA;EAAC;IAAAS;EAAA,IAAAF,EAAY;EACjD;IAAAG,MAAA;IAAAC;EAAA,IAAoCR,SAAA;EAAA,IAAAS,EAAA;EAAA,IAAAJ,CAAA,QAAAC,QAAA,IAAAD,CAAA,QAAAE,MAAA,CAAAG,MAAA,CAAAC,GAAA,IAAAN,CAAA,QAAAE,MAAA,CAAAK,SAAA,IAAAP,CAAA,QAAAG,eAAA;IACpC,MAAAK,qBAAA,GAA8Bf,cAAA;MAAAgB,QAAA,EAClBP,MAAA,CAAAG,MAAA,CAAAC,GAAA;MAAAI,IAAA,EACJ;MAAAH,SAAA,EACKL,MAAA,CAAAK;IAAA,CACb;IACA,MAAAI,gBAAA,GAAAC,EAAA;MAAqE;QAAAC;MAAA,IAAAD,EAAkB;MAAA,KAChFT,eAAA;QAAAU;MAAA,CAAiC,GAAAC,MAAA,EAAAC,kBAAA;QAAA;MAAA;MAAA,aAAAC,EAAA;QAIxB;UAAAC,SAAA;UAAAC;QAAA,IAAAF,EAAmB;QAC/B,MAAAG,QAAA,SAAuBC,KAAA,CAAMZ,qBAAA;UAAAa,IAAA,EACrBC,IAAA,CAAAC,SAAA;YAAAV,cAAA;YAAAI,SAAA;YAAAO,QAAA,EAGMN,IAAA,CAAAO,IAAA;YAAAC,QAAA,EACAR,IAAA,CAAAS,IAAA;YAAAC,QAAA,EACAV,IAAA,CAAAW;UAAA,CACZ;UAAAC,WAAA,EACa;UAAAC,OAAA;YAAA,gBACc;UAAA;UAAAC,MAAA,EACnB;QAAA,CACV;QAAA,KAEKb,QAAA,CAAAc,EAAA;UACH;YAAAC;UAAA,UAA0Bf,QAAA,CAAAgB,IAAA,CAAa;UAAA,UAAAC,KAAA,CACvBF,MAAA,CAAAG,GAAA,CAAAC,KAA4B,EAAAC,IAAA,CAAc;QAAA;QAG5D,MAAAC,YAAA,SAA4BrB,QAAA,CAAAgB,IAAA,CAAa;QACzC,IAAAM,YAAA,GAAmBD,YAAA,CAAAtB,IAAA;QAAiB,IAEhCsB,YAAA,CAAAX,IAAA,KAAsB;UACxB;YAAAa,GAAA;YAAA,GAAAC;UAAA,IAA4BH,YAAA,CAAAG,OAAA;UAC5B,MAAA7B,MAAA,SAAqBM,KAAA,CAAMsB,GAAA;YAAArB,IAAA,EAAaH,IAAA;YAAA,GAASyB;UAAO,CAAC;UAAA,KAEpD7B,MAAA,CAAAmB,EAAA;YAAA,UAAAG,KAAA,CACa,6BAA6BtB,MAAA,CAAA8B,MAAA,EAAe;UAAA;UAAA,OAGvDH,YAAA;QAAA;QAGT,MAAAI,MAAA,aAAAC,OAAA,EAAAC,OAAA,EAAAC,MAAA;UACE,MAAAC,KAAA,OAAAC,WAAA,CAA8B,kBAAkBV,YAAA,CAAAf,IAAA,EAAmB;YAAA0B,UAAA;YAAAC,MAAA;cAAAvC,cAAA;cAAAwC,IAAA,EAIzDb,YAAA,CAAAa,IAAA;cAAApC,SAAA;cAAAC,IAAA;cAAA8B,MAAA;cAAAD,OAAA;cAAAO,cAAA,EAAA9B,QAAA;gBAMJiB,YAAA,CAAAA,CAAA,CAAAA;kBAAAA,GAAoBA,YAAY;kBAAAjB;gBAAA;cAAhC;YAAA;UAAA;UAGN,IAEI+B,MAAA,CAAAC,aAAA,CAAqBP,KAAA;YACvBD,MAAA,KAAAZ,KAAA,CAAiB,mCAAmCI,YAAA,CAAAf,IAAA,EAAmB;UAAA;QAAA;QAE3E,OAEO,OAAOoB,MAAA,KAAW,YAAYA,MAAA,SAAW;UAAA,GACvCJ,YAAY;UAAAgB,YAAA,EAAgBZ;QAAA,IACjCJ,YAAA;MAAA;IAAA;IAIDrC,EAAA,GAAAsD,IAAA,CAAA9D,OAAA;MAAA+D,KAAA;QAAAhD;MAAA;MAAAV;IAAA,C;;;;;;;;;SAAAG,E;CACT;AAEA,OAAO,MAAMwD,iBAAA,GAAoBA,CAAA;EAC/B,MAAMC,OAAA,GAAUnE,KAAA,CAAMoE,GAAG,CAAClE,OAAA;EAE1B,IAAIiE,OAAA,KAAY,MAAM;IACpB,MAAM,IAAIzB,KAAA,CAAM;EAClB;EAEA,OAAOyB,OAAA;AACT;AAnFsC,SAAAvB,MAAAvC,EAAA;EA4BF;IAAAgE;EAAA,IAAAhE,EAAW;EAAA,OAAKgE,OAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","formatAdminURL","React","useConfig","Context","createContext","UploadHandlersProvider","t0","$","children","config","getEntityConfig","t1","routes","api","serverURL","uploadInstructionsURL","apiRoute","path","getUploadHandler","t2","collectionSlug","upload","uploadInstructions","useInAdmin","t3","docPrefix","file","response","fetch","body","JSON","stringify","filename","name","filesize","size","mimeType","type","credentials","headers","method","ok","errors","json","Error","map","_temp","join","instructions","uploadedFile","url","request","status","result","Promise","resolve","reject","event","CustomEvent","cancelable","detail","data","updateFilename","window","dispatchEvent","uploadReference","_jsx","value","useUploadHandlers","context","use","message"],"sources":["../../../src/providers/UploadHandlers/index.tsx"],"sourcesContent":["'use client'\nimport type { UploadCollectionSlug, UploadInstructions } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport React from 'react'\n\nimport { useConfig } from '../Config/index.js'\n\ntype UploadHandler = (args: {\n docPrefix?: string\n file: File\n}) => Promise<UploadInstructions['file']>\n\nexport type UploadHandlersContext = {\n getUploadHandler: (args: { collectionSlug: UploadCollectionSlug }) => null | UploadHandler\n}\n\nconst Context = React.createContext<null | UploadHandlersContext>(null)\n\nexport const UploadHandlersProvider = ({ children }) => {\n const { config, getEntityConfig } = useConfig()\n const uploadInstructionsURL = formatAdminURL({\n apiRoute: config.routes.api,\n path: '/upload-instructions',\n serverURL: config.serverURL,\n })\n const getUploadHandler: UploadHandlersContext['getUploadHandler'] = ({ collectionSlug }) => {\n if (!getEntityConfig({ collectionSlug })?.upload?.uploadInstructions.useInAdmin) {\n return null\n }\n\n return async ({ docPrefix, file }) => {\n const response = await fetch(uploadInstructionsURL, {\n body: JSON.stringify({\n collectionSlug,\n docPrefix,\n filename: file.name,\n filesize: file.size,\n mimeType: file.type,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n })\n\n if (!response.ok) {\n const { errors } = (await response.json()) as { errors: { message: string }[] }\n throw new Error(errors.map(({ message }) => message).join(', '))\n }\n\n const instructions = (await response.json()) as UploadInstructions\n let uploadedFile = instructions.file\n\n if (instructions.type === 'http') {\n const { url, ...request } = instructions.request\n const upload = await fetch(url, { body: file, ...request })\n\n if (!upload.ok) {\n throw new Error(`Upload failed with status ${upload.status}`)\n }\n\n return uploadedFile\n }\n\n const result = await new Promise<unknown>((resolve, reject) => {\n const event = new CustomEvent(`payload:upload:${instructions.name}`, {\n cancelable: true,\n detail: {\n collectionSlug,\n data: instructions.data,\n docPrefix,\n file,\n reject,\n resolve,\n updateFilename: (filename: string) => {\n uploadedFile = { ...uploadedFile, filename }\n },\n },\n })\n\n if (window.dispatchEvent(event)) {\n reject(new Error(`Unsupported upload instruction: ${instructions.name}`))\n }\n })\n\n return typeof result === 'object' && result !== null\n ? { ...uploadedFile, uploadReference: result as Record<string, unknown> }\n : uploadedFile\n }\n }\n\n return <Context value={{ getUploadHandler }}>{children}</Context>\n}\n\nexport const useUploadHandlers = (): UploadHandlersContext => {\n const context = React.use(Context)\n\n if (context === null) {\n throw new Error('useUploadHandlers must be used within UploadHandlersProvider')\n }\n\n return context\n}\n"],"mappings":"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","ignoreList":[]}