diff --git a/README.md b/README.md index 402562fc26..bbf26e319a 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ npx create-next-app@latest my-app npx nuxi@latest init my-app ``` ``` -npm create svelte@latest my-app +npx sv create my-app ``` Open the folder: diff --git a/e2e-projects/sveltekit/README.md b/e2e-projects/sveltekit/README.md index 5c91169b0c..1694b7d8f8 100644 --- a/e2e-projects/sveltekit/README.md +++ b/e2e-projects/sveltekit/README.md @@ -8,10 +8,10 @@ If you're seeing this, you've probably already done this step. Congrats! ```bash # create a new project in the current directory -npm create svelte@latest +npx sv create # create a new project in my-app -npm create svelte@latest my-app +npx sv create my-app ``` ## Developing diff --git a/packages/adapter-next/package.json b/packages/adapter-next/package.json index c79ec7a80e..dc07330663 100644 --- a/packages/adapter-next/package.json +++ b/packages/adapter-next/package.json @@ -1,6 +1,6 @@ { "name": "@slicemachine/adapter-next", - "version": "0.3.60", + "version": "0.3.61", "description": "Slice Machine adapter for Next.js.", "keywords": [ "typescript", diff --git a/packages/adapter-nuxt/package.json b/packages/adapter-nuxt/package.json index aeaaec5908..dabb487970 100644 --- a/packages/adapter-nuxt/package.json +++ b/packages/adapter-nuxt/package.json @@ -1,6 +1,6 @@ { "name": "@slicemachine/adapter-nuxt", - "version": "0.3.60", + "version": "0.3.61", "description": "Slice Machine adapter for Nuxt 3.", "keywords": [ "typescript", diff --git a/packages/adapter-nuxt2/package.json b/packages/adapter-nuxt2/package.json index cc30fd1a0f..0daba3cd9a 100644 --- a/packages/adapter-nuxt2/package.json +++ b/packages/adapter-nuxt2/package.json @@ -1,6 +1,6 @@ { "name": "@slicemachine/adapter-nuxt2", - "version": "0.3.60", + "version": "0.3.61", "description": "Slice Machine adapter for Nuxt 2.", "keywords": [ "typescript", diff --git a/packages/adapter-sveltekit/package.json b/packages/adapter-sveltekit/package.json index 6924f7761f..0a8af60541 100644 --- a/packages/adapter-sveltekit/package.json +++ b/packages/adapter-sveltekit/package.json @@ -1,6 +1,6 @@ { "name": "@slicemachine/adapter-sveltekit", - "version": "0.3.60", + "version": "0.3.61", "description": "Slice Machine adapter for SvelteKit.", "keywords": [ "typescript", diff --git a/packages/init/package.json b/packages/init/package.json index 840c5457d3..6d9a627f27 100644 --- a/packages/init/package.json +++ b/packages/init/package.json @@ -1,6 +1,6 @@ { "name": "@slicemachine/init", - "version": "2.10.17", + "version": "2.10.18", "description": "Init Prismic Slice Machine in your project", "keywords": [ "typescript", diff --git a/packages/init/src/SliceMachineInitProcess.ts b/packages/init/src/SliceMachineInitProcess.ts index a42127cd63..e9abae4516 100644 --- a/packages/init/src/SliceMachineInitProcess.ts +++ b/packages/init/src/SliceMachineInitProcess.ts @@ -898,7 +898,7 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""), try { const { value: onboardingExperimentVariant } = (await this.manager.telemetry.getExperimentVariant( - "shared-onboarding", + "shared-onboarding-new", )) ?? {}; if (onboardingExperimentVariant === "with-shared-onboarding") { this.manager.prismicRepository.completeOnboardingStep( diff --git a/packages/manager/package.json b/packages/manager/package.json index 6bde88d56e..5c25cee1e3 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -1,6 +1,6 @@ { "name": "@slicemachine/manager", - "version": "0.23.0", + "version": "0.23.1", "description": "Manage all aspects of a Slice Machine project.", "repository": { "type": "git", diff --git a/packages/manager/src/managers/telemetry/types.ts b/packages/manager/src/managers/telemetry/types.ts index b9551e7b9b..3bf16be832 100644 --- a/packages/manager/src/managers/telemetry/types.ts +++ b/packages/manager/src/managers/telemetry/types.ts @@ -39,12 +39,10 @@ export const SegmentEventType = { postPush_emptyStateCtaClicked: "post-push:empty-state-cta-clicked", postPush_toastCtaClicked: "post-push:toast-cta-clicked", experiment_exposure: "experiment:exposure", - onboarding_step_opened: "onboarding:step-opened", - onboarding_step_completed: "onboarding:step-completed", - onboarding_completed: "onboarding:completed", sharedOnboarding_step_opened: "shared-onboarding:step-opened", sharedOnboarding_step_completed: "shared-onboarding:step-completed", sharedOnboarding_completed: "shared-onboarding:completed", + sharedOnboarding_tutorial: "shared-onboarding:follow-tutorial", } as const; type SegmentEventTypes = (typeof SegmentEventType)[keyof typeof SegmentEventType]; @@ -96,17 +94,14 @@ export const HumanSegmentEventType = { [SegmentEventType.postPush_toastCtaClicked]: "SliceMachine Post Push Toast CTA Clicked", [SegmentEventType.experiment_exposure]: "$exposure", - [SegmentEventType.onboarding_step_opened]: - "SliceMachine Onboarding Step Opened", - [SegmentEventType.onboarding_step_completed]: - "SliceMachine Onboarding Step Completed", - [SegmentEventType.onboarding_completed]: "SliceMachine Onboarding Completed", [SegmentEventType.sharedOnboarding_step_completed]: "Prismic Onboarding Guide Step Completed", [SegmentEventType.sharedOnboarding_step_opened]: "Prismic Onboarding Guide Step Open", [SegmentEventType.sharedOnboarding_completed]: "Prismic Onboarding Guide Completed", + [SegmentEventType.sharedOnboarding_tutorial]: + "Prismic Onboarding Guide Follow Tutorial", } as const; export type HumanSegmentEventTypes = @@ -364,18 +359,6 @@ type SharedOnboardingProperties> = T & { source: "SliceMachine"; }; -type SliceMachineOnboardingStepOpened = SegmentEvent< - typeof SegmentEventType.onboarding_step_opened, - OnboardingCommonPayload ->; -type SliceMachineOnboardingStepCompleted = SegmentEvent< - typeof SegmentEventType.onboarding_step_completed, - OnboardingCommonPayload ->; -type SliceMachineOnboardingCompleted = SegmentEvent< - typeof SegmentEventType.onboarding_completed ->; - type SliceMachineSharedOnboardingStepOpened = SegmentEvent< typeof SegmentEventType.sharedOnboarding_step_opened, SharedOnboardingProperties @@ -388,7 +371,10 @@ type SliceMachineSharedOnboardingCompleted = SegmentEvent< typeof SegmentEventType.sharedOnboarding_completed, SharedOnboardingProperties >; - +type SliceMachineSharedOnboardingTutorial = SegmentEvent< + typeof SegmentEventType.sharedOnboarding_tutorial, + SharedOnboardingProperties +>; type SliceMachinePostPushEmptyStateCtaClicked = SegmentEvent< typeof SegmentEventType.postPush_emptyStateCtaClicked >; @@ -436,12 +422,10 @@ export type SegmentEvents = | SliceMachineStart | SliceLibraryBetaModalOpened | SliceLibraryBetaCodeOpened - | SliceMachineOnboardingStepOpened - | SliceMachineOnboardingStepCompleted - | SliceMachineOnboardingCompleted | SliceMachineSharedOnboardingStepOpened | SliceMachineSharedOnboardingStepCompleted | SliceMachineSharedOnboardingCompleted + | SliceMachineSharedOnboardingTutorial | SliceMachinePostPushEmptyStateCtaClicked | SliceMachinePostPushToastCtaClicked | SliceMachineExperimentExposure; diff --git a/packages/plugin-kit/package.json b/packages/plugin-kit/package.json index cf63ab9c4a..e02d549bab 100644 --- a/packages/plugin-kit/package.json +++ b/packages/plugin-kit/package.json @@ -1,6 +1,6 @@ { "name": "@slicemachine/plugin-kit", - "version": "0.4.60", + "version": "0.4.61", "description": "A set of helpers to develop and run Slice Machine plugins", "keywords": [ "typescript", diff --git a/packages/slice-machine/package.json b/packages/slice-machine/package.json index ce73dbe6cf..383e986a9a 100644 --- a/packages/slice-machine/package.json +++ b/packages/slice-machine/package.json @@ -1,6 +1,6 @@ { "name": "slice-machine-ui", - "version": "2.11.0", + "version": "2.11.1", "license": "MIT", "description": "A visual builder for your Slice Models with all the tools you need to generate data models and mock CMS content locally.", "repository": { @@ -43,9 +43,9 @@ "@emotion/react": "11.11.1", "@extractus/oembed-extractor": "3.1.8", "@prismicio/client": "7.11.0", - "@prismicio/editor-fields": "0.4.58", - "@prismicio/editor-support": "0.4.58", - "@prismicio/editor-ui": "0.4.58", + "@prismicio/editor-fields": "0.4.59", + "@prismicio/editor-support": "0.4.59", + "@prismicio/editor-ui": "0.4.59", "@prismicio/mock": "0.3.3", "@prismicio/mocks": "2.7.0-alpha.0", "@prismicio/simulator": "0.1.4", diff --git a/packages/slice-machine/src/features/customTypes/EditDropdown.tsx b/packages/slice-machine/src/features/customTypes/EditDropdown.tsx index 54b4b9542b..c8e269e902 100644 --- a/packages/slice-machine/src/features/customTypes/EditDropdown.tsx +++ b/packages/slice-machine/src/features/customTypes/EditDropdown.tsx @@ -69,7 +69,7 @@ export const EditDropdown: FC = ({ return ( <> - + >; -}; - -export const InAppGuideContext = createContext< - InAppGuideContextValue | undefined ->(undefined); - -export const InAppGuideProvider: FC = (props) => { - const { children } = props; - const { eligible: isNewOnboardingEnabled } = useOnboardingExperiment(); - const [isInAppGuideOpen, setIsInAppGuideOpen] = usePersistedState( - "isInAppGuideOpen", - true, - ); - - const memoizedValue = useMemo(() => { - if (isNewOnboardingEnabled) { - return { isInAppGuideOpen: false, setIsInAppGuideOpen: () => undefined }; - } - return { isInAppGuideOpen, setIsInAppGuideOpen }; - }, [isInAppGuideOpen, setIsInAppGuideOpen, isNewOnboardingEnabled]); - - return ( - - {children} - - ); -}; - -export const useInAppGuide = () => { - const context = useContext(InAppGuideContext); - if (context === undefined) { - throw new Error("useInAppGuide must be used within an InAppGuideProvider"); - } - return context; -}; diff --git a/packages/slice-machine/src/features/inAppGuide/InAppGuideDialog.tsx b/packages/slice-machine/src/features/inAppGuide/InAppGuideDialog.tsx deleted file mode 100644 index a9dd1da276..0000000000 --- a/packages/slice-machine/src/features/inAppGuide/InAppGuideDialog.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { - Box, - Dialog, - DialogContent, - DialogHeader, - IconButton, - ScrollArea, - Separator, - Text, - Video, -} from "@prismicio/editor-ui"; -import { FC } from "react"; - -import { Count } from "@/components/Count"; -import { useOnboardingExperiment } from "@/features/onboarding/useOnboardingExperiment"; -import { useIsEmptyProject } from "@/hooks/useIsEmptyProject"; -import { HelpIcon } from "@/icons/HelpIcon"; - -import { useInAppGuideContent } from "./inAppGuideContent"; -import { useInAppGuide } from "./InAppGuideContext"; - -export const InAppGuideDialog: FC = () => { - const isEmptyProject = useIsEmptyProject(); - const { isInAppGuideOpen, setIsInAppGuideOpen } = useInAppGuide(); - const inAppGuideContent = useInAppGuideContent(); - - const { eligible: newOnboardingEnabled } = useOnboardingExperiment(); - - const trigger = - !isEmptyProject && !newOnboardingEnabled ? ( - - } - onClick={() => { - setIsInAppGuideOpen(!isInAppGuideOpen); - }} - radius="full" - variant="solid" - /> - - ) : undefined; - - return ( - { - setIsInAppGuideOpen(open); - }} - position="bottomRight" - size={{ - width: 360, - height: 456, - }} - > - - - - - {inAppGuideContent.description} - - - - - - - {inAppGuideContent.steps.map((content, index) => ( - - - - {index + 1} - - {content.title} - - - - - - - ))} - - - {inAppGuideContent.successTitle} - {inAppGuideContent.successDescription} - - - - - ); -}; diff --git a/packages/slice-machine/src/features/inAppGuide/inAppGuideContent.tsx b/packages/slice-machine/src/features/inAppGuide/inAppGuideContent.tsx deleted file mode 100644 index 794fcc5f68..0000000000 --- a/packages/slice-machine/src/features/inAppGuide/inAppGuideContent.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { Text } from "@prismicio/editor-ui"; - -import { useRepositoryInformation } from "@/hooks/useRepositoryInformation"; - -export function useInAppGuideContent() { - const { repositoryUrl } = useRepositoryInformation(); - - return { - title: "Build a page in 5 minutes", - description: - "Great, now that you have a page type, let's make it a live page!", - steps: [ - { - title: "Add slices to your page type", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1700213517/IN-APP-GUIDE-SM/ADD_SLICE.mp4", - description: "Use slice templates and add them to your page type.", - }, - { - title: "Code your page", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1700213517/IN-APP-GUIDE-SM/CODE_SNIP.mp4", - description: - "If you don't already have a page component, copy-paste the page snippets provided in your page type to create one.", - }, - { - title: "Push to your Page Builder", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1700213517/IN-APP-GUIDE-SM/PUSH.mp4", - description: - "You have just created some models, but you can't use them yet. First, you must push them to the Page Builder. The Page Builder is where you create content. Go head — push your models.", - }, - { - title: "Create content", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1700213517/IN-APP-GUIDE-SM/WRITE.mp4", - description: ( - <> - Open your{" "} - - Page Builder - - , create a page, add slices, save, and publish. Then, come back - here. - - ), - }, - { - title: "Render your page", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1700213517/IN-APP-GUIDE-SM/PREVIEW.mp4", - description: ( - <> - To render the page, run your project in your terminal and visit the - page on localhost (e.g.{" "} - localhost:3000/example-page). - - ), - }, - ], - successTitle: "Next", - successDescription: - "Create more slices and then go back to the Page Builder to build out your website.", - }; -} diff --git a/packages/slice-machine/src/features/onboarding/OnboardingGuide.tsx b/packages/slice-machine/src/features/onboarding/OnboardingGuide.tsx index 39459f6257..2e0c907dfb 100644 --- a/packages/slice-machine/src/features/onboarding/OnboardingGuide.tsx +++ b/packages/slice-machine/src/features/onboarding/OnboardingGuide.tsx @@ -1,29 +1,25 @@ import { useMediaQuery } from "@prismicio/editor-ui"; -import { useOnboardingExperiment } from "@/features/onboarding/useOnboardingExperiment"; import { useUpdateAvailable } from "@/hooks/useUpdateAvailable"; import { SharedOnboardingGuide } from "./SharedOnboardingGuide"; -import { SliceMachineOnboardingGuide } from "./SliceMachineOnboardingGuide/SliceMachineOnboardingGuide"; import { useSharedOnboardingExperiment } from "./useSharedOnboardingExperiment"; export function OnboardingGuide() { const isVisible = useIsOnboardingGuideVisible(); const isSharedExperimentEligible = useSharedOnboardingExperiment().eligible; - if (!isVisible) return null; - if (isSharedExperimentEligible) return ; - return ; + return isVisible && isSharedExperimentEligible ? ( + + ) : null; } function useIsOnboardingGuideVisible() { const isMediaQueryVisible = useMediaQuery({ min: "medium" }); - const isExperimentEligible = useOnboardingExperiment().eligible; const updates = useUpdateAvailable(); return ( isMediaQueryVisible && - isExperimentEligible && !updates.sliceMachineUpdateAvailable && !updates.adapterUpdateAvailable ); diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingGuide.module.css b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingGuide.module.css deleted file mode 100644 index 61f6f423ec..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingGuide.module.css +++ /dev/null @@ -1,21 +0,0 @@ -.container { - overflow: hidden; - position: relative; -} - -.confettiCannon { - position: absolute; - bottom: 0; - left: 0; -} - -.visible { - opacity: 1; -} - -.invisible { - opacity: 0; - /* A delay of 2s gives room for a 3s confetti animation to happen and then - fade out while the it's ending */ - transition: opacity 500ms linear 2s; -} diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingProgressStepper.tsx b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingProgressStepper.tsx deleted file mode 100644 index 2a49a422d3..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingProgressStepper.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { - Button, - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuLabel, - DropdownMenuTrigger, - Icon, - Text, -} from "@prismicio/editor-ui"; -import { useState } from "react"; - -import { telemetry } from "@/apiClient"; - -import { useOnboardingContext } from "./OnboardingProvider"; -import { OnboardingStepDialog } from "./OnboardingStepDialog"; -import type { OnboardingStep } from "./types"; - -const EndCtaIcon = () => ; - -interface OnboardingProgressStepperProps { - buttonSize?: "large" | "medium"; -} -export function OnboardingProgressStepper( - props: OnboardingProgressStepperProps, -) { - const { buttonSize = "medium" } = props; - const { completedStepCount, steps, isStepComplete, isComplete } = - useOnboardingContext(); - - const [isListOpen, setListOpen] = useState(false); - const [isDialogOpen, setDialogOpen] = useState(false); - const [activeStep, setActiveStep] = useState(steps[0]); - - const showStep = (step: OnboardingStep) => { - setActiveStep(step); - setDialogOpen(true); - void telemetry.track({ - event: "onboarding:step-opened", - stepId: step.id, - stepTitle: step.title, - }); - }; - - return ( - <> - setDialogOpen(false)} - /> - - - - - {/* The sideOffset is used to align the list with the bottom of the onboarding card */} - -
setListOpen(false)}> - - - Progress - - - {steps.map((step, index) => { - const isCompleted = isStepComplete(step); - - return ( - showStep(step)} - description={step.description} - completed={isCompleted} - readOnly={step.defaultCompleted} - endAdornment={ - step.defaultCompleted !== true && ( - - ) - } - > - {`${index + 1} ${step.title}`} - - ); - })} -
-
-
- - ); -} diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingProvider.tsx b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingProvider.tsx deleted file mode 100644 index bf978c6ede..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingProvider.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import { createContext, ReactNode, useContext } from "react"; - -import { telemetry } from "@/apiClient"; -import { onboardingSteps } from "@/features/onboarding/SliceMachineOnboardingGuide/content"; -import { - type OnboardingStep, - type OnboardingStepId, - type OnboardingStepStatuses, - onboardingStepStatusesSchema, -} from "@/features/onboarding/SliceMachineOnboardingGuide/types"; -import { usePersistedState } from "@/hooks/usePersistedState"; - -type OnboardingContext = { - steps: OnboardingStep[]; - completedStepCount: number; - toggleStepComplete: (step: OnboardingStep) => void; - getStepIndex: (step: OnboardingStepId) => number; - isStepComplete: (step: OnboardingStep) => boolean; - isComplete: boolean; -}; - -export const OnboardingContext = createContext( - undefined, -); - -const getInitialState = (steps: OnboardingStep[]): OnboardingStepStatuses => { - // if the old guide was dismissed, all steps start as complete - const wasOldGuideDismissed = - localStorage.getItem("slice-machine_isInAppGuideOpen") === "false"; - - return Object.fromEntries( - steps.map((step) => [ - step.id, - step.defaultCompleted ?? wasOldGuideDismissed, - ]), - ) as OnboardingStepStatuses; -}; - -type OnboardingProviderProps = { - children: ReactNode; - onComplete?: () => void; -}; - -export const OnboardingProvider = ({ - children, - onComplete, -}: OnboardingProviderProps) => { - const steps = onboardingSteps; - const [stepStatus, setStepStatus] = useStepStatus(); - - const toggleStepComplete = (step: OnboardingStep) => { - const newCompleteState = !isStepComplete(step); - const nextState = { ...stepStatus, [step.id]: newCompleteState }; - setStepStatus(nextState); - - if (newCompleteState) { - void telemetry.track({ - event: "onboarding:step-completed", - stepId: step.id, - stepTitle: step.title, - }); - } - if (Object.values(nextState).every(Boolean)) { - onComplete?.(); - void telemetry.track({ - event: "onboarding:completed", - }); - } - }; - - const getStepIndex = (stepId: OnboardingStepId) => { - return steps.findIndex(({ id }) => id === stepId); - }; - - const isStepComplete = (step: OnboardingStep) => { - return Boolean(stepStatus[step.id]) || Boolean(step.defaultCompleted); - }; - - const completedStepCount = steps.filter((step) => - isStepComplete(step), - ).length; - - return ( - - {children} - - ); -}; - -function useStepStatus() { - return usePersistedState( - "onboardingSteps", - getInitialState(onboardingSteps), - { schema: onboardingStepStatusesSchema }, - ); -} - -export function useIsOnboardingCompleted() { - const [stepStatus] = useStepStatus(); - - const completedStepCount = onboardingSteps.filter( - (step) => Boolean(stepStatus[step.id]) || Boolean(step.defaultCompleted), - ).length; - - return completedStepCount === onboardingSteps.length; -} - -export const useOnboardingContext = () => { - const context = useContext(OnboardingContext); - - if (context == null) { - throw new Error( - "useOnboardingContext must be used within an OnboardingProvider", - ); - } - - return context; -}; diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/OnboardingStepDialog.tsx b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/OnboardingStepDialog.tsx deleted file mode 100644 index eb62c47d92..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/OnboardingStepDialog.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { - Dialog, - DialogActionButton, - DialogActions, - DialogCancelButton, - DialogContent, - DialogHeader, -} from "@prismicio/editor-ui"; -import { useState } from "react"; - -import { useOnboardingContext } from "@/features/onboarding/SliceMachineOnboardingGuide/OnboardingProvider"; -import type { OnboardingStep } from "@/features/onboarding/SliceMachineOnboardingGuide/types"; - -import { OnboardingStepDialogContent } from "./OnboardingStepDialogContent"; - -type OnboardingStepDialogProps = { - step: OnboardingStep; - isOpen: boolean; - onClose: () => void; -}; - -export const OnboardingStepDialog = ({ - step, - isOpen, - onClose, -}: OnboardingStepDialogProps) => { - const { toggleStepComplete, isStepComplete } = useOnboardingContext(); - const [ctaOkText, setCtaOkText] = useState(getCtaOkText); - - function getCtaOkText() { - return isStepComplete(step) ? "Undo step" : "Mark as done"; - } - - const markAsDone = () => { - if (!isOpen) return; - toggleStepComplete(step); - onClose(); - }; - - const updateCtaOkText = () => { - if (!isOpen) return; - setCtaOkText(getCtaOkText()); - }; - - return ( - - - - - - Close - - {ctaOkText} - - - - - ); -}; diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/OnboardingStepDialogContent.tsx b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/OnboardingStepDialogContent.tsx deleted file mode 100644 index 10516a40d1..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/OnboardingStepDialogContent.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Box, ScrollArea, Text, Video } from "@prismicio/editor-ui"; - -import { useOnboardingContext } from "@/features/onboarding/SliceMachineOnboardingGuide/OnboardingProvider"; -import { OnboardingStep } from "@/features/onboarding/SliceMachineOnboardingGuide/types"; - -type OnboardingStepDialogContentProps = { - step: OnboardingStep; -}; - -export function OnboardingStepDialogContent( - props: OnboardingStepDialogContentProps, -) { - const { step } = props; - const { getStepIndex } = useOnboardingContext(); - - const { content: Content, videoUrl, title = step.title } = step; - - return ( - - -
- - Step {getStepIndex(step.id) + 1} - - {title} - {Content && } -
- {typeof videoUrl == "string" && ( -
-
- ); -} diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/index.ts b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/index.ts deleted file mode 100644 index b7a22ec117..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { OnboardingStepDialog } from "./OnboardingStepDialog"; diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingTutorial/OnboardingTutorial.tsx b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingTutorial/OnboardingTutorial.tsx deleted file mode 100644 index f5d6108e4f..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingTutorial/OnboardingTutorial.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Box, Icon, Text } from "@prismicio/editor-ui"; - -import { useMarketingContent } from "@/hooks/useMarketingContent"; - -export function OnboardingTutorial() { - const { tutorial } = useMarketingContent(); - - const url = tutorial?.url; - - if (url === undefined) return null; - - return ( - - - Or watch our full course - - - - ); -} diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/SliceMachineOnboardingGuide.tsx b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/SliceMachineOnboardingGuide.tsx deleted file mode 100644 index 994aa4a80d..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/SliceMachineOnboardingGuide.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { useConfetti } from "@prismicio/editor-support/Animation"; -import { - Card, - CardContent, - ProgressBar, - Text, - useMediaQuery, -} from "@prismicio/editor-ui"; -import { useState } from "react"; - -import styles from "./OnboardingGuide.module.css"; -import { OnboardingProgressStepper } from "./OnboardingProgressStepper"; -import { - OnboardingProvider, - useIsOnboardingCompleted, - useOnboardingContext, -} from "./OnboardingProvider"; -import { OnboardingTutorial } from "./OnboardingTutorial/OnboardingTutorial"; - -export function SliceMachineOnboardingGuide() { - const isComplete = useIsOnboardingCompleted(); - const [isVisible, setVisible] = useState(!isComplete); - const confetti = useConfetti({ onAnimationEnd: () => setVisible(false) }); - - if (!isVisible) return null; - - return ( - -
- -
-
- - ); -} - -function OnboardingGuideCard() { - const { steps, completedStepCount, isComplete } = useOnboardingContext(); - const isMediumScreen = useMediaQuery({ min: "medium" }); - - if (!isMediumScreen) return null; - - return ( -
- - -
- - {`Build your first Prismic Page in ${steps.length.toString()} simple steps`} - - - Render a live page with content coming from Prismic in 5 mins - -
- `${value}/${max}`} - /> - - -
-
-
- ); -} diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/content.tsx b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/content.tsx deleted file mode 100644 index ac71b31e61..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/content.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { Text } from "@prismicio/editor-ui"; - -import type { OnboardingStep } from "./types"; - -export const onboardingSteps: OnboardingStep[] = [ - { - id: "createProject", - title: "Create your Prismic website", - description: "Create and set up your project", - defaultCompleted: true, - }, - { - id: "createPageType", - title: "Create your first Page Type", - description: "Build the structure of your page", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1721918320/DEV_TOOLS/ONBOARDING_GUIDE/Create_page_type_xdn13j.mp4", - content: () => ( - - A page type is a base content structure editors will use to create pages - in the Page Builder (Prismic's content creation UI). A page type can be - reusable (e.g., for multiple blog posts) or single (e.g., for a one-time - page like the homepage). - - ), - }, - { - id: "codePage", - title: "Code your Page", - description: "Prepare code to fetch content", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1721918320/DEV_TOOLS/ONBOARDING_GUIDE/Step2_code_your_page_jatiur.mp4", - content: () => ( - Prepare your code to query the content from the Prismic API. - ), - }, - { - id: "createSlice", - title: "Create your first Slice", - description: "Build a reusable section", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1721918322/DEV_TOOLS/ONBOARDING_GUIDE/Step3_add_slice_qzmvxf.mp4", - content: () => ( - - Slices are website sections that can be reused on different pages with - different content. Each slice has a code component automatically - generated by Slice Machine. Start with a template and look at your code - to see how it's structured. - - ), - }, - { - id: "reviewAndPush", - title: "Review & push changes", - description: "Enable editors to create content", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1721918320/DEV_TOOLS/ONBOARDING_GUIDE/DevTools_Squad_push_changes_ovvmul.mp4", - content: () => ( - - Your page types and slices currently exist only in your local project. - Push them to your repository to make them available for your content - editors. - - ), - }, - { - id: "createContent", - title: "Create content for your page", - description: "Publish your page to the API", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1721918324/DEV_TOOLS/ONBOARDING_GUIDE/Cre%CC%81er_contenu_e%CC%81tape_4_z9vlzt.mp4", - content: () => ( - - In Prismic, content creation takes place in the Prismic Page Builder UI. - Open the Page Builder and start creating your first page. - - ), - }, - { - id: "renderPage", - title: "Preview your page", - description: "View your page in the browser", - videoUrl: - "https://res.cloudinary.com/dmtf1daqp/video/upload/v1721918321/DEV_TOOLS/ONBOARDING_GUIDE/Step_6_Render_Page_tnauh9.mp4", - content: () => ( - - Now that your content is published, you can run your project in your - terminal and visit the page on your local server (e.g.,{" "} - localhost:3000/example-page). Your content - should now be visible! - - ), - }, -]; diff --git a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/types.ts b/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/types.ts deleted file mode 100644 index 6d2edcb022..0000000000 --- a/packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/types.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { z } from "zod"; - -export const onboardingStepStatusesSchema = z.object({ - createProject: z.boolean().optional(), - createPageType: z.boolean(), - codePage: z.boolean(), - createSlice: z.boolean(), - reviewAndPush: z.boolean(), - createContent: z.boolean(), - renderPage: z.boolean(), -}); - -export type OnboardingStepStatuses = z.infer< - typeof onboardingStepStatusesSchema ->; - -export type OnboardingStepId = keyof OnboardingStepStatuses; - -export interface OnboardingStep { - id: OnboardingStepId; - title: string; - description: string; - content?: () => JSX.Element; - videoUrl?: string; - defaultCompleted?: boolean; -} diff --git a/packages/slice-machine/src/features/onboarding/useOnboardingExperiment.ts b/packages/slice-machine/src/features/onboarding/useOnboardingExperiment.ts deleted file mode 100644 index c2cf40f4c5..0000000000 --- a/packages/slice-machine/src/features/onboarding/useOnboardingExperiment.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { useExperimentVariant } from "@/hooks/useExperimentVariant"; - -export const useOnboardingExperiment = () => { - const variant = useExperimentVariant("slicemachine-onboarding"); - return { eligible: variant?.value === "on" }; -}; diff --git a/packages/slice-machine/src/features/onboarding/useSharedOnboardingExperiment.ts b/packages/slice-machine/src/features/onboarding/useSharedOnboardingExperiment.ts index 17a6e11105..f4c49ead21 100644 --- a/packages/slice-machine/src/features/onboarding/useSharedOnboardingExperiment.ts +++ b/packages/slice-machine/src/features/onboarding/useSharedOnboardingExperiment.ts @@ -1,6 +1,6 @@ import { useExperimentVariant } from "@/hooks/useExperimentVariant"; export const useSharedOnboardingExperiment = () => { - const variant = useExperimentVariant("shared-onboarding"); + const variant = useExperimentVariant("shared-onboarding-new"); return { eligible: variant?.value === "with-shared-onboarding" }; }; diff --git a/packages/slice-machine/src/legacy/components/Forms/CreateCustomTypeModal/CreateCustomTypeModal.tsx b/packages/slice-machine/src/legacy/components/Forms/CreateCustomTypeModal/CreateCustomTypeModal.tsx index b291f2d7f9..6f35e0e7c6 100644 --- a/packages/slice-machine/src/legacy/components/Forms/CreateCustomTypeModal/CreateCustomTypeModal.tsx +++ b/packages/slice-machine/src/legacy/components/Forms/CreateCustomTypeModal/CreateCustomTypeModal.tsx @@ -165,10 +165,18 @@ export const CreateCustomTypeModal: React.FC = ({ })} name is already taken.`; } + if (["update", "insert"].includes(label.toLowerCase())) { + errors.label = `Name "${label}" is reserved for Slice Machine use.`; + } + if (!id || !id.length) { errors.id = "ID cannot be empty."; } + if (["update", "insert"].includes(id.toLowerCase())) { + errors.id = `Id "${id}" is reserved for Slice Machine use.`; + } + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions if (!errors.id && id && !API_ID_REGEX.exec(id)) { errors.id = "Invalid id: No special characters allowed."; diff --git a/packages/slice-machine/src/legacy/components/Forms/RenameCustomTypeModal/RenameCustomTypeModal.tsx b/packages/slice-machine/src/legacy/components/Forms/RenameCustomTypeModal/RenameCustomTypeModal.tsx index ddceea5746..6ad261d8e6 100644 --- a/packages/slice-machine/src/legacy/components/Forms/RenameCustomTypeModal/RenameCustomTypeModal.tsx +++ b/packages/slice-machine/src/legacy/components/Forms/RenameCustomTypeModal/RenameCustomTypeModal.tsx @@ -103,6 +103,10 @@ export const RenameCustomTypeModal: React.FC = ({ })} name is already taken.`; } + if (["update", "insert"].includes(newName.toLowerCase())) { + errors.customTypeName = `Name "${newName}" is reserved for Slice Machine use.`; + } + return Object.keys(errors).length > 0 ? errors : undefined; }} > diff --git a/packages/slice-machine/src/legacy/components/Forms/formsValidator.ts b/packages/slice-machine/src/legacy/components/Forms/formsValidator.ts index 7c884164d1..3d5f304cfd 100644 --- a/packages/slice-machine/src/legacy/components/Forms/formsValidator.ts +++ b/packages/slice-machine/src/legacy/components/Forms/formsValidator.ts @@ -21,21 +21,21 @@ export function validateSliceModalValues( if (!sliceName) { return { sliceName: "Cannot be empty" }; } + if (RESERVED_SLICE_NAME.includes(sliceName.toLowerCase())) { + return { + sliceName: `Name "${sliceName}" is reserved for Slice Machine use.`, + }; + } if (!API_ID_REGEX.exec(sliceName)) { - return { sliceName: "No special characters allowed" }; + return { sliceName: "No special characters allowed." }; } const cased = startCase(camelCase(sliceName)).replace(/\s/gm, ""); if (cased !== sliceName.trim()) { - return { sliceName: "Value has to be PascalCased" }; + return { sliceName: "Value has to be PascalCased." }; } // See: #599 if (sliceName.match(/^\d/)) { - return { sliceName: "Value cannot start with a number" }; - } - if (RESERVED_SLICE_NAME.includes(sliceName)) { - return { - sliceName: `${sliceName} is reserved for Slice Machine use`, - }; + return { sliceName: "Value cannot start with a number." }; } const localNames = localLibs.flatMap((lib) => diff --git a/packages/slice-machine/src/legacy/components/ReviewModal/ReviewModal.tsx b/packages/slice-machine/src/legacy/components/ReviewModal/ReviewModal.tsx index a5ef1ab643..7401e9225e 100644 --- a/packages/slice-machine/src/legacy/components/ReviewModal/ReviewModal.tsx +++ b/packages/slice-machine/src/legacy/components/ReviewModal/ReviewModal.tsx @@ -1,7 +1,6 @@ import { FC } from "react"; import { useSelector } from "react-redux"; -import { useInAppGuide } from "@/features/inAppGuide/InAppGuideContext"; import { hasLocal } from "@/legacy/lib/models/common/ModelData"; import { selectAllCustomTypes } from "@/modules/availableCustomTypes"; import { getLibraries } from "@/modules/slices"; @@ -11,7 +10,6 @@ import { SliceMachineStoreType } from "@/redux/type"; import { ReviewForm } from "./ReviewForm"; export const ReviewModal: FC = () => { - const { isInAppGuideOpen } = useInAppGuide(); const { userReview, customTypes, libraries, lastSyncChange } = useSelector( (store: SliceMachineStoreType) => ({ userReview: getUserReview(store), @@ -21,11 +19,6 @@ export const ReviewModal: FC = () => { }), ); - // Opt out directly if the in-app guide is open - if (isInAppGuideOpen) { - return null; - } - const sliceCount = // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions libraries && libraries.length diff --git a/packages/slice-machine/src/legacy/lib/consts.ts b/packages/slice-machine/src/legacy/lib/consts.ts index cf6b349261..6157f54b6d 100644 --- a/packages/slice-machine/src/legacy/lib/consts.ts +++ b/packages/slice-machine/src/legacy/lib/consts.ts @@ -1,5 +1,5 @@ // A list of slice names that are reserved for internal uses. -export const RESERVED_SLICE_NAME = ["components"]; +export const RESERVED_SLICE_NAME = ["components", "update", "insert"]; export const acceptedImagesTypes = ["png", "jpg", "jpeg"]; diff --git a/packages/slice-machine/src/pages/_app.tsx b/packages/slice-machine/src/pages/_app.tsx index 6a410fb2f6..446574a8cf 100644 --- a/packages/slice-machine/src/pages/_app.tsx +++ b/packages/slice-machine/src/pages/_app.tsx @@ -34,8 +34,6 @@ import { ThemeProvider as ThemeUIThemeProvider, useThemeUI } from "theme-ui"; import { getState } from "@/apiClient"; import { ErrorBoundary } from "@/ErrorBoundary"; -import { InAppGuideProvider } from "@/features/inAppGuide/InAppGuideContext"; -import { InAppGuideDialog } from "@/features/inAppGuide/InAppGuideDialog"; import { AutoSyncProvider } from "@/features/sync/AutoSyncProvider"; import { RouteChangeProvider } from "@/hooks/useRouteChange"; import SliceMachineApp from "@/legacy/components/App"; @@ -146,18 +144,11 @@ function App({ > }> - - - - - - - - - - - - + + + + + diff --git a/packages/start-slicemachine/package.json b/packages/start-slicemachine/package.json index 4188e5d255..3dae5e6973 100644 --- a/packages/start-slicemachine/package.json +++ b/packages/start-slicemachine/package.json @@ -1,6 +1,6 @@ { "name": "start-slicemachine", - "version": "0.12.40", + "version": "0.12.41", "description": "Start Slice Machine from within a project.", "repository": { "type": "git", diff --git a/playwright/fixtures/index.ts b/playwright/fixtures/index.ts index ad4bde98aa..7ce051a236 100644 --- a/playwright/fixtures/index.ts +++ b/playwright/fixtures/index.ts @@ -245,10 +245,6 @@ export const test = baseTest.extend({ })); const newStorage = onboarded ? [ - { - name: `${SLICE_MACHINE_STORAGE_PREFIX}_isInAppGuideOpen`, - value: "false", - }, { name: `${SLICE_MACHINE_STORAGE_PREFIX}_staticFieldsInfoDialogDismissed`, value: "true", diff --git a/playwright/pages/SliceMachinePage.ts b/playwright/pages/SliceMachinePage.ts index 5ca601abcf..69f8320896 100644 --- a/playwright/pages/SliceMachinePage.ts +++ b/playwright/pages/SliceMachinePage.ts @@ -2,14 +2,12 @@ import { Locator, Page, expect } from "@playwright/test"; import { Menu } from "./components/Menu"; import { ReviewDialog } from "./components/ReviewDialog"; -import { InAppGuideDialog } from "./components/InAppGuideDialog"; import { LoginDialog } from "./components/LoginDialog"; export class SliceMachinePage { readonly page: Page; readonly menu: Menu; readonly reviewDialog: ReviewDialog; - readonly inAppGuideDialog: InAppGuideDialog; readonly loginDialog: LoginDialog; readonly body: Locator; readonly breadcrumb: Locator; @@ -21,7 +19,6 @@ export class SliceMachinePage { this.page = page; this.menu = new Menu(page); this.reviewDialog = new ReviewDialog(page); - this.inAppGuideDialog = new InAppGuideDialog(page); this.loginDialog = new LoginDialog(page); /** diff --git a/playwright/pages/components/InAppGuideDialog.ts b/playwright/pages/components/InAppGuideDialog.ts deleted file mode 100644 index 27d9d6bfd6..0000000000 --- a/playwright/pages/components/InAppGuideDialog.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Locator, Page } from "@playwright/test"; - -import { Dialog } from "./Dialog"; - -export class InAppGuideDialog extends Dialog { - override readonly closeButton: Locator; - - constructor(page: Page) { - super(page, { - title: "Build a page in 5 minutes", - }); - - /** - * Components - */ - // Handle components here - - /** - * Static locators - */ - this.closeButton = this.dialog.getByRole("button"); - } - - /** - * Dynamic locators - */ - // Handle dynamic locators here - - /** - * Actions - */ - // Handle actions here - - /** - * Assertions - */ - // Handle assertions here -} diff --git a/playwright/tests/common/autoSync.spec.ts b/playwright/tests/common/autoSync.spec.ts index 7fe7b08bc4..364d52f662 100644 --- a/playwright/tests/common/autoSync.spec.ts +++ b/playwright/tests/common/autoSync.spec.ts @@ -3,7 +3,10 @@ import { expect } from "@playwright/test"; import { test } from "../../fixtures"; import { environments } from "../../mocks"; -test("I can see the auto-sync succeed when making a change", async ({ +// TODO: Fix if we release auto-sync (without feature flag) +// Test skipped as the feature is not currently maintained, and the test is randomly failing +// https://linear.app/prismic/issue/DT-2526/aadev-i-dont-want-to-have-flaky-test +test.skip("I can see the auto-sync succeed when making a change", async ({ pageTypesBuilderPage, reusablePageType, procedures, diff --git a/playwright/tests/common/inAppGuide.spec.ts b/playwright/tests/common/inAppGuide.spec.ts deleted file mode 100644 index 4214cf2d42..0000000000 --- a/playwright/tests/common/inAppGuide.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { expect } from "@playwright/test"; - -import { test } from "../../fixtures"; - -test.use({ onboarded: false }); - -test("I can see the in-app guide open by default", async ({ - sliceMachinePage, -}) => { - await sliceMachinePage.gotoDefaultPage(); - - await expect(sliceMachinePage.inAppGuideDialog.title).toBeVisible(); -}); - -test("I can close the in-app guide", async ({ sliceMachinePage }) => { - await sliceMachinePage.gotoDefaultPage(); - - await expect(sliceMachinePage.inAppGuideDialog.title).toBeVisible(); - await sliceMachinePage.inAppGuideDialog.closeButton.click(); - await expect(sliceMachinePage.inAppGuideDialog.title).not.toBeVisible(); - - await sliceMachinePage.page.reload(); - await expect(sliceMachinePage.inAppGuideDialog.title).not.toBeVisible(); -}); - -test("I can see the in-app guide on different pages", async ({ - sliceMachinePage, - slicesListPage, - customTypesTablePage, -}) => { - await slicesListPage.goto(); - await expect(sliceMachinePage.inAppGuideDialog.title).toBeVisible(); - - await customTypesTablePage.goto(); - await expect(sliceMachinePage.inAppGuideDialog.title).toBeVisible(); -}); diff --git a/playwright/tests/common/reviewForm.spec.ts b/playwright/tests/common/reviewForm.spec.ts index c4f3a04067..13bba02fd0 100644 --- a/playwright/tests/common/reviewForm.spec.ts +++ b/playwright/tests/common/reviewForm.spec.ts @@ -10,37 +10,6 @@ test.use({ }, }); -test("I can write a review after onboarding", async ({ - sliceMachinePage, - procedures, -}) => { - const libraries = generateLibraries({ slicesCount: 1 }); - - // We mock a page type with a slice that is a requirement for the review dialog - procedures.mock("getState", ({ data }) => ({ - ...(data as Record), - libraries, - customTypes: generateTypes({ typesCount: 1, libraries }), - remoteCustomTypes: [], - remoteSlices: [], - clientError: undefined, - })); - - await sliceMachinePage.gotoDefaultPage(); - - // We close the in app guide to display the review dialog - await sliceMachinePage.inAppGuideDialog.closeButton.click(); - - await sliceMachinePage.reviewDialog.submitReview({ - rating: 4, - message: "Great job!", - }); - - // We verify that the review dialog is not displayed anymore - await sliceMachinePage.page.reload(); - await expect(sliceMachinePage.reviewDialog.title).not.toBeVisible(); -}); - test("I can write a review after creating enough models", async ({ sliceMachinePage, procedures, @@ -63,9 +32,6 @@ test("I can write a review after creating enough models", async ({ await sliceMachinePage.gotoDefaultPage(); - // We close the in app guide so the review dialog can be displayed - await sliceMachinePage.inAppGuideDialog.closeButton.click(); - // We close the first review for onboarding await sliceMachinePage.reviewDialog.closeButton.click(); @@ -109,9 +75,6 @@ test("I can close the review dialog", async ({ await sliceMachinePage.gotoDefaultPage(); - // We close the in app guide to display the review dialog - await sliceMachinePage.inAppGuideDialog.closeButton.click(); - await sliceMachinePage.reviewDialog.closeButton.click(); // We verify that the review dialog is not displayed anymore diff --git a/playwright/tests/customTypes/customTypesTable.spec.ts b/playwright/tests/customTypes/customTypesTable.spec.ts index c1d15142e0..d95376aac0 100644 --- a/playwright/tests/customTypes/customTypesTable.spec.ts +++ b/playwright/tests/customTypes/customTypesTable.spec.ts @@ -63,6 +63,23 @@ test("I cannot create a custom type with a name or id already used", async ({ ).toBeDisabled(); }); +test("I cannot create a custom type with a name update or insert", async ({ + customTypesTablePage, +}) => { + await customTypesTablePage.goto(); + await customTypesTablePage.openCreateDialog(); + + await expect(customTypesTablePage.createTypeDialog.title).toBeVisible(); + await customTypesTablePage.createTypeDialog.nameInput.fill("update"); + await expect( + customTypesTablePage.createTypeDialog.submitButton, + ).toBeDisabled(); + await customTypesTablePage.createTypeDialog.nameInput.fill("insert"); + await expect( + customTypesTablePage.createTypeDialog.submitButton, + ).toBeDisabled(); +}); + test("I can rename a custom type", async ({ reusableCustomType, customTypesTablePage, diff --git a/playwright/tests/pageTypes/pageTypesTable.spec.ts b/playwright/tests/pageTypes/pageTypesTable.spec.ts index ae20da3c47..2db52aa959 100644 --- a/playwright/tests/pageTypes/pageTypesTable.spec.ts +++ b/playwright/tests/pageTypes/pageTypesTable.spec.ts @@ -89,6 +89,19 @@ test("I cannot create a page type with a name or id already used", async ({ await expect(pageTypesTablePage.createTypeDialog.submitButton).toBeDisabled(); }); +test("I cannot create a page type with a name update or insert", async ({ + pageTypesTablePage, +}) => { + await pageTypesTablePage.goto(); + await pageTypesTablePage.openCreateDialog(); + + await expect(pageTypesTablePage.createTypeDialog.title).toBeVisible(); + await pageTypesTablePage.createTypeDialog.nameInput.fill("update"); + await expect(pageTypesTablePage.createTypeDialog.submitButton).toBeDisabled(); + await pageTypesTablePage.createTypeDialog.nameInput.fill("insert"); + await expect(pageTypesTablePage.createTypeDialog.submitButton).toBeDisabled(); +}); + test("I can rename a page type", async ({ pageTypesTablePage, reusablePageType, diff --git a/playwright/tests/slices/slicesList.spec.ts b/playwright/tests/slices/slicesList.spec.ts index a57228ef1f..95a9e7b667 100644 --- a/playwright/tests/slices/slicesList.spec.ts +++ b/playwright/tests/slices/slicesList.spec.ts @@ -147,6 +147,22 @@ test("I cannot rename a slice with a name starting with a number", async ({ await expect(slicesListPage.renameSliceDialog.submitButton).toBeDisabled(); }); +test("I cannot create a slice with a restricted name ", async ({ + slicesListPage, +}) => { + await slicesListPage.goto(); + await slicesListPage.openCreateDialog(); + + const { nameInput, submitButton } = slicesListPage.createSliceDialog; + + await nameInput.fill("components"); + await expect(submitButton).toBeDisabled(); + await nameInput.fill("update"); + await expect(submitButton).toBeDisabled(); + await nameInput.fill("insert"); + await expect(submitButton).toBeDisabled(); +}); + test("I cannot create two slices with the same name", async ({ sliceBuilderPage, slicesListPage, diff --git a/yarn.lock b/yarn.lock index 02473ad18b..a0714084e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -103,6 +103,548 @@ __metadata: languageName: node linkType: hard +"@aws-crypto/crc32@npm:5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/crc32@npm:5.2.0" + dependencies: + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + tslib: ^2.6.2 + checksum: 1ddf7ec3fccf106205ff2476d90ae1d6625eabd47752f689c761b71e41fe451962b7a1c9ed25fe54e17dd747a62fbf4de06030fe56fe625f95285f6f70b96c57 + languageName: node + linkType: hard + +"@aws-crypto/sha256-browser@npm:5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/sha256-browser@npm:5.2.0" + dependencies: + "@aws-crypto/sha256-js": ^5.2.0 + "@aws-crypto/supports-web-crypto": ^5.2.0 + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + "@aws-sdk/util-locate-window": ^3.0.0 + "@smithy/util-utf8": ^2.0.0 + tslib: ^2.6.2 + checksum: 773f12f2026d82a6bb4a23a8f491894a6d32525bd9b8bfbc12896526cf11882a7607a671c478c45f9cd7d6ba1caaed48a62b67c6f725244bd83a1275108f46c7 + languageName: node + linkType: hard + +"@aws-crypto/sha256-js@npm:5.2.0, @aws-crypto/sha256-js@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/sha256-js@npm:5.2.0" + dependencies: + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + tslib: ^2.6.2 + checksum: 007fbe0436d714d0d0d282e2b61c90e45adcb9ad75eac9ac7ba03d32b56624afd09b2a9ceb4d659661cf17c51d74d1900ab6b00eacafc002da1101664955ca53 + languageName: node + linkType: hard + +"@aws-crypto/supports-web-crypto@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/supports-web-crypto@npm:5.2.0" + dependencies: + tslib: ^2.6.2 + checksum: 6ffc21de48b2b2c3e918193101d7e8fe949d47b37688892e1c39eaedaa938be80c0f404fe1c874c30cce16781026777a53bf47d5d90143ca91d0feb7c4a6f830 + languageName: node + linkType: hard + +"@aws-crypto/util@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/util@npm:5.2.0" + dependencies: + "@aws-sdk/types": ^3.222.0 + "@smithy/util-utf8": ^2.0.0 + tslib: ^2.6.2 + checksum: f0f81d9d2771c59946cfec48b86cb23d39f78a966c4a1f89d4753abdc3cb38de06f907d1e6450059b121d48ac65d612ab88bdb70014553a077fc3dabddfbf8d6 + languageName: node + linkType: hard + +"@aws-sdk/client-bedrock-runtime@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/client-bedrock-runtime@npm:3.709.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/client-sso-oidc": 3.709.0 + "@aws-sdk/client-sts": 3.709.0 + "@aws-sdk/core": 3.709.0 + "@aws-sdk/credential-provider-node": 3.709.0 + "@aws-sdk/middleware-host-header": 3.709.0 + "@aws-sdk/middleware-logger": 3.709.0 + "@aws-sdk/middleware-recursion-detection": 3.709.0 + "@aws-sdk/middleware-user-agent": 3.709.0 + "@aws-sdk/region-config-resolver": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@aws-sdk/util-endpoints": 3.709.0 + "@aws-sdk/util-user-agent-browser": 3.709.0 + "@aws-sdk/util-user-agent-node": 3.709.0 + "@smithy/config-resolver": ^3.0.13 + "@smithy/core": ^2.5.5 + "@smithy/eventstream-serde-browser": ^3.0.14 + "@smithy/eventstream-serde-config-resolver": ^3.0.11 + "@smithy/eventstream-serde-node": ^3.0.13 + "@smithy/fetch-http-handler": ^4.1.2 + "@smithy/hash-node": ^3.0.11 + "@smithy/invalid-dependency": ^3.0.11 + "@smithy/middleware-content-length": ^3.0.13 + "@smithy/middleware-endpoint": ^3.2.5 + "@smithy/middleware-retry": ^3.0.30 + "@smithy/middleware-serde": ^3.0.11 + "@smithy/middleware-stack": ^3.0.11 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/node-http-handler": ^3.3.2 + "@smithy/protocol-http": ^4.1.8 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + "@smithy/url-parser": ^3.0.11 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-body-length-node": ^3.0.0 + "@smithy/util-defaults-mode-browser": ^3.0.30 + "@smithy/util-defaults-mode-node": ^3.0.30 + "@smithy/util-endpoints": ^2.1.7 + "@smithy/util-middleware": ^3.0.11 + "@smithy/util-retry": ^3.0.11 + "@smithy/util-stream": ^3.3.2 + "@smithy/util-utf8": ^3.0.0 + "@types/uuid": ^9.0.1 + tslib: ^2.6.2 + uuid: ^9.0.1 + checksum: 16d9feedeab4f74ab61be67677865d23ef863f59466e583ad65537af530dbbfcdaf0a6b9dbf657e41a4a9b819869bc6e343fa4fdf884463e74a0636a53fe5915 + languageName: node + linkType: hard + +"@aws-sdk/client-sso-oidc@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.709.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.709.0 + "@aws-sdk/credential-provider-node": 3.709.0 + "@aws-sdk/middleware-host-header": 3.709.0 + "@aws-sdk/middleware-logger": 3.709.0 + "@aws-sdk/middleware-recursion-detection": 3.709.0 + "@aws-sdk/middleware-user-agent": 3.709.0 + "@aws-sdk/region-config-resolver": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@aws-sdk/util-endpoints": 3.709.0 + "@aws-sdk/util-user-agent-browser": 3.709.0 + "@aws-sdk/util-user-agent-node": 3.709.0 + "@smithy/config-resolver": ^3.0.13 + "@smithy/core": ^2.5.5 + "@smithy/fetch-http-handler": ^4.1.2 + "@smithy/hash-node": ^3.0.11 + "@smithy/invalid-dependency": ^3.0.11 + "@smithy/middleware-content-length": ^3.0.13 + "@smithy/middleware-endpoint": ^3.2.5 + "@smithy/middleware-retry": ^3.0.30 + "@smithy/middleware-serde": ^3.0.11 + "@smithy/middleware-stack": ^3.0.11 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/node-http-handler": ^3.3.2 + "@smithy/protocol-http": ^4.1.8 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + "@smithy/url-parser": ^3.0.11 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-body-length-node": ^3.0.0 + "@smithy/util-defaults-mode-browser": ^3.0.30 + "@smithy/util-defaults-mode-node": ^3.0.30 + "@smithy/util-endpoints": ^2.1.7 + "@smithy/util-middleware": ^3.0.11 + "@smithy/util-retry": ^3.0.11 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-sts": ^3.709.0 + checksum: 9505e50347a9db2535a2c49c320d3caebfdc75cdb9ea9f7fc9624cbecb73dc2481d245f7fb14732782a8213da29fae6ce17e7312a04f2500a803a02875bd6b1d + languageName: node + linkType: hard + +"@aws-sdk/client-sso@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/client-sso@npm:3.709.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.709.0 + "@aws-sdk/middleware-host-header": 3.709.0 + "@aws-sdk/middleware-logger": 3.709.0 + "@aws-sdk/middleware-recursion-detection": 3.709.0 + "@aws-sdk/middleware-user-agent": 3.709.0 + "@aws-sdk/region-config-resolver": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@aws-sdk/util-endpoints": 3.709.0 + "@aws-sdk/util-user-agent-browser": 3.709.0 + "@aws-sdk/util-user-agent-node": 3.709.0 + "@smithy/config-resolver": ^3.0.13 + "@smithy/core": ^2.5.5 + "@smithy/fetch-http-handler": ^4.1.2 + "@smithy/hash-node": ^3.0.11 + "@smithy/invalid-dependency": ^3.0.11 + "@smithy/middleware-content-length": ^3.0.13 + "@smithy/middleware-endpoint": ^3.2.5 + "@smithy/middleware-retry": ^3.0.30 + "@smithy/middleware-serde": ^3.0.11 + "@smithy/middleware-stack": ^3.0.11 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/node-http-handler": ^3.3.2 + "@smithy/protocol-http": ^4.1.8 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + "@smithy/url-parser": ^3.0.11 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-body-length-node": ^3.0.0 + "@smithy/util-defaults-mode-browser": ^3.0.30 + "@smithy/util-defaults-mode-node": ^3.0.30 + "@smithy/util-endpoints": ^2.1.7 + "@smithy/util-middleware": ^3.0.11 + "@smithy/util-retry": ^3.0.11 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: a75ee0fd1e5ecee16c38d09f0e8452d804272402c0658a713aa8b5df3f44fc440502b0ad468e99ddb958168b86b30cdc6a6be3fbf36806baf4956a5fd6df8bac + languageName: node + linkType: hard + +"@aws-sdk/client-sts@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/client-sts@npm:3.709.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/client-sso-oidc": 3.709.0 + "@aws-sdk/core": 3.709.0 + "@aws-sdk/credential-provider-node": 3.709.0 + "@aws-sdk/middleware-host-header": 3.709.0 + "@aws-sdk/middleware-logger": 3.709.0 + "@aws-sdk/middleware-recursion-detection": 3.709.0 + "@aws-sdk/middleware-user-agent": 3.709.0 + "@aws-sdk/region-config-resolver": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@aws-sdk/util-endpoints": 3.709.0 + "@aws-sdk/util-user-agent-browser": 3.709.0 + "@aws-sdk/util-user-agent-node": 3.709.0 + "@smithy/config-resolver": ^3.0.13 + "@smithy/core": ^2.5.5 + "@smithy/fetch-http-handler": ^4.1.2 + "@smithy/hash-node": ^3.0.11 + "@smithy/invalid-dependency": ^3.0.11 + "@smithy/middleware-content-length": ^3.0.13 + "@smithy/middleware-endpoint": ^3.2.5 + "@smithy/middleware-retry": ^3.0.30 + "@smithy/middleware-serde": ^3.0.11 + "@smithy/middleware-stack": ^3.0.11 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/node-http-handler": ^3.3.2 + "@smithy/protocol-http": ^4.1.8 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + "@smithy/url-parser": ^3.0.11 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-body-length-node": ^3.0.0 + "@smithy/util-defaults-mode-browser": ^3.0.30 + "@smithy/util-defaults-mode-node": ^3.0.30 + "@smithy/util-endpoints": ^2.1.7 + "@smithy/util-middleware": ^3.0.11 + "@smithy/util-retry": ^3.0.11 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 257b258c689f83625e0399bb6a787cbb404bc33887bfdea937298a8f7c58f10936c6b3fc8f00670e6f2d2d410e2354b0b211b6cdd2e7d9590a2226eccd703d9b + languageName: node + linkType: hard + +"@aws-sdk/core@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/core@npm:3.709.0" + dependencies: + "@aws-sdk/types": 3.709.0 + "@smithy/core": ^2.5.5 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/property-provider": ^3.1.11 + "@smithy/protocol-http": ^4.1.8 + "@smithy/signature-v4": ^4.2.4 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + "@smithy/util-middleware": ^3.0.11 + fast-xml-parser: 4.4.1 + tslib: ^2.6.2 + checksum: fa7978a2954effec5ab34e724ce6c2f456ccc58b584af66164aea0f790e52168d2c2862d951843b400bb50c306bd0c99912ccf71352b8374bfe0fb54869a2f92 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-env@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.709.0" + dependencies: + "@aws-sdk/core": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@smithy/property-provider": ^3.1.11 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: f8e20a231864cbc107773a227700d47cdff600dca979fbc13c4b671c78ec9544cd08f7e3378742d4aa1aada7e719c47c4515fd4cfce477d986f6048d36ea37bc + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-http@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.709.0" + dependencies: + "@aws-sdk/core": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@smithy/fetch-http-handler": ^4.1.2 + "@smithy/node-http-handler": ^3.3.2 + "@smithy/property-provider": ^3.1.11 + "@smithy/protocol-http": ^4.1.8 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + "@smithy/util-stream": ^3.3.2 + tslib: ^2.6.2 + checksum: f12b71b5a0f7009a80e406c920e8d1e45c730d16d0cd72fdb204588659ecf25c17cde7e3a08bfc93407b2130b1c2f9b4d1700f2b7040b85a0e0572c1e7b05b2d + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-ini@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.709.0" + dependencies: + "@aws-sdk/core": 3.709.0 + "@aws-sdk/credential-provider-env": 3.709.0 + "@aws-sdk/credential-provider-http": 3.709.0 + "@aws-sdk/credential-provider-process": 3.709.0 + "@aws-sdk/credential-provider-sso": 3.709.0 + "@aws-sdk/credential-provider-web-identity": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@smithy/credential-provider-imds": ^3.2.8 + "@smithy/property-provider": ^3.1.11 + "@smithy/shared-ini-file-loader": ^3.1.12 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-sts": ^3.709.0 + checksum: 61e1f8a32eadfaf32db08e0fd11b1a052dd39f375181ba01de96d844e0bdb4e71d66b46d0edae89f90a491c6199206f0003b7f9d0a05ceadb4a547c7272e50e3 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-node@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.709.0" + dependencies: + "@aws-sdk/credential-provider-env": 3.709.0 + "@aws-sdk/credential-provider-http": 3.709.0 + "@aws-sdk/credential-provider-ini": 3.709.0 + "@aws-sdk/credential-provider-process": 3.709.0 + "@aws-sdk/credential-provider-sso": 3.709.0 + "@aws-sdk/credential-provider-web-identity": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@smithy/credential-provider-imds": ^3.2.8 + "@smithy/property-provider": ^3.1.11 + "@smithy/shared-ini-file-loader": ^3.1.12 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 324d1be6b4b9d9cc96aca0245d86f331522f8e166767851970723cd94d43d6d58ef71d3a5e8e6e9725c82c2037909a44d9c5a4fe3613d85d712e6f6dd13c7644 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-process@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.709.0" + dependencies: + "@aws-sdk/core": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@smithy/property-provider": ^3.1.11 + "@smithy/shared-ini-file-loader": ^3.1.12 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: a0bdedc5e60948d483213e3f767731e4f42cb50876c4228aed47aeb3d77e1edde954670aaebda25e4e2e2c919d87fdfa3dd43f1569c061c5f5ab5472fc477e28 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-sso@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.709.0" + dependencies: + "@aws-sdk/client-sso": 3.709.0 + "@aws-sdk/core": 3.709.0 + "@aws-sdk/token-providers": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@smithy/property-provider": ^3.1.11 + "@smithy/shared-ini-file-loader": ^3.1.12 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: c44b707af618a2fdf6d950847130f056e1d8054e4b884befe960b843b78a452fdec256d351e818b4bfe7080a253069c0283095f49262d879377e0bcbaa182c9c + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-web-identity@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.709.0" + dependencies: + "@aws-sdk/core": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@smithy/property-provider": ^3.1.11 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-sts": ^3.709.0 + checksum: ee8cfd692284917f894b9a809083e1796b0629bb9138dcb658ed347d422b133331ac5008dd26a0881742d909e7a460831584f911492d70758a9efc841bcc00ad + languageName: node + linkType: hard + +"@aws-sdk/middleware-host-header@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.709.0" + dependencies: + "@aws-sdk/types": 3.709.0 + "@smithy/protocol-http": ^4.1.8 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: ecdc50bf6da96b267623972cf30a09ad7ae41fc988dd0bbd0afc79eb8cd4c9d528092f482f4dcae2533cb06aec5827ea5a8bcff03796ba727b376444734db5f8 + languageName: node + linkType: hard + +"@aws-sdk/middleware-logger@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/middleware-logger@npm:3.709.0" + dependencies: + "@aws-sdk/types": 3.709.0 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: f23761fc437f290b80177226b9829920301707811ccb6e09a2f19b386b57b868de423f216304d3c61e4c805c3df9a95841176647ff309d6d5accf32ee51a30c2 + languageName: node + linkType: hard + +"@aws-sdk/middleware-recursion-detection@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.709.0" + dependencies: + "@aws-sdk/types": 3.709.0 + "@smithy/protocol-http": ^4.1.8 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: bdacc9471d0046264da4722d7d447cdc4a41ef0470e5370dd13f512ccb0825d77292e4318d3bae8277c06ff04b4a26a765a9aa225d9c7370979497be37d10a88 + languageName: node + linkType: hard + +"@aws-sdk/middleware-user-agent@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.709.0" + dependencies: + "@aws-sdk/core": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@aws-sdk/util-endpoints": 3.709.0 + "@smithy/core": ^2.5.5 + "@smithy/protocol-http": ^4.1.8 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: f5e095699b240811b58cf701e799a92dc59846de5e31b2fd2112ff84e99fb8f9e0756b68835ca3cfd3fa7c72e9cc5a733ebbb303da84929b1f83d2ab6c1556ea + languageName: node + linkType: hard + +"@aws-sdk/region-config-resolver@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/region-config-resolver@npm:3.709.0" + dependencies: + "@aws-sdk/types": 3.709.0 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/types": ^3.7.2 + "@smithy/util-config-provider": ^3.0.0 + "@smithy/util-middleware": ^3.0.11 + tslib: ^2.6.2 + checksum: 724a0562f651fc872e579c4817e1bf330da8e340da6fd893a19c991d5af0740fdfabde6bf37e26c3c58470d6e9272eda34a1d0a228ef7e854c23b816355f0944 + languageName: node + linkType: hard + +"@aws-sdk/token-providers@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/token-providers@npm:3.709.0" + dependencies: + "@aws-sdk/types": 3.709.0 + "@smithy/property-provider": ^3.1.11 + "@smithy/shared-ini-file-loader": ^3.1.12 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-sso-oidc": ^3.709.0 + checksum: c9cf9f9f8cc221c546ee25c0897b280c5fb14b8ca67787de3311010eb1d1f2fdba0058349c28ee29b09310b7433e52b9b4f09da94c00df0e099837c585c0198a + languageName: node + linkType: hard + +"@aws-sdk/types@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/types@npm:3.709.0" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: e17349c812f5e54c21f8b7028d75bfea267e8c29371e68e76db6e1697fc798926973c699464f9b8308a41f8313d171537f0efbc9beaaf6af66c1ba9fa4335a6c + languageName: node + linkType: hard + +"@aws-sdk/types@npm:^3.222.0": + version: 3.713.0 + resolution: "@aws-sdk/types@npm:3.713.0" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 4e2d211838da5f64bb04693b0a0ab198e28fa1e1d1e394d96b91c87e07af525211bd88f2b91e9619158b595c23d688f2dc2de44fe2d01e8c21ef9a1d7ba0cece + languageName: node + linkType: hard + +"@aws-sdk/util-endpoints@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/util-endpoints@npm:3.709.0" + dependencies: + "@aws-sdk/types": 3.709.0 + "@smithy/types": ^3.7.2 + "@smithy/util-endpoints": ^2.1.7 + tslib: ^2.6.2 + checksum: c034b1b07fd6b2778c17563f5ec4b148fcfa2adcb715797fd975f4123ae17c9086831598b28d7a35bf3ad34d9e863e66d9b5fd9bb70c6dab6002b59ad4559f6f + languageName: node + linkType: hard + +"@aws-sdk/util-locate-window@npm:^3.0.0": + version: 3.693.0 + resolution: "@aws-sdk/util-locate-window@npm:3.693.0" + dependencies: + tslib: ^2.6.2 + checksum: ff446f1247107c38c88b791b6a2ba25d63e3762819448550c27e18c329232ee3732df33562ada4123114409910f0bb9e6006add169ef0d5b8ce27ed9cde3ba82 + languageName: node + linkType: hard + +"@aws-sdk/util-user-agent-browser@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.709.0" + dependencies: + "@aws-sdk/types": 3.709.0 + "@smithy/types": ^3.7.2 + bowser: ^2.11.0 + tslib: ^2.6.2 + checksum: 563037f5bbc6eb2fff03bac01489642c0c039c5cc29acd5ebc82d59e340ddefd4119c3cb60df130632de6af43bbee393f04c119d6aa961aae4ac176f2a9c894f + languageName: node + linkType: hard + +"@aws-sdk/util-user-agent-node@npm:3.709.0": + version: 3.709.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.709.0" + dependencies: + "@aws-sdk/middleware-user-agent": 3.709.0 + "@aws-sdk/types": 3.709.0 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + checksum: dd521a66fc24e6c3a1f06984d898f1341335d7e23e8e86df86a08d0d292bbcc7dd5aad35cf77fcc9b40d0b492efaf5b803a4c0585ee485d05245f7b0fdaa6f71 + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.22.5": version: 7.22.5 resolution: "@babel/code-frame@npm:7.22.5" @@ -5981,12 +6523,13 @@ __metadata: languageName: node linkType: hard -"@prismicio/editor-fields@npm:0.4.58": - version: 0.4.58 - resolution: "@prismicio/editor-fields@npm:0.4.58" +"@prismicio/editor-fields@npm:0.4.59": + version: 0.4.59 + resolution: "@prismicio/editor-fields@npm:0.4.59" dependencies: + "@aws-sdk/client-bedrock-runtime": 3.709.0 "@floating-ui/react-dom-interactions": 0.9.3 - "@prismicio/editor-support": 0.4.58 + "@prismicio/editor-support": 0.4.59 "@prismicio/richtext": 2.1.1 "@prismicio/types-internal": 3.2.0 "@tanstack/react-query": 5.55.4 @@ -6018,16 +6561,16 @@ __metadata: tslib: 2.4.0 zod: 3.23.8 peerDependencies: - "@prismicio/editor-ui": ^0.4.58 + "@prismicio/editor-ui": ^0.4.59 react: 18 react-dom: 18 - checksum: 080ca8d57e39ddbdefc8a018f82d15179d3ffdfc448baceddc142391afc9bb03e40b22a8550070d9df10ec0d2d63d8b73368cec5093ed51ac3c833fcdc9e8c15 + checksum: 3e0aa49c195c51f8db5c253c957206f265647a416d6dcbbbd4b1bc6ee181db2c280e302f416e0093f200560fb7f5d029ceeba17bcaed88246e043ac6c32021e3 languageName: node linkType: hard -"@prismicio/editor-support@npm:0.4.58": - version: 0.4.58 - resolution: "@prismicio/editor-support@npm:0.4.58" +"@prismicio/editor-support@npm:0.4.59": + version: 0.4.59 + resolution: "@prismicio/editor-support@npm:0.4.59" dependencies: tslib: 2.4.0 peerDependencies: @@ -6038,16 +6581,16 @@ __metadata: optional: true zod: optional: true - checksum: dec9776d73df38956bf438ff3523d9230e76c99580a815173bb7bdd098d90623b1049433f55354bcfca50ed494ea0bd5bc1ff7e962da9ef2f256d5fb87b284f9 + checksum: e841588a6f971e391f33443258a514ec12b5c1483aaef5db4476db067af60227af1485a761ee010309ee5b641dcd89df7e965d5bcb2d3c8bba7f86d1016b9341 languageName: node linkType: hard -"@prismicio/editor-ui@npm:0.4.58": - version: 0.4.58 - resolution: "@prismicio/editor-ui@npm:0.4.58" +"@prismicio/editor-ui@npm:0.4.59": + version: 0.4.59 + resolution: "@prismicio/editor-ui@npm:0.4.59" dependencies: "@internationalized/date": 3.5.5 - "@prismicio/editor-support": 0.4.58 + "@prismicio/editor-support": 0.4.59 "@radix-ui/react-avatar": 1.1.0 "@radix-ui/react-checkbox": 1.1.1 "@radix-ui/react-dialog": 1.1.1 @@ -6098,7 +6641,7 @@ __metadata: peerDependencies: react: 17 || 18 react-dom: 17 || 18 - checksum: 21fe78831f27e51f01bee23a0db1acc5063d0dad1253a68d09b9b7cfd3c6f156cc084da5dcea11eeb9060e3bd7f0e300237ae7c88b6dc5f3b635927720ebe876 + checksum: 2514285dcdcfa2e09776e6e09051ad60f37887089ec08204cdfafd99c488db831a9b321f59a6bf1e85deee5281bfab094298d25db04a84d8c27b9eaec08b8a6d languageName: node linkType: hard @@ -9323,6 +9866,538 @@ __metadata: languageName: unknown linkType: soft +"@smithy/abort-controller@npm:^3.1.9": + version: 3.1.9 + resolution: "@smithy/abort-controller@npm:3.1.9" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 0d15ce236a14cc5193b76e6990a224957926404dd683c23000b9370a230d9331b36a4cb805521b0d713aec80b2ea78b22e0c44b03d52aa77c8d998915aafd2ac + languageName: node + linkType: hard + +"@smithy/config-resolver@npm:^3.0.13": + version: 3.0.13 + resolution: "@smithy/config-resolver@npm:3.0.13" + dependencies: + "@smithy/node-config-provider": ^3.1.12 + "@smithy/types": ^3.7.2 + "@smithy/util-config-provider": ^3.0.0 + "@smithy/util-middleware": ^3.0.11 + tslib: ^2.6.2 + checksum: d31b1b01733f0e9442817651c8a5f1a5feb04e0656ece431c39c8bd96d782636f7e0b3f729c05d25ab4b0155473c17116b6fe46216a6eee9eeceab4d7477393e + languageName: node + linkType: hard + +"@smithy/core@npm:^2.5.5": + version: 2.5.5 + resolution: "@smithy/core@npm:2.5.5" + dependencies: + "@smithy/middleware-serde": ^3.0.11 + "@smithy/protocol-http": ^4.1.8 + "@smithy/types": ^3.7.2 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-middleware": ^3.0.11 + "@smithy/util-stream": ^3.3.2 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 32df1fdaca5f8d24abd68e13453d1dcfb1040d955bf6571ae2e5fa84418d16412b953429cb6507227045c8587b15709e1e0a44878d8c24e6064adc4fd1221db9 + languageName: node + linkType: hard + +"@smithy/credential-provider-imds@npm:^3.2.8": + version: 3.2.8 + resolution: "@smithy/credential-provider-imds@npm:3.2.8" + dependencies: + "@smithy/node-config-provider": ^3.1.12 + "@smithy/property-provider": ^3.1.11 + "@smithy/types": ^3.7.2 + "@smithy/url-parser": ^3.0.11 + tslib: ^2.6.2 + checksum: b6292a5525b3c6bc0d502688e4f02720b7085b51a069fda1cb64d6b4c50a1eb945310e467a4c0a050a3b5477cec26f8f95ae0a8e9b9052477a357b4fbf04ac63 + languageName: node + linkType: hard + +"@smithy/eventstream-codec@npm:^3.1.10": + version: 3.1.10 + resolution: "@smithy/eventstream-codec@npm:3.1.10" + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@smithy/types": ^3.7.2 + "@smithy/util-hex-encoding": ^3.0.0 + tslib: ^2.6.2 + checksum: 5a8f951660c8777d9f1e0487e4410b3a96429a48733fbd105ce611aceff43d14a50465f3c1fd2122793b39fcc2752c02166e65ac5cb0852f7194db8f0f9905a5 + languageName: node + linkType: hard + +"@smithy/eventstream-serde-browser@npm:^3.0.14": + version: 3.0.14 + resolution: "@smithy/eventstream-serde-browser@npm:3.0.14" + dependencies: + "@smithy/eventstream-serde-universal": ^3.0.13 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 11f15701042e985a479613a9f5ac7d1d8f06c72ee7d7010a67195bdc2fadacf6d7be97125e07c8c5b386ed189a8d18ef1aea4cd605750ce2a1a3fe8b98c2243d + languageName: node + linkType: hard + +"@smithy/eventstream-serde-config-resolver@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/eventstream-serde-config-resolver@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: e4c7004e87c95f82a54495c7f7ef2471e16c3a93e6a1773064996453b22028b4963a32700b299994ad669aff4c8240a7d0a81f9b89b7633af6900b1fcab1bd27 + languageName: node + linkType: hard + +"@smithy/eventstream-serde-node@npm:^3.0.13": + version: 3.0.13 + resolution: "@smithy/eventstream-serde-node@npm:3.0.13" + dependencies: + "@smithy/eventstream-serde-universal": ^3.0.13 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 8d03ce838c14647da90fcc778c41c066f2df5dbe45119884cca5d310bc2a07b741affceaf6c665d0b7db65b17ad8f96232f10db95c4d5afde38df2ef70b0c0e3 + languageName: node + linkType: hard + +"@smithy/eventstream-serde-universal@npm:^3.0.13": + version: 3.0.13 + resolution: "@smithy/eventstream-serde-universal@npm:3.0.13" + dependencies: + "@smithy/eventstream-codec": ^3.1.10 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 232d5a9e9b0c494f241ffce3a3afdd790be342f666908ef4bc24f6320540f01ddb6fbc47a2f2651a054317a4e5992deb75f05505e17802b5bdd6d4550daf3554 + languageName: node + linkType: hard + +"@smithy/fetch-http-handler@npm:^4.1.2": + version: 4.1.2 + resolution: "@smithy/fetch-http-handler@npm:4.1.2" + dependencies: + "@smithy/protocol-http": ^4.1.8 + "@smithy/querystring-builder": ^3.0.11 + "@smithy/types": ^3.7.2 + "@smithy/util-base64": ^3.0.0 + tslib: ^2.6.2 + checksum: 30dd0fa9bacec24c97e536fe4423541c9aafe6231049e2bc2693bb6cbb0aaaadc26c3ab0424e53cc08cce3770816e378570cd8f9b47e7a3375cdc82fdf667a9a + languageName: node + linkType: hard + +"@smithy/hash-node@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/hash-node@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + "@smithy/util-buffer-from": ^3.0.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 14ed6e0b2704365dabb7437d7a19125f646b2fae42192738dc4286b6fd26fac1d906e1e800737b93fbc13ef6d090fdec82af04f9e49269e2e90d7c1190ebd010 + languageName: node + linkType: hard + +"@smithy/invalid-dependency@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/invalid-dependency@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 3f4d6114fb0ace339b97ce1e17df126a2a0d058a7ea32753ef16ab82da4f481b1a4a3b2655027e983a5569167ccb48f0471bf5ca4ab3e8f5f6193e52c07caeb8 + languageName: node + linkType: hard + +"@smithy/is-array-buffer@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/is-array-buffer@npm:2.2.0" + dependencies: + tslib: ^2.6.2 + checksum: cd12c2e27884fec89ca8966d33c9dc34d3234efe89b33a9b309c61ebcde463e6f15f6a02d31d4fddbfd6e5904743524ca5b95021b517b98fe10957c2da0cd5fc + languageName: node + linkType: hard + +"@smithy/is-array-buffer@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/is-array-buffer@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: ce7440fcb1ce3c46722cff11c33e2f62a9df86d74fa2054a8e6b540302a91211cf6e4e3b1b7aac7030c6c8909158c1b6867c394201fa8afc6b631979956610e5 + languageName: node + linkType: hard + +"@smithy/middleware-content-length@npm:^3.0.13": + version: 3.0.13 + resolution: "@smithy/middleware-content-length@npm:3.0.13" + dependencies: + "@smithy/protocol-http": ^4.1.8 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 06803cbe557ad64c806c89aa10e9e2bc07cd51537e2bb00a4eb0ddc21a89e28fae5c9df2ef60103670ab89a70ab6f241830b258cad07c49b7091f5bc0981c18d + languageName: node + linkType: hard + +"@smithy/middleware-endpoint@npm:^3.2.5": + version: 3.2.5 + resolution: "@smithy/middleware-endpoint@npm:3.2.5" + dependencies: + "@smithy/core": ^2.5.5 + "@smithy/middleware-serde": ^3.0.11 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/shared-ini-file-loader": ^3.1.12 + "@smithy/types": ^3.7.2 + "@smithy/url-parser": ^3.0.11 + "@smithy/util-middleware": ^3.0.11 + tslib: ^2.6.2 + checksum: d89909c85f608404871a8ef0b6e468840cba8b36656288d5aa53bf93288f010dfbc385f2ba5a1b06e5c3eb63271501142949d65e0bec903521176ab274e76d21 + languageName: node + linkType: hard + +"@smithy/middleware-retry@npm:^3.0.30": + version: 3.0.30 + resolution: "@smithy/middleware-retry@npm:3.0.30" + dependencies: + "@smithy/node-config-provider": ^3.1.12 + "@smithy/protocol-http": ^4.1.8 + "@smithy/service-error-classification": ^3.0.11 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + "@smithy/util-middleware": ^3.0.11 + "@smithy/util-retry": ^3.0.11 + tslib: ^2.6.2 + uuid: ^9.0.1 + checksum: baab05a68f848ea0e87b21a6ef9d05fc726fa782a480253fdc6a61f8325d2c2476068f8a92a3f9439f4dff5cb32d134818db1231013705e64551ce75549216bb + languageName: node + linkType: hard + +"@smithy/middleware-serde@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/middleware-serde@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: dbc180567a7bab74a645853abdc911fc03d1adedea0dcdfbf9259fef274fdc0a9ad3548479537d58176e1eeadcab7d30582a920731bd201dfc29f067265718ec + languageName: node + linkType: hard + +"@smithy/middleware-stack@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/middleware-stack@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 65fa1a3815dc091dccfde1e24de74768ca55fabb18eba3868acd295a1566f8345538238b3f3db242d03ec989ac785933176291340feae755815d8c43f5135810 + languageName: node + linkType: hard + +"@smithy/node-config-provider@npm:^3.1.12": + version: 3.1.12 + resolution: "@smithy/node-config-provider@npm:3.1.12" + dependencies: + "@smithy/property-provider": ^3.1.11 + "@smithy/shared-ini-file-loader": ^3.1.12 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 42b61e2286387046f55130f2e0c11048c41310789441fee708bc498bb2a3b44c75d4b4e1a6fcca5c3ac593b73d1b73c082e556f0d4eab3966561eae52513db2e + languageName: node + linkType: hard + +"@smithy/node-http-handler@npm:^3.3.2": + version: 3.3.2 + resolution: "@smithy/node-http-handler@npm:3.3.2" + dependencies: + "@smithy/abort-controller": ^3.1.9 + "@smithy/protocol-http": ^4.1.8 + "@smithy/querystring-builder": ^3.0.11 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: f4d70ca9ba6d62ae9c3257c069a42ff9c0d3bce28625e7ebab34bc3196eb5a2a1cb2c20d3409b8d1a9c24f0a5d0b3d0809904ceea8d87c4fb991474fd0d9fd31 + languageName: node + linkType: hard + +"@smithy/property-provider@npm:^3.1.11": + version: 3.1.11 + resolution: "@smithy/property-provider@npm:3.1.11" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: c6f4d4bb241381254083df95c36e8632fb7e54437ab5ad56cb6b1bf6c6b81072f396fa958a700037b1ab3efb6c25fb1f7aeb92560366f35fa14055c34077ea30 + languageName: node + linkType: hard + +"@smithy/protocol-http@npm:^4.1.8": + version: 4.1.8 + resolution: "@smithy/protocol-http@npm:4.1.8" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 43cdc163137f09dc5f2419ab75c9f31ca7c1da9210023c027be5fa29455543bdc10ab886449dc1399d7ea21ab4b83ba828714f31d06c1638999fa17d5bba0626 + languageName: node + linkType: hard + +"@smithy/querystring-builder@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/querystring-builder@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + "@smithy/util-uri-escape": ^3.0.0 + tslib: ^2.6.2 + checksum: 168f3104b2db0b704f211e18a318dffdbaaa9675b62ca44c892267c7825295e10041c1c82086cdcd1a7a05f1db95c0a1c74540d8b6d9c9504b13bb89387186fd + languageName: node + linkType: hard + +"@smithy/querystring-parser@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/querystring-parser@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 2aa2ce6a8da9c7c4a89b900fd83b84915f7e17a668376a4e1257eca10d4d6eeedef529be8ab9e94415c58cb4b33f3e6bd82bb6131d6b0bd12bb1a942b54acb6e + languageName: node + linkType: hard + +"@smithy/service-error-classification@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/service-error-classification@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + checksum: 09e2694bbc683f8da400a898b22710fd301a5aa120b3adbf5b04f785446615841402c76fd4cfb19b087ba6258bd358c58549d629d585054a610acee123100a9c + languageName: node + linkType: hard + +"@smithy/shared-ini-file-loader@npm:^3.1.12": + version: 3.1.12 + resolution: "@smithy/shared-ini-file-loader@npm:3.1.12" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: f726604f0f176d8f05eb0adc0878474a04ebefc2796ad72ca7c40d83f8bac65ef1239c9b1f8faa25838787a9aa3f83f28c50f150db76000b900bf220934d4bc7 + languageName: node + linkType: hard + +"@smithy/signature-v4@npm:^4.2.4": + version: 4.2.4 + resolution: "@smithy/signature-v4@npm:4.2.4" + dependencies: + "@smithy/is-array-buffer": ^3.0.0 + "@smithy/protocol-http": ^4.1.8 + "@smithy/types": ^3.7.2 + "@smithy/util-hex-encoding": ^3.0.0 + "@smithy/util-middleware": ^3.0.11 + "@smithy/util-uri-escape": ^3.0.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 72b093212be97d3d6b19f7e5dc1185a31921f64417a3627dac6fe336a64f7413eadbc7afd4f6b7fd866eb249261216a63d526b46c15b3c542a3163d1e3ca62aa + languageName: node + linkType: hard + +"@smithy/smithy-client@npm:^3.5.0": + version: 3.5.0 + resolution: "@smithy/smithy-client@npm:3.5.0" + dependencies: + "@smithy/core": ^2.5.5 + "@smithy/middleware-endpoint": ^3.2.5 + "@smithy/middleware-stack": ^3.0.11 + "@smithy/protocol-http": ^4.1.8 + "@smithy/types": ^3.7.2 + "@smithy/util-stream": ^3.3.2 + tslib: ^2.6.2 + checksum: 17c7f5b4b0e722ed345ca0a4ecece31e8c87db133a369bfaac605abfe50d5874a1711cc6836955c74216ba14290dd594a50033ec77b6ea50d5732738391fa6ee + languageName: node + linkType: hard + +"@smithy/types@npm:^3.7.2": + version: 3.7.2 + resolution: "@smithy/types@npm:3.7.2" + dependencies: + tslib: ^2.6.2 + checksum: f3ae277d2f81eeb67c12e651b2e999225cda115dff8fab257a77fbe3739d32c515dbd19218590dd2c33d203259b00c80c9fc6027f8484c50725390a8fc0f1e3e + languageName: node + linkType: hard + +"@smithy/url-parser@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/url-parser@npm:3.0.11" + dependencies: + "@smithy/querystring-parser": ^3.0.11 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 1af2edc53b969255c231028b034115f8d21807fd4ffa052ae4a03f9c47b28f8679a7c709626f9d549d537a7d63d20596c89515e229fc84114122fc9b51bb4519 + languageName: node + linkType: hard + +"@smithy/util-base64@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-base64@npm:3.0.0" + dependencies: + "@smithy/util-buffer-from": ^3.0.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 413f26046a7e98b2661a078f218a8d040c820fc5a02f5e364aff58c3957e28fde1ac4048c2ebbad5d87b9da4b9aa98a8d4a7fb0d2ce97def33738bd7d8d79aa0 + languageName: node + linkType: hard + +"@smithy/util-body-length-browser@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-body-length-browser@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: b01d8258b9a25b262734fc49cefefe48583ba193c3eefd49a6f7fd5922c3015d23dda88b52f3dd9a16827cad16b5b9425eef01e91bd0c71bb5abc469d2952c07 + languageName: node + linkType: hard + +"@smithy/util-body-length-node@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-body-length-node@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: da1baf4790609d3dc28c88385c7274fdf9b91a641fe3c5af22b78e18156df17bd470181348f43b2c739680936b1dafb1526158dfd817c3d9ecb71e653b4cbe3f + languageName: node + linkType: hard + +"@smithy/util-buffer-from@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-buffer-from@npm:2.2.0" + dependencies: + "@smithy/is-array-buffer": ^2.2.0 + tslib: ^2.6.2 + checksum: 424c5b7368ae5880a8f2732e298d17879a19ca925f24ca45e1c6c005f717bb15b76eb28174d308d81631ad457ea0088aab0fd3255dd42f45a535c81944ad64d3 + languageName: node + linkType: hard + +"@smithy/util-buffer-from@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-buffer-from@npm:3.0.0" + dependencies: + "@smithy/is-array-buffer": ^3.0.0 + tslib: ^2.6.2 + checksum: 1bfc4ab093fe98132bbc1ccd36a0b9ad75a31ed26bac4b7e9350205513a2481eb190ae44679ab4fecc5e10d367b5e6592bbfbf792671579d17d17bd7f7f233f5 + languageName: node + linkType: hard + +"@smithy/util-config-provider@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-config-provider@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: fc0f5f57d30261cf3a6693d8e338b9d269332c478ee18d905309a769844188190caf0564855d7e84f6c61e56aa556195dda89f65e8c30791951cf4999e4a70e7 + languageName: node + linkType: hard + +"@smithy/util-defaults-mode-browser@npm:^3.0.30": + version: 3.0.30 + resolution: "@smithy/util-defaults-mode-browser@npm:3.0.30" + dependencies: + "@smithy/property-provider": ^3.1.11 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + bowser: ^2.11.0 + tslib: ^2.6.2 + checksum: 6c4e09b906d7196119c85a072c1df633f05ae1c18e6604fccf6c3761923020fad3e38cead9ea969db65478a66d502a15e0a43c764bb693c27aacae2459eb2365 + languageName: node + linkType: hard + +"@smithy/util-defaults-mode-node@npm:^3.0.30": + version: 3.0.30 + resolution: "@smithy/util-defaults-mode-node@npm:3.0.30" + dependencies: + "@smithy/config-resolver": ^3.0.13 + "@smithy/credential-provider-imds": ^3.2.8 + "@smithy/node-config-provider": ^3.1.12 + "@smithy/property-provider": ^3.1.11 + "@smithy/smithy-client": ^3.5.0 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 6b295fe984eec80c7ae073b19243c1f7f21785241ee68ff496765230b5d03bdba175b5e9da6cc0df0623d60410ca560bca92bb7005a2e1cf4dc927cffd3cd6b7 + languageName: node + linkType: hard + +"@smithy/util-endpoints@npm:^2.1.7": + version: 2.1.7 + resolution: "@smithy/util-endpoints@npm:2.1.7" + dependencies: + "@smithy/node-config-provider": ^3.1.12 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 6917604d6f7b7b78f8501152fc25795dabb22e10b6d004eb2234ac519cc0c8e8882b4919419626d29adf39cde41dc0874aa9fe3bb2fa3e655bbb89e191c2aa50 + languageName: node + linkType: hard + +"@smithy/util-hex-encoding@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-hex-encoding@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: dd32fd71e915825987a18bf7c0f8f0c4956d0b17a0ee71592b5563bb20e04f24dbf81d36161aac07caab3bb5e535cc609fce20aa4a38f66b457c4c6f5c7748d9 + languageName: node + linkType: hard + +"@smithy/util-middleware@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/util-middleware@npm:3.0.11" + dependencies: + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: 74079b9b10af88699c1cbdfd8f8bf8750899c9a36076c256997c3eafa18993178a05ef5fae83cfcdecf63c0e89c23fdd4fea9893419d1d481deecf580292fc33 + languageName: node + linkType: hard + +"@smithy/util-retry@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/util-retry@npm:3.0.11" + dependencies: + "@smithy/service-error-classification": ^3.0.11 + "@smithy/types": ^3.7.2 + tslib: ^2.6.2 + checksum: b6e9a891944a2b77105e51ab854a5a0709cfdf9d60293b61782c9caa8ca06625f1dc812b10ee7c254519a40329a9ab4fd21f55bae2dfc9a879db0f06878d0337 + languageName: node + linkType: hard + +"@smithy/util-stream@npm:^3.3.2": + version: 3.3.2 + resolution: "@smithy/util-stream@npm:3.3.2" + dependencies: + "@smithy/fetch-http-handler": ^4.1.2 + "@smithy/node-http-handler": ^3.3.2 + "@smithy/types": ^3.7.2 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-buffer-from": ^3.0.0 + "@smithy/util-hex-encoding": ^3.0.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: def72c8102a2b3ae50d17f13eedc5622332c4ad7adf6109f69a73a9cc2e6c2543c08e05150179575cca01951d693d10aceef1ef6a42bef8025656a6676327186 + languageName: node + linkType: hard + +"@smithy/util-uri-escape@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-uri-escape@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: d7ee01c978e2b08d0a89a3b678f5d5e5d5bb4ab4ab85567a238b1a6195dff1bdaf9ae62497e7f32ff5121b3dc007c370bcb6e8ef79b01fe5acdec5bbce8c7ce4 + languageName: node + linkType: hard + +"@smithy/util-utf8@npm:^2.0.0": + version: 2.3.0 + resolution: "@smithy/util-utf8@npm:2.3.0" + dependencies: + "@smithy/util-buffer-from": ^2.2.0 + tslib: ^2.6.2 + checksum: 00e55d4b4e37d48be0eef3599082402b933c52a1407fed7e8e8ad76d94d81a0b30b8bfaf2047c59d9c3af31e5f20e7a8c959cb7ae270f894255e05a2229964f0 + languageName: node + linkType: hard + +"@smithy/util-utf8@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-utf8@npm:3.0.0" + dependencies: + "@smithy/util-buffer-from": ^3.0.0 + tslib: ^2.6.2 + checksum: d97be1748963263a1161ba80417d82318b977b38542f3fdf0379b0162461188be680e5bfb66a89d65652f0fad6ecf2ab23a43205979216e50602488f73434da3 + languageName: node + linkType: hard + "@storybook/addon-actions@npm:7.0.10": version: 7.0.10 resolution: "@storybook/addon-actions@npm:7.0.10" @@ -11878,6 +12953,13 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^9.0.1": + version: 9.0.8 + resolution: "@types/uuid@npm:9.0.8" + checksum: b8c60b7ba8250356b5088302583d1704a4e1a13558d143c549c408bf8920535602ffc12394ede77f8a8083511b023704bc66d1345792714002bfa261b17c5275 + languageName: node + linkType: hard + "@types/webpack-sources@npm:*": version: 3.2.0 resolution: "@types/webpack-sources@npm:3.2.0" @@ -14310,6 +15392,13 @@ __metadata: languageName: node linkType: hard +"bowser@npm:^2.11.0": + version: 2.11.0 + resolution: "bowser@npm:2.11.0" + checksum: 29c3f01f22e703fa6644fc3b684307442df4240b6e10f6cfe1b61c6ca5721073189ca97cdeedb376081148c8518e33b1d818a57f781d70b0b70e1f31fb48814f + languageName: node + linkType: hard + "boxen@npm:^5.1.2": version: 5.1.2 resolution: "boxen@npm:5.1.2" @@ -18924,6 +20013,17 @@ __metadata: languageName: node linkType: hard +"fast-xml-parser@npm:4.4.1": + version: 4.4.1 + resolution: "fast-xml-parser@npm:4.4.1" + dependencies: + strnum: ^1.0.5 + bin: + fxparser: src/cli/cli.js + checksum: f440c01cd141b98789ae777503bcb6727393296094cc82924ae9f88a5b971baa4eec7e65306c7e07746534caa661fc83694ff437d9012dc84dee39dfbfaab947 + languageName: node + linkType: hard + "fastest-levenshtein@npm:^1.0.16": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" @@ -31221,9 +32321,9 @@ __metadata: "@emotion/react": 11.11.1 "@extractus/oembed-extractor": 3.1.8 "@prismicio/client": 7.11.0 - "@prismicio/editor-fields": 0.4.58 - "@prismicio/editor-support": 0.4.58 - "@prismicio/editor-ui": 0.4.58 + "@prismicio/editor-fields": 0.4.59 + "@prismicio/editor-support": 0.4.59 + "@prismicio/editor-ui": 0.4.59 "@prismicio/mock": 0.3.3 "@prismicio/mocks": 2.7.0-alpha.0 "@prismicio/simulator": 0.1.4 @@ -32085,6 +33185,13 @@ __metadata: languageName: node linkType: hard +"strnum@npm:^1.0.5": + version: 1.0.5 + resolution: "strnum@npm:1.0.5" + checksum: 651b2031db5da1bf4a77fdd2f116a8ac8055157c5420f5569f64879133825915ad461513e7202a16d7fec63c54fd822410d0962f8ca12385c4334891b9ae6dd2 + languageName: node + linkType: hard + "strtok3@npm:^7.0.0": version: 7.0.0 resolution: "strtok3@npm:7.0.0" @@ -33211,6 +34318,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.6.2": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a + languageName: node + linkType: hard + "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0"