From 5d6f55c4512b3d2e50dd2f7bdf85ac736ff5c519 Mon Sep 17 00:00:00 2001 From: Bohdan Imiela <47499119+BohdanOne@users.noreply.github.com> Date: Tue, 17 Dec 2024 09:43:11 +0100 Subject: [PATCH 1/7] feat: prevent creating slices and custom types with reserved name (#1507) --- .../CreateCustomTypeModal.tsx | 8 ++++++++ .../RenameCustomTypeModal.tsx | 4 ++++ .../legacy/components/Forms/formsValidator.ts | 16 ++++++++-------- packages/slice-machine/src/legacy/lib/consts.ts | 2 +- .../tests/customTypes/customTypesTable.spec.ts | 17 +++++++++++++++++ .../tests/pageTypes/pageTypesTable.spec.ts | 13 +++++++++++++ playwright/tests/slices/slicesList.spec.ts | 16 ++++++++++++++++ 7 files changed, 67 insertions(+), 9 deletions(-) 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/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/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, From 1dc83cf79ce95ec4c217247734dde9be19148e96 Mon Sep 17 00:00:00 2001 From: Bohdan Imiela <47499119+BohdanOne@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:59:15 +0100 Subject: [PATCH 2/7] feat: track click on onboarding guide tutorial link (#1510) --- .../manager/src/managers/telemetry/types.ts | 9 +- packages/slice-machine/package.json | 6 +- yarn.lock | 1150 ++++++++++++++++- 3 files changed, 1143 insertions(+), 22 deletions(-) diff --git a/packages/manager/src/managers/telemetry/types.ts b/packages/manager/src/managers/telemetry/types.ts index 9d819501dc..6c1857d2b2 100644 --- a/packages/manager/src/managers/telemetry/types.ts +++ b/packages/manager/src/managers/telemetry/types.ts @@ -45,6 +45,7 @@ export const SegmentEventType = { 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]; @@ -107,6 +108,8 @@ export const HumanSegmentEventType = { "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 = @@ -387,7 +390,10 @@ type SliceMachineSharedOnboardingCompleted = SegmentEvent< typeof SegmentEventType.sharedOnboarding_completed, SharedOnboardingProperties >; - +type SliceMachineSharedOnboardingTutorial = SegmentEvent< + typeof SegmentEventType.sharedOnboarding_tutorial, + SharedOnboardingProperties +>; type SliceMachinePostPushEmptyStateCtaClicked = SegmentEvent< typeof SegmentEventType.postPush_emptyStateCtaClicked >; @@ -441,6 +447,7 @@ export type SegmentEvents = | SliceMachineSharedOnboardingStepOpened | SliceMachineSharedOnboardingStepCompleted | SliceMachineSharedOnboardingCompleted + | SliceMachineSharedOnboardingTutorial | SliceMachinePostPushEmptyStateCtaClicked | SliceMachinePostPushToastCtaClicked | SliceMachineExperimentExposure; diff --git a/packages/slice-machine/package.json b/packages/slice-machine/package.json index 1f2cf42934..297c6e0524 100644 --- a/packages/slice-machine/package.json +++ b/packages/slice-machine/package.json @@ -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.5.0", "@prismicio/simulator": "0.1.4", diff --git a/yarn.lock b/yarn.lock index a1dde3e3f4..678b256234 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.5.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" From 5ded88e9bcd211fed770b827bca440e9820760f2 Mon Sep 17 00:00:00 2001 From: Bohdan Imiela <47499119+BohdanOne@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:44:30 +0100 Subject: [PATCH 3/7] fix: move focus into edit modal (#1503) --- .../slice-machine/src/features/customTypes/EditDropdown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ( <> - + Date: Thu, 19 Dec 2024 12:45:01 +0100 Subject: [PATCH 4/7] feat(onboarding): enable another iteration of onboarding guide experiment (#1514) --- packages/init/src/SliceMachineInitProcess.ts | 2 +- .../manager/src/managers/telemetry/types.ts | 23 ---- .../features/inAppGuide/InAppGuideContext.tsx | 51 ------- .../features/inAppGuide/InAppGuideDialog.tsx | 94 ------------- .../features/inAppGuide/inAppGuideContent.tsx | 65 --------- .../features/onboarding/OnboardingGuide.tsx | 10 +- .../OnboardingGuide.module.css | 21 --- .../OnboardingProgressStepper.tsx | 98 -------------- .../OnboardingProvider.tsx | 127 ------------------ .../OnboardingStepDialog.tsx | 65 --------- .../OnboardingStepDialogContent.tsx | 34 ----- .../OnboardingStepDialog/index.ts | 1 - .../OnboardingTutorial/OnboardingTutorial.tsx | 25 ---- .../SliceMachineOnboardingGuide.tsx | 74 ---------- .../SliceMachineOnboardingGuide/content.tsx | 94 ------------- .../SliceMachineOnboardingGuide/types.ts | 26 ---- .../onboarding/useOnboardingExperiment.ts | 6 - .../useSharedOnboardingExperiment.ts | 2 +- .../components/ReviewModal/ReviewModal.tsx | 7 - packages/slice-machine/src/pages/_app.tsx | 19 +-- playwright/fixtures/index.ts | 4 - playwright/pages/SliceMachinePage.ts | 3 - .../pages/components/InAppGuideDialog.ts | 38 ------ playwright/tests/common/inAppGuide.spec.ts | 36 ----- playwright/tests/common/reviewForm.spec.ts | 37 ----- 25 files changed, 10 insertions(+), 952 deletions(-) delete mode 100644 packages/slice-machine/src/features/inAppGuide/InAppGuideContext.tsx delete mode 100644 packages/slice-machine/src/features/inAppGuide/InAppGuideDialog.tsx delete mode 100644 packages/slice-machine/src/features/inAppGuide/inAppGuideContent.tsx delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingGuide.module.css delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingProgressStepper.tsx delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingProvider.tsx delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/OnboardingStepDialog.tsx delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/OnboardingStepDialogContent.tsx delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingStepDialog/index.ts delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/OnboardingTutorial/OnboardingTutorial.tsx delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/SliceMachineOnboardingGuide.tsx delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/content.tsx delete mode 100644 packages/slice-machine/src/features/onboarding/SliceMachineOnboardingGuide/types.ts delete mode 100644 packages/slice-machine/src/features/onboarding/useOnboardingExperiment.ts delete mode 100644 playwright/pages/components/InAppGuideDialog.ts delete mode 100644 playwright/tests/common/inAppGuide.spec.ts 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/src/managers/telemetry/types.ts b/packages/manager/src/managers/telemetry/types.ts index 6c1857d2b2..500da98bb2 100644 --- a/packages/manager/src/managers/telemetry/types.ts +++ b/packages/manager/src/managers/telemetry/types.ts @@ -39,9 +39,6 @@ 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", @@ -97,11 +94,6 @@ 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]: @@ -366,18 +358,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 @@ -441,9 +421,6 @@ export type SegmentEvents = | SliceMachineStart | SliceLibraryBetaModalOpened | SliceLibraryBetaCodeOpened - | SliceMachineOnboardingStepOpened - | SliceMachineOnboardingStepCompleted - | SliceMachineOnboardingCompleted | SliceMachineSharedOnboardingStepOpened | SliceMachineSharedOnboardingStepCompleted | SliceMachineSharedOnboardingCompleted diff --git a/packages/slice-machine/src/features/inAppGuide/InAppGuideContext.tsx b/packages/slice-machine/src/features/inAppGuide/InAppGuideContext.tsx deleted file mode 100644 index 0d88689296..0000000000 --- a/packages/slice-machine/src/features/inAppGuide/InAppGuideContext.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { - createContext, - Dispatch, - FC, - PropsWithChildren, - SetStateAction, - useContext, - useMemo, -} from "react"; - -import { useOnboardingExperiment } from "@/features/onboarding/useOnboardingExperiment"; -import { usePersistedState } from "@/hooks/usePersistedState"; - -type InAppGuideContextValue = { - isInAppGuideOpen: boolean; - setIsInAppGuideOpen: Dispatch>; -}; - -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/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/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/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/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 From bc7c2865d2bf22d9782923376409b1ae6ec0af26 Mon Sep 17 00:00:00 2001 From: BohdanOne <47499119+BohdanOne@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:13:28 +0000 Subject: [PATCH 5/7] release: 9 new packages --- packages/adapter-next/package.json | 2 +- packages/adapter-nuxt/package.json | 2 +- packages/adapter-nuxt2/package.json | 2 +- packages/adapter-sveltekit/package.json | 2 +- packages/init/package.json | 2 +- packages/manager/package.json | 2 +- packages/plugin-kit/package.json | 2 +- packages/slice-machine/package.json | 2 +- packages/start-slicemachine/package.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/adapter-next/package.json b/packages/adapter-next/package.json index 83eb25222d..335dc25403 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 94db33645c..204266b68c 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 44023e8e06..e19a813834 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 c8067740b4..443a6d1101 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/manager/package.json b/packages/manager/package.json index 2d0a38937c..9a9265957d 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/plugin-kit/package.json b/packages/plugin-kit/package.json index a6670e7c73..2de79900c8 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 297c6e0524..f0314ca0df 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": { diff --git a/packages/start-slicemachine/package.json b/packages/start-slicemachine/package.json index f52a7abd84..e08b596aef 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", From a8d397b4cf2e65e301062316e8141b06781a637a Mon Sep 17 00:00:00 2001 From: Bohdan Imiela <47499119+BohdanOne@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:56:57 +0100 Subject: [PATCH 6/7] docs: update svelte kit project install command (#1518) --- README.md | 2 +- e2e-projects/sveltekit/README.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 From b2ce2b8e88066316a6912e45ce87eb691de148a8 Mon Sep 17 00:00:00 2001 From: Bohdan Imiela <47499119+BohdanOne@users.noreply.github.com> Date: Fri, 20 Dec 2024 13:06:25 +0100 Subject: [PATCH 7/7] fix: skip flaky test (#1520) --- playwright/tests/common/autoSync.spec.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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,