@strapi/admin 5.46.1 → 5.47.1
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.
- package/dist/admin/admin/src/StrapiApp.js +53 -11
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +53 -11
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +51 -8
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +52 -9
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js +167 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js.map +1 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs +165 -0
- package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs.map +1 -0
- package/dist/admin/admin/src/constants.js +8 -11
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs +8 -11
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +27 -1
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +28 -2
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +62 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +40 -0
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/constants.js +1 -2
- package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/constants.mjs +1 -2
- package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +2 -1
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +2 -1
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/translations/{dk.json.js → da.json.js} +3 -3
- package/dist/admin/admin/src/translations/{dk.json.js.map → da.json.js.map} +1 -1
- package/dist/admin/admin/src/translations/{dk.json.mjs → da.json.mjs} +3 -3
- package/dist/admin/admin/src/translations/{dk.json.mjs.map → da.json.mjs.map} +1 -1
- package/dist/admin/admin/src/translations/en.json.js +1 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +1 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.js +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.js.map +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.mjs +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.mjs.map +1 -1
- package/dist/admin/admin/src/translations/normalizeAdminLocale.js +8 -0
- package/dist/admin/admin/src/translations/normalizeAdminLocale.js.map +1 -0
- package/dist/admin/admin/src/translations/normalizeAdminLocale.mjs +6 -0
- package/dist/admin/admin/src/translations/normalizeAdminLocale.mjs.map +1 -0
- package/dist/admin/admin/src/translations/sk.json.js +446 -42
- package/dist/admin/admin/src/translations/sk.json.js.map +1 -1
- package/dist/admin/admin/src/translations/sk.json.mjs +445 -43
- package/dist/admin/admin/src/translations/sk.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +5 -0
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +6 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +23 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/jwt.js +37 -0
- package/dist/admin/admin/src/utils/jwt.js.map +1 -0
- package/dist/admin/admin/src/utils/jwt.mjs +35 -0
- package/dist/admin/admin/src/utils/jwt.mjs.map +1 -0
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/StrapiApp.d.ts +2 -0
- package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +2 -0
- package/dist/admin/src/components/Layouts/utils/getMatchingDocLink.d.ts +6 -0
- package/dist/admin/src/features/Tracking.d.ts +8 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +33 -0
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/translations/languageNativeNames.d.ts +1 -1
- package/dist/admin/src/translations/normalizeAdminLocale.d.ts +4 -0
- package/dist/admin/src/utils/getFetchClient.d.ts +15 -1
- package/dist/admin/src/utils/jwt.d.ts +15 -0
- package/dist/server/server/src/bootstrap.js +3 -2
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +4 -3
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +8 -2
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +8 -2
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/webhooks.js +1 -2
- package/dist/server/server/src/controllers/webhooks.js.map +1 -1
- package/dist/server/server/src/controllers/webhooks.mjs +1 -2
- package/dist/server/server/src/controllers/webhooks.mjs.map +1 -1
- package/dist/server/server/src/migrations/database/migrate-prefered-language-dk-to-da.js +28 -0
- package/dist/server/server/src/migrations/database/migrate-prefered-language-dk-to-da.js.map +1 -0
- package/dist/server/server/src/migrations/database/migrate-prefered-language-dk-to-da.mjs +26 -0
- package/dist/server/server/src/migrations/database/migrate-prefered-language-dk-to-da.mjs.map +1 -0
- package/dist/server/server/src/policies/index.js +0 -2
- package/dist/server/server/src/policies/index.js.map +1 -1
- package/dist/server/server/src/policies/index.mjs +0 -2
- package/dist/server/server/src/policies/index.mjs.map +1 -1
- package/dist/server/server/src/register.js +3 -1
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +2 -0
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/admin-tokens.js +0 -7
- package/dist/server/server/src/routes/admin-tokens.js.map +1 -1
- package/dist/server/server/src/routes/admin-tokens.mjs +0 -7
- package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js +8 -1
- package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs +6 -2
- package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +71 -1
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +71 -2
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/token.js +11 -0
- package/dist/server/server/src/services/token.js.map +1 -1
- package/dist/server/server/src/services/token.mjs +11 -1
- package/dist/server/server/src/services/token.mjs.map +1 -1
- package/dist/server/server/src/strategies/admin-token.js +5 -63
- package/dist/server/server/src/strategies/admin-token.js.map +1 -1
- package/dist/server/server/src/strategies/admin-token.mjs +6 -64
- package/dist/server/server/src/strategies/admin-token.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/webhooks.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +0 -5
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/migrations/database/migrate-prefered-language-dk-to-da.d.ts +22 -0
- package/dist/server/src/migrations/database/migrate-prefered-language-dk-to-da.d.ts.map +1 -0
- package/dist/server/src/policies/index.d.ts +0 -5
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin-tokens.d.ts.map +1 -1
- package/dist/server/src/routes/serve-admin-panel.d.ts +2 -0
- package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts +15 -1
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/token.d.ts +7 -1
- package/dist/server/src/services/token.d.ts.map +1 -1
- package/dist/server/src/strategies/admin-token.d.ts +12 -22
- package/dist/server/src/strategies/admin-token.d.ts.map +1 -1
- package/package.json +10 -12
- package/dist/server/server/src/policies/isAdminTokensEnabled.js +0 -16
- package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +0 -1
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +0 -14
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +0 -1
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts +0 -7
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrapiApp.mjs","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { Cloud, Clock, User, TrendUp } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\nimport type { DefaultTheme } from 'styled-components';\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n INJECT_LIST_VIEW_FILTERS,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(INJECT_LIST_VIEW_FILTERS);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n this.configurations.locales = [\n 'en',\n ...(customConfig.locales?.filter((loc) => loc !== 'en') || []),\n ];\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n {\n icon: TrendUp,\n title: {\n id: 'widget.key-statistics.title',\n defaultMessage: 'Project statistics',\n },\n component: async () => {\n const { KeyStatisticsWidget } = await import('./components/Widgets');\n return KeyStatisticsWidget;\n },\n pluginId: 'admin',\n id: 'key-statistics',\n roles: ['strapi-super-admin'],\n },\n {\n icon: Cloud,\n title: {\n id: 'widget.deploy-now.title',\n defaultMessage: 'Deploy',\n },\n component: async () => {\n const { DeployNowWidget } = await import('./components/Widgets');\n return DeployNowWidget;\n },\n pluginId: 'admin',\n id: 'deploy-now',\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n\n // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const adminTranslations = await this.loadAdminTrads();\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: this.configurations.locales });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = currentPluginTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc1, current) => {\n acc1[current.locale] = current.data;\n\n return acc1;\n },\n {}\n );\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(customTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const locale = (localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) ||\n 'en') as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["INJECT_COLUMN_IN_TABLE","INJECT_LIST_VIEW_FILTERS","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","TrendUp","KeyStatisticsWidget","roles","Cloud","DeployNowWidget","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","locale","default","data","reduce","acc","current","loadTrads","customTranslations","adminTranslations","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","acc1","translations","resolve","render","localeNames","pick","languageNativeNames","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","config","plugins","hooksDict","admin","injectionZones","authLogo","Logo","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","loc","auth","logo","menu","console","warn","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StrapiApp.mjs","sources":["../../../../admin/src/StrapiApp.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport { Cloud, Clock, User, TrendUp } from '@strapi/icons';\nimport invariant from 'invariant';\nimport isFunction from 'lodash/isFunction';\nimport merge from 'lodash/merge';\nimport pick from 'lodash/pick';\nimport uniq from 'lodash/uniq';\nimport { RouterProvider } from 'react-router-dom';\n\nimport { ADMIN_PERMISSIONS_EE, AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../ee/admin/src/constants';\n\nimport Logo from './assets/images/logo-strapi-2022.svg';\nimport { ADMIN_PERMISSIONS_CE, HOOKS } from './constants';\nimport { CustomFields } from './core/apis/CustomFields';\nimport { Plugin, PluginConfig } from './core/apis/Plugin';\nimport { RBAC, RBACMiddleware } from './core/apis/rbac';\nimport { Router, StrapiAppSetting, UnloadedSettingsLink } from './core/apis/router';\nimport { Widgets } from './core/apis/Widgets';\nimport { RootState, Store, configureStore } from './core/store/configure';\nimport { getBasename } from './core/utils/basename';\nimport { Handler, createHook } from './core/utils/createHook';\nimport {\n THEME_LOCAL_STORAGE_KEY,\n LANGUAGE_LOCAL_STORAGE_KEY,\n ThemeName,\n getStoredToken,\n} from './reducer';\nimport { getInitialRoutes } from './router';\nimport { languageNativeNames } from './translations/languageNativeNames';\nimport { normalizeAdminLocale } from './translations/normalizeAdminLocale';\n\nimport type { ReducersMapObject, Middleware } from '@reduxjs/toolkit';\nimport type { DefaultTheme } from 'styled-components';\n\n/**\n * Canonical admin locale codes mapped to legacy translation file names still\n * shipped by some plugins.\n */\nconst ADMIN_LOCALE_LEGACY_ALIASES: Record<string, string> = {\n da: 'dk',\n};\n\nconst {\n INJECT_COLUMN_IN_TABLE,\n INJECT_LIST_VIEW_FILTERS,\n MUTATE_COLLECTION_TYPES_LINKS,\n MUTATE_EDIT_VIEW_LAYOUT,\n MUTATE_SINGLE_TYPES_LINKS,\n} = HOOKS;\n\ninterface StrapiAppConstructorArgs extends Partial<Pick<StrapiApp, 'appPlugins'>> {\n config?: {\n auth?: { logo: string };\n locales?: string[];\n menu?: { logo: string };\n notifications?: { releases: boolean };\n theme?: { light: DefaultTheme; dark: DefaultTheme };\n translations?: Record<string, Record<string, string>>;\n tutorials?: boolean;\n };\n}\n\ntype Translation = { data: Record<string, string>; locale: string };\ntype Translations = Array<Translation>;\n\ninterface StrapiAppPlugin {\n bootstrap?: (\n args: Pick<StrapiApp, 'addSettingsLink' | 'addSettingsLinks' | 'getPlugin' | 'registerHook'>\n ) => void;\n register: (app: StrapiApp) => void;\n registerTrads?: (args: { locales: string[] }) => Promise<Translations>;\n}\n\ninterface InjectionZoneComponent {\n Component: React.ComponentType;\n name: string;\n // TODO: in theory this could receive and forward any React component prop\n // but in practice there only seems to be once instance, where `slug` is\n // forwarded. The type needs to become either more generic or we disallow\n // prop spreading and offer a different way to access context data.\n slug: string;\n}\n\ninterface Component {\n name: string;\n Component: React.ComponentType;\n}\n\ninterface Field {\n type: string;\n Component: React.ComponentType;\n}\n\ninterface Library {\n fields: Record<Field['type'], Field['Component']>;\n components: Record<Component['name'], Component['Component']>;\n}\n\nclass StrapiApp {\n appPlugins: Record<string, StrapiAppPlugin>;\n plugins: Record<string, Plugin> = {};\n hooksDict: Record<string, ReturnType<typeof createHook>> = {};\n private warnedLegacyLocalePairs = new Set<string>();\n\n admin = {\n injectionZones: {},\n };\n\n translations: StrapiApp['configurations']['translations'] = {};\n\n configurations = {\n authLogo: Logo,\n locales: ['en'],\n menuLogo: Logo,\n notifications: { releases: true },\n themes: { light: lightTheme, dark: darkTheme },\n translations: {},\n tutorials: true,\n };\n\n /**\n * APIs\n */\n rbac = new RBAC();\n router: Router;\n library: Library = {\n components: {},\n fields: {},\n };\n middlewares: Array<() => Middleware<object, RootState>> = [];\n reducers: ReducersMapObject = {};\n store: Store | null = null;\n customFields = new CustomFields();\n widgets = new Widgets();\n\n constructor({ config, appPlugins }: StrapiAppConstructorArgs = {}) {\n this.appPlugins = appPlugins || {};\n\n this.createCustomConfigurations(config ?? {});\n\n this.createHook(INJECT_COLUMN_IN_TABLE);\n this.createHook(INJECT_LIST_VIEW_FILTERS);\n this.createHook(MUTATE_COLLECTION_TYPES_LINKS);\n this.createHook(MUTATE_SINGLE_TYPES_LINKS);\n this.createHook(MUTATE_EDIT_VIEW_LAYOUT);\n\n this.router = new Router(getInitialRoutes());\n }\n\n addComponents = (components: Component | Component[]) => {\n if (Array.isArray(components)) {\n components.map((comp) => {\n invariant(comp.Component, 'A Component must be provided');\n invariant(comp.name, 'A type must be provided');\n\n this.library.components[comp.name] = comp.Component;\n });\n } else {\n invariant(components.Component, 'A Component must be provided');\n invariant(components.name, 'A type must be provided');\n\n this.library.components[components.name] = components.Component;\n }\n };\n\n addFields = (fields: Field | Field[]) => {\n if (Array.isArray(fields)) {\n fields.map((field) => {\n invariant(field.Component, 'A Component must be provided');\n invariant(field.type, 'A type must be provided');\n\n this.library.fields[field.type] = field.Component;\n });\n } else {\n invariant(fields.Component, 'A Component must be provided');\n invariant(fields.type, 'A type must be provided');\n\n this.library.fields[fields.type] = fields.Component;\n }\n };\n\n addMiddlewares = (middlewares: StrapiApp['middlewares']) => {\n middlewares.forEach((middleware) => {\n this.middlewares.push(middleware);\n });\n };\n\n addRBACMiddleware = (m: RBACMiddleware | RBACMiddleware[]) => {\n if (Array.isArray(m)) {\n this.rbac.use(m);\n } else {\n this.rbac.use(m);\n }\n };\n\n addReducers = (reducers: ReducersMapObject) => {\n /**\n * TODO: when we upgrade to redux-toolkit@2 and we can also dynamically add middleware,\n * we'll deprecate these two APIs in favour of their hook counterparts.\n */\n Object.entries(reducers).forEach(([name, reducer]) => {\n this.reducers[name] = reducer;\n });\n };\n\n addMenuLink = (link: Parameters<typeof this.router.addMenuLink>[0]) =>\n this.router.addMenuLink(link);\n\n /**\n * @deprecated use `addSettingsLink` instead, it internally supports\n * adding multiple links at once.\n */\n addSettingsLinks = (sectionId: string, links: UnloadedSettingsLink[]) => {\n invariant(Array.isArray(links), 'TypeError expected links to be an array');\n\n this.router.addSettingsLink(sectionId, links);\n };\n\n /**\n * @deprecated use `addSettingsLink` instead, you can pass a section object to\n * create the section and links at the same time.\n */\n createSettingSection = (\n section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n links: UnloadedSettingsLink[]\n ) => this.router.addSettingsLink(section, links);\n\n addSettingsLink = (\n sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>,\n link: UnloadedSettingsLink\n ) => {\n this.router.addSettingsLink(sectionId, link);\n };\n\n async bootstrap(customBootstrap?: unknown) {\n Object.keys(this.appPlugins).forEach((plugin) => {\n const bootstrap = this.appPlugins[plugin].bootstrap;\n\n if (bootstrap) {\n bootstrap({\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n });\n\n if (isFunction(customBootstrap)) {\n customBootstrap({\n addComponents: this.addComponents,\n addFields: this.addFields,\n addMenuLink: this.addMenuLink,\n addReducers: this.addReducers,\n addSettingsLink: this.addSettingsLink,\n addSettingsLinks: this.addSettingsLinks,\n getPlugin: this.getPlugin,\n registerHook: this.registerHook,\n });\n }\n }\n\n createCustomConfigurations = (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => {\n if (customConfig.locales) {\n const extraLocales =\n customConfig.locales\n ?.filter((loc) => loc !== 'en')\n .map((loc) => normalizeAdminLocale(loc)) || [];\n\n this.configurations.locales = uniq(['en', ...extraLocales]);\n }\n\n if (customConfig.auth?.logo) {\n this.configurations.authLogo = customConfig.auth.logo;\n }\n\n if (customConfig.menu?.logo) {\n this.configurations.menuLogo = customConfig.menu.logo;\n }\n\n if (customConfig.theme) {\n const darkTheme = customConfig.theme.dark;\n const lightTheme = customConfig.theme.light;\n\n if (!darkTheme && !lightTheme) {\n console.warn(\n `[deprecated] In future versions, Strapi will stop supporting this theme customization syntax. The theme configuration accepts a light and a dark key to customize each theme separately. See https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#theme-extension.`.trim()\n );\n merge(this.configurations.themes.light, customConfig.theme);\n }\n\n if (lightTheme) merge(this.configurations.themes.light, lightTheme);\n\n if (darkTheme) merge(this.configurations.themes.dark, darkTheme);\n }\n\n if (customConfig.notifications?.releases !== undefined) {\n this.configurations.notifications.releases = customConfig.notifications.releases;\n }\n\n if (customConfig.tutorials !== undefined) {\n this.configurations.tutorials = customConfig.tutorials;\n }\n };\n\n createHook = (name: string) => {\n this.hooksDict[name] = createHook();\n };\n\n getAdminInjectedComponents = (\n moduleName: string,\n containerName: string,\n blockName: string\n ): InjectionZoneComponent[] => {\n try {\n // @ts-expect-error – we have a catch block so if you don't pass it correctly we still return an array.\n return this.admin.injectionZones[moduleName][containerName][blockName] || [];\n } catch (err) {\n console.error('Cannot get injected component', err);\n\n return [];\n }\n };\n\n getPlugin = (pluginId: PluginConfig['id']) => this.plugins[pluginId];\n\n async register(customRegister?: unknown) {\n this.widgets.register([\n {\n icon: User,\n title: {\n id: 'widget.profile.title',\n defaultMessage: 'Profile',\n },\n component: async () => {\n const { ProfileWidget } = await import('./components/Widgets');\n return ProfileWidget;\n },\n pluginId: 'admin',\n id: 'profile-info',\n link: {\n label: {\n id: 'global.profile.settings',\n defaultMessage: 'Profile settings',\n },\n href: '/me',\n },\n },\n {\n icon: TrendUp,\n title: {\n id: 'widget.key-statistics.title',\n defaultMessage: 'Project statistics',\n },\n component: async () => {\n const { KeyStatisticsWidget } = await import('./components/Widgets');\n return KeyStatisticsWidget;\n },\n pluginId: 'admin',\n id: 'key-statistics',\n roles: ['strapi-super-admin'],\n },\n {\n icon: Cloud,\n title: {\n id: 'widget.deploy-now.title',\n defaultMessage: 'Deploy',\n },\n component: async () => {\n const { DeployNowWidget } = await import('./components/Widgets');\n return DeployNowWidget;\n },\n pluginId: 'admin',\n id: 'deploy-now',\n },\n ]);\n\n Object.keys(this.appPlugins).forEach((plugin) => {\n this.appPlugins[plugin].register(this);\n });\n\n if (isFunction(customRegister)) {\n customRegister(this);\n }\n\n // Register Audit Logs widget at the end of the widgets array\n if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) {\n this.widgets.register([\n {\n icon: Clock,\n title: {\n id: 'widget.last-activity.title',\n defaultMessage: 'Last activity',\n },\n component: async () => {\n const { AuditLogsWidget } = await import(\n '../../ee/admin/src/components/AuditLogs/Widgets'\n );\n return AuditLogsWidget;\n },\n pluginId: 'admin',\n id: 'audit-logs',\n link: {\n label: {\n id: 'widget.last-activity.link',\n defaultMessage: 'Open Audit Logs',\n },\n href: `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC`,\n },\n permissions: [{ action: 'admin::audit-logs.read' }],\n },\n ]);\n }\n }\n\n private mergePluginTranslationsByCanonical(pluginTradsBatch: Translation[]) {\n return pluginTradsBatch.reduce<Record<string, Translation['data']>>((acc, current) => {\n const canonicalLocale = normalizeAdminLocale(current.locale);\n\n acc[canonicalLocale] = {\n ...(current.locale === canonicalLocale ? acc[canonicalLocale] : current.data),\n ...(current.locale === canonicalLocale ? current.data : acc[canonicalLocale]),\n };\n\n if (current.locale !== canonicalLocale && Object.keys(current.data).length > 0) {\n const deprecationKey = `${canonicalLocale}:${current.locale}`;\n\n if (!this.warnedLegacyLocalePairs.has(deprecationKey)) {\n this.warnedLegacyLocalePairs.add(deprecationKey);\n console.warn(\n `[deprecated] Admin locale \"${current.locale}\" is deprecated. Rename translation files to \"${canonicalLocale}.json\".`\n );\n }\n }\n\n return acc;\n }, {});\n }\n\n async loadAdminTrads() {\n const adminLocales = await Promise.all(\n this.configurations.locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.js`);\n\n return { data, locale };\n } catch {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n return { data, locale };\n } catch {\n return { data: null, locale };\n }\n }\n })\n );\n\n return adminLocales.reduce<{ [locale: string]: Record<string, string> }>((acc, current) => {\n if (current.data) {\n acc[current.locale] = current.data;\n }\n\n return acc;\n }, {});\n }\n\n /**\n * Load the application's translations and merged the custom translations\n * with the default ones.\n */\n async loadTrads(customTranslations: Record<string, Record<string, string>> = {}) {\n const normalizedCustomTranslations = Object.keys(customTranslations).reduce<\n Record<string, Record<string, string>>\n >((acc, key) => {\n const normalizedKey = normalizeAdminLocale(key);\n\n acc[normalizedKey] = {\n ...(acc[normalizedKey] || {}),\n ...customTranslations[key],\n };\n\n return acc;\n }, {});\n\n const adminTranslations = await this.loadAdminTrads();\n const localesForPlugins = uniq(\n this.configurations.locales.flatMap((locale) => {\n const legacyLocale = ADMIN_LOCALE_LEGACY_ALIASES[locale];\n\n return legacyLocale ? [locale, legacyLocale] : [locale];\n })\n );\n\n const arrayOfPromises = Object.keys(this.appPlugins)\n .map((plugin) => {\n const registerTrads = this.appPlugins[plugin].registerTrads;\n\n if (registerTrads) {\n return registerTrads({ locales: localesForPlugins });\n }\n\n return null;\n })\n .filter((a) => a);\n\n const pluginsTrads = (await Promise.all(arrayOfPromises)) as Array<Translation[]>;\n const mergedTrads = pluginsTrads.reduce<{ [locale: string]: Translation['data'] }>(\n (acc, currentPluginTrads) => {\n const pluginTrads = this.mergePluginTranslationsByCanonical(currentPluginTrads);\n\n Object.keys(pluginTrads).forEach((locale) => {\n acc[locale] = { ...acc[locale], ...pluginTrads[locale] };\n });\n\n return acc;\n },\n {}\n );\n\n const translations = this.configurations.locales.reduce<{\n [locale: string]: Translation['data'];\n }>((acc, current) => {\n acc[current] = {\n ...adminTranslations[current],\n ...(mergedTrads[current] || {}),\n ...(normalizedCustomTranslations[current] ?? {}),\n };\n\n return acc;\n }, {});\n\n this.configurations.translations = translations;\n\n return Promise.resolve();\n }\n\n registerHook = (name: string, fn: Handler) => {\n invariant(\n this.hooksDict[name],\n `The hook ${name} is not defined. You are trying to register a hook that does not exist in the application.`\n );\n this.hooksDict[name].register(fn);\n };\n\n registerPlugin = (pluginConf: PluginConfig) => {\n const plugin = new Plugin(pluginConf);\n\n this.plugins[plugin.pluginId] = plugin;\n };\n\n runHookSeries = (name: string, asynchronous = false) =>\n asynchronous ? this.hooksDict[name].runSeriesAsync() : this.hooksDict[name].runSeries();\n\n runHookWaterfall = <T,>(name: string, initialValue: T, store?: Store) => {\n return this.hooksDict[name].runWaterfall(initialValue, store);\n };\n\n runHookParallel = (name: string) => this.hooksDict[name].runParallel();\n\n render() {\n const localeNames = pick(languageNativeNames, this.configurations.locales || []);\n const storedLocale = localStorage.getItem(LANGUAGE_LOCAL_STORAGE_KEY) || 'en';\n const locale = normalizeAdminLocale(storedLocale) as keyof typeof localeNames;\n\n this.store = configureStore(\n {\n admin_app: {\n permissions: merge({}, ADMIN_PERMISSIONS_CE, ADMIN_PERMISSIONS_EE),\n theme: {\n availableThemes: [],\n currentTheme: (localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || 'system') as ThemeName,\n },\n language: {\n locale: localeNames[locale] ? locale : 'en',\n localeNames,\n },\n token: getStoredToken(),\n },\n },\n this.middlewares,\n this.reducers\n ) as Store;\n\n const router = this.router.createRouter(this, {\n basename: getBasename(),\n });\n\n return <RouterProvider router={router} />;\n }\n}\n\nexport { StrapiApp };\nexport type { StrapiAppPlugin, StrapiAppConstructorArgs, InjectionZoneComponent };\n"],"names":["ADMIN_LOCALE_LEGACY_ALIASES","da","INJECT_COLUMN_IN_TABLE","INJECT_LIST_VIEW_FILTERS","MUTATE_COLLECTION_TYPES_LINKS","MUTATE_EDIT_VIEW_LAYOUT","MUTATE_SINGLE_TYPES_LINKS","HOOKS","StrapiApp","bootstrap","customBootstrap","Object","keys","appPlugins","forEach","plugin","addSettingsLink","addSettingsLinks","getPlugin","registerHook","isFunction","addComponents","addFields","addMenuLink","addReducers","register","customRegister","widgets","icon","User","title","id","defaultMessage","component","ProfileWidget","pluginId","link","label","href","TrendUp","KeyStatisticsWidget","roles","Cloud","DeployNowWidget","window","strapi","features","isEnabled","AUDIT_LOGS","Clock","AuditLogsWidget","AUDIT_LOGS_DEFAULT_PAGE_SIZE","permissions","action","mergePluginTranslationsByCanonical","pluginTradsBatch","reduce","acc","current","canonicalLocale","normalizeAdminLocale","locale","data","length","deprecationKey","warnedLegacyLocalePairs","has","add","console","warn","loadAdminTrads","adminLocales","Promise","all","configurations","locales","map","default","loadTrads","customTranslations","normalizedCustomTranslations","key","normalizedKey","adminTranslations","localesForPlugins","uniq","flatMap","legacyLocale","arrayOfPromises","registerTrads","filter","a","pluginsTrads","mergedTrads","currentPluginTrads","pluginTrads","translations","resolve","render","localeNames","pick","languageNativeNames","storedLocale","localStorage","getItem","LANGUAGE_LOCAL_STORAGE_KEY","store","configureStore","admin_app","merge","ADMIN_PERMISSIONS_CE","ADMIN_PERMISSIONS_EE","theme","availableThemes","currentTheme","THEME_LOCAL_STORAGE_KEY","language","token","getStoredToken","middlewares","reducers","router","createRouter","basename","getBasename","_jsx","RouterProvider","config","plugins","hooksDict","Set","admin","injectionZones","authLogo","Logo","menuLogo","notifications","releases","themes","light","lightTheme","dark","darkTheme","tutorials","rbac","RBAC","library","components","fields","customFields","CustomFields","Widgets","Array","isArray","comp","invariant","Component","name","field","type","addMiddlewares","middleware","push","addRBACMiddleware","m","use","entries","reducer","sectionId","links","createSettingSection","section","createCustomConfigurations","customConfig","extraLocales","loc","auth","logo","menu","trim","undefined","createHook","getAdminInjectedComponents","moduleName","containerName","blockName","err","error","fn","registerPlugin","pluginConf","Plugin","runHookSeries","asynchronous","runSeriesAsync","runSeries","runHookWaterfall","initialValue","runWaterfall","runHookParallel","runParallel","Router","getInitialRoutes"],"mappings":"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"}
|
|
@@ -3,10 +3,15 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
|
+
var icons = require('@strapi/icons');
|
|
7
|
+
var reactIntl = require('react-intl');
|
|
8
|
+
var reactRouterDom = require('react-router-dom');
|
|
6
9
|
var theme = require('../../constants/theme.js');
|
|
10
|
+
var Tracking = require('../../features/Tracking.js');
|
|
7
11
|
var useDeviceType = require('../../hooks/useDeviceType.js');
|
|
8
12
|
var useElementOnScreen = require('../../hooks/useElementOnScreen.js');
|
|
9
13
|
var useMediaQuery = require('../../hooks/useMediaQuery.js');
|
|
14
|
+
var getMatchingDocLink = require('./utils/getMatchingDocLink.js');
|
|
10
15
|
|
|
11
16
|
function _interopNamespaceDefault(e) {
|
|
12
17
|
var n = Object.create(null);
|
|
@@ -27,9 +32,26 @@ function _interopNamespaceDefault(e) {
|
|
|
27
32
|
|
|
28
33
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
29
34
|
|
|
30
|
-
const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props }, ref)=>{
|
|
35
|
+
const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, docLink, ...props }, ref)=>{
|
|
31
36
|
const isMobile = useMediaQuery.useIsMobile();
|
|
32
37
|
const isSubtitleString = typeof subtitle === 'string';
|
|
38
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
39
|
+
const { trackUsage } = Tracking.useTracking();
|
|
40
|
+
const docLinkButton = docLink ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
41
|
+
onClick: ()=>trackUsage('didClickOnDocLink', {
|
|
42
|
+
from: docLink.path,
|
|
43
|
+
to: docLink.link
|
|
44
|
+
}),
|
|
45
|
+
size: "S",
|
|
46
|
+
label: formatMessage({
|
|
47
|
+
id: 'app.HeaderLayout.docLink.label',
|
|
48
|
+
defaultMessage: 'Learn more on our documentation'
|
|
49
|
+
}),
|
|
50
|
+
to: docLink.link,
|
|
51
|
+
tag: reactRouterDom.Link,
|
|
52
|
+
target: "_blank",
|
|
53
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Question, {})
|
|
54
|
+
}) : null;
|
|
33
55
|
if (sticky) {
|
|
34
56
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
35
57
|
display: "flex",
|
|
@@ -53,6 +75,7 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
|
|
|
53
75
|
justifyContent: "space-between",
|
|
54
76
|
wrap: "wrap",
|
|
55
77
|
width: "100%",
|
|
78
|
+
gap: 2,
|
|
56
79
|
children: [
|
|
57
80
|
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
58
81
|
children: [
|
|
@@ -82,9 +105,12 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
|
|
|
82
105
|
]
|
|
83
106
|
}),
|
|
84
107
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
85
|
-
children: primaryAction ? /*#__PURE__*/ jsxRuntime.
|
|
86
|
-
|
|
87
|
-
children:
|
|
108
|
+
children: primaryAction ? /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
109
|
+
gap: 2,
|
|
110
|
+
children: [
|
|
111
|
+
docLinkButton,
|
|
112
|
+
primaryAction
|
|
113
|
+
]
|
|
88
114
|
}) : undefined
|
|
89
115
|
})
|
|
90
116
|
]
|
|
@@ -141,7 +167,13 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
|
|
|
141
167
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
142
168
|
paddingLeft: 4,
|
|
143
169
|
marginLeft: "auto",
|
|
144
|
-
children:
|
|
170
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
171
|
+
gap: 2,
|
|
172
|
+
children: [
|
|
173
|
+
docLinkButton,
|
|
174
|
+
primaryAction
|
|
175
|
+
]
|
|
176
|
+
})
|
|
145
177
|
})
|
|
146
178
|
]
|
|
147
179
|
}),
|
|
@@ -175,6 +207,7 @@ const BaseHeaderLayout = /*#__PURE__*/ React__namespace.forwardRef(({ navigation
|
|
|
175
207
|
gap: 3,
|
|
176
208
|
children: [
|
|
177
209
|
secondaryAction,
|
|
210
|
+
docLinkButton,
|
|
178
211
|
primaryAction
|
|
179
212
|
]
|
|
180
213
|
})
|
|
@@ -189,6 +222,13 @@ const HeaderLayout = (props)=>{
|
|
|
189
222
|
const [headerSize, setHeaderSize] = React__namespace.useState(null);
|
|
190
223
|
const [isVisible, setIsVisible] = React__namespace.useState(true);
|
|
191
224
|
const deviceType = useDeviceType.useDeviceType();
|
|
225
|
+
const location = reactRouterDom.useLocation();
|
|
226
|
+
const docLink = React__namespace.useMemo(()=>{
|
|
227
|
+
if (window.strapi.flags.docLinks === false) return null;
|
|
228
|
+
return getMatchingDocLink.getMatchingDocLink(location.pathname);
|
|
229
|
+
}, [
|
|
230
|
+
location
|
|
231
|
+
]);
|
|
192
232
|
const containerRef = useElementOnScreen.useElementOnScreen(setIsVisible, {
|
|
193
233
|
root: null,
|
|
194
234
|
rootMargin: '0px',
|
|
@@ -220,7 +260,8 @@ const HeaderLayout = (props)=>{
|
|
|
220
260
|
]);
|
|
221
261
|
if (deviceType === 'mobile') {
|
|
222
262
|
return /*#__PURE__*/ jsxRuntime.jsx(BaseHeaderLayout, {
|
|
223
|
-
...props
|
|
263
|
+
...props,
|
|
264
|
+
docLink: docLink
|
|
224
265
|
});
|
|
225
266
|
}
|
|
226
267
|
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
@@ -232,13 +273,15 @@ const HeaderLayout = (props)=>{
|
|
|
232
273
|
},
|
|
233
274
|
children: isVisible && /*#__PURE__*/ jsxRuntime.jsx(BaseHeaderLayout, {
|
|
234
275
|
ref: baseHeaderLayoutRef,
|
|
235
|
-
...props
|
|
276
|
+
...props,
|
|
277
|
+
docLink: docLink
|
|
236
278
|
})
|
|
237
279
|
}),
|
|
238
280
|
!isVisible && /*#__PURE__*/ jsxRuntime.jsx(BaseHeaderLayout, {
|
|
239
281
|
...props,
|
|
240
282
|
sticky: true,
|
|
241
|
-
width: headerSize?.width
|
|
283
|
+
width: headerSize?.width,
|
|
284
|
+
docLink: docLink
|
|
242
285
|
})
|
|
243
286
|
]
|
|
244
287
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderLayout.js","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, TypographyProps, useCallbackRef } from '@strapi/design-system';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n { navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\">\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>{primaryAction ? <Box paddingLeft={2}>{primaryAction}</Box> : undefined}</Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n {primaryAction}\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} />}\n </div>\n\n {!isVisible && <BaseHeaderLayout {...props} sticky width={headerSize?.width} />}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","props","ref","isMobile","useIsMobile","isSubtitleString","_jsx","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","Typography","variant","tag","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","gap","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeaderLayout.js","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n Typography,\n TypographyProps,\n useCallbackRef,\n IconButton,\n} from '@strapi/design-system';\nimport { Question } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, Link } from 'react-router-dom';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useTracking } from '../../features/Tracking';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\nimport { getMatchingDocLink, type DocLink } from './utils/getMatchingDocLink';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n docLink?: DocLink | null;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n {\n navigationAction,\n primaryAction,\n secondaryAction,\n subtitle,\n title,\n sticky,\n width,\n docLink,\n ...props\n },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const docLinkButton = docLink ? (\n <IconButton\n onClick={() => trackUsage('didClickOnDocLink', { from: docLink.path, to: docLink.link })}\n size=\"S\"\n label={formatMessage({\n id: 'app.HeaderLayout.docLink.label',\n defaultMessage: 'Learn more on our documentation',\n })}\n to={docLink.link}\n tag={Link}\n target=\"_blank\"\n >\n <Question />\n </IconButton>\n ) : null;\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\" gap={2}>\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>\n {primaryAction ? (\n <Flex gap={2}>\n {docLinkButton}\n {primaryAction}\n </Flex>\n ) : undefined}\n </Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n <Flex gap={2}>\n {docLinkButton}\n {primaryAction}\n </Flex>\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {docLinkButton}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n const location = useLocation();\n const docLink = React.useMemo(() => {\n if (window.strapi.flags.docLinks === false) return null;\n return getMatchingDocLink(location.pathname);\n }, [location]);\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} docLink={docLink} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} docLink={docLink} />}\n </div>\n\n {!isVisible && (\n <BaseHeaderLayout {...props} sticky width={headerSize?.width} docLink={docLink} />\n )}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","docLink","props","ref","isMobile","useIsMobile","isSubtitleString","formatMessage","useIntl","trackUsage","useTracking","docLinkButton","_jsx","IconButton","onClick","from","path","to","link","size","label","id","defaultMessage","tag","Link","target","Question","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","gap","Typography","variant","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","location","useLocation","useMemo","window","strapi","flags","docLinks","getMatchingDocLink","pathname","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
|
|
@@ -1,14 +1,36 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Box, Flex, Typography, useCallbackRef } from '@strapi/design-system';
|
|
3
|
+
import { IconButton, Box, Flex, Typography, useCallbackRef } from '@strapi/design-system';
|
|
4
|
+
import { Question } from '@strapi/icons';
|
|
5
|
+
import { useIntl } from 'react-intl';
|
|
6
|
+
import { Link, useLocation } from 'react-router-dom';
|
|
4
7
|
import { HEIGHT_TOP_NAVIGATION_MEDIUM, HEIGHT_TOP_NAVIGATION, RESPONSIVE_DEFAULT_SPACING } from '../../constants/theme.mjs';
|
|
8
|
+
import { useTracking } from '../../features/Tracking.mjs';
|
|
5
9
|
import { useDeviceType } from '../../hooks/useDeviceType.mjs';
|
|
6
10
|
import { useElementOnScreen } from '../../hooks/useElementOnScreen.mjs';
|
|
7
11
|
import { useIsMobile } from '../../hooks/useMediaQuery.mjs';
|
|
12
|
+
import { getMatchingDocLink } from './utils/getMatchingDocLink.mjs';
|
|
8
13
|
|
|
9
|
-
const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props }, ref)=>{
|
|
14
|
+
const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, docLink, ...props }, ref)=>{
|
|
10
15
|
const isMobile = useIsMobile();
|
|
11
16
|
const isSubtitleString = typeof subtitle === 'string';
|
|
17
|
+
const { formatMessage } = useIntl();
|
|
18
|
+
const { trackUsage } = useTracking();
|
|
19
|
+
const docLinkButton = docLink ? /*#__PURE__*/ jsx(IconButton, {
|
|
20
|
+
onClick: ()=>trackUsage('didClickOnDocLink', {
|
|
21
|
+
from: docLink.path,
|
|
22
|
+
to: docLink.link
|
|
23
|
+
}),
|
|
24
|
+
size: "S",
|
|
25
|
+
label: formatMessage({
|
|
26
|
+
id: 'app.HeaderLayout.docLink.label',
|
|
27
|
+
defaultMessage: 'Learn more on our documentation'
|
|
28
|
+
}),
|
|
29
|
+
to: docLink.link,
|
|
30
|
+
tag: Link,
|
|
31
|
+
target: "_blank",
|
|
32
|
+
children: /*#__PURE__*/ jsx(Question, {})
|
|
33
|
+
}) : null;
|
|
12
34
|
if (sticky) {
|
|
13
35
|
return /*#__PURE__*/ jsx(Box, {
|
|
14
36
|
display: "flex",
|
|
@@ -32,6 +54,7 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
|
|
|
32
54
|
justifyContent: "space-between",
|
|
33
55
|
wrap: "wrap",
|
|
34
56
|
width: "100%",
|
|
57
|
+
gap: 2,
|
|
35
58
|
children: [
|
|
36
59
|
/*#__PURE__*/ jsxs(Flex, {
|
|
37
60
|
children: [
|
|
@@ -61,9 +84,12 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
|
|
|
61
84
|
]
|
|
62
85
|
}),
|
|
63
86
|
/*#__PURE__*/ jsx(Flex, {
|
|
64
|
-
children: primaryAction ? /*#__PURE__*/
|
|
65
|
-
|
|
66
|
-
children:
|
|
87
|
+
children: primaryAction ? /*#__PURE__*/ jsxs(Flex, {
|
|
88
|
+
gap: 2,
|
|
89
|
+
children: [
|
|
90
|
+
docLinkButton,
|
|
91
|
+
primaryAction
|
|
92
|
+
]
|
|
67
93
|
}) : undefined
|
|
68
94
|
})
|
|
69
95
|
]
|
|
@@ -120,7 +146,13 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
|
|
|
120
146
|
/*#__PURE__*/ jsx(Box, {
|
|
121
147
|
paddingLeft: 4,
|
|
122
148
|
marginLeft: "auto",
|
|
123
|
-
children:
|
|
149
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
150
|
+
gap: 2,
|
|
151
|
+
children: [
|
|
152
|
+
docLinkButton,
|
|
153
|
+
primaryAction
|
|
154
|
+
]
|
|
155
|
+
})
|
|
124
156
|
})
|
|
125
157
|
]
|
|
126
158
|
}),
|
|
@@ -154,6 +186,7 @@ const BaseHeaderLayout = /*#__PURE__*/ React.forwardRef(({ navigationAction, pri
|
|
|
154
186
|
gap: 3,
|
|
155
187
|
children: [
|
|
156
188
|
secondaryAction,
|
|
189
|
+
docLinkButton,
|
|
157
190
|
primaryAction
|
|
158
191
|
]
|
|
159
192
|
})
|
|
@@ -168,6 +201,13 @@ const HeaderLayout = (props)=>{
|
|
|
168
201
|
const [headerSize, setHeaderSize] = React.useState(null);
|
|
169
202
|
const [isVisible, setIsVisible] = React.useState(true);
|
|
170
203
|
const deviceType = useDeviceType();
|
|
204
|
+
const location = useLocation();
|
|
205
|
+
const docLink = React.useMemo(()=>{
|
|
206
|
+
if (window.strapi.flags.docLinks === false) return null;
|
|
207
|
+
return getMatchingDocLink(location.pathname);
|
|
208
|
+
}, [
|
|
209
|
+
location
|
|
210
|
+
]);
|
|
171
211
|
const containerRef = useElementOnScreen(setIsVisible, {
|
|
172
212
|
root: null,
|
|
173
213
|
rootMargin: '0px',
|
|
@@ -199,7 +239,8 @@ const HeaderLayout = (props)=>{
|
|
|
199
239
|
]);
|
|
200
240
|
if (deviceType === 'mobile') {
|
|
201
241
|
return /*#__PURE__*/ jsx(BaseHeaderLayout, {
|
|
202
|
-
...props
|
|
242
|
+
...props,
|
|
243
|
+
docLink: docLink
|
|
203
244
|
});
|
|
204
245
|
}
|
|
205
246
|
return /*#__PURE__*/ jsxs("div", {
|
|
@@ -211,13 +252,15 @@ const HeaderLayout = (props)=>{
|
|
|
211
252
|
},
|
|
212
253
|
children: isVisible && /*#__PURE__*/ jsx(BaseHeaderLayout, {
|
|
213
254
|
ref: baseHeaderLayoutRef,
|
|
214
|
-
...props
|
|
255
|
+
...props,
|
|
256
|
+
docLink: docLink
|
|
215
257
|
})
|
|
216
258
|
}),
|
|
217
259
|
!isVisible && /*#__PURE__*/ jsx(BaseHeaderLayout, {
|
|
218
260
|
...props,
|
|
219
261
|
sticky: true,
|
|
220
|
-
width: headerSize?.width
|
|
262
|
+
width: headerSize?.width,
|
|
263
|
+
docLink: docLink
|
|
221
264
|
})
|
|
222
265
|
]
|
|
223
266
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderLayout.mjs","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography, TypographyProps, useCallbackRef } from '@strapi/design-system';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n { navigationAction, primaryAction, secondaryAction, subtitle, title, sticky, width, ...props },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\">\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>{primaryAction ? <Box paddingLeft={2}>{primaryAction}</Box> : undefined}</Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n {primaryAction}\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} />}\n </div>\n\n {!isVisible && <BaseHeaderLayout {...props} sticky width={headerSize?.width} />}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","props","ref","isMobile","useIsMobile","isSubtitleString","_jsx","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","Typography","variant","tag","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","gap","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeaderLayout.mjs","sources":["../../../../../../admin/src/components/Layouts/HeaderLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n Typography,\n TypographyProps,\n useCallbackRef,\n IconButton,\n} from '@strapi/design-system';\nimport { Question } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, Link } from 'react-router-dom';\n\nimport {\n HEIGHT_TOP_NAVIGATION,\n HEIGHT_TOP_NAVIGATION_MEDIUM,\n RESPONSIVE_DEFAULT_SPACING,\n} from '../../constants/theme';\nimport { useTracking } from '../../features/Tracking';\nimport { useDeviceType } from '../../hooks/useDeviceType';\nimport { useElementOnScreen } from '../../hooks/useElementOnScreen';\nimport { useIsMobile } from '../../hooks/useMediaQuery';\n\nimport { getMatchingDocLink, type DocLink } from './utils/getMatchingDocLink';\n\n/* -------------------------------------------------------------------------------------------------\n * BaseHeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseHeaderLayoutProps extends Omit<TypographyProps<'div'>, 'tag'> {\n navigationAction?: React.ReactNode;\n primaryAction?: React.ReactNode;\n secondaryAction?: React.ReactNode;\n subtitle?: React.ReactNode;\n sticky?: boolean;\n width?: number;\n docLink?: DocLink | null;\n}\n\nconst BaseHeaderLayout = React.forwardRef<HTMLDivElement, BaseHeaderLayoutProps>(\n (\n {\n navigationAction,\n primaryAction,\n secondaryAction,\n subtitle,\n title,\n sticky,\n width,\n docLink,\n ...props\n },\n ref\n ) => {\n const isMobile = useIsMobile();\n const isSubtitleString = typeof subtitle === 'string';\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const docLinkButton = docLink ? (\n <IconButton\n onClick={() => trackUsage('didClickOnDocLink', { from: docLink.path, to: docLink.link })}\n size=\"S\"\n label={formatMessage({\n id: 'app.HeaderLayout.docLink.label',\n defaultMessage: 'Learn more on our documentation',\n })}\n to={docLink.link}\n tag={Link}\n target=\"_blank\"\n >\n <Question />\n </IconButton>\n ) : null;\n\n if (sticky) {\n return (\n <Box\n display=\"flex\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={2}\n paddingBottom={2}\n position=\"fixed\"\n top={0}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n width={`${width}px`}\n zIndex={2}\n minHeight={{\n initial: HEIGHT_TOP_NAVIGATION,\n medium: HEIGHT_TOP_NAVIGATION_MEDIUM,\n }}\n data-strapi-header-sticky\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" wrap=\"wrap\" width=\"100%\" gap={2}>\n <Flex>\n {navigationAction && <Box paddingRight={3}>{navigationAction}</Box>}\n <Box>\n <Typography variant=\"beta\" tag=\"h1\" {...props}>\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </Box>\n {secondaryAction ? <Box paddingLeft={4}>{secondaryAction}</Box> : null}\n </Flex>\n <Flex>\n {primaryAction ? (\n <Flex gap={2}>\n {docLinkButton}\n {primaryAction}\n </Flex>\n ) : undefined}\n </Flex>\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box\n ref={ref}\n paddingLeft={RESPONSIVE_DEFAULT_SPACING}\n paddingRight={RESPONSIVE_DEFAULT_SPACING}\n paddingBottom={{\n initial: 4,\n large: 8,\n }}\n paddingTop={{\n initial: 4,\n large: navigationAction ? 6 : 8,\n }}\n background=\"neutral100\"\n data-strapi-header\n >\n <Flex direction=\"column\" alignItems=\"initial\" gap={3}>\n {navigationAction}\n {!isMobile ? (\n <>\n <Flex justifyContent=\"space-between\" wrap=\"wrap\" gap={4}>\n <Flex minWidth={0}>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {secondaryAction && <Box paddingLeft={4}>{secondaryAction}</Box>}\n </Flex>\n <Box paddingLeft={4} marginLeft=\"auto\">\n <Flex gap={2}>\n {docLinkButton}\n {primaryAction}\n </Flex>\n </Box>\n </Flex>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n </>\n ) : (\n <>\n <Typography\n tag=\"h1\"\n variant=\"alpha\"\n {...props}\n style={{\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n maxWidth: '100%',\n }}\n >\n {title}\n </Typography>\n {isSubtitleString ? (\n <Typography variant=\"epsilon\" textColor=\"neutral600\" tag=\"p\">\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n {(primaryAction || secondaryAction) && (\n <Flex gap={3}>\n {secondaryAction}\n {docLinkButton}\n {primaryAction}\n </Flex>\n )}\n </>\n )}\n </Flex>\n </Box>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderLayoutProps extends BaseHeaderLayoutProps {}\n\nconst HeaderLayout = (props: HeaderLayoutProps) => {\n const baseHeaderLayoutRef = React.useRef<HTMLDivElement>(null);\n const [headerSize, setHeaderSize] = React.useState<DOMRect | null>(null);\n const [isVisible, setIsVisible] = React.useState(true);\n const deviceType = useDeviceType();\n const location = useLocation();\n const docLink = React.useMemo(() => {\n if (window.strapi.flags.docLinks === false) return null;\n return getMatchingDocLink(location.pathname);\n }, [location]);\n\n const containerRef = useElementOnScreen<HTMLDivElement>(setIsVisible, {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n });\n\n useResizeObserver([containerRef, baseHeaderLayoutRef], () => {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n\n if (headerContainer) {\n const newSize = headerContainer.getBoundingClientRect();\n\n setHeaderSize((prevSize) => {\n // Only update if size actually changed\n if (!prevSize || prevSize.height !== newSize.height || prevSize.width !== newSize.width) {\n return newSize;\n }\n return prevSize;\n });\n }\n });\n\n React.useEffect(() => {\n if (baseHeaderLayoutRef.current || containerRef.current) {\n const headerContainer = baseHeaderLayoutRef.current ?? containerRef.current;\n setHeaderSize(headerContainer?.getBoundingClientRect() ?? null);\n }\n }, [containerRef]);\n\n if (deviceType === 'mobile') {\n return <BaseHeaderLayout {...props} docLink={docLink} />;\n }\n\n return (\n <div ref={containerRef}>\n <div style={{ height: headerSize?.height }}>\n {isVisible && <BaseHeaderLayout ref={baseHeaderLayoutRef} {...props} docLink={docLink} />}\n </div>\n\n {!isVisible && (\n <BaseHeaderLayout {...props} sticky width={headerSize?.width} docLink={docLink} />\n )}\n </div>\n );\n};\n\nHeaderLayout.displayName = 'HeaderLayout';\n\n/**\n * useResizeObserver: hook that observes the size of an element and calls a callback when it changes.\n */\nconst useResizeObserver = (\n sources: React.RefObject<HTMLElement> | React.RefObject<HTMLElement>[],\n onResize: ResizeObserverCallback\n) => {\n const handleResize = useCallbackRef(onResize);\n\n React.useLayoutEffect(() => {\n const resizeObs = new ResizeObserver(handleResize);\n\n if (Array.isArray(sources)) {\n sources.forEach((source) => {\n if (source.current) {\n resizeObs.observe(source.current);\n }\n });\n } else if (sources.current) {\n resizeObs.observe(sources.current);\n }\n\n return () => {\n resizeObs.disconnect();\n };\n }, [sources, handleResize]);\n};\n\nexport type { HeaderLayoutProps, BaseHeaderLayoutProps };\nexport { HeaderLayout, BaseHeaderLayout };\n"],"names":["BaseHeaderLayout","React","forwardRef","navigationAction","primaryAction","secondaryAction","subtitle","title","sticky","width","docLink","props","ref","isMobile","useIsMobile","isSubtitleString","formatMessage","useIntl","trackUsage","useTracking","docLinkButton","_jsx","IconButton","onClick","from","path","to","link","size","label","id","defaultMessage","tag","Link","target","Question","Box","display","paddingLeft","paddingRight","paddingTop","paddingBottom","position","top","background","shadow","zIndex","minHeight","initial","HEIGHT_TOP_NAVIGATION","medium","HEIGHT_TOP_NAVIGATION_MEDIUM","data-strapi-header-sticky","_jsxs","Flex","alignItems","justifyContent","wrap","gap","Typography","variant","textColor","undefined","RESPONSIVE_DEFAULT_SPACING","large","data-strapi-header","direction","_Fragment","minWidth","style","wordBreak","overflowWrap","maxWidth","marginLeft","HeaderLayout","baseHeaderLayoutRef","useRef","headerSize","setHeaderSize","useState","isVisible","setIsVisible","deviceType","useDeviceType","location","useLocation","useMemo","window","strapi","flags","docLinks","getMatchingDocLink","pathname","containerRef","useElementOnScreen","root","rootMargin","threshold","useResizeObserver","headerContainer","current","newSize","getBoundingClientRect","prevSize","height","useEffect","div","displayName","sources","onResize","handleResize","useCallbackRef","useLayoutEffect","resizeObs","ResizeObserver","Array","isArray","forEach","source","observe","disconnect"],"mappings":"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"}
|