@strapi/admin 5.24.2 → 5.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/admin/admin/src/App.js +6 -2
  2. package/dist/admin/admin/src/App.js.map +1 -1
  3. package/dist/admin/admin/src/App.mjs +7 -3
  4. package/dist/admin/admin/src/App.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/GuidedTour/Context.js +11 -1
  6. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  7. package/dist/admin/admin/src/components/GuidedTour/Context.mjs +11 -1
  8. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +160 -23
  10. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
  11. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +162 -25
  12. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +28 -9
  14. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  15. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs +30 -11
  16. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +2 -1
  18. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -1
  19. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +2 -1
  20. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/NpsSurvey.js +2 -1
  22. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  23. package/dist/admin/admin/src/components/NpsSurvey.mjs +2 -1
  24. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  25. package/dist/admin/admin/src/features/Tracking.js +2 -1
  26. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  27. package/dist/admin/admin/src/features/Tracking.mjs +2 -1
  28. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  29. package/dist/admin/admin/src/hooks/useAIAvailability.js +13 -0
  30. package/dist/admin/admin/src/hooks/useAIAvailability.js.map +1 -0
  31. package/dist/admin/admin/src/hooks/useAIAvailability.mjs +11 -0
  32. package/dist/admin/admin/src/hooks/useAIAvailability.mjs.map +1 -0
  33. package/dist/admin/admin/src/pages/Home/HomePage.js +1 -0
  34. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  35. package/dist/admin/admin/src/pages/Home/HomePage.mjs +1 -0
  36. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  37. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +12 -1
  38. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  39. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +12 -1
  40. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  41. package/dist/admin/admin/src/render.js +6 -1
  42. package/dist/admin/admin/src/render.js.map +1 -1
  43. package/dist/admin/admin/src/render.mjs +6 -1
  44. package/dist/admin/admin/src/render.mjs.map +1 -1
  45. package/dist/admin/admin/src/services/homepage.js +15 -1
  46. package/dist/admin/admin/src/services/homepage.js.map +1 -1
  47. package/dist/admin/admin/src/services/homepage.mjs +14 -2
  48. package/dist/admin/admin/src/services/homepage.mjs.map +1 -1
  49. package/dist/admin/admin/src/translations/en.json.js +2 -0
  50. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  51. package/dist/admin/admin/src/translations/en.json.mjs +2 -0
  52. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  53. package/dist/admin/ee/admin/src/components/GlobalNotifications.js +11 -0
  54. package/dist/admin/ee/admin/src/components/GlobalNotifications.js.map +1 -0
  55. package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs +9 -0
  56. package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs.map +1 -0
  57. package/dist/admin/ee/admin/src/hooks/useAIAvailability.js +11 -0
  58. package/dist/admin/ee/admin/src/hooks/useAIAvailability.js.map +1 -0
  59. package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs +9 -0
  60. package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs.map +1 -0
  61. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js +82 -0
  62. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js.map +1 -0
  63. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs +80 -0
  64. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs.map +1 -0
  65. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +102 -0
  66. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -0
  67. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +100 -0
  68. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -0
  69. package/dist/admin/ee/admin/src/services/ai.js +30 -0
  70. package/dist/admin/ee/admin/src/services/ai.js.map +1 -0
  71. package/dist/admin/ee/admin/src/services/ai.mjs +26 -0
  72. package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -0
  73. package/dist/admin/ee.js +4 -0
  74. package/dist/admin/ee.js.map +1 -1
  75. package/dist/admin/ee.mjs +2 -0
  76. package/dist/admin/ee.mjs.map +1 -1
  77. package/dist/admin/index.js +2 -0
  78. package/dist/admin/index.js.map +1 -1
  79. package/dist/admin/index.mjs +1 -0
  80. package/dist/admin/index.mjs.map +1 -1
  81. package/dist/admin/src/components/GuidedTour/Context.d.ts +7 -0
  82. package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +7 -16
  83. package/dist/admin/src/components/GuidedTour/Tours.d.ts +1 -22
  84. package/dist/admin/src/ee.d.ts +2 -0
  85. package/dist/admin/src/features/Tracking.d.ts +21 -2
  86. package/dist/admin/src/hooks/useAIAvailability.d.ts +5 -0
  87. package/dist/admin/src/index.d.ts +2 -0
  88. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
  89. package/dist/admin/src/services/admin.d.ts +1 -0
  90. package/dist/admin/src/services/homepage.d.ts +3 -2
  91. package/dist/ee/admin/src/components/GlobalNotifications.d.ts +1 -0
  92. package/dist/ee/admin/src/hooks/useAIAvailability.d.ts +1 -0
  93. package/dist/ee/admin/src/hooks/useAIUsageWarning.d.ts +5 -0
  94. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +1 -1
  95. package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +1 -0
  96. package/dist/ee/admin/src/services/ai.d.ts +9 -0
  97. package/dist/ee/server/src/ai/controllers/ai.d.ts +7 -0
  98. package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -0
  99. package/dist/ee/server/src/ai/routes/ai.d.ts +13 -0
  100. package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -0
  101. package/dist/ee/server/src/controllers/admin.d.ts +3 -0
  102. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  103. package/dist/ee/server/src/controllers/index.d.ts +3 -0
  104. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  105. package/dist/ee/server/src/index.d.ts +15 -187
  106. package/dist/ee/server/src/index.d.ts.map +1 -1
  107. package/dist/server/ee/server/src/ai/controllers/ai.js +218 -0
  108. package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -0
  109. package/dist/server/ee/server/src/ai/controllers/ai.mjs +216 -0
  110. package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -0
  111. package/dist/server/ee/server/src/ai/routes/ai.js +32 -0
  112. package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -0
  113. package/dist/server/ee/server/src/ai/routes/ai.mjs +30 -0
  114. package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -0
  115. package/dist/server/ee/server/src/controllers/admin.js +4 -1
  116. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  117. package/dist/server/ee/server/src/controllers/admin.mjs +4 -1
  118. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  119. package/dist/server/ee/server/src/index.js +37 -23
  120. package/dist/server/ee/server/src/index.js.map +1 -1
  121. package/dist/server/ee/server/src/index.mjs +37 -23
  122. package/dist/server/ee/server/src/index.mjs.map +1 -1
  123. package/dist/server/server/src/controllers/admin.js +5 -1
  124. package/dist/server/server/src/controllers/admin.js.map +1 -1
  125. package/dist/server/server/src/controllers/admin.mjs +5 -1
  126. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  127. package/dist/server/server/src/controllers/homepage.js +17 -0
  128. package/dist/server/server/src/controllers/homepage.js.map +1 -1
  129. package/dist/server/server/src/controllers/homepage.mjs +17 -0
  130. package/dist/server/server/src/controllers/homepage.mjs.map +1 -1
  131. package/dist/server/server/src/controllers/validation/schema.js +30 -0
  132. package/dist/server/server/src/controllers/validation/schema.js.map +1 -0
  133. package/dist/server/server/src/controllers/validation/schema.mjs +26 -0
  134. package/dist/server/server/src/controllers/validation/schema.mjs.map +1 -0
  135. package/dist/server/server/src/routes/homepage.js +20 -0
  136. package/dist/server/server/src/routes/homepage.js.map +1 -1
  137. package/dist/server/server/src/routes/homepage.mjs +20 -0
  138. package/dist/server/server/src/routes/homepage.mjs.map +1 -1
  139. package/dist/server/server/src/services/homepage.js +48 -1
  140. package/dist/server/server/src/services/homepage.js.map +1 -1
  141. package/dist/server/server/src/services/homepage.mjs +48 -1
  142. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  143. package/dist/server/src/controllers/admin.d.ts +2 -0
  144. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  145. package/dist/server/src/controllers/homepage.d.ts +8 -0
  146. package/dist/server/src/controllers/homepage.d.ts.map +1 -1
  147. package/dist/server/src/controllers/index.d.ts +22 -0
  148. package/dist/server/src/controllers/index.d.ts.map +1 -1
  149. package/dist/server/src/controllers/validation/schema.d.ts +61 -0
  150. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -0
  151. package/dist/server/src/index.d.ts +38 -0
  152. package/dist/server/src/index.d.ts.map +1 -1
  153. package/dist/server/src/routes/homepage.d.ts.map +1 -1
  154. package/dist/server/src/services/homepage.d.ts +3 -0
  155. package/dist/server/src/services/homepage.d.ts.map +1 -1
  156. package/dist/server/src/services/index.d.ts +16 -0
  157. package/dist/server/src/services/index.d.ts.map +1 -1
  158. package/dist/shared/contracts/admin.d.ts +1 -0
  159. package/dist/shared/contracts/admin.d.ts.map +1 -1
  160. package/dist/shared/contracts/ai.d.ts +40 -0
  161. package/dist/shared/contracts/ai.d.ts.map +1 -0
  162. package/dist/shared/contracts/homepage.d.ts +27 -0
  163. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  164. package/dist/shared/contracts/users.d.ts +16 -0
  165. package/dist/shared/contracts/users.d.ts.map +1 -1
  166. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationInfoPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Link, Typography } from '@strapi/design-system';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useAppInfo } from '../../../../features/AppInfo';\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const communityEdition = useAppInfo('ApplicationInfoPage', (state) => state.communityEdition);\n const latestStrapiReleaseTag = useAppInfo(\n 'ApplicationInfoPage',\n (state) => state.latestStrapiReleaseTag\n );\n const nodeVersion = useAppInfo('ApplicationInfoPage', (state) => state.nodeVersion);\n const shouldUpdateStrapi = useAppInfo('ApplicationInfoPage', (state) => state.shouldUpdateStrapi);\n const strapiVersion = useAppInfo('ApplicationInfoPage', (state) => state.strapiVersion);\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <Layouts.Root>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n }),\n }\n )}\n </Page.Title>\n <Page.Main>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid.Root gap={5} tag=\"dl\">\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current edition',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>\n {formatMessage(\n {\n id: 'Settings.application.ee-or-ce',\n defaultMessage:\n '{communityEdition, select, true {Community Edition} other {Enterprise Edition}}',\n },\n { communityEdition }\n )}\n </Typography>\n <Link href=\"https://strapi.io/pricing-self-hosted\" endIcon={<ExternalLink />}>\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography tag=\"dd\">{nodeVersion}</Typography>\n </Grid.Item>\n <AdminSeatInfo />\n </Grid.Root>\n </Flex>\n {canRead && (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid.Root paddingTop={4} gap={4}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeLogo('menu')}\n />\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeLogo('auth')}\n />\n </Grid.Item>\n </Grid.Root>\n </Box>\n )}\n </Flex>\n </Layouts.Content>\n </form>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nexport { ApplicationInfoPage };\n"],"names":["AdminSeatInfoCE","ApplicationInfoPage","trackUsage","useTracking","formatMessage","useIntl","logos","serverLogos","updateProjectSettings","useConfiguration","setLogos","React","useState","menu","auth","settings","useSelector","selectAdminPermissions","communityEdition","useAppInfo","state","latestStrapiReleaseTag","nodeVersion","shouldUpdateStrapi","strapiVersion","AdminSeatInfo","useEnterprise","AdminSeatInfoEE","allowedActions","canRead","canUpdate","useRBAC","handleSubmit","e","preventDefault","authLogo","custom","menuLogo","handleChangeLogo","logo","newLogo","prev","useEffect","isSaveDisabled","_jsxs","Layouts","Root","_jsx","Page","Title","id","defaultMessage","name","Main","form","onSubmit","Header","title","subtitle","primaryAction","Button","disabled","type","startIcon","Check","Content","Flex","direction","alignItems","gap","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","Typography","variant","tag","Grid","Item","col","s","textColor","Link","href","endIcon","ExternalLink","Box","dimension","DIMENSION","size","SIZE","LogoInput","customLogo","defaultLogo","default","hint","label","onChangeLogo"],"mappings":"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"}
