@payloadcms/ui 4.0.0-canary.12 → 4.0.0-canary.14

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 (121) hide show
  1. package/dist/css/spacing.css +1 -0
  2. package/dist/elements/ArrayAction/index.d.ts +2 -0
  3. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  4. package/dist/elements/ArrayAction/index.js +65 -24
  5. package/dist/elements/ArrayAction/index.js.map +1 -1
  6. package/dist/elements/BulkUpload/FileSidebar/index.css +4 -0
  7. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +2 -2
  8. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
  9. package/dist/elements/BulkUpload/FormsManager/createFormData.js +4 -15
  10. package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
  11. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  12. package/dist/elements/BulkUpload/FormsManager/index.js +1 -1
  13. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  14. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts +8 -1
  15. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts.map +1 -1
  16. package/dist/elements/ClipboardAction/clipboardUtilities.js +40 -8
  17. package/dist/elements/ClipboardAction/clipboardUtilities.js.map +1 -1
  18. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +120 -0
  19. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +1 -0
  20. package/dist/elements/ClipboardAction/index.d.ts.map +1 -1
  21. package/dist/elements/ClipboardAction/index.js +17 -1
  22. package/dist/elements/ClipboardAction/index.js.map +1 -1
  23. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +144 -0
  24. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +1 -0
  25. package/dist/elements/ClipboardAction/types.d.ts +3 -0
  26. package/dist/elements/ClipboardAction/types.d.ts.map +1 -1
  27. package/dist/elements/ClipboardAction/types.js.map +1 -1
  28. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts +10 -0
  29. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts.map +1 -0
  30. package/dist/elements/ClipboardAction/useCanPasteClipboard.js +21 -0
  31. package/dist/elements/ClipboardAction/useCanPasteClipboard.js.map +1 -0
  32. package/dist/elements/FileManager/FilePreview/index.css +3 -3
  33. package/dist/elements/FileManager/index.css +36 -23
  34. package/dist/elements/FileManager/index.d.ts +1 -1
  35. package/dist/elements/FileManager/index.d.ts.map +1 -1
  36. package/dist/elements/FileManager/index.js +14 -4
  37. package/dist/elements/FileManager/index.js.map +1 -1
  38. package/dist/elements/MiniCarousel/index.css +39 -37
  39. package/dist/elements/ReactSelect/MultiValueLabel/index.css +2 -2
  40. package/dist/elements/RelationshipTable/index.css +0 -2
  41. package/dist/elements/RenderTitle/index.css +4 -0
  42. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  43. package/dist/elements/RenderTitle/index.js +18 -13
  44. package/dist/elements/RenderTitle/index.js.map +1 -1
  45. package/dist/elements/Table/index.css +1 -0
  46. package/dist/elements/Thumbnail/index.d.ts +1 -1
  47. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  48. package/dist/elements/Thumbnail/index.js.map +1 -1
  49. package/dist/elements/TimezonePicker/index.d.ts.map +1 -1
  50. package/dist/elements/TimezonePicker/index.js +5 -1
  51. package/dist/elements/TimezonePicker/index.js.map +1 -1
  52. package/dist/exports/shared/index.d.ts +1 -0
  53. package/dist/exports/shared/index.d.ts.map +1 -1
  54. package/dist/exports/shared/index.js +2 -2
  55. package/dist/exports/shared/index.js.map +4 -4
  56. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  57. package/dist/fields/Array/ArrayRow.js +97 -160
  58. package/dist/fields/Array/ArrayRow.js.map +1 -1
  59. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  60. package/dist/fields/Blocks/BlockRow.js +134 -195
  61. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  62. package/dist/fields/Blocks/RowActions.d.ts +2 -0
  63. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  64. package/dist/fields/Blocks/RowActions.js +23 -20
  65. package/dist/fields/Blocks/RowActions.js.map +1 -1
  66. package/dist/fields/Relationship/select-components/MultiValueLabel/index.css +1 -1
  67. package/dist/fields/Slug/index.d.ts.map +1 -1
  68. package/dist/fields/Slug/index.js +33 -24
  69. package/dist/fields/Slug/index.js.map +1 -1
  70. package/dist/fields/Upload/index.css +19 -4
  71. package/dist/forms/Form/index.d.ts.map +1 -1
  72. package/dist/forms/Form/index.js +3 -14
  73. package/dist/forms/Form/index.js.map +1 -1
  74. package/dist/forms/RenderFields/index.css +16 -2
  75. package/dist/layouts/Root/index.d.ts.map +1 -1
  76. package/dist/layouts/Root/index.js +4 -2
  77. package/dist/layouts/Root/index.js.map +1 -1
  78. package/dist/providers/DocumentTitle/index.d.ts +1 -0
  79. package/dist/providers/DocumentTitle/index.d.ts.map +1 -1
  80. package/dist/providers/DocumentTitle/index.js +2 -0
  81. package/dist/providers/DocumentTitle/index.js.map +1 -1
  82. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  83. package/dist/providers/TableColumns/buildColumnState/index.js +1 -1
  84. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  85. package/dist/providers/TableColumns/buildColumnState/index.spec.js +40 -0
  86. package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +1 -0
  87. package/dist/providers/Theme/index.d.ts +2 -2
  88. package/dist/providers/Theme/index.d.ts.map +1 -1
  89. package/dist/providers/Theme/index.js +2 -1
  90. package/dist/providers/Theme/index.js.map +1 -1
  91. package/dist/providers/Theme/shared.d.ts +3 -0
  92. package/dist/providers/Theme/shared.d.ts.map +1 -0
  93. package/dist/providers/Theme/shared.js +2 -0
  94. package/dist/providers/Theme/shared.js.map +1 -0
  95. package/dist/providers/UploadHandlers/index.d.ts +2 -7
  96. package/dist/providers/UploadHandlers/index.d.ts.map +1 -1
  97. package/dist/providers/UploadHandlers/index.js +102 -42
  98. package/dist/providers/UploadHandlers/index.js.map +1 -1
  99. package/dist/styles.css +2 -1
  100. package/dist/utilities/getLanguageDir.d.ts +12 -0
  101. package/dist/utilities/getLanguageDir.d.ts.map +1 -0
  102. package/dist/utilities/getLanguageDir.js +12 -0
  103. package/dist/utilities/getLanguageDir.js.map +1 -0
  104. package/dist/utilities/getRequestTheme.d.ts +1 -1
  105. package/dist/utilities/getRequestTheme.d.ts.map +1 -1
  106. package/dist/utilities/getRequestTheme.js +1 -1
  107. package/dist/utilities/getRequestTheme.js.map +1 -1
  108. package/dist/utilities/handleServerFunctions.d.ts +32 -8
  109. package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
  110. package/dist/utilities/handleServerFunctions.js +17 -37
  111. package/dist/utilities/handleServerFunctions.js.map +1 -1
  112. package/dist/utilities/serverFunctionRegistry.d.ts +12 -7
  113. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  114. package/dist/utilities/serverFunctionRegistry.js +25 -7
  115. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  116. package/dist/views/Edit/index.css +61 -53
  117. package/dist/views/Root/index.d.ts +12 -1
  118. package/dist/views/Root/index.d.ts.map +1 -1
  119. package/dist/views/Root/index.js +10 -3
  120. package/dist/views/Root/index.js.map +1 -1
  121. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["rtlLanguages","applyLocaleFiltering","React","Suspense","getNavPrefs","ProgressBar","RootProvider","checkDependencies","getClientConfig","getRequestHighContrast","getRequestTheme","initReq","NestProviders","getViewportMeta","metadata","description","title","RootLayout","props","additionalDependencyChecks","content","_jsx","RootLayoutContent","process","env","PAYLOAD_CACHE_COMPONENTS_ENABLED","fallback","children","config","configPromise","fonts","head","headFromProps","htmlProps","importMap","RouterAdapter","serverAdapter","serverFunction","cookies","headers","languageCode","permissions","req","payload","key","theme","highContrastMode","dir","includes","languageOptions","Object","entries","i18n","supportedLanguages","reduce","acc","language","languageConfig","keys","push","label","translations","general","thisLanguage","value","navPrefs","clientConfig","user","fontClassNames","map","f","variable","className","filter","Boolean","viewportMeta","get","undefined","_jsxs","join","lang","suppressHydrationWarning","admin","dateFNSKey","fallbackLang","fallbackLanguage","isNavOpen","open","locale","Array","isArray","components","providers","length","serverProps","server","id"],"sources":["../../../src/layouts/Root/index.tsx"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\nimport type {\n ImportMap,\n LanguageOptions,\n SanitizedConfig,\n ServerAdapter,\n ServerFunctionClient,\n} from 'payload'\n\nimport { rtlLanguages } from '@payloadcms/translations'\nimport { applyLocaleFiltering } from 'payload/shared'\nimport React, { Suspense } from 'react'\n\nimport { getNavPrefs } from '../../elements/Nav/getNavPrefs.js'\n// eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds\nimport { ProgressBar, RootProvider } from '../../exports/client/index.js'\nimport { checkDependencies, type CheckDependenciesArgs } from '../../utilities/checkDependencies.js'\nimport { getClientConfig } from '../../utilities/getClientConfig.js'\nimport { getRequestHighContrast } from '../../utilities/getRequestHighContrast.js'\nimport { getRequestTheme } from '../../utilities/getRequestTheme.js'\nimport { initReq } from '../../utilities/initReq.js'\nimport { NestProviders } from './NestProviders.js'\nimport { getViewportMeta } from './viewport.js'\n// eslint-disable-next-line payload/no-imports-from-self -- Self-import via package path ensures consumer's bundler resolves the full SCSS chain (design tokens, preflight, etc.) in prod builds\nimport '@payloadcms/ui/scss/app.scss'\n\ntype Font = {\n className?: string\n variable?: string\n}\n\nexport const metadata = {\n description: 'Generated by Next.js',\n title: 'Next.js',\n}\n\ntype RootLayoutProps = {\n /**\n * Framework-specific peer-dependency version constraints, merged on top of the\n * universal React/react-dom checks. Each framework adapter supplies its own\n * (e.g. Next.js passes `{ dependencyVersions: { next: { version: '>=15.0.0' } } }`).\n */\n readonly additionalDependencyChecks?: CheckDependenciesArgs\n readonly children: React.ReactNode\n readonly config: Promise<SanitizedConfig>\n /**\n * Fonts to apply to the admin `<html>` element. Each entry's\n * `variable ?? className` is appended to the `<html>` class list.\n * Framework-specific font loaders (e.g. `next/font`) are supplied by the caller.\n */\n readonly fonts?: Font[]\n /**\n * Custom content to render inside the admin panel's `<head>` element.\n *\n * Use this to inject scripts, meta tags, or links — for example, analytics\n * snippets via `next/script`, custom favicons, or preconnect hints.\n *\n * @example\n * ```tsx\n * import Script from 'next/script'\n *\n * <RootLayout\n * head={<Script src=\"https://example.com/analytics.js\" strategy=\"afterInteractive\" />}\n * {...rest}\n * />\n * ```\n */\n readonly head?: React.ReactNode\n readonly htmlProps?: React.HtmlHTMLAttributes<HTMLHtmlElement>\n readonly importMap: ImportMap\n /**\n * Client router adapter. Caller supplies a framework-specific provider\n * (for Next.js use the `NextRouterAdapter` exported from `@payloadcms/next`).\n */\n readonly RouterAdapter: React.FC<{ children: React.ReactNode }>\n /**\n * Server adapter providing framework-specific access to headers, cookies, redirects,\n * and other server APIs (for Next.js use `nextServerAdapter` from `@payloadcms/next`).\n */\n readonly serverAdapter: ServerAdapter\n readonly serverFunction: ServerFunctionClient\n}\n\nexport const RootLayout = (props: RootLayoutProps) => {\n checkDependencies(props.additionalDependencyChecks)\n\n const content = <RootLayoutContent {...props} />\n\n if (process.env.PAYLOAD_CACHE_COMPONENTS_ENABLED === 'true') {\n return <Suspense fallback={null}>{content}</Suspense>\n }\n\n return content\n}\n\nconst RootLayoutContent = async ({\n children,\n config: configPromise,\n fonts = [],\n head: headFromProps,\n htmlProps = {},\n importMap,\n RouterAdapter,\n serverAdapter,\n serverFunction,\n}: RootLayoutProps) => {\n const {\n cookies,\n headers,\n languageCode,\n permissions,\n req,\n req: {\n payload: { config },\n },\n } = await initReq({ configPromise, importMap, key: 'RootLayout', serverAdapter })\n\n const theme = getRequestTheme({\n config,\n cookies,\n headers,\n })\n\n const highContrastMode = getRequestHighContrast({\n config,\n cookies,\n headers,\n })\n\n const dir = (rtlLanguages as unknown as AcceptedLanguages[]).includes(languageCode)\n ? 'RTL'\n : 'LTR'\n\n const languageOptions: LanguageOptions = Object.entries(\n config.i18n.supportedLanguages || {},\n ).reduce((acc, [language, languageConfig]) => {\n if (Object.keys(config.i18n.supportedLanguages).includes(language)) {\n acc.push({\n label: languageConfig.translations.general.thisLanguage,\n value: language,\n })\n }\n\n return acc\n }, [])\n\n const navPrefs = await getNavPrefs(req)\n\n const clientConfig = getClientConfig({\n config,\n i18n: req.i18n,\n importMap,\n user: req.user,\n })\n\n await applyLocaleFiltering({ clientConfig, config, req })\n\n const fontClassNames = fonts.map((f) => f.variable ?? f.className).filter(Boolean)\n const viewportMeta = getViewportMeta(headers.get('user-agent') ?? undefined)\n\n return (\n <html\n {...htmlProps}\n className={[...fontClassNames, htmlProps?.className].filter(Boolean).join(' ')}\n data-enhanced-contrast={highContrastMode ? '' : undefined}\n data-theme={theme}\n dir={dir}\n lang={languageCode}\n suppressHydrationWarning={config?.admin?.suppressHydrationWarning ?? false}\n >\n <head>\n {viewportMeta}\n <style>{`@layer payload-default, payload;`}</style>\n {headFromProps}\n </head>\n <body>\n <RootProvider\n config={clientConfig}\n dateFNSKey={req.i18n.dateFNSKey}\n fallbackLang={config.i18n.fallbackLanguage}\n highContrastMode={highContrastMode}\n isNavOpen={navPrefs?.open ?? true}\n languageCode={languageCode}\n languageOptions={languageOptions}\n locale={req.locale}\n permissions={req.user ? permissions : null}\n RouterAdapter={RouterAdapter}\n serverFunction={serverFunction}\n theme={theme}\n translations={req.i18n.translations}\n user={req.user}\n >\n <ProgressBar />\n {Array.isArray(config.admin?.components?.providers) &&\n config.admin?.components?.providers.length > 0 ? (\n <NestProviders\n importMap={req.payload.importMap}\n providers={config.admin?.components?.providers}\n serverProps={{\n i18n: req.i18n,\n payload: req.payload,\n permissions,\n server: req.server,\n user: req.user,\n }}\n >\n {children}\n </NestProviders>\n ) : (\n children\n )}\n </RootProvider>\n <div id=\"portal\" />\n </body>\n </html>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["applyLocaleFiltering","React","Suspense","getNavPrefs","ProgressBar","RootProvider","checkDependencies","getClientConfig","getLanguageDir","getRequestHighContrast","getRequestTheme","initReq","NestProviders","getViewportMeta","metadata","description","title","RootLayout","props","additionalDependencyChecks","content","_jsx","RootLayoutContent","process","env","PAYLOAD_CACHE_COMPONENTS_ENABLED","fallback","children","config","configPromise","fonts","head","headFromProps","htmlProps","importMap","RouterAdapter","serverAdapter","serverFunction","cookies","headers","languageCode","permissions","req","payload","key","theme","highContrastMode","dir","languageOptions","Object","entries","i18n","supportedLanguages","reduce","acc","language","languageConfig","keys","includes","push","label","translations","general","thisLanguage","value","navPrefs","clientConfig","user","fontClassNames","map","f","variable","className","filter","Boolean","viewportMeta","get","undefined","_jsxs","join","lang","suppressHydrationWarning","admin","dateFNSKey","fallbackLang","fallbackLanguage","isNavOpen","open","locale","Array","isArray","components","providers","length","serverProps","server","id"],"sources":["../../../src/layouts/Root/index.tsx"],"sourcesContent":["import type {\n ImportMap,\n LanguageOptions,\n SanitizedConfig,\n ServerAdapter,\n ServerFunctionClient,\n} from 'payload'\n\nimport { applyLocaleFiltering } from 'payload/shared'\nimport React, { Suspense } from 'react'\n\nimport { getNavPrefs } from '../../elements/Nav/getNavPrefs.js'\n// eslint-disable-next-line payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds\nimport { ProgressBar, RootProvider } from '../../exports/client/index.js'\nimport { checkDependencies, type CheckDependenciesArgs } from '../../utilities/checkDependencies.js'\nimport { getClientConfig } from '../../utilities/getClientConfig.js'\nimport { getLanguageDir } from '../../utilities/getLanguageDir.js'\nimport { getRequestHighContrast } from '../../utilities/getRequestHighContrast.js'\nimport { getRequestTheme } from '../../utilities/getRequestTheme.js'\nimport { initReq } from '../../utilities/initReq.js'\nimport { NestProviders } from './NestProviders.js'\nimport { getViewportMeta } from './viewport.js'\n// eslint-disable-next-line payload/no-imports-from-self -- Self-import via package path ensures consumer's bundler resolves the full SCSS chain (design tokens, preflight, etc.) in prod builds\nimport '@payloadcms/ui/scss/app.scss'\n\ntype Font = {\n className?: string\n variable?: string\n}\n\nexport const metadata = {\n description: 'Generated by Next.js',\n title: 'Next.js',\n}\n\ntype RootLayoutProps = {\n /**\n * Framework-specific peer-dependency version constraints, merged on top of the\n * universal React/react-dom checks. Each framework adapter supplies its own\n * (e.g. Next.js passes `{ dependencyVersions: { next: { version: '>=15.0.0' } } }`).\n */\n readonly additionalDependencyChecks?: CheckDependenciesArgs\n readonly children: React.ReactNode\n readonly config: Promise<SanitizedConfig>\n /**\n * Fonts to apply to the admin `<html>` element. Each entry's\n * `variable ?? className` is appended to the `<html>` class list.\n * Framework-specific font loaders (e.g. `next/font`) are supplied by the caller.\n */\n readonly fonts?: Font[]\n /**\n * Custom content to render inside the admin panel's `<head>` element.\n *\n * Use this to inject scripts, meta tags, or links — for example, analytics\n * snippets via `next/script`, custom favicons, or preconnect hints.\n *\n * @example\n * ```tsx\n * import Script from 'next/script'\n *\n * <RootLayout\n * head={<Script src=\"https://example.com/analytics.js\" strategy=\"afterInteractive\" />}\n * {...rest}\n * />\n * ```\n */\n readonly head?: React.ReactNode\n readonly htmlProps?: React.HtmlHTMLAttributes<HTMLHtmlElement>\n readonly importMap: ImportMap\n /**\n * Client router adapter. Caller supplies a framework-specific provider\n * (for Next.js use the `NextRouterAdapter` exported from `@payloadcms/next`).\n */\n readonly RouterAdapter: React.FC<{ children: React.ReactNode }>\n /**\n * Server adapter providing framework-specific access to headers, cookies, redirects,\n * and other server APIs (for Next.js use `nextServerAdapter` from `@payloadcms/next`).\n */\n readonly serverAdapter: ServerAdapter\n readonly serverFunction: ServerFunctionClient\n}\n\nexport const RootLayout = (props: RootLayoutProps) => {\n checkDependencies(props.additionalDependencyChecks)\n\n const content = <RootLayoutContent {...props} />\n\n if (process.env.PAYLOAD_CACHE_COMPONENTS_ENABLED === 'true') {\n return <Suspense fallback={null}>{content}</Suspense>\n }\n\n return content\n}\n\nconst RootLayoutContent = async ({\n children,\n config: configPromise,\n fonts = [],\n head: headFromProps,\n htmlProps = {},\n importMap,\n RouterAdapter,\n serverAdapter,\n serverFunction,\n}: RootLayoutProps) => {\n const {\n cookies,\n headers,\n languageCode,\n permissions,\n req,\n req: {\n payload: { config },\n },\n } = await initReq({ configPromise, importMap, key: 'RootLayout', serverAdapter })\n\n const theme = getRequestTheme({\n config,\n cookies,\n headers,\n })\n\n const highContrastMode = getRequestHighContrast({\n config,\n cookies,\n headers,\n })\n\n const dir = getLanguageDir({ languageCode })\n\n const languageOptions: LanguageOptions = Object.entries(\n config.i18n.supportedLanguages || {},\n ).reduce((acc, [language, languageConfig]) => {\n if (Object.keys(config.i18n.supportedLanguages).includes(language)) {\n acc.push({\n label: languageConfig.translations.general.thisLanguage,\n value: language,\n })\n }\n\n return acc\n }, [])\n\n const navPrefs = await getNavPrefs(req)\n\n const clientConfig = getClientConfig({\n config,\n i18n: req.i18n,\n importMap,\n user: req.user,\n })\n\n await applyLocaleFiltering({ clientConfig, config, req })\n\n const fontClassNames = fonts.map((f) => f.variable ?? f.className).filter(Boolean)\n const viewportMeta = getViewportMeta(headers.get('user-agent') ?? undefined)\n\n return (\n <html\n {...htmlProps}\n className={[...fontClassNames, htmlProps?.className].filter(Boolean).join(' ')}\n data-enhanced-contrast={highContrastMode ? '' : undefined}\n data-theme={theme}\n dir={dir}\n lang={languageCode}\n suppressHydrationWarning={config?.admin?.suppressHydrationWarning ?? false}\n >\n <head>\n {viewportMeta}\n <style>{`@layer payload-default, payload;`}</style>\n {headFromProps}\n </head>\n <body>\n <RootProvider\n config={clientConfig}\n dateFNSKey={req.i18n.dateFNSKey}\n fallbackLang={config.i18n.fallbackLanguage}\n highContrastMode={highContrastMode}\n isNavOpen={navPrefs?.open ?? true}\n languageCode={languageCode}\n languageOptions={languageOptions}\n locale={req.locale}\n permissions={req.user ? permissions : null}\n RouterAdapter={RouterAdapter}\n serverFunction={serverFunction}\n theme={theme}\n translations={req.i18n.translations}\n user={req.user}\n >\n <ProgressBar />\n {Array.isArray(config.admin?.components?.providers) &&\n config.admin?.components?.providers.length > 0 ? (\n <NestProviders\n importMap={req.payload.importMap}\n providers={config.admin?.components?.providers}\n serverProps={{\n i18n: req.i18n,\n payload: req.payload,\n permissions,\n server: req.server,\n user: req.user,\n }}\n >\n {children}\n </NestProviders>\n ) : (\n children\n )}\n </RootProvider>\n <div id=\"portal\" />\n </body>\n </html>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  export type DocumentTitleContext = {
2
+ isPlaceholder: boolean;
2
3
  setDocumentTitle: (title: string) => void;
3
4
  title: string;
4
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/DocumentTitle/index.tsx"],"names":[],"mappings":"AASA,MAAM,MAAM,oBAAoB,GAAG;IACjC,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAID,eAAO,MAAM,gBAAgB,QAAO,oBAAoC,CAAA;AAExE,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC3C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAoCA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/DocumentTitle/index.tsx"],"names":[],"mappings":"AASA,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAID,eAAO,MAAM,gBAAgB,QAAO,oBAAoC,CAAA;AAExE,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC3C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAsCA,CAAA"}
@@ -51,8 +51,10 @@ export const DocumentTitleProvider = ({
51
51
  i18n
52
52
  }));
