@strapi/admin 5.48.1 → 5.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js +33 -20
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +6 -1
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.js +3 -2
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/Context.js +4 -3
- package/dist/admin/admin/src/components/Context.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js +8 -4
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
- package/dist/admin/admin/src/components/ErrorElement.js +97 -2
- 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/Filters.js +3 -2
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Form.js +9 -5
- package/dist/admin/admin/src/components/Form.js.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 +3 -2
- package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Json.js +3 -2
- package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.js +3 -2
- package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.js +3 -2
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +3 -2
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.js +9 -3
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +6 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
- package/dist/admin/admin/src/components/LanguageProvider.js +5 -1
- package/dist/admin/admin/src/components/LanguageProvider.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +3 -2
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.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 -2
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.js +10 -0
- 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/NpsSurvey.js +4 -3
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js +3 -2
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/Pagination.js +3 -2
- package/dist/admin/admin/src/components/Pagination.js.map +1 -1
- package/dist/admin/admin/src/components/PluginsInitializer.js +3 -2
- package/dist/admin/admin/src/components/PluginsInitializer.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +6 -4
- 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 +3 -2
- package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
- package/dist/admin/admin/src/components/SearchInput.js +3 -2
- package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
- package/dist/admin/admin/src/components/Table.js +3 -2
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Theme.js +3 -2
- package/dist/admin/admin/src/components/Theme.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js +9 -5
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/core/apis/CustomFields.js +14 -10
- package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js +8 -4
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js +39 -33
- 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/features/Auth.js +78 -6
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +77 -6
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/BackButton.js +3 -2
- package/dist/admin/admin/src/features/BackButton.js.map +1 -1
- package/dist/admin/admin/src/features/Configuration.js +3 -2
- package/dist/admin/admin/src/features/Configuration.js.map +1 -1
- package/dist/admin/admin/src/features/Notifications.js +3 -2
- package/dist/admin/admin/src/features/Notifications.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +7 -3
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Widgets.js +3 -2
- package/dist/admin/admin/src/features/Widgets.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +3 -2
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAdminRoles.js +3 -2
- package/dist/admin/admin/src/hooks/useAdminRoles.js.map +1 -1
- package/dist/admin/admin/src/hooks/useControllableState.js +3 -2
- package/dist/admin/admin/src/hooks/useControllableState.js.map +1 -1
- package/dist/admin/admin/src/hooks/useDebounce.js +3 -2
- package/dist/admin/admin/src/hooks/useDebounce.js.map +1 -1
- package/dist/admin/admin/src/hooks/useDeviceType.js +3 -2
- package/dist/admin/admin/src/hooks/useDeviceType.js.map +1 -1
- package/dist/admin/admin/src/hooks/useElementOnScreen.js +3 -2
- package/dist/admin/admin/src/hooks/useElementOnScreen.js.map +1 -1
- package/dist/admin/admin/src/hooks/useEnterprise.js +3 -2
- package/dist/admin/admin/src/hooks/useEnterprise.js.map +1 -1
- package/dist/admin/admin/src/hooks/useFetchClient.js +3 -2
- package/dist/admin/admin/src/hooks/useFetchClient.js.map +1 -1
- package/dist/admin/admin/src/hooks/useForceUpdate.js +3 -2
- package/dist/admin/admin/src/hooks/useForceUpdate.js.map +1 -1
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +85 -15
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -1
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +82 -14
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useIsMounted.js +3 -2
- package/dist/admin/admin/src/hooks/useIsMounted.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMediaQuery.js +3 -2
- package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.js +7 -3
- package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useOnce.js +3 -2
- package/dist/admin/admin/src/hooks/useOnce.js.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/useRBAC.js +7 -3
- package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
- package/dist/admin/admin/src/hooks/useSettingsMenu.js +7 -3
- package/dist/admin/admin/src/hooks/useSettingsMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.js +5 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +15 -7
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -2
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.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/ForgotPassword.js +3 -2
- package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Login.js +8 -4
- package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Oops.js +3 -2
- package/dist/admin/admin/src/pages/Auth/components/Oops.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +9 -5
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +4 -3
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +3 -2
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +8 -4
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +7 -3
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +7 -3
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +8 -4
- package/dist/admin/admin/src/pages/ProfilePage.js.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/Tokens/FormHead.js +3 -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 +3 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +3 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js +3 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +7 -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 +5 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js +6 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +4 -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 -0
- 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 +7 -3
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +11 -3
- 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 +11 -4
- 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/ListPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +44 -6
- 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 -2
- 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/ConditionsModal.js +13 -7
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +15 -9
- 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/GlobalActions.js +9 -5
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +71 -27
- 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 +10 -6
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js +9 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js +26 -4
- 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/layouts.js +6 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js.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/Roles/utils/updateConditionsToFalse.js +8 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -5
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +3 -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/WebhookForm.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js +3 -2
- package/dist/admin/admin/src/pages/UseCasePage.js.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 +748 -265
- package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ja.json.mjs +745 -266
- 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/utils/getFetchClient.js +7 -2
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/locales.js +3 -2
- package/dist/admin/admin/src/utils/locales.js.map +1 -1
- package/dist/admin/admin/src/utils/objects.js +9 -4
- package/dist/admin/admin/src/utils/objects.js.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 +5 -1
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/urls.js +5 -1
- package/dist/admin/admin/src/utils/urls.js.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/admin/tests/utils.js +3 -2
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +7 -3
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js +3 -2
- package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.js +3 -2
- package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +3 -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/AuditLogs/hooks/useAuditLogsData.js +3 -2
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js +5 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +3 -2
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js +7 -3
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.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 +11 -5
- 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 +0 -1
- 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/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 +5 -6
- package/dist/admin/src/core/apis/Plugin.d.ts +1 -1
- package/dist/admin/src/core/apis/Widgets.d.ts +0 -1
- package/dist/admin/src/core/apis/router.d.ts +2 -3
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/utils/createHook.d.ts +4 -4
- 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 +2 -2
- package/dist/admin/src/hooks/useFetchClient.d.ts +1 -1
- package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +66 -12
- package/dist/admin/src/hooks/usePersistentState.d.ts +0 -1
- package/dist/admin/src/hooks/useQueryParams.d.ts +1 -1
- package/dist/admin/src/hooks/useThrottledCallback.d.ts +0 -1
- 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/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/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 +2 -2
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/apiTokens.d.ts +1 -1
- package/dist/admin/src/services/auth.d.ts +29 -27
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +7 -7
- package/dist/admin/src/services/webhooks.d.ts +2 -2
- package/dist/admin/src/translations/languageNativeNames.d.ts +1 -0
- package/dist/admin/src/utils/locales.d.ts +0 -1
- package/dist/admin/src/utils/retryDynamicImport.d.ts +19 -0
- package/dist/admin/src/utils/shims.d.ts +1 -1
- 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/services/ai.d.ts +2 -2
- 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/ee/server/src/controllers/authentication-utils/middlewares.js +5 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.js +5 -1
- package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/ee/server/src/controllers/user.js +6 -2
- package/dist/server/ee/server/src/controllers/user.js.map +1 -1
- package/dist/server/ee/server/src/services/auth.js +5 -1
- package/dist/server/ee/server/src/services/auth.js.map +1 -1
- package/dist/server/ee/server/src/services/user.js +8 -4
- package/dist/server/ee/server/src/services/user.js.map +1 -1
- package/dist/server/index.js +6 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/server/src/ai/services/ai.js +10 -4
- package/dist/server/server/src/ai/services/ai.js.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 +9 -4
- 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 +18 -6
- 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/controllers/user.js +3 -2
- package/dist/server/server/src/controllers/user.js.map +1 -1
- package/dist/server/server/src/controllers/webhooks.js +7 -2
- package/dist/server/server/src/controllers/webhooks.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +7 -2
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/policies/hasPermissions.js +7 -3
- package/dist/server/server/src/policies/hasPermissions.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js +9 -4
- 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/api-token.js +7 -3
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/auth.js +8 -3
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/content-type.js +6 -2
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/encryption.js +8 -4
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/passport.js +6 -2
- package/dist/server/server/src/services/passport.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +5 -1
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.js +5 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/query-builders.js +14 -10
- package/dist/server/server/src/services/permission/permissions-manager/query-builders.js.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/queries.js +5 -1
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/project-settings.js +6 -2
- package/dist/server/server/src/services/project-settings.js.map +1 -1
- package/dist/server/server/src/services/role.js +10 -5
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +2 -1
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/services/token.js +7 -2
- package/dist/server/server/src/services/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/permission.js +5 -1
- package/dist/server/server/src/services/transfer/permission.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.js +10 -5
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/user.js +10 -6
- package/dist/server/server/src/services/user.js.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-functions/check-fields-are-correctly-nested.js +5 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js +6 -2
- package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.js +6 -2
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/policies/hasPermissions.js +6 -2
- package/dist/server/server/src/validation/policies/hasPermissions.js.map +1 -1
- package/dist/server/shared/utils/session-auth.js +5 -1
- package/dist/server/shared/utils/session-auth.js.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 +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Date.js","sources":["../../../../../../admin/src/components/FormInputs/Date.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { DatePicker, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst MAX_DATE = new Date(2099, 11, 31);\n\nconst DateInput = React.forwardRef<HTMLInputElement, InputProps>(\n ({ name, required, label, hint, labelAction, type: _type, ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField(name);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n const [lastValidDate, setLastValidDate] = React.useState<Date | null>(null);\n\n const value = typeof field.value === 'string' ? new Date(field.value) : field.value;\n\n const handleDateChange = (date: Date | undefined) => {\n if (!date) {\n field.onChange(name, null);\n setLastValidDate(null);\n return;\n }\n\n // Convert to UTC midnight\n const utcDate = toUTCMidnight(date);\n // Save as ISO string in UTC format\n field.onChange(name, utcDate.toISOString().split('T')[0]);\n setLastValidDate(utcDate);\n };\n\n // Render the DatePicker with UTC date\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <DatePicker\n ref={composedRefs}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={handleDateChange}\n onClear={() => {\n field.onChange(name, null);\n setLastValidDate(null);\n return;\n }}\n onBlur={() => {\n // When the input is blurred, revert to the last valid date if the current value is invalid\n if (field.value && !value) {\n field.onChange(\n name,\n lastValidDate ? lastValidDate.toISOString().split('T')[0] : null\n );\n }\n }}\n value={value}\n maxDate={MAX_DATE}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\n// Ensure the conversion to UTC midnight\nconst toUTCMidnight = (date: Date) => {\n return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n};\n\nconst MemoizedDateInput = React.memo(DateInput);\n\nexport { MemoizedDateInput as DateInput };\n"],"names":["MAX_DATE","Date","DateInput","React","forwardRef","name","required","label","hint","labelAction","type","_type","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","lastValidDate","setLastValidDate","useState","value","handleDateChange","date","onChange","utcDate","toUTCMidnight","toISOString","split","_jsxs","Field","Root","error","_jsx","Label","action","DatePicker","clearLabel","id","defaultMessage","onClear","onBlur","maxDate","Hint","Error","UTC","getFullYear","getMonth","getDate","MemoizedDateInput","memo"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Date.js","sources":["../../../../../../admin/src/components/FormInputs/Date.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { DatePicker, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst MAX_DATE = new Date(2099, 11, 31);\n\nconst DateInput = React.forwardRef<HTMLInputElement, InputProps>(\n ({ name, required, label, hint, labelAction, type: _type, ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField(name);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n const [lastValidDate, setLastValidDate] = React.useState<Date | null>(null);\n\n const value = typeof field.value === 'string' ? new Date(field.value) : field.value;\n\n const handleDateChange = (date: Date | undefined) => {\n if (!date) {\n field.onChange(name, null);\n setLastValidDate(null);\n return;\n }\n\n // Convert to UTC midnight\n const utcDate = toUTCMidnight(date);\n // Save as ISO string in UTC format\n field.onChange(name, utcDate.toISOString().split('T')[0]);\n setLastValidDate(utcDate);\n };\n\n // Render the DatePicker with UTC date\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <DatePicker\n ref={composedRefs}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onChange={handleDateChange}\n onClear={() => {\n field.onChange(name, null);\n setLastValidDate(null);\n return;\n }}\n onBlur={() => {\n // When the input is blurred, revert to the last valid date if the current value is invalid\n if (field.value && !value) {\n field.onChange(\n name,\n lastValidDate ? lastValidDate.toISOString().split('T')[0] : null\n );\n }\n }}\n value={value}\n maxDate={MAX_DATE}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\n// Ensure the conversion to UTC midnight\nconst toUTCMidnight = (date: Date) => {\n return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n};\n\nconst MemoizedDateInput = React.memo(DateInput);\n\nexport { MemoizedDateInput as DateInput };\n"],"names":["MAX_DATE","Date","DateInput","React","forwardRef","name","required","label","hint","labelAction","type","_type","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","lastValidDate","setLastValidDate","useState","value","handleDateChange","date","onChange","utcDate","toUTCMidnight","toISOString","split","_jsxs","Field","Root","error","_jsx","Label","action","DatePicker","clearLabel","id","defaultMessage","onClear","onBlur","maxDate","Hint","Error","UTC","getFullYear","getMonth","getDate","MemoizedDateInput","memo"],"mappings":"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"}
|
|
@@ -6,7 +6,8 @@ var designSystem = require('@strapi/design-system');
|
|
|
6
6
|
var useFocusInputField = require('../../hooks/useFocusInputField.js');
|
|
7
7
|
var Form = require('../Form.js');
|
|
8
8
|
|
|
9
|
-
function
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
10
11
|
var n = Object.create(null);
|
|
11
12
|
if (e) {
|
|
12
13
|
Object.keys(e).forEach(function (k) {
|
|
@@ -23,7 +24,7 @@ function _interopNamespaceDefault(e) {
|
|
|
23
24
|
return Object.freeze(n);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
var React__namespace = /*#__PURE__*/
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
27
28
|
|
|
28
29
|
const JsonInput = /*#__PURE__*/ React__namespace.forwardRef(({ name, required, label, hint, labelAction, ...props }, ref)=>{
|
|
29
30
|
const field = Form.useField(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Json.js","sources":["../../../../../../admin/src/components/FormInputs/Json.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n JSONInput as JSONInputImpl,\n useComposedRefs,\n Field,\n JSONInputRef,\n} from '@strapi/design-system';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst JsonInput = React.forwardRef<JSONInputRef, InputProps>(\n ({ name, required, label, hint, labelAction, ...props }, ref) => {\n const field = useField(name);\n const fieldRef = useFocusInputField(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <JSONInputImpl\n ref={composedRefs}\n value={\n typeof field.value === 'object' ||\n typeof field.value === 'boolean' ||\n typeof field.value === 'number'\n ? JSON.stringify(field.value, null, 2)\n : field.value\n }\n onChange={(json) => {\n // Default to null when the field is not required and there is no input value\n const value = required && !json.length ? null : json;\n field.onChange(name, value);\n }}\n minHeight={`25.2rem`}\n maxHeight={`50.4rem`}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedJsonInput = React.memo(JsonInput);\n\nexport { MemoizedJsonInput as JsonInput };\n"],"names":["JsonInput","React","forwardRef","name","required","label","hint","labelAction","props","ref","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","JSONInputImpl","value","JSON","stringify","onChange","json","length","minHeight","maxHeight","Hint","Error","MemoizedJsonInput","memo"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Json.js","sources":["../../../../../../admin/src/components/FormInputs/Json.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n JSONInput as JSONInputImpl,\n useComposedRefs,\n Field,\n JSONInputRef,\n} from '@strapi/design-system';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { InputProps } from './types';\n\nconst JsonInput = React.forwardRef<JSONInputRef, InputProps>(\n ({ name, required, label, hint, labelAction, ...props }, ref) => {\n const field = useField(name);\n const fieldRef = useFocusInputField(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <JSONInputImpl\n ref={composedRefs}\n value={\n typeof field.value === 'object' ||\n typeof field.value === 'boolean' ||\n typeof field.value === 'number'\n ? JSON.stringify(field.value, null, 2)\n : field.value\n }\n onChange={(json) => {\n // Default to null when the field is not required and there is no input value\n const value = required && !json.length ? null : json;\n field.onChange(name, value);\n }}\n minHeight={`25.2rem`}\n maxHeight={`50.4rem`}\n {...props}\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedJsonInput = React.memo(JsonInput);\n\nexport { MemoizedJsonInput as JsonInput };\n"],"names":["JsonInput","React","forwardRef","name","required","label","hint","labelAction","props","ref","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","JSONInputImpl","value","JSON","stringify","onChange","json","length","minHeight","maxHeight","Hint","Error","MemoizedJsonInput","memo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAMA,0BAAYC,gBAAAA,CAAMC,UAAU,CAChC,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;AACvD,IAAA,MAAMC,QAAQC,aAAAA,CAASR,IAAAA,CAAAA;AACvB,IAAA,MAAMS,WAAWC,qCAAAA,CAAmBV,IAAAA,CAAAA;IAEpC,MAAMW,YAAAA,GAAeC,6BAAgBN,GAAAA,EAAKG,QAAAA,CAAAA;IAE1C,qBACEI,eAAA,CAACC,mBAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAEhB,IAAAA,EAAMA,IAAAA;QAAMG,IAAAA,EAAMA,IAAAA;QAAMF,QAAAA,EAAUA,QAAAA;;AAChE,0BAAAgB,cAAA,CAACH,mBAAMI,KAAK,EAAA;gBAACC,MAAAA,EAAQf,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCe,cAAA,CAACG,sBAAAA,EAAAA;gBACCd,GAAAA,EAAKK,YAAAA;gBACLU,KAAAA,EACE,OAAOd,KAAAA,CAAMc,KAAK,KAAK,QAAA,IACvB,OAAOd,KAAAA,CAAMc,KAAK,KAAK,SAAA,IACvB,OAAOd,KAAAA,CAAMc,KAAK,KAAK,QAAA,GACnBC,IAAAA,CAAKC,SAAS,CAAChB,KAAAA,CAAMc,KAAK,EAAE,IAAA,EAAM,CAAA,CAAA,GAClCd,KAAAA,CAAMc,KAAK;AAEjBG,gBAAAA,QAAAA,EAAU,CAACC,IAAAA,GAAAA;;AAET,oBAAA,MAAMJ,QAAQpB,QAAAA,IAAY,CAACwB,IAAAA,CAAKC,MAAM,GAAG,IAAA,GAAOD,IAAAA;oBAChDlB,KAAAA,CAAMiB,QAAQ,CAACxB,IAAAA,EAAMqB,KAAAA,CAAAA;AACvB,gBAAA,CAAA;gBACAM,SAAAA,EAAW,CAAC,OAAO,CAAC;gBACpBC,SAAAA,EAAW,CAAC,OAAO,CAAC;AACnB,gBAAA,GAAGvB;;AAEN,0BAAAY,cAAA,CAACH,mBAAMe,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAZ,cAAA,CAACH,mBAAMgB,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,iBAAAA,iBAAoBjC,gBAAAA,CAAMkC,IAAI,CAACnC,SAAAA;;;;"}
|
|
@@ -7,7 +7,8 @@ var reactDnd = require('react-dnd');
|
|
|
7
7
|
var styled = require('styled-components');
|
|
8
8
|
var widgetLayout = require('../utils/widgetLayout.js');
|
|
9
9
|
|
|
10
|
-
function
|
|
10
|
+
function _interopNamespace(e) {
|
|
11
|
+
if (e && e.__esModule) return e;
|
|
11
12
|
var n = Object.create(null);
|
|
12
13
|
if (e) {
|
|
13
14
|
Object.keys(e).forEach(function (k) {
|
|
@@ -24,7 +25,7 @@ function _interopNamespaceDefault(e) {
|
|
|
24
25
|
return Object.freeze(n);
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
var React__namespace = /*#__PURE__*/
|
|
28
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
29
|
|
|
29
30
|
const DROP_ZONE_SIZE = 20;
|
|
30
31
|
const getRowInfo = (row)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GapDropZone.js","sources":["../../../../../admin/src/components/GapDropZone.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\n// TODO: use @dnd-kit/core instead\nimport { useDrop } from 'react-dnd';\nimport { styled } from 'styled-components';\n\nimport {\n calculateWidgetRows,\n type WidgetRow,\n getWidgetElement,\n getWidgetGridContainer,\n} from '../utils/widgetLayout';\n\nimport type { WidgetWithUID } from '../core/apis/Widgets';\n\nexport const DROP_ZONE_SIZE = 20;\n\nexport interface GapDropZonePosition {\n insertIndex: number;\n position: { left: number; top: number; height: number; width: number };\n isVisible: boolean;\n type: 'vertical' | 'horizontal';\n isHorizontalDrop?: boolean;\n targetRowIndex?: number;\n}\n\ninterface GapDropZoneManagerProps {\n filteredWidgets: WidgetWithUID[];\n columnWidths: Record<string, number>;\n draggedWidgetId?: string;\n moveWidget: (id: string, to: number, targetRowIndex?: number, isHorizontalDrop?: boolean) => void;\n}\n\nconst getRowInfo = (row: WidgetRow) => {\n const firstWidgetElement = getWidgetElement(row.widgets[0].uid);\n const lastWidgetElement = getWidgetElement(row.widgets[row.widgets.length - 1].uid);\n const containerElement = getWidgetGridContainer();\n\n if (!firstWidgetElement || !lastWidgetElement || !containerElement) {\n return null;\n }\n\n const firstRect = firstWidgetElement.getBoundingClientRect();\n const lastRect = lastWidgetElement.getBoundingClientRect();\n const containerRect = containerElement.getBoundingClientRect();\n\n return {\n firstWidgetElement,\n lastWidgetElement,\n containerElement,\n firstRect,\n lastRect,\n containerRect,\n rowHeight: Math.max(firstRect.height, lastRect.height),\n rowTop: firstRect.top - containerRect.top,\n };\n};\n\nexport const addVerticalDropZones = (\n row: WidgetRow,\n rowInfo: ReturnType<typeof getRowInfo>,\n rowIndex: number\n): GapDropZonePosition[] => {\n if (!rowInfo) return [];\n\n const { containerRect, rowTop, rowHeight } = rowInfo;\n const widgetCount = row.widgets.length;\n\n // Get widget positions relative to container\n const widgetPositions = row.widgets\n .map((widget) => {\n const element = getWidgetElement(widget.uid);\n if (!element) return null;\n\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left - containerRect.left,\n width: rect.width,\n };\n })\n .filter((pos): pos is NonNullable<typeof pos> => pos !== null);\n\n if (widgetPositions.length !== widgetCount) return [];\n\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Always add drop zone before the first widget\n gapDropZones.push({\n insertIndex: row.startIndex,\n position: {\n left: widgetPositions[0].left - DROP_ZONE_SIZE,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n\n // Add drop zones between widgets\n widgetPositions.slice(0, -1).forEach((currentWidget, i) => {\n gapDropZones.push({\n insertIndex: row.startIndex + i + 1,\n position: {\n left: currentWidget.left + currentWidget.width,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n });\n\n // Always add drop zone after the last widget\n const lastWidget = widgetPositions[widgetCount - 1];\n gapDropZones.push({\n insertIndex: row.endIndex + 1,\n position: {\n left: lastWidget.left + lastWidget.width,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n\n return gapDropZones;\n};\n\nexport const addHorizontalDropZones = (\n row: WidgetRow,\n rowIndex: number,\n rowInfo: ReturnType<typeof getRowInfo>,\n widgetRows: WidgetRow[],\n filteredWidgets: WidgetWithUID[]\n): GapDropZonePosition[] => {\n if (!rowInfo) return [];\n\n // Don't show horizontal drop zones if there's only one row with one widget\n if (widgetRows.length === 1 && row.widgets.length === 1) return [];\n\n const { containerRect } = rowInfo;\n const containerWidth = containerRect.width;\n const horizontalDropZoneHeight = DROP_ZONE_SIZE;\n\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Add horizontal drop zone above the first row\n if (rowIndex === 0) {\n const firstRowRect = rowInfo.firstRect;\n const firstRowTop = firstRowRect.top - containerRect.top;\n\n gapDropZones.push({\n insertIndex: 0,\n position: {\n left: 0,\n top: firstRowTop - horizontalDropZoneHeight,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n\n // Add horizontal drop zone below the current row (between rows or after last row)\n if (rowIndex < widgetRows.length - 1) {\n // Between rows: position above the next row\n const nextRow = widgetRows[rowIndex + 1];\n const nextRowFirstWidgetElement = getWidgetElement(nextRow.widgets[0].uid);\n\n if (nextRowFirstWidgetElement) {\n const nextRowRect = nextRowFirstWidgetElement.getBoundingClientRect();\n const nextRowTop = nextRowRect.top - containerRect.top;\n\n gapDropZones.push({\n insertIndex: row.endIndex + 1,\n position: {\n left: 0,\n top: nextRowTop - horizontalDropZoneHeight,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n } else {\n // After the last row: position below the current row\n const lastRowRect = rowInfo.lastRect;\n const lastRowBottom = lastRowRect.bottom - containerRect.top;\n\n gapDropZones.push({\n insertIndex: filteredWidgets.length,\n position: {\n left: 0,\n top: lastRowBottom,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n\n return gapDropZones;\n};\n\nexport const GapDropZoneManager = ({\n filteredWidgets,\n columnWidths,\n draggedWidgetId,\n moveWidget,\n}: GapDropZoneManagerProps) => {\n const [positions, setPositions] = React.useState<GapDropZonePosition[]>([]);\n\n // Calculate widget rows\n const widgetRows = React.useMemo(() => {\n return calculateWidgetRows(filteredWidgets, columnWidths);\n }, [filteredWidgets, columnWidths]);\n\n // Main function to calculate GapDropZone positions\n const calculateGapDropZonePositions = React.useCallback(() => {\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Find which row the dragged widget is from\n const draggedWidgetRow = draggedWidgetId\n ? widgetRows.find((row) => row.widgets.some((widget) => widget.uid === draggedWidgetId))\n : null;\n\n widgetRows.forEach((row, rowIndex) => {\n const rowInfo = getRowInfo(row);\n if (!rowInfo) return;\n\n const widgetCount = row.widgets.length;\n\n // Determine if we should show vertical drop zones for this row\n const isDraggingFromThisRow = draggedWidgetRow && draggedWidgetRow === row;\n const isDraggingFromAnotherRow = draggedWidgetRow && draggedWidgetRow !== row;\n const canAcceptMoreWidgets = widgetCount < 3;\n\n const shouldShowVerticalDropZones =\n isDraggingFromThisRow || (isDraggingFromAnotherRow && canAcceptMoreWidgets);\n\n // Add vertical drop zones based on widget count\n if (shouldShowVerticalDropZones) {\n const verticalDropZones = addVerticalDropZones(row, rowInfo, rowIndex);\n gapDropZones.push(...verticalDropZones);\n }\n\n // Add horizontal drop zones\n const horizontalDropZones = addHorizontalDropZones(\n row,\n rowIndex,\n rowInfo,\n widgetRows,\n filteredWidgets\n );\n gapDropZones.push(...horizontalDropZones);\n });\n\n return gapDropZones;\n }, [widgetRows, draggedWidgetId, filteredWidgets]);\n\n React.useLayoutEffect(() => {\n const updatePositions = () => {\n const newPositions = calculateGapDropZonePositions();\n setPositions(newPositions);\n };\n\n updatePositions();\n\n // Update positions on container resize using ResizeObserver\n const containerElement = getWidgetGridContainer();\n if (!containerElement) return;\n\n const resizeObserver = new ResizeObserver(() => {\n updatePositions();\n });\n\n resizeObserver.observe(containerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calculateGapDropZonePositions]);\n\n return positions.map((gapDropZone) => (\n <GapDropZone\n key={`gap-drop-zone-${gapDropZone.type}-${gapDropZone.insertIndex}-${gapDropZone.targetRowIndex ?? 'no-row'}`}\n insertIndex={gapDropZone.insertIndex}\n position={gapDropZone.position}\n isVisible={gapDropZone.isVisible}\n type={gapDropZone.type}\n moveWidget={moveWidget}\n targetRowIndex={gapDropZone.targetRowIndex}\n />\n ));\n};\n\ninterface GapDropZoneProps {\n insertIndex: number;\n position: { left: number; top: number; height: number; width: number };\n isVisible: boolean;\n type: 'vertical' | 'horizontal';\n moveWidget: (id: string, to: number, targetRowIndex?: number, isHorizontalDrop?: boolean) => void;\n targetRowIndex?: number;\n}\n\nconst GapDropZoneContainer = styled(Box)<{\n $isOver: boolean;\n}>`\n background-color: ${({ $isOver, theme }) =>\n $isOver ? `${theme.colors.primary100}` : 'transparent'};\n border: ${({ $isOver, theme }) =>\n $isOver ? `2px solid ${theme.colors.primary500}` : '2px solid transparent'};\n opacity: ${({ $isOver }) => ($isOver ? 1 : 0.6)};\n transition: all 0.2s ease-in-out;\n cursor: pointer;\n border-radius: ${({ theme }) => theme.borderRadius};\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n bottom: 0;\n width: ${DROP_ZONE_SIZE}px;\n z-index: 1;\n`;\n\nconst GapDropZone = ({\n insertIndex,\n position,\n isVisible,\n type,\n moveWidget,\n targetRowIndex,\n}: GapDropZoneProps) => {\n const isHorizontalDrop = type === 'horizontal';\n\n const [{ isOver }, drop] = useDrop(\n () => ({\n accept: 'widget',\n drop: (item: { id: string }) => {\n moveWidget(item.id, insertIndex, targetRowIndex, isHorizontalDrop);\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n }),\n [insertIndex, isHorizontalDrop, moveWidget, targetRowIndex]\n );\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <GapDropZoneContainer\n ref={drop}\n $isOver={isOver}\n style={{\n transform: `translate(${position.left}px, ${position.top}px)`,\n height: `${position.height}px`,\n width: `${position.width}px`,\n }}\n />\n );\n};\n"],"names":["DROP_ZONE_SIZE","getRowInfo","row","firstWidgetElement","getWidgetElement","widgets","uid","lastWidgetElement","length","containerElement","getWidgetGridContainer","firstRect","getBoundingClientRect","lastRect","containerRect","rowHeight","Math","max","height","rowTop","top","addVerticalDropZones","rowInfo","rowIndex","widgetCount","widgetPositions","map","widget","element","rect","left","width","filter","pos","gapDropZones","push","insertIndex","startIndex","position","isVisible","type","targetRowIndex","slice","forEach","currentWidget","i","lastWidget","endIndex","addHorizontalDropZones","widgetRows","filteredWidgets","containerWidth","horizontalDropZoneHeight","firstRowRect","firstRowTop","isHorizontalDrop","nextRow","nextRowFirstWidgetElement","nextRowRect","nextRowTop","lastRowRect","lastRowBottom","bottom","GapDropZoneManager","columnWidths","draggedWidgetId","moveWidget","positions","setPositions","React","useState","useMemo","calculateWidgetRows","calculateGapDropZonePositions","useCallback","draggedWidgetRow","find","some","isDraggingFromThisRow","isDraggingFromAnotherRow","canAcceptMoreWidgets","shouldShowVerticalDropZones","verticalDropZones","horizontalDropZones","useLayoutEffect","updatePositions","newPositions","resizeObserver","ResizeObserver","observe","disconnect","gapDropZone","_jsx","GapDropZone","GapDropZoneContainer","styled","Box","$isOver","theme","colors","primary100","primary500","borderRadius","isOver","drop","useDrop","accept","item","id","collect","monitor","ref","style","transform"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GapDropZone.js","sources":["../../../../../admin/src/components/GapDropZone.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\n// TODO: use @dnd-kit/core instead\nimport { useDrop } from 'react-dnd';\nimport { styled } from 'styled-components';\n\nimport {\n calculateWidgetRows,\n type WidgetRow,\n getWidgetElement,\n getWidgetGridContainer,\n} from '../utils/widgetLayout';\n\nimport type { WidgetWithUID } from '../core/apis/Widgets';\n\nexport const DROP_ZONE_SIZE = 20;\n\nexport interface GapDropZonePosition {\n insertIndex: number;\n position: { left: number; top: number; height: number; width: number };\n isVisible: boolean;\n type: 'vertical' | 'horizontal';\n isHorizontalDrop?: boolean;\n targetRowIndex?: number;\n}\n\ninterface GapDropZoneManagerProps {\n filteredWidgets: WidgetWithUID[];\n columnWidths: Record<string, number>;\n draggedWidgetId?: string;\n moveWidget: (id: string, to: number, targetRowIndex?: number, isHorizontalDrop?: boolean) => void;\n}\n\nconst getRowInfo = (row: WidgetRow) => {\n const firstWidgetElement = getWidgetElement(row.widgets[0].uid);\n const lastWidgetElement = getWidgetElement(row.widgets[row.widgets.length - 1].uid);\n const containerElement = getWidgetGridContainer();\n\n if (!firstWidgetElement || !lastWidgetElement || !containerElement) {\n return null;\n }\n\n const firstRect = firstWidgetElement.getBoundingClientRect();\n const lastRect = lastWidgetElement.getBoundingClientRect();\n const containerRect = containerElement.getBoundingClientRect();\n\n return {\n firstWidgetElement,\n lastWidgetElement,\n containerElement,\n firstRect,\n lastRect,\n containerRect,\n rowHeight: Math.max(firstRect.height, lastRect.height),\n rowTop: firstRect.top - containerRect.top,\n };\n};\n\nexport const addVerticalDropZones = (\n row: WidgetRow,\n rowInfo: ReturnType<typeof getRowInfo>,\n rowIndex: number\n): GapDropZonePosition[] => {\n if (!rowInfo) return [];\n\n const { containerRect, rowTop, rowHeight } = rowInfo;\n const widgetCount = row.widgets.length;\n\n // Get widget positions relative to container\n const widgetPositions = row.widgets\n .map((widget) => {\n const element = getWidgetElement(widget.uid);\n if (!element) return null;\n\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left - containerRect.left,\n width: rect.width,\n };\n })\n .filter((pos): pos is NonNullable<typeof pos> => pos !== null);\n\n if (widgetPositions.length !== widgetCount) return [];\n\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Always add drop zone before the first widget\n gapDropZones.push({\n insertIndex: row.startIndex,\n position: {\n left: widgetPositions[0].left - DROP_ZONE_SIZE,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n\n // Add drop zones between widgets\n widgetPositions.slice(0, -1).forEach((currentWidget, i) => {\n gapDropZones.push({\n insertIndex: row.startIndex + i + 1,\n position: {\n left: currentWidget.left + currentWidget.width,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n });\n\n // Always add drop zone after the last widget\n const lastWidget = widgetPositions[widgetCount - 1];\n gapDropZones.push({\n insertIndex: row.endIndex + 1,\n position: {\n left: lastWidget.left + lastWidget.width,\n top: rowTop,\n height: rowHeight,\n width: DROP_ZONE_SIZE,\n },\n isVisible: true,\n type: 'vertical',\n targetRowIndex: rowIndex,\n });\n\n return gapDropZones;\n};\n\nexport const addHorizontalDropZones = (\n row: WidgetRow,\n rowIndex: number,\n rowInfo: ReturnType<typeof getRowInfo>,\n widgetRows: WidgetRow[],\n filteredWidgets: WidgetWithUID[]\n): GapDropZonePosition[] => {\n if (!rowInfo) return [];\n\n // Don't show horizontal drop zones if there's only one row with one widget\n if (widgetRows.length === 1 && row.widgets.length === 1) return [];\n\n const { containerRect } = rowInfo;\n const containerWidth = containerRect.width;\n const horizontalDropZoneHeight = DROP_ZONE_SIZE;\n\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Add horizontal drop zone above the first row\n if (rowIndex === 0) {\n const firstRowRect = rowInfo.firstRect;\n const firstRowTop = firstRowRect.top - containerRect.top;\n\n gapDropZones.push({\n insertIndex: 0,\n position: {\n left: 0,\n top: firstRowTop - horizontalDropZoneHeight,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n\n // Add horizontal drop zone below the current row (between rows or after last row)\n if (rowIndex < widgetRows.length - 1) {\n // Between rows: position above the next row\n const nextRow = widgetRows[rowIndex + 1];\n const nextRowFirstWidgetElement = getWidgetElement(nextRow.widgets[0].uid);\n\n if (nextRowFirstWidgetElement) {\n const nextRowRect = nextRowFirstWidgetElement.getBoundingClientRect();\n const nextRowTop = nextRowRect.top - containerRect.top;\n\n gapDropZones.push({\n insertIndex: row.endIndex + 1,\n position: {\n left: 0,\n top: nextRowTop - horizontalDropZoneHeight,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n } else {\n // After the last row: position below the current row\n const lastRowRect = rowInfo.lastRect;\n const lastRowBottom = lastRowRect.bottom - containerRect.top;\n\n gapDropZones.push({\n insertIndex: filteredWidgets.length,\n position: {\n left: 0,\n top: lastRowBottom,\n height: horizontalDropZoneHeight,\n width: containerWidth,\n },\n isVisible: true,\n type: 'horizontal',\n isHorizontalDrop: true,\n });\n }\n\n return gapDropZones;\n};\n\nexport const GapDropZoneManager = ({\n filteredWidgets,\n columnWidths,\n draggedWidgetId,\n moveWidget,\n}: GapDropZoneManagerProps) => {\n const [positions, setPositions] = React.useState<GapDropZonePosition[]>([]);\n\n // Calculate widget rows\n const widgetRows = React.useMemo(() => {\n return calculateWidgetRows(filteredWidgets, columnWidths);\n }, [filteredWidgets, columnWidths]);\n\n // Main function to calculate GapDropZone positions\n const calculateGapDropZonePositions = React.useCallback(() => {\n const gapDropZones: GapDropZonePosition[] = [];\n\n // Find which row the dragged widget is from\n const draggedWidgetRow = draggedWidgetId\n ? widgetRows.find((row) => row.widgets.some((widget) => widget.uid === draggedWidgetId))\n : null;\n\n widgetRows.forEach((row, rowIndex) => {\n const rowInfo = getRowInfo(row);\n if (!rowInfo) return;\n\n const widgetCount = row.widgets.length;\n\n // Determine if we should show vertical drop zones for this row\n const isDraggingFromThisRow = draggedWidgetRow && draggedWidgetRow === row;\n const isDraggingFromAnotherRow = draggedWidgetRow && draggedWidgetRow !== row;\n const canAcceptMoreWidgets = widgetCount < 3;\n\n const shouldShowVerticalDropZones =\n isDraggingFromThisRow || (isDraggingFromAnotherRow && canAcceptMoreWidgets);\n\n // Add vertical drop zones based on widget count\n if (shouldShowVerticalDropZones) {\n const verticalDropZones = addVerticalDropZones(row, rowInfo, rowIndex);\n gapDropZones.push(...verticalDropZones);\n }\n\n // Add horizontal drop zones\n const horizontalDropZones = addHorizontalDropZones(\n row,\n rowIndex,\n rowInfo,\n widgetRows,\n filteredWidgets\n );\n gapDropZones.push(...horizontalDropZones);\n });\n\n return gapDropZones;\n }, [widgetRows, draggedWidgetId, filteredWidgets]);\n\n React.useLayoutEffect(() => {\n const updatePositions = () => {\n const newPositions = calculateGapDropZonePositions();\n setPositions(newPositions);\n };\n\n updatePositions();\n\n // Update positions on container resize using ResizeObserver\n const containerElement = getWidgetGridContainer();\n if (!containerElement) return;\n\n const resizeObserver = new ResizeObserver(() => {\n updatePositions();\n });\n\n resizeObserver.observe(containerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calculateGapDropZonePositions]);\n\n return positions.map((gapDropZone) => (\n <GapDropZone\n key={`gap-drop-zone-${gapDropZone.type}-${gapDropZone.insertIndex}-${gapDropZone.targetRowIndex ?? 'no-row'}`}\n insertIndex={gapDropZone.insertIndex}\n position={gapDropZone.position}\n isVisible={gapDropZone.isVisible}\n type={gapDropZone.type}\n moveWidget={moveWidget}\n targetRowIndex={gapDropZone.targetRowIndex}\n />\n ));\n};\n\ninterface GapDropZoneProps {\n insertIndex: number;\n position: { left: number; top: number; height: number; width: number };\n isVisible: boolean;\n type: 'vertical' | 'horizontal';\n moveWidget: (id: string, to: number, targetRowIndex?: number, isHorizontalDrop?: boolean) => void;\n targetRowIndex?: number;\n}\n\nconst GapDropZoneContainer = styled(Box)<{\n $isOver: boolean;\n}>`\n background-color: ${({ $isOver, theme }) =>\n $isOver ? `${theme.colors.primary100}` : 'transparent'};\n border: ${({ $isOver, theme }) =>\n $isOver ? `2px solid ${theme.colors.primary500}` : '2px solid transparent'};\n opacity: ${({ $isOver }) => ($isOver ? 1 : 0.6)};\n transition: all 0.2s ease-in-out;\n cursor: pointer;\n border-radius: ${({ theme }) => theme.borderRadius};\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n bottom: 0;\n width: ${DROP_ZONE_SIZE}px;\n z-index: 1;\n`;\n\nconst GapDropZone = ({\n insertIndex,\n position,\n isVisible,\n type,\n moveWidget,\n targetRowIndex,\n}: GapDropZoneProps) => {\n const isHorizontalDrop = type === 'horizontal';\n\n const [{ isOver }, drop] = useDrop(\n () => ({\n accept: 'widget',\n drop: (item: { id: string }) => {\n moveWidget(item.id, insertIndex, targetRowIndex, isHorizontalDrop);\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n }),\n [insertIndex, isHorizontalDrop, moveWidget, targetRowIndex]\n );\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <GapDropZoneContainer\n ref={drop}\n $isOver={isOver}\n style={{\n transform: `translate(${position.left}px, ${position.top}px)`,\n height: `${position.height}px`,\n width: `${position.width}px`,\n }}\n />\n );\n};\n"],"names":["DROP_ZONE_SIZE","getRowInfo","row","firstWidgetElement","getWidgetElement","widgets","uid","lastWidgetElement","length","containerElement","getWidgetGridContainer","firstRect","getBoundingClientRect","lastRect","containerRect","rowHeight","Math","max","height","rowTop","top","addVerticalDropZones","rowInfo","rowIndex","widgetCount","widgetPositions","map","widget","element","rect","left","width","filter","pos","gapDropZones","push","insertIndex","startIndex","position","isVisible","type","targetRowIndex","slice","forEach","currentWidget","i","lastWidget","endIndex","addHorizontalDropZones","widgetRows","filteredWidgets","containerWidth","horizontalDropZoneHeight","firstRowRect","firstRowTop","isHorizontalDrop","nextRow","nextRowFirstWidgetElement","nextRowRect","nextRowTop","lastRowRect","lastRowBottom","bottom","GapDropZoneManager","columnWidths","draggedWidgetId","moveWidget","positions","setPositions","React","useState","useMemo","calculateWidgetRows","calculateGapDropZonePositions","useCallback","draggedWidgetRow","find","some","isDraggingFromThisRow","isDraggingFromAnotherRow","canAcceptMoreWidgets","shouldShowVerticalDropZones","verticalDropZones","horizontalDropZones","useLayoutEffect","updatePositions","newPositions","resizeObserver","ResizeObserver","observe","disconnect","gapDropZone","_jsx","GapDropZone","GapDropZoneContainer","styled","Box","$isOver","theme","colors","primary100","primary500","borderRadius","isOver","drop","useDrop","accept","item","id","collect","monitor","ref","style","transform"],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@ var Context = require('../Context.js');
|
|
|
10
10
|
var Tours = require('./Tours.js');
|
|
11
11
|
var migrations = require('./utils/migrations.js');
|
|
12
12
|
|
|
13
|
-
function
|
|
13
|
+
function _interopNamespace(e) {
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
14
15
|
var n = Object.create(null);
|
|
15
16
|
if (e) {
|
|
16
17
|
Object.keys(e).forEach(function (k) {
|
|
@@ -27,7 +28,7 @@ function _interopNamespaceDefault(e) {
|
|
|
27
28
|
return Object.freeze(n);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
var React__namespace = /*#__PURE__*/
|
|
31
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
31
32
|
|
|
32
33
|
const [GuidedTourProviderImpl, useGuidedTour] = Context.createContext('GuidedTour');
|
|
33
34
|
const getInitialTourState = (tours)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Context.js","sources":["../../../../../../admin/src/components/GuidedTour/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\n\nimport { useTracking } from '../../features/Tracking';\nimport { useIsDesktop } from '../../hooks/useMediaQuery';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { createContext } from '../Context';\n\nimport { type Tours, tours as guidedTours } from './Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\nimport { migrateTours } from './utils/migrations';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ntype ValidTourName = keyof Tours;\n\n/**\n * Derive the union of all string literal values from GUIDED_TOUR_REQUIRED_ACTIONS\n * (ie didCreateContentTypeSchema | didCreateContent etc...)\n */\ntype ValueOf<T> = T[keyof T];\ntype NonEmptyValueOf<T> = T extends Record<string, never> ? never : ValueOf<T>;\nexport type CompletedActions = NonEmptyValueOf<ValueOf<typeof GUIDED_TOUR_REQUIRED_ACTIONS>>[];\n\ntype Action =\n | {\n type: 'next_step';\n payload: ValidTourName;\n }\n | {\n type: 'previous_step';\n payload: ValidTourName;\n }\n | {\n type: 'go_to_step';\n payload: {\n tourName: ValidTourName;\n step: number;\n };\n }\n | {\n type: 'skip_tour';\n payload: ValidTourName;\n }\n | {\n type: 'skip_all_tours';\n }\n | {\n type: 'reset_all_tours';\n }\n | {\n type: 'set_completed_actions';\n payload: CompletedActions;\n }\n | {\n type: 'remove_completed_action';\n payload: ValueOf<CompletedActions>;\n }\n | {\n type: 'set_tour_type';\n payload: {\n tourName: ValidTourName;\n tourType: 'ContentTypeBuilderAI' | 'ContentTypeBuilderNoAI';\n };\n }\n | {\n type: 'set_hidden';\n payload: boolean;\n };\n\ntype TourState = Record<\n ValidTourName,\n { currentStep: number; isCompleted: boolean; tourType?: string }\n>;\ntype State = {\n tours: TourState;\n enabled: boolean;\n hidden?: boolean;\n completedActions: CompletedActions;\n};\n\nconst [GuidedTourProviderImpl, useGuidedTour] = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n}>('GuidedTour');\n\nconst getInitialTourState = (tours: Tours) => {\n return Object.keys(tours).reduce((acc, tourName) => {\n acc[tourName as ValidTourName] = {\n currentStep: 0,\n isCompleted: false,\n tourType: undefined,\n };\n\n return acc;\n }, {} as TourState);\n};\n\nconst getCompletedTours = (tours: TourState): ValidTourName[] => {\n return Object.keys(tours).filter(\n (tourName) => tours[tourName as ValidTourName].isCompleted\n ) as ValidTourName[];\n};\n\nconst areAllToursCompleted = (tours: TourState) => Object.values(tours).every((t) => t.isCompleted);\n\nfunction reducer(state: State, action: Action): State {\n return produce(state, (draft) => {\n if (action.type === 'next_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n const tourLength = guidedTours[action.payload]._meta.totalStepCount;\n\n const nextStep = currentStep + 1;\n draft.tours[action.payload].currentStep = nextStep;\n draft.tours[action.payload].isCompleted = nextStep >= tourLength;\n }\n\n if (action.type === 'previous_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n\n if (currentStep <= 0) return;\n\n const previousStep = currentStep - 1;\n draft.tours[action.payload].currentStep = previousStep;\n }\n\n if (action.type === 'skip_tour') {\n draft.tours[action.payload].isCompleted = true;\n }\n\n if (action.type === 'set_completed_actions') {\n draft.completedActions = [...new Set([...draft.completedActions, ...action.payload])];\n }\n\n if (action.type === 'remove_completed_action') {\n draft.completedActions = draft.completedActions.filter(\n (completedAction) => completedAction !== action.payload\n );\n }\n\n if (action.type === 'skip_all_tours') {\n draft.enabled = false;\n }\n\n if (action.type === 'set_hidden') {\n draft.hidden = action.payload;\n }\n\n if (action.type === 'reset_all_tours') {\n draft.enabled = true;\n draft.tours = getInitialTourState(guidedTours);\n draft.completedActions = [];\n }\n\n if (action.type === 'go_to_step') {\n draft.tours[action.payload.tourName].currentStep = action.payload.step;\n }\n\n if (action.type === 'set_tour_type') {\n const { tourName, tourType } = action.payload;\n const currentTour = draft.tours[tourName];\n\n // If tour type changes and tour is not completed, reset to step 0\n if (currentTour.tourType && currentTour.tourType !== tourType && !currentTour.isCompleted) {\n currentTour.currentStep = 0;\n }\n\n currentTour.tourType = tourType;\n }\n });\n}\n\nconst STORAGE_KEY = 'STRAPI_GUIDED_TOUR';\nconst GuidedTourContext = ({\n children,\n enabled = true,\n}: {\n children: React.ReactNode;\n enabled?: boolean;\n}) => {\n const isDesktop = useIsDesktop();\n const { trackUsage } = useTracking();\n const [storedTours, setStoredTours] = usePersistentState<State>(STORAGE_KEY, {\n tours: getInitialTourState(guidedTours),\n enabled,\n hidden: !isDesktop,\n completedActions: [],\n });\n const migratedTourState = migrateTours(storedTours);\n const [state, dispatch] = React.useReducer(reducer, migratedTourState);\n\n // Watch for changes to enabled prop to update state\n React.useEffect(() => {\n dispatch({ type: 'set_hidden', payload: !isDesktop });\n }, [isDesktop]);\n\n // Sync into usePersistentState in the layout phase so localStorage is updated before the\n // browser follows an external link (e.g. Strapi Cloud \"Read documentation\").\n React.useLayoutEffect(() => {\n setStoredTours(state);\n }, [state, setStoredTours]);\n\n // Derive all completed tours from state\n const currentAllCompletedState = areAllToursCompleted(state.tours);\n // Store completed state in ref to survive a re-render,\n // when current state changes this will persist and be used for comparison\n const previousAllCompletedStateRef = React.useRef(currentAllCompletedState);\n React.useEffect(() => {\n const previousAllCompletedState = previousAllCompletedStateRef.current;\n // When the previous state was not complete but the current state is now complete, fire the event\n if (!previousAllCompletedState && currentAllCompletedState) {\n trackUsage('didCompleteGuidedTour', { name: 'all' });\n }\n\n // When the current state has all tours completed so will the previous state, the tracking event won't fire again\n previousAllCompletedStateRef.current = currentAllCompletedState;\n }, [currentAllCompletedState, trackUsage]);\n\n return (\n <GuidedTourProviderImpl state={state} dispatch={dispatch}>\n {children}\n </GuidedTourProviderImpl>\n );\n};\n\nexport type { Action, State, ValidTourName };\nexport { GuidedTourContext, useGuidedTour, reducer, getCompletedTours };\n"],"names":["GuidedTourProviderImpl","useGuidedTour","createContext","getInitialTourState","tours","Object","keys","reduce","acc","tourName","currentStep","isCompleted","tourType","undefined","getCompletedTours","filter","areAllToursCompleted","values","every","t","reducer","state","action","produce","draft","type","payload","tourLength","guidedTours","_meta","totalStepCount","nextStep","previousStep","completedActions","Set","completedAction","enabled","hidden","step","currentTour","STORAGE_KEY","GuidedTourContext","children","isDesktop","useIsDesktop","trackUsage","useTracking","storedTours","setStoredTours","usePersistentState","migratedTourState","migrateTours","dispatch","React","useReducer","useEffect","useLayoutEffect","currentAllCompletedState","previousAllCompletedStateRef","useRef","previousAllCompletedState","current","name","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Context.js","sources":["../../../../../../admin/src/components/GuidedTour/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { produce } from 'immer';\n\nimport { useTracking } from '../../features/Tracking';\nimport { useIsDesktop } from '../../hooks/useMediaQuery';\nimport { usePersistentState } from '../../hooks/usePersistentState';\nimport { createContext } from '../Context';\n\nimport { type Tours, tours as guidedTours } from './Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\nimport { migrateTours } from './utils/migrations';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourProvider\n * -----------------------------------------------------------------------------------------------*/\n\ntype ValidTourName = keyof Tours;\n\n/**\n * Derive the union of all string literal values from GUIDED_TOUR_REQUIRED_ACTIONS\n * (ie didCreateContentTypeSchema | didCreateContent etc...)\n */\ntype ValueOf<T> = T[keyof T];\ntype NonEmptyValueOf<T> = T extends Record<string, never> ? never : ValueOf<T>;\nexport type CompletedActions = NonEmptyValueOf<ValueOf<typeof GUIDED_TOUR_REQUIRED_ACTIONS>>[];\n\ntype Action =\n | {\n type: 'next_step';\n payload: ValidTourName;\n }\n | {\n type: 'previous_step';\n payload: ValidTourName;\n }\n | {\n type: 'go_to_step';\n payload: {\n tourName: ValidTourName;\n step: number;\n };\n }\n | {\n type: 'skip_tour';\n payload: ValidTourName;\n }\n | {\n type: 'skip_all_tours';\n }\n | {\n type: 'reset_all_tours';\n }\n | {\n type: 'set_completed_actions';\n payload: CompletedActions;\n }\n | {\n type: 'remove_completed_action';\n payload: ValueOf<CompletedActions>;\n }\n | {\n type: 'set_tour_type';\n payload: {\n tourName: ValidTourName;\n tourType: 'ContentTypeBuilderAI' | 'ContentTypeBuilderNoAI';\n };\n }\n | {\n type: 'set_hidden';\n payload: boolean;\n };\n\ntype TourState = Record<\n ValidTourName,\n { currentStep: number; isCompleted: boolean; tourType?: string }\n>;\ntype State = {\n tours: TourState;\n enabled: boolean;\n hidden?: boolean;\n completedActions: CompletedActions;\n};\n\nconst [GuidedTourProviderImpl, useGuidedTour] = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n}>('GuidedTour');\n\nconst getInitialTourState = (tours: Tours) => {\n return Object.keys(tours).reduce((acc, tourName) => {\n acc[tourName as ValidTourName] = {\n currentStep: 0,\n isCompleted: false,\n tourType: undefined,\n };\n\n return acc;\n }, {} as TourState);\n};\n\nconst getCompletedTours = (tours: TourState): ValidTourName[] => {\n return Object.keys(tours).filter(\n (tourName) => tours[tourName as ValidTourName].isCompleted\n ) as ValidTourName[];\n};\n\nconst areAllToursCompleted = (tours: TourState) => Object.values(tours).every((t) => t.isCompleted);\n\nfunction reducer(state: State, action: Action): State {\n return produce(state, (draft) => {\n if (action.type === 'next_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n const tourLength = guidedTours[action.payload]._meta.totalStepCount;\n\n const nextStep = currentStep + 1;\n draft.tours[action.payload].currentStep = nextStep;\n draft.tours[action.payload].isCompleted = nextStep >= tourLength;\n }\n\n if (action.type === 'previous_step') {\n const currentStep = draft.tours[action.payload].currentStep;\n\n if (currentStep <= 0) return;\n\n const previousStep = currentStep - 1;\n draft.tours[action.payload].currentStep = previousStep;\n }\n\n if (action.type === 'skip_tour') {\n draft.tours[action.payload].isCompleted = true;\n }\n\n if (action.type === 'set_completed_actions') {\n draft.completedActions = [...new Set([...draft.completedActions, ...action.payload])];\n }\n\n if (action.type === 'remove_completed_action') {\n draft.completedActions = draft.completedActions.filter(\n (completedAction) => completedAction !== action.payload\n );\n }\n\n if (action.type === 'skip_all_tours') {\n draft.enabled = false;\n }\n\n if (action.type === 'set_hidden') {\n draft.hidden = action.payload;\n }\n\n if (action.type === 'reset_all_tours') {\n draft.enabled = true;\n draft.tours = getInitialTourState(guidedTours);\n draft.completedActions = [];\n }\n\n if (action.type === 'go_to_step') {\n draft.tours[action.payload.tourName].currentStep = action.payload.step;\n }\n\n if (action.type === 'set_tour_type') {\n const { tourName, tourType } = action.payload;\n const currentTour = draft.tours[tourName];\n\n // If tour type changes and tour is not completed, reset to step 0\n if (currentTour.tourType && currentTour.tourType !== tourType && !currentTour.isCompleted) {\n currentTour.currentStep = 0;\n }\n\n currentTour.tourType = tourType;\n }\n });\n}\n\nconst STORAGE_KEY = 'STRAPI_GUIDED_TOUR';\nconst GuidedTourContext = ({\n children,\n enabled = true,\n}: {\n children: React.ReactNode;\n enabled?: boolean;\n}) => {\n const isDesktop = useIsDesktop();\n const { trackUsage } = useTracking();\n const [storedTours, setStoredTours] = usePersistentState<State>(STORAGE_KEY, {\n tours: getInitialTourState(guidedTours),\n enabled,\n hidden: !isDesktop,\n completedActions: [],\n });\n const migratedTourState = migrateTours(storedTours);\n const [state, dispatch] = React.useReducer(reducer, migratedTourState);\n\n // Watch for changes to enabled prop to update state\n React.useEffect(() => {\n dispatch({ type: 'set_hidden', payload: !isDesktop });\n }, [isDesktop]);\n\n // Sync into usePersistentState in the layout phase so localStorage is updated before the\n // browser follows an external link (e.g. Strapi Cloud \"Read documentation\").\n React.useLayoutEffect(() => {\n setStoredTours(state);\n }, [state, setStoredTours]);\n\n // Derive all completed tours from state\n const currentAllCompletedState = areAllToursCompleted(state.tours);\n // Store completed state in ref to survive a re-render,\n // when current state changes this will persist and be used for comparison\n const previousAllCompletedStateRef = React.useRef(currentAllCompletedState);\n React.useEffect(() => {\n const previousAllCompletedState = previousAllCompletedStateRef.current;\n // When the previous state was not complete but the current state is now complete, fire the event\n if (!previousAllCompletedState && currentAllCompletedState) {\n trackUsage('didCompleteGuidedTour', { name: 'all' });\n }\n\n // When the current state has all tours completed so will the previous state, the tracking event won't fire again\n previousAllCompletedStateRef.current = currentAllCompletedState;\n }, [currentAllCompletedState, trackUsage]);\n\n return (\n <GuidedTourProviderImpl state={state} dispatch={dispatch}>\n {children}\n </GuidedTourProviderImpl>\n );\n};\n\nexport type { Action, State, ValidTourName };\nexport { GuidedTourContext, useGuidedTour, reducer, getCompletedTours };\n"],"names":["GuidedTourProviderImpl","useGuidedTour","createContext","getInitialTourState","tours","Object","keys","reduce","acc","tourName","currentStep","isCompleted","tourType","undefined","getCompletedTours","filter","areAllToursCompleted","values","every","t","reducer","state","action","produce","draft","type","payload","tourLength","guidedTours","_meta","totalStepCount","nextStep","previousStep","completedActions","Set","completedAction","enabled","hidden","step","currentTour","STORAGE_KEY","GuidedTourContext","children","isDesktop","useIsDesktop","trackUsage","useTracking","storedTours","setStoredTours","usePersistentState","migratedTourState","migrateTours","dispatch","React","useReducer","useEffect","useLayoutEffect","currentAllCompletedState","previousAllCompletedStateRef","useRef","previousAllCompletedState","current","name","_jsx"],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@ var Tracking = require('../../../features/Tracking.js');
|
|
|
10
10
|
var Context = require('../Context.js');
|
|
11
11
|
var Tours = require('../Tours.js');
|
|
12
12
|
|
|
13
|
-
function
|
|
13
|
+
function _interopNamespace(e) {
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
14
15
|
var n = Object.create(null);
|
|
15
16
|
if (e) {
|
|
16
17
|
Object.keys(e).forEach(function (k) {
|
|
@@ -27,7 +28,7 @@ function _interopNamespaceDefault(e) {
|
|
|
27
28
|
return Object.freeze(n);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
var React__namespace = /*#__PURE__*/
|
|
31
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
31
32
|
|
|
32
33
|
/* -------------------------------------------------------------------------------------------------
|
|
33
34
|
* Common Step Components
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Step.js","sources":["../../../../../../../admin/src/components/GuidedTour/Steps/Step.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Popover,\n Box,\n Flex,\n Button,\n Typography,\n LinkButton,\n FlexProps,\n} from '@strapi/design-system';\nimport { FormattedMessage, useIntl, type MessageDescriptor } from 'react-intl';\nimport { To, NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../../features/Tracking';\nimport { useGuidedTour, type ValidTourName } from '../Context';\nimport { tours } from '../Tours';\n\n/* -------------------------------------------------------------------------------------------------\n * Common Step Components\n * -----------------------------------------------------------------------------------------------*/\n\nconst StepCount = ({\n tourName,\n displayedCurrentStep,\n displayedTourLength,\n}: {\n tourName: ValidTourName;\n displayedCurrentStep?: number;\n displayedTourLength?: number;\n}) => {\n const state = useGuidedTour('GuidedTourPopover', (s) => s.state);\n const currentStep = displayedCurrentStep ?? state.tours[tourName].currentStep + 1;\n const displayedStepCount = displayedTourLength ?? tours[tourName]._meta.displayedStepCount;\n\n return (\n <Typography variant=\"omega\" fontSize=\"12px\">\n <FormattedMessage\n id=\"tours.stepCount\"\n defaultMessage=\"Step {currentStep} of {tourLength}\"\n values={{ currentStep, tourLength: displayedStepCount }}\n />\n </Typography>\n );\n};\n\nconst GotItAction = ({ onClick }: { onClick: () => void }) => {\n return (\n <Button onClick={onClick}>\n <FormattedMessage id=\"tours.gotIt\" defaultMessage=\"Got it\" />\n </Button>\n );\n};\n\nexport type DefaultActionsProps = {\n showSkip?: boolean;\n showPrevious?: boolean;\n to?: To;\n onNextStep?: () => void;\n onPreviousStep?: () => void;\n tourName: ValidTourName;\n};\nconst DefaultActions = ({\n showSkip,\n showPrevious,\n to,\n tourName,\n onNextStep,\n onPreviousStep,\n}: DefaultActionsProps) => {\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('GuidedTourPopover', (s) => s.dispatch);\n const state = useGuidedTour('GuidedTourPopover', (s) => s.state);\n\n // Safety check: if tours state is missing, return null\n if (!state.tours || !state.tours[tourName]) {\n return null;\n }\n\n const currentStep = state.tours[tourName].currentStep + 1;\n const actualTourLength = tours[tourName]._meta.totalStepCount;\n\n const handleSkip = () => {\n trackUsage('didSkipGuidedTour', { name: tourName });\n dispatch({ type: 'skip_tour', payload: tourName });\n };\n\n const handleNextStep = () => {\n if (currentStep === actualTourLength) {\n trackUsage('didCompleteGuidedTour', { name: tourName });\n }\n\n if (onNextStep) {\n onNextStep();\n } else {\n dispatch({ type: 'next_step', payload: tourName });\n }\n };\n\n const handlePreviousStep = () => {\n if (onPreviousStep) {\n onPreviousStep();\n } else {\n dispatch({ type: 'previous_step', payload: tourName });\n }\n };\n\n return (\n <Flex gap={2}>\n {showSkip && (\n <Button variant=\"tertiary\" onClick={handleSkip}>\n <FormattedMessage id=\"tours.skip\" defaultMessage=\"Skip\" />\n </Button>\n )}\n {!showSkip && showPrevious && (\n <Button variant=\"tertiary\" onClick={handlePreviousStep}>\n <FormattedMessage id=\"tours.previous\" defaultMessage=\"Previous\" />\n </Button>\n )}\n {to ? (\n <LinkButton tag={NavLink} to={to} onClick={handleNextStep}>\n <FormattedMessage id=\"tours.next\" defaultMessage=\"Next\" />\n </LinkButton>\n ) : (\n <Button onClick={handleNextStep}>\n <FormattedMessage id=\"tours.next\" defaultMessage=\"Next\" />\n </Button>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step factory\n * -----------------------------------------------------------------------------------------------*/\n\ntype WithChildren = {\n children: React.ReactNode;\n id?: never;\n defaultMessage?: never;\n};\n\ntype WithIntl = {\n children?: undefined;\n id: MessageDescriptor['id'];\n defaultMessage: MessageDescriptor['defaultMessage'];\n withArrow?: boolean;\n};\n\ntype WithActionsChildren = {\n children: React.ReactNode;\n showStepCount?: boolean;\n showSkip?: boolean;\n showPrevious?: boolean;\n};\n\ntype WithActionsProps = {\n children?: undefined;\n showStepCount?: boolean;\n showSkip?: boolean;\n showPrevious?: boolean;\n};\n\ntype StepProps = WithChildren | WithIntl;\ntype ActionsProps = WithActionsChildren | WithActionsProps;\n\ntype Step = {\n Root: React.ForwardRefExoticComponent<\n React.ComponentProps<typeof Popover.Content> & { withArrow?: boolean }\n >;\n Title: (props: StepProps) => React.ReactNode;\n Content: (\n props: StepProps & {\n values?: Record<string, React.ReactNode | ((chunks: React.ReactNode) => React.ReactNode)>;\n }\n ) => React.ReactNode;\n Actions: (props: ActionsProps & { to?: string } & FlexProps) => React.ReactNode;\n};\n\nconst ActionsContainer = styled(Flex)`\n border-top: ${({ theme }) => `1px solid ${theme.colors.neutral150}`};\n`;\n\nconst ContentContainer = styled(Box)`\n p {\n margin-top: ${({ theme }) => theme.spaces[5]};\n }\n ul {\n list-style-type: disc;\n padding-left: ${({ theme }) => theme.spaces[4]};\n }\n`;\n\n/**\n * TODO:\n * We should probably move all arrow styles + svg to the DS\n */\nconst PopoverArrow = styled(Popover.Arrow)`\n fill: ${({ theme }) => theme.colors.neutral0};\n transform: translateY(-16px) rotate(-90deg);\n`;\n\nconst createStepComponents = (tourName: ValidTourName): Step => ({\n Root: React.forwardRef(({ withArrow = true, ...props }, ref) => {\n return (\n <Popover.Content\n ref={ref}\n aria-labelledby=\"guided-tour-title\"\n side=\"top\"\n align=\"center\"\n style={{ border: 'none' }}\n onClick={(e) => e.stopPropagation()}\n {...props}\n >\n {withArrow && (\n <PopoverArrow asChild>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"23\"\n height=\"25\"\n viewBox=\"0 0 23 25\"\n fill=\"none\"\n >\n <path d=\"M11 24.5L1.82843 15.3284C0.266332 13.7663 0.26633 11.2337 1.82843 9.67157L11 0.5L23 12.5L11 24.5Z\" />\n </svg>\n </PopoverArrow>\n )}\n <Flex width=\"360px\" direction=\"column\" alignItems=\"start\">\n {props.children}\n </Flex>\n </Popover.Content>\n );\n }),\n\n Title: (props) => {\n return (\n <Box paddingTop={5} paddingLeft={5} paddingRight={5} paddingBottom={1} width=\"100%\">\n {'children' in props ? (\n props.children\n ) : (\n <Typography tag=\"h1\" id=\"guided-tour-title\" variant=\"omega\" fontWeight=\"bold\">\n <FormattedMessage id={props.id} defaultMessage={props.defaultMessage} />\n </Typography>\n )}\n </Box>\n );\n },\n\n Content: (props) => {\n const { formatMessage } = useIntl();\n let content = '';\n if (!('children' in props)) {\n content = formatMessage({\n id: props.id,\n defaultMessage: props.defaultMessage,\n });\n }\n return (\n <Box paddingBottom={5} paddingLeft={5} paddingRight={5} width=\"100%\">\n {'children' in props ? (\n props.children\n ) : (\n <ContentContainer>\n <Typography tag=\"div\" variant=\"omega\" dangerouslySetInnerHTML={{ __html: content }} />\n </ContentContainer>\n )}\n </Box>\n );\n },\n\n Actions: ({\n showStepCount = true,\n showPrevious = true,\n showSkip = false,\n to,\n children,\n ...flexProps\n }) => {\n return (\n <ActionsContainer\n width=\"100%\"\n padding={3}\n paddingLeft={5}\n justifyContent={showStepCount ? 'space-between' : 'flex-end'}\n {...flexProps}\n >\n {children ? (\n children\n ) : (\n <>\n {showStepCount && <StepCount tourName={tourName} />}\n <DefaultActions\n tourName={tourName}\n showSkip={showSkip}\n showPrevious={!showSkip && showPrevious}\n to={to}\n />\n </>\n )}\n </ActionsContainer>\n );\n },\n});\n\nexport type { Step };\nexport { createStepComponents, GotItAction, StepCount, DefaultActions };\n"],"names":["StepCount","tourName","displayedCurrentStep","displayedTourLength","state","useGuidedTour","s","currentStep","tours","displayedStepCount","_meta","_jsx","Typography","variant","fontSize","FormattedMessage","id","defaultMessage","values","tourLength","GotItAction","onClick","Button","DefaultActions","showSkip","showPrevious","to","onNextStep","onPreviousStep","trackUsage","useTracking","dispatch","actualTourLength","totalStepCount","handleSkip","name","type","payload","handleNextStep","handlePreviousStep","_jsxs","Flex","gap","LinkButton","tag","NavLink","ActionsContainer","styled","theme","colors","neutral150","ContentContainer","Box","spaces","PopoverArrow","Popover","Arrow","neutral0","createStepComponents","Root","React","forwardRef","withArrow","props","ref","Content","aria-labelledby","side","align","style","border","e","stopPropagation","asChild","svg","xmlns","width","height","viewBox","fill","path","d","direction","alignItems","children","Title","paddingTop","paddingLeft","paddingRight","paddingBottom","fontWeight","formatMessage","useIntl","content","dangerouslySetInnerHTML","__html","Actions","showStepCount","flexProps","padding","justifyContent","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Step.js","sources":["../../../../../../../admin/src/components/GuidedTour/Steps/Step.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Popover,\n Box,\n Flex,\n Button,\n Typography,\n LinkButton,\n FlexProps,\n} from '@strapi/design-system';\nimport { FormattedMessage, useIntl, type MessageDescriptor } from 'react-intl';\nimport { To, NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../../features/Tracking';\nimport { useGuidedTour, type ValidTourName } from '../Context';\nimport { tours } from '../Tours';\n\n/* -------------------------------------------------------------------------------------------------\n * Common Step Components\n * -----------------------------------------------------------------------------------------------*/\n\nconst StepCount = ({\n tourName,\n displayedCurrentStep,\n displayedTourLength,\n}: {\n tourName: ValidTourName;\n displayedCurrentStep?: number;\n displayedTourLength?: number;\n}) => {\n const state = useGuidedTour('GuidedTourPopover', (s) => s.state);\n const currentStep = displayedCurrentStep ?? state.tours[tourName].currentStep + 1;\n const displayedStepCount = displayedTourLength ?? tours[tourName]._meta.displayedStepCount;\n\n return (\n <Typography variant=\"omega\" fontSize=\"12px\">\n <FormattedMessage\n id=\"tours.stepCount\"\n defaultMessage=\"Step {currentStep} of {tourLength}\"\n values={{ currentStep, tourLength: displayedStepCount }}\n />\n </Typography>\n );\n};\n\nconst GotItAction = ({ onClick }: { onClick: () => void }) => {\n return (\n <Button onClick={onClick}>\n <FormattedMessage id=\"tours.gotIt\" defaultMessage=\"Got it\" />\n </Button>\n );\n};\n\nexport type DefaultActionsProps = {\n showSkip?: boolean;\n showPrevious?: boolean;\n to?: To;\n onNextStep?: () => void;\n onPreviousStep?: () => void;\n tourName: ValidTourName;\n};\nconst DefaultActions = ({\n showSkip,\n showPrevious,\n to,\n tourName,\n onNextStep,\n onPreviousStep,\n}: DefaultActionsProps) => {\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('GuidedTourPopover', (s) => s.dispatch);\n const state = useGuidedTour('GuidedTourPopover', (s) => s.state);\n\n // Safety check: if tours state is missing, return null\n if (!state.tours || !state.tours[tourName]) {\n return null;\n }\n\n const currentStep = state.tours[tourName].currentStep + 1;\n const actualTourLength = tours[tourName]._meta.totalStepCount;\n\n const handleSkip = () => {\n trackUsage('didSkipGuidedTour', { name: tourName });\n dispatch({ type: 'skip_tour', payload: tourName });\n };\n\n const handleNextStep = () => {\n if (currentStep === actualTourLength) {\n trackUsage('didCompleteGuidedTour', { name: tourName });\n }\n\n if (onNextStep) {\n onNextStep();\n } else {\n dispatch({ type: 'next_step', payload: tourName });\n }\n };\n\n const handlePreviousStep = () => {\n if (onPreviousStep) {\n onPreviousStep();\n } else {\n dispatch({ type: 'previous_step', payload: tourName });\n }\n };\n\n return (\n <Flex gap={2}>\n {showSkip && (\n <Button variant=\"tertiary\" onClick={handleSkip}>\n <FormattedMessage id=\"tours.skip\" defaultMessage=\"Skip\" />\n </Button>\n )}\n {!showSkip && showPrevious && (\n <Button variant=\"tertiary\" onClick={handlePreviousStep}>\n <FormattedMessage id=\"tours.previous\" defaultMessage=\"Previous\" />\n </Button>\n )}\n {to ? (\n <LinkButton tag={NavLink} to={to} onClick={handleNextStep}>\n <FormattedMessage id=\"tours.next\" defaultMessage=\"Next\" />\n </LinkButton>\n ) : (\n <Button onClick={handleNextStep}>\n <FormattedMessage id=\"tours.next\" defaultMessage=\"Next\" />\n </Button>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Step factory\n * -----------------------------------------------------------------------------------------------*/\n\ntype WithChildren = {\n children: React.ReactNode;\n id?: never;\n defaultMessage?: never;\n};\n\ntype WithIntl = {\n children?: undefined;\n id: MessageDescriptor['id'];\n defaultMessage: MessageDescriptor['defaultMessage'];\n withArrow?: boolean;\n};\n\ntype WithActionsChildren = {\n children: React.ReactNode;\n showStepCount?: boolean;\n showSkip?: boolean;\n showPrevious?: boolean;\n};\n\ntype WithActionsProps = {\n children?: undefined;\n showStepCount?: boolean;\n showSkip?: boolean;\n showPrevious?: boolean;\n};\n\ntype StepProps = WithChildren | WithIntl;\ntype ActionsProps = WithActionsChildren | WithActionsProps;\n\ntype Step = {\n Root: React.ForwardRefExoticComponent<\n React.ComponentProps<typeof Popover.Content> & { withArrow?: boolean }\n >;\n Title: (props: StepProps) => React.ReactNode;\n Content: (\n props: StepProps & {\n values?: Record<string, React.ReactNode | ((chunks: React.ReactNode) => React.ReactNode)>;\n }\n ) => React.ReactNode;\n Actions: (props: ActionsProps & { to?: string } & FlexProps) => React.ReactNode;\n};\n\nconst ActionsContainer = styled(Flex)`\n border-top: ${({ theme }) => `1px solid ${theme.colors.neutral150}`};\n`;\n\nconst ContentContainer = styled(Box)`\n p {\n margin-top: ${({ theme }) => theme.spaces[5]};\n }\n ul {\n list-style-type: disc;\n padding-left: ${({ theme }) => theme.spaces[4]};\n }\n`;\n\n/**\n * TODO:\n * We should probably move all arrow styles + svg to the DS\n */\nconst PopoverArrow = styled(Popover.Arrow)`\n fill: ${({ theme }) => theme.colors.neutral0};\n transform: translateY(-16px) rotate(-90deg);\n`;\n\nconst createStepComponents = (tourName: ValidTourName): Step => ({\n Root: React.forwardRef(({ withArrow = true, ...props }, ref) => {\n return (\n <Popover.Content\n ref={ref}\n aria-labelledby=\"guided-tour-title\"\n side=\"top\"\n align=\"center\"\n style={{ border: 'none' }}\n onClick={(e) => e.stopPropagation()}\n {...props}\n >\n {withArrow && (\n <PopoverArrow asChild>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"23\"\n height=\"25\"\n viewBox=\"0 0 23 25\"\n fill=\"none\"\n >\n <path d=\"M11 24.5L1.82843 15.3284C0.266332 13.7663 0.26633 11.2337 1.82843 9.67157L11 0.5L23 12.5L11 24.5Z\" />\n </svg>\n </PopoverArrow>\n )}\n <Flex width=\"360px\" direction=\"column\" alignItems=\"start\">\n {props.children}\n </Flex>\n </Popover.Content>\n );\n }),\n\n Title: (props) => {\n return (\n <Box paddingTop={5} paddingLeft={5} paddingRight={5} paddingBottom={1} width=\"100%\">\n {'children' in props ? (\n props.children\n ) : (\n <Typography tag=\"h1\" id=\"guided-tour-title\" variant=\"omega\" fontWeight=\"bold\">\n <FormattedMessage id={props.id} defaultMessage={props.defaultMessage} />\n </Typography>\n )}\n </Box>\n );\n },\n\n Content: (props) => {\n const { formatMessage } = useIntl();\n let content = '';\n if (!('children' in props)) {\n content = formatMessage({\n id: props.id,\n defaultMessage: props.defaultMessage,\n });\n }\n return (\n <Box paddingBottom={5} paddingLeft={5} paddingRight={5} width=\"100%\">\n {'children' in props ? (\n props.children\n ) : (\n <ContentContainer>\n <Typography tag=\"div\" variant=\"omega\" dangerouslySetInnerHTML={{ __html: content }} />\n </ContentContainer>\n )}\n </Box>\n );\n },\n\n Actions: ({\n showStepCount = true,\n showPrevious = true,\n showSkip = false,\n to,\n children,\n ...flexProps\n }) => {\n return (\n <ActionsContainer\n width=\"100%\"\n padding={3}\n paddingLeft={5}\n justifyContent={showStepCount ? 'space-between' : 'flex-end'}\n {...flexProps}\n >\n {children ? (\n children\n ) : (\n <>\n {showStepCount && <StepCount tourName={tourName} />}\n <DefaultActions\n tourName={tourName}\n showSkip={showSkip}\n showPrevious={!showSkip && showPrevious}\n to={to}\n />\n </>\n )}\n </ActionsContainer>\n );\n },\n});\n\nexport type { Step };\nexport { createStepComponents, GotItAction, StepCount, DefaultActions };\n"],"names":["StepCount","tourName","displayedCurrentStep","displayedTourLength","state","useGuidedTour","s","currentStep","tours","displayedStepCount","_meta","_jsx","Typography","variant","fontSize","FormattedMessage","id","defaultMessage","values","tourLength","GotItAction","onClick","Button","DefaultActions","showSkip","showPrevious","to","onNextStep","onPreviousStep","trackUsage","useTracking","dispatch","actualTourLength","totalStepCount","handleSkip","name","type","payload","handleNextStep","handlePreviousStep","_jsxs","Flex","gap","LinkButton","tag","NavLink","ActionsContainer","styled","theme","colors","neutral150","ContentContainer","Box","spaces","PopoverArrow","Popover","Arrow","neutral0","createStepComponents","Root","React","forwardRef","withArrow","props","ref","Content","aria-labelledby","side","align","style","border","e","stopPropagation","asChild","svg","xmlns","width","height","viewBox","fill","path","d","direction","alignItems","children","Title","paddingTop","paddingLeft","paddingRight","paddingBottom","fontWeight","formatMessage","useIntl","content","dangerouslySetInnerHTML","__html","Actions","showStepCount","flexProps","padding","justifyContent","_Fragment"],"mappings":"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"}
|
|
@@ -12,7 +12,8 @@ var ContentTypeBuilderSteps = require('./Steps/ContentTypeBuilderSteps.js');
|
|
|
12
12
|
var Step = require('./Steps/Step.js');
|
|
13
13
|
var constants = require('./utils/constants.js');
|
|
14
14
|
|
|
15
|
-
function
|
|
15
|
+
function _interopNamespace(e) {
|
|
16
|
+
if (e && e.__esModule) return e;
|
|
16
17
|
var n = Object.create(null);
|
|
17
18
|
if (e) {
|
|
18
19
|
Object.keys(e).forEach(function (k) {
|
|
@@ -29,7 +30,7 @@ function _interopNamespaceDefault(e) {
|
|
|
29
30
|
return Object.freeze(n);
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
var React__namespace = /*#__PURE__*/
|
|
33
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
33
34
|
|
|
34
35
|
/* -------------------------------------------------------------------------------------------------
|
|
35
36
|
* Tours
|
|
@@ -66,9 +67,13 @@ const GuidedTourTooltipImpl = ({ children, content, tourName, step, when })=>{
|
|
|
66
67
|
const isCurrentStep = tourState?.currentStep === step;
|
|
67
68
|
const isStepConditionMet = when ? when(state.completedActions) : true;
|
|
68
69
|
const isPopoverOpen = guidedTourMeta?.data?.isFirstSuperAdminUser && !tourState?.isCompleted && isCurrentStep && isStepConditionMet;
|
|
69
|
-
|
|
70
|
+
const anchorRef = React__namespace.useRef(null);
|
|
70
71
|
React__namespace.useEffect(()=>{
|
|
71
72
|
if (!isPopoverOpen) return;
|
|
73
|
+
anchorRef.current?.scrollIntoView({
|
|
74
|
+
behavior: 'instant',
|
|
75
|
+
block: 'center'
|
|
76
|
+
});
|
|
72
77
|
const originalStyle = window.getComputedStyle(document.body).overflow;
|
|
73
78
|
document.body.style.overflow = 'hidden';
|
|
74
79
|
return ()=>{
|
|
@@ -118,6 +123,7 @@ const GuidedTourTooltipImpl = ({ children, content, tourName, step, when })=>{
|
|
|
118
123
|
open: isPopoverOpen,
|
|
119
124
|
children: [
|
|
120
125
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Anchor, {
|
|
126
|
+
ref: anchorRef,
|
|
121
127
|
children: children
|
|
122
128
|
}),
|
|
123
129
|
content({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tours.js","sources":["../../../../../../admin/src/components/GuidedTour/Tours.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Popover, Portal, setOpacity } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useGetGuidedTourMetaQuery } from '../../services/admin';\n\nimport { type State, type Action, useGuidedTour, ValidTourName, CompletedActions } from './Context';\nimport { apiTokensSteps } from './Steps/ApiTokensSteps';\nimport { contentManagerSteps } from './Steps/ContentManagerSteps';\nimport { contentTypeBuilderSteps } from './Steps/ContentTypeBuilderSteps';\nimport { type Step, createStepComponents } from './Steps/Step';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\n\n/* -------------------------------------------------------------------------------------------------\n * Tours\n * -----------------------------------------------------------------------------------------------*/\n\nconst tours = {\n contentTypeBuilder: createTour('contentTypeBuilder', contentTypeBuilderSteps),\n contentManager: createTour('contentManager', contentManagerSteps),\n apiTokens: createTour('apiTokens', apiTokensSteps),\n strapiCloud: createTour('strapiCloud', []),\n} as const;\n\ntype Tours = typeof tours;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourTooltip\n * -----------------------------------------------------------------------------------------------*/\n\nexport type StepContentProps = {\n Step: Step;\n state: State;\n dispatch: React.Dispatch<Action>;\n};\ntype Content = (props: StepContentProps) => React.ReactNode;\n\ntype GuidedTourTooltipProps = {\n children: React.ReactNode;\n content: Content;\n tourName: ValidTourName;\n step: number;\n when?: (completedActions: CompletedActions) => boolean;\n};\n\nconst GuidedTourTooltip = ({ children, ...props }: GuidedTourTooltipProps) => {\n const state = useGuidedTour('TooltipWrapper', (s) => s.state);\n\n if (!state.enabled || state.hidden || process.env.NODE_ENV !== 'development') {\n return children;\n }\n\n return <GuidedTourTooltipImpl {...props}>{children}</GuidedTourTooltipImpl>;\n};\n\nconst GuidedTourOverlay = styled(Box)`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${({ theme }) => setOpacity(theme.colors.neutral800, 0.2)};\n z-index: 10;\n`;\n\nconst GuidedTourTooltipImpl = ({\n children,\n content,\n tourName,\n step,\n when,\n}: GuidedTourTooltipProps) => {\n const { data: guidedTourMeta } = useGetGuidedTourMetaQuery();\n const state = useGuidedTour('GuidedTourTooltip', (s) => s.state);\n const dispatch = useGuidedTour('GuidedTourTooltip', (s) => s.dispatch);\n\n const tourState = state.tours?.[tourName];\n const isCurrentStep = tourState?.currentStep === step;\n const isStepConditionMet = when ? when(state.completedActions) : true;\n const isPopoverOpen =\n guidedTourMeta?.data?.isFirstSuperAdminUser &&\n !tourState?.isCompleted &&\n isCurrentStep &&\n isStepConditionMet;\n\n // Lock the scroll\n React.useEffect(() => {\n if (!isPopoverOpen) return;\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalStyle;\n };\n }, [isPopoverOpen]);\n\n const Step = React.useMemo(() => createStepComponents(tourName), [tourName]);\n\n const hasApiSchema =\n Object.keys(guidedTourMeta?.data?.schemas ?? {}).filter((key) => key.startsWith('api::'))\n .length > 0;\n\n React.useEffect(() => {\n if (hasApiSchema) {\n /**\n * Fallback sync:\n *\n * When the user already has a schema (ie started project from template with seeded data),\n * allow them to proceed to the content manager tour.\n *\n * When the CTB fails to restart after saving a schema (as it often does)\n */\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n }\n }, [dispatch, hasApiSchema, step, tourName]);\n\n // Safety check: if tours state is corrupted or missing, render without tooltip (after all hooks)\n if (!state.tours || !state.tours[tourName]) {\n return <>{children}</>;\n }\n\n return (\n <>\n {isPopoverOpen && (\n <Portal>\n <GuidedTourOverlay />\n </Portal>\n )}\n <Popover.Root open={isPopoverOpen}>\n <Popover.Anchor>{children}</Popover.Anchor>\n {content({ Step, state, dispatch })}\n </Popover.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Tour factory\n * -----------------------------------------------------------------------------------------------*/\n\nexport type TourStep<P extends string> = {\n name: P;\n content: Content;\n when?: (completedActions: CompletedActions) => boolean;\n excludeFromStepCount?: boolean;\n};\n\nexport function createTour<const T extends ReadonlyArray<TourStep<string>>>(\n tourName: string,\n steps: T\n) {\n type Components = {\n [K in T[number]['name']]: React.ComponentType<{ children: React.ReactNode }>;\n };\n\n const tour = steps.reduce(\n (acc, step, index) => {\n const name = step.name as keyof Components;\n\n if (name in acc) {\n throw Error(`The tour: ${tourName} with step: ${step.name} has already been registered`);\n }\n\n (acc as Components)[name] = ({ children }: { children: React.ReactNode }) => {\n return (\n <GuidedTourTooltip\n tourName={tourName as ValidTourName}\n step={index}\n content={step.content}\n when={step.when}\n >\n {children}\n </GuidedTourTooltip>\n );\n };\n\n if (step.excludeFromStepCount) {\n // Subtract all steps registered to be excluded from the step count\n acc._meta.displayedStepCount--;\n }\n\n return acc;\n },\n { _meta: { totalStepCount: steps.length, displayedStepCount: steps.length } } as Components & {\n _meta: { totalStepCount: number; displayedStepCount: number };\n }\n );\n\n return tour;\n}\n\nexport type { Content, Tours };\nexport { tours };\n"],"names":["tours","contentTypeBuilder","createTour","contentTypeBuilderSteps","contentManager","contentManagerSteps","apiTokens","apiTokensSteps","strapiCloud","GuidedTourTooltip","children","props","state","useGuidedTour","s","enabled","hidden","process","env","NODE_ENV","_jsx","GuidedTourTooltipImpl","GuidedTourOverlay","styled","Box","theme","setOpacity","colors","neutral800","content","tourName","step","when","data","guidedTourMeta","useGetGuidedTourMetaQuery","dispatch","tourState","isCurrentStep","currentStep","isStepConditionMet","completedActions","isPopoverOpen","isFirstSuperAdminUser","isCompleted","React","useEffect","originalStyle","window","getComputedStyle","document","body","overflow","style","Step","useMemo","createStepComponents","hasApiSchema","Object","keys","schemas","filter","key","startsWith","length","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","createSchema","_Fragment","_jsxs","Portal","Popover","Root","open","Anchor","steps","tour","reduce","acc","index","name","Error","excludeFromStepCount","_meta","displayedStepCount","totalStepCount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tours.js","sources":["../../../../../../admin/src/components/GuidedTour/Tours.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Popover, Portal, setOpacity } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useGetGuidedTourMetaQuery } from '../../services/admin';\n\nimport { type State, type Action, useGuidedTour, ValidTourName, CompletedActions } from './Context';\nimport { apiTokensSteps } from './Steps/ApiTokensSteps';\nimport { contentManagerSteps } from './Steps/ContentManagerSteps';\nimport { contentTypeBuilderSteps } from './Steps/ContentTypeBuilderSteps';\nimport { type Step, createStepComponents } from './Steps/Step';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\n\n/* -------------------------------------------------------------------------------------------------\n * Tours\n * -----------------------------------------------------------------------------------------------*/\n\nconst tours = {\n contentTypeBuilder: createTour('contentTypeBuilder', contentTypeBuilderSteps),\n contentManager: createTour('contentManager', contentManagerSteps),\n apiTokens: createTour('apiTokens', apiTokensSteps),\n strapiCloud: createTour('strapiCloud', []),\n} as const;\n\ntype Tours = typeof tours;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourTooltip\n * -----------------------------------------------------------------------------------------------*/\n\nexport type StepContentProps = {\n Step: Step;\n state: State;\n dispatch: React.Dispatch<Action>;\n};\ntype Content = (props: StepContentProps) => React.ReactNode;\n\ntype GuidedTourTooltipProps = {\n children: React.ReactNode;\n content: Content;\n tourName: ValidTourName;\n step: number;\n when?: (completedActions: CompletedActions) => boolean;\n};\n\nconst GuidedTourTooltip = ({ children, ...props }: GuidedTourTooltipProps) => {\n const state = useGuidedTour('TooltipWrapper', (s) => s.state);\n\n if (!state.enabled || state.hidden || process.env.NODE_ENV !== 'development') {\n return children;\n }\n\n return <GuidedTourTooltipImpl {...props}>{children}</GuidedTourTooltipImpl>;\n};\n\nconst GuidedTourOverlay = styled(Box)`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${({ theme }) => setOpacity(theme.colors.neutral800, 0.2)};\n z-index: 10;\n`;\n\nconst GuidedTourTooltipImpl = ({\n children,\n content,\n tourName,\n step,\n when,\n}: GuidedTourTooltipProps) => {\n const { data: guidedTourMeta } = useGetGuidedTourMetaQuery();\n const state = useGuidedTour('GuidedTourTooltip', (s) => s.state);\n const dispatch = useGuidedTour('GuidedTourTooltip', (s) => s.dispatch);\n\n const tourState = state.tours?.[tourName];\n const isCurrentStep = tourState?.currentStep === step;\n const isStepConditionMet = when ? when(state.completedActions) : true;\n const isPopoverOpen =\n guidedTourMeta?.data?.isFirstSuperAdminUser &&\n !tourState?.isCompleted &&\n isCurrentStep &&\n isStepConditionMet;\n\n const anchorRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!isPopoverOpen) return;\n\n anchorRef.current?.scrollIntoView({ behavior: 'instant', block: 'center' });\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalStyle;\n };\n }, [isPopoverOpen]);\n\n const Step = React.useMemo(() => createStepComponents(tourName), [tourName]);\n\n const hasApiSchema =\n Object.keys(guidedTourMeta?.data?.schemas ?? {}).filter((key) => key.startsWith('api::'))\n .length > 0;\n\n React.useEffect(() => {\n if (hasApiSchema) {\n /**\n * Fallback sync:\n *\n * When the user already has a schema (ie started project from template with seeded data),\n * allow them to proceed to the content manager tour.\n *\n * When the CTB fails to restart after saving a schema (as it often does)\n */\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n }\n }, [dispatch, hasApiSchema, step, tourName]);\n\n // Safety check: if tours state is corrupted or missing, render without tooltip (after all hooks)\n if (!state.tours || !state.tours[tourName]) {\n return <>{children}</>;\n }\n\n return (\n <>\n {isPopoverOpen && (\n <Portal>\n <GuidedTourOverlay />\n </Portal>\n )}\n <Popover.Root open={isPopoverOpen}>\n <Popover.Anchor ref={anchorRef}>{children}</Popover.Anchor>\n {content({ Step, state, dispatch })}\n </Popover.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Tour factory\n * -----------------------------------------------------------------------------------------------*/\n\nexport type TourStep<P extends string> = {\n name: P;\n content: Content;\n when?: (completedActions: CompletedActions) => boolean;\n excludeFromStepCount?: boolean;\n};\n\nexport function createTour<const T extends ReadonlyArray<TourStep<string>>>(\n tourName: string,\n steps: T\n) {\n type Components = {\n [K in T[number]['name']]: React.ComponentType<{ children: React.ReactNode }>;\n };\n\n const tour = steps.reduce(\n (acc, step, index) => {\n const name = step.name as keyof Components;\n\n if (name in acc) {\n throw Error(`The tour: ${tourName} with step: ${step.name} has already been registered`);\n }\n\n (acc as Components)[name] = ({ children }: { children: React.ReactNode }) => {\n return (\n <GuidedTourTooltip\n tourName={tourName as ValidTourName}\n step={index}\n content={step.content}\n when={step.when}\n >\n {children}\n </GuidedTourTooltip>\n );\n };\n\n if (step.excludeFromStepCount) {\n // Subtract all steps registered to be excluded from the step count\n acc._meta.displayedStepCount--;\n }\n\n return acc;\n },\n { _meta: { totalStepCount: steps.length, displayedStepCount: steps.length } } as Components & {\n _meta: { totalStepCount: number; displayedStepCount: number };\n }\n );\n\n return tour;\n}\n\nexport type { Content, Tours };\nexport { tours };\n"],"names":["tours","contentTypeBuilder","createTour","contentTypeBuilderSteps","contentManager","contentManagerSteps","apiTokens","apiTokensSteps","strapiCloud","GuidedTourTooltip","children","props","state","useGuidedTour","s","enabled","hidden","process","env","NODE_ENV","_jsx","GuidedTourTooltipImpl","GuidedTourOverlay","styled","Box","theme","setOpacity","colors","neutral800","content","tourName","step","when","data","guidedTourMeta","useGetGuidedTourMetaQuery","dispatch","tourState","isCurrentStep","currentStep","isStepConditionMet","completedActions","isPopoverOpen","isFirstSuperAdminUser","isCompleted","anchorRef","React","useRef","useEffect","current","scrollIntoView","behavior","block","originalStyle","window","getComputedStyle","document","body","overflow","style","Step","useMemo","createStepComponents","hasApiSchema","Object","keys","schemas","filter","key","startsWith","length","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","createSchema","_Fragment","_jsxs","Portal","Popover","Root","open","Anchor","ref","steps","tour","reduce","acc","index","name","Error","excludeFromStepCount","_meta","displayedStepCount","totalStepCount"],"mappings":"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"}
|
|
@@ -45,9 +45,13 @@ const GuidedTourTooltipImpl = ({ children, content, tourName, step, when })=>{
|
|
|
45
45
|
const isCurrentStep = tourState?.currentStep === step;
|
|
46
46
|
const isStepConditionMet = when ? when(state.completedActions) : true;
|
|
47
47
|
const isPopoverOpen = guidedTourMeta?.data?.isFirstSuperAdminUser && !tourState?.isCompleted && isCurrentStep && isStepConditionMet;
|
|
48
|
-
|
|
48
|
+
const anchorRef = React.useRef(null);
|
|
49
49
|
React.useEffect(()=>{
|
|
50
50
|
if (!isPopoverOpen) return;
|
|
51
|
+
anchorRef.current?.scrollIntoView({
|
|
52
|
+
behavior: 'instant',
|
|
53
|
+
block: 'center'
|
|
54
|
+
});
|
|
51
55
|
const originalStyle = window.getComputedStyle(document.body).overflow;
|
|
52
56
|
document.body.style.overflow = 'hidden';
|
|
53
57
|
return ()=>{
|
|
@@ -97,6 +101,7 @@ const GuidedTourTooltipImpl = ({ children, content, tourName, step, when })=>{
|
|
|
97
101
|
open: isPopoverOpen,
|
|
98
102
|
children: [
|
|
99
103
|
/*#__PURE__*/ jsx(Popover.Anchor, {
|
|
104
|
+
ref: anchorRef,
|
|
100
105
|
children: children
|
|
101
106
|
}),
|
|
102
107
|
content({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tours.mjs","sources":["../../../../../../admin/src/components/GuidedTour/Tours.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Popover, Portal, setOpacity } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useGetGuidedTourMetaQuery } from '../../services/admin';\n\nimport { type State, type Action, useGuidedTour, ValidTourName, CompletedActions } from './Context';\nimport { apiTokensSteps } from './Steps/ApiTokensSteps';\nimport { contentManagerSteps } from './Steps/ContentManagerSteps';\nimport { contentTypeBuilderSteps } from './Steps/ContentTypeBuilderSteps';\nimport { type Step, createStepComponents } from './Steps/Step';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\n\n/* -------------------------------------------------------------------------------------------------\n * Tours\n * -----------------------------------------------------------------------------------------------*/\n\nconst tours = {\n contentTypeBuilder: createTour('contentTypeBuilder', contentTypeBuilderSteps),\n contentManager: createTour('contentManager', contentManagerSteps),\n apiTokens: createTour('apiTokens', apiTokensSteps),\n strapiCloud: createTour('strapiCloud', []),\n} as const;\n\ntype Tours = typeof tours;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourTooltip\n * -----------------------------------------------------------------------------------------------*/\n\nexport type StepContentProps = {\n Step: Step;\n state: State;\n dispatch: React.Dispatch<Action>;\n};\ntype Content = (props: StepContentProps) => React.ReactNode;\n\ntype GuidedTourTooltipProps = {\n children: React.ReactNode;\n content: Content;\n tourName: ValidTourName;\n step: number;\n when?: (completedActions: CompletedActions) => boolean;\n};\n\nconst GuidedTourTooltip = ({ children, ...props }: GuidedTourTooltipProps) => {\n const state = useGuidedTour('TooltipWrapper', (s) => s.state);\n\n if (!state.enabled || state.hidden || process.env.NODE_ENV !== 'development') {\n return children;\n }\n\n return <GuidedTourTooltipImpl {...props}>{children}</GuidedTourTooltipImpl>;\n};\n\nconst GuidedTourOverlay = styled(Box)`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${({ theme }) => setOpacity(theme.colors.neutral800, 0.2)};\n z-index: 10;\n`;\n\nconst GuidedTourTooltipImpl = ({\n children,\n content,\n tourName,\n step,\n when,\n}: GuidedTourTooltipProps) => {\n const { data: guidedTourMeta } = useGetGuidedTourMetaQuery();\n const state = useGuidedTour('GuidedTourTooltip', (s) => s.state);\n const dispatch = useGuidedTour('GuidedTourTooltip', (s) => s.dispatch);\n\n const tourState = state.tours?.[tourName];\n const isCurrentStep = tourState?.currentStep === step;\n const isStepConditionMet = when ? when(state.completedActions) : true;\n const isPopoverOpen =\n guidedTourMeta?.data?.isFirstSuperAdminUser &&\n !tourState?.isCompleted &&\n isCurrentStep &&\n isStepConditionMet;\n\n // Lock the scroll\n React.useEffect(() => {\n if (!isPopoverOpen) return;\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalStyle;\n };\n }, [isPopoverOpen]);\n\n const Step = React.useMemo(() => createStepComponents(tourName), [tourName]);\n\n const hasApiSchema =\n Object.keys(guidedTourMeta?.data?.schemas ?? {}).filter((key) => key.startsWith('api::'))\n .length > 0;\n\n React.useEffect(() => {\n if (hasApiSchema) {\n /**\n * Fallback sync:\n *\n * When the user already has a schema (ie started project from template with seeded data),\n * allow them to proceed to the content manager tour.\n *\n * When the CTB fails to restart after saving a schema (as it often does)\n */\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n }\n }, [dispatch, hasApiSchema, step, tourName]);\n\n // Safety check: if tours state is corrupted or missing, render without tooltip (after all hooks)\n if (!state.tours || !state.tours[tourName]) {\n return <>{children}</>;\n }\n\n return (\n <>\n {isPopoverOpen && (\n <Portal>\n <GuidedTourOverlay />\n </Portal>\n )}\n <Popover.Root open={isPopoverOpen}>\n <Popover.Anchor>{children}</Popover.Anchor>\n {content({ Step, state, dispatch })}\n </Popover.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Tour factory\n * -----------------------------------------------------------------------------------------------*/\n\nexport type TourStep<P extends string> = {\n name: P;\n content: Content;\n when?: (completedActions: CompletedActions) => boolean;\n excludeFromStepCount?: boolean;\n};\n\nexport function createTour<const T extends ReadonlyArray<TourStep<string>>>(\n tourName: string,\n steps: T\n) {\n type Components = {\n [K in T[number]['name']]: React.ComponentType<{ children: React.ReactNode }>;\n };\n\n const tour = steps.reduce(\n (acc, step, index) => {\n const name = step.name as keyof Components;\n\n if (name in acc) {\n throw Error(`The tour: ${tourName} with step: ${step.name} has already been registered`);\n }\n\n (acc as Components)[name] = ({ children }: { children: React.ReactNode }) => {\n return (\n <GuidedTourTooltip\n tourName={tourName as ValidTourName}\n step={index}\n content={step.content}\n when={step.when}\n >\n {children}\n </GuidedTourTooltip>\n );\n };\n\n if (step.excludeFromStepCount) {\n // Subtract all steps registered to be excluded from the step count\n acc._meta.displayedStepCount--;\n }\n\n return acc;\n },\n { _meta: { totalStepCount: steps.length, displayedStepCount: steps.length } } as Components & {\n _meta: { totalStepCount: number; displayedStepCount: number };\n }\n );\n\n return tour;\n}\n\nexport type { Content, Tours };\nexport { tours };\n"],"names":["tours","contentTypeBuilder","createTour","contentTypeBuilderSteps","contentManager","contentManagerSteps","apiTokens","apiTokensSteps","strapiCloud","GuidedTourTooltip","children","props","state","useGuidedTour","s","enabled","hidden","process","env","NODE_ENV","_jsx","GuidedTourTooltipImpl","GuidedTourOverlay","styled","Box","theme","setOpacity","colors","neutral800","content","tourName","step","when","data","guidedTourMeta","useGetGuidedTourMetaQuery","dispatch","tourState","isCurrentStep","currentStep","isStepConditionMet","completedActions","isPopoverOpen","isFirstSuperAdminUser","isCompleted","React","useEffect","originalStyle","window","getComputedStyle","document","body","overflow","style","Step","useMemo","createStepComponents","hasApiSchema","Object","keys","schemas","filter","key","startsWith","length","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","createSchema","_Fragment","_jsxs","Portal","Popover","Root","open","Anchor","steps","tour","reduce","acc","index","name","Error","excludeFromStepCount","_meta","displayedStepCount","totalStepCount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tours.mjs","sources":["../../../../../../admin/src/components/GuidedTour/Tours.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Popover, Portal, setOpacity } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { useGetGuidedTourMetaQuery } from '../../services/admin';\n\nimport { type State, type Action, useGuidedTour, ValidTourName, CompletedActions } from './Context';\nimport { apiTokensSteps } from './Steps/ApiTokensSteps';\nimport { contentManagerSteps } from './Steps/ContentManagerSteps';\nimport { contentTypeBuilderSteps } from './Steps/ContentTypeBuilderSteps';\nimport { type Step, createStepComponents } from './Steps/Step';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from './utils/constants';\n\n/* -------------------------------------------------------------------------------------------------\n * Tours\n * -----------------------------------------------------------------------------------------------*/\n\nconst tours = {\n contentTypeBuilder: createTour('contentTypeBuilder', contentTypeBuilderSteps),\n contentManager: createTour('contentManager', contentManagerSteps),\n apiTokens: createTour('apiTokens', apiTokensSteps),\n strapiCloud: createTour('strapiCloud', []),\n} as const;\n\ntype Tours = typeof tours;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourTooltip\n * -----------------------------------------------------------------------------------------------*/\n\nexport type StepContentProps = {\n Step: Step;\n state: State;\n dispatch: React.Dispatch<Action>;\n};\ntype Content = (props: StepContentProps) => React.ReactNode;\n\ntype GuidedTourTooltipProps = {\n children: React.ReactNode;\n content: Content;\n tourName: ValidTourName;\n step: number;\n when?: (completedActions: CompletedActions) => boolean;\n};\n\nconst GuidedTourTooltip = ({ children, ...props }: GuidedTourTooltipProps) => {\n const state = useGuidedTour('TooltipWrapper', (s) => s.state);\n\n if (!state.enabled || state.hidden || process.env.NODE_ENV !== 'development') {\n return children;\n }\n\n return <GuidedTourTooltipImpl {...props}>{children}</GuidedTourTooltipImpl>;\n};\n\nconst GuidedTourOverlay = styled(Box)`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${({ theme }) => setOpacity(theme.colors.neutral800, 0.2)};\n z-index: 10;\n`;\n\nconst GuidedTourTooltipImpl = ({\n children,\n content,\n tourName,\n step,\n when,\n}: GuidedTourTooltipProps) => {\n const { data: guidedTourMeta } = useGetGuidedTourMetaQuery();\n const state = useGuidedTour('GuidedTourTooltip', (s) => s.state);\n const dispatch = useGuidedTour('GuidedTourTooltip', (s) => s.dispatch);\n\n const tourState = state.tours?.[tourName];\n const isCurrentStep = tourState?.currentStep === step;\n const isStepConditionMet = when ? when(state.completedActions) : true;\n const isPopoverOpen =\n guidedTourMeta?.data?.isFirstSuperAdminUser &&\n !tourState?.isCompleted &&\n isCurrentStep &&\n isStepConditionMet;\n\n const anchorRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!isPopoverOpen) return;\n\n anchorRef.current?.scrollIntoView({ behavior: 'instant', block: 'center' });\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalStyle;\n };\n }, [isPopoverOpen]);\n\n const Step = React.useMemo(() => createStepComponents(tourName), [tourName]);\n\n const hasApiSchema =\n Object.keys(guidedTourMeta?.data?.schemas ?? {}).filter((key) => key.startsWith('api::'))\n .length > 0;\n\n React.useEffect(() => {\n if (hasApiSchema) {\n /**\n * Fallback sync:\n *\n * When the user already has a schema (ie started project from template with seeded data),\n * allow them to proceed to the content manager tour.\n *\n * When the CTB fails to restart after saving a schema (as it often does)\n */\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n }\n }, [dispatch, hasApiSchema, step, tourName]);\n\n // Safety check: if tours state is corrupted or missing, render without tooltip (after all hooks)\n if (!state.tours || !state.tours[tourName]) {\n return <>{children}</>;\n }\n\n return (\n <>\n {isPopoverOpen && (\n <Portal>\n <GuidedTourOverlay />\n </Portal>\n )}\n <Popover.Root open={isPopoverOpen}>\n <Popover.Anchor ref={anchorRef}>{children}</Popover.Anchor>\n {content({ Step, state, dispatch })}\n </Popover.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Tour factory\n * -----------------------------------------------------------------------------------------------*/\n\nexport type TourStep<P extends string> = {\n name: P;\n content: Content;\n when?: (completedActions: CompletedActions) => boolean;\n excludeFromStepCount?: boolean;\n};\n\nexport function createTour<const T extends ReadonlyArray<TourStep<string>>>(\n tourName: string,\n steps: T\n) {\n type Components = {\n [K in T[number]['name']]: React.ComponentType<{ children: React.ReactNode }>;\n };\n\n const tour = steps.reduce(\n (acc, step, index) => {\n const name = step.name as keyof Components;\n\n if (name in acc) {\n throw Error(`The tour: ${tourName} with step: ${step.name} has already been registered`);\n }\n\n (acc as Components)[name] = ({ children }: { children: React.ReactNode }) => {\n return (\n <GuidedTourTooltip\n tourName={tourName as ValidTourName}\n step={index}\n content={step.content}\n when={step.when}\n >\n {children}\n </GuidedTourTooltip>\n );\n };\n\n if (step.excludeFromStepCount) {\n // Subtract all steps registered to be excluded from the step count\n acc._meta.displayedStepCount--;\n }\n\n return acc;\n },\n { _meta: { totalStepCount: steps.length, displayedStepCount: steps.length } } as Components & {\n _meta: { totalStepCount: number; displayedStepCount: number };\n }\n );\n\n return tour;\n}\n\nexport type { Content, Tours };\nexport { tours };\n"],"names":["tours","contentTypeBuilder","createTour","contentTypeBuilderSteps","contentManager","contentManagerSteps","apiTokens","apiTokensSteps","strapiCloud","GuidedTourTooltip","children","props","state","useGuidedTour","s","enabled","hidden","process","env","NODE_ENV","_jsx","GuidedTourTooltipImpl","GuidedTourOverlay","styled","Box","theme","setOpacity","colors","neutral800","content","tourName","step","when","data","guidedTourMeta","useGetGuidedTourMetaQuery","dispatch","tourState","isCurrentStep","currentStep","isStepConditionMet","completedActions","isPopoverOpen","isFirstSuperAdminUser","isCompleted","anchorRef","React","useRef","useEffect","current","scrollIntoView","behavior","block","originalStyle","window","getComputedStyle","document","body","overflow","style","Step","useMemo","createStepComponents","hasApiSchema","Object","keys","schemas","filter","key","startsWith","length","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","createSchema","_Fragment","_jsxs","Portal","Popover","Root","open","Anchor","ref","steps","tour","reduce","acc","index","name","Error","excludeFromStepCount","_meta","displayedStepCount","totalStepCount"],"mappings":"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"}
|