1
+ {"version":3,"file":"ApplicationInfoPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Link, Typography } from '@strapi/design-system';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useAppInfo } from '../../../../features/AppInfo';\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useFetchClient } from '../../../../hooks/useFetchClient';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\nconst AIUageDataCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const communityEdition = useAppInfo('ApplicationInfoPage', (state) => state.communityEdition);\n const latestStrapiReleaseTag = useAppInfo(\n 'ApplicationInfoPage',\n (state) => state.latestStrapiReleaseTag\n );\n const nodeVersion = useAppInfo('ApplicationInfoPage', (state) => state.nodeVersion);\n const shouldUpdateStrapi = useAppInfo('ApplicationInfoPage', (state) => state.shouldUpdateStrapi);\n const strapiVersion = useAppInfo('ApplicationInfoPage', (state) => state.strapiVersion);\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n const isAiEnabled = window.strapi.ai?.enabled !== false;\n const AIUsageData = useEnterprise(\n AIUageDataCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage'\n )\n ).AIUsage,\n {\n enabled: isAiEnabled,\n }\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n if (!AIUsageData) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <Layouts.Root>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n }),\n }\n )}\n </Page.Title>\n <Page.Main>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid.Root gap={5} tag=\"dl\">\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current edition',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>\n {formatMessage(\n {\n id: 'Settings.application.ee-or-ce',\n defaultMessage:\n '{communityEdition, select, true {Community Edition} other {Enterprise Edition}}',\n },\n { communityEdition }\n )}\n </Typography>\n <Link href=\"https://strapi.io/pricing-self-hosted\" endIcon={<ExternalLink />}>\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography tag=\"dd\">{nodeVersion}</Typography>\n </Grid.Item>\n <AdminSeatInfo />\n <AIUsageData />\n </Grid.Root>\n </Flex>\n {canRead && (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid.Root paddingTop={4} gap={4}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeLogo('menu')}\n />\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeLogo('auth')}\n />\n </Grid.Item>\n </Grid.Root>\n </Box>\n )}\n </Flex>\n </Layouts.Content>\n </form>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nexport { ApplicationInfoPage };\n"],"names":["AdminSeatInfoCE","AIUageDataCE","ApplicationInfoPage","trackUsage","useTracking","formatMessage","useIntl","useFetchClient","logos","serverLogos","updateProjectSettings","useConfiguration","setLogos","React","useState","menu","auth","settings","useSelector","selectAdminPermissions","communityEdition","useAppInfo","state","latestStrapiReleaseTag","nodeVersion","shouldUpdateStrapi","strapiVersion","AdminSeatInfo","useEnterprise","AdminSeatInfoEE","isAiEnabled","window","strapi","ai","enabled","AIUsageData","AIUsage","allowedActions","canRead","canUpdate","useRBAC","handleSubmit","e","preventDefault","authLogo","custom","menuLogo","handleChangeLogo","logo","newLogo","prev","useEffect","isSaveDisabled","_jsxs","Layouts","Root","_jsx","Page","Title","id","defaultMessage","name","Main","form","onSubmit","Header","title","subtitle","primaryAction","Button","disabled","type","startIcon","Check","Content","Flex","direction","alignItems","gap","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","Typography","variant","tag","Grid","Item","col","s","textColor","Link","href","endIcon","ExternalLink","Box","dimension","DIMENSION","size","SIZE","LogoInput","customLogo","defaultLogo","default","hint","label","onChangeLogo"],"mappings":"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"}
@@ -38,11 +38,14 @@ const renderAdmin = async (mountNode, { plugins, customisations, features })=>{
38
38
  flags: {
39
39
  nps: false,
40
40
  promoteEE: true
41
+ },
42
+ ai: {
43
+ enabled: true
41
44
  }
42
45
  };
