@strapi/admin 5.57.0 → 5.59.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.
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.js +10 -9
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
- package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +57 -12
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +57 -12
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +3 -1
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +3 -1
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
- package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
- package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js +5 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js +2 -1
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/Pagination.js +7 -6
- package/dist/admin/admin/src/components/Pagination.js.map +1 -1
- package/dist/admin/admin/src/components/Pagination.mjs +7 -6
- package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +2 -1
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +6 -12
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +7 -13
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +3 -1
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +3 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
- package/dist/admin/admin/src/constants.js +14 -0
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs +14 -0
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +2 -1
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +2 -1
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.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/pages/Auth/components/ResetPassword.js +6 -12
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +6 -12
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +10 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +10 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +7 -58
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +7 -58
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js +217 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs +195 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js +185 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs +162 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js +342 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs +320 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +9 -4
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +15 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +15 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +5 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +18 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/services/admin.js +11 -1
- package/dist/admin/admin/src/services/admin.js.map +1 -1
- package/dist/admin/admin/src/services/admin.mjs +11 -2
- package/dist/admin/admin/src/services/admin.mjs.map +1 -1
- package/dist/admin/admin/src/services/users.js.map +1 -1
- package/dist/admin/admin/src/services/users.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +71 -4
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +71 -4
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/eu.json.js +1 -1
- package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.js +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.mjs +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -1
- package/dist/admin/admin/src/utils/cookies.js +7 -6
- package/dist/admin/admin/src/utils/cookies.js.map +1 -1
- package/dist/admin/admin/src/utils/cookies.mjs +7 -6
- package/dist/admin/admin/src/utils/cookies.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 +24 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +2 -1
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +2 -1
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +52 -22
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +53 -23
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +16 -29
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +18 -31
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js +473 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs +471 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +2 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +2 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/index.js +1 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
- package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
- package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/admin/shared/utils/get-project-type.js +49 -0
- package/dist/admin/shared/utils/get-project-type.js.map +1 -0
- package/dist/admin/shared/utils/get-project-type.mjs +46 -0
- package/dist/admin/shared/utils/get-project-type.mjs.map +1 -0
- package/dist/admin/src/components/Filters.d.ts +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -1
- package/dist/admin/src/constants.d.ts +10 -0
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.d.ts +12 -0
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.d.ts +14 -0
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.d.ts +2 -0
- package/dist/admin/src/services/admin.d.ts +2 -2
- package/dist/admin/src/types/permissions.d.ts +1 -0
- package/dist/admin/src/utils/cookies.d.ts +7 -6
- package/dist/admin/src/utils/getFetchClient.d.ts +25 -0
- package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +29 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +6 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.d.ts +2 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +2 -0
- package/dist/ee/server/src/audit-logs/entitlements.d.ts +8 -0
- package/dist/ee/server/src/audit-logs/entitlements.d.ts.map +1 -0
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +16 -0
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/admin.d.ts +36 -10
- package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/index.d.ts +36 -10
- package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +36 -10
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
- package/dist/ee/server/src/validation/role.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/entitlements.js +25 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.mjs +23 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +20 -8
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +19 -9
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
- package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +76 -3
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +76 -3
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +28 -10
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +28 -10
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +2 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +2 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
- package/dist/server/ee/server/src/validation/role.js +4 -2
- package/dist/server/ee/server/src/validation/role.js.map +1 -1
- package/dist/server/ee/server/src/validation/role.mjs +4 -2
- package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/ai/services/ai.js.map +1 -1
- package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/auth.js +72 -0
- package/dist/server/server/src/audit-logs/auth.js.map +1 -0
- package/dist/server/server/src/audit-logs/auth.mjs +67 -0
- package/dist/server/server/src/audit-logs/auth.mjs.map +1 -0
- package/dist/server/server/src/config/admin-actions.js +7 -0
- package/dist/server/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/server/src/config/admin-actions.mjs +7 -0
- package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +17 -12
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +17 -12
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/authentication.js +34 -8
- package/dist/server/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/server/src/controllers/authentication.mjs +34 -8
- package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/register.js +4 -0
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +4 -0
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/admin.js +18 -0
- package/dist/server/server/src/routes/admin.js.map +1 -1
- package/dist/server/server/src/routes/admin.mjs +18 -0
- package/dist/server/server/src/routes/admin.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +4 -8
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +4 -8
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/auth.js +4 -2
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/auth.mjs +4 -3
- package/dist/server/server/src/services/auth.mjs.map +1 -1
- package/dist/server/server/src/services/constants.js +4 -0
- package/dist/server/server/src/services/constants.js.map +1 -1
- package/dist/server/server/src/services/constants.mjs +4 -0
- package/dist/server/server/src/services/constants.mjs.map +1 -1
- package/dist/server/server/src/services/debug-dump.js +173 -0
- package/dist/server/server/src/services/debug-dump.js.map +1 -0
- package/dist/server/server/src/services/debug-dump.mjs +166 -0
- package/dist/server/server/src/services/debug-dump.mjs.map +1 -0
- package/dist/server/server/src/services/index.js +3 -1
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +3 -1
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +8 -5
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +8 -5
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/utils/debug-dump/redact.js +197 -0
- package/dist/server/server/src/utils/debug-dump/redact.js.map +1 -0
- package/dist/server/server/src/utils/debug-dump/redact.mjs +194 -0
- package/dist/server/server/src/utils/debug-dump/redact.mjs.map +1 -0
- package/dist/server/server/src/validation/admin-tokens.js +4 -4
- package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
- package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
- package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/api-tokens.js +4 -4
- package/dist/server/server/src/validation/api-tokens.js.map +1 -1
- package/dist/server/server/src/validation/api-tokens.mjs +4 -4
- package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/role.js +6 -4
- package/dist/server/server/src/validation/role.js.map +1 -1
- package/dist/server/server/src/validation/role.mjs +6 -4
- package/dist/server/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/validation/transfer/token.js +4 -4
- package/dist/server/server/src/validation/transfer/token.js.map +1 -1
- package/dist/server/server/src/validation/transfer/token.mjs +4 -4
- package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.js +13 -10
- package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
- package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/server/shared/utils/get-project-type.js +49 -0
- package/dist/server/shared/utils/get-project-type.js.map +1 -0
- package/dist/server/shared/utils/get-project-type.mjs +46 -0
- package/dist/server/shared/utils/get-project-type.mjs.map +1 -0
- package/dist/server/shared/utils/session-auth.js +70 -3
- package/dist/server/shared/utils/session-auth.js.map +1 -1
- package/dist/server/shared/utils/session-auth.mjs +70 -4
- package/dist/server/shared/utils/session-auth.mjs.map +1 -1
- package/dist/server/src/ai/services/ai.d.ts.map +1 -1
- package/dist/server/src/audit-logs/auth.d.ts +72 -0
- package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
- package/dist/server/src/config/admin-actions.d.ts.map +1 -1
- package/dist/server/src/controllers/admin.d.ts +3 -0
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/authentication.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +3 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/domain/permission/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +8 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/auth.d.ts +6 -0
- package/dist/server/src/services/auth.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +2 -0
- package/dist/server/src/services/constants.d.ts.map +1 -1
- package/dist/server/src/services/debug-dump.d.ts +9 -0
- package/dist/server/src/services/debug-dump.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +5 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/utils/debug-dump/redact.d.ts +8 -0
- package/dist/server/src/utils/debug-dump/redact.d.ts.map +1 -0
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/shared/contracts/admin.d.ts +106 -0
- package/dist/shared/contracts/admin.d.ts.map +1 -1
- package/dist/shared/contracts/transfer.d.ts.map +1 -1
- package/dist/shared/utils/__tests__/get-project-type.test.d.ts +1 -0
- package/dist/shared/utils/__tests__/get-project-type.test.d.ts.map +1 -0
- package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
- package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
- package/dist/shared/utils/get-project-type.d.ts +37 -0
- package/dist/shared/utils/get-project-type.d.ts.map +1 -0
- package/dist/shared/utils/session-auth.d.ts +16 -0
- package/dist/shared/utils/session-auth.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/admin/admin/src/utils/getProjectType.js +0 -22
- package/dist/admin/admin/src/utils/getProjectType.js.map +0 -1
- package/dist/admin/admin/src/utils/getProjectType.mjs +0 -20
- package/dist/admin/admin/src/utils/getProjectType.mjs.map +0 -1
- package/dist/admin/src/utils/getProjectType.d.ts +0 -16
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Flex, Typography, LinkButton, Grid } from '@strapi/design-system';
|
|
4
|
+
import { ExternalLink } from '@strapi/icons';
|
|
5
|
+
import { useIntl } from 'react-intl';
|
|
6
|
+
import { getLicensedPlan } from '../../../../../../../shared/utils/get-project-type.mjs';
|
|
7
|
+
import { useGetLicenseLimitsQuery } from '../../../../../services/admin.mjs';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A single labelled value rendered inside the Plan card's `<dl>`. Shared between the CE fallback
|
|
11
|
+
* body (current plan only) and the EE body (license details), so both stay visually consistent.
|
|
12
|
+
*/ const PlanDetail = ({ label, value })=>{
|
|
13
|
+
const { formatMessage } = useIntl();
|
|
14
|
+
return /*#__PURE__*/ jsxs(Grid.Item, {
|
|
15
|
+
col: 6,
|
|
16
|
+
xs: 12,
|
|
17
|
+
direction: "column",
|
|
18
|
+
alignItems: "start",
|
|
19
|
+
children: [
|
|
20
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
21
|
+
variant: "sigma",
|
|
22
|
+
textColor: "neutral600",
|
|
23
|
+
tag: "dt",
|
|
24
|
+
children: formatMessage(label)
|
|
25
|
+
}),
|
|
26
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
27
|
+
tag: "dd",
|
|
28
|
+
children: value
|
|
29
|
+
})
|
|
30
|
+
]
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
/* -------------------------------------------------------------------------------------------------
|
|
34
|
+
* PlanCard
|
|
35
|
+
* -----------------------------------------------------------------------------------------------*/ /**
|
|
36
|
+
* The billing link's label and destination depend on the current plan: Community links out to the
|
|
37
|
+
* public pricing page, while Growth and Enterprise link to the billing portal.
|
|
38
|
+
*/ const PLAN_LINK = {
|
|
39
|
+
Community: {
|
|
40
|
+
label: {
|
|
41
|
+
id: 'Settings.application.plan.see-all-plans',
|
|
42
|
+
defaultMessage: 'See all plans'
|
|
43
|
+
},
|
|
44
|
+
href: 'https://strapi.io/pricing-self-hosted'
|
|
45
|
+
},
|
|
46
|
+
Growth: {
|
|
47
|
+
label: {
|
|
48
|
+
id: 'Settings.application.plan.manage-subscription',
|
|
49
|
+
defaultMessage: 'Manage subscription'
|
|
50
|
+
},
|
|
51
|
+
href: 'https://billing.strapi.io'
|
|
52
|
+
},
|
|
53
|
+
Enterprise: {
|
|
54
|
+
label: {
|
|
55
|
+
id: 'Settings.application.plan.view-subscription',
|
|
56
|
+
defaultMessage: 'View subscription'
|
|
57
|
+
},
|
|
58
|
+
href: 'https://billing.strapi.io'
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const PlanCardBodyCE = ()=>/*#__PURE__*/ jsx(Grid.Root, {
|
|
62
|
+
gap: 5,
|
|
63
|
+
tag: "dl",
|
|
64
|
+
children: /*#__PURE__*/ jsx(PlanDetail, {
|
|
65
|
+
label: {
|
|
66
|
+
id: 'Settings.application.plan.current',
|
|
67
|
+
defaultMessage: 'current plan'
|
|
68
|
+
},
|
|
69
|
+
value: window.strapi.projectType
|
|
70
|
+
})
|
|
71
|
+
});
|
|
72
|
+
const PlanCard = ()=>{
|
|
73
|
+
const { formatMessage } = useIntl();
|
|
74
|
+
// The authenticated license-limit-information endpoint is EE-only, so a CE instance gets a
|
|
75
|
+
// 404 here; treat that (or any other error/missing data) the same as "no license".
|
|
76
|
+
// Until the first response, there is no telling which plan this is: painting the Community
|
|
77
|
+
// fallback and then swapping it out would name the wrong plan for a moment.
|
|
78
|
+
const { data: licenseLimitsData, isLoading: isLicenseLoading } = useGetLicenseLimitsQuery();
|
|
79
|
+
const licenseStatus = licenseLimitsData?.data?.licenseStatus ?? 'none';
|
|
80
|
+
const planPriceId = licenseLimitsData?.data?.planPriceId ?? undefined;
|
|
81
|
+
// `useEnterprise`'s `enabled` option only ANDs with `isEE` - it can never force the EE body
|
|
82
|
+
// on for a non-EE instance. An expired/unknown license still needs to show its retained
|
|
83
|
+
// details even though `isEE` is (correctly) false, and an active one must show too when
|
|
84
|
+
// /admin/project-type failed and left `isEE` false. So the license body is loaded manually
|
|
85
|
+
// here instead, gated on this wider predicate.
|
|
86
|
+
// Deliberately an allowlist rather than `!== 'none'`: if `licenseStatus` is ever missing
|
|
87
|
+
// (an older bundle, a consumer building `window.strapi` itself), this must fall back to the
|
|
88
|
+
// Community body instead of loading the license section.
|
|
89
|
+
const shouldShowLicenseDetails = window.strapi.isEE || licenseStatus === 'active' || licenseStatus === 'expired' || licenseStatus === 'unknown';
|
|
90
|
+
const [LicenseBody, setLicenseBody] = React.useState(null);
|
|
91
|
+
React.useEffect(()=>{
|
|
92
|
+
if (!shouldShowLicenseDetails) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
let active = true;
|
|
96
|
+
import('../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs').then((mod)=>{
|
|
97
|
+
if (active) {
|
|
98
|
+
setLicenseBody(()=>mod.LicenseInfoEE);
|
|
99
|
+
}
|
|
100
|
+
}).catch((err)=>{
|
|
101
|
+
// A chunk can stop loading mid-session (a redeploy replaced the bundle). The body stays
|
|
102
|
+
// empty rather than falling back to the CE body, which would label this instance
|
|
103
|
+
// Community.
|
|
104
|
+
console.error(err);
|
|
105
|
+
});
|
|
106
|
+
return ()=>{
|
|
107
|
+
active = false;
|
|
108
|
+
};
|
|
109
|
+
}, [
|
|
110
|
+
shouldShowLicenseDetails
|
|
111
|
+
]);
|
|
112
|
+
// Render nothing for the body while the EE module is still loading (rather than the CE
|
|
113
|
+
// body) so the card never briefly shows "Community" before swapping to the actual license
|
|
114
|
+
// details. Once we know for certain there is no license to show, fall back to the CE body.
|
|
115
|
+
const PlanCardBody = isLicenseLoading ? null : LicenseBody ?? (shouldShowLicenseDetails ? null : PlanCardBodyCE);
|
|
116
|
+
const licensedPlan = getLicensedPlan({
|
|
117
|
+
licenseStatus,
|
|
118
|
+
type: licenseLimitsData?.data?.type,
|
|
119
|
+
planPriceId
|
|
120
|
+
});
|
|
121
|
+
const { label, href } = PLAN_LINK[licensedPlan] ?? PLAN_LINK.Community;
|
|
122
|
+
return /*#__PURE__*/ jsxs(Flex, {
|
|
123
|
+
direction: "column",
|
|
124
|
+
alignItems: "stretch",
|
|
125
|
+
gap: 4,
|
|
126
|
+
hasRadius: true,
|
|
127
|
+
background: "neutral0",
|
|
128
|
+
shadow: "tableShadow",
|
|
129
|
+
paddingTop: 6,
|
|
130
|
+
paddingBottom: 6,
|
|
131
|
+
paddingRight: 7,
|
|
132
|
+
paddingLeft: 7,
|
|
133
|
+
children: [
|
|
134
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
135
|
+
justifyContent: "space-between",
|
|
136
|
+
alignItems: "center",
|
|
137
|
+
children: [
|
|
138
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
139
|
+
variant: "delta",
|
|
140
|
+
tag: "h3",
|
|
141
|
+
children: formatMessage({
|
|
142
|
+
id: 'Settings.application.plan.title',
|
|
143
|
+
defaultMessage: 'Plan'
|
|
144
|
+
})
|
|
145
|
+
}),
|
|
146
|
+
!isLicenseLoading && /*#__PURE__*/ jsx(LinkButton, {
|
|
147
|
+
variant: "secondary",
|
|
148
|
+
endIcon: /*#__PURE__*/ jsx(ExternalLink, {}),
|
|
149
|
+
href: href,
|
|
150
|
+
target: "_blank",
|
|
151
|
+
rel: "noopener noreferrer",
|
|
152
|
+
children: formatMessage(label)
|
|
153
|
+
})
|
|
154
|
+
]
|
|
155
|
+
}),
|
|
156
|
+
PlanCardBody && /*#__PURE__*/ jsx(PlanCardBody, {})
|
|
157
|
+
]
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export { PlanCard, PlanDetail };
|
|
162
|
+
//# sourceMappingURL=PlanCard.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanCard.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Grid, LinkButton, Typography } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\n\nimport {\n getLicensedPlan,\n type ProjectType,\n} from '../../../../../../../shared/utils/get-project-type';\nimport { useGetLicenseLimitsQuery } from '../../../../../services/admin';\n\n/* -------------------------------------------------------------------------------------------------\n * PlanDetail\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PlanDetailProps {\n label: MessageDescriptor;\n value: React.ReactNode;\n}\n\n/**\n * A single labelled value rendered inside the Plan card's `<dl>`. Shared between the CE fallback\n * body (current plan only) and the EE body (license details), so both stay visually consistent.\n */\nconst PlanDetail = ({ label, value }: PlanDetailProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage(label)}\n </Typography>\n <Typography tag=\"dd\">{value}</Typography>\n </Grid.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PlanCard\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * The billing link's label and destination depend on the current plan: Community links out to the\n * public pricing page, while Growth and Enterprise link to the billing portal.\n */\nconst PLAN_LINK: Record<ProjectType, { label: MessageDescriptor; href: string }> = {\n Community: {\n label: { id: 'Settings.application.plan.see-all-plans', defaultMessage: 'See all plans' },\n href: 'https://strapi.io/pricing-self-hosted',\n },\n Growth: {\n label: {\n id: 'Settings.application.plan.manage-subscription',\n defaultMessage: 'Manage subscription',\n },\n href: 'https://billing.strapi.io',\n },\n Enterprise: {\n label: {\n id: 'Settings.application.plan.view-subscription',\n defaultMessage: 'View subscription',\n },\n href: 'https://billing.strapi.io',\n },\n};\n\nconst PlanCardBodyCE = () => (\n <Grid.Root gap={5} tag=\"dl\">\n <PlanDetail\n label={{ id: 'Settings.application.plan.current', defaultMessage: 'current plan' }}\n value={window.strapi.projectType}\n />\n </Grid.Root>\n);\n\nconst PlanCard = () => {\n const { formatMessage } = useIntl();\n\n // The authenticated license-limit-information endpoint is EE-only, so a CE instance gets a\n // 404 here; treat that (or any other error/missing data) the same as \"no license\".\n // Until the first response, there is no telling which plan this is: painting the Community\n // fallback and then swapping it out would name the wrong plan for a moment.\n const { data: licenseLimitsData, isLoading: isLicenseLoading } = useGetLicenseLimitsQuery();\n const licenseStatus = licenseLimitsData?.data?.licenseStatus ?? 'none';\n const planPriceId = licenseLimitsData?.data?.planPriceId ?? undefined;\n\n // `useEnterprise`'s `enabled` option only ANDs with `isEE` - it can never force the EE body\n // on for a non-EE instance. An expired/unknown license still needs to show its retained\n // details even though `isEE` is (correctly) false, and an active one must show too when\n // /admin/project-type failed and left `isEE` false. So the license body is loaded manually\n // here instead, gated on this wider predicate.\n // Deliberately an allowlist rather than `!== 'none'`: if `licenseStatus` is ever missing\n // (an older bundle, a consumer building `window.strapi` itself), this must fall back to the\n // Community body instead of loading the license section.\n const shouldShowLicenseDetails =\n window.strapi.isEE ||\n licenseStatus === 'active' ||\n licenseStatus === 'expired' ||\n licenseStatus === 'unknown';\n const [LicenseBody, setLicenseBody] = React.useState<React.ComponentType | null>(null);\n\n React.useEffect(() => {\n if (!shouldShowLicenseDetails) {\n return undefined;\n }\n\n let active = true;\n\n import('../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo')\n .then((mod) => {\n if (active) {\n setLicenseBody(() => mod.LicenseInfoEE);\n }\n })\n .catch((err) => {\n // A chunk can stop loading mid-session (a redeploy replaced the bundle). The body stays\n // empty rather than falling back to the CE body, which would label this instance\n // Community.\n console.error(err);\n });\n\n return () => {\n active = false;\n };\n }, [shouldShowLicenseDetails]);\n\n // Render nothing for the body while the EE module is still loading (rather than the CE\n // body) so the card never briefly shows \"Community\" before swapping to the actual license\n // details. Once we know for certain there is no license to show, fall back to the CE body.\n const PlanCardBody = isLicenseLoading\n ? null\n : (LicenseBody ?? (shouldShowLicenseDetails ? null : PlanCardBodyCE));\n\n const licensedPlan = getLicensedPlan({\n licenseStatus,\n type: licenseLimitsData?.data?.type,\n planPriceId,\n });\n const { label, href } = PLAN_LINK[licensedPlan] ?? PLAN_LINK.Community;\n\n return (\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 <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({ id: 'Settings.application.plan.title', defaultMessage: 'Plan' })}\n </Typography>\n {!isLicenseLoading && (\n <LinkButton\n variant=\"secondary\"\n endIcon={<ExternalLink />}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage(label)}\n </LinkButton>\n )}\n </Flex>\n {PlanCardBody && <PlanCardBody />}\n </Flex>\n );\n};\n\nexport { PlanCard, PlanDetail };\nexport type { PlanDetailProps };\n"],"names":["PlanDetail","label","value","formatMessage","useIntl","_jsxs","Grid","Item","col","xs","direction","alignItems","_jsx","Typography","variant","textColor","tag","PLAN_LINK","Community","id","defaultMessage","href","Growth","Enterprise","PlanCardBodyCE","Root","gap","window","strapi","projectType","PlanCard","data","licenseLimitsData","isLoading","isLicenseLoading","useGetLicenseLimitsQuery","licenseStatus","planPriceId","undefined","shouldShowLicenseDetails","isEE","LicenseBody","setLicenseBody","React","useState","useEffect","active","then","mod","LicenseInfoEE","catch","err","console","error","PlanCardBody","licensedPlan","getLicensedPlan","type","Flex","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","justifyContent","LinkButton","endIcon","ExternalLink","target","rel"],"mappings":"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"}
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var designSystem = require('@strapi/design-system');
|
|
6
|
+
var icons = require('@strapi/icons');
|
|
7
|
+
var symbols = require('@strapi/icons/symbols');
|
|
8
|
+
var reactIntl = require('react-intl');
|
|
9
|
+
var styledComponents = require('styled-components');
|
|
10
|
+
var getProjectType = require('../../../../../../../shared/utils/get-project-type.js');
|
|
11
|
+
var hooks = require('../../../../../core/store/hooks.js');
|
|
12
|
+
var useRBAC = require('../../../../../hooks/useRBAC.js');
|
|
13
|
+
var admin = require('../../../../../services/admin.js');
|
|
14
|
+
var DiagnosticSnapshotModal = require('./DiagnosticSnapshotModal.js');
|
|
15
|
+
|
|
16
|
+
function _interopNamespace(e) {
|
|
17
|
+
if (e && e.__esModule) return e;
|
|
18
|
+
var n = Object.create(null);
|
|
19
|
+
if (e) {
|
|
20
|
+
Object.keys(e).forEach(function (k) {
|
|
21
|
+
if (k !== 'default') {
|
|
22
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
23
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () { return e[k]; }
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
n.default = e;
|
|
31
|
+
return Object.freeze(n);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Tints every tile icon with the same brand-neutral colour, including the GitHub and Discord
|
|
38
|
+
* marks. Those two are single-path glyphs carrying a hardcoded brand fill (`#24292F`, `#5865F2`),
|
|
39
|
+
* and a `fill` prop only reaches the `<svg>`, which the path's own attribute overrides — but a CSS
|
|
40
|
+
* declaration outranks that presentation attribute, so this wins for all icons uniformly.
|
|
41
|
+
*/ const TileIcon = styledComponents.styled.span`
|
|
42
|
+
display: inline-flex;
|
|
43
|
+
|
|
44
|
+
svg,
|
|
45
|
+
svg path {
|
|
46
|
+
fill: ${({ theme })=>theme.colors.primary600};
|
|
47
|
+
}
|
|
48
|
+
`;
|
|
49
|
+
/**
|
|
50
|
+
* The tiles share the card with the diagnostic-snapshot panel, so they only get about half the
|
|
51
|
+
* card's width. A viewport breakpoint therefore fires far too late — the tiles are already
|
|
52
|
+
* cramped while the window is still "large". Sizing off the tile panel itself instead means the
|
|
53
|
+
* 2 -> 1 column switch happens when *these* tiles run out of room, whatever the window is doing.
|
|
54
|
+
*/ const TileGrid = styledComponents.styled.div`
|
|
55
|
+
display: flex;
|
|
56
|
+
flex-wrap: wrap;
|
|
57
|
+
gap: ${({ theme })=>theme.spaces[4]};
|
|
58
|
+
|
|
59
|
+
/* The 50% basis caps the row at two tiles however wide the card gets, and min-width is what
|
|
60
|
+
forces the wrap to a single column. Both are measured against this element, so the switch is
|
|
61
|
+
driven by the space the tiles actually have rather than by the viewport. A container query
|
|
62
|
+
would say the same thing more directly, but jsdom cannot parse @container and it breaks the
|
|
63
|
+
admin suite's stylesheet parse (same reason FormLayout in content-manager avoids it). */
|
|
64
|
+
> * {
|
|
65
|
+
flex: 1 1 calc(50% - ${({ theme })=>theme.spaces[4]} / 2);
|
|
66
|
+
min-width: 16rem;
|
|
67
|
+
}
|
|
68
|
+
`;
|
|
69
|
+
const SupportLinkTile = ({ href, icon: Icon, title, description })=>{
|
|
70
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
71
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
|
|
72
|
+
tag: "a",
|
|
73
|
+
href: href,
|
|
74
|
+
target: "_blank",
|
|
75
|
+
rel: "noopener noreferrer",
|
|
76
|
+
// Without this the accessible name is the title and description concatenated, so the tile
|
|
77
|
+
// announces as e.g. "Documentation Guides and API reference" and collides with the
|
|
78
|
+
// same-named Settings nav link. Labelling it also tells screen readers it opens a new tab.
|
|
79
|
+
"aria-label": formatMessage({
|
|
80
|
+
id: 'Settings.application.support.tile-label',
|
|
81
|
+
defaultMessage: 'Open {title} in a new tab'
|
|
82
|
+
}, {
|
|
83
|
+
title: formatMessage(title)
|
|
84
|
+
}),
|
|
85
|
+
display: "block",
|
|
86
|
+
hasRadius: true,
|
|
87
|
+
borderColor: "neutral200",
|
|
88
|
+
padding: 4,
|
|
89
|
+
// The tile is the link, so the anchor's own underline and link colour must not bleed onto
|
|
90
|
+
// the text inside it; every colour below comes from a theme token so both themes match.
|
|
91
|
+
style: {
|
|
92
|
+
textDecoration: 'none'
|
|
93
|
+
},
|
|
94
|
+
children: [
|
|
95
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
96
|
+
justifyContent: "space-between",
|
|
97
|
+
alignItems: "center",
|
|
98
|
+
children: [
|
|
99
|
+
/*#__PURE__*/ jsxRuntime.jsx(TileIcon, {
|
|
100
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(Icon, {
|
|
101
|
+
width: "2rem",
|
|
102
|
+
height: "2rem",
|
|
103
|
+
"aria-hidden": true
|
|
104
|
+
})
|
|
105
|
+
}),
|
|
106
|
+
/*#__PURE__*/ jsxRuntime.jsx(icons.ExternalLink, {
|
|
107
|
+
fill: "neutral400",
|
|
108
|
+
"aria-hidden": true
|
|
109
|
+
})
|
|
110
|
+
]
|
|
111
|
+
}),
|
|
112
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
113
|
+
direction: "column",
|
|
114
|
+
alignItems: "start",
|
|
115
|
+
gap: 1,
|
|
116
|
+
paddingTop: 3,
|
|
117
|
+
children: [
|
|
118
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
119
|
+
fontWeight: "bold",
|
|
120
|
+
textColor: "neutral800",
|
|
121
|
+
children: formatMessage(title)
|
|
122
|
+
}),
|
|
123
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
124
|
+
variant: "pi",
|
|
125
|
+
textColor: "neutral600",
|
|
126
|
+
children: formatMessage(description)
|
|
127
|
+
})
|
|
128
|
+
]
|
|
129
|
+
})
|
|
130
|
+
]
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
/* -------------------------------------------------------------------------------------------------
|
|
134
|
+
* SupportCard
|
|
135
|
+
* -----------------------------------------------------------------------------------------------*/ const DOCUMENTATION_TILE = {
|
|
136
|
+
id: 'documentation',
|
|
137
|
+
href: 'https://docs.strapi.io',
|
|
138
|
+
icon: icons.Book,
|
|
139
|
+
title: {
|
|
140
|
+
id: 'Settings.application.support.documentation.title',
|
|
141
|
+
defaultMessage: 'Documentation'
|
|
142
|
+
},
|
|
143
|
+
description: {
|
|
144
|
+
id: 'Settings.application.support.documentation.description',
|
|
145
|
+
defaultMessage: 'Guides and API reference'
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
const GITHUB_ISSUES_TILE = {
|
|
149
|
+
id: 'github-issues',
|
|
150
|
+
href: 'https://github.com/strapi/strapi/issues',
|
|
151
|
+
icon: symbols.GitHub,
|
|
152
|
+
title: {
|
|
153
|
+
id: 'Settings.application.support.github-issues.title',
|
|
154
|
+
defaultMessage: 'GitHub issues'
|
|
155
|
+
},
|
|
156
|
+
description: {
|
|
157
|
+
id: 'Settings.application.support.github-issues.description',
|
|
158
|
+
defaultMessage: 'Report a bug'
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
const GITHUB_DISCUSSIONS_TILE = {
|
|
162
|
+
id: 'github-discussions',
|
|
163
|
+
href: 'https://github.com/strapi/strapi/discussions',
|
|
164
|
+
icon: symbols.GitHub,
|
|
165
|
+
title: {
|
|
166
|
+
id: 'Settings.application.support.github-discussions.title',
|
|
167
|
+
defaultMessage: 'GitHub discussions'
|
|
168
|
+
},
|
|
169
|
+
description: {
|
|
170
|
+
id: 'Settings.application.support.github-discussions.description',
|
|
171
|
+
defaultMessage: 'Ask a question or propose an idea'
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
const DISCORD_TILE = {
|
|
175
|
+
id: 'discord',
|
|
176
|
+
href: 'https://discord.strapi.io',
|
|
177
|
+
icon: symbols.Discord,
|
|
178
|
+
title: {
|
|
179
|
+
id: 'Settings.application.support.discord.title',
|
|
180
|
+
defaultMessage: 'Discord'
|
|
181
|
+
},
|
|
182
|
+
description: {
|
|
183
|
+
id: 'Settings.application.support.discord.description',
|
|
184
|
+
defaultMessage: 'Talk to the community in real time'
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const SUPPORT_PORTAL_TILE = {
|
|
188
|
+
id: 'support-portal',
|
|
189
|
+
href: 'https://support.strapi.io',
|
|
190
|
+
icon: icons.PaperPlane,
|
|
191
|
+
title: {
|
|
192
|
+
id: 'Settings.application.support.support-portal.title',
|
|
193
|
+
defaultMessage: 'Support portal'
|
|
194
|
+
},
|
|
195
|
+
description: {
|
|
196
|
+
id: 'Settings.application.support.support-portal.description',
|
|
197
|
+
defaultMessage: 'Open a ticket with the Strapi support'
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
const CE_TILES = [
|
|
201
|
+
DOCUMENTATION_TILE,
|
|
202
|
+
GITHUB_ISSUES_TILE,
|
|
203
|
+
GITHUB_DISCUSSIONS_TILE,
|
|
204
|
+
DISCORD_TILE
|
|
205
|
+
];
|
|
206
|
+
const EE_TILES = [
|
|
207
|
+
SUPPORT_PORTAL_TILE,
|
|
208
|
+
DOCUMENTATION_TILE,
|
|
209
|
+
GITHUB_ISSUES_TILE,
|
|
210
|
+
DISCORD_TILE
|
|
211
|
+
];
|
|
212
|
+
const SupportCard = ()=>{
|
|
213
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
214
|
+
const [isSnapshotModalOpen, setIsSnapshotModalOpen] = React__namespace.useState(false);
|
|
215
|
+
const debugDumpPermissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.settings?.['debug-dump']?.main);
|
|
216
|
+
const { allowedActions: { canRead } } = useRBAC.useRBAC(debugDumpPermissions);
|
|
217
|
+
// Keyed on the licensed plan rather than `isEE` so a customer whose license has lapsed keeps
|
|
218
|
+
// the Strapi support portal link, which is exactly what they need at that moment. This only
|
|
219
|
+
// ever swaps which support links are shown; it gates no feature.
|
|
220
|
+
// The authenticated license-limit-information endpoint is EE-only, so a CE instance gets a
|
|
221
|
+
// 404 here; treat that (or any other error/missing data) the same as "no license" (Community).
|
|
222
|
+
// Until the first response, there is no telling which plan this is: painting the Community
|
|
223
|
+
// fallback and then swapping it out would name the wrong plan for a moment.
|
|
224
|
+
const { data: licenseLimitsData, isLoading: isLicenseLoading } = admin.useGetLicenseLimitsQuery();
|
|
225
|
+
const licenseStatus = licenseLimitsData?.data?.licenseStatus ?? 'none';
|
|
226
|
+
const planPriceId = licenseLimitsData?.data?.planPriceId ?? undefined;
|
|
227
|
+
const isTrial = licenseLimitsData?.data?.isTrial ?? false;
|
|
228
|
+
const licensedPlan = getProjectType.getLicensedPlan({
|
|
229
|
+
licenseStatus,
|
|
230
|
+
type: licenseLimitsData?.data?.type,
|
|
231
|
+
planPriceId
|
|
232
|
+
});
|
|
233
|
+
// A trial resolves to a paid plan name, but a trial does not come with Strapi support, so
|
|
234
|
+
// it gets the community channels instead of the support portal.
|
|
235
|
+
const hasStrapiSupport = licensedPlan !== 'Community' && !isTrial;
|
|
236
|
+
const tiles = hasStrapiSupport ? EE_TILES : CE_TILES;
|
|
237
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
238
|
+
children: [
|
|
239
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
240
|
+
direction: "column",
|
|
241
|
+
alignItems: "stretch",
|
|
242
|
+
gap: 4,
|
|
243
|
+
hasRadius: true,
|
|
244
|
+
background: "neutral0",
|
|
245
|
+
shadow: "tableShadow",
|
|
246
|
+
paddingTop: 6,
|
|
247
|
+
paddingBottom: 6,
|
|
248
|
+
paddingRight: 7,
|
|
249
|
+
paddingLeft: 7,
|
|
250
|
+
children: [
|
|
251
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
252
|
+
direction: "column",
|
|
253
|
+
alignItems: "start",
|
|
254
|
+
gap: 1,
|
|
255
|
+
children: [
|
|
256
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
257
|
+
variant: "delta",
|
|
258
|
+
tag: "h3",
|
|
259
|
+
children: formatMessage({
|
|
260
|
+
id: 'Settings.application.support.title',
|
|
261
|
+
defaultMessage: 'Support'
|
|
262
|
+
})
|
|
263
|
+
}),
|
|
264
|
+
!isLicenseLoading && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
265
|
+
variant: "pi",
|
|
266
|
+
textColor: "neutral600",
|
|
267
|
+
children: formatMessage(hasStrapiSupport ? {
|
|
268
|
+
id: 'Settings.application.support.subtitle.enterprise',
|
|
269
|
+
defaultMessage: 'Contact support, report a bug, or contribute to the Strapi community.'
|
|
270
|
+
} : {
|
|
271
|
+
id: 'Settings.application.support.subtitle.community',
|
|
272
|
+
defaultMessage: 'Ask a question, report a bug, or contribute to the Strapi community.'
|
|
273
|
+
})
|
|
274
|
+
})
|
|
275
|
+
]
|
|
276
|
+
}),
|
|
277
|
+
!isLicenseLoading && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
278
|
+
alignItems: "stretch",
|
|
279
|
+
gap: 7,
|
|
280
|
+
children: [
|
|
281
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
282
|
+
flex: "1 1 0%",
|
|
283
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(TileGrid, {
|
|
284
|
+
children: tiles.map((tile)=>/*#__PURE__*/ jsxRuntime.jsx(SupportLinkTile, {
|
|
285
|
+
...tile
|
|
286
|
+
}, tile.id))
|
|
287
|
+
})
|
|
288
|
+
}),
|
|
289
|
+
canRead && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
290
|
+
children: [
|
|
291
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
292
|
+
background: "neutral150",
|
|
293
|
+
width: "0.1rem"
|
|
294
|
+
}),
|
|
295
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
296
|
+
direction: "column",
|
|
297
|
+
alignItems: "start",
|
|
298
|
+
gap: 3,
|
|
299
|
+
flex: "1 1 0%",
|
|
300
|
+
children: [
|
|
301
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
302
|
+
variant: "sigma",
|
|
303
|
+
textColor: "neutral600",
|
|
304
|
+
children: formatMessage({
|
|
305
|
+
id: 'Settings.application.support.diagnostic-snapshot.label',
|
|
306
|
+
defaultMessage: 'diagnostic snapshot'
|
|
307
|
+
})
|
|
308
|
+
}),
|
|
309
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
310
|
+
children: formatMessage(hasStrapiSupport ? {
|
|
311
|
+
id: 'Settings.application.support.diagnostic-snapshot.description.enterprise',
|
|
312
|
+
defaultMessage: 'Reporting a bug? A diagnostic snapshot describes how this project is built so it can be reproduced.'
|
|
313
|
+
} : {
|
|
314
|
+
id: 'Settings.application.support.diagnostic-snapshot.description.community',
|
|
315
|
+
defaultMessage: "Reporting a bug? Generate a snapshot of your app's structure so the issue can be reproduced."
|
|
316
|
+
})
|
|
317
|
+
}),
|
|
318
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
319
|
+
onClick: ()=>setIsSnapshotModalOpen(true),
|
|
320
|
+
children: formatMessage({
|
|
321
|
+
id: 'Settings.application.support.diagnostic-snapshot.generate',
|
|
322
|
+
defaultMessage: 'Generate snapshot'
|
|
323
|
+
})
|
|
324
|
+
})
|
|
325
|
+
]
|
|
326
|
+
})
|
|
327
|
+
]
|
|
328
|
+
})
|
|
329
|
+
]
|
|
330
|
+
})
|
|
331
|
+
]
|
|
332
|
+
}),
|
|
333
|
+
/*#__PURE__*/ jsxRuntime.jsx(DiagnosticSnapshotModal.DiagnosticSnapshotModal, {
|
|
334
|
+
isOpen: isSnapshotModalOpen,
|
|
335
|
+
onClose: ()=>setIsSnapshotModalOpen(false)
|
|
336
|
+
})
|
|
337
|
+
]
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
exports.SupportCard = SupportCard;
|
|
342
|
+
//# sourceMappingURL=SupportCard.js.map
|
package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupportCard.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\nimport { Book, ExternalLink, PaperPlane } from '@strapi/icons';\nimport { Discord, GitHub } from '@strapi/icons/symbols';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getLicensedPlan } from '../../../../../../../shared/utils/get-project-type';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport { useGetLicenseLimitsQuery } from '../../../../../services/admin';\n\nimport { DiagnosticSnapshotModal } from './DiagnosticSnapshotModal';\n\n/* -------------------------------------------------------------------------------------------------\n * SupportLinkTile\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SupportLinkTileConfig {\n id: string;\n href: string;\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n title: MessageDescriptor;\n description: MessageDescriptor;\n}\n\n/**\n * Tints every tile icon with the same brand-neutral colour, including the GitHub and Discord\n * marks. Those two are single-path glyphs carrying a hardcoded brand fill (`#24292F`, `#5865F2`),\n * and a `fill` prop only reaches the `<svg>`, which the path's own attribute overrides — but a CSS\n * declaration outranks that presentation attribute, so this wins for all icons uniformly.\n */\nconst TileIcon = styled.span`\n display: inline-flex;\n\n svg,\n svg path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\n/**\n * The tiles share the card with the diagnostic-snapshot panel, so they only get about half the\n * card's width. A viewport breakpoint therefore fires far too late — the tiles are already\n * cramped while the window is still \"large\". Sizing off the tile panel itself instead means the\n * 2 -> 1 column switch happens when *these* tiles run out of room, whatever the window is doing.\n */\nconst TileGrid = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme.spaces[4]};\n\n /* The 50% basis caps the row at two tiles however wide the card gets, and min-width is what\n forces the wrap to a single column. Both are measured against this element, so the switch is\n driven by the space the tiles actually have rather than by the viewport. A container query\n would say the same thing more directly, but jsdom cannot parse @container and it breaks the\n admin suite's stylesheet parse (same reason FormLayout in content-manager avoids it). */\n > * {\n flex: 1 1 calc(50% - ${({ theme }) => theme.spaces[4]} / 2);\n min-width: 16rem;\n }\n`;\n\nconst SupportLinkTile = ({ href, icon: Icon, title, description }: SupportLinkTileConfig) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n tag=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n // Without this the accessible name is the title and description concatenated, so the tile\n // announces as e.g. \"Documentation Guides and API reference\" and collides with the\n // same-named Settings nav link. Labelling it also tells screen readers it opens a new tab.\n aria-label={formatMessage(\n {\n id: 'Settings.application.support.tile-label',\n defaultMessage: 'Open {title} in a new tab',\n },\n { title: formatMessage(title) }\n )}\n display=\"block\"\n hasRadius\n borderColor=\"neutral200\"\n padding={4}\n // The tile is the link, so the anchor's own underline and link colour must not bleed onto\n // the text inside it; every colour below comes from a theme token so both themes match.\n style={{ textDecoration: 'none' }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <TileIcon>\n <Icon width=\"2rem\" height=\"2rem\" aria-hidden />\n </TileIcon>\n <ExternalLink fill=\"neutral400\" aria-hidden />\n </Flex>\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingTop={3}>\n <Typography fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage(title)}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(description)}\n </Typography>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SupportCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst DOCUMENTATION_TILE: SupportLinkTileConfig = {\n id: 'documentation',\n href: 'https://docs.strapi.io',\n icon: Book,\n title: {\n id: 'Settings.application.support.documentation.title',\n defaultMessage: 'Documentation',\n },\n description: {\n id: 'Settings.application.support.documentation.description',\n defaultMessage: 'Guides and API reference',\n },\n};\n\nconst GITHUB_ISSUES_TILE: SupportLinkTileConfig = {\n id: 'github-issues',\n href: 'https://github.com/strapi/strapi/issues',\n icon: GitHub,\n title: {\n id: 'Settings.application.support.github-issues.title',\n defaultMessage: 'GitHub issues',\n },\n description: {\n id: 'Settings.application.support.github-issues.description',\n defaultMessage: 'Report a bug',\n },\n};\n\nconst GITHUB_DISCUSSIONS_TILE: SupportLinkTileConfig = {\n id: 'github-discussions',\n href: 'https://github.com/strapi/strapi/discussions',\n icon: GitHub,\n title: {\n id: 'Settings.application.support.github-discussions.title',\n defaultMessage: 'GitHub discussions',\n },\n description: {\n id: 'Settings.application.support.github-discussions.description',\n defaultMessage: 'Ask a question or propose an idea',\n },\n};\n\nconst DISCORD_TILE: SupportLinkTileConfig = {\n id: 'discord',\n href: 'https://discord.strapi.io',\n icon: Discord,\n title: { id: 'Settings.application.support.discord.title', defaultMessage: 'Discord' },\n description: {\n id: 'Settings.application.support.discord.description',\n defaultMessage: 'Talk to the community in real time',\n },\n};\n\nconst SUPPORT_PORTAL_TILE: SupportLinkTileConfig = {\n id: 'support-portal',\n href: 'https://support.strapi.io',\n icon: PaperPlane,\n title: {\n id: 'Settings.application.support.support-portal.title',\n defaultMessage: 'Support portal',\n },\n description: {\n id: 'Settings.application.support.support-portal.description',\n defaultMessage: 'Open a ticket with the Strapi support',\n },\n};\n\nconst CE_TILES: SupportLinkTileConfig[] = [\n DOCUMENTATION_TILE,\n GITHUB_ISSUES_TILE,\n GITHUB_DISCUSSIONS_TILE,\n DISCORD_TILE,\n];\n\nconst EE_TILES: SupportLinkTileConfig[] = [\n SUPPORT_PORTAL_TILE,\n DOCUMENTATION_TILE,\n GITHUB_ISSUES_TILE,\n DISCORD_TILE,\n];\n\nconst SupportCard = () => {\n const { formatMessage } = useIntl();\n const [isSnapshotModalOpen, setIsSnapshotModalOpen] = React.useState(false);\n\n const debugDumpPermissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['debug-dump']?.main\n );\n const {\n allowedActions: { canRead },\n } = useRBAC(debugDumpPermissions);\n\n // Keyed on the licensed plan rather than `isEE` so a customer whose license has lapsed keeps\n // the Strapi support portal link, which is exactly what they need at that moment. This only\n // ever swaps which support links are shown; it gates no feature.\n // The authenticated license-limit-information endpoint is EE-only, so a CE instance gets a\n // 404 here; treat that (or any other error/missing data) the same as \"no license\" (Community).\n // Until the first response, there is no telling which plan this is: painting the Community\n // fallback and then swapping it out would name the wrong plan for a moment.\n const { data: licenseLimitsData, isLoading: isLicenseLoading } = useGetLicenseLimitsQuery();\n const licenseStatus = licenseLimitsData?.data?.licenseStatus ?? 'none';\n const planPriceId = licenseLimitsData?.data?.planPriceId ?? undefined;\n const isTrial = licenseLimitsData?.data?.isTrial ?? false;\n const licensedPlan = getLicensedPlan({\n licenseStatus,\n type: licenseLimitsData?.data?.type,\n planPriceId,\n });\n // A trial resolves to a paid plan name, but a trial does not come with Strapi support, so\n // it gets the community channels instead of the support portal.\n const hasStrapiSupport = licensedPlan !== 'Community' && !isTrial;\n const tiles = hasStrapiSupport ? EE_TILES : CE_TILES;\n\n return (\n <>\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 <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({ id: 'Settings.application.support.title', defaultMessage: 'Support' })}\n </Typography>\n {!isLicenseLoading && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n hasStrapiSupport\n ? {\n id: 'Settings.application.support.subtitle.enterprise',\n defaultMessage:\n 'Contact support, report a bug, or contribute to the Strapi community.',\n }\n : {\n id: 'Settings.application.support.subtitle.community',\n defaultMessage:\n 'Ask a question, report a bug, or contribute to the Strapi community.',\n }\n )}\n </Typography>\n )}\n </Flex>\n {!isLicenseLoading && (\n <Flex alignItems=\"stretch\" gap={7}>\n <Box flex=\"1 1 0%\">\n <TileGrid>\n {tiles.map((tile) => (\n <SupportLinkTile key={tile.id} {...tile} />\n ))}\n </TileGrid>\n </Box>\n {canRead && (\n <>\n <Box background=\"neutral150\" width=\"0.1rem\" />\n <Flex direction=\"column\" alignItems=\"start\" gap={3} flex=\"1 1 0%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.support.diagnostic-snapshot.label',\n defaultMessage: 'diagnostic snapshot',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n hasStrapiSupport\n ? {\n id: 'Settings.application.support.diagnostic-snapshot.description.enterprise',\n defaultMessage:\n 'Reporting a bug? A diagnostic snapshot describes how this project is built so it can be reproduced.',\n }\n : {\n id: 'Settings.application.support.diagnostic-snapshot.description.community',\n defaultMessage:\n \"Reporting a bug? Generate a snapshot of your app's structure so the issue can be reproduced.\",\n }\n )}\n </Typography>\n <Button onClick={() => setIsSnapshotModalOpen(true)}>\n {formatMessage({\n id: 'Settings.application.support.diagnostic-snapshot.generate',\n defaultMessage: 'Generate snapshot',\n })}\n </Button>\n </Flex>\n </>\n )}\n </Flex>\n )}\n </Flex>\n <DiagnosticSnapshotModal\n isOpen={isSnapshotModalOpen}\n onClose={() => setIsSnapshotModalOpen(false)}\n />\n </>\n );\n};\n\nexport { SupportCard };\n"],"names":["TileIcon","styled","span","theme","colors","primary600","TileGrid","div","spaces","SupportLinkTile","href","icon","Icon","title","description","formatMessage","useIntl","_jsxs","Box","tag","target","rel","aria-label","id","defaultMessage","display","hasRadius","borderColor","padding","style","textDecoration","Flex","justifyContent","alignItems","_jsx","width","height","aria-hidden","ExternalLink","fill","direction","gap","paddingTop","Typography","fontWeight","textColor","variant","DOCUMENTATION_TILE","Book","GITHUB_ISSUES_TILE","GitHub","GITHUB_DISCUSSIONS_TILE","DISCORD_TILE","Discord","SUPPORT_PORTAL_TILE","PaperPlane","CE_TILES","EE_TILES","SupportCard","isSnapshotModalOpen","setIsSnapshotModalOpen","React","useState","debugDumpPermissions","useTypedSelector","state","admin_app","permissions","settings","main","allowedActions","canRead","useRBAC","data","licenseLimitsData","isLoading","isLicenseLoading","useGetLicenseLimitsQuery","licenseStatus","planPriceId","undefined","isTrial","licensedPlan","getLicensedPlan","type","hasStrapiSupport","tiles","_Fragment","background","shadow","paddingBottom","paddingRight","paddingLeft","flex","map","tile","Button","onClick","DiagnosticSnapshotModal","isOpen","onClose"],"mappings":"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"}
|