@strapi/admin 5.38.0 → 5.38.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/components/Form.js +14 -0
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +14 -0
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.js +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +2 -2
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
- package/dist/admin/admin/src/translations/es.json.js +356 -120
- package/dist/admin/admin/src/translations/es.json.js.map +1 -1
- package/dist/admin/admin/src/translations/es.json.mjs +355 -121
- package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -0
- package/package.json +15 -10
|
@@ -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 } 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: rgba(50, 50, 77, 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","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 // 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,6 +1,6 @@
|
|
|
1
1
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Box, Portal, Popover } from '@strapi/design-system';
|
|
3
|
+
import { setOpacity, Box, Portal, Popover } from '@strapi/design-system';
|
|
4
4
|
import { styled } from 'styled-components';
|
|
5
5
|
import { useGetGuidedTourMetaQuery } from '../../services/admin.mjs';
|
|
6
6
|
import { useGuidedTour } from './Context.mjs';
|
|
@@ -34,7 +34,7 @@ const GuidedTourOverlay = styled(Box)`
|
|
|
34
34
|
left: 0;
|
|
35
35
|
right: 0;
|
|
36
36
|
bottom: 0;
|
|
37
|
-
background-color:
|
|
37
|
+
background-color: ${({ theme })=>setOpacity(theme.colors.neutral800, 0.2)};
|
|
38
38
|
z-index: 10;
|
|
39
39
|
`;
|
|
40
40
|
const GuidedTourTooltipImpl = ({ children, content, tourName, step, when })=>{
|
|
@@ -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 } 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: rgba(50, 50, 77, 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","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 // 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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"}
|