43
46
  const { get } = getFetchClient.getFetchClient();
44
47
  try {
45
- const { data: { data: { isEE, isTrial, features, flags } } } = await get('/admin/project-type');
48
+ const { data: { data: { isEE, isTrial, features, flags, ai } } } = await get('/admin/project-type');
46
49
  window.strapi.isEE = isEE;
47
50
  window.strapi.isTrialLicense = isTrial;
48
51
  window.strapi.flags = flags;
@@ -51,6 +54,8 @@ const renderAdmin = async (mountNode, { plugins, customisations, features })=>{
51
54
  isEnabled: (featureName)=>features.some((feature)=>feature.name === featureName)
52
55
  };
53
56
  window.strapi.projectType = isEE ? 'Enterprise' : 'Community';
57
+ window.strapi.aiLicenseKey = process.env.STRAPI_ADMIN_AI_API_KEY;
58
+ window.strapi.ai = ai;
54
59
  } catch (err) {
55
60
  /**
56
61
  * If this fails, we simply don't activate any EE features.
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sources":["../../../../admin/src/render.ts"],"sourcesContent":["/* eslint-disable no-undef */\nimport { createRoot } from 'react-dom/client';\n\nimport { StrapiApp, StrapiAppConstructorArgs } from './StrapiApp';\nimport { getFetchClient } from './utils/getFetchClient';\nimport { createAbsoluteUrl } from './utils/urls';\n\nimport type { Modules } from '@strapi/types';\n\ninterface RenderAdminArgs {\n customisations: {\n register?: (app: StrapiApp) => Promise<void> | void;\n bootstrap?: (app: StrapiApp) => Promise<void> | void;\n config?: StrapiAppConstructorArgs['config'];\n };\n plugins: StrapiAppConstructorArgs['appPlugins'];\n features?: Modules.Features.FeaturesService['config'];\n}\n\nconst renderAdmin = async (\n mountNode: HTMLElement | null,\n { plugins, customisations, features }: RenderAdminArgs\n) => {\n if (!mountNode) {\n throw new Error('[@strapi/admin]: Could not find the root element to mount the admin app');\n }\n\n window.strapi = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: createAbsoluteUrl(process.env.STRAPI_ADMIN_BACKEND_URL),\n isEE: false,\n isTrial: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',\n future: {\n isEnabled: (name: keyof NonNullable<Modules.Features.FeaturesConfig['future']>) => {\n return features?.future?.[name] === true;\n },\n },\n // @ts-expect-error – there's pollution from the global scope of Node.\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n },\n };\n\n const { get } = getFetchClient();\n\n interface ProjectType extends Pick<Window['strapi'], 'flags'> {\n isEE: boolean;\n isTrial: boolean;\n features: {\n name: string;\n }[];\n }\n\n try {\n const {\n data: {\n data: { isEE, isTrial, features, flags },\n },\n } = await get<{ data: ProjectType }>('/admin/project-type');\n\n window.strapi.isEE = isEE;\n window.strapi.isTrialLicense = isTrial;\n window.strapi.flags = flags;\n window.strapi.features = {\n ...window.strapi.features,\n isEnabled: (featureName) => features.some((feature) => feature.name === featureName),\n };\n window.strapi.projectType = isEE ? 'Enterprise' : 'Community';\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n const app = new StrapiApp({\n config: customisations?.config,\n appPlugins: plugins,\n });\n\n await app.register(customisations?.register);\n await app.bootstrap(customisations?.bootstrap);\n await app.loadTrads(customisations?.config?.translations);\n\n createRoot(mountNode).render(app.render());\n\n if (\n typeof module !== 'undefined' &&\n module &&\n 'hot' in module &&\n typeof module.hot === 'object' &&\n module.hot !== null &&\n 'accept' in module.hot &&\n typeof module.hot.accept === 'function'\n ) {\n module.hot.accept();\n }\n\n if (typeof import.meta.hot?.accept === 'function') {\n import.meta.hot.accept();\n }\n};\n\nexport { renderAdmin };\nexport type { RenderAdminArgs };\n"],"names":["renderAdmin","mountNode","plugins","customisations","features","Error","window","strapi","backendURL","createAbsoluteUrl","process","env","STRAPI_ADMIN_BACKEND_URL","isEE","isTrial","telemetryDisabled","STRAPI_TELEMETRY_DISABLED","future","isEnabled","name","SSO","AUDIT_LOGS","REVIEW_WORKFLOWS","projectType","flags","nps","promoteEE","get","getFetchClient","data","isTrialLicense","featureName","some","feature","err","console","error","app","StrapiApp","config","appPlugins","register","bootstrap","loadTrads","translations","createRoot","render","module","hot","accept"],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sources":["../../../../admin/src/render.ts"],"sourcesContent":["/* eslint-disable no-undef */\nimport { createRoot } from 'react-dom/client';\n\nimport { StrapiApp, StrapiAppConstructorArgs } from './StrapiApp';\nimport { getFetchClient } from './utils/getFetchClient';\nimport { createAbsoluteUrl } from './utils/urls';\n\nimport type { Modules } from '@strapi/types';\n\ninterface RenderAdminArgs {\n customisations: {\n register?: (app: StrapiApp) => Promise<void> | void;\n bootstrap?: (app: StrapiApp) => Promise<void> | void;\n config?: StrapiAppConstructorArgs['config'];\n };\n plugins: StrapiAppConstructorArgs['appPlugins'];\n features?: Modules.Features.FeaturesService['config'];\n}\n\nconst renderAdmin = async (\n mountNode: HTMLElement | null,\n { plugins, customisations, features }: RenderAdminArgs\n) => {\n if (!mountNode) {\n throw new Error('[@strapi/admin]: Could not find the root element to mount the admin app');\n }\n\n window.strapi = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: createAbsoluteUrl(process.env.STRAPI_ADMIN_BACKEND_URL),\n isEE: false,\n isTrial: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',\n future: {\n isEnabled: (name: keyof NonNullable<Modules.Features.FeaturesConfig['future']>) => {\n return features?.future?.[name] === true;\n },\n },\n // @ts-expect-error – there's pollution from the global scope of Node.\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n },\n ai: {\n enabled: true,\n },\n };\n\n const { get } = getFetchClient();\n\n interface ProjectType extends Pick<Window['strapi'], 'flags'> {\n isEE: boolean;\n isTrial: boolean;\n features: {\n name: string;\n }[];\n ai: {\n enabled: boolean;\n };\n }\n\n try {\n const {\n data: {\n data: { isEE, isTrial, features, flags, ai },\n },\n } = await get<{ data: ProjectType }>('/admin/project-type');\n\n window.strapi.isEE = isEE;\n window.strapi.isTrialLicense = isTrial;\n window.strapi.flags = flags;\n window.strapi.features = {\n ...window.strapi.features,\n isEnabled: (featureName) => features.some((feature) => feature.name === featureName),\n };\n window.strapi.projectType = isEE ? 'Enterprise' : 'Community';\n window.strapi.aiLicenseKey = process.env.STRAPI_ADMIN_AI_API_KEY;\n window.strapi.ai = ai;\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n const app = new StrapiApp({\n config: customisations?.config,\n appPlugins: plugins,\n });\n\n await app.register(customisations?.register);\n await app.bootstrap(customisations?.bootstrap);\n await app.loadTrads(customisations?.config?.translations);\n\n createRoot(mountNode).render(app.render());\n\n if (\n typeof module !== 'undefined' &&\n module &&\n 'hot' in module &&\n typeof module.hot === 'object' &&\n module.hot !== null &&\n 'accept' in module.hot &&\n typeof module.hot.accept === 'function'\n ) {\n module.hot.accept();\n }\n\n if (typeof import.meta.hot?.accept === 'function') {\n import.meta.hot.accept();\n }\n};\n\nexport { renderAdmin };\nexport type { RenderAdminArgs };\n"],"names":["renderAdmin","mountNode","plugins","customisations","features","Error","window","strapi","backendURL","createAbsoluteUrl","process","env","STRAPI_ADMIN_BACKEND_URL","isEE","isTrial","telemetryDisabled","STRAPI_TELEMETRY_DISABLED","future","isEnabled","name","SSO","AUDIT_LOGS","REVIEW_WORKFLOWS","projectType","flags","nps","promoteEE","ai","enabled","get","getFetchClient","data","isTrialLicense","featureName","some","feature","aiLicenseKey","STRAPI_ADMIN_AI_API_KEY","err","console","error","app","StrapiApp","config","appPlugins","register","bootstrap","loadTrads","translations","createRoot","render","module","hot","accept"],"mappings":"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"}
@@ -36,11 +36,14 @@ const renderAdmin = async (mountNode, { plugins, customisations, features })=>{
36
36
  flags: {
37
37
  nps: false,
38
38
  promoteEE: true
39
+ },
40
+ ai: {
41
+ enabled: true
39
42
  }
40
43
  };