53
53
  }, [data, dateFormat, i18n, id, collectionSlug, docConfig, globalSlug]);
54
+ const isPlaceholder = title === i18n.t('general:untitled');
54
55
  return /*#__PURE__*/_jsx(Context, {
55
56
  value: {
57
+ isPlaceholder,
56
58
  setDocumentTitle,
57
59
  title
58
60
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["createContext","use","useEffect","useState","formatDocTitle","useConfig","useDocumentInfo","useTranslation","Context","useDocumentTitle","DocumentTitleProvider","children","id","collectionSlug","data","docConfig","globalSlug","initialData","config","admin","dateFormat","i18n","title","setDocumentTitle","collectionConfig","undefined","fallback","toString","globalConfig","_jsx","value"],"sources":["../../../src/providers/DocumentTitle/index.tsx"],"sourcesContent":["import type { ClientCollectionConfig, ClientGlobalConfig } from 'payload'\n\nimport { createContext, use, useEffect, useState } from 'react'\n\nimport { formatDocTitle } from '../../utilities/formatDocTitle/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { useDocumentInfo } from '../DocumentInfo/index.js'\nimport { useTranslation } from '../Translation/index.js'\n\nexport type DocumentTitleContext = {\n setDocumentTitle: (title: string) => void\n title: string\n}\n\nconst Context = createContext({} as DocumentTitleContext)\n\nexport const useDocumentTitle = (): DocumentTitleContext => use(Context)\n\nexport const DocumentTitleProvider: React.FC<{\n children: React.ReactNode\n}> = ({ children }) => {\n const { id, collectionSlug, data, docConfig, globalSlug, initialData } = useDocumentInfo()\n\n const {\n config: {\n admin: { dateFormat },\n },\n } = useConfig()\n\n const { i18n } = useTranslation()\n\n const [title, setDocumentTitle] = useState(() =>\n formatDocTitle({\n collectionConfig: collectionSlug ? (docConfig as ClientCollectionConfig) : undefined,\n data: { ...(initialData || {}), id },\n dateFormat,\n fallback: id?.toString(),\n globalConfig: globalSlug ? (docConfig as ClientGlobalConfig) : undefined,\n i18n,\n }),\n )\n\n useEffect(() => {\n setDocumentTitle(\n formatDocTitle({\n collectionConfig: collectionSlug ? (docConfig as ClientCollectionConfig) : undefined,\n data: { ...data, id },\n dateFormat,\n fallback: id?.toString(),\n globalConfig: globalSlug ? (docConfig as ClientGlobalConfig) : undefined,\n i18n,\n }),\n )\n }, [data, dateFormat, i18n, id, collectionSlug, docConfig, globalSlug])\n\n return <Context value={{ setDocumentTitle, title }}>{children}</Context>\n}\n"],"mappings":";AAEA,SAASA,aAAa,EAAEC,GAAG,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAExD,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAO/B,MAAMC,OAAA,gBAAUR,aAAA,CAAc,CAAC;AAE/B,OAAO,MAAMS,gBAAA,GAAmBA,CAAA,KAA4BR,GAAA,CAAIO,OAAA;AAEhE,OAAO,MAAME,qBAAA,GAERA,CAAC;EAAEC;AAAQ,CAAE;EAChB,MAAM;IAAEC,EAAE;IAAEC,cAAc;IAAEC,IAAI;IAAEC,SAAS;IAAEC,UAAU;IAAEC;EAAW,CAAE,GAAGX,eAAA;EAEzE,MAAM;IACJY,MAAA,EAAQ;MACNC,KAAA,EAAO;QAAEC;MAAU;IAAE;EACtB,CACF,GAAGf,SAAA;EAEJ,MAAM;IAAEgB;EAAI,CAAE,GAAGd,cAAA;EAEjB,MAAM,CAACe,KAAA,EAAOC,gBAAA,CAAiB,GAAGpB,QAAA,CAAS,MACzCC,cAAA,CAAe;IACboB,gBAAA,EAAkBX,cAAA,GAAkBE,SAAA,GAAuCU,SAAA;IAC3EX,IAAA,EAAM;MAAE,IAAIG,WAAA,IAAe,CAAC,CAAC;MAAGL;IAAG;IACnCQ,UAAA;IACAM,QAAA,EAAUd,EAAA,EAAIe,QAAA;IACdC,YAAA,EAAcZ,UAAA,GAAcD,SAAA,GAAmCU,SAAA;IAC/DJ;EACF;EAGFnB,SAAA,CAAU;IACRqB,gBAAA,CACEnB,cAAA,CAAe;MACboB,gBAAA,EAAkBX,cAAA,GAAkBE,SAAA,GAAuCU,SAAA;MAC3EX,IAAA,EAAM;QAAE,GAAGA,IAAI;QAAEF;MAAG;MACpBQ,UAAA;MACAM,QAAA,EAAUd,EAAA,EAAIe,QAAA;MACdC,YAAA,EAAcZ,UAAA,GAAcD,SAAA,GAAmCU,SAAA;MAC/DJ;IACF;EAEJ,GAAG,CAACP,IAAA,EAAMM,UAAA,EAAYC,IAAA,EAAMT,EAAA,EAAIC,cAAA,EAAgBE,SAAA,EAAWC,UAAA,CAAW;EAEtE,oBAAOa,IAAA,CAACrB,OAAA;IAAQsB,KAAA,EAAO;MAAEP,gBAAA;MAAkBD;IAAM;cAAIX;;AACvD","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["createContext","use","useEffect","useState","formatDocTitle","useConfig","useDocumentInfo","useTranslation","Context","useDocumentTitle","DocumentTitleProvider","children","id","collectionSlug","data","docConfig","globalSlug","initialData","config","admin","dateFormat","i18n","title","setDocumentTitle","collectionConfig","undefined","fallback","toString","globalConfig","isPlaceholder","t","_jsx","value"],"sources":["../../../src/providers/DocumentTitle/index.tsx"],"sourcesContent":["import type { ClientCollectionConfig, ClientGlobalConfig } from 'payload'\n\nimport { createContext, use, useEffect, useState } from 'react'\n\nimport { formatDocTitle } from '../../utilities/formatDocTitle/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { useDocumentInfo } from '../DocumentInfo/index.js'\nimport { useTranslation } from '../Translation/index.js'\n\nexport type DocumentTitleContext = {\n isPlaceholder: boolean\n setDocumentTitle: (title: string) => void\n title: string\n}\n\nconst Context = createContext({} as DocumentTitleContext)\n\nexport const useDocumentTitle = (): DocumentTitleContext => use(Context)\n\nexport const DocumentTitleProvider: React.FC<{\n children: React.ReactNode\n}> = ({ children }) => {\n const { id, collectionSlug, data, docConfig, globalSlug, initialData } = useDocumentInfo()\n\n const {\n config: {\n admin: { dateFormat },\n },\n } = useConfig()\n\n const { i18n } = useTranslation()\n\n const [title, setDocumentTitle] = useState(() =>\n formatDocTitle({\n collectionConfig: collectionSlug ? (docConfig as ClientCollectionConfig) : undefined,\n data: { ...(initialData || {}), id },\n dateFormat,\n fallback: id?.toString(),\n globalConfig: globalSlug ? (docConfig as ClientGlobalConfig) : undefined,\n i18n,\n }),\n )\n\n useEffect(() => {\n setDocumentTitle(\n formatDocTitle({\n collectionConfig: collectionSlug ? (docConfig as ClientCollectionConfig) : undefined,\n data: { ...data, id },\n dateFormat,\n fallback: id?.toString(),\n globalConfig: globalSlug ? (docConfig as ClientGlobalConfig) : undefined,\n i18n,\n }),\n )\n }, [data, dateFormat, i18n, id, collectionSlug, docConfig, globalSlug])\n\n const isPlaceholder = title === i18n.t('general:untitled')\n\n return <Context value={{ isPlaceholder, setDocumentTitle, title }}>{children}</Context>\n}\n"],"mappings":";AAEA,SAASA,aAAa,EAAEC,GAAG,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAExD,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAQ/B,MAAMC,OAAA,gBAAUR,aAAA,CAAc,CAAC;AAE/B,OAAO,MAAMS,gBAAA,GAAmBA,CAAA,KAA4BR,GAAA,CAAIO,OAAA;AAEhE,OAAO,MAAME,qBAAA,GAERA,CAAC;EAAEC;AAAQ,CAAE;EAChB,MAAM;IAAEC,EAAE;IAAEC,cAAc;IAAEC,IAAI;IAAEC,SAAS;IAAEC,UAAU;IAAEC;EAAW,CAAE,GAAGX,eAAA;EAEzE,MAAM;IACJY,MAAA,EAAQ;MACNC,KAAA,EAAO;QAAEC;MAAU;IAAE;EACtB,CACF,GAAGf,SAAA;EAEJ,MAAM;IAAEgB;EAAI,CAAE,GAAGd,cAAA;EAEjB,MAAM,CAACe,KAAA,EAAOC,gBAAA,CAAiB,GAAGpB,QAAA,CAAS,MACzCC,cAAA,CAAe;IACboB,gBAAA,EAAkBX,cAAA,GAAkBE,SAAA,GAAuCU,SAAA;IAC3EX,IAAA,EAAM;MAAE,IAAIG,WAAA,IAAe,CAAC,CAAC;MAAGL;IAAG;IACnCQ,UAAA;IACAM,QAAA,EAAUd,EAAA,EAAIe,QAAA;IACdC,YAAA,EAAcZ,UAAA,GAAcD,SAAA,GAAmCU,SAAA;IAC/DJ;EACF;EAGFnB,SAAA,CAAU;IACRqB,gBAAA,CACEnB,cAAA,CAAe;MACboB,gBAAA,EAAkBX,cAAA,GAAkBE,SAAA,GAAuCU,SAAA;MAC3EX,IAAA,EAAM;QAAE,GAAGA,IAAI;QAAEF;MAAG;MACpBQ,UAAA;MACAM,QAAA,EAAUd,EAAA,EAAIe,QAAA;MACdC,YAAA,EAAcZ,UAAA,GAAcD,SAAA,GAAmCU,SAAA;MAC/DJ;IACF;EAEJ,GAAG,CAACP,IAAA,EAAMM,UAAA,EAAYC,IAAA,EAAMT,EAAA,EAAIC,cAAA,EAAgBE,SAAA,EAAWC,UAAA,CAAW;EAEtE,MAAMa,aAAA,GAAgBP,KAAA,KAAUD,IAAA,CAAKS,CAAC,CAAC;EAEvC,oBAAOC,IAAA,CAACvB,OAAA;IAAQwB,KAAA,EAAO;MAAEH,aAAA;MAAeN,gBAAA;MAAkBD;IAAM;cAAIX;;AACtE","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/providers/TableColumns/buildColumnState/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAEV,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,MAAM,EACN,yBAAyB,EACzB,QAAQ,EACR,KAAK,EACL,aAAa,EACb,OAAO,EACP,cAAc,EACd,yBAAyB,EACzB,0BAA0B,EAG1B,SAAS,EACV,MAAM,SAAS,CAAA;AAUhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAY5E,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAA;IAC1C,eAAe,EAAE,yBAAyB,CAAC,iBAAiB,CAAC,CAAA;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,mBAAmB,EAAE,OAAO,CAAA;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,0BAA0B,CAAA;IAC7C,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1C,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5D,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CACA;IACE,cAAc,EAAE,cAAc,CAAA;IAC9B,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC5B,GACD;IACE,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE;QACJ,UAAU,EAAE,cAAc,CAAA;QAC1B,KAAK,EAAE,QAAQ,CAAA;KAChB,EAAE,CAAA;CACJ,CACJ,CAAA;AAED,eAAO,MAAM,gBAAgB,SAAU,oBAAoB,KAAG,MAAM,EA+NnE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/providers/TableColumns/buildColumnState/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAEV,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,MAAM,EACN,yBAAyB,EACzB,QAAQ,EACR,KAAK,EACL,aAAa,EACb,OAAO,EACP,cAAc,EACd,yBAAyB,EACzB,0BAA0B,EAG1B,SAAS,EACV,MAAM,SAAS,CAAA;AAUhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAY5E,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAA;IAC1C,eAAe,EAAE,yBAAyB,CAAC,iBAAiB,CAAC,CAAA;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,mBAAmB,EAAE,OAAO,CAAA;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,0BAA0B,CAAA;IAC7C,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1C,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5D,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CACA;IACE,cAAc,EAAE,cAAc,CAAA;IAC9B,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC5B,GACD;IACE,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE;QACJ,UAAU,EAAE,cAAc,CAAA;QAC1B,KAAK,EAAE,QAAQ,CAAA;KAChB,EAAE,CAAA;CACJ,CACJ,CAAA;AAED,eAAO,MAAM,gBAAgB,SAAU,oBAAoB,KAAG,MAAM,EAgOnE,CAAA"}
@@ -91,7 +91,7 @@ export const buildColumnState = args => {
91
91
  }
92
92
  let CustomLabel = undefined;
93
93
  if (dataType === 'monomorphic') {
94
- const CustomLabelToRender = serverField && 'admin' in serverField && 'components' in serverField.admin && 'Label' in serverField.admin.components && serverField.admin.components.Label !== undefined // let it return `null`
94
+ const CustomLabelToRender = serverField && 'admin' in serverField && 'components' in serverField.admin && serverField.admin.components && 'Label' in serverField.admin.components && serverField.admin.components.Label !== undefined // let it return `null`
95
95
  ? serverField.admin.components.Label : undefined;
96
96
  // TODO: customComponent will be optional in v4
97
97
  const clientProps = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["fieldIsHiddenOrDisabled","fieldIsID","fieldIsPresentationalOnly","flattenTopLevelFields","React","RenderServerComponent","SortColumn","filterFieldsWithPermissions","isColumnActive","renderCell","sortFieldMap","buildColumnState","args","beforeRows","clientFields","collectionSlug","columns","customCellProps","dataType","docs","enableLinkedCell","enableRowSelections","fieldPermissions","i18n","payload","req","serverFields","sortColumnProps","useAsTitle","viewType","sortedFieldMap","fields","keepPresentationalFields","moveSubFieldsToTop","_sortedFieldMap","idFieldIndex","findIndex","field","idField","splice","unshift","useAsTitleFieldIndex","name","useAsTitleField","sortTo","activeColumnsIndices","sorted","reduce","acc","clientField","colIndex","accessor","undefined","serverField","find","f","fAccessor","hasCustomCell","admin","components","Cell","type","columnPref","preference","isActive","column","includes","push","CustomLabel","CustomLabelToRender","Label","clientProps","customLabelServerProps","Component","importMap","serverProps","fieldAffectsDataSubFields","label","labelWithPrefix","dotAccessor","replace","isVirtualField","virtual","Heading","_jsx","disable","isLinkedColumn","active","renderedCells","map","doc","rowIndex","relationTo","columnIndex","value"],"sources":["../../../../src/providers/TableColumns/buildColumnState/index.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type {\n ClientComponentProps,\n ClientField,\n CollectionPreferences,\n CollectionSlug,\n Column,\n DefaultCellComponentProps,\n Document,\n Field,\n PaginatedDocs,\n Payload,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedFieldsPermissions,\n ServerComponentProps,\n StaticLabel,\n ViewTypes,\n} from 'payload'\n\nimport {\n fieldIsHiddenOrDisabled,\n fieldIsID,\n fieldIsPresentationalOnly,\n flattenTopLevelFields,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { SortColumnProps } from '../../../elements/SortColumn/index.js'\n\nimport { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js'\nimport {\n SortColumn,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../../../exports/client/index.js'\nimport { filterFieldsWithPermissions } from './filterFieldsWithPermissions.js'\nimport { isColumnActive } from './isColumnActive.js'\nimport { renderCell } from './renderCell.js'\nimport { sortFieldMap } from './sortFieldMap.js'\n\nexport type BuildColumnStateArgs = {\n beforeRows?: Column[]\n clientFields: ClientField[]\n columns?: CollectionPreferences['columns']\n customCellProps: DefaultCellComponentProps['customCellProps']\n enableLinkedCell?: boolean\n enableRowSelections: boolean\n enableRowTypes?: boolean\n fieldPermissions?: SanitizedFieldsPermissions\n i18n: I18nClient\n payload: Payload\n req?: PayloadRequest\n serverFields: Field[]\n sortColumnProps?: Partial<SortColumnProps>\n useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n viewType?: ViewTypes\n} & (\n | {\n collectionSlug: CollectionSlug\n dataType: 'monomorphic'\n docs: PaginatedDocs['docs']\n }\n | {\n collectionSlug?: undefined\n dataType: 'polymorphic'\n docs: {\n relationTo: CollectionSlug\n value: Document\n }[]\n }\n)\n\nexport const buildColumnState = (args: BuildColumnStateArgs): Column[] => {\n const {\n beforeRows,\n clientFields,\n collectionSlug,\n columns,\n customCellProps,\n dataType,\n docs,\n enableLinkedCell = true,\n enableRowSelections,\n fieldPermissions,\n i18n,\n payload,\n req,\n serverFields,\n sortColumnProps,\n useAsTitle,\n viewType,\n } = args\n\n // clientFields contains the fake `id` column\n let sortedFieldMap = flattenTopLevelFields(\n filterFieldsWithPermissions({ fieldPermissions, fields: clientFields }),\n {\n i18n,\n keepPresentationalFields: true,\n moveSubFieldsToTop: true,\n },\n ) as ClientField[]\n\n let _sortedFieldMap = flattenTopLevelFields(\n filterFieldsWithPermissions({\n fieldPermissions,\n fields: serverFields,\n }),\n {\n i18n,\n keepPresentationalFields: true,\n moveSubFieldsToTop: true,\n },\n ) as Field[] // TODO: think of a way to avoid this additional flatten\n\n // place the `ID` field first, if it exists\n // do the same for the `useAsTitle` field with precedence over the `ID` field\n // then sort the rest of the fields based on the `defaultColumns` or `columns`\n const idFieldIndex = sortedFieldMap?.findIndex((field) => fieldIsID(field))\n\n if (idFieldIndex > -1) {\n const idField = sortedFieldMap.splice(idFieldIndex, 1)[0]\n sortedFieldMap.unshift(idField)\n }\n\n const useAsTitleFieldIndex = useAsTitle\n ? sortedFieldMap.findIndex((field) => 'name' in field && field.name === useAsTitle)\n : -1\n\n if (useAsTitleFieldIndex > -1) {\n const useAsTitleField = sortedFieldMap.splice(useAsTitleFieldIndex, 1)[0]\n sortedFieldMap.unshift(useAsTitleField)\n }\n\n const sortTo = columns\n\n if (sortTo) {\n // sort the fields to the order of `defaultColumns` or `columns`\n sortedFieldMap = sortFieldMap<ClientField>(sortedFieldMap, sortTo)\n _sortedFieldMap = sortFieldMap<Field>(_sortedFieldMap, sortTo) // TODO: think of a way to avoid this additional sort\n }\n\n const activeColumnsIndices = []\n\n const sorted: Column[] = sortedFieldMap?.reduce((acc, clientField, colIndex) => {\n if (fieldIsHiddenOrDisabled(clientField) && !fieldIsID(clientField)) {\n return acc\n }\n\n const accessor =\n (clientField as any).accessor ?? ('name' in clientField ? clientField.name : undefined)\n\n const serverField = _sortedFieldMap.find((f) => {\n const fAccessor = (f as any).accessor ?? ('name' in f ? f.name : undefined)\n return fAccessor === accessor\n })\n\n const hasCustomCell =\n serverField?.admin &&\n 'components' in serverField.admin &&\n serverField.admin.components &&\n 'Cell' in serverField.admin.components &&\n serverField.admin.components.Cell\n\n if (serverField && serverField.type === 'group' && !hasCustomCell) {\n return acc // skip any group without a custom cell\n }\n\n const columnPref = columns?.find(\n (preference) => clientField && 'name' in clientField && preference.accessor === accessor,\n )\n\n const isActive = isColumnActive({\n accessor,\n activeColumnsIndices,\n column: columnPref,\n columns,\n })\n\n if (isActive && !activeColumnsIndices.includes(colIndex)) {\n activeColumnsIndices.push(colIndex)\n }\n\n let CustomLabel = undefined\n\n if (dataType === 'monomorphic') {\n const CustomLabelToRender =\n serverField &&\n 'admin' in serverField &&\n 'components' in serverField.admin &&\n 'Label' in serverField.admin.components &&\n serverField.admin.components.Label !== undefined // let it return `null`\n ? serverField.admin.components.Label\n : undefined\n\n // TODO: customComponent will be optional in v4\n const clientProps: Omit<ClientComponentProps, 'customComponents'> = {\n field: clientField,\n }\n\n const customLabelServerProps: Pick<\n ServerComponentProps,\n 'clientField' | 'collectionSlug' | 'field' | 'i18n' | 'payload'\n > = {\n clientField,\n collectionSlug,\n field: serverField,\n i18n,\n payload,\n }\n\n CustomLabel = CustomLabelToRender\n ? RenderServerComponent({\n clientProps,\n Component: CustomLabelToRender,\n importMap: payload.importMap,\n serverProps: customLabelServerProps,\n })\n : undefined\n }\n\n const fieldAffectsDataSubFields =\n clientField &&\n clientField.type &&\n (clientField.type === 'array' ||\n clientField.type === 'group' ||\n clientField.type === 'blocks')\n\n const label =\n clientField && 'labelWithPrefix' in clientField && clientField.labelWithPrefix !== undefined\n ? clientField.labelWithPrefix\n : 'label' in clientField\n ? clientField.label\n : undefined\n\n // Convert accessor to dot notation specifically for SortColumn sorting behavior\n const dotAccessor = accessor?.replace(/-/g, '.')\n\n const isVirtualField = serverField && 'virtual' in serverField && serverField.virtual === true\n\n const Heading = (\n <SortColumn\n disable={\n fieldAffectsDataSubFields ||\n fieldIsPresentationalOnly(clientField) ||\n isVirtualField ||\n undefined\n }\n Label={CustomLabel}\n label={label as StaticLabel}\n name={dotAccessor}\n {...(sortColumnProps || {})}\n />\n )\n\n const isLinkedColumn = enableLinkedCell && colIndex === activeColumnsIndices[0]\n\n const column: Column = {\n accessor,\n active: isActive,\n CustomLabel,\n field: clientField,\n Heading,\n isLinkedColumn,\n renderedCells: isActive\n ? docs.map((doc, rowIndex) => {\n return renderCell({\n clientField,\n collectionSlug: dataType === 'monomorphic' ? collectionSlug : doc.relationTo,\n columnIndex: colIndex,\n customCellProps,\n doc: dataType === 'monomorphic' ? doc : doc.value,\n enableRowSelections,\n i18n,\n isLinkedColumn,\n payload,\n req,\n rowIndex,\n serverField,\n viewType,\n })\n })\n : [],\n }\n\n acc.push(column)\n\n return acc\n }, [])\n\n if (beforeRows) {\n sorted.unshift(...beforeRows)\n }\n\n return sorted\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["fieldIsHiddenOrDisabled","fieldIsID","fieldIsPresentationalOnly","flattenTopLevelFields","React","RenderServerComponent","SortColumn","filterFieldsWithPermissions","isColumnActive","renderCell","sortFieldMap","buildColumnState","args","beforeRows","clientFields","collectionSlug","columns","customCellProps","dataType","docs","enableLinkedCell","enableRowSelections","fieldPermissions","i18n","payload","req","serverFields","sortColumnProps","useAsTitle","viewType","sortedFieldMap","fields","keepPresentationalFields","moveSubFieldsToTop","_sortedFieldMap","idFieldIndex","findIndex","field","idField","splice","unshift","useAsTitleFieldIndex","name","useAsTitleField","sortTo","activeColumnsIndices","sorted","reduce","acc","clientField","colIndex","accessor","undefined","serverField","find","f","fAccessor","hasCustomCell","admin","components","Cell","type","columnPref","preference","isActive","column","includes","push","CustomLabel","CustomLabelToRender","Label","clientProps","customLabelServerProps","Component","importMap","serverProps","fieldAffectsDataSubFields","label","labelWithPrefix","dotAccessor","replace","isVirtualField","virtual","Heading","_jsx","disable","isLinkedColumn","active","renderedCells","map","doc","rowIndex","relationTo","columnIndex","value"],"sources":["../../../../src/providers/TableColumns/buildColumnState/index.tsx"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type {\n ClientComponentProps,\n ClientField,\n CollectionPreferences,\n CollectionSlug,\n Column,\n DefaultCellComponentProps,\n Document,\n Field,\n PaginatedDocs,\n Payload,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedFieldsPermissions,\n ServerComponentProps,\n StaticLabel,\n ViewTypes,\n} from 'payload'\n\nimport {\n fieldIsHiddenOrDisabled,\n fieldIsID,\n fieldIsPresentationalOnly,\n flattenTopLevelFields,\n} from 'payload/shared'\nimport React from 'react'\n\nimport type { SortColumnProps } from '../../../elements/SortColumn/index.js'\n\nimport { RenderServerComponent } from '../../../elements/RenderServerComponent/index.js'\nimport {\n SortColumn,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../../../exports/client/index.js'\nimport { filterFieldsWithPermissions } from './filterFieldsWithPermissions.js'\nimport { isColumnActive } from './isColumnActive.js'\nimport { renderCell } from './renderCell.js'\nimport { sortFieldMap } from './sortFieldMap.js'\n\nexport type BuildColumnStateArgs = {\n beforeRows?: Column[]\n clientFields: ClientField[]\n columns?: CollectionPreferences['columns']\n customCellProps: DefaultCellComponentProps['customCellProps']\n enableLinkedCell?: boolean\n enableRowSelections: boolean\n enableRowTypes?: boolean\n fieldPermissions?: SanitizedFieldsPermissions\n i18n: I18nClient\n payload: Payload\n req?: PayloadRequest\n serverFields: Field[]\n sortColumnProps?: Partial<SortColumnProps>\n useAsTitle: SanitizedCollectionConfig['admin']['useAsTitle']\n viewType?: ViewTypes\n} & (\n | {\n collectionSlug: CollectionSlug\n dataType: 'monomorphic'\n docs: PaginatedDocs['docs']\n }\n | {\n collectionSlug?: undefined\n dataType: 'polymorphic'\n docs: {\n relationTo: CollectionSlug\n value: Document\n }[]\n }\n)\n\nexport const buildColumnState = (args: BuildColumnStateArgs): Column[] => {\n const {\n beforeRows,\n clientFields,\n collectionSlug,\n columns,\n customCellProps,\n dataType,\n docs,\n enableLinkedCell = true,\n enableRowSelections,\n fieldPermissions,\n i18n,\n payload,\n req,\n serverFields,\n sortColumnProps,\n useAsTitle,\n viewType,\n } = args\n\n // clientFields contains the fake `id` column\n let sortedFieldMap = flattenTopLevelFields(\n filterFieldsWithPermissions({ fieldPermissions, fields: clientFields }),\n {\n i18n,\n keepPresentationalFields: true,\n moveSubFieldsToTop: true,\n },\n ) as ClientField[]\n\n let _sortedFieldMap = flattenTopLevelFields(\n filterFieldsWithPermissions({\n fieldPermissions,\n fields: serverFields,\n }),\n {\n i18n,\n keepPresentationalFields: true,\n moveSubFieldsToTop: true,\n },\n ) as Field[] // TODO: think of a way to avoid this additional flatten\n\n // place the `ID` field first, if it exists\n // do the same for the `useAsTitle` field with precedence over the `ID` field\n // then sort the rest of the fields based on the `defaultColumns` or `columns`\n const idFieldIndex = sortedFieldMap?.findIndex((field) => fieldIsID(field))\n\n if (idFieldIndex > -1) {\n const idField = sortedFieldMap.splice(idFieldIndex, 1)[0]\n sortedFieldMap.unshift(idField)\n }\n\n const useAsTitleFieldIndex = useAsTitle\n ? sortedFieldMap.findIndex((field) => 'name' in field && field.name === useAsTitle)\n : -1\n\n if (useAsTitleFieldIndex > -1) {\n const useAsTitleField = sortedFieldMap.splice(useAsTitleFieldIndex, 1)[0]\n sortedFieldMap.unshift(useAsTitleField)\n }\n\n const sortTo = columns\n\n if (sortTo) {\n // sort the fields to the order of `defaultColumns` or `columns`\n sortedFieldMap = sortFieldMap<ClientField>(sortedFieldMap, sortTo)\n _sortedFieldMap = sortFieldMap<Field>(_sortedFieldMap, sortTo) // TODO: think of a way to avoid this additional sort\n }\n\n const activeColumnsIndices = []\n\n const sorted: Column[] = sortedFieldMap?.reduce((acc, clientField, colIndex) => {\n if (fieldIsHiddenOrDisabled(clientField) && !fieldIsID(clientField)) {\n return acc\n }\n\n const accessor =\n (clientField as any).accessor ?? ('name' in clientField ? clientField.name : undefined)\n\n const serverField = _sortedFieldMap.find((f) => {\n const fAccessor = (f as any).accessor ?? ('name' in f ? f.name : undefined)\n return fAccessor === accessor\n })\n\n const hasCustomCell =\n serverField?.admin &&\n 'components' in serverField.admin &&\n serverField.admin.components &&\n 'Cell' in serverField.admin.components &&\n serverField.admin.components.Cell\n\n if (serverField && serverField.type === 'group' && !hasCustomCell) {\n return acc // skip any group without a custom cell\n }\n\n const columnPref = columns?.find(\n (preference) => clientField && 'name' in clientField && preference.accessor === accessor,\n )\n\n const isActive = isColumnActive({\n accessor,\n activeColumnsIndices,\n column: columnPref,\n columns,\n })\n\n if (isActive && !activeColumnsIndices.includes(colIndex)) {\n activeColumnsIndices.push(colIndex)\n }\n\n let CustomLabel = undefined\n\n if (dataType === 'monomorphic') {\n const CustomLabelToRender =\n serverField &&\n 'admin' in serverField &&\n 'components' in serverField.admin &&\n serverField.admin.components &&\n 'Label' in serverField.admin.components &&\n serverField.admin.components.Label !== undefined // let it return `null`\n ? serverField.admin.components.Label\n : undefined\n\n // TODO: customComponent will be optional in v4\n const clientProps: Omit<ClientComponentProps, 'customComponents'> = {\n field: clientField,\n }\n\n const customLabelServerProps: Pick<\n ServerComponentProps,\n 'clientField' | 'collectionSlug' | 'field' | 'i18n' | 'payload'\n > = {\n clientField,\n collectionSlug,\n field: serverField,\n i18n,\n payload,\n }\n\n CustomLabel = CustomLabelToRender\n ? RenderServerComponent({\n clientProps,\n Component: CustomLabelToRender,\n importMap: payload.importMap,\n serverProps: customLabelServerProps,\n })\n : undefined\n }\n\n const fieldAffectsDataSubFields =\n clientField &&\n clientField.type &&\n (clientField.type === 'array' ||\n clientField.type === 'group' ||\n clientField.type === 'blocks')\n\n const label =\n clientField && 'labelWithPrefix' in clientField && clientField.labelWithPrefix !== undefined\n ? clientField.labelWithPrefix\n : 'label' in clientField\n ? clientField.label\n : undefined\n\n // Convert accessor to dot notation specifically for SortColumn sorting behavior\n const dotAccessor = accessor?.replace(/-/g, '.')\n\n const isVirtualField = serverField && 'virtual' in serverField && serverField.virtual === true\n\n const Heading = (\n <SortColumn\n disable={\n fieldAffectsDataSubFields ||\n fieldIsPresentationalOnly(clientField) ||\n isVirtualField ||\n undefined\n }\n Label={CustomLabel}\n label={label as StaticLabel}\n name={dotAccessor}\n {...(sortColumnProps || {})}\n />\n )\n\n const isLinkedColumn = enableLinkedCell && colIndex === activeColumnsIndices[0]\n\n const column: Column = {\n accessor,\n active: isActive,\n CustomLabel,\n field: clientField,\n Heading,\n isLinkedColumn,\n renderedCells: isActive\n ? docs.map((doc, rowIndex) => {\n return renderCell({\n clientField,\n collectionSlug: dataType === 'monomorphic' ? collectionSlug : doc.relationTo,\n columnIndex: colIndex,\n customCellProps,\n doc: dataType === 'monomorphic' ? doc : doc.value,\n enableRowSelections,\n i18n,\n isLinkedColumn,\n payload,\n req,\n rowIndex,\n serverField,\n viewType,\n })\n })\n : [],\n }\n\n acc.push(column)\n\n return acc\n }, [])\n\n if (beforeRows) {\n sorted.unshift(...beforeRows)\n }\n\n return sorted\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,40 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { buildColumnState } from './index.js';
3
+ vi.mock('../../../exports/client/index.js', () => ({
4
+ SortColumn: () => null
5
+ }));
6
+ describe('buildColumnState', () => {
7
+ it('should handle fields with admin components explicitly set to undefined', () => {
8
+ const clientField = {
9
+ name: 'title',
10
+ type: 'text'
11
+ };
12
+ const serverField = {
13
+ name: 'title',
14
+ type: 'text',
15
+ admin: {
16
+ components: undefined
17
+ }
18
+ };
19
+ const columns = buildColumnState({
20
+ clientFields: [clientField],
21
+ collectionSlug: 'posts',
22
+ customCellProps: {},
23
+ dataType: 'monomorphic',
24
+ docs: [],
25
+ enableRowSelections: false,
26
+ fieldPermissions: true,
27
+ i18n: {
28
+ t: vi.fn()
29
+ },
30
+ payload: {
31
+ importMap: {}
32
+ },
33
+ serverFields: [serverField],
34
+ useAsTitle: 'title'
35
+ });
36
+ expect(columns).toHaveLength(1);
37
+ expect(columns[0].CustomLabel).toBeUndefined();
38
+ });
39
+ });
40
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","names":["describe","expect","it","vi","buildColumnState","mock","SortColumn","clientField","name","type","serverField","admin","components","undefined","columns","clientFields","collectionSlug","customCellProps","dataType","docs","enableRowSelections","fieldPermissions","i18n","t","fn","payload","importMap","serverFields","useAsTitle","toHaveLength","CustomLabel","toBeUndefined"],"sources":["../../../../src/providers/TableColumns/buildColumnState/index.spec.ts"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type { ClientField, Field, Payload } from 'payload'\n\nimport { describe, expect, it, vi } from 'vitest'\n\nimport { buildColumnState } from './index.js'\n\nvi.mock('../../../exports/client/index.js', () => ({\n SortColumn: () => null,\n}))\n\ndescribe('buildColumnState', () => {\n it('should handle fields with admin components explicitly set to undefined', () => {\n const clientField: ClientField = {\n name: 'title',\n type: 'text',\n }\n const serverField: Field = {\n name: 'title',\n type: 'text',\n admin: {\n components: undefined,\n },\n }\n\n const columns = buildColumnState({\n clientFields: [clientField],\n collectionSlug: 'posts',\n customCellProps: {},\n dataType: 'monomorphic',\n docs: [],\n enableRowSelections: false,\n fieldPermissions: true,\n i18n: {\n t: vi.fn(),\n } as unknown as I18nClient,\n payload: {\n importMap: {},\n } as unknown as Payload,\n serverFields: [serverField],\n useAsTitle: 'title',\n })\n\n expect(columns).toHaveLength(1)\n expect(columns[0].CustomLabel).toBeUndefined()\n })\n})\n"],"mappings":"AAGA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ;AAEzC,SAASC,gBAAgB,QAAQ;AAEjCD,EAAA,CAAGE,IAAI,CAAC,oCAAoC,OAAO;EACjDC,UAAA,EAAYA,CAAA,KAAM;AACpB;AAEAN,QAAA,CAAS,oBAAoB;EAC3BE,EAAA,CAAG,0EAA0E;IAC3E,MAAMK,WAAA,GAA2B;MAC/BC,IAAA,EAAM;MACNC,IAAA,EAAM;IACR;IACA,MAAMC,WAAA,GAAqB;MACzBF,IAAA,EAAM;MACNC,IAAA,EAAM;MACNE,KAAA,EAAO;QACLC,UAAA,EAAYC;MACd;IACF;IAEA,MAAMC,OAAA,GAAUV,gBAAA,CAAiB;MAC/BW,YAAA,EAAc,CAACR,WAAA,CAAY;MAC3BS,cAAA,EAAgB;MAChBC,eAAA,EAAiB,CAAC;MAClBC,QAAA,EAAU;MACVC,IAAA,EAAM,EAAE;MACRC,mBAAA,EAAqB;MACrBC,gBAAA,EAAkB;MAClBC,IAAA,EAAM;QACJC,CAAA,EAAGpB,EAAA,CAAGqB,EAAE;MACV;MACAC,OAAA,EAAS;QACPC,SAAA,EAAW,CAAC;MACd;MACAC,YAAA,EAAc,CAACjB,WAAA,CAAY;MAC3BkB,UAAA,EAAY;IACd;IAEA3B,MAAA,CAAOa,OAAA,EAASe,YAAY,CAAC;IAC7B5B,MAAA,CAAOa,OAAO,CAAC,EAAE,CAACgB,WAAW,EAAEC,aAAa;EAC9C;AACF","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- export type Theme = 'dark' | 'light';
2
+ import { defaultTheme, type Theme } from './shared.js';
3
+ export { defaultTheme, type Theme };
3
4
  export type ThemeContext = {
4
5
  autoMode: boolean;
5
6
  highContrastMode: boolean;
@@ -11,7 +12,6 @@ export type ThemeContext = {
11
12
  }) => void;
12
13
  theme: Theme;
13
14
  };
14
- export declare const defaultTheme: Theme;
15
15
  /**
16
16
  * Provides theme context to its children.
17
17
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Theme/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAInF,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAEpC,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,OAAO,CAAA;IACzB,mBAAmB,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACtF,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACzE,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AA4DD,eAAO,MAAM,YAAY,EAAE,KAAe,CAAA;AAE1C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAgGA,CAAA;AAED,eAAO,MAAM,QAAQ,QAAO,YAA8C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Theme/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAE,CAAA;AAEnC,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,OAAO,CAAA;IACzB,mBAAmB,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACtF,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACzE,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AA4DD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAgGA,CAAA;AAED,eAAO,MAAM,QAAQ,QAAO,YAA8C,CAAA"}
@@ -4,6 +4,8 @@ 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 { defaultTheme } from './shared.js';
8
+ export { defaultTheme };
7
9
  const initialContext = {
8
10
  autoMode: true,
9
11
  highContrastMode: false,
@@ -37,7 +39,6 @@ const detectHighContrastMode = cookieKey => {
37
39
  }
38
40
  return isHighContrast;
39
41
  };
40
- export const defaultTheme = 'light';
41
42
  /**
42
43
  * Provides theme context to its children.
43
44
  *
@@ -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","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","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'\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\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":[]}
@@ -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":[]}
@@ -1,18 +1,13 @@
1
- import type { UploadCollectionSlug } from 'payload';
1
+ import type { UploadCollectionSlug, UploadInstructions } from 'payload';
2
2
  import React from 'react';
3
3
  type UploadHandler = (args: {
4
4
  docPrefix?: string;
5
5
  file: File;
6
- updateFilename: (filename: string) => void;
7
- }) => Promise<unknown>;
6
+ }) => Promise<UploadInstructions['file']>;
8
7
  export type UploadHandlersContext = {
9
8
  getUploadHandler: (args: {
10
9
  collectionSlug: UploadCollectionSlug;
11
10
  }) => null | UploadHandler;
12
- setUploadHandler: (args: {
13
- collectionSlug: UploadCollectionSlug;
14
- handler: UploadHandler;
15
- }) => unknown;
16
11
  };
17
12
  export declare const UploadHandlersProvider: ({ children }: {
18
13
  children: any;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/UploadHandlers/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEnD,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,IAAI,CAAA;IACV,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtB,MAAM,MAAM,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,cAAc,EAAE,oBAAoB,CAAA;KAAE,KAAK,IAAI,GAAG,aAAa,CAAA;IAC1F,gBAAgB,EAAE,CAAC,IAAI,EAAE;QACvB,cAAc,EAAE,oBAAoB,CAAA;QACpC,OAAO,EAAE,aAAa,CAAA;KACvB,KAAK,OAAO,CAAA;CACd,CAAA;AAID,eAAO,MAAM,sBAAsB;;uBAqBlC,CAAA;AAED,eAAO,MAAM,iBAAiB,QAAO,qBAQpC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/UploadHandlers/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAGvE,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,IAAI,CAAA;CACX,KAAK,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAA;AAEzC,MAAM,MAAM,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,cAAc,EAAE,oBAAoB,CAAA;KAAE,KAAK,IAAI,GAAG,aAAa,CAAA;CAC3F,CAAA;AAID,eAAO,MAAM,sBAAsB;;uBAyElC,CAAA;AAED,eAAO,MAAM,iBAAiB,QAAO,qBAQpC,CAAA"}
@@ -2,62 +2,119 @@
2
2
 
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
- import React, { useState } from 'react';
5
+ import { formatAdminURL } from 'payload/shared';
6
+ import React from 'react';
7
+ import { useConfig } from '../Config/index.js';
6
8
  const Context = /*#__PURE__*/React.createContext(null);
7
9
  export const UploadHandlersProvider = t0 => {
8
- const $ = _c(6);
10
+ const $ = _c(5);
9
11
  const {
10
12
  children
11
13
  } = t0;
12
- const [uploadHandlers, setUploadHandlers] = useState(_temp);
14
+ const {
15
+ config,
16
+ getEntityConfig
17
+ } = useConfig();
13
18
  let t1;
14
- if ($[0] !== uploadHandlers) {
15
- t1 = t2 => {
19
+ if ($[0] !== children || $[1] !== config.routes.api || $[2] !== config.serverURL || $[3] !== getEntityConfig) {
20
+ const uploadInstructionsURL = formatAdminURL({
21
+ apiRoute: config.routes.api,
22
+ path: "/upload-instructions",
23
+ serverURL: config.serverURL
24
+ });
25
+ const getUploadHandler = t2 => {
16
26
  const {
17
27
  collectionSlug
18
28
  } = t2;
19
- return uploadHandlers.get(collectionSlug);
20
- };
21
- $[0] = uploadHandlers;
22
- $[1] = t1;
23
- } else {
24
- t1 = $[1];
25
- }
26
- const getUploadHandler = t1;
27
- let t2;
28
- if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
29
- t2 = t3 => {
30
- const {
31
- collectionSlug: collectionSlug_0,
32
- handler
33
- } = t3;
34
- setUploadHandlers(uploadHandlers_0 => {
35
- const clone = new Map(uploadHandlers_0);
36
- clone.set(collectionSlug_0, handler);
37
- return clone;
38
- });
29
+ if (!getEntityConfig({
30
+ collectionSlug
31
+ })?.upload?.uploadInstructions.useInAdmin) {
32
+ return null;
33
+ }
34
+ return async t3 => {
35
+ const {
36
+ docPrefix,
37
+ file
38
+ } = t3;
39
+ const response = await fetch(uploadInstructionsURL, {
40
+ body: JSON.stringify({
41
+ collectionSlug,
42
+ docPrefix,
43
+ filename: file.name,
44
+ filesize: file.size,
45
+ mimeType: file.type
46
+ }),
47
+ credentials: "include",
48
+ headers: {
49
+ "Content-Type": "application/json"
50
+ },
51
+ method: "POST"
52
+ });
53
+ if (!response.ok) {
54
+ const {
55
+ errors
56
+ } = await response.json();
57
+ throw new Error(errors.map(_temp).join(", "));
58
+ }
59
+ const instructions = await response.json();
60
+ let uploadedFile = instructions.file;
61
+ if (instructions.type === "http") {
62
+ const {
63
+ url,
64
+ ...request
65
+ } = instructions.request;
66
+ const upload = await fetch(url, {
67
+ body: file,
68
+ ...request
69
+ });
70
+ if (!upload.ok) {
71
+ throw new Error(`Upload failed with status ${upload.status}`);
72
+ }
73
+ return uploadedFile;
74
+ }
75
+ const result = await new Promise((resolve, reject) => {
76
+ const event = new CustomEvent(`payload:upload:${instructions.name}`, {
77
+ cancelable: true,
78
+ detail: {
79
+ collectionSlug,
80
+ data: instructions.data,
81
+ docPrefix,
82
+ file,
83
+ reject,
84
+ resolve,
85
+ updateFilename: filename => {
86
+ uploadedFile = {
87
+ ...uploadedFile,
88
+ filename
89
+ };
90
+ }
91
+ }
92
+ });
93
+ if (window.dispatchEvent(event)) {
94
+ reject(new Error(`Unsupported upload instruction: ${instructions.name}`));
95
+ }
96
+ });
97
+ return typeof result === "object" && result !== null ? {
98
+ ...uploadedFile,
99
+ uploadReference: result
100
+ } : uploadedFile;
101
+ };
39
102
  };
40
- $[2] = t2;
41
- } else {
42
- t2 = $[2];
43
- }
44
- const setUploadHandler = t2;
45
- let t3;
46
- if ($[3] !== children || $[4] !== getUploadHandler) {
47
- t3 = _jsx(Context, {
103
+ t1 = _jsx(Context, {
48
104
  value: {
49
- getUploadHandler,
50
- setUploadHandler
105
+ getUploadHandler
51
106
  },
52
107
  children
53
108
  });
54
- $[3] = children;
55
- $[4] = getUploadHandler;
56
- $[5] = t3;
109
+ $[0] = children;
110
+ $[1] = config.routes.api;
111
+ $[2] = config.serverURL;
112
+ $[3] = getEntityConfig;
113
+ $[4] = t1;
57
114
  } else {
58
- t3 = $[5];
115
+ t1 = $[4];
59
116
  }
60
- return t3;
117
+ return t1;
61
118
  };
62
119
  export const useUploadHandlers = () => {
63
120
  const context = React.use(Context);
@@ -66,7 +123,10 @@ export const useUploadHandlers = () => {
66
123
  }
67
124
  return context;
68
125
  };
69
- function _temp() {
70
- return new Map();
126
+ function _temp(t0) {
127
+ const {
128
+ message
129
+ } = t0;
130
+ return message;
71
131
  }
72
132
  //# sourceMappingURL=index.js.map