@strapi/admin 5.49.0 → 5.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/components/ConfirmDialog.js +2 -2
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/ContentBox.js +3 -3
- package/dist/admin/admin/src/components/ContentBox.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js +8 -8
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs +8 -8
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/ErrorElement.js +100 -5
- package/dist/admin/admin/src/components/ErrorElement.js.map +1 -1
- package/dist/admin/admin/src/components/ErrorElement.mjs +99 -4
- package/dist/admin/admin/src/components/ErrorElement.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +41 -27
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +41 -27
- 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/Date.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Email.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Email.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +4 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +4 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Json.js +2 -1
- package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Json.mjs +2 -1
- package/dist/admin/admin/src/components/FormInputs/Json.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Password.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Password.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.js +18 -26
- package/dist/admin/admin/src/components/FormInputs/Renderer.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.mjs +20 -28
- package/dist/admin/admin/src/components/FormInputs/Renderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/String.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/String.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Textarea.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Textarea.mjs.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.js +2 -2
- package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
- package/dist/admin/admin/src/components/GradientBadge.js +3 -3
- package/dist/admin/admin/src/components/GradientBadge.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.js +8 -8
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +4 -4
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.js +2 -2
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ActionLayout.js +2 -2
- package/dist/admin/admin/src/components/Layouts/ActionLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/GridLayout.js +2 -2
- package/dist/admin/admin/src/components/Layouts/GridLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.js +4 -4
- package/dist/admin/admin/src/components/Layouts/Layout.js.map +1 -1
- package/dist/admin/admin/src/components/LazyOutlet.js +57 -0
- package/dist/admin/admin/src/components/LazyOutlet.js.map +1 -0
- package/dist/admin/admin/src/components/LazyOutlet.mjs +35 -0
- package/dist/admin/admin/src/components/LazyOutlet.mjs.map +1 -0
- package/dist/admin/admin/src/components/LeftMenu.js +3 -3
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNav.js +2 -2
- package/dist/admin/admin/src/components/MainNav/MainNav.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +4 -4
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavBrand.js +2 -2
- package/dist/admin/admin/src/components/MainNav/NavBrand.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js +3 -3
- package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.js +8 -8
- package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.js +17 -7
- package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs +10 -0
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/TrialCountdown.js +3 -3
- package/dist/admin/admin/src/components/MainNav/TrialCountdown.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +2 -2
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +3 -2
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs +3 -2
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.js +6 -6
- package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +11 -9
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +4 -2
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +9 -5
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +6 -2
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/Theme.js +2 -2
- package/dist/admin/admin/src/components/Theme.js.map +1 -1
- package/dist/admin/admin/src/components/UnauthenticatedLogo.js +2 -2
- package/dist/admin/admin/src/components/UnauthenticatedLogo.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js +3 -3
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js +4 -7
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +5 -5
- package/dist/admin/admin/src/components/Widgets.js.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/core/apis/Widgets.js +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js +19 -17
- package/dist/admin/admin/src/core/apis/router.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.mjs +19 -17
- package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
- package/dist/admin/admin/src/core/store/configure.js.map +1 -1
- package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
- package/dist/admin/admin/src/core/utils/createHook.js.map +1 -1
- package/dist/admin/admin/src/core/utils/createHook.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +3 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +3 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/features/Widgets.js.map +1 -1
- package/dist/admin/admin/src/features/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useMediaQuery.js +4 -4
- package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.js +5 -3
- package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.mjs +5 -3
- package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.js +0 -1
- package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.mjs +0 -1
- package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +5 -3
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +5 -3
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js +3 -3
- package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/AuthPage.js +3 -2
- package/dist/admin/admin/src/pages/Auth/AuthPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/AuthPage.mjs +3 -2
- package/dist/admin/admin/src/pages/Auth/AuthPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +17 -9
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +15 -7
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +2 -2
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +3 -6
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +4 -8
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +4 -8
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/SessionsPage.js +318 -0
- package/dist/admin/admin/src/pages/SessionsPage.js.map +1 -0
- package/dist/admin/admin/src/pages/SessionsPage.mjs +296 -0
- package/dist/admin/admin/src/pages/SessionsPage.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/Layout.js +4 -1
- package/dist/admin/admin/src/pages/Settings/Layout.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/Layout.mjs +5 -2
- package/dist/admin/admin/src/pages/Settings/Layout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +2 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +2 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +2 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +2 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +2 -2
- 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/CollapsableContentType.js +4 -4
- 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/reducer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -2
- 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 +1 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +7 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +7 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +7 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +44 -10
- 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 +34 -0
- 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/ConditionsButton.js +3 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -5
- 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/HiddenAction.js +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/HiddenAction.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +38 -2
- 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 +38 -2
- 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 +3 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js +18 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs +18 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.js +59 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.mjs +52 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.mjs.map +1 -0
- 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/SelectRoles.js +3 -3
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +2 -2
- 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/HeadersInput.js +2 -2
- 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.map +1 -1
- package/dist/admin/admin/src/router.js +9 -0
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs +9 -0
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/services/auth.js +43 -2
- package/dist/admin/admin/src/services/auth.js.map +1 -1
- package/dist/admin/admin/src/services/auth.mjs +41 -3
- package/dist/admin/admin/src/services/auth.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +22 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +22 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ja.json.js +726 -237
- package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ja.json.mjs +723 -238
- package/dist/admin/admin/src/translations/ja.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.js +1 -0
- package/dist/admin/admin/src/translations/languageNativeNames.js.map +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.mjs +1 -0
- package/dist/admin/admin/src/translations/languageNativeNames.mjs.map +1 -1
- package/dist/admin/admin/src/translations/pl.json.js +22 -0
- package/dist/admin/admin/src/translations/pl.json.js.map +1 -1
- package/dist/admin/admin/src/translations/pl.json.mjs +22 -0
- package/dist/admin/admin/src/translations/pl.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/arrays.js.map +1 -1
- package/dist/admin/admin/src/utils/arrays.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/objects.js +43 -11
- package/dist/admin/admin/src/utils/objects.js.map +1 -1
- package/dist/admin/admin/src/utils/objects.mjs +43 -11
- package/dist/admin/admin/src/utils/objects.mjs.map +1 -1
- package/dist/admin/admin/src/utils/once.js.map +1 -1
- package/dist/admin/admin/src/utils/once.mjs.map +1 -1
- package/dist/admin/admin/src/utils/retryDynamicImport.js +85 -0
- package/dist/admin/admin/src/utils/retryDynamicImport.js.map +1 -0
- package/dist/admin/admin/src/utils/retryDynamicImport.mjs +80 -0
- package/dist/admin/admin/src/utils/retryDynamicImport.mjs.map +1 -0
- package/dist/admin/admin/src/utils/rulesEngine.js +2 -1
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.mjs +2 -1
- package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
- package/dist/admin/admin/src/utils/shims.js.map +1 -1
- package/dist/admin/admin/src/utils/shims.mjs.map +1 -1
- package/dist/admin/admin/src/utils/widgetVisibility.js +16 -1
- package/dist/admin/admin/src/utils/widgetVisibility.js.map +1 -1
- package/dist/admin/admin/src/utils/widgetVisibility.mjs +14 -2
- package/dist/admin/admin/src/utils/widgetVisibility.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +25 -0
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +25 -0
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +2 -2
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +2 -2
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs +2 -2
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js +2 -2
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js +2 -2
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js +3 -3
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +3 -3
- 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/AdminSeatInfo.js.map +1 -1
- 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/AuditLogs/components/ComboboxFilter.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +2 -2
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/StrapiApp.d.ts +7 -7
- package/dist/admin/src/components/DescriptionComponentRenderer.d.ts +2 -1
- package/dist/admin/src/components/Form.d.ts +14 -12
- package/dist/admin/src/components/FormInputs/Boolean.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/Checkbox.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/DateTime.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/Email.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/Enumeration.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/Number.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/Password.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/Renderer.d.ts +1 -2
- package/dist/admin/src/components/FormInputs/String.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/Textarea.d.ts +0 -1
- package/dist/admin/src/components/FormInputs/Time.d.ts +0 -1
- package/dist/admin/src/components/GuidedTour/GuidedTourProvider.d.ts +0 -1
- package/dist/admin/src/components/GuidedTour/Steps/Step.d.ts +1 -1
- package/dist/admin/src/components/LazyOutlet.d.ts +20 -0
- package/dist/admin/src/components/MainNav/MainNav.d.ts +1 -1
- package/dist/admin/src/components/MainNav/NavUser.d.ts +0 -1
- package/dist/admin/src/components/SubNav.d.ts +6 -7
- package/dist/admin/src/components/Table.d.ts +3 -2
- package/dist/admin/src/core/apis/Plugin.d.ts +2 -2
- package/dist/admin/src/core/apis/Widgets.d.ts +0 -1
- package/dist/admin/src/core/apis/router.d.ts +1 -1
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/utils/createHook.d.ts +7 -7
- package/dist/admin/src/features/AppInfo.d.ts +1 -2
- package/dist/admin/src/features/StrapiApp.d.ts +1 -2
- package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +1 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +3 -3
- package/dist/admin/src/hooks/useFetchClient.d.ts +1 -1
- package/dist/admin/src/hooks/useMenu.d.ts +1 -1
- package/dist/admin/src/hooks/usePersistentState.d.ts +0 -1
- package/dist/admin/src/hooks/useQueryParams.d.ts +3 -2
- package/dist/admin/src/hooks/useThrottledCallback.d.ts +1 -2
- package/dist/admin/src/index.d.ts +1 -0
- package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +2 -2
- package/dist/admin/src/pages/SessionsPage.d.ts +2 -0
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +2 -3
- package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.d.ts +2 -2
- package/dist/admin/src/pages/Settings/pages/Roles/components/HiddenAction.d.ts +0 -1
- package/dist/admin/src/pages/Settings/pages/Roles/components/Permissions.d.ts +2 -0
- package/dist/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Roles/utils/forms.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Roles/utils/localePermissionValidation.d.ts +5 -0
- package/dist/admin/src/pages/Settings/pages/Roles/utils/permissions.d.ts +3 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +8 -8
- package/dist/admin/src/reducer.d.ts +1 -1
- package/dist/admin/src/services/admin.d.ts +8 -8
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/apiTokens.d.ts +3 -3
- package/dist/admin/src/services/auth.d.ts +29 -27
- package/dist/admin/src/services/contentApi.d.ts +2 -2
- package/dist/admin/src/services/contentManager.d.ts +1 -1
- package/dist/admin/src/services/homepage.d.ts +3 -3
- package/dist/admin/src/services/transferTokens.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +15 -15
- package/dist/admin/src/services/webhooks.d.ts +4 -4
- package/dist/admin/src/translations/languageNativeNames.d.ts +1 -0
- package/dist/admin/src/utils/arrays.d.ts +1 -1
- package/dist/admin/src/utils/baseQuery.d.ts +1 -1
- package/dist/admin/src/utils/getFetchClient.d.ts +7 -7
- package/dist/admin/src/utils/locales.d.ts +0 -1
- package/dist/admin/src/utils/objects.d.ts +6 -4
- package/dist/admin/src/utils/once.d.ts +1 -1
- package/dist/admin/src/utils/retryDynamicImport.d.ts +19 -0
- package/dist/admin/src/utils/shims.d.ts +1 -1
- package/dist/admin/src/utils/widgetVisibility.d.ts +11 -0
- package/dist/admin/tests/store.d.ts +4 -4
- package/dist/admin/tests/utils.d.ts +5 -5
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.d.ts +1 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/tableHeaders.d.ts +2 -1
- package/dist/ee/admin/src/services/ai.d.ts +5 -5
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +1 -1
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +3 -3
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +2 -2
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/bootstrap.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +30 -31
- package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/index.d.ts +1 -2
- package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/user.d.ts +1 -1
- package/dist/ee/server/src/destroy.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +2 -3
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/register.d.ts.map +1 -1
- package/dist/ee/server/src/routes/utils.d.ts.map +1 -1
- package/dist/ee/server/src/services/auth.d.ts.map +1 -1
- package/dist/ee/server/src/services/index.d.ts +1 -1
- package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
- package/dist/ee/server/src/services/passport/sso.d.ts.map +1 -1
- package/dist/ee/server/src/services/persist-tables.d.ts +1 -1
- package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
- package/dist/ee/server/src/services/role.d.ts.map +1 -1
- package/dist/ee/server/src/services/user.d.ts.map +1 -1
- package/dist/ee/server/src/utils/index.d.ts.map +1 -1
- package/dist/ee/server/src/utils/sso-lock.d.ts.map +1 -1
- package/dist/ee/server/src/validation/authentication.d.ts +2 -2
- package/dist/ee/server/src/validation/role.d.ts +6 -6
- package/dist/ee/server/src/validation/role.d.ts.map +1 -1
- package/dist/ee/server/src/validation/user.d.ts.map +1 -1
- package/dist/server/server/src/content-types/session.js +6 -0
- package/dist/server/server/src/content-types/session.js.map +1 -1
- package/dist/server/server/src/content-types/session.mjs +6 -0
- package/dist/server/server/src/content-types/session.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/authenticated-session.js +61 -0
- package/dist/server/server/src/controllers/authenticated-session.js.map +1 -0
- package/dist/server/server/src/controllers/authenticated-session.mjs +59 -0
- package/dist/server/server/src/controllers/authenticated-session.mjs.map +1 -0
- package/dist/server/server/src/controllers/authentication.js +11 -4
- package/dist/server/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/server/src/controllers/authentication.mjs +12 -5
- package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/server/src/controllers/index.js +2 -0
- package/dist/server/server/src/controllers/index.js.map +1 -1
- package/dist/server/server/src/controllers/index.mjs +2 -0
- package/dist/server/server/src/controllers/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/role.js +2 -4
- package/dist/server/server/src/controllers/role.js.map +1 -1
- package/dist/server/server/src/controllers/role.mjs +2 -4
- package/dist/server/server/src/controllers/role.mjs.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
- package/dist/server/server/src/routes/users.js +12 -26
- package/dist/server/server/src/routes/users.js.map +1 -1
- package/dist/server/server/src/routes/users.mjs +12 -26
- package/dist/server/server/src/routes/users.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +0 -2
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +0 -2
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.js +9 -2
- 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 +9 -2
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +7 -2
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +7 -2
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/strategies/admin.js +4 -0
- package/dist/server/server/src/strategies/admin.js.map +1 -1
- package/dist/server/server/src/strategies/admin.mjs +4 -0
- package/dist/server/server/src/strategies/admin.mjs.map +1 -1
- package/dist/server/server/src/validation/common-validators.js +19 -11
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs +19 -11
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/server/src/validation/permission.js +1 -1
- package/dist/server/server/src/validation/permission.js.map +1 -1
- package/dist/server/server/src/validation/permission.mjs +1 -1
- package/dist/server/server/src/validation/permission.mjs.map +1 -1
- package/dist/server/server/src/validation/role.js +2 -2
- package/dist/server/server/src/validation/role.js.map +1 -1
- package/dist/server/server/src/validation/role.mjs +2 -2
- package/dist/server/server/src/validation/role.mjs.map +1 -1
- package/dist/server/src/ai/controllers/ai.d.ts +3 -3
- package/dist/server/src/ai/services/ai.d.ts.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/config/admin-conditions.d.ts +2 -2
- package/dist/server/src/config/admin-conditions.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +6 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/content-types/session.d.ts +6 -0
- package/dist/server/src/content-types/session.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-token.d.ts +5 -5
- package/dist/server/src/controllers/api-token.d.ts +1 -1
- package/dist/server/src/controllers/authenticated-session.d.ts +8 -0
- package/dist/server/src/controllers/authenticated-session.d.ts.map +1 -0
- package/dist/server/src/controllers/authenticated-user.d.ts +1 -1
- package/dist/server/src/controllers/authentication.d.ts +4 -4
- package/dist/server/src/controllers/authentication.d.ts.map +1 -1
- package/dist/server/src/controllers/formatters/conditions.d.ts +0 -1
- package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
- package/dist/server/src/controllers/formatters/format-actions-by-sections.d.ts.map +1 -1
- package/dist/server/src/controllers/homepage.d.ts +2 -2
- package/dist/server/src/controllers/homepage.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +33 -43
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/role.d.ts +4 -4
- package/dist/server/src/controllers/transfer/runner.d.ts +4 -4
- package/dist/server/src/controllers/transfer/runner.d.ts.map +1 -1
- package/dist/server/src/controllers/transfer/token.d.ts +1 -1
- package/dist/server/src/controllers/user.d.ts +2 -2
- package/dist/server/src/controllers/webhooks.d.ts +4 -4
- package/dist/server/src/domain/action/index.d.ts +4 -65
- package/dist/server/src/domain/action/index.d.ts.map +1 -1
- package/dist/server/src/domain/action/provider.d.ts +30 -3
- package/dist/server/src/domain/action/provider.d.ts.map +1 -1
- package/dist/server/src/domain/condition/index.d.ts.map +1 -1
- package/dist/server/src/domain/condition/provider.d.ts +19 -2
- package/dist/server/src/domain/condition/provider.d.ts.map +1 -1
- package/dist/server/src/domain/permission/index.d.ts +0 -1
- package/dist/server/src/domain/permission/index.d.ts.map +1 -1
- package/dist/server/src/domain/user.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +51 -63
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/data-transfer.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts +0 -1
- package/dist/server/src/middlewares/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
- package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/policies/isAuthenticatedAdmin.d.ts.map +1 -1
- package/dist/server/src/policies/isTelemetryEnabled.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +0 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
- package/dist/server/src/routes/transfer.d.ts +0 -1
- package/dist/server/src/routes/transfer.d.ts.map +1 -1
- package/dist/server/src/routes/users.d.ts.map +1 -1
- package/dist/server/src/services/action.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts +5 -6
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/auth.d.ts.map +1 -1
- package/dist/server/src/services/condition.d.ts.map +1 -1
- package/dist/server/src/services/content-type.d.ts.map +1 -1
- package/dist/server/src/services/encryption.d.ts.map +1 -1
- package/dist/server/src/services/homepage.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +12 -21
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
- package/dist/server/src/services/passport.d.ts +0 -1
- package/dist/server/src/services/passport.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts +1 -2
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/index.d.ts +5 -5
- package/dist/server/src/services/permission/permissions-manager/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/query-builders.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts +3 -3
- package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
- package/dist/server/src/services/permission/queries.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/builder.d.ts +4 -4
- package/dist/server/src/services/permission/sections-builder/builder.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/index.d.ts +4 -4
- package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/utils.d.ts +0 -1
- package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts +13 -38
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/dist/server/src/services/project-settings.d.ts +2 -4
- package/dist/server/src/services/project-settings.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts +7 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/services/token.d.ts +1 -1
- package/dist/server/src/services/token.d.ts.map +1 -1
- package/dist/server/src/services/transfer/token.d.ts +11 -11
- package/dist/server/src/services/transfer/token.d.ts.map +1 -1
- package/dist/server/src/services/user.d.ts +3 -3
- package/dist/server/src/services/user.d.ts.map +1 -1
- package/dist/server/src/strategies/admin-token.d.ts +4 -4
- package/dist/server/src/strategies/admin-token.d.ts.map +1 -1
- package/dist/server/src/strategies/admin.d.ts.map +1 -1
- package/dist/server/src/strategies/api-token-utils.d.ts.map +1 -1
- package/dist/server/src/strategies/content-api-token.d.ts.map +1 -1
- package/dist/server/src/strategies/data-transfer.d.ts.map +1 -1
- package/dist/server/src/utils/normalize-email.d.ts.map +1 -1
- package/dist/server/src/validation/action-provider.d.ts +2 -2
- package/dist/server/src/validation/action-provider.d.ts.map +1 -1
- package/dist/server/src/validation/admin-tokens.d.ts +2 -2
- package/dist/server/src/validation/api-tokens.d.ts +4 -4
- package/dist/server/src/validation/authentication/forgot-password.d.ts +1 -1
- package/dist/server/src/validation/authentication/login.d.ts +1 -1
- package/dist/server/src/validation/authentication/register.d.ts +6 -6
- package/dist/server/src/validation/authentication/register.d.ts.map +1 -1
- package/dist/server/src/validation/authentication/reset-password.d.ts +1 -1
- package/dist/server/src/validation/common-functions/check-fields-are-correctly-nested.d.ts.map +1 -1
- package/dist/server/src/validation/common-functions/check-fields-dont-have-duplicates.d.ts.map +1 -1
- package/dist/server/src/validation/common-validators.d.ts.map +1 -1
- package/dist/server/src/validation/permission.d.ts +6 -6
- package/dist/server/src/validation/permission.d.ts.map +1 -1
- package/dist/server/src/validation/policies/hasPermissions.d.ts +2 -2
- package/dist/server/src/validation/project-settings.d.ts +6 -6
- package/dist/server/src/validation/role.d.ts +8 -8
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/server/src/validation/transfer/token.d.ts +4 -4
- package/dist/server/src/validation/user.d.ts +8 -8
- package/dist/shared/contracts/permissions.d.ts +1 -0
- package/dist/shared/contracts/permissions.d.ts.map +1 -1
- package/dist/shared/contracts/sessions.d.ts +62 -0
- package/dist/shared/contracts/sessions.d.ts.map +1 -0
- package/dist/shared/contracts/shared.d.ts +1 -1
- package/dist/shared/contracts/shared.d.ts.map +1 -1
- package/dist/shared/utils/session-auth.d.ts +1 -1
- package/dist/shared/utils/session-auth.d.ts.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePage.js","sources":["../../../../../../admin/src/pages/Home/HomePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Main } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { DragLayer, isWidgetDragItem } from '../../components/DragLayer';\nimport { GapDropZoneManager } from '../../components/GapDropZone';\nimport { GuidedTourHomepageOverview } from '../../components/GuidedTour/Overview';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { WidgetResizeHandle } from '../../components/ResizeIndicator';\nimport { Widget } from '../../components/WidgetHelpers';\nimport { WidgetRoot } from '../../components/WidgetRoot';\nimport { useEnterprise } from '../../ee';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useAuth } from '../../features/Auth';\nimport { useStrapiApp } from '../../features/StrapiApp';\nimport { useWidgets } from '../../features/Widgets';\nimport {\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useGetKeyStatisticsQuery,\n} from '../../services/homepage';\nimport {\n getWidgetElement,\n WIDGET_DATA_ATTRIBUTES,\n applyHomepageLayout,\n createDefaultWidgetWidths,\n isLastWidgetInRow,\n canResizeBetweenWidgets,\n getWidgetWidth,\n} from '../../utils/widgetLayout';\nimport { hideDeployNowWidgetInProduction } from '../../utils/widgetVisibility';\n\nimport { AddWidgetModal } from './components/AddWidgetModal';\nimport { FreeTrialEndedModal } from './components/FreeTrialEndedModal';\nimport { FreeTrialWelcomeModal } from './components/FreeTrialWelcomeModal';\n\nimport type { WidgetWithUID } from '../../core/apis/Widgets';\n\ntype WidgetPermissionStatus = 'allowed' | 'denied' | 'loading';\n\nconst getWidgetPermissionsCacheKey = (permissions: NonNullable<WidgetWithUID['permissions']>) => {\n return permissions\n .map((permission) =>\n JSON.stringify({\n action: permission.action,\n subject: permission.subject,\n conditions: permission.conditions ?? [],\n properties: permission.properties ?? {},\n })\n )\n .sort()\n .join('|');\n};\n\n// Styled wrapper for the drag preview\nconst DragPreviewWrapper = styled.div<{ $maxWidth: string }>`\n max-width: ${(props) => props.$maxWidth};\n overflow: hidden;\n opacity: 0.9;\n border: 2px solid ${({ theme }) => theme.colors.primary500};\n border-radius: ${({ theme }) => theme.borderRadius};\n pointer-events: none;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * UnstableHomePageCe\n * -----------------------------------------------------------------------------------------------*/\n\nexport const WidgetComponent = ({\n component,\n columnWidth,\n}: {\n component: () => Promise<React.ComponentType>;\n columnWidth: number;\n}) => {\n const [loadedComponent, setLoadedComponent] = React.useState<React.ComponentType<{\n columnWidth?: number;\n }> | null>(null);\n\n React.useEffect(() => {\n const loadComponent = async () => {\n const resolvedComponent = await component();\n\n setLoadedComponent(() => resolvedComponent);\n };\n\n loadComponent();\n }, [component]);\n\n const Component = loadedComponent;\n\n if (!Component) {\n return <Widget.Loading />;\n }\n\n return <Component {...({ columnWidth } as Record<string, unknown>)} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePageCE = () => {\n const { formatMessage } = useIntl();\n const user = useAuth('HomePageCE', (state) => state.user);\n const displayName = user?.firstname ?? user?.username ?? user?.email;\n const getAllWidgets = useStrapiApp('UnstableHomepageCe', (state) => state.widgets.getAll);\n const currentEnvironment = useAppInfo('HomePageCE', (state) => state.currentEnvironment);\n const allWidgets = React.useMemo(\n () => hideDeployNowWidgetInProduction(getAllWidgets(), currentEnvironment),\n [getAllWidgets, currentEnvironment]\n );\n const checkUserHasPermissions = useAuth('WidgetRoot', (state) => state.checkUserHasPermissions);\n const { data: homepageLayout, isLoading: _isLoadingLayout } = useGetHomepageLayoutQuery();\n // Prefetch expensive widget data as soon as the homepage route is active.\n useGetCountDocumentsQuery();\n useGetKeyStatisticsQuery();\n const [filteredWidgets, setFilteredWidgets] = React.useState<WidgetWithUID[]>([]);\n const [widgetPermissionStatus, setWidgetPermissionStatus] = React.useState<\n Record<string, WidgetPermissionStatus>\n >(() =>\n allWidgets.reduce<Record<string, WidgetPermissionStatus>>((acc, widget) => {\n acc[widget.uid] =\n !widget.permissions || widget.permissions.length === 0 ? 'allowed' : 'loading';\n return acc;\n }, {})\n );\n const [isAddWidgetModalOpen, setIsAddWidgetModalOpen] = React.useState(false);\n\n // Use custom hook for widget management\n const {\n findWidget,\n deleteWidget,\n addWidget,\n moveWidget,\n columnWidths,\n setColumnWidths,\n handleWidgetResize,\n saveLayout,\n isDraggingWidget,\n draggedWidgetId,\n handleDragStart,\n handleDragEnd,\n } = useWidgets({\n filteredWidgets,\n setFilteredWidgets,\n });\n\n React.useEffect(() => {\n const initialPermissionStatus = allWidgets.reduce<Record<string, WidgetPermissionStatus>>(\n (acc, widget) => {\n acc[widget.uid] =\n !widget.permissions || widget.permissions.length === 0 ? 'allowed' : 'loading';\n return acc;\n },\n {}\n );\n\n setWidgetPermissionStatus(initialPermissionStatus);\n\n const widgetsWithPermissions = allWidgets.filter(\n (widget) => widget.permissions && widget.permissions.length > 0\n );\n\n if (widgetsWithPermissions.length === 0) {\n return;\n }\n\n const groupedPermissions = widgetsWithPermissions.reduce<\n Map<string, { permissions: NonNullable<WidgetWithUID['permissions']>; uids: string[] }>\n >((acc, widget) => {\n const permissions = widget.permissions ?? [];\n const key = getWidgetPermissionsCacheKey(permissions);\n const existingGroup = acc.get(key);\n\n if (existingGroup) {\n existingGroup.uids.push(widget.uid);\n } else {\n acc.set(key, { permissions, uids: [widget.uid] });\n }\n\n return acc;\n }, new Map());\n\n let isMounted = true;\n\n const checkWidgetsPermissions = async () => {\n try {\n const permissionResults = await Promise.all(\n Array.from(groupedPermissions.values()).map(async ({ permissions, uids }) => {\n const matchingPermissions = await checkUserHasPermissions(permissions);\n const status: WidgetPermissionStatus =\n matchingPermissions.length >= permissions.length ? 'allowed' : 'denied';\n\n return { uids, status };\n })\n );\n\n if (!isMounted) return;\n\n setWidgetPermissionStatus((prev) => {\n const next = { ...prev };\n\n permissionResults.forEach(({ uids, status }) => {\n uids.forEach((uid) => {\n next[uid] = status;\n });\n });\n\n return next;\n });\n } catch {\n if (!isMounted) return;\n\n // Keep the UI responsive even when permission checks fail.\n setWidgetPermissionStatus((prev) => {\n const next = { ...prev };\n widgetsWithPermissions.forEach((widget) => {\n next[widget.uid] = 'denied';\n });\n return next;\n });\n }\n };\n\n checkWidgetsPermissions();\n\n return () => {\n isMounted = false;\n };\n }, [allWidgets, checkUserHasPermissions]);\n\n const allAvailableWidgets = React.useMemo(() => {\n return allWidgets.filter((widget) => widgetPermissionStatus[widget.uid] === 'allowed');\n }, [allWidgets, widgetPermissionStatus]);\n\n const renderableWidgets = React.useMemo(() => {\n return allWidgets.filter((widget) => widgetPermissionStatus[widget.uid] !== 'denied');\n }, [allWidgets, widgetPermissionStatus]);\n\n React.useEffect(() => {\n // If user has customized the homepage layout, apply it\n if (homepageLayout && homepageLayout.widgets) {\n const { filteredWidgets, widths: homepageWidths } = applyHomepageLayout(\n renderableWidgets,\n homepageLayout\n );\n\n setFilteredWidgets(filteredWidgets);\n setColumnWidths(homepageWidths);\n } else {\n // Set default layout when no custom layout exists\n setFilteredWidgets(renderableWidgets);\n setColumnWidths(createDefaultWidgetWidths(renderableWidgets));\n }\n }, [homepageLayout, renderableWidgets, setColumnWidths]);\n\n const widgetLayout = React.useMemo(() => {\n return filteredWidgets.map((widget, index) => {\n const rightWidgetId = filteredWidgets[index + 1]?.uid;\n const widgetWidth = getWidgetWidth(columnWidths, widget.uid);\n const rightWidgetWidth = getWidgetWidth(columnWidths, rightWidgetId);\n\n return {\n widget,\n index,\n isLastInRow: isLastWidgetInRow(index, filteredWidgets, columnWidths),\n rightWidgetId,\n widgetWidth,\n rightWidgetWidth,\n canResize:\n rightWidgetId &&\n canResizeBetweenWidgets(widget.uid, rightWidgetId, columnWidths, filteredWidgets),\n };\n });\n }, [filteredWidgets, columnWidths]);\n\n return (\n <Layouts.Root>\n <Main>\n <Page.Title>\n {formatMessage({ id: 'HomePage.head.title', defaultMessage: 'Homepage' })}\n </Page.Title>\n <Layouts.Header\n title={formatMessage(\n { id: 'HomePage.header.title', defaultMessage: 'Hello {name}' },\n { name: displayName }\n )}\n subtitle={formatMessage({\n id: 'HomePage.header.subtitle',\n defaultMessage: 'Welcome to your administration panel',\n })}\n primaryAction={\n <Button\n variant=\"tertiary\"\n size=\"S\"\n startIcon={<Plus />}\n onClick={() => setIsAddWidgetModalOpen(true)}\n fullWidth\n >\n {formatMessage({\n id: 'HomePage.addWidget.button',\n defaultMessage: 'Add Widget',\n })}\n </Button>\n }\n />\n <FreeTrialWelcomeModal />\n <FreeTrialEndedModal />\n <AddWidgetModal\n isOpen={isAddWidgetModalOpen}\n onClose={() => setIsAddWidgetModalOpen(false)}\n onAddWidget={addWidget}\n currentWidgets={filteredWidgets}\n availableWidgets={allAvailableWidgets}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8} paddingBottom={10}>\n <GuidedTourHomepageOverview />\n <Box position=\"relative\" {...{ [WIDGET_DATA_ATTRIBUTES.GRID_CONTAINER]: true }}>\n <Grid.Root gap={5}>\n {widgetLayout.map(\n ({\n widget,\n isLastInRow,\n rightWidgetId,\n widgetWidth,\n rightWidgetWidth,\n canResize,\n }) => (\n <React.Fragment key={widget.uid}>\n <Grid.Item col={widgetWidth} xs={12}>\n <WidgetRoot\n uid={widget.uid}\n title={widget.title}\n icon={widget.icon}\n link={widget.link}\n findWidget={findWidget}\n deleteWidget={deleteWidget}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n component={widget.component}\n >\n {widgetPermissionStatus[widget.uid] === 'loading' ? (\n <Widget.Loading />\n ) : (\n <WidgetComponent\n component={widget.component}\n columnWidth={widgetWidth}\n />\n )}\n </WidgetRoot>\n </Grid.Item>\n\n {!isLastInRow && canResize && rightWidgetId && (\n <WidgetResizeHandle\n key={`resize-${widget.uid}`}\n leftWidgetId={widget.uid}\n rightWidgetId={rightWidgetId}\n leftWidgetWidth={widgetWidth}\n rightWidgetWidth={rightWidgetWidth}\n onResize={handleWidgetResize}\n saveLayout={saveLayout}\n filteredWidgets={filteredWidgets}\n />\n )}\n </React.Fragment>\n )\n )}\n </Grid.Root>\n\n {isDraggingWidget && (\n <GapDropZoneManager\n filteredWidgets={filteredWidgets}\n columnWidths={columnWidths}\n draggedWidgetId={draggedWidgetId}\n moveWidget={moveWidget}\n />\n )}\n </Box>\n </Flex>\n </Layouts.Content>\n\n {/* Add the DragLayer to handle custom drag previews */}\n <DragLayer\n renderItem={({ type: _type, item }) => {\n if (!isWidgetDragItem(item)) {\n return null;\n }\n\n const widgetElement = getWidgetElement(item.id);\n const maxWidth = `${widgetElement?.clientWidth}px`;\n\n return (\n <DragPreviewWrapper $maxWidth={maxWidth}>\n <WidgetRoot\n uid={item.id as WidgetWithUID['uid']}\n title={item.title || { id: `${item.id}`, defaultMessage: item.id }}\n icon={item.icon}\n link={item.link}\n >\n <WidgetComponent component={item.component} columnWidth={4} />\n </WidgetRoot>\n </DragPreviewWrapper>\n );\n }}\n />\n </Main>\n </Layouts.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePage = () => {\n const Page = useEnterprise(\n HomePageCE,\n // eslint-disable-next-line import/no-cycle\n async () => (await import('../../../../ee/admin/src/pages/HomePage')).HomePageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!Page) {\n return null;\n }\n\n return <Page />;\n};\n\nexport { HomePage, HomePageCE };\n"],"names":["getWidgetPermissionsCacheKey","permissions","map","permission","JSON","stringify","action","subject","conditions","properties","sort","join","DragPreviewWrapper","styled","div","props","$maxWidth","theme","colors","primary500","borderRadius","WidgetComponent","component","columnWidth","loadedComponent","setLoadedComponent","React","useState","useEffect","loadComponent","resolvedComponent","Component","_jsx","Widget","Loading","HomePageCE","formatMessage","useIntl","user","useAuth","state","displayName","firstname","username","email","getAllWidgets","useStrapiApp","widgets","getAll","currentEnvironment","useAppInfo","allWidgets","useMemo","hideDeployNowWidgetInProduction","checkUserHasPermissions","data","homepageLayout","isLoading","_isLoadingLayout","useGetHomepageLayoutQuery","useGetCountDocumentsQuery","useGetKeyStatisticsQuery","filteredWidgets","setFilteredWidgets","widgetPermissionStatus","setWidgetPermissionStatus","reduce","acc","widget","uid","length","isAddWidgetModalOpen","setIsAddWidgetModalOpen","findWidget","deleteWidget","addWidget","moveWidget","columnWidths","setColumnWidths","handleWidgetResize","saveLayout","isDraggingWidget","draggedWidgetId","handleDragStart","handleDragEnd","useWidgets","initialPermissionStatus","widgetsWithPermissions","filter","groupedPermissions","key","existingGroup","get","uids","push","set","Map","isMounted","checkWidgetsPermissions","permissionResults","Promise","all","Array","from","values","matchingPermissions","status","prev","next","forEach","allAvailableWidgets","renderableWidgets","widths","homepageWidths","applyHomepageLayout","createDefaultWidgetWidths","widgetLayout","index","rightWidgetId","widgetWidth","getWidgetWidth","rightWidgetWidth","isLastInRow","isLastWidgetInRow","canResize","canResizeBetweenWidgets","Layouts","Root","_jsxs","Main","Page","Title","id","defaultMessage","Header","title","name","subtitle","primaryAction","Button","variant","size","startIcon","Plus","onClick","fullWidth","FreeTrialWelcomeModal","FreeTrialEndedModal","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","Content","Flex","direction","alignItems","gap","paddingBottom","GuidedTourHomepageOverview","Box","position","WIDGET_DATA_ATTRIBUTES","GRID_CONTAINER","Grid","Fragment","Item","col","xs","WidgetRoot","icon","link","onDragStart","onDragEnd","WidgetResizeHandle","leftWidgetId","leftWidgetWidth","onResize","GapDropZoneManager","DragLayer","renderItem","type","_type","item","isWidgetDragItem","widgetElement","getWidgetElement","maxWidth","clientWidth","HomePage","useEnterprise","HomePageEE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HomePage.js","sources":["../../../../../../admin/src/pages/Home/HomePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Main } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { DragLayer, isWidgetDragItem } from '../../components/DragLayer';\nimport { GapDropZoneManager } from '../../components/GapDropZone';\nimport { GuidedTourHomepageOverview } from '../../components/GuidedTour/Overview';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { WidgetResizeHandle } from '../../components/ResizeIndicator';\nimport { Widget } from '../../components/WidgetHelpers';\nimport { WidgetRoot } from '../../components/WidgetRoot';\nimport { useEnterprise } from '../../ee';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useAuth } from '../../features/Auth';\nimport { useStrapiApp } from '../../features/StrapiApp';\nimport { useWidgets } from '../../features/Widgets';\nimport {\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useGetKeyStatisticsQuery,\n} from '../../services/homepage';\nimport {\n getWidgetElement,\n WIDGET_DATA_ATTRIBUTES,\n applyHomepageLayout,\n createDefaultWidgetWidths,\n isLastWidgetInRow,\n canResizeBetweenWidgets,\n getWidgetWidth,\n} from '../../utils/widgetLayout';\nimport { hideDeployNowWidgetInProduction } from '../../utils/widgetVisibility';\n\nimport { AddWidgetModal } from './components/AddWidgetModal';\nimport { FreeTrialEndedModal } from './components/FreeTrialEndedModal';\nimport { FreeTrialWelcomeModal } from './components/FreeTrialWelcomeModal';\n\nimport type { WidgetWithUID } from '../../core/apis/Widgets';\n\ntype WidgetPermissionStatus = 'allowed' | 'denied' | 'loading';\n\nconst getWidgetPermissionsCacheKey = (permissions: NonNullable<WidgetWithUID['permissions']>) => {\n return permissions\n .map((permission) =>\n JSON.stringify({\n action: permission.action,\n subject: permission.subject,\n conditions: permission.conditions ?? [],\n properties: permission.properties ?? {},\n })\n )\n .sort()\n .join('|');\n};\n\n// Styled wrapper for the drag preview\nconst DragPreviewWrapper = styled.div<{ $maxWidth: string }>`\n max-width: ${(props) => props.$maxWidth};\n overflow: hidden;\n opacity: 0.9;\n border: 2px solid ${({ theme }) => theme.colors.primary500};\n border-radius: ${({ theme }) => theme.borderRadius};\n pointer-events: none;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * UnstableHomePageCe\n * -----------------------------------------------------------------------------------------------*/\n\nexport const WidgetComponent = ({\n component,\n columnWidth,\n}: {\n component: () => Promise<React.ComponentType>;\n columnWidth: number;\n}) => {\n const [loadedComponent, setLoadedComponent] = React.useState<React.ComponentType<{\n columnWidth?: number;\n }> | null>(null);\n\n React.useEffect(() => {\n const loadComponent = async () => {\n const resolvedComponent = await component();\n\n setLoadedComponent(() => resolvedComponent);\n };\n\n loadComponent();\n }, [component]);\n\n const Component = loadedComponent;\n\n if (!Component) {\n return <Widget.Loading />;\n }\n\n return <Component {...({ columnWidth } as Record<string, unknown>)} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePageCE = () => {\n const { formatMessage } = useIntl();\n const user = useAuth('HomePageCE', (state) => state.user);\n const displayName = user?.firstname ?? user?.username ?? user?.email;\n const getAllWidgets = useStrapiApp('UnstableHomepageCe', (state) => state.widgets.getAll);\n const currentEnvironment = useAppInfo('HomePageCE', (state) => state.currentEnvironment);\n const allWidgets = React.useMemo(\n () => hideDeployNowWidgetInProduction(getAllWidgets(), currentEnvironment),\n [getAllWidgets, currentEnvironment]\n );\n const checkUserHasPermissions = useAuth('WidgetRoot', (state) => state.checkUserHasPermissions);\n const { data: homepageLayout, isLoading: _isLoadingLayout } = useGetHomepageLayoutQuery();\n // Prefetch expensive widget data as soon as the homepage route is active.\n useGetCountDocumentsQuery();\n useGetKeyStatisticsQuery();\n const [filteredWidgets, setFilteredWidgets] = React.useState<WidgetWithUID[]>([]);\n const [widgetPermissionStatus, setWidgetPermissionStatus] = React.useState<\n Record<string, WidgetPermissionStatus>\n >(() =>\n allWidgets.reduce<Record<string, WidgetPermissionStatus>>((acc, widget) => {\n acc[widget.uid] =\n !widget.permissions || widget.permissions.length === 0 ? 'allowed' : 'loading';\n return acc;\n }, {})\n );\n const [isAddWidgetModalOpen, setIsAddWidgetModalOpen] = React.useState(false);\n\n // Use custom hook for widget management\n const {\n findWidget,\n deleteWidget,\n addWidget,\n moveWidget,\n columnWidths,\n setColumnWidths,\n handleWidgetResize,\n saveLayout,\n isDraggingWidget,\n draggedWidgetId,\n handleDragStart,\n handleDragEnd,\n } = useWidgets({\n filteredWidgets,\n setFilteredWidgets,\n });\n\n React.useEffect(() => {\n const initialPermissionStatus = allWidgets.reduce<Record<string, WidgetPermissionStatus>>(\n (acc, widget) => {\n acc[widget.uid] =\n !widget.permissions || widget.permissions.length === 0 ? 'allowed' : 'loading';\n return acc;\n },\n {}\n );\n\n setWidgetPermissionStatus(initialPermissionStatus);\n\n const widgetsWithPermissions = allWidgets.filter(\n (widget) => widget.permissions && widget.permissions.length > 0\n );\n\n if (widgetsWithPermissions.length === 0) {\n return;\n }\n\n const groupedPermissions = widgetsWithPermissions.reduce<\n Map<string, { permissions: NonNullable<WidgetWithUID['permissions']>; uids: string[] }>\n >((acc, widget) => {\n const permissions = widget.permissions ?? [];\n const key = getWidgetPermissionsCacheKey(permissions);\n const existingGroup = acc.get(key);\n\n if (existingGroup) {\n existingGroup.uids.push(widget.uid);\n } else {\n acc.set(key, { permissions, uids: [widget.uid] });\n }\n\n return acc;\n }, new Map());\n\n let isMounted = true;\n\n const checkWidgetsPermissions = async () => {\n try {\n const permissionResults = await Promise.all(\n Array.from(groupedPermissions.values()).map(async ({ permissions, uids }) => {\n const matchingPermissions = await checkUserHasPermissions(permissions);\n const status: WidgetPermissionStatus =\n matchingPermissions.length >= permissions.length ? 'allowed' : 'denied';\n\n return { uids, status };\n })\n );\n\n if (!isMounted) return;\n\n setWidgetPermissionStatus((prev) => {\n const next = { ...prev };\n\n permissionResults.forEach(({ uids, status }) => {\n uids.forEach((uid) => {\n next[uid] = status;\n });\n });\n\n return next;\n });\n } catch {\n if (!isMounted) return;\n\n // Keep the UI responsive even when permission checks fail.\n setWidgetPermissionStatus((prev) => {\n const next = { ...prev };\n widgetsWithPermissions.forEach((widget) => {\n next[widget.uid] = 'denied';\n });\n return next;\n });\n }\n };\n\n checkWidgetsPermissions();\n\n return () => {\n isMounted = false;\n };\n }, [allWidgets, checkUserHasPermissions]);\n\n const allAvailableWidgets = React.useMemo(() => {\n return allWidgets.filter((widget) => widgetPermissionStatus[widget.uid] === 'allowed');\n }, [allWidgets, widgetPermissionStatus]);\n\n const renderableWidgets = React.useMemo(() => {\n return allWidgets.filter((widget) => widgetPermissionStatus[widget.uid] !== 'denied');\n }, [allWidgets, widgetPermissionStatus]);\n\n React.useEffect(() => {\n // If user has customized the homepage layout, apply it\n if (homepageLayout && homepageLayout.widgets) {\n const { filteredWidgets, widths: homepageWidths } = applyHomepageLayout(\n renderableWidgets,\n homepageLayout\n );\n\n setFilteredWidgets(filteredWidgets);\n setColumnWidths(homepageWidths);\n } else {\n // Set default layout when no custom layout exists\n setFilteredWidgets(renderableWidgets);\n setColumnWidths(createDefaultWidgetWidths(renderableWidgets));\n }\n }, [homepageLayout, renderableWidgets, setColumnWidths]);\n\n const widgetLayout = React.useMemo(() => {\n return filteredWidgets.map((widget, index) => {\n const rightWidgetId = filteredWidgets[index + 1]?.uid;\n const widgetWidth = getWidgetWidth(columnWidths, widget.uid);\n const rightWidgetWidth = getWidgetWidth(columnWidths, rightWidgetId);\n\n return {\n widget,\n index,\n isLastInRow: isLastWidgetInRow(index, filteredWidgets, columnWidths),\n rightWidgetId,\n widgetWidth,\n rightWidgetWidth,\n canResize:\n rightWidgetId &&\n canResizeBetweenWidgets(widget.uid, rightWidgetId, columnWidths, filteredWidgets),\n };\n });\n }, [filteredWidgets, columnWidths]);\n\n return (\n <Layouts.Root>\n <Main>\n <Page.Title>\n {formatMessage({ id: 'HomePage.head.title', defaultMessage: 'Homepage' })}\n </Page.Title>\n <Layouts.Header\n title={formatMessage(\n { id: 'HomePage.header.title', defaultMessage: 'Hello {name}' },\n { name: displayName }\n )}\n subtitle={formatMessage({\n id: 'HomePage.header.subtitle',\n defaultMessage: 'Welcome to your administration panel',\n })}\n primaryAction={\n <Button\n variant=\"tertiary\"\n size=\"S\"\n startIcon={<Plus />}\n onClick={() => setIsAddWidgetModalOpen(true)}\n fullWidth\n >\n {formatMessage({\n id: 'HomePage.addWidget.button',\n defaultMessage: 'Add Widget',\n })}\n </Button>\n }\n />\n <FreeTrialWelcomeModal />\n <FreeTrialEndedModal />\n <AddWidgetModal\n isOpen={isAddWidgetModalOpen}\n onClose={() => setIsAddWidgetModalOpen(false)}\n onAddWidget={addWidget}\n currentWidgets={filteredWidgets}\n availableWidgets={allAvailableWidgets}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8} paddingBottom={10}>\n <GuidedTourHomepageOverview />\n <Box position=\"relative\" {...{ [WIDGET_DATA_ATTRIBUTES.GRID_CONTAINER]: true }}>\n <Grid.Root gap={5}>\n {widgetLayout.map(\n ({\n widget,\n isLastInRow,\n rightWidgetId,\n widgetWidth,\n rightWidgetWidth,\n canResize,\n }) => (\n <React.Fragment key={widget.uid}>\n <Grid.Item col={widgetWidth} xs={12}>\n <WidgetRoot\n uid={widget.uid}\n title={widget.title}\n icon={widget.icon}\n link={widget.link}\n findWidget={findWidget}\n deleteWidget={deleteWidget}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n component={widget.component}\n >\n {widgetPermissionStatus[widget.uid] === 'loading' ? (\n <Widget.Loading />\n ) : (\n <WidgetComponent\n component={widget.component}\n columnWidth={widgetWidth}\n />\n )}\n </WidgetRoot>\n </Grid.Item>\n\n {!isLastInRow && canResize && rightWidgetId && (\n <WidgetResizeHandle\n key={`resize-${widget.uid}`}\n leftWidgetId={widget.uid}\n rightWidgetId={rightWidgetId}\n leftWidgetWidth={widgetWidth}\n rightWidgetWidth={rightWidgetWidth}\n onResize={handleWidgetResize}\n saveLayout={saveLayout}\n filteredWidgets={filteredWidgets}\n />\n )}\n </React.Fragment>\n )\n )}\n </Grid.Root>\n\n {isDraggingWidget && (\n <GapDropZoneManager\n filteredWidgets={filteredWidgets}\n columnWidths={columnWidths}\n draggedWidgetId={draggedWidgetId}\n moveWidget={moveWidget}\n />\n )}\n </Box>\n </Flex>\n </Layouts.Content>\n\n {/* Add the DragLayer to handle custom drag previews */}\n <DragLayer\n renderItem={({ type: _type, item }) => {\n if (!isWidgetDragItem(item)) {\n return null;\n }\n\n const widgetElement = getWidgetElement(item.id);\n const maxWidth = `${widgetElement?.clientWidth}px`;\n\n return (\n <DragPreviewWrapper $maxWidth={maxWidth}>\n <WidgetRoot\n uid={item.id as WidgetWithUID['uid']}\n title={item.title || { id: `${item.id}`, defaultMessage: item.id }}\n icon={item.icon}\n link={item.link}\n >\n <WidgetComponent component={item.component} columnWidth={4} />\n </WidgetRoot>\n </DragPreviewWrapper>\n );\n }}\n />\n </Main>\n </Layouts.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePage = () => {\n const Page = useEnterprise(\n HomePageCE,\n // eslint-disable-next-line import/no-cycle\n async () => (await import('../../../../ee/admin/src/pages/HomePage')).HomePageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!Page) {\n return null;\n }\n\n return <Page />;\n};\n\nexport { HomePage, HomePageCE };\n"],"names":["getWidgetPermissionsCacheKey","permissions","map","permission","JSON","stringify","action","subject","conditions","properties","sort","join","DragPreviewWrapper","styled","div","props","$maxWidth","theme","colors","primary500","borderRadius","WidgetComponent","component","columnWidth","loadedComponent","setLoadedComponent","React","useState","useEffect","loadComponent","resolvedComponent","Component","_jsx","Widget","Loading","HomePageCE","formatMessage","useIntl","user","useAuth","state","displayName","firstname","username","email","getAllWidgets","useStrapiApp","widgets","getAll","currentEnvironment","useAppInfo","allWidgets","useMemo","hideDeployNowWidgetInProduction","checkUserHasPermissions","data","homepageLayout","isLoading","_isLoadingLayout","useGetHomepageLayoutQuery","useGetCountDocumentsQuery","useGetKeyStatisticsQuery","filteredWidgets","setFilteredWidgets","widgetPermissionStatus","setWidgetPermissionStatus","reduce","acc","widget","uid","length","isAddWidgetModalOpen","setIsAddWidgetModalOpen","findWidget","deleteWidget","addWidget","moveWidget","columnWidths","setColumnWidths","handleWidgetResize","saveLayout","isDraggingWidget","draggedWidgetId","handleDragStart","handleDragEnd","useWidgets","initialPermissionStatus","widgetsWithPermissions","filter","groupedPermissions","key","existingGroup","get","uids","push","set","Map","isMounted","checkWidgetsPermissions","permissionResults","Promise","all","Array","from","values","matchingPermissions","status","prev","next","forEach","allAvailableWidgets","renderableWidgets","widths","homepageWidths","applyHomepageLayout","createDefaultWidgetWidths","widgetLayout","index","rightWidgetId","widgetWidth","getWidgetWidth","rightWidgetWidth","isLastInRow","isLastWidgetInRow","canResize","canResizeBetweenWidgets","Layouts","Root","_jsxs","Main","Page","Title","id","defaultMessage","Header","title","name","subtitle","primaryAction","Button","variant","size","startIcon","Plus","onClick","fullWidth","FreeTrialWelcomeModal","FreeTrialEndedModal","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","Content","Flex","direction","alignItems","gap","paddingBottom","GuidedTourHomepageOverview","Box","position","WIDGET_DATA_ATTRIBUTES","GRID_CONTAINER","Grid","Fragment","Item","col","xs","WidgetRoot","icon","link","onDragStart","onDragEnd","WidgetResizeHandle","leftWidgetId","leftWidgetWidth","onResize","GapDropZoneManager","DragLayer","renderItem","type","_type","item","isWidgetDragItem","widgetElement","getWidgetElement","maxWidth","clientWidth","HomePage","useEnterprise","HomePageEE"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAMA,+BAA+B,CAACC,WAAAA,GAAAA;AACpC,IAAA,OAAOA,YACJC,GAAG,CAAC,CAACC,UAAAA,GACJC,IAAAA,CAAKC,SAAS,CAAC;AACbC,YAAAA,MAAAA,EAAQH,WAAWG,MAAM;AACzBC,YAAAA,OAAAA,EAASJ,WAAWI,OAAO;YAC3BC,UAAAA,EAAYL,UAAAA,CAAWK,UAAU,IAAI,EAAE;YACvCC,UAAAA,EAAYN,UAAAA,CAAWM,UAAU,IAAI;SACvC,CAAA,CAAA,CAEDC,IAAI,EAAA,CACJC,IAAI,CAAC,GAAA,CAAA;AACV,CAAA;AAEA;AACA,MAAMC,kBAAAA,GAAqBC,uBAAAA,CAAOC,GAA0B;AAC/C,aAAA,EAAE,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,SAAS,CAAC;;;oBAGtB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;AAC5C,iBAAA,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,YAAY,CAAC;;AAErD,CAAC;AAED;;2GAIaC,eAAAA,GAAkB,CAAC,EAC9BC,SAAS,EACTC,WAAW,EAIZ,GAAA;AACC,IAAA,MAAM,CAACC,eAAAA,EAAiBC,kBAAAA,CAAmB,GAAGC,gBAAAA,CAAMC,QAAQ,CAEjD,IAAA,CAAA;AAEXD,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,MAAMC,aAAAA,GAAgB,UAAA;AACpB,YAAA,MAAMC,oBAAoB,MAAMR,SAAAA,EAAAA;AAEhCG,YAAAA,kBAAAA,CAAmB,IAAMK,iBAAAA,CAAAA;AAC3B,QAAA,CAAA;AAEAD,QAAAA,aAAAA,EAAAA;IACF,CAAA,EAAG;AAACP,QAAAA;AAAU,KAAA,CAAA;AAEd,IAAA,MAAMS,SAAAA,GAAYP,eAAAA;AAElB,IAAA,IAAI,CAACO,SAAAA,EAAW;QACd,qBAAOC,cAAA,CAACC,qBAAOC,OAAO,EAAA,EAAA,CAAA;AACxB,IAAA;AAEA,IAAA,qBAAOF,cAAA,CAACD,SAAAA,EAAAA;QAAW,GAAI;AAAER,YAAAA;;;AAC3B;AAEA;;AAEkG,2GAE5FY,UAAAA,GAAa,IAAA;IACjB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,OAAOC,YAAAA,CAAQ,YAAA,EAAc,CAACC,KAAAA,GAAUA,MAAMF,IAAI,CAAA;AACxD,IAAA,MAAMG,WAAAA,GAAcH,IAAAA,EAAMI,SAAAA,IAAaJ,IAAAA,EAAMK,YAAYL,IAAAA,EAAMM,KAAAA;IAC/D,MAAMC,aAAAA,GAAgBC,uBAAa,oBAAA,EAAsB,CAACN,QAAUA,KAAAA,CAAMO,OAAO,CAACC,MAAM,CAAA;AACxF,IAAA,MAAMC,qBAAqBC,kBAAAA,CAAW,YAAA,EAAc,CAACV,KAAAA,GAAUA,MAAMS,kBAAkB,CAAA;AACvF,IAAA,MAAME,aAAazB,gBAAAA,CAAM0B,OAAO,CAC9B,IAAMC,gDAAAA,CAAgCR,iBAAiBI,kBAAAA,CAAAA,EACvD;AAACJ,QAAAA,aAAAA;AAAeI,QAAAA;AAAmB,KAAA,CAAA;AAErC,IAAA,MAAMK,0BAA0Bf,YAAAA,CAAQ,YAAA,EAAc,CAACC,KAAAA,GAAUA,MAAMc,uBAAuB,CAAA;AAC9F,IAAA,MAAM,EAAEC,IAAAA,EAAMC,cAAc,EAAEC,SAAAA,EAAWC,gBAAgB,EAAE,GAAGC,kCAAAA,EAAAA;;AAE9DC,IAAAA,kCAAAA,EAAAA;AACAC,IAAAA,iCAAAA,EAAAA;AACA,IAAA,MAAM,CAACC,eAAAA,EAAiBC,kBAAAA,CAAmB,GAAGrC,gBAAAA,CAAMC,QAAQ,CAAkB,EAAE,CAAA;AAChF,IAAA,MAAM,CAACqC,sBAAAA,EAAwBC,yBAAAA,CAA0B,GAAGvC,gBAAAA,CAAMC,QAAQ,CAExE,IACAwB,UAAAA,CAAWe,MAAM,CAAyC,CAACC,GAAAA,EAAKC,MAAAA,GAAAA;AAC9DD,YAAAA,GAAG,CAACC,MAAAA,CAAOC,GAAG,CAAC,GACb,CAACD,MAAAA,CAAOnE,WAAW,IAAImE,OAAOnE,WAAW,CAACqE,MAAM,KAAK,IAAI,SAAA,GAAY,SAAA;YACvE,OAAOH,GAAAA;AACT,QAAA,CAAA,EAAG,EAAC,CAAA,CAAA;AAEN,IAAA,MAAM,CAACI,oBAAAA,EAAsBC,uBAAAA,CAAwB,GAAG9C,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;;IAGvE,MAAM,EACJ8C,UAAU,EACVC,YAAY,EACZC,SAAS,EACTC,UAAU,EACVC,YAAY,EACZC,eAAe,EACfC,kBAAkB,EAClBC,UAAU,EACVC,gBAAgB,EAChBC,eAAe,EACfC,eAAe,EACfC,aAAa,EACd,GAAGC,kBAAAA,CAAW;AACbvB,QAAAA,eAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;AAEArC,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;AACd,QAAA,MAAM0D,uBAAAA,GAA0BnC,UAAAA,CAAWe,MAAM,CAC/C,CAACC,GAAAA,EAAKC,MAAAA,GAAAA;AACJD,YAAAA,GAAG,CAACC,MAAAA,CAAOC,GAAG,CAAC,GACb,CAACD,MAAAA,CAAOnE,WAAW,IAAImE,OAAOnE,WAAW,CAACqE,MAAM,KAAK,IAAI,SAAA,GAAY,SAAA;YACvE,OAAOH,GAAAA;AACT,QAAA,CAAA,EACA,EAAC,CAAA;QAGHF,yBAAAA,CAA0BqB,uBAAAA,CAAAA;AAE1B,QAAA,MAAMC,sBAAAA,GAAyBpC,UAAAA,CAAWqC,MAAM,CAC9C,CAACpB,MAAAA,GAAWA,MAAAA,CAAOnE,WAAW,IAAImE,MAAAA,CAAOnE,WAAW,CAACqE,MAAM,GAAG,CAAA,CAAA;QAGhE,IAAIiB,sBAAAA,CAAuBjB,MAAM,KAAK,CAAA,EAAG;AACvC,YAAA;AACF,QAAA;AAEA,QAAA,MAAMmB,kBAAAA,GAAqBF,sBAAAA,CAAuBrB,MAAM,CAEtD,CAACC,GAAAA,EAAKC,MAAAA,GAAAA;AACN,YAAA,MAAMnE,WAAAA,GAAcmE,MAAAA,CAAOnE,WAAW,IAAI,EAAE;AAC5C,YAAA,MAAMyF,MAAM1F,4BAAAA,CAA6BC,WAAAA,CAAAA;YACzC,MAAM0F,aAAAA,GAAgBxB,GAAAA,CAAIyB,GAAG,CAACF,GAAAA,CAAAA;AAE9B,YAAA,IAAIC,aAAAA,EAAe;AACjBA,gBAAAA,aAAAA,CAAcE,IAAI,CAACC,IAAI,CAAC1B,OAAOC,GAAG,CAAA;YACpC,CAAA,MAAO;gBACLF,GAAAA,CAAI4B,GAAG,CAACL,GAAAA,EAAK;AAAEzF,oBAAAA,WAAAA;oBAAa4F,IAAAA,EAAM;AAACzB,wBAAAA,MAAAA,CAAOC;AAAI;AAAC,iBAAA,CAAA;AACjD,YAAA;YAEA,OAAOF,GAAAA;AACT,QAAA,CAAA,EAAG,IAAI6B,GAAAA,EAAAA,CAAAA;AAEP,QAAA,IAAIC,SAAAA,GAAY,IAAA;AAEhB,QAAA,MAAMC,uBAAAA,GAA0B,UAAA;YAC9B,IAAI;AACF,gBAAA,MAAMC,oBAAoB,MAAMC,OAAAA,CAAQC,GAAG,CACzCC,KAAAA,CAAMC,IAAI,CAACd,kBAAAA,CAAmBe,MAAM,EAAA,CAAA,CAAItG,GAAG,CAAC,OAAO,EAAED,WAAW,EAAE4F,IAAI,EAAE,GAAA;oBACtE,MAAMY,mBAAAA,GAAsB,MAAMnD,uBAAAA,CAAwBrD,WAAAA,CAAAA;AAC1D,oBAAA,MAAMyG,SACJD,mBAAAA,CAAoBnC,MAAM,IAAIrE,WAAAA,CAAYqE,MAAM,GAAG,SAAA,GAAY,QAAA;oBAEjE,OAAO;AAAEuB,wBAAAA,IAAAA;AAAMa,wBAAAA;AAAO,qBAAA;AACxB,gBAAA,CAAA,CAAA,CAAA;AAGF,gBAAA,IAAI,CAACT,SAAAA,EAAW;AAEhBhC,gBAAAA,yBAAAA,CAA0B,CAAC0C,IAAAA,GAAAA;AACzB,oBAAA,MAAMC,IAAAA,GAAO;AAAE,wBAAA,GAAGD;AAAK,qBAAA;AAEvBR,oBAAAA,iBAAAA,CAAkBU,OAAO,CAAC,CAAC,EAAEhB,IAAI,EAAEa,MAAM,EAAE,GAAA;wBACzCb,IAAAA,CAAKgB,OAAO,CAAC,CAACxC,GAAAA,GAAAA;4BACZuC,IAAI,CAACvC,IAAI,GAAGqC,MAAAA;AACd,wBAAA,CAAA,CAAA;AACF,oBAAA,CAAA,CAAA;oBAEA,OAAOE,IAAAA;AACT,gBAAA,CAAA,CAAA;AACF,YAAA,CAAA,CAAE,OAAM;AACN,gBAAA,IAAI,CAACX,SAAAA,EAAW;;AAGhBhC,gBAAAA,yBAAAA,CAA0B,CAAC0C,IAAAA,GAAAA;AACzB,oBAAA,MAAMC,IAAAA,GAAO;AAAE,wBAAA,GAAGD;AAAK,qBAAA;oBACvBpB,sBAAAA,CAAuBsB,OAAO,CAAC,CAACzC,MAAAA,GAAAA;AAC9BwC,wBAAAA,IAAI,CAACxC,MAAAA,CAAOC,GAAG,CAAC,GAAG,QAAA;AACrB,oBAAA,CAAA,CAAA;oBACA,OAAOuC,IAAAA;AACT,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA;AAEAV,QAAAA,uBAAAA,EAAAA;QAEA,OAAO,IAAA;YACLD,SAAAA,GAAY,KAAA;AACd,QAAA,CAAA;IACF,CAAA,EAAG;AAAC9C,QAAAA,UAAAA;AAAYG,QAAAA;AAAwB,KAAA,CAAA;IAExC,MAAMwD,mBAAAA,GAAsBpF,gBAAAA,CAAM0B,OAAO,CAAC,IAAA;QACxC,OAAOD,UAAAA,CAAWqC,MAAM,CAAC,CAACpB,MAAAA,GAAWJ,sBAAsB,CAACI,MAAAA,CAAOC,GAAG,CAAC,KAAK,SAAA,CAAA;IAC9E,CAAA,EAAG;AAAClB,QAAAA,UAAAA;AAAYa,QAAAA;AAAuB,KAAA,CAAA;IAEvC,MAAM+C,iBAAAA,GAAoBrF,gBAAAA,CAAM0B,OAAO,CAAC,IAAA;QACtC,OAAOD,UAAAA,CAAWqC,MAAM,CAAC,CAACpB,MAAAA,GAAWJ,sBAAsB,CAACI,MAAAA,CAAOC,GAAG,CAAC,KAAK,QAAA,CAAA;IAC9E,CAAA,EAAG;AAAClB,QAAAA,UAAAA;AAAYa,QAAAA;AAAuB,KAAA,CAAA;AAEvCtC,IAAAA,gBAAAA,CAAME,SAAS,CAAC,IAAA;;QAEd,IAAI4B,cAAAA,IAAkBA,cAAAA,CAAeT,OAAO,EAAE;YAC5C,MAAM,EAAEe,eAAe,EAAEkD,MAAAA,EAAQC,cAAc,EAAE,GAAGC,iCAClDH,iBAAAA,EACAvD,cAAAA,CAAAA;YAGFO,kBAAAA,CAAmBD,eAAAA,CAAAA;YACnBgB,eAAAA,CAAgBmC,cAAAA,CAAAA;QAClB,CAAA,MAAO;;YAELlD,kBAAAA,CAAmBgD,iBAAAA,CAAAA;AACnBjC,YAAAA,eAAAA,CAAgBqC,sCAAAA,CAA0BJ,iBAAAA,CAAAA,CAAAA;AAC5C,QAAA;IACF,CAAA,EAAG;AAACvD,QAAAA,cAAAA;AAAgBuD,QAAAA,iBAAAA;AAAmBjC,QAAAA;AAAgB,KAAA,CAAA;IAEvD,MAAMsC,cAAAA,GAAe1F,gBAAAA,CAAM0B,OAAO,CAAC,IAAA;AACjC,QAAA,OAAOU,eAAAA,CAAgB5D,GAAG,CAAC,CAACkE,MAAAA,EAAQiD,KAAAA,GAAAA;AAClC,YAAA,MAAMC,aAAAA,GAAgBxD,eAAe,CAACuD,KAAAA,GAAQ,EAAE,EAAEhD,GAAAA;AAClD,YAAA,MAAMkD,WAAAA,GAAcC,2BAAAA,CAAe3C,YAAAA,EAAcT,MAAAA,CAAOC,GAAG,CAAA;YAC3D,MAAMoD,gBAAAA,GAAmBD,4BAAe3C,YAAAA,EAAcyC,aAAAA,CAAAA;YAEtD,OAAO;AACLlD,gBAAAA,MAAAA;AACAiD,gBAAAA,KAAAA;gBACAK,WAAAA,EAAaC,8BAAAA,CAAkBN,OAAOvD,eAAAA,EAAiBe,YAAAA,CAAAA;AACvDyC,gBAAAA,aAAAA;AACAC,gBAAAA,WAAAA;AACAE,gBAAAA,gBAAAA;AACAG,gBAAAA,SAAAA,EACEN,iBACAO,oCAAAA,CAAwBzD,MAAAA,CAAOC,GAAG,EAAEiD,eAAezC,YAAAA,EAAcf,eAAAA;AACrE,aAAA;AACF,QAAA,CAAA,CAAA;IACF,CAAA,EAAG;AAACA,QAAAA,eAAAA;AAAiBe,QAAAA;AAAa,KAAA,CAAA;IAElC,qBACE7C,cAAA,CAAC8F,eAAQC,IAAI,EAAA;AACX,QAAA,QAAA,gBAAAC,eAAA,CAACC,iBAAAA,EAAAA;;AACC,8BAAAjG,cAAA,CAACkG,iBAAKC,KAAK,EAAA;8BACR/F,aAAAA,CAAc;wBAAEgG,EAAAA,EAAI,qBAAA;wBAAuBC,cAAAA,EAAgB;AAAW,qBAAA;;AAEzE,8BAAArG,cAAA,CAAC8F,eAAQQ,MAAM,EAAA;AACbC,oBAAAA,KAAAA,EAAOnG,aAAAA,CACL;wBAAEgG,EAAAA,EAAI,uBAAA;wBAAyBC,cAAAA,EAAgB;qBAAe,EAC9D;wBAAEG,IAAAA,EAAM/F;AAAY,qBAAA,CAAA;AAEtBgG,oBAAAA,QAAAA,EAAUrG,aAAAA,CAAc;wBACtBgG,EAAAA,EAAI,0BAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA,CAAA;AACAK,oBAAAA,aAAAA,gBACE1G,cAAA,CAAC2G,mBAAAA,EAAAA;wBACCC,OAAAA,EAAQ,UAAA;wBACRC,IAAAA,EAAK,GAAA;AACLC,wBAAAA,SAAAA,gBAAW9G,cAAA,CAAC+G,UAAAA,EAAAA,EAAAA,CAAAA;AACZC,wBAAAA,OAAAA,EAAS,IAAMxE,uBAAAA,CAAwB,IAAA,CAAA;wBACvCyE,SAAS,EAAA,IAAA;kCAER7G,aAAAA,CAAc;4BACbgG,EAAAA,EAAI,2BAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;;8BAINrG,cAAA,CAACkH,2CAAAA,EAAAA,EAAAA,CAAAA;8BACDlH,cAAA,CAACmH,uCAAAA,EAAAA,EAAAA,CAAAA;8BACDnH,cAAA,CAACoH,6BAAAA,EAAAA;oBACCC,MAAAA,EAAQ9E,oBAAAA;AACR+E,oBAAAA,OAAAA,EAAS,IAAM9E,uBAAAA,CAAwB,KAAA,CAAA;oBACvC+E,WAAAA,EAAa5E,SAAAA;oBACb6E,cAAAA,EAAgB1F,eAAAA;oBAChB2F,gBAAAA,EAAkB3C;;AAEpB,8BAAA9E,cAAA,CAAC8F,eAAQ4B,OAAO,EAAA;AACd,oBAAA,QAAA,gBAAA1B,eAAA,CAAC2B,iBAAAA,EAAAA;wBAAKC,SAAAA,EAAU,QAAA;wBAASC,UAAAA,EAAW,SAAA;wBAAUC,GAAAA,EAAK,CAAA;wBAAGC,aAAAA,EAAe,EAAA;;0CACnE/H,cAAA,CAACgI,mCAAAA,EAAAA,EAAAA,CAAAA;0CACDhC,eAAA,CAACiC,gBAAAA,EAAAA;gCAAIC,QAAAA,EAAS,UAAA;gCAAiB,CAACC,mCAAAA,CAAuBC,cAAc,GAAG,IAAA;;AACtE,kDAAApI,cAAA,CAACqI,kBAAKtC,IAAI,EAAA;wCAAC+B,GAAAA,EAAK,CAAA;AACb1C,wCAAAA,QAAAA,EAAAA,cAAAA,CAAalH,GAAG,CACf,CAAC,EACCkE,MAAM,EACNsD,WAAW,EACXJ,aAAa,EACbC,WAAW,EACXE,gBAAgB,EAChBG,SAAS,EACV,iBACCI,eAAA,CAACtG,iBAAM4I,QAAQ,EAAA;;AACb,kEAAAtI,cAAA,CAACqI,kBAAKE,IAAI,EAAA;wDAACC,GAAAA,EAAKjD,WAAAA;wDAAakD,EAAAA,EAAI,EAAA;AAC/B,wDAAA,QAAA,gBAAAzI,cAAA,CAAC0I,qBAAAA,EAAAA;AACCrG,4DAAAA,GAAAA,EAAKD,OAAOC,GAAG;AACfkE,4DAAAA,KAAAA,EAAOnE,OAAOmE,KAAK;AACnBoC,4DAAAA,IAAAA,EAAMvG,OAAOuG,IAAI;AACjBC,4DAAAA,IAAAA,EAAMxG,OAAOwG,IAAI;4DACjBnG,UAAAA,EAAYA,UAAAA;4DACZC,YAAAA,EAAcA,YAAAA;4DACdmG,WAAAA,EAAa1F,eAAAA;4DACb2F,SAAAA,EAAW1F,aAAAA;AACX9D,4DAAAA,SAAAA,EAAW8C,OAAO9C,SAAS;sEAE1B0C,sBAAsB,CAACI,MAAAA,CAAOC,GAAG,CAAC,KAAK,0BACtCrC,cAAA,CAACC,oBAAAA,CAAOC,OAAO,EAAA,EAAA,CAAA,iBAEfF,cAAA,CAACX,eAAAA,EAAAA;AACCC,gEAAAA,SAAAA,EAAW8C,OAAO9C,SAAS;gEAC3BC,WAAAA,EAAagG;;;;oDAMpB,CAACG,WAAAA,IAAeE,SAAAA,IAAaN,aAAAA,kBAC5BtF,cAAA,CAAC+I,kCAAAA,EAAAA;AAECC,wDAAAA,YAAAA,EAAc5G,OAAOC,GAAG;wDACxBiD,aAAAA,EAAeA,aAAAA;wDACf2D,eAAAA,EAAiB1D,WAAAA;wDACjBE,gBAAAA,EAAkBA,gBAAAA;wDAClByD,QAAAA,EAAUnG,kBAAAA;wDACVC,UAAAA,EAAYA,UAAAA;wDACZlB,eAAAA,EAAiBA;AAPZ,qDAAA,EAAA,CAAC,OAAO,EAAEM,MAAAA,CAAOC,GAAG,CAAA,CAAE;;AA1BZD,6CAAAA,EAAAA,MAAAA,CAAOC,GAAG,CAAA;;AAyCpCY,oCAAAA,gBAAAA,kBACCjD,cAAA,CAACmJ,8BAAAA,EAAAA;wCACCrH,eAAAA,EAAiBA,eAAAA;wCACjBe,YAAAA,EAAcA,YAAAA;wCACdK,eAAAA,EAAiBA,eAAAA;wCACjBN,UAAAA,EAAYA;;;;;;;8BAQtB5C,cAAA,CAACoJ,mBAAAA,EAAAA;AACCC,oBAAAA,UAAAA,EAAY,CAAC,EAAEC,IAAAA,EAAMC,KAAK,EAAEC,IAAI,EAAE,GAAA;wBAChC,IAAI,CAACC,2BAAiBD,IAAAA,CAAAA,EAAO;4BAC3B,OAAO,IAAA;AACT,wBAAA;wBAEA,MAAME,aAAAA,GAAgBC,6BAAAA,CAAiBH,IAAAA,CAAKpD,EAAE,CAAA;AAC9C,wBAAA,MAAMwD,QAAAA,GAAW,CAAA,EAAGF,aAAAA,EAAeG,WAAAA,CAAY,EAAE,CAAC;AAElD,wBAAA,qBACE7J,cAAA,CAACpB,kBAAAA,EAAAA;4BAAmBI,SAAAA,EAAW4K,QAAAA;AAC7B,4BAAA,QAAA,gBAAA5J,cAAA,CAAC0I,qBAAAA,EAAAA;AACCrG,gCAAAA,GAAAA,EAAKmH,KAAKpD,EAAE;gCACZG,KAAAA,EAAOiD,IAAAA,CAAKjD,KAAK,IAAI;oCAAEH,EAAAA,EAAI,CAAA,EAAGoD,IAAAA,CAAKpD,EAAE,CAAA,CAAE;AAAEC,oCAAAA,cAAAA,EAAgBmD,KAAKpD;AAAG,iCAAA;AACjEuC,gCAAAA,IAAAA,EAAMa,KAAKb,IAAI;AACfC,gCAAAA,IAAAA,EAAMY,KAAKZ,IAAI;AAEf,gCAAA,QAAA,gBAAA5I,cAAA,CAACX,eAAAA,EAAAA;AAAgBC,oCAAAA,SAAAA,EAAWkK,KAAKlK,SAAS;oCAAEC,WAAAA,EAAa;;;;AAIjE,oBAAA;;;;;AAKV;AAEA;;AAEkG,2GAE5FuK,QAAAA,GAAW,IAAA;IACf,MAAM5D,IAAAA,GAAO6D,2BAAAA,CACX5J,UAAAA;AAEA,IAAA,UAAY,CAAC,MAAM,oDAAO,4CAAA,KAAyC,EAAG6J,UAAU,CAAA;;AAIlF,IAAA,IAAI,CAAC9D,IAAAA,EAAM;QACT,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBAAOlG,cAAA,CAACkG,IAAAA,EAAAA,EAAAA,CAAAA;AACV;;;;;;"}
|
|
@@ -5,11 +5,9 @@ var React = require('react');
|
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
6
|
var icons = require('@strapi/icons');
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
|
-
var
|
|
8
|
+
var styledComponents = require('styled-components');
|
|
9
9
|
var HomePage = require('../HomePage.js');
|
|
10
10
|
|
|
11
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
-
|
|
13
11
|
function _interopNamespace(e) {
|
|
14
12
|
if (e && e.__esModule) return e;
|
|
15
13
|
var n = Object.create(null);
|
|
@@ -29,10 +27,9 @@ function _interopNamespace(e) {
|
|
|
29
27
|
}
|
|
30
28
|
|
|
31
29
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
32
|
-
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
33
30
|
|
|
34
31
|
// Hide scrollbars in widget previews
|
|
35
|
-
const WidgetWrapper =
|
|
32
|
+
const WidgetWrapper = styledComponents.styled(designSystem.Box)`
|
|
36
33
|
* {
|
|
37
34
|
scrollbar-width: none;
|
|
38
35
|
-ms-overflow-style: none;
|
|
@@ -43,7 +40,7 @@ const WidgetWrapper = styled__default.default(designSystem.Box)`
|
|
|
43
40
|
}
|
|
44
41
|
`;
|
|
45
42
|
// Interactive widget preview container
|
|
46
|
-
const WidgetPreviewContainer =
|
|
43
|
+
const WidgetPreviewContainer = styledComponents.styled(designSystem.Box)`
|
|
47
44
|
&:hover {
|
|
48
45
|
background-color: ${({ theme })=>theme.colors.primary100};
|
|
49
46
|
border-color: ${({ theme })=>theme.colors.primary200};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddWidgetModal.js","sources":["../../../../../../../admin/src/pages/Home/components/AddWidgetModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { PuzzlePiece } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { WidgetComponent } from '../HomePage';\n\nimport type { WidgetWithUID } from '../../../core/apis/Widgets';\n\n// Hide scrollbars in widget previews\nconst WidgetWrapper = styled(Box)`\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n`;\n\n// Interactive widget preview container\nconst WidgetPreviewContainer = styled(Box)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n outline-offset: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AddWidgetModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddWidgetModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddWidget: (widget: WidgetWithUID) => void;\n currentWidgets: WidgetWithUID[];\n availableWidgets: WidgetWithUID[];\n}\n\ninterface WidgetPreviewProps {\n widget: WidgetWithUID;\n onSelect: () => void;\n}\n\nconst WidgetPreview = ({ widget, onSelect }: WidgetPreviewProps) => {\n const { formatMessage } = useIntl();\n const Icon = widget.icon || PuzzlePiece;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSelect();\n }\n };\n\n return (\n <WidgetPreviewContainer\n padding={4}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n hasRadius\n shadow=\"tableShadow\"\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n width={'100%'}\n cursor=\"pointer\"\n tabIndex={0}\n role=\"button\"\n aria-label={formatMessage(\n {\n id: 'HomePage.addWidget.selectWidget',\n defaultMessage: 'Select {widgetName} widget',\n },\n { widgetName: formatMessage(widget.title) }\n )}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\">\n {formatMessage(widget.title)}\n </Typography>\n </Flex>\n <WidgetWrapper\n width={'100%'}\n style={{\n pointerEvents: 'none',\n }}\n >\n <WidgetComponent component={widget.component} columnWidth={4} />\n </WidgetWrapper>\n </Flex>\n </WidgetPreviewContainer>\n );\n};\n\nexport const AddWidgetModal = ({\n isOpen,\n onClose,\n onAddWidget,\n currentWidgets,\n availableWidgets,\n}: AddWidgetModalProps) => {\n const { formatMessage } = useIntl();\n\n const currentWidgetUids = React.useMemo(\n () => new Set(currentWidgets.map((widget) => widget.uid)),\n [currentWidgets]\n );\n\n const handleWidgetSelect = (widget: WidgetWithUID) => {\n if (!currentWidgetUids.has(widget.uid)) {\n onAddWidget(widget);\n onClose();\n }\n };\n\n const addableWidgets = availableWidgets.filter((widget) => !currentWidgetUids.has(widget.uid));\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'HomePage.addWidget.title',\n defaultMessage: 'Add Widget',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Box>\n {addableWidgets.length === 0 ? (\n <Flex direction=\"column\" alignItems=\"center\" gap={4}>\n <PuzzlePiece width=\"4rem\" height=\"4rem\" fill=\"neutral300\" />\n <Typography textColor=\"neutral500\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.addWidget.noWidgetsAvailable',\n defaultMessage: 'No widgets available to add',\n })}\n </Typography>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={3} justifyContent=\"center\">\n {addableWidgets.map((widget) => (\n <WidgetPreview\n key={widget.uid}\n widget={widget}\n onSelect={() => handleWidgetSelect(widget)}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["WidgetWrapper","styled","Box","WidgetPreviewContainer","theme","colors","primary100","primary200","WidgetPreview","widget","onSelect","formatMessage","useIntl","Icon","icon","PuzzlePiece","handleKeyDown","event","key","preventDefault","_jsx","padding","background","borderColor","hasRadius","shadow","onClick","onKeyDown","width","cursor","tabIndex","role","aria-label","id","defaultMessage","widgetName","title","_jsxs","Flex","direction","alignItems","gap","marginRight","fill","aria-hidden","Typography","textColor","variant","tag","style","pointerEvents","WidgetComponent","component","columnWidth","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","currentWidgetUids","React","useMemo","Set","map","uid","handleWidgetSelect","has","addableWidgets","filter","Modal","Root","open","onOpenChange","Content","Header","Title","Body","length","height","textAlign","justifyContent","Footer","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddWidgetModal.js","sources":["../../../../../../../admin/src/pages/Home/components/AddWidgetModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { PuzzlePiece } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { WidgetComponent } from '../HomePage';\n\nimport type { WidgetWithUID } from '../../../core/apis/Widgets';\n\n// Hide scrollbars in widget previews\nconst WidgetWrapper = styled(Box)`\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n`;\n\n// Interactive widget preview container\nconst WidgetPreviewContainer = styled(Box)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n outline-offset: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AddWidgetModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddWidgetModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddWidget: (widget: WidgetWithUID) => void;\n currentWidgets: WidgetWithUID[];\n availableWidgets: WidgetWithUID[];\n}\n\ninterface WidgetPreviewProps {\n widget: WidgetWithUID;\n onSelect: () => void;\n}\n\nconst WidgetPreview = ({ widget, onSelect }: WidgetPreviewProps) => {\n const { formatMessage } = useIntl();\n const Icon = widget.icon || PuzzlePiece;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSelect();\n }\n };\n\n return (\n <WidgetPreviewContainer\n padding={4}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n hasRadius\n shadow=\"tableShadow\"\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n width={'100%'}\n cursor=\"pointer\"\n tabIndex={0}\n role=\"button\"\n aria-label={formatMessage(\n {\n id: 'HomePage.addWidget.selectWidget',\n defaultMessage: 'Select {widgetName} widget',\n },\n { widgetName: formatMessage(widget.title) }\n )}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\">\n {formatMessage(widget.title)}\n </Typography>\n </Flex>\n <WidgetWrapper\n width={'100%'}\n style={{\n pointerEvents: 'none',\n }}\n >\n <WidgetComponent component={widget.component} columnWidth={4} />\n </WidgetWrapper>\n </Flex>\n </WidgetPreviewContainer>\n );\n};\n\nexport const AddWidgetModal = ({\n isOpen,\n onClose,\n onAddWidget,\n currentWidgets,\n availableWidgets,\n}: AddWidgetModalProps) => {\n const { formatMessage } = useIntl();\n\n const currentWidgetUids = React.useMemo(\n () => new Set(currentWidgets.map((widget) => widget.uid)),\n [currentWidgets]\n );\n\n const handleWidgetSelect = (widget: WidgetWithUID) => {\n if (!currentWidgetUids.has(widget.uid)) {\n onAddWidget(widget);\n onClose();\n }\n };\n\n const addableWidgets = availableWidgets.filter((widget) => !currentWidgetUids.has(widget.uid));\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'HomePage.addWidget.title',\n defaultMessage: 'Add Widget',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Box>\n {addableWidgets.length === 0 ? (\n <Flex direction=\"column\" alignItems=\"center\" gap={4}>\n <PuzzlePiece width=\"4rem\" height=\"4rem\" fill=\"neutral300\" />\n <Typography textColor=\"neutral500\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.addWidget.noWidgetsAvailable',\n defaultMessage: 'No widgets available to add',\n })}\n </Typography>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={3} justifyContent=\"center\">\n {addableWidgets.map((widget) => (\n <WidgetPreview\n key={widget.uid}\n widget={widget}\n onSelect={() => handleWidgetSelect(widget)}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["WidgetWrapper","styled","Box","WidgetPreviewContainer","theme","colors","primary100","primary200","WidgetPreview","widget","onSelect","formatMessage","useIntl","Icon","icon","PuzzlePiece","handleKeyDown","event","key","preventDefault","_jsx","padding","background","borderColor","hasRadius","shadow","onClick","onKeyDown","width","cursor","tabIndex","role","aria-label","id","defaultMessage","widgetName","title","_jsxs","Flex","direction","alignItems","gap","marginRight","fill","aria-hidden","Typography","textColor","variant","tag","style","pointerEvents","WidgetComponent","component","columnWidth","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","currentWidgetUids","React","useMemo","Set","map","uid","handleWidgetSelect","has","addableWidgets","filter","Modal","Root","open","onOpenChange","Content","Header","Title","Body","length","height","textAlign","justifyContent","Footer","Button"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { Modal, Box, Flex, Typography, Button } from '@strapi/design-system';
|
|
4
4
|
import { PuzzlePiece } from '@strapi/icons';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
|
-
import styled from 'styled-components';
|
|
6
|
+
import { styled } from 'styled-components';
|
|
7
7
|
import { WidgetComponent } from '../HomePage.mjs';
|
|
8
8
|
|
|
9
9
|
// Hide scrollbars in widget previews
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddWidgetModal.mjs","sources":["../../../../../../../admin/src/pages/Home/components/AddWidgetModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { PuzzlePiece } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { WidgetComponent } from '../HomePage';\n\nimport type { WidgetWithUID } from '../../../core/apis/Widgets';\n\n// Hide scrollbars in widget previews\nconst WidgetWrapper = styled(Box)`\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n`;\n\n// Interactive widget preview container\nconst WidgetPreviewContainer = styled(Box)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n outline-offset: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AddWidgetModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddWidgetModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddWidget: (widget: WidgetWithUID) => void;\n currentWidgets: WidgetWithUID[];\n availableWidgets: WidgetWithUID[];\n}\n\ninterface WidgetPreviewProps {\n widget: WidgetWithUID;\n onSelect: () => void;\n}\n\nconst WidgetPreview = ({ widget, onSelect }: WidgetPreviewProps) => {\n const { formatMessage } = useIntl();\n const Icon = widget.icon || PuzzlePiece;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSelect();\n }\n };\n\n return (\n <WidgetPreviewContainer\n padding={4}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n hasRadius\n shadow=\"tableShadow\"\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n width={'100%'}\n cursor=\"pointer\"\n tabIndex={0}\n role=\"button\"\n aria-label={formatMessage(\n {\n id: 'HomePage.addWidget.selectWidget',\n defaultMessage: 'Select {widgetName} widget',\n },\n { widgetName: formatMessage(widget.title) }\n )}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\">\n {formatMessage(widget.title)}\n </Typography>\n </Flex>\n <WidgetWrapper\n width={'100%'}\n style={{\n pointerEvents: 'none',\n }}\n >\n <WidgetComponent component={widget.component} columnWidth={4} />\n </WidgetWrapper>\n </Flex>\n </WidgetPreviewContainer>\n );\n};\n\nexport const AddWidgetModal = ({\n isOpen,\n onClose,\n onAddWidget,\n currentWidgets,\n availableWidgets,\n}: AddWidgetModalProps) => {\n const { formatMessage } = useIntl();\n\n const currentWidgetUids = React.useMemo(\n () => new Set(currentWidgets.map((widget) => widget.uid)),\n [currentWidgets]\n );\n\n const handleWidgetSelect = (widget: WidgetWithUID) => {\n if (!currentWidgetUids.has(widget.uid)) {\n onAddWidget(widget);\n onClose();\n }\n };\n\n const addableWidgets = availableWidgets.filter((widget) => !currentWidgetUids.has(widget.uid));\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'HomePage.addWidget.title',\n defaultMessage: 'Add Widget',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Box>\n {addableWidgets.length === 0 ? (\n <Flex direction=\"column\" alignItems=\"center\" gap={4}>\n <PuzzlePiece width=\"4rem\" height=\"4rem\" fill=\"neutral300\" />\n <Typography textColor=\"neutral500\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.addWidget.noWidgetsAvailable',\n defaultMessage: 'No widgets available to add',\n })}\n </Typography>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={3} justifyContent=\"center\">\n {addableWidgets.map((widget) => (\n <WidgetPreview\n key={widget.uid}\n widget={widget}\n onSelect={() => handleWidgetSelect(widget)}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["WidgetWrapper","styled","Box","WidgetPreviewContainer","theme","colors","primary100","primary200","WidgetPreview","widget","onSelect","formatMessage","useIntl","Icon","icon","PuzzlePiece","handleKeyDown","event","key","preventDefault","_jsx","padding","background","borderColor","hasRadius","shadow","onClick","onKeyDown","width","cursor","tabIndex","role","aria-label","id","defaultMessage","widgetName","title","_jsxs","Flex","direction","alignItems","gap","marginRight","fill","aria-hidden","Typography","textColor","variant","tag","style","pointerEvents","WidgetComponent","component","columnWidth","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","currentWidgetUids","React","useMemo","Set","map","uid","handleWidgetSelect","has","addableWidgets","filter","Modal","Root","open","onOpenChange","Content","Header","Title","Body","length","height","textAlign","justifyContent","Footer","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddWidgetModal.mjs","sources":["../../../../../../../admin/src/pages/Home/components/AddWidgetModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { PuzzlePiece } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { WidgetComponent } from '../HomePage';\n\nimport type { WidgetWithUID } from '../../../core/apis/Widgets';\n\n// Hide scrollbars in widget previews\nconst WidgetWrapper = styled(Box)`\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n`;\n\n// Interactive widget preview container\nconst WidgetPreviewContainer = styled(Box)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n outline-offset: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AddWidgetModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddWidgetModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddWidget: (widget: WidgetWithUID) => void;\n currentWidgets: WidgetWithUID[];\n availableWidgets: WidgetWithUID[];\n}\n\ninterface WidgetPreviewProps {\n widget: WidgetWithUID;\n onSelect: () => void;\n}\n\nconst WidgetPreview = ({ widget, onSelect }: WidgetPreviewProps) => {\n const { formatMessage } = useIntl();\n const Icon = widget.icon || PuzzlePiece;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSelect();\n }\n };\n\n return (\n <WidgetPreviewContainer\n padding={4}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n hasRadius\n shadow=\"tableShadow\"\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n width={'100%'}\n cursor=\"pointer\"\n tabIndex={0}\n role=\"button\"\n aria-label={formatMessage(\n {\n id: 'HomePage.addWidget.selectWidget',\n defaultMessage: 'Select {widgetName} widget',\n },\n { widgetName: formatMessage(widget.title) }\n )}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\">\n {formatMessage(widget.title)}\n </Typography>\n </Flex>\n <WidgetWrapper\n width={'100%'}\n style={{\n pointerEvents: 'none',\n }}\n >\n <WidgetComponent component={widget.component} columnWidth={4} />\n </WidgetWrapper>\n </Flex>\n </WidgetPreviewContainer>\n );\n};\n\nexport const AddWidgetModal = ({\n isOpen,\n onClose,\n onAddWidget,\n currentWidgets,\n availableWidgets,\n}: AddWidgetModalProps) => {\n const { formatMessage } = useIntl();\n\n const currentWidgetUids = React.useMemo(\n () => new Set(currentWidgets.map((widget) => widget.uid)),\n [currentWidgets]\n );\n\n const handleWidgetSelect = (widget: WidgetWithUID) => {\n if (!currentWidgetUids.has(widget.uid)) {\n onAddWidget(widget);\n onClose();\n }\n };\n\n const addableWidgets = availableWidgets.filter((widget) => !currentWidgetUids.has(widget.uid));\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'HomePage.addWidget.title',\n defaultMessage: 'Add Widget',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Box>\n {addableWidgets.length === 0 ? (\n <Flex direction=\"column\" alignItems=\"center\" gap={4}>\n <PuzzlePiece width=\"4rem\" height=\"4rem\" fill=\"neutral300\" />\n <Typography textColor=\"neutral500\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.addWidget.noWidgetsAvailable',\n defaultMessage: 'No widgets available to add',\n })}\n </Typography>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={3} justifyContent=\"center\">\n {addableWidgets.map((widget) => (\n <WidgetPreview\n key={widget.uid}\n widget={widget}\n onSelect={() => handleWidgetSelect(widget)}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["WidgetWrapper","styled","Box","WidgetPreviewContainer","theme","colors","primary100","primary200","WidgetPreview","widget","onSelect","formatMessage","useIntl","Icon","icon","PuzzlePiece","handleKeyDown","event","key","preventDefault","_jsx","padding","background","borderColor","hasRadius","shadow","onClick","onKeyDown","width","cursor","tabIndex","role","aria-label","id","defaultMessage","widgetName","title","_jsxs","Flex","direction","alignItems","gap","marginRight","fill","aria-hidden","Typography","textColor","variant","tag","style","pointerEvents","WidgetComponent","component","columnWidth","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","currentWidgetUids","React","useMemo","Set","map","uid","handleWidgetSelect","has","addableWidgets","filter","Modal","Root","open","onOpenChange","Content","Header","Title","Body","length","height","textAlign","justifyContent","Footer","Button"],"mappings":"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"}
|
|
@@ -6,18 +6,14 @@ var designSystem = require('@strapi/design-system');
|
|
|
6
6
|
var icons = require('@strapi/icons');
|
|
7
7
|
var dateFns = require('date-fns');
|
|
8
8
|
var reactIntl = require('react-intl');
|
|
9
|
-
var
|
|
9
|
+
var styledComponents = require('styled-components');
|
|
10
10
|
var useLicenseLimits = require('../../../../../ee/admin/src/hooks/useLicenseLimits.js');
|
|
11
11
|
var usePersistentState = require('../../../hooks/usePersistentState.js');
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
16
|
-
|
|
17
|
-
const StyledModalContent = styled__default.default(designSystem.Modal.Content)`
|
|
13
|
+
const StyledModalContent = styledComponents.styled(designSystem.Modal.Content)`
|
|
18
14
|
max-width: 51.6rem;
|
|
19
15
|
`;
|
|
20
|
-
const StyledModalBody =
|
|
16
|
+
const StyledModalBody = styledComponents.styled(designSystem.Modal.Body)`
|
|
21
17
|
padding: 0;
|
|
22
18
|
position: relative;
|
|
23
19
|
|
|
@@ -25,7 +21,7 @@ const StyledModalBody = styled__default.default(designSystem.Modal.Body)`
|
|
|
25
21
|
padding: 0;
|
|
26
22
|
}
|
|
27
23
|
`;
|
|
28
|
-
const StyledButton =
|
|
24
|
+
const StyledButton = styledComponents.styled(designSystem.Button)`
|
|
29
25
|
border: 0;
|
|
30
26
|
border-radius: 50%;
|
|
31
27
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FreeTrialEndedModal.js","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialEndedModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, LinkButton, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { isAfter, subDays } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n`;\n\nexport const FreeTrialEndedModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_ENDED_MODAL',\n false\n );\n const [cachedTrialEndsAt] = useScopedPersistentState<string | undefined>(\n 'STRAPI_FREE_TRIAL_ENDS_AT',\n undefined\n );\n\n const { license } = useLicenseLimits();\n\n const sevenDaysAgo = subDays(new Date(), 7);\n\n // When the license is not a trial + not EE, and the cached trial end date is found in the localstorage, that means the trial has ended\n // We show the banner to encourage the user to upgrade (for 7 days after the trial ends)\n const isTrialEndedRecently = Boolean(\n !license?.isTrial &&\n !window.strapi.isEE &&\n cachedTrialEndsAt &&\n isAfter(new Date(cachedTrialEndsAt), sevenDaysAgo)\n );\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (!previouslyOpen && isTrialEndedRecently) {\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"ghost\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <Flex\n direction=\"column\"\n alignItems=\"start\"\n justifyContent=\"stretch\"\n padding={8}\n gap={4}\n >\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.title',\n defaultMessage: 'Your trial has ended',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.description',\n defaultMessage:\n 'Your access to Growth plan features such as Content history, Releases and Single sign-On (SSO) has expired.',\n })}\n </Typography>\n <Box background=\"primary200\" padding={4} hasRadius>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.title',\n defaultMessage: 'Important to know:',\n })}\n </Typography>\n <ul style={{ listStyleType: 'disc', marginLeft: '1.5rem' }}>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item1',\n defaultMessage: 'Downgrading will remove access to the above features.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item2',\n defaultMessage: 'Document version history will be deleted.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item3',\n defaultMessage: 'All releases will be erased.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item4',\n defaultMessage:\n 'If you downgrade ensure to set a root admin password to keep access to the admin panel.',\n })}\n </Typography>\n </li>\n </ul>\n </Box>\n <Flex marginTop={4} gap={2}>\n <LinkButton href=\"https://billing.strapi.io/\" target=\"_blank\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.upgrade',\n defaultMessage: 'Stay on the Growth plan',\n })}\n </LinkButton>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.downgrade',\n defaultMessage: 'Downgrade to Community',\n })}\n </Button>\n </Flex>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n }\n\n return null;\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialEndedModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","cachedTrialEndsAt","undefined","license","useLicenseLimits","sevenDaysAgo","subDays","Date","isTrialEndedRecently","Boolean","isTrial","window","strapi","isEE","isAfter","handleClose","handleOnOpenChange","isOpen","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","background","hasRadius","ul","style","listStyleType","marginLeft","li","marginTop","LinkButton","href","target"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FreeTrialEndedModal.js","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialEndedModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, LinkButton, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { isAfter, subDays } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n`;\n\nexport const FreeTrialEndedModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_ENDED_MODAL',\n false\n );\n const [cachedTrialEndsAt] = useScopedPersistentState<string | undefined>(\n 'STRAPI_FREE_TRIAL_ENDS_AT',\n undefined\n );\n\n const { license } = useLicenseLimits();\n\n const sevenDaysAgo = subDays(new Date(), 7);\n\n // When the license is not a trial + not EE, and the cached trial end date is found in the localstorage, that means the trial has ended\n // We show the banner to encourage the user to upgrade (for 7 days after the trial ends)\n const isTrialEndedRecently = Boolean(\n !license?.isTrial &&\n !window.strapi.isEE &&\n cachedTrialEndsAt &&\n isAfter(new Date(cachedTrialEndsAt), sevenDaysAgo)\n );\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (!previouslyOpen && isTrialEndedRecently) {\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"ghost\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <Flex\n direction=\"column\"\n alignItems=\"start\"\n justifyContent=\"stretch\"\n padding={8}\n gap={4}\n >\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.title',\n defaultMessage: 'Your trial has ended',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.description',\n defaultMessage:\n 'Your access to Growth plan features such as Content history, Releases and Single sign-On (SSO) has expired.',\n })}\n </Typography>\n <Box background=\"primary200\" padding={4} hasRadius>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.title',\n defaultMessage: 'Important to know:',\n })}\n </Typography>\n <ul style={{ listStyleType: 'disc', marginLeft: '1.5rem' }}>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item1',\n defaultMessage: 'Downgrading will remove access to the above features.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item2',\n defaultMessage: 'Document version history will be deleted.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item3',\n defaultMessage: 'All releases will be erased.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item4',\n defaultMessage:\n 'If you downgrade ensure to set a root admin password to keep access to the admin panel.',\n })}\n </Typography>\n </li>\n </ul>\n </Box>\n <Flex marginTop={4} gap={2}>\n <LinkButton href=\"https://billing.strapi.io/\" target=\"_blank\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.upgrade',\n defaultMessage: 'Stay on the Growth plan',\n })}\n </LinkButton>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.downgrade',\n defaultMessage: 'Downgrade to Community',\n })}\n </Button>\n </Flex>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n }\n\n return null;\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialEndedModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","cachedTrialEndsAt","undefined","license","useLicenseLimits","sevenDaysAgo","subDays","Date","isTrialEndedRecently","Boolean","isTrial","window","strapi","isEE","isAfter","handleClose","handleOnOpenChange","isOpen","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","background","hasRadius","ul","style","listStyleType","marginLeft","li","marginTop","LinkButton","href","target"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { Modal, Box, Flex, Typography, LinkButton, Button } from '@strapi/design
|
|
|
4
4
|
import { Cross } from '@strapi/icons';
|
|
5
5
|
import { subDays, isAfter } from 'date-fns';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
|
-
import styled from 'styled-components';
|
|
7
|
+
import { styled } from 'styled-components';
|
|
8
8
|
import { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits.mjs';
|
|
9
9
|
import { useScopedPersistentState } from '../../../hooks/usePersistentState.mjs';
|
|
10
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FreeTrialEndedModal.mjs","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialEndedModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, LinkButton, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { isAfter, subDays } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n`;\n\nexport const FreeTrialEndedModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_ENDED_MODAL',\n false\n );\n const [cachedTrialEndsAt] = useScopedPersistentState<string | undefined>(\n 'STRAPI_FREE_TRIAL_ENDS_AT',\n undefined\n );\n\n const { license } = useLicenseLimits();\n\n const sevenDaysAgo = subDays(new Date(), 7);\n\n // When the license is not a trial + not EE, and the cached trial end date is found in the localstorage, that means the trial has ended\n // We show the banner to encourage the user to upgrade (for 7 days after the trial ends)\n const isTrialEndedRecently = Boolean(\n !license?.isTrial &&\n !window.strapi.isEE &&\n cachedTrialEndsAt &&\n isAfter(new Date(cachedTrialEndsAt), sevenDaysAgo)\n );\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (!previouslyOpen && isTrialEndedRecently) {\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"ghost\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <Flex\n direction=\"column\"\n alignItems=\"start\"\n justifyContent=\"stretch\"\n padding={8}\n gap={4}\n >\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.title',\n defaultMessage: 'Your trial has ended',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.description',\n defaultMessage:\n 'Your access to Growth plan features such as Content history, Releases and Single sign-On (SSO) has expired.',\n })}\n </Typography>\n <Box background=\"primary200\" padding={4} hasRadius>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.title',\n defaultMessage: 'Important to know:',\n })}\n </Typography>\n <ul style={{ listStyleType: 'disc', marginLeft: '1.5rem' }}>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item1',\n defaultMessage: 'Downgrading will remove access to the above features.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item2',\n defaultMessage: 'Document version history will be deleted.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item3',\n defaultMessage: 'All releases will be erased.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item4',\n defaultMessage:\n 'If you downgrade ensure to set a root admin password to keep access to the admin panel.',\n })}\n </Typography>\n </li>\n </ul>\n </Box>\n <Flex marginTop={4} gap={2}>\n <LinkButton href=\"https://billing.strapi.io/\" target=\"_blank\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.upgrade',\n defaultMessage: 'Stay on the Growth plan',\n })}\n </LinkButton>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.downgrade',\n defaultMessage: 'Downgrade to Community',\n })}\n </Button>\n </Flex>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n }\n\n return null;\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialEndedModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","cachedTrialEndsAt","undefined","license","useLicenseLimits","sevenDaysAgo","subDays","Date","isTrialEndedRecently","Boolean","isTrial","window","strapi","isEE","isAfter","handleClose","handleOnOpenChange","isOpen","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","background","hasRadius","ul","style","listStyleType","marginLeft","li","marginTop","LinkButton","href","target"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FreeTrialEndedModal.mjs","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialEndedModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, LinkButton, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { isAfter, subDays } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n`;\n\nexport const FreeTrialEndedModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_ENDED_MODAL',\n false\n );\n const [cachedTrialEndsAt] = useScopedPersistentState<string | undefined>(\n 'STRAPI_FREE_TRIAL_ENDS_AT',\n undefined\n );\n\n const { license } = useLicenseLimits();\n\n const sevenDaysAgo = subDays(new Date(), 7);\n\n // When the license is not a trial + not EE, and the cached trial end date is found in the localstorage, that means the trial has ended\n // We show the banner to encourage the user to upgrade (for 7 days after the trial ends)\n const isTrialEndedRecently = Boolean(\n !license?.isTrial &&\n !window.strapi.isEE &&\n cachedTrialEndsAt &&\n isAfter(new Date(cachedTrialEndsAt), sevenDaysAgo)\n );\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (!previouslyOpen && isTrialEndedRecently) {\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"ghost\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <Flex\n direction=\"column\"\n alignItems=\"start\"\n justifyContent=\"stretch\"\n padding={8}\n gap={4}\n >\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.title',\n defaultMessage: 'Your trial has ended',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.description',\n defaultMessage:\n 'Your access to Growth plan features such as Content history, Releases and Single sign-On (SSO) has expired.',\n })}\n </Typography>\n <Box background=\"primary200\" padding={4} hasRadius>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.title',\n defaultMessage: 'Important to know:',\n })}\n </Typography>\n <ul style={{ listStyleType: 'disc', marginLeft: '1.5rem' }}>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item1',\n defaultMessage: 'Downgrading will remove access to the above features.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item2',\n defaultMessage: 'Document version history will be deleted.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item3',\n defaultMessage: 'All releases will be erased.',\n })}\n </Typography>\n </li>\n <li>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.notice.item4',\n defaultMessage:\n 'If you downgrade ensure to set a root admin password to keep access to the admin panel.',\n })}\n </Typography>\n </li>\n </ul>\n </Box>\n <Flex marginTop={4} gap={2}>\n <LinkButton href=\"https://billing.strapi.io/\" target=\"_blank\">\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.upgrade',\n defaultMessage: 'Stay on the Growth plan',\n })}\n </LinkButton>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialEndedModal.button.downgrade',\n defaultMessage: 'Downgrade to Community',\n })}\n </Button>\n </Flex>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n }\n\n return null;\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialEndedModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","cachedTrialEndsAt","undefined","license","useLicenseLimits","sevenDaysAgo","subDays","Date","isTrialEndedRecently","Boolean","isTrial","window","strapi","isEE","isAfter","handleClose","handleOnOpenChange","isOpen","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","background","hasRadius","ul","style","listStyleType","marginLeft","li","marginTop","LinkButton","href","target"],"mappings":"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"}
|
|
@@ -5,19 +5,15 @@ var React = require('react');
|
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
6
|
var icons = require('@strapi/icons');
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
|
-
var
|
|
8
|
+
var styledComponents = require('styled-components');
|
|
9
9
|
var useLicenseLimits = require('../../../../../ee/admin/src/hooks/useLicenseLimits.js');
|
|
10
10
|
var freeTrial = require('../../../assets/images/free-trial.png.js');
|
|
11
11
|
var usePersistentState = require('../../../hooks/usePersistentState.js');
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
16
|
-
|
|
17
|
-
const StyledModalContent = styled__default.default(designSystem.Modal.Content)`
|
|
13
|
+
const StyledModalContent = styledComponents.styled(designSystem.Modal.Content)`
|
|
18
14
|
max-width: 51.6rem;
|
|
19
15
|
`;
|
|
20
|
-
const StyledModalBody =
|
|
16
|
+
const StyledModalBody = styledComponents.styled(designSystem.Modal.Body)`
|
|
21
17
|
padding: 0;
|
|
22
18
|
position: relative;
|
|
23
19
|
|
|
@@ -25,7 +21,7 @@ const StyledModalBody = styled__default.default(designSystem.Modal.Body)`
|
|
|
25
21
|
padding: 0;
|
|
26
22
|
}
|
|
27
23
|
`;
|
|
28
|
-
const StyledButton =
|
|
24
|
+
const StyledButton = styledComponents.styled(designSystem.Button)`
|
|
29
25
|
border: 0;
|
|
30
26
|
border-radius: 50%;
|
|
31
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FreeTrialWelcomeModal.js","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialWelcomeModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport lightIllustration from '../../../assets/images/free-trial.png';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n\n > span {\n line-height: 0;\n }\n`;\n\nexport const FreeTrialWelcomeModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_WELCOME_MODAL',\n false\n );\n const { license } = useLicenseLimits();\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (previouslyOpen || !license?.isTrial) {\n return null;\n }\n\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"tertiary\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <img src={lightIllustration} alt=\"free-trial\" width=\"100%\" height=\"100%\" />\n <Flex direction=\"column\" alignItems=\"start\" justifyContent=\"stretch\" padding={8} gap={4}>\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialWelcomeModal.title',\n defaultMessage: \"We're glad to have you on board\",\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialWelcomeModal.description1',\n defaultMessage:\n 'For the next 30 days, you will have full access to advanced features like Content History, Releases and Single Sign-On (SSO) – everything you need to explore the power of Strapi CMS.',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialWelcomeModal.description2',\n defaultMessage:\n 'Use this time to build, customize, and test your content workflows with complete flexibility!',\n })}\n </Typography>\n <Box marginTop={4}>\n <Button onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialWelcomeModal.button',\n defaultMessage: 'Start exploring',\n })}\n </Button>\n </Box>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialWelcomeModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","license","useLicenseLimits","handleClose","handleOnOpenChange","isOpen","isTrial","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","img","src","lightIllustration","alt","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","marginTop"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FreeTrialWelcomeModal.js","sources":["../../../../../../../admin/src/pages/Home/components/FreeTrialWelcomeModal.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits';\nimport lightIllustration from '../../../assets/images/free-trial.png';\nimport { useScopedPersistentState } from '../../../hooks/usePersistentState';\n\nconst StyledModalContent = styled(Modal.Content)`\n max-width: 51.6rem;\n`;\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n position: relative;\n\n > div {\n padding: 0;\n }\n`;\n\nconst StyledButton = styled(Button)`\n border: 0;\n border-radius: 50%;\n\n > span {\n line-height: 0;\n }\n`;\n\nexport const FreeTrialWelcomeModal = () => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(true);\n const [previouslyOpen, setPreviouslyOpen] = useScopedPersistentState(\n 'STRAPI_FREE_TRIAL_WELCOME_MODAL',\n false\n );\n const { license } = useLicenseLimits();\n\n const handleClose = () => {\n setPreviouslyOpen(true);\n setOpen(false);\n };\n\n const handleOnOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n setPreviouslyOpen(true);\n }\n\n setOpen(isOpen);\n };\n\n if (previouslyOpen || !license?.isTrial) {\n return null;\n }\n\n return (\n <Modal.Root open={open} onOpenChange={handleOnOpenChange}>\n <StyledModalContent aria-labelledby=\"title\">\n <StyledModalBody>\n <Box position=\"absolute\" top={0} right={0} padding={2}>\n <StyledButton\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n variant=\"tertiary\"\n width=\"2.4rem\"\n height=\"2.4rem\"\n onClick={handleClose}\n >\n <Cross />\n </StyledButton>\n </Box>\n <img src={lightIllustration} alt=\"free-trial\" width=\"100%\" height=\"100%\" />\n <Flex direction=\"column\" alignItems=\"start\" justifyContent=\"stretch\" padding={8} gap={4}>\n <Typography variant=\"alpha\" fontWeight=\"bold\" fontSize={4} id=\"title\">\n {formatMessage({\n id: 'app.components.FreeTrialWelcomeModal.title',\n defaultMessage: \"We're glad to have you on board\",\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialWelcomeModal.description1',\n defaultMessage:\n 'For the next 30 days, you will have full access to advanced features like Content History, Releases and Single Sign-On (SSO) – everything you need to explore the power of Strapi CMS.',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'app.components.FreeTrialWelcomeModal.description2',\n defaultMessage:\n 'Use this time to build, customize, and test your content workflows with complete flexibility!',\n })}\n </Typography>\n <Box marginTop={4}>\n <Button onClick={handleClose}>\n {formatMessage({\n id: 'app.components.FreeTrialWelcomeModal.button',\n defaultMessage: 'Start exploring',\n })}\n </Button>\n </Box>\n </Flex>\n </StyledModalBody>\n </StyledModalContent>\n </Modal.Root>\n );\n};\n"],"names":["StyledModalContent","styled","Modal","Content","StyledModalBody","Body","StyledButton","Button","FreeTrialWelcomeModal","formatMessage","useIntl","open","setOpen","useState","previouslyOpen","setPreviouslyOpen","useScopedPersistentState","license","useLicenseLimits","handleClose","handleOnOpenChange","isOpen","isTrial","_jsx","Root","onOpenChange","aria-labelledby","_jsxs","Box","position","top","right","padding","aria-label","id","defaultMessage","variant","width","height","onClick","Cross","img","src","lightIllustration","alt","Flex","direction","alignItems","justifyContent","gap","Typography","fontWeight","fontSize","marginTop"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { useState } from 'react';
|
|
|
3
3
|
import { Modal, Box, Flex, Typography, Button } from '@strapi/design-system';
|
|
4
4
|
import { Cross } from '@strapi/icons';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
|
-
import styled from 'styled-components';
|
|
6
|
+
import { styled } from 'styled-components';
|
|
7
7
|
import { useLicenseLimits } from '../../../../../ee/admin/src/hooks/useLicenseLimits.mjs';
|
|
8
8
|
import img from '../../../assets/images/free-trial.png.mjs';
|
|
9
9
|
import { useScopedPersistentState } from '../../../hooks/usePersistentState.mjs';
|