41
44
  const { get } = getFetchClient();
42
45
  try {
43
- const { data: { data: { isEE, isTrial, features, flags } } } = await get('/admin/project-type');
46
+ const { data: { data: { isEE, isTrial, features, flags, ai } } } = await get('/admin/project-type');
44
47
  window.strapi.isEE = isEE;
45
48
  window.strapi.isTrialLicense = isTrial;
46
49
  window.strapi.flags = flags;
@@ -49,6 +52,8 @@ const renderAdmin = async (mountNode, { plugins, customisations, features })=>{
49
52
  isEnabled: (featureName)=>features.some((feature)=>feature.name === featureName)
50
53
  };
51
54
  window.strapi.projectType = isEE ? 'Enterprise' : 'Community';
55
+ window.strapi.aiLicenseKey = process.env.STRAPI_ADMIN_AI_API_KEY;
56
+ window.strapi.ai = ai;
52
57
  } catch (err) {
53
58
  /**
54
59
  * If this fails, we simply don't activate any EE features.
@@ -1 +1 @@
1
- {"version":3,"file":"render.mjs","sources":["../../../../admin/src/render.ts"],"sourcesContent":["/* eslint-disable no-undef */\nimport { createRoot } from 'react-dom/client';\n\nimport { StrapiApp, StrapiAppConstructorArgs } from './StrapiApp';\nimport { getFetchClient } from './utils/getFetchClient';\nimport { createAbsoluteUrl } from './utils/urls';\n\nimport type { Modules } from '@strapi/types';\n\ninterface RenderAdminArgs {\n customisations: {\n register?: (app: StrapiApp) => Promise<void> | void;\n bootstrap?: (app: StrapiApp) => Promise<void> | void;\n config?: StrapiAppConstructorArgs['config'];\n };\n plugins: StrapiAppConstructorArgs['appPlugins'];\n features?: Modules.Features.FeaturesService['config'];\n}\n\nconst renderAdmin = async (\n mountNode: HTMLElement | null,\n { plugins, customisations, features }: RenderAdminArgs\n) => {\n if (!mountNode) {\n throw new Error('[@strapi/admin]: Could not find the root element to mount the admin app');\n }\n\n window.strapi = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: createAbsoluteUrl(process.env.STRAPI_ADMIN_BACKEND_URL),\n isEE: false,\n isTrial: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',\n future: {\n isEnabled: (name: keyof NonNullable<Modules.Features.FeaturesConfig['future']>) => {\n return features?.future?.[name] === true;\n },\n },\n // @ts-expect-error – there's pollution from the global scope of Node.\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n },\n };\n\n const { get } = getFetchClient();\n\n interface ProjectType extends Pick<Window['strapi'], 'flags'> {\n isEE: boolean;\n isTrial: boolean;\n features: {\n name: string;\n }[];\n }\n\n try {\n const {\n data: {\n data: { isEE, isTrial, features, flags },\n },\n } = await get<{ data: ProjectType }>('/admin/project-type');\n\n window.strapi.isEE = isEE;\n window.strapi.isTrialLicense = isTrial;\n window.strapi.flags = flags;\n window.strapi.features = {\n ...window.strapi.features,\n isEnabled: (featureName) => features.some((feature) => feature.name === featureName),\n };\n window.strapi.projectType = isEE ? 'Enterprise' : 'Community';\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n const app = new StrapiApp({\n config: customisations?.config,\n appPlugins: plugins,\n });\n\n await app.register(customisations?.register);\n await app.bootstrap(customisations?.bootstrap);\n await app.loadTrads(customisations?.config?.translations);\n\n createRoot(mountNode).render(app.render());\n\n if (\n typeof module !== 'undefined' &&\n module &&\n 'hot' in module &&\n typeof module.hot === 'object' &&\n module.hot !== null &&\n 'accept' in module.hot &&\n typeof module.hot.accept === 'function'\n ) {\n module.hot.accept();\n }\n\n if (typeof import.meta.hot?.accept === 'function') {\n import.meta.hot.accept();\n }\n};\n\nexport { renderAdmin };\nexport type { RenderAdminArgs };\n"],"names":["renderAdmin","mountNode","plugins","customisations","features","Error","window","strapi","backendURL","createAbsoluteUrl","process","env","STRAPI_ADMIN_BACKEND_URL","isEE","isTrial","telemetryDisabled","STRAPI_TELEMETRY_DISABLED","future","isEnabled","name","SSO","AUDIT_LOGS","REVIEW_WORKFLOWS","projectType","flags","nps","promoteEE","get","getFetchClient","data","isTrialLicense","featureName","some","feature","err","console","error","app","StrapiApp","config","appPlugins","register","bootstrap","loadTrads","translations","createRoot","render","module","hot","accept"],"mappings":"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"}
1
+ {"version":3,"file":"render.mjs","sources":["../../../../admin/src/render.ts"],"sourcesContent":["/* eslint-disable no-undef */\nimport { createRoot } from 'react-dom/client';\n\nimport { StrapiApp, StrapiAppConstructorArgs } from './StrapiApp';\nimport { getFetchClient } from './utils/getFetchClient';\nimport { createAbsoluteUrl } from './utils/urls';\n\nimport type { Modules } from '@strapi/types';\n\ninterface RenderAdminArgs {\n customisations: {\n register?: (app: StrapiApp) => Promise<void> | void;\n bootstrap?: (app: StrapiApp) => Promise<void> | void;\n config?: StrapiAppConstructorArgs['config'];\n };\n plugins: StrapiAppConstructorArgs['appPlugins'];\n features?: Modules.Features.FeaturesService['config'];\n}\n\nconst renderAdmin = async (\n mountNode: HTMLElement | null,\n { plugins, customisations, features }: RenderAdminArgs\n) => {\n if (!mountNode) {\n throw new Error('[@strapi/admin]: Could not find the root element to mount the admin app');\n }\n\n window.strapi = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: createAbsoluteUrl(process.env.STRAPI_ADMIN_BACKEND_URL),\n isEE: false,\n isTrial: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',\n future: {\n isEnabled: (name: keyof NonNullable<Modules.Features.FeaturesConfig['future']>) => {\n return features?.future?.[name] === true;\n },\n },\n // @ts-expect-error – there's pollution from the global scope of Node.\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n },\n ai: {\n enabled: true,\n },\n };\n\n const { get } = getFetchClient();\n\n interface ProjectType extends Pick<Window['strapi'], 'flags'> {\n isEE: boolean;\n isTrial: boolean;\n features: {\n name: string;\n }[];\n ai: {\n enabled: boolean;\n };\n }\n\n try {\n const {\n data: {\n data: { isEE, isTrial, features, flags, ai },\n },\n } = await get<{ data: ProjectType }>('/admin/project-type');\n\n window.strapi.isEE = isEE;\n window.strapi.isTrialLicense = isTrial;\n window.strapi.flags = flags;\n window.strapi.features = {\n ...window.strapi.features,\n isEnabled: (featureName) => features.some((feature) => feature.name === featureName),\n };\n window.strapi.projectType = isEE ? 'Enterprise' : 'Community';\n window.strapi.aiLicenseKey = process.env.STRAPI_ADMIN_AI_API_KEY;\n window.strapi.ai = ai;\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n const app = new StrapiApp({\n config: customisations?.config,\n appPlugins: plugins,\n });\n\n await app.register(customisations?.register);\n await app.bootstrap(customisations?.bootstrap);\n await app.loadTrads(customisations?.config?.translations);\n\n createRoot(mountNode).render(app.render());\n\n if (\n typeof module !== 'undefined' &&\n module &&\n 'hot' in module &&\n typeof module.hot === 'object' &&\n module.hot !== null &&\n 'accept' in module.hot &&\n typeof module.hot.accept === 'function'\n ) {\n module.hot.accept();\n }\n\n if (typeof import.meta.hot?.accept === 'function') {\n import.meta.hot.accept();\n }\n};\n\nexport { renderAdmin };\nexport type { RenderAdminArgs };\n"],"names":["renderAdmin","mountNode","plugins","customisations","features","Error","window","strapi","backendURL","createAbsoluteUrl","process","env","STRAPI_ADMIN_BACKEND_URL","isEE","isTrial","telemetryDisabled","STRAPI_TELEMETRY_DISABLED","future","isEnabled","name","SSO","AUDIT_LOGS","REVIEW_WORKFLOWS","projectType","flags","nps","promoteEE","ai","enabled","get","getFetchClient","data","isTrialLicense","featureName","some","feature","aiLicenseKey","STRAPI_ADMIN_AI_API_KEY","err","console","error","app","StrapiApp","config","appPlugins","register","bootstrap","loadTrads","translations","createRoot","render","module","hot","accept"],"mappings":"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"}
@@ -21,11 +21,25 @@ const homepageService = api.adminApi.enhanceEndpoints({
21
21
  providesTags: (_, _err)=>[
22
22
  'CountDocuments'
23
23
  ]
24
+ }),
25
+ getHomepageLayout: builder.query({
26
+ query: ()=>'/admin/homepage/layout',
27
+ transformResponse: (r)=>r.data
28
+ }),
29
+ updateHomepageLayout: builder.mutation({
30
+ query: (body)=>({
31
+ url: '/admin/homepage/layout',
32
+ method: 'PUT',
33
+ body
34
+ }),
35
+ transformResponse: (r)=>r.data
24
36
  })
25
37
  })
26
38
  });
27
- const { useGetKeyStatisticsQuery, useGetCountDocumentsQuery } = homepageService;
39
+ const { useGetKeyStatisticsQuery, useGetCountDocumentsQuery, useGetHomepageLayoutQuery, useUpdateHomepageLayoutMutation } = homepageService;
28
40
 
29
41
  exports.useGetCountDocumentsQuery = useGetCountDocumentsQuery;
42
+ exports.useGetHomepageLayoutQuery = useGetHomepageLayoutQuery;
30
43
  exports.useGetKeyStatisticsQuery = useGetKeyStatisticsQuery;
44
+ exports.useUpdateHomepageLayoutMutation = useUpdateHomepageLayoutMutation;
31
45
  //# sourceMappingURL=homepage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['CountDocuments'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getKeyStatistics: builder.query<Homepage.GetKeyStatistics.Response['data'], void>({\n query: () => '/admin/homepage/key-statistics',\n transformResponse: (response: Homepage.GetKeyStatistics.Response) => response.data,\n providesTags: (_, _err) => ['HomepageKeyStatistics'],\n }),\n getCountDocuments: builder.query<Homepage.GetCountDocuments.Response['data'], void>({\n query: () => '/content-manager/homepage/count-documents',\n transformResponse: (response: Homepage.GetCountDocuments.Response) => response.data,\n providesTags: (_, _err) => ['CountDocuments'],\n }),\n }),\n });\n\nconst { useGetKeyStatisticsQuery, useGetCountDocumentsQuery } = homepageService;\n\nexport { useGetKeyStatisticsQuery, useGetCountDocumentsQuery };\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getKeyStatistics","query","transformResponse","response","data","providesTags","_","_err","getCountDocuments","useGetKeyStatisticsQuery","useGetCountDocumentsQuery"],"mappings":";;;;AAIA,MAAMA,eAAAA,GAAkBC,YACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAiB;AACjC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,gBAAkBD,EAAAA,OAAAA,CAAQE,KAAK,CAAmD;AAChFA,gBAAAA,KAAAA,EAAO,IAAM,gCAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAiDA,GAAAA,QAAAA,CAASC,IAAI;gBAClFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAwB;AACtD,aAAA,CAAA;YACAC,iBAAmBT,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,2CAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAkDA,GAAAA,QAAAA,CAASC,IAAI;gBACnFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAiB;AAC/C,aAAA;SACF;AACF,CAAA,CAAA;AAEF,MAAM,EAAEE,wBAAwB,EAAEC,yBAAyB,EAAE,GAAGjB;;;;;"}
1
+ {"version":3,"file":"homepage.js","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['CountDocuments'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getKeyStatistics: builder.query<Homepage.GetKeyStatistics.Response['data'], void>({\n query: () => '/admin/homepage/key-statistics',\n transformResponse: (response: Homepage.GetKeyStatistics.Response) => response.data,\n providesTags: (_, _err) => ['HomepageKeyStatistics'],\n }),\n getCountDocuments: builder.query<Homepage.GetCountDocuments.Response['data'], void>({\n query: () => '/content-manager/homepage/count-documents',\n transformResponse: (response: Homepage.GetCountDocuments.Response) => response.data,\n providesTags: (_, _err) => ['CountDocuments'],\n }),\n getHomepageLayout: builder.query<Homepage.GetHomepageLayout.Response['data'], void>({\n query: () => '/admin/homepage/layout',\n transformResponse: (r: Homepage.GetHomepageLayout.Response) => r.data,\n }),\n updateHomepageLayout: builder.mutation<\n Homepage.UpdateHomepageLayout.Response['data'],\n Homepage.UpdateHomepageLayout.Request['body']\n >({\n query: (body) => ({ url: '/admin/homepage/layout', method: 'PUT', body }),\n transformResponse: (r: Homepage.UpdateHomepageLayout.Response) => r.data,\n }),\n }),\n });\n\nconst {\n useGetKeyStatisticsQuery,\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useUpdateHomepageLayoutMutation,\n} = homepageService;\n\nexport {\n useGetKeyStatisticsQuery,\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useUpdateHomepageLayoutMutation,\n};\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getKeyStatistics","query","transformResponse","response","data","providesTags","_","_err","getCountDocuments","getHomepageLayout","r","updateHomepageLayout","mutation","body","url","method","useGetKeyStatisticsQuery","useGetCountDocumentsQuery","useGetHomepageLayoutQuery","useUpdateHomepageLayoutMutation"],"mappings":";;;;AAIA,MAAMA,eAAAA,GAAkBC,YACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAiB;AACjC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,gBAAkBD,EAAAA,OAAAA,CAAQE,KAAK,CAAmD;AAChFA,gBAAAA,KAAAA,EAAO,IAAM,gCAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAiDA,GAAAA,QAAAA,CAASC,IAAI;gBAClFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAwB;AACtD,aAAA,CAAA;YACAC,iBAAmBT,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,2CAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAkDA,GAAAA,QAAAA,CAASC,IAAI;gBACnFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAiB;AAC/C,aAAA,CAAA;YACAE,iBAAmBV,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,wBAAA;gBACbC,iBAAmB,EAAA,CAACQ,CAA2CA,GAAAA,CAAAA,CAAEN;AACnE,aAAA,CAAA;YACAO,oBAAsBZ,EAAAA,OAAAA,CAAQa,QAAQ,CAGpC;gBACAX,KAAO,EAAA,CAACY,QAAU;wBAAEC,GAAK,EAAA,wBAAA;wBAA0BC,MAAQ,EAAA,KAAA;AAAOF,wBAAAA;qBAAK,CAAA;gBACvEX,iBAAmB,EAAA,CAACQ,CAA8CA,GAAAA,CAAAA,CAAEN;AACtE,aAAA;SACF;AACF,CAAA,CAAA;AAEI,MAAA,EACJY,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,+BAA+B,EAChC,GAAG1B;;;;;;;"}
@@ -19,10 +19,22 @@ const homepageService = adminApi.enhanceEndpoints({
19
19
  providesTags: (_, _err)=>[
20
20
  'CountDocuments'
21
21
  ]
22
+ }),
23
+ getHomepageLayout: builder.query({
24
+ query: ()=>'/admin/homepage/layout',
25
+ transformResponse: (r)=>r.data
26
+ }),
27
+ updateHomepageLayout: builder.mutation({
28
+ query: (body)=>({
29
+ url: '/admin/homepage/layout',
30
+ method: 'PUT',
31
+ body
32
+ }),
33
+ transformResponse: (r)=>r.data
22
34
  })
23
35
  })
24
36
  });
25
- const { useGetKeyStatisticsQuery, useGetCountDocumentsQuery } = homepageService;
37
+ const { useGetKeyStatisticsQuery, useGetCountDocumentsQuery, useGetHomepageLayoutQuery, useUpdateHomepageLayoutMutation } = homepageService;
26
38
 
27
- export { useGetCountDocumentsQuery, useGetKeyStatisticsQuery };
39
+ export { useGetCountDocumentsQuery, useGetHomepageLayoutQuery, useGetKeyStatisticsQuery, useUpdateHomepageLayoutMutation };
28
40
  //# sourceMappingURL=homepage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['CountDocuments'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getKeyStatistics: builder.query<Homepage.GetKeyStatistics.Response['data'], void>({\n query: () => '/admin/homepage/key-statistics',\n transformResponse: (response: Homepage.GetKeyStatistics.Response) => response.data,\n providesTags: (_, _err) => ['HomepageKeyStatistics'],\n }),\n getCountDocuments: builder.query<Homepage.GetCountDocuments.Response['data'], void>({\n query: () => '/content-manager/homepage/count-documents',\n transformResponse: (response: Homepage.GetCountDocuments.Response) => response.data,\n providesTags: (_, _err) => ['CountDocuments'],\n }),\n }),\n });\n\nconst { useGetKeyStatisticsQuery, useGetCountDocumentsQuery } = homepageService;\n\nexport { useGetKeyStatisticsQuery, useGetCountDocumentsQuery };\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getKeyStatistics","query","transformResponse","response","data","providesTags","_","_err","getCountDocuments","useGetKeyStatisticsQuery","useGetCountDocumentsQuery"],"mappings":";;AAIA,MAAMA,eAAAA,GAAkBC,QACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAiB;AACjC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,gBAAkBD,EAAAA,OAAAA,CAAQE,KAAK,CAAmD;AAChFA,gBAAAA,KAAAA,EAAO,IAAM,gCAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAiDA,GAAAA,QAAAA,CAASC,IAAI;gBAClFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAwB;AACtD,aAAA,CAAA;YACAC,iBAAmBT,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,2CAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAkDA,GAAAA,QAAAA,CAASC,IAAI;gBACnFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAiB;AAC/C,aAAA;SACF;AACF,CAAA,CAAA;AAEF,MAAM,EAAEE,wBAAwB,EAAEC,yBAAyB,EAAE,GAAGjB;;;;"}
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['CountDocuments'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getKeyStatistics: builder.query<Homepage.GetKeyStatistics.Response['data'], void>({\n query: () => '/admin/homepage/key-statistics',\n transformResponse: (response: Homepage.GetKeyStatistics.Response) => response.data,\n providesTags: (_, _err) => ['HomepageKeyStatistics'],\n }),\n getCountDocuments: builder.query<Homepage.GetCountDocuments.Response['data'], void>({\n query: () => '/content-manager/homepage/count-documents',\n transformResponse: (response: Homepage.GetCountDocuments.Response) => response.data,\n providesTags: (_, _err) => ['CountDocuments'],\n }),\n getHomepageLayout: builder.query<Homepage.GetHomepageLayout.Response['data'], void>({\n query: () => '/admin/homepage/layout',\n transformResponse: (r: Homepage.GetHomepageLayout.Response) => r.data,\n }),\n updateHomepageLayout: builder.mutation<\n Homepage.UpdateHomepageLayout.Response['data'],\n Homepage.UpdateHomepageLayout.Request['body']\n >({\n query: (body) => ({ url: '/admin/homepage/layout', method: 'PUT', body }),\n transformResponse: (r: Homepage.UpdateHomepageLayout.Response) => r.data,\n }),\n }),\n });\n\nconst {\n useGetKeyStatisticsQuery,\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useUpdateHomepageLayoutMutation,\n} = homepageService;\n\nexport {\n useGetKeyStatisticsQuery,\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useUpdateHomepageLayoutMutation,\n};\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getKeyStatistics","query","transformResponse","response","data","providesTags","_","_err","getCountDocuments","getHomepageLayout","r","updateHomepageLayout","mutation","body","url","method","useGetKeyStatisticsQuery","useGetCountDocumentsQuery","useGetHomepageLayoutQuery","useUpdateHomepageLayoutMutation"],"mappings":";;AAIA,MAAMA,eAAAA,GAAkBC,QACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAiB;AACjC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,gBAAkBD,EAAAA,OAAAA,CAAQE,KAAK,CAAmD;AAChFA,gBAAAA,KAAAA,EAAO,IAAM,gCAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAiDA,GAAAA,QAAAA,CAASC,IAAI;gBAClFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAwB;AACtD,aAAA,CAAA;YACAC,iBAAmBT,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,2CAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAkDA,GAAAA,QAAAA,CAASC,IAAI;gBACnFC,YAAc,EAAA,CAACC,GAAGC,IAAS,GAAA;AAAC,wBAAA;AAAiB;AAC/C,aAAA,CAAA;YACAE,iBAAmBV,EAAAA,OAAAA,CAAQE,KAAK,CAAoD;AAClFA,gBAAAA,KAAAA,EAAO,IAAM,wBAAA;gBACbC,iBAAmB,EAAA,CAACQ,CAA2CA,GAAAA,CAAAA,CAAEN;AACnE,aAAA,CAAA;YACAO,oBAAsBZ,EAAAA,OAAAA,CAAQa,QAAQ,CAGpC;gBACAX,KAAO,EAAA,CAACY,QAAU;wBAAEC,GAAK,EAAA,wBAAA;wBAA0BC,MAAQ,EAAA,KAAA;AAAOF,wBAAAA;qBAAK,CAAA;gBACvEX,iBAAmB,EAAA,CAACQ,CAA8CA,GAAAA,CAAAA,CAAEN;AACtE,aAAA;SACF;AACF,CAAA,CAAA;AAEI,MAAA,EACJY,wBAAwB,EACxBC,yBAAyB,EACzBC,yBAAyB,EACzBC,+BAA+B,EAChC,GAAG1B;;;;"}
@@ -827,6 +827,8 @@ var en = {
827
827
  submit: submit,
828
828
  "tours.contentTypeBuilder.Introduction.title": "Welcome to the Content-Type Builder!",
829
829
  "tours.contentTypeBuilder.Introduction.content": "Here you create and manage the structure of your app with collection types, single types, and reusable components. Let's dive in!",
830
+ "tours.contentTypeBuilder.AIChat.title": "Time to get started!",
831
+ "tours.contentTypeBuilder.AIChat.content": "<p>If you have any questions about the Content-Type Builder or Strapi ask them here.</p><p>Strapi AI can generate schemas tailored to your needs. Ask for exactly what you want, for example:<ul><li>Date picker</li><li>Email and password fields</li><li>Media of any type</li><li>UIDs</li></ul></p><p>Don’t be shy, try it out !</p>",
830
832
  "tours.contentTypeBuilder.CollectionTypes.title": "Collection Types",
831
833
  "tours.contentTypeBuilder.CollectionTypes.content": "These are your go-to for managing multiple entries — think blog posts or products.",
832
834
  "tours.contentTypeBuilder.SingleTypes.title": "Single Types",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -823,6 +823,8 @@ var en = {
823
823
  submit: submit,
824
824
  "tours.contentTypeBuilder.Introduction.title": "Welcome to the Content-Type Builder!",
825
825
  "tours.contentTypeBuilder.Introduction.content": "Here you create and manage the structure of your app with collection types, single types, and reusable components. Let's dive in!",
826
+ "tours.contentTypeBuilder.AIChat.title": "Time to get started!",
827
+ "tours.contentTypeBuilder.AIChat.content": "<p>If you have any questions about the Content-Type Builder or Strapi ask them here.</p><p>Strapi AI can generate schemas tailored to your needs. Ask for exactly what you want, for example:<ul><li>Date picker</li><li>Email and password fields</li><li>Media of any type</li><li>UIDs</li></ul></p><p>Don’t be shy, try it out !</p>",
826
828
  "tours.contentTypeBuilder.CollectionTypes.title": "Collection Types",
827
829
  "tours.contentTypeBuilder.CollectionTypes.content": "These are your go-to for managing multiple entries — think blog posts or products.",
828
830
  "tours.contentTypeBuilder.SingleTypes.title": "Single Types",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ var useAIUsageWarning = require('../hooks/useAIUsageWarning.js');
4
+
5
+ const GlobalNotifications = ()=>{
6
+ useAIUsageWarning.useAIUsageWarning();
7
+ return null;
8
+ };
9
+
10
+ exports.GlobalNotifications = GlobalNotifications;
11
+ //# sourceMappingURL=GlobalNotifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalNotifications.js","sources":["../../../../../../ee/admin/src/components/GlobalNotifications.tsx"],"sourcesContent":["import { useAIUsageWarning } from '../hooks/useAIUsageWarning';\n\nexport const GlobalNotifications = () => {\n useAIUsageWarning();\n\n return null;\n};\n"],"names":["GlobalNotifications","useAIUsageWarning"],"mappings":";;;;MAEaA,mBAAsB,GAAA,IAAA;AACjCC,IAAAA,mCAAAA,EAAAA;IAEA,OAAO,IAAA;AACT;;;;"}
@@ -0,0 +1,9 @@
1
+ import { useAIUsageWarning } from '../hooks/useAIUsageWarning.mjs';
2
+
3
+ const GlobalNotifications = ()=>{
4
+ useAIUsageWarning();
5
+ return null;
6
+ };
7
+
8
+ export { GlobalNotifications };
9
+ //# sourceMappingURL=GlobalNotifications.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalNotifications.mjs","sources":["../../../../../../ee/admin/src/components/GlobalNotifications.tsx"],"sourcesContent":["import { useAIUsageWarning } from '../hooks/useAIUsageWarning';\n\nexport const GlobalNotifications = () => {\n useAIUsageWarning();\n\n return null;\n};\n"],"names":["GlobalNotifications","useAIUsageWarning"],"mappings":";;MAEaA,mBAAsB,GAAA,IAAA;AACjCC,IAAAA,iBAAAA,EAAAA;IAEA,OAAO,IAAA;AACT;;;;"}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ const useAIAvailability = ()=>{
4
+ const isAiEnabled = window.strapi.ai?.enabled !== false;
5
+ const isEE = window.strapi?.isEE;
6
+ const isAiFeatureEnabled = window.strapi.features.isEnabled('cms-ai');
7
+ return !!isEE && isAiEnabled && isAiFeatureEnabled;
8
+ };
9
+
10
+ exports.useAIAvailability = useAIAvailability;
11
+ //# sourceMappingURL=useAIAvailability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAIAvailability.js","sources":["../../../../../../ee/admin/src/hooks/useAIAvailability.ts"],"sourcesContent":["export const useAIAvailability = (): boolean => {\n const isAiEnabled = window.strapi.ai?.enabled !== false;\n const isEE = window.strapi?.isEE;\n const isAiFeatureEnabled = window.strapi.features.isEnabled('cms-ai');\n\n return !!isEE && isAiEnabled && isAiFeatureEnabled;\n};\n"],"names":["useAIAvailability","isAiEnabled","window","strapi","ai","enabled","isEE","isAiFeatureEnabled","features","isEnabled"],"mappings":";;MAAaA,iBAAoB,GAAA,IAAA;AAC/B,IAAA,MAAMC,cAAcC,MAAOC,CAAAA,MAAM,CAACC,EAAE,EAAEC,OAAY,KAAA,KAAA;IAClD,MAAMC,IAAAA,GAAOJ,MAAOC,CAAAA,MAAM,EAAEG,IAAAA;AAC5B,IAAA,MAAMC,qBAAqBL,MAAOC,CAAAA,MAAM,CAACK,QAAQ,CAACC,SAAS,CAAC,QAAA,CAAA;IAE5D,OAAO,CAAC,CAACH,IAAAA,IAAQL,WAAeM,IAAAA,kBAAAA;AAClC;;;;"}
@@ -0,0 +1,9 @@
1
+ const useAIAvailability = ()=>{
2
+ const isAiEnabled = window.strapi.ai?.enabled !== false;
3
+ const isEE = window.strapi?.isEE;
4
+ const isAiFeatureEnabled = window.strapi.features.isEnabled('cms-ai');
5
+ return !!isEE && isAiEnabled && isAiFeatureEnabled;
6
+ };
7
+
8
+ export { useAIAvailability };
9
+ //# sourceMappingURL=useAIAvailability.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAIAvailability.mjs","sources":["../../../../../../ee/admin/src/hooks/useAIAvailability.ts"],"sourcesContent":["export const useAIAvailability = (): boolean => {\n const isAiEnabled = window.strapi.ai?.enabled !== false;\n const isEE = window.strapi?.isEE;\n const isAiFeatureEnabled = window.strapi.features.isEnabled('cms-ai');\n\n return !!isEE && isAiEnabled && isAiFeatureEnabled;\n};\n"],"names":["useAIAvailability","isAiEnabled","window","strapi","ai","enabled","isEE","isAiFeatureEnabled","features","isEnabled"],"mappings":"MAAaA,iBAAoB,GAAA,IAAA;AAC/B,IAAA,MAAMC,cAAcC,MAAOC,CAAAA,MAAM,CAACC,EAAE,EAAEC,OAAY,KAAA,KAAA;IAClD,MAAMC,IAAAA,GAAOJ,MAAOC,CAAAA,MAAM,EAAEG,IAAAA;AAC5B,IAAA,MAAMC,qBAAqBL,MAAOC,CAAAA,MAAM,CAACK,QAAQ,CAACC,SAAS,CAAC,QAAA,CAAA;IAE5D,OAAO,CAAC,CAACH,IAAAA,IAAQL,WAAeM,IAAAA,kBAAAA;AAClC;;;;"}
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var reactRouterDom = require('react-router-dom');
5
+ var Notifications = require('../../../../admin/src/features/Notifications.js');
6
+ var ai = require('../services/ai.js');
7
+ var useAIAvailability = require('./useAIAvailability.js');
8
+
9
+ /**
10
+ * Triggers a warning notification if AI usage is above a threshold (default 80%).
11
+ * @param threshold - Usage percentage (0-1) at which to warn. Default: 0.8 (80%)
12
+ */ function useAIUsageWarning(threshold = 0.8) {
13
+ const location = reactRouterDom.useLocation();
14
+ const isAuthPage = location.pathname.startsWith('/auth');
15
+ const { toggleNotification } = Notifications.useNotification();
16
+ const isAIEnabled = useAIAvailability.useAIAvailability();
17
+ const { data, isLoading, error } = ai.useGetAIUsageQuery(undefined, {
18
+ refetchOnMountOrArgChange: true,
19
+ skip: !isAIEnabled || isAuthPage
20
+ });
21
+ const warningLevelsRef = React.useRef(new Set());
22
+ React.useEffect(()=>{
23
+ if (isAuthPage || isLoading || error || !data?.subscription?.cmsAiEnabled || !isAIEnabled) return;
24
+ const totalCredits = data.subscription.cmsAiCreditsBase;
25
+ const usedCredits = data.cmsAiCreditsUsed;
26
+ const maxCredits = data.subscription.cmsAiCreditsMaxUsage;
27
+ if (!totalCredits || totalCredits <= 0) return;
28
+ const percentUsed = usedCredits / totalCredits;
29
+ const percentDisplay = Math.round(percentUsed * 100);
30
+ const remaining = Math.max(totalCredits - usedCredits, 0);
31
+ if (percentUsed >= 1 && !warningLevelsRef.current.has(100)) {
32
+ const hasOverageAllowance = maxCredits && maxCredits > totalCredits;
33
+ if (hasOverageAllowance) {
34
+ // Overages notification (error style)
35
+ toggleNotification({
36
+ type: 'danger',
37
+ message: `You've used 100% of your AI credits. Overages are being applied.`,
38
+ timeout: 5000
39
+ });
40
+ } else {
41
+ // No overages allowed - credits exhausted
42
+ toggleNotification({
43
+ type: 'danger',
44
+ message: `You've exhausted your AI credits. No additional credits available.`,
45
+ timeout: 5000
46
+ });
47
+ }
48
+ warningLevelsRef.current.add(100);
49
+ } else if (percentUsed >= 0.9 && percentUsed < 1 && !warningLevelsRef.current.has(90)) {
50
+ // 90% warning notification
51
+ toggleNotification({
52
+ type: 'warning',
53
+ message: `You've used ${percentDisplay}% of your AI credits. ${remaining} remain.`,
54
+ timeout: 5000
55
+ });
56
+ warningLevelsRef.current.add(90);
57
+ } else if (percentUsed >= threshold && percentUsed < 0.9 && !warningLevelsRef.current.has(Math.round(threshold * 100))) {
58
+ // Initial threshold warning (default 80%)
59
+ toggleNotification({
60
+ type: 'warning',
61
+ message: `You've used ${percentDisplay}% of your AI credits. ${remaining} remain.`,
62
+ timeout: 5000
63
+ });
64
+ warningLevelsRef.current.add(Math.round(threshold * 100));
65
+ }
66
+ // Reset warnings if usage drops significantly (e.g., below 70%)
67
+ if (percentUsed < 0.7) {
68
+ warningLevelsRef.current.clear();
69
+ }
70
+ }, [
71
+ data,
72
+ isLoading,
73
+ error,
74
+ threshold,
75
+ toggleNotification,
76
+ isAIEnabled,
77
+ isAuthPage
78
+ ]);
79
+ }
80
+
81
+ exports.useAIUsageWarning = useAIUsageWarning;
82
+ //# sourceMappingURL=useAIUsageWarning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAIUsageWarning.js","sources":["../../../../../../ee/admin/src/hooks/useAIUsageWarning.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { useLocation } from 'react-router-dom';\n\nimport { useNotification } from '../../../../admin/src/features/Notifications';\nimport { useGetAIUsageQuery } from '../services/ai';\n\nimport { useAIAvailability } from './useAIAvailability';\n\n/**\n * Triggers a warning notification if AI usage is above a threshold (default 80%).\n * @param threshold - Usage percentage (0-1) at which to warn. Default: 0.8 (80%)\n */\nexport function useAIUsageWarning(threshold: number = 0.8) {\n const location = useLocation();\n const isAuthPage = location.pathname.startsWith('/auth');\n const { toggleNotification } = useNotification();\n const isAIEnabled = useAIAvailability();\n const { data, isLoading, error } = useGetAIUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n skip: !isAIEnabled || isAuthPage,\n });\n const warningLevelsRef = useRef(new Set<number>());\n\n useEffect(() => {\n if (isAuthPage || isLoading || error || !data?.subscription?.cmsAiEnabled || !isAIEnabled)\n return;\n\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n\n if (!totalCredits || totalCredits <= 0) return;\n\n const percentUsed = usedCredits / totalCredits;\n\n const percentDisplay = Math.round(percentUsed * 100);\n const remaining = Math.max(totalCredits - usedCredits, 0);\n\n if (percentUsed >= 1 && !warningLevelsRef.current.has(100)) {\n const hasOverageAllowance = maxCredits && maxCredits > totalCredits;\n\n if (hasOverageAllowance) {\n // Overages notification (error style)\n toggleNotification({\n type: 'danger',\n message: `You've used 100% of your AI credits. Overages are being applied.`,\n timeout: 5000,\n });\n } else {\n // No overages allowed - credits exhausted\n toggleNotification({\n type: 'danger',\n message: `You've exhausted your AI credits. No additional credits available.`,\n timeout: 5000,\n });\n }\n warningLevelsRef.current.add(100);\n } else if (percentUsed >= 0.9 && percentUsed < 1 && !warningLevelsRef.current.has(90)) {\n // 90% warning notification\n toggleNotification({\n type: 'warning',\n message: `You've used ${percentDisplay}% of your AI credits. ${remaining} remain.`,\n timeout: 5000,\n });\n warningLevelsRef.current.add(90);\n } else if (\n percentUsed >= threshold &&\n percentUsed < 0.9 &&\n !warningLevelsRef.current.has(Math.round(threshold * 100))\n ) {\n // Initial threshold warning (default 80%)\n toggleNotification({\n type: 'warning',\n message: `You've used ${percentDisplay}% of your AI credits. ${remaining} remain.`,\n timeout: 5000,\n });\n warningLevelsRef.current.add(Math.round(threshold * 100));\n }\n\n // Reset warnings if usage drops significantly (e.g., below 70%)\n if (percentUsed < 0.7) {\n warningLevelsRef.current.clear();\n }\n }, [data, isLoading, error, threshold, toggleNotification, isAIEnabled, isAuthPage]);\n}\n"],"names":["useAIUsageWarning","threshold","location","useLocation","isAuthPage","pathname","startsWith","toggleNotification","useNotification","isAIEnabled","useAIAvailability","data","isLoading","error","useGetAIUsageQuery","undefined","refetchOnMountOrArgChange","skip","warningLevelsRef","useRef","Set","useEffect","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","percentUsed","percentDisplay","Math","round","remaining","max","current","has","hasOverageAllowance","type","message","timeout","add","clear"],"mappings":"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"}