slice-machine-ui 1.14.2-dev-next-release.5 → 1.14.2-dev-next-release.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/components/Forms/CreateSliceModal/CreateSliceModal.tsx +9 -54
  2. package/lib/builders/CustomTypeBuilder/SliceZone/SlicesTemplatesModal.tsx +43 -4
  3. package/lib/builders/CustomTypeBuilder/SliceZone/UpdateSliceZoneModal.tsx +11 -3
  4. package/lib/builders/CustomTypeBuilder/SliceZone/index.tsx +81 -61
  5. package/lib/builders/CustomTypeBuilder/TabZone/index.tsx +0 -10
  6. package/lib/builders/common/EditModal/index.jsx +1 -1
  7. package/lib/models/common/CustomType/sliceZone.ts +0 -18
  8. package/out/404.html +1 -1
  9. package/out/[lib]/[sliceName]/[variation]/screenshot.html +1 -1
  10. package/out/[lib]/[sliceName]/[variation]/simulator.html +1 -1
  11. package/out/[lib]/[sliceName]/[variation].html +1 -1
  12. package/out/_next/static/{aWd6brnoafNP_fcVfTvaj → W5H36cBabsItHQduZS-Az}/_buildManifest.js +1 -1
  13. package/out/_next/static/chunks/323-3be57da824e46abc.js +1 -0
  14. package/out/_next/static/chunks/pages/{_app-98311155cf2a39cc.js → _app-62bb0daedfad0679.js} +2 -2
  15. package/out/_next/static/chunks/pages/custom-types/{[customTypeId]-b2bdae3a1fdcd601.js → [customTypeId]-4fe86acfed194773.js} +1 -1
  16. package/out/_next/static/chunks/pages/page-types/{[pageTypeId]-7958f7f68d8246b4.js → [pageTypeId]-87f5f9704f2c3f2d.js} +1 -1
  17. package/out/_next/static/chunks/pages/slices-950d2b9b372ba5ab.js +1 -0
  18. package/out/changelog.html +1 -1
  19. package/out/changes.html +1 -1
  20. package/out/custom-types/[customTypeId].html +1 -1
  21. package/out/custom-types.html +1 -1
  22. package/out/index.html +1 -1
  23. package/out/page-types/[pageTypeId].html +1 -1
  24. package/out/slices.html +1 -1
  25. package/package.json +4 -4
  26. package/pages/slices.tsx +21 -0
  27. package/src/features/customTypes/customTypesBuilder/SliceZoneBlankSlate.tsx +6 -6
  28. package/src/features/customTypes/customTypesMessages.ts +0 -4
  29. package/src/features/slices/actions/addSlicesToSliceZone.ts +53 -0
  30. package/src/features/slices/actions/createSlice.ts +0 -7
  31. package/src/modules/selectedCustomType/actions.ts +0 -5
  32. package/src/modules/selectedCustomType/reducer.ts +0 -13
  33. package/src/modules/useSliceMachineActions.ts +0 -7
  34. package/test/lib/models/common/CustomType/sliceZone.test.ts +0 -19
  35. package/test/src/modules/selectedCustomType/reducer.test.ts +0 -27
  36. package/out/_next/static/chunks/582-46d75a04f674a46c.js +0 -1
  37. package/out/_next/static/chunks/pages/slices-24d2714462334469.js +0 -1
  38. /package/out/_next/static/{aWd6brnoafNP_fcVfTvaj → W5H36cBabsItHQduZS-Az}/_ssgManifest.js +0 -0
@@ -1,41 +1,37 @@
1
1
  import { Box, Label } from "theme-ui";
2
2
  import { FC, useState } from "react";
3
3
  import Select from "react-select";
4
- import { useRouter } from "next/router";
4
+ import { SharedSlice } from "@prismicio/types-internal/lib/customtypes";
5
5
 
6
- import { CustomTypeSM, CustomTypes } from "@lib/models/common/CustomType";
7
6
  import { SliceSM } from "@lib/models/common/Slice";
8
7
  import { LibraryUI } from "@lib/models/common/LibraryUI";
9
8
  import ModalFormCard from "@components/ModalFormCard";
10
9
  import { createSlice } from "@src/features/slices/actions/createSlice";
11
10
  import useSliceMachineActions from "@src/modules/useSliceMachineActions";
12
11
  import { getState } from "@src/apiClient";
13
- import { CUSTOM_TYPES_MESSAGES } from "@src/features/customTypes/customTypesMessages";
14
- import { managerClient } from "@src/managerClient";
12
+
15
13
  import { validateSliceModalValues } from "../formsValidator";
16
14
  import { InputBox } from "../components/InputBox";
17
- import { SLICES_CONFIG } from "@src/features/slices/slicesConfig";
18
15
 
19
16
  type CreateSliceModalProps = {
20
17
  onClose: () => void;
18
+ onSuccess: (
19
+ newSlice: SharedSlice,
20
+ libraryName: string
21
+ ) => Promise<void> | void;
21
22
  localLibraries: readonly LibraryUI[];
22
23
  remoteSlices: ReadonlyArray<SliceSM>;
23
- customType?: CustomTypeSM;
24
- tabId?: string;
25
24
  };
26
25
 
27
26
  type FormValues = { sliceName: string; from: string };
28
27
 
29
28
  export const CreateSliceModal: FC<CreateSliceModalProps> = ({
30
29
  onClose,
30
+ onSuccess,
31
31
  localLibraries,
32
32
  remoteSlices,
33
- customType,
34
- tabId,
35
33
  }) => {
36
- const router = useRouter();
37
- const { createSliceSuccess, saveCustomTypeSuccess } =
38
- useSliceMachineActions();
34
+ const { createSliceSuccess } = useSliceMachineActions();
39
35
  const [isCreatingSlice, setIsCreatingSlice] = useState(false);
40
36
 
41
37
  const onSubmit = async (values: FormValues) => {
@@ -53,42 +49,7 @@ export const CreateSliceModal: FC<CreateSliceModalProps> = ({
53
49
  // Update Redux store
54
50
  createSliceSuccess(serverState.libraries);
55
51
 
56
- // When creating a slice from a custom type, we add it directly to the slice zone and save
57
- if (customType) {
58
- const newCustomType = {
59
- ...customType,
60
- tabs: customType.tabs.map((tab) =>
61
- tab.key === tabId && tab.sliceZone
62
- ? {
63
- ...tab,
64
- sliceZone: {
65
- key: tab.sliceZone.key,
66
- value: [
67
- ...tab.sliceZone.value,
68
- {
69
- key: newSlice.id,
70
- value: newSlice,
71
- },
72
- ],
73
- },
74
- }
75
- : tab
76
- ),
77
- };
78
- await managerClient.customTypes.updateCustomType({
79
- model: CustomTypes.fromSM(newCustomType),
80
- });
81
- saveCustomTypeSuccess(CustomTypes.fromSM(newCustomType));
82
- }
83
-
84
- // Redirect to the slice page
85
- const variationId = newSlice.variations[0].id;
86
- const sliceLocation = SLICES_CONFIG.getBuilderPagePathname({
87
- libraryName,
88
- sliceName,
89
- variationId,
90
- });
91
- void router.push(sliceLocation);
52
+ await onSuccess(newSlice, libraryName);
92
53
  },
93
54
  });
94
55
  };
@@ -115,12 +76,6 @@ export const CreateSliceModal: FC<CreateSliceModalProps> = ({
115
76
  content={{
116
77
  title: "Create a new slice",
117
78
  }}
118
- actionMessage={
119
- customType
120
- ? CUSTOM_TYPES_MESSAGES[customType.format]
121
- .createSliceFromTypeActionMessage
122
- : undefined
123
- }
124
79
  >
125
80
  {({ touched, values, setFieldValue, errors }) => (
126
81
  <Box>
@@ -1,19 +1,27 @@
1
1
  import { FC } from "react";
2
2
  import { Text } from "theme-ui";
3
+ import { SharedSlice } from "@prismicio/types-internal/lib/customtypes";
3
4
 
4
5
  import { SliceTemplate } from "@src/features/slicesTemplates/useSlicesTemplates";
5
6
  import { Slices } from "@lib/models/common/Slice";
6
7
  import { ComponentUI } from "@lib/models/common/ComponentUI";
7
- import UpdateSliceZoneModalList from "./UpdateSliceZoneModalList";
8
+ import { createSlicesTemplates } from "@src/features/slicesTemplates/actions/createSlicesTemplates";
9
+ import { LibraryUI } from "@lib/models/common/LibraryUI";
10
+ import { getState } from "@src/apiClient";
11
+ import useSliceMachineActions from "@src/modules/useSliceMachineActions";
12
+ import { managerClient } from "@src/managerClient";
13
+
8
14
  import ModalFormCard from "../../../../components/ModalFormCard";
15
+ import UpdateSliceZoneModalList from "./UpdateSliceZoneModalList";
9
16
  import { sliceTemplatesComingSoon } from "./sliceTemplatesComingSoon";
10
17
 
11
18
  interface UpdateSliceModalProps {
12
19
  isOpen: boolean;
13
20
  formId: string;
14
21
  close: () => void;
15
- onSubmit: (values: SliceZoneFormValues) => void;
22
+ onSuccess: (slices: SharedSlice[]) => Promise<void>;
16
23
  availableSlicesTemplates: SliceTemplate[];
24
+ localLibraries: readonly LibraryUI[];
17
25
  }
18
26
 
19
27
  export type SliceZoneFormValues = {
@@ -24,9 +32,12 @@ export const SlicesTemplatesModal: FC<UpdateSliceModalProps> = ({
24
32
  isOpen,
25
33
  formId,
26
34
  close,
27
- onSubmit,
35
+ onSuccess,
28
36
  availableSlicesTemplates,
37
+ localLibraries,
29
38
  }) => {
39
+ const { createSliceSuccess } = useSliceMachineActions();
40
+
30
41
  return (
31
42
  <ModalFormCard
32
43
  buttonLabel="Add"
@@ -34,7 +45,35 @@ export const SlicesTemplatesModal: FC<UpdateSliceModalProps> = ({
34
45
  formId={formId}
35
46
  close={close}
36
47
  onSubmit={(values: SliceZoneFormValues) => {
37
- onSubmit(values);
48
+ const { sliceKeys } = values;
49
+
50
+ void createSlicesTemplates({
51
+ templateIDs: sliceKeys,
52
+ localLibrariesNames: localLibraries.map((library) => library.name),
53
+ onSuccess: async (slicesIds: string[]) => {
54
+ // TODO(DT-1453): Remove the need of the global getState
55
+ const serverState = await getState();
56
+
57
+ // Update Redux store
58
+ createSliceSuccess(serverState.libraries);
59
+
60
+ const slices: SharedSlice[] = await Promise.all(
61
+ slicesIds
62
+ .map(async (sliceId) => {
63
+ const slice = await managerClient.slices.readSlice({
64
+ libraryID: localLibraries[0].name,
65
+ sliceID: sliceId,
66
+ });
67
+ return slice.model;
68
+ })
69
+ .filter(
70
+ (slice) => slice !== undefined
71
+ ) as Promise<SharedSlice>[]
72
+ );
73
+
74
+ await onSuccess(slices);
75
+ },
76
+ });
38
77
  }}
39
78
  initialValues={{
40
79
  sliceKeys: [],
@@ -1,6 +1,8 @@
1
1
  import { Text } from "theme-ui";
2
+ import { SharedSlice } from "@prismicio/types-internal/lib/customtypes";
2
3
 
3
4
  import { ComponentUI } from "@lib/models/common/ComponentUI";
5
+
4
6
  import ModalFormCard from "../../../../components/ModalFormCard";
5
7
  import UpdateSliceZoneModalList from "./UpdateSliceZoneModalList";
6
8
 
@@ -8,7 +10,7 @@ interface UpdateSliceModalProps {
8
10
  isOpen: boolean;
9
11
  formId: string;
10
12
  close: () => void;
11
- onSubmit: (values: SliceZoneFormValues) => void;
13
+ onSubmit: (slices: SharedSlice[]) => Promise<void>;
12
14
  availableSlices: ReadonlyArray<ComponentUI>;
13
15
  }
14
16
 
@@ -30,8 +32,14 @@ const UpdateSliceZoneModal: React.FC<UpdateSliceModalProps> = ({
30
32
  formId={formId}
31
33
  close={close}
32
34
  onSubmit={(values: SliceZoneFormValues) => {
33
- onSubmit(values);
34
- close();
35
+ const { sliceKeys } = values;
36
+ const slices = sliceKeys
37
+ .map(
38
+ (sliceKey) =>
39
+ availableSlices.find((s) => s.model.id === sliceKey)?.model
40
+ )
41
+ .filter((slice) => slice !== undefined) as SharedSlice[];
42
+ void onSubmit(slices);
35
43
  }}
36
44
  initialValues={{
37
45
  sliceKeys: [],
@@ -13,13 +13,12 @@ import { useEffect, useMemo, useState } from "react";
13
13
  import { useSelector } from "react-redux";
14
14
  import { BaseStyles } from "theme-ui";
15
15
  import { useRouter } from "next/router";
16
+ import { toast } from "react-toastify";
17
+ import { SharedSlice } from "@prismicio/types-internal/lib/customtypes";
16
18
 
19
+ import { CustomTypeSM, CustomTypes } from "@lib/models/common/CustomType";
17
20
  import { CreateSliceModal } from "@components/Forms/CreateSliceModal";
18
- import type {
19
- NonSharedSliceInSliceZone,
20
- SliceZoneSlice,
21
- } from "@lib/models/common/CustomType/sliceZone";
22
- import type { CustomTypeSM } from "@lib/models/common/CustomType";
21
+ import type { SliceZoneSlice } from "@lib/models/common/CustomType/sliceZone";
23
22
  import type { ComponentUI } from "@lib/models/common/ComponentUI";
24
23
  import type { LibraryUI } from "@lib/models/common/LibraryUI";
25
24
  import type { SlicesSM } from "@lib/models/common/Slices";
@@ -33,14 +32,14 @@ import {
33
32
  } from "@src/modules/slices";
34
33
  import type { SliceMachineStoreType } from "@src/redux/type";
35
34
  import { useSlicesTemplates } from "@src/features/slicesTemplates/useSlicesTemplates";
36
- import { createSlicesTemplates } from "@src/features/slicesTemplates/actions/createSlicesTemplates";
35
+ import useSliceMachineActions from "@src/modules/useSliceMachineActions";
36
+ import { addSlicesToSliceZone } from "@src/features/slices/actions/addSlicesToSliceZone";
37
+ import { ToastMessageWithPath } from "@components/ToasterContainer";
37
38
 
38
39
  import { DeleteSliceZoneModal } from "./DeleteSliceZoneModal";
39
- import { SlicesList } from "./List";
40
40
  import UpdateSliceZoneModal from "./UpdateSliceZoneModal";
41
41
  import { SlicesTemplatesModal } from "./SlicesTemplatesModal";
42
- import { getState } from "@src/apiClient";
43
- import useSliceMachineActions from "@src/modules/useSliceMachineActions";
42
+ import { SlicesList } from "./List";
44
43
 
45
44
  const mapAvailableAndSharedSlices = (
46
45
  sliceZone: SlicesSM,
@@ -101,8 +100,6 @@ interface SliceZoneProps {
101
100
  onCreateSliceZone: () => void;
102
101
  onDeleteSliceZone: () => void;
103
102
  onRemoveSharedSlice: (sliceId: string) => void;
104
- // eslint-disable-next-line @typescript-eslint/ban-types
105
- onSelectSharedSlices: Function;
106
103
  sliceZone?: SlicesSM | null | undefined;
107
104
  tabId: string;
108
105
  }
@@ -112,7 +109,6 @@ const SliceZone: React.FC<SliceZoneProps> = ({
112
109
  onCreateSliceZone,
113
110
  onDeleteSliceZone,
114
111
  onRemoveSharedSlice,
115
- onSelectSharedSlices,
116
112
  sliceZone,
117
113
  tabId,
118
114
  }) => {
@@ -130,7 +126,8 @@ const SliceZone: React.FC<SliceZoneProps> = ({
130
126
  slices: getFrontendSlices(store),
131
127
  })
132
128
  );
133
- const { createSliceSuccess } = useSliceMachineActions();
129
+ const { initCustomTypeStore, saveCustomTypeSuccess } =
130
+ useSliceMachineActions();
134
131
  const localLibraries: readonly LibraryUI[] = libraries.filter(
135
132
  (library) => library.isLocal
136
133
  );
@@ -157,11 +154,6 @@ const SliceZone: React.FC<SliceZoneProps> = ({
157
154
  .filter((e) => e.type === "SharedSlice")
158
155
  .map((e) => e.payload) as ReadonlyArray<ComponentUI>;
159
156
 
160
- /* Preserve these keys in SliceZone */
161
- const nonSharedSlicesKeysInSliceZone = slicesInSliceZone
162
- .filter((e) => e.type === "Slice")
163
- .map((e) => (e.payload as NonSharedSliceInSliceZone).key);
164
-
165
157
  const availableSlicesToAdd = availableSlices.filter(
166
158
  (slice) =>
167
159
  !sharedSlicesInSliceZone.some(
@@ -169,11 +161,11 @@ const SliceZone: React.FC<SliceZoneProps> = ({
169
161
  )
170
162
  );
171
163
 
172
- const onAddNewSlice = () => {
164
+ const openUpdateSliceZoneModal = () => {
173
165
  setIsUpdateSliceZoneModalOpen(true);
174
166
  };
175
167
 
176
- const onCreateNewSlice = () => {
168
+ const openCreateSliceModal = () => {
177
169
  setIsCreateSliceModalOpen(true);
178
170
  };
179
171
 
@@ -197,6 +189,29 @@ const SliceZone: React.FC<SliceZoneProps> = ({
197
189
  }
198
190
  };
199
191
 
192
+ const closeUpdateSliceZoneModal = () => {
193
+ setIsUpdateSliceZoneModalOpen(false);
194
+ redirectToEditMode();
195
+ };
196
+
197
+ const closeCreateSliceModal = () => {
198
+ setIsCreateSliceModalOpen(false);
199
+ redirectToEditMode();
200
+ };
201
+
202
+ const closeSlicesTemplatesModal = () => {
203
+ setIsSlicesTemplatesModalOpen(false);
204
+ redirectToEditMode();
205
+ };
206
+
207
+ const onAddSlicesToSliceZone = (newCustomType: CustomTypeSM) => {
208
+ // Reset selected custom type store to update slice zone and saving status
209
+ initCustomTypeStore(newCustomType, newCustomType);
210
+
211
+ // Update available custom type store with new custom type
212
+ saveCustomTypeSuccess(CustomTypes.fromSM(newCustomType));
213
+ };
214
+
200
215
  return (
201
216
  <Box flexDirection="column" height="100%">
202
217
  {query.newPageType === undefined ? (
@@ -214,7 +229,7 @@ const SliceZone: React.FC<SliceZoneProps> = ({
214
229
  <DropdownMenuContent align="end">
215
230
  <DropdownMenuItem
216
231
  startIcon={<Icon name="add" size="large" />}
217
- onSelect={onCreateNewSlice}
232
+ onSelect={openCreateSliceModal}
218
233
  description="Start from scratch."
219
234
  >
220
235
  Create new
@@ -233,7 +248,7 @@ const SliceZone: React.FC<SliceZoneProps> = ({
233
248
 
234
249
  {availableSlicesToAdd.length > 0 ? (
235
250
  <DropdownMenuItem
236
- onSelect={onAddNewSlice}
251
+ onSelect={openUpdateSliceZoneModal}
237
252
  startIcon={<Icon name="folder" size="large" />}
238
253
  description="Select from your own slices."
239
254
  >
@@ -274,8 +289,8 @@ const SliceZone: React.FC<SliceZoneProps> = ({
274
289
  </BaseStyles>
275
290
  ) : (
276
291
  <SliceZoneBlankSlate
277
- onAddNewSlice={onAddNewSlice}
278
- onCreateNewSlice={onCreateNewSlice}
292
+ openUpdateSliceZoneModal={openUpdateSliceZoneModal}
293
+ openCreateSliceModal={openCreateSliceModal}
279
294
  openSlicesTemplatesModal={openSlicesTemplatesModal}
280
295
  projectHasAvailableSlices={availableSlicesToAdd.length > 0}
281
296
  isSlicesTemplatesSupported={availableSlicesTemplates.length > 0}
@@ -286,45 +301,39 @@ const SliceZone: React.FC<SliceZoneProps> = ({
286
301
  isOpen={isUpdateSliceZoneModalOpen}
287
302
  formId={`tab-slicezone-form-${tabId}`}
288
303
  availableSlices={availableSlicesToAdd}
289
- onSubmit={({ sliceKeys }) => {
290
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
291
- onSelectSharedSlices(
292
- sliceKeys.concat(sharedSlicesInSliceZone.map((s) => s.model.id)),
293
- nonSharedSlicesKeysInSliceZone
294
- );
295
- redirectToEditMode();
304
+ onSubmit={async (slices: SharedSlice[]) => {
305
+ const newCustomType = await addSlicesToSliceZone({
306
+ customType,
307
+ tabId,
308
+ slices,
309
+ });
310
+ onAddSlicesToSliceZone(newCustomType);
311
+ closeUpdateSliceZoneModal();
312
+ toast.success("Slice(s) added to slice zone");
296
313
  }}
297
- close={() => setIsUpdateSliceZoneModalOpen(false)}
314
+ close={closeUpdateSliceZoneModal}
298
315
  />
299
316
  <SlicesTemplatesModal
300
317
  isOpen={isSlicesTemplatesModalOpen}
301
318
  formId={`tab-slicezone-form-${tabId}`}
302
319
  availableSlicesTemplates={availableSlicesTemplates}
303
- onSubmit={({ sliceKeys }) =>
304
- void createSlicesTemplates({
305
- templateIDs: sliceKeys,
306
- localLibrariesNames: localLibraries.map((library) => library.name),
307
- onSuccess: async (slicesIds: string[]) => {
308
- // TODO(DT-1453): Remove the need of the global getState
309
- const serverState = await getState();
310
-
311
- // Update Redux store
312
- createSliceSuccess(serverState.libraries);
313
-
314
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
315
- onSelectSharedSlices(
316
- slicesIds.concat(
317
- sharedSlicesInSliceZone.map((s) => s.model.id)
318
- ),
319
- nonSharedSlicesKeysInSliceZone
320
- );
321
-
322
- setIsSlicesTemplatesModalOpen(false);
323
- redirectToEditMode();
324
- },
325
- })
326
- }
327
- close={() => setIsSlicesTemplatesModalOpen(false)}
320
+ localLibraries={localLibraries}
321
+ onSuccess={async (slices: SharedSlice[]) => {
322
+ const newCustomType = await addSlicesToSliceZone({
323
+ customType,
324
+ tabId,
325
+ slices,
326
+ });
327
+ onAddSlicesToSliceZone(newCustomType);
328
+ closeSlicesTemplatesModal();
329
+ toast.success(
330
+ <ToastMessageWithPath
331
+ message="Slice template(s) added to slice zone and created at: "
332
+ path={`${localLibraries[0].name}/`}
333
+ />
334
+ );
335
+ }}
336
+ close={closeSlicesTemplatesModal}
328
337
  />
329
338
  <DeleteSliceZoneModal
330
339
  isDeleteSliceZoneModalOpen={isDeleteSliceZoneModalOpen}
@@ -338,13 +347,24 @@ const SliceZone: React.FC<SliceZoneProps> = ({
338
347
  />
339
348
  {localLibraries?.length !== 0 && isCreateSliceModalOpen && (
340
349
  <CreateSliceModal
341
- onClose={() => {
342
- setIsCreateSliceModalOpen(false);
350
+ onSuccess={async (newSlice: SharedSlice) => {
351
+ const newCustomType = await addSlicesToSliceZone({
352
+ customType,
353
+ tabId,
354
+ slices: [newSlice],
355
+ });
356
+ onAddSlicesToSliceZone(newCustomType);
357
+ closeCreateSliceModal();
358
+ toast.success(
359
+ <ToastMessageWithPath
360
+ message="New slice added to slice zone and created at: "
361
+ path={`${localLibraries[0].name}/${newSlice.name}/model.json`}
362
+ />
363
+ );
343
364
  }}
344
365
  localLibraries={localLibraries}
345
366
  remoteSlices={remoteSlices}
346
- customType={customType}
347
- tabId={tabId}
367
+ onClose={closeCreateSliceModal}
348
368
  />
349
369
  )}
350
370
  </Box>
@@ -46,7 +46,6 @@ const TabZone: FC<TabZoneProps> = ({
46
46
  createSliceZone,
47
47
  deleteSliceZone,
48
48
  deleteCustomTypeSharedSlice,
49
- replaceCustomTypeSharedSlice,
50
49
  } = useSliceMachineActions();
51
50
 
52
51
  const { query } = useRouter();
@@ -128,14 +127,6 @@ const TabZone: FC<TabZoneProps> = ({
128
127
  deleteSliceZone(tabId);
129
128
  };
130
129
 
131
- const onSelectSharedSlices = (keys: string[], preserve: string[] = []) => {
132
- void telemetry.track({
133
- event: "custom-type:slice-zone-updated",
134
- customTypeId: customType.id,
135
- });
136
- replaceCustomTypeSharedSlice(tabId, keys, preserve);
137
- };
138
-
139
130
  const onRemoveSharedSlice = (sliceId: string) => {
140
131
  deleteCustomTypeSharedSlice(tabId, sliceId);
141
132
  };
@@ -189,7 +180,6 @@ const TabZone: FC<TabZoneProps> = ({
189
180
  onRemoveSharedSlice={onRemoveSharedSlice}
190
181
  onCreateSliceZone={onCreateSliceZone}
191
182
  onDeleteSliceZone={onDeleteSliceZone}
192
- onSelectSharedSlices={onSelectSharedSlices}
193
183
  />
194
184
  </Suspense>
195
185
  </ErrorBoundary>
@@ -272,7 +272,7 @@ const EditModal = ({ close, data, fields, onSave, zoneType }) => {
272
272
  borderRadius: "4px",
273
273
  }}
274
274
  >
275
- Save
275
+ Done
276
276
  </Button>
277
277
  </Flex>
278
278
  }
@@ -30,24 +30,6 @@ export const SliceZone = {
30
30
  value,
31
31
  };
32
32
  },
33
- replaceSharedSlice(
34
- sz: SlicesSM,
35
- keys: ReadonlyArray<string>,
36
- preserve: ReadonlyArray<string> = []
37
- ): SlicesSM {
38
- const value = sz.value
39
- .filter(({ key }) => preserve.includes(key))
40
- .concat(
41
- keys.map((key) => ({
42
- key,
43
- value: { type: "SharedSlice" },
44
- }))
45
- );
46
- return {
47
- ...sz,
48
- value,
49
- };
50
- },
51
33
  removeSharedSlice(sz: SlicesSM, key: string): SlicesSM {
52
34
  const value = sz.value.filter(({ key: k }) => k !== key);
53
35
 
package/out/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Slice Machine</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/fe2a2a1cbf3b4092.css" as="style"/><link rel="stylesheet" href="/_next/static/css/fe2a2a1cbf3b4092.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-2f903acb0cccbf9e.js" defer=""></script><script src="/_next/static/chunks/framework-cdccea7a52cc6e81.js" defer=""></script><script src="/_next/static/chunks/main-5e6780279ca21cb9.js" defer=""></script><script src="/_next/static/chunks/pages/_app-98311155cf2a39cc.js" defer=""></script><script src="/_next/static/chunks/pages/_error-69b4f498bafdd188.js" defer=""></script><script src="/_next/static/aWd6brnoafNP_fcVfTvaj/_buildManifest.js" defer=""></script><script src="/_next/static/aWd6brnoafNP_fcVfTvaj/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style data-emotion="css-global 413pep">html{--theme-ui-colors-text:#25252D;--theme-ui-colors-textClear:#6F6E77;--theme-ui-colors-grayLight:#E8E8ED;--theme-ui-colors-hoverBackground:#f2f2f2;--theme-ui-colors-background:#FFF;--theme-ui-colors-backgroundClear:#FFF;--theme-ui-colors-primary:#5D40F7;--theme-ui-colors-purpleLight:#F6F1FC;--theme-ui-colors-purpleLight01:#6548FF1A;--theme-ui-colors-purple12:#F1EEFE;--theme-ui-colors-purpleStrong:#5842C3;--theme-ui-colors-whiteButtonText:#1A1523;--theme-ui-colors-codeBlockBackground:#32275F;--theme-ui-colors-failedConnectText:#86848D;--theme-ui-colors-changesWarning-background:#FFECC7;--theme-ui-colors-changesWarning-color:#5C0C17;--theme-ui-colors-greyIcon:#6F6E77;--theme-ui-colors-greyIconDisabled:#C9D0D8;--theme-ui-colors-missingScreenshotBanner-color:#5C0C17;--theme-ui-colors-missingScreenshotBanner-bg:#FFECC7;--theme-ui-colors-badge-new-bg:#DBEDDB;--theme-ui-colors-badge-new-color:#05644D;--theme-ui-colors-badge-modified-bg:#FFECC7;--theme-ui-colors-badge-modified-color:#5C0C17;--theme-ui-colors-badge-synced-bg:purple12;--theme-ui-colors-badge-synced-color:#5842C3;--theme-ui-colors-badge-deleted-bg:rgba(203, 36, 49, 0.1);--theme-ui-colors-badge-unknown-bg:#F3F5F7;--theme-ui-colors-badge-unknown-color:#9AA4AF;--theme-ui-colors-codeBlockBorder:#545454;--theme-ui-colors-secondary:#F9FAFB;--theme-ui-colors-danger:#CB2431;--theme-ui-colors-highlight:hsl(10, 40%, 90%);--theme-ui-colors-purple:#5B3DF5;--theme-ui-colors-purple08:#5842C3;--theme-ui-colors-muted:#F9F9FB;--theme-ui-colors-icons:#8091A5;--theme-ui-colors-gray:#F8F9FA;--theme-ui-colors-grey01:#F3F5F7;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-grey03:#F4F2F4;--theme-ui-colors-grey04:#9AA4AF;--theme-ui-colors-grey05:#667587;--theme-ui-colors-grey07:#F9F8F9;--theme-ui-colors-grey10:#86848D;--theme-ui-colors-grey12:#1A1523;--theme-ui-colors-greyTransparent:rgba(37, 37, 45, 0.4);--theme-ui-colors-borders:#E4E2E4;--theme-ui-colors-bordersFocused:#6E56CF;--theme-ui-colors-deep:#0E2150;--theme-ui-colors-deep1:#A0ADE7;--theme-ui-colors-lightGreen:#EBF8F1;--theme-ui-colors-lightOrange:#FDF4EC;--theme-ui-colors-darkOrange:#C17C10;--theme-ui-colors-error:#E55737;--theme-ui-colors-success:#3AB97A;--theme-ui-colors-headSection:#fff;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-warning02:#ED811C;--theme-ui-colors-sidebar:#F1F1F4;--theme-ui-colors-link:#6E56CF;--theme-ui-colors-choggleBox:#5163BA;--theme-ui-colors-darkBorder:#DCDBDD;--theme-ui-colors-code-border:#DFE1E5;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);}html.theme-ui-light,.theme-ui-light html{--theme-ui-colors-text:#25252D;--theme-ui-colors-textClear:#6F6E77;--theme-ui-colors-grayLight:#E8E8ED;--theme-ui-colors-hoverBackground:#f2f2f2;--theme-ui-colors-background:#FFF;--theme-ui-colors-backgroundClear:#FFF;--theme-ui-colors-primary:#5D40F7;--theme-ui-colors-purpleLight:#F6F1FC;--theme-ui-colors-purpleLight01:#6548FF1A;--theme-ui-colors-purple12:#F1EEFE;--theme-ui-colors-purpleStrong:#5842C3;--theme-ui-colors-whiteButtonText:#1A1523;--theme-ui-colors-codeBlockBackground:#32275F;--theme-ui-colors-failedConnectText:#86848D;--theme-ui-colors-changesWarning-background:#FFECC7;--theme-ui-colors-changesWarning-color:#5C0C17;--theme-ui-colors-greyIcon:#6F6E77;--theme-ui-colors-greyIconDisabled:#C9D0D8;--theme-ui-colors-missingScreenshotBanner-color:#5C0C17;--theme-ui-colors-missingScreenshotBanner-bg:#FFECC7;--theme-ui-colors-badge-new-bg:#DBEDDB;--theme-ui-colors-badge-new-color:#05644D;--theme-ui-colors-badge-modified-bg:#FFECC7;--theme-ui-colors-badge-modified-color:#5C0C17;--theme-ui-colors-badge-synced-bg:purple12;--theme-ui-colors-badge-synced-color:#5842C3;--theme-ui-colors-badge-deleted-bg:rgba(203, 36, 49, 0.1);--theme-ui-colors-badge-unknown-bg:#F3F5F7;--theme-ui-colors-badge-unknown-color:#9AA4AF;--theme-ui-colors-codeBlockBorder:#545454;--theme-ui-colors-secondary:#F9FAFB;--theme-ui-colors-danger:#CB2431;--theme-ui-colors-highlight:hsl(10, 40%, 90%);--theme-ui-colors-purple:#5B3DF5;--theme-ui-colors-purple08:#5842C3;--theme-ui-colors-muted:#F9F9FB;--theme-ui-colors-icons:#8091A5;--theme-ui-colors-gray:#F8F9FA;--theme-ui-colors-grey01:#F3F5F7;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-grey03:#F4F2F4;--theme-ui-colors-grey04:#9AA4AF;--theme-ui-colors-grey05:#667587;--theme-ui-colors-grey07:#F9F8F9;--theme-ui-colors-grey10:#86848D;--theme-ui-colors-grey12:#1A1523;--theme-ui-colors-greyTransparent:rgba(37, 37, 45, 0.4);--theme-ui-colors-borders:#E4E2E4;--theme-ui-colors-bordersFocused:#6E56CF;--theme-ui-colors-deep:#0E2150;--theme-ui-colors-deep1:#A0ADE7;--theme-ui-colors-lightGreen:#EBF8F1;--theme-ui-colors-lightOrange:#FDF4EC;--theme-ui-colors-darkOrange:#C17C10;--theme-ui-colors-error:#E55737;--theme-ui-colors-success:#3AB97A;--theme-ui-colors-headSection:#fff;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-warning02:#ED811C;--theme-ui-colors-sidebar:#F1F1F4;--theme-ui-colors-link:#6E56CF;--theme-ui-colors-choggleBox:#5163BA;--theme-ui-colors-darkBorder:#DCDBDD;--theme-ui-colors-code-border:#DFE1E5;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;}html.theme-ui-dark,.theme-ui-dark html{--theme-ui-colors-text:#fff;--theme-ui-colors-textClear:#6E707B;--theme-ui-colors-hoverBackground:#202020;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-background:#202022;--theme-ui-colors-backgroundClear:#28282C;--theme-ui-colors-primary:#4E54D7;--theme-ui-colors-secondary:#28282C;--theme-ui-colors-icons:#5D5D71;--theme-ui-colors-gray:#1D1D1F;--theme-ui-colors-borders:#3A3A46;--theme-ui-colors-deep:#28282C;--theme-ui-colors-headSection:#28282C;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-sidebar:#28282C;--theme-ui-colors-code-border:#5D5D6F;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;--theme-ui-colors-link:#A9A9C6;--theme-ui-colors-choggleBox:#fff;}</style><style data-emotion="css-global h19pgh">*{box-sizing:border-box;}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;line-height:1.5;font-weight:400;}body{margin:0;}</style><style data-emotion="css yvak7d">.css-yvak7d{box-sizing:border-box;margin:0;min-width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:calc(100vh - 57px);width:100vw;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}</style><div class="css-yvak7d"><style data-emotion="css uqm8ih">.css-uqm8ih{box-sizing:border-box;margin:0;min-width:0;color:var(--theme-ui-colors-primary);overflow:visible;}</style><svg stroke-width="4" viewBox="0 0 32 32" width="48" height="48" fill="none" stroke="currentColor" role="img" id="spinner" class="css-uqm8ih"><title>Loading</title><circle stroke-width="4" r="12" cx="16" cy="16" fill="none" opacity="0.125"></circle><circle stroke-width="4" r="12" cx="16" cy="16" fill="none" stroke-dasharray="20 110"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 16 16" to="360 16 16" dur="750ms" repeatCount="indefinite"></animateTransform></circle></svg></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"aWd6brnoafNP_fcVfTvaj","runtimeConfig":{"sentryEnvironment":"alpha"},"nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Slice Machine</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/fe2a2a1cbf3b4092.css" as="style"/><link rel="stylesheet" href="/_next/static/css/fe2a2a1cbf3b4092.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-2f903acb0cccbf9e.js" defer=""></script><script src="/_next/static/chunks/framework-cdccea7a52cc6e81.js" defer=""></script><script src="/_next/static/chunks/main-5e6780279ca21cb9.js" defer=""></script><script src="/_next/static/chunks/pages/_app-62bb0daedfad0679.js" defer=""></script><script src="/_next/static/chunks/pages/_error-69b4f498bafdd188.js" defer=""></script><script src="/_next/static/W5H36cBabsItHQduZS-Az/_buildManifest.js" defer=""></script><script src="/_next/static/W5H36cBabsItHQduZS-Az/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style data-emotion="css-global 413pep">html{--theme-ui-colors-text:#25252D;--theme-ui-colors-textClear:#6F6E77;--theme-ui-colors-grayLight:#E8E8ED;--theme-ui-colors-hoverBackground:#f2f2f2;--theme-ui-colors-background:#FFF;--theme-ui-colors-backgroundClear:#FFF;--theme-ui-colors-primary:#5D40F7;--theme-ui-colors-purpleLight:#F6F1FC;--theme-ui-colors-purpleLight01:#6548FF1A;--theme-ui-colors-purple12:#F1EEFE;--theme-ui-colors-purpleStrong:#5842C3;--theme-ui-colors-whiteButtonText:#1A1523;--theme-ui-colors-codeBlockBackground:#32275F;--theme-ui-colors-failedConnectText:#86848D;--theme-ui-colors-changesWarning-background:#FFECC7;--theme-ui-colors-changesWarning-color:#5C0C17;--theme-ui-colors-greyIcon:#6F6E77;--theme-ui-colors-greyIconDisabled:#C9D0D8;--theme-ui-colors-missingScreenshotBanner-color:#5C0C17;--theme-ui-colors-missingScreenshotBanner-bg:#FFECC7;--theme-ui-colors-badge-new-bg:#DBEDDB;--theme-ui-colors-badge-new-color:#05644D;--theme-ui-colors-badge-modified-bg:#FFECC7;--theme-ui-colors-badge-modified-color:#5C0C17;--theme-ui-colors-badge-synced-bg:purple12;--theme-ui-colors-badge-synced-color:#5842C3;--theme-ui-colors-badge-deleted-bg:rgba(203, 36, 49, 0.1);--theme-ui-colors-badge-unknown-bg:#F3F5F7;--theme-ui-colors-badge-unknown-color:#9AA4AF;--theme-ui-colors-codeBlockBorder:#545454;--theme-ui-colors-secondary:#F9FAFB;--theme-ui-colors-danger:#CB2431;--theme-ui-colors-highlight:hsl(10, 40%, 90%);--theme-ui-colors-purple:#5B3DF5;--theme-ui-colors-purple08:#5842C3;--theme-ui-colors-muted:#F9F9FB;--theme-ui-colors-icons:#8091A5;--theme-ui-colors-gray:#F8F9FA;--theme-ui-colors-grey01:#F3F5F7;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-grey03:#F4F2F4;--theme-ui-colors-grey04:#9AA4AF;--theme-ui-colors-grey05:#667587;--theme-ui-colors-grey07:#F9F8F9;--theme-ui-colors-grey10:#86848D;--theme-ui-colors-grey12:#1A1523;--theme-ui-colors-greyTransparent:rgba(37, 37, 45, 0.4);--theme-ui-colors-borders:#E4E2E4;--theme-ui-colors-bordersFocused:#6E56CF;--theme-ui-colors-deep:#0E2150;--theme-ui-colors-deep1:#A0ADE7;--theme-ui-colors-lightGreen:#EBF8F1;--theme-ui-colors-lightOrange:#FDF4EC;--theme-ui-colors-darkOrange:#C17C10;--theme-ui-colors-error:#E55737;--theme-ui-colors-success:#3AB97A;--theme-ui-colors-headSection:#fff;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-warning02:#ED811C;--theme-ui-colors-sidebar:#F1F1F4;--theme-ui-colors-link:#6E56CF;--theme-ui-colors-choggleBox:#5163BA;--theme-ui-colors-darkBorder:#DCDBDD;--theme-ui-colors-code-border:#DFE1E5;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);}html.theme-ui-light,.theme-ui-light html{--theme-ui-colors-text:#25252D;--theme-ui-colors-textClear:#6F6E77;--theme-ui-colors-grayLight:#E8E8ED;--theme-ui-colors-hoverBackground:#f2f2f2;--theme-ui-colors-background:#FFF;--theme-ui-colors-backgroundClear:#FFF;--theme-ui-colors-primary:#5D40F7;--theme-ui-colors-purpleLight:#F6F1FC;--theme-ui-colors-purpleLight01:#6548FF1A;--theme-ui-colors-purple12:#F1EEFE;--theme-ui-colors-purpleStrong:#5842C3;--theme-ui-colors-whiteButtonText:#1A1523;--theme-ui-colors-codeBlockBackground:#32275F;--theme-ui-colors-failedConnectText:#86848D;--theme-ui-colors-changesWarning-background:#FFECC7;--theme-ui-colors-changesWarning-color:#5C0C17;--theme-ui-colors-greyIcon:#6F6E77;--theme-ui-colors-greyIconDisabled:#C9D0D8;--theme-ui-colors-missingScreenshotBanner-color:#5C0C17;--theme-ui-colors-missingScreenshotBanner-bg:#FFECC7;--theme-ui-colors-badge-new-bg:#DBEDDB;--theme-ui-colors-badge-new-color:#05644D;--theme-ui-colors-badge-modified-bg:#FFECC7;--theme-ui-colors-badge-modified-color:#5C0C17;--theme-ui-colors-badge-synced-bg:purple12;--theme-ui-colors-badge-synced-color:#5842C3;--theme-ui-colors-badge-deleted-bg:rgba(203, 36, 49, 0.1);--theme-ui-colors-badge-unknown-bg:#F3F5F7;--theme-ui-colors-badge-unknown-color:#9AA4AF;--theme-ui-colors-codeBlockBorder:#545454;--theme-ui-colors-secondary:#F9FAFB;--theme-ui-colors-danger:#CB2431;--theme-ui-colors-highlight:hsl(10, 40%, 90%);--theme-ui-colors-purple:#5B3DF5;--theme-ui-colors-purple08:#5842C3;--theme-ui-colors-muted:#F9F9FB;--theme-ui-colors-icons:#8091A5;--theme-ui-colors-gray:#F8F9FA;--theme-ui-colors-grey01:#F3F5F7;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-grey03:#F4F2F4;--theme-ui-colors-grey04:#9AA4AF;--theme-ui-colors-grey05:#667587;--theme-ui-colors-grey07:#F9F8F9;--theme-ui-colors-grey10:#86848D;--theme-ui-colors-grey12:#1A1523;--theme-ui-colors-greyTransparent:rgba(37, 37, 45, 0.4);--theme-ui-colors-borders:#E4E2E4;--theme-ui-colors-bordersFocused:#6E56CF;--theme-ui-colors-deep:#0E2150;--theme-ui-colors-deep1:#A0ADE7;--theme-ui-colors-lightGreen:#EBF8F1;--theme-ui-colors-lightOrange:#FDF4EC;--theme-ui-colors-darkOrange:#C17C10;--theme-ui-colors-error:#E55737;--theme-ui-colors-success:#3AB97A;--theme-ui-colors-headSection:#fff;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-warning02:#ED811C;--theme-ui-colors-sidebar:#F1F1F4;--theme-ui-colors-link:#6E56CF;--theme-ui-colors-choggleBox:#5163BA;--theme-ui-colors-darkBorder:#DCDBDD;--theme-ui-colors-code-border:#DFE1E5;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;}html.theme-ui-dark,.theme-ui-dark html{--theme-ui-colors-text:#fff;--theme-ui-colors-textClear:#6E707B;--theme-ui-colors-hoverBackground:#202020;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-background:#202022;--theme-ui-colors-backgroundClear:#28282C;--theme-ui-colors-primary:#4E54D7;--theme-ui-colors-secondary:#28282C;--theme-ui-colors-icons:#5D5D71;--theme-ui-colors-gray:#1D1D1F;--theme-ui-colors-borders:#3A3A46;--theme-ui-colors-deep:#28282C;--theme-ui-colors-headSection:#28282C;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-sidebar:#28282C;--theme-ui-colors-code-border:#5D5D6F;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;--theme-ui-colors-link:#A9A9C6;--theme-ui-colors-choggleBox:#fff;}</style><style data-emotion="css-global h19pgh">*{box-sizing:border-box;}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;line-height:1.5;font-weight:400;}body{margin:0;}</style><style data-emotion="css yvak7d">.css-yvak7d{box-sizing:border-box;margin:0;min-width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:calc(100vh - 57px);width:100vw;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}</style><div class="css-yvak7d"><style data-emotion="css uqm8ih">.css-uqm8ih{box-sizing:border-box;margin:0;min-width:0;color:var(--theme-ui-colors-primary);overflow:visible;}</style><svg stroke-width="4" viewBox="0 0 32 32" width="48" height="48" fill="none" stroke="currentColor" role="img" id="spinner" class="css-uqm8ih"><title>Loading</title><circle stroke-width="4" r="12" cx="16" cy="16" fill="none" opacity="0.125"></circle><circle stroke-width="4" r="12" cx="16" cy="16" fill="none" stroke-dasharray="20 110"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 16 16" to="360 16 16" dur="750ms" repeatCount="indefinite"></animateTransform></circle></svg></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"W5H36cBabsItHQduZS-Az","runtimeConfig":{"sentryEnvironment":"alpha"},"nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Slice Machine</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/fe2a2a1cbf3b4092.css" as="style"/><link rel="stylesheet" href="/_next/static/css/fe2a2a1cbf3b4092.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-2f903acb0cccbf9e.js" defer=""></script><script src="/_next/static/chunks/framework-cdccea7a52cc6e81.js" defer=""></script><script src="/_next/static/chunks/main-5e6780279ca21cb9.js" defer=""></script><script src="/_next/static/chunks/pages/_app-98311155cf2a39cc.js" defer=""></script><script src="/_next/static/chunks/746-1d8d106d76d9a63e.js" defer=""></script><script src="/_next/static/chunks/pages/%5Blib%5D/%5BsliceName%5D/%5Bvariation%5D/screenshot-2750adc7cdad5005.js" defer=""></script><script src="/_next/static/aWd6brnoafNP_fcVfTvaj/_buildManifest.js" defer=""></script><script src="/_next/static/aWd6brnoafNP_fcVfTvaj/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style data-emotion="css-global 413pep">html{--theme-ui-colors-text:#25252D;--theme-ui-colors-textClear:#6F6E77;--theme-ui-colors-grayLight:#E8E8ED;--theme-ui-colors-hoverBackground:#f2f2f2;--theme-ui-colors-background:#FFF;--theme-ui-colors-backgroundClear:#FFF;--theme-ui-colors-primary:#5D40F7;--theme-ui-colors-purpleLight:#F6F1FC;--theme-ui-colors-purpleLight01:#6548FF1A;--theme-ui-colors-purple12:#F1EEFE;--theme-ui-colors-purpleStrong:#5842C3;--theme-ui-colors-whiteButtonText:#1A1523;--theme-ui-colors-codeBlockBackground:#32275F;--theme-ui-colors-failedConnectText:#86848D;--theme-ui-colors-changesWarning-background:#FFECC7;--theme-ui-colors-changesWarning-color:#5C0C17;--theme-ui-colors-greyIcon:#6F6E77;--theme-ui-colors-greyIconDisabled:#C9D0D8;--theme-ui-colors-missingScreenshotBanner-color:#5C0C17;--theme-ui-colors-missingScreenshotBanner-bg:#FFECC7;--theme-ui-colors-badge-new-bg:#DBEDDB;--theme-ui-colors-badge-new-color:#05644D;--theme-ui-colors-badge-modified-bg:#FFECC7;--theme-ui-colors-badge-modified-color:#5C0C17;--theme-ui-colors-badge-synced-bg:purple12;--theme-ui-colors-badge-synced-color:#5842C3;--theme-ui-colors-badge-deleted-bg:rgba(203, 36, 49, 0.1);--theme-ui-colors-badge-unknown-bg:#F3F5F7;--theme-ui-colors-badge-unknown-color:#9AA4AF;--theme-ui-colors-codeBlockBorder:#545454;--theme-ui-colors-secondary:#F9FAFB;--theme-ui-colors-danger:#CB2431;--theme-ui-colors-highlight:hsl(10, 40%, 90%);--theme-ui-colors-purple:#5B3DF5;--theme-ui-colors-purple08:#5842C3;--theme-ui-colors-muted:#F9F9FB;--theme-ui-colors-icons:#8091A5;--theme-ui-colors-gray:#F8F9FA;--theme-ui-colors-grey01:#F3F5F7;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-grey03:#F4F2F4;--theme-ui-colors-grey04:#9AA4AF;--theme-ui-colors-grey05:#667587;--theme-ui-colors-grey07:#F9F8F9;--theme-ui-colors-grey10:#86848D;--theme-ui-colors-grey12:#1A1523;--theme-ui-colors-greyTransparent:rgba(37, 37, 45, 0.4);--theme-ui-colors-borders:#E4E2E4;--theme-ui-colors-bordersFocused:#6E56CF;--theme-ui-colors-deep:#0E2150;--theme-ui-colors-deep1:#A0ADE7;--theme-ui-colors-lightGreen:#EBF8F1;--theme-ui-colors-lightOrange:#FDF4EC;--theme-ui-colors-darkOrange:#C17C10;--theme-ui-colors-error:#E55737;--theme-ui-colors-success:#3AB97A;--theme-ui-colors-headSection:#fff;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-warning02:#ED811C;--theme-ui-colors-sidebar:#F1F1F4;--theme-ui-colors-link:#6E56CF;--theme-ui-colors-choggleBox:#5163BA;--theme-ui-colors-darkBorder:#DCDBDD;--theme-ui-colors-code-border:#DFE1E5;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);}html.theme-ui-light,.theme-ui-light html{--theme-ui-colors-text:#25252D;--theme-ui-colors-textClear:#6F6E77;--theme-ui-colors-grayLight:#E8E8ED;--theme-ui-colors-hoverBackground:#f2f2f2;--theme-ui-colors-background:#FFF;--theme-ui-colors-backgroundClear:#FFF;--theme-ui-colors-primary:#5D40F7;--theme-ui-colors-purpleLight:#F6F1FC;--theme-ui-colors-purpleLight01:#6548FF1A;--theme-ui-colors-purple12:#F1EEFE;--theme-ui-colors-purpleStrong:#5842C3;--theme-ui-colors-whiteButtonText:#1A1523;--theme-ui-colors-codeBlockBackground:#32275F;--theme-ui-colors-failedConnectText:#86848D;--theme-ui-colors-changesWarning-background:#FFECC7;--theme-ui-colors-changesWarning-color:#5C0C17;--theme-ui-colors-greyIcon:#6F6E77;--theme-ui-colors-greyIconDisabled:#C9D0D8;--theme-ui-colors-missingScreenshotBanner-color:#5C0C17;--theme-ui-colors-missingScreenshotBanner-bg:#FFECC7;--theme-ui-colors-badge-new-bg:#DBEDDB;--theme-ui-colors-badge-new-color:#05644D;--theme-ui-colors-badge-modified-bg:#FFECC7;--theme-ui-colors-badge-modified-color:#5C0C17;--theme-ui-colors-badge-synced-bg:purple12;--theme-ui-colors-badge-synced-color:#5842C3;--theme-ui-colors-badge-deleted-bg:rgba(203, 36, 49, 0.1);--theme-ui-colors-badge-unknown-bg:#F3F5F7;--theme-ui-colors-badge-unknown-color:#9AA4AF;--theme-ui-colors-codeBlockBorder:#545454;--theme-ui-colors-secondary:#F9FAFB;--theme-ui-colors-danger:#CB2431;--theme-ui-colors-highlight:hsl(10, 40%, 90%);--theme-ui-colors-purple:#5B3DF5;--theme-ui-colors-purple08:#5842C3;--theme-ui-colors-muted:#F9F9FB;--theme-ui-colors-icons:#8091A5;--theme-ui-colors-gray:#F8F9FA;--theme-ui-colors-grey01:#F3F5F7;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-grey03:#F4F2F4;--theme-ui-colors-grey04:#9AA4AF;--theme-ui-colors-grey05:#667587;--theme-ui-colors-grey07:#F9F8F9;--theme-ui-colors-grey10:#86848D;--theme-ui-colors-grey12:#1A1523;--theme-ui-colors-greyTransparent:rgba(37, 37, 45, 0.4);--theme-ui-colors-borders:#E4E2E4;--theme-ui-colors-bordersFocused:#6E56CF;--theme-ui-colors-deep:#0E2150;--theme-ui-colors-deep1:#A0ADE7;--theme-ui-colors-lightGreen:#EBF8F1;--theme-ui-colors-lightOrange:#FDF4EC;--theme-ui-colors-darkOrange:#C17C10;--theme-ui-colors-error:#E55737;--theme-ui-colors-success:#3AB97A;--theme-ui-colors-headSection:#fff;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-warning02:#ED811C;--theme-ui-colors-sidebar:#F1F1F4;--theme-ui-colors-link:#6E56CF;--theme-ui-colors-choggleBox:#5163BA;--theme-ui-colors-darkBorder:#DCDBDD;--theme-ui-colors-code-border:#DFE1E5;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;}html.theme-ui-dark,.theme-ui-dark html{--theme-ui-colors-text:#fff;--theme-ui-colors-textClear:#6E707B;--theme-ui-colors-hoverBackground:#202020;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-background:#202022;--theme-ui-colors-backgroundClear:#28282C;--theme-ui-colors-primary:#4E54D7;--theme-ui-colors-secondary:#28282C;--theme-ui-colors-icons:#5D5D71;--theme-ui-colors-gray:#1D1D1F;--theme-ui-colors-borders:#3A3A46;--theme-ui-colors-deep:#28282C;--theme-ui-colors-headSection:#28282C;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-sidebar:#28282C;--theme-ui-colors-code-border:#5D5D6F;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;--theme-ui-colors-link:#A9A9C6;--theme-ui-colors-choggleBox:#fff;}</style><style data-emotion="css-global h19pgh">*{box-sizing:border-box;}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;line-height:1.5;font-weight:400;}body{margin:0;}</style><style data-emotion="css yvak7d">.css-yvak7d{box-sizing:border-box;margin:0;min-width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:calc(100vh - 57px);width:100vw;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}</style><div class="css-yvak7d"><style data-emotion="css uqm8ih">.css-uqm8ih{box-sizing:border-box;margin:0;min-width:0;color:var(--theme-ui-colors-primary);overflow:visible;}</style><svg stroke-width="4" viewBox="0 0 32 32" width="48" height="48" fill="none" stroke="currentColor" role="img" id="spinner" class="css-uqm8ih"><title>Loading</title><circle stroke-width="4" r="12" cx="16" cy="16" fill="none" opacity="0.125"></circle><circle stroke-width="4" r="12" cx="16" cy="16" fill="none" stroke-dasharray="20 110"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 16 16" to="360 16 16" dur="750ms" repeatCount="indefinite"></animateTransform></circle></svg></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/[lib]/[sliceName]/[variation]/screenshot","query":{},"buildId":"aWd6brnoafNP_fcVfTvaj","runtimeConfig":{"sentryEnvironment":"alpha"},"nextExport":true,"isFallback":false,"appGip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Slice Machine</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/fe2a2a1cbf3b4092.css" as="style"/><link rel="stylesheet" href="/_next/static/css/fe2a2a1cbf3b4092.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-2f903acb0cccbf9e.js" defer=""></script><script src="/_next/static/chunks/framework-cdccea7a52cc6e81.js" defer=""></script><script src="/_next/static/chunks/main-5e6780279ca21cb9.js" defer=""></script><script src="/_next/static/chunks/pages/_app-62bb0daedfad0679.js" defer=""></script><script src="/_next/static/chunks/746-1d8d106d76d9a63e.js" defer=""></script><script src="/_next/static/chunks/pages/%5Blib%5D/%5BsliceName%5D/%5Bvariation%5D/screenshot-2750adc7cdad5005.js" defer=""></script><script src="/_next/static/W5H36cBabsItHQduZS-Az/_buildManifest.js" defer=""></script><script src="/_next/static/W5H36cBabsItHQduZS-Az/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style data-emotion="css-global 413pep">html{--theme-ui-colors-text:#25252D;--theme-ui-colors-textClear:#6F6E77;--theme-ui-colors-grayLight:#E8E8ED;--theme-ui-colors-hoverBackground:#f2f2f2;--theme-ui-colors-background:#FFF;--theme-ui-colors-backgroundClear:#FFF;--theme-ui-colors-primary:#5D40F7;--theme-ui-colors-purpleLight:#F6F1FC;--theme-ui-colors-purpleLight01:#6548FF1A;--theme-ui-colors-purple12:#F1EEFE;--theme-ui-colors-purpleStrong:#5842C3;--theme-ui-colors-whiteButtonText:#1A1523;--theme-ui-colors-codeBlockBackground:#32275F;--theme-ui-colors-failedConnectText:#86848D;--theme-ui-colors-changesWarning-background:#FFECC7;--theme-ui-colors-changesWarning-color:#5C0C17;--theme-ui-colors-greyIcon:#6F6E77;--theme-ui-colors-greyIconDisabled:#C9D0D8;--theme-ui-colors-missingScreenshotBanner-color:#5C0C17;--theme-ui-colors-missingScreenshotBanner-bg:#FFECC7;--theme-ui-colors-badge-new-bg:#DBEDDB;--theme-ui-colors-badge-new-color:#05644D;--theme-ui-colors-badge-modified-bg:#FFECC7;--theme-ui-colors-badge-modified-color:#5C0C17;--theme-ui-colors-badge-synced-bg:purple12;--theme-ui-colors-badge-synced-color:#5842C3;--theme-ui-colors-badge-deleted-bg:rgba(203, 36, 49, 0.1);--theme-ui-colors-badge-unknown-bg:#F3F5F7;--theme-ui-colors-badge-unknown-color:#9AA4AF;--theme-ui-colors-codeBlockBorder:#545454;--theme-ui-colors-secondary:#F9FAFB;--theme-ui-colors-danger:#CB2431;--theme-ui-colors-highlight:hsl(10, 40%, 90%);--theme-ui-colors-purple:#5B3DF5;--theme-ui-colors-purple08:#5842C3;--theme-ui-colors-muted:#F9F9FB;--theme-ui-colors-icons:#8091A5;--theme-ui-colors-gray:#F8F9FA;--theme-ui-colors-grey01:#F3F5F7;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-grey03:#F4F2F4;--theme-ui-colors-grey04:#9AA4AF;--theme-ui-colors-grey05:#667587;--theme-ui-colors-grey07:#F9F8F9;--theme-ui-colors-grey10:#86848D;--theme-ui-colors-grey12:#1A1523;--theme-ui-colors-greyTransparent:rgba(37, 37, 45, 0.4);--theme-ui-colors-borders:#E4E2E4;--theme-ui-colors-bordersFocused:#6E56CF;--theme-ui-colors-deep:#0E2150;--theme-ui-colors-deep1:#A0ADE7;--theme-ui-colors-lightGreen:#EBF8F1;--theme-ui-colors-lightOrange:#FDF4EC;--theme-ui-colors-darkOrange:#C17C10;--theme-ui-colors-error:#E55737;--theme-ui-colors-success:#3AB97A;--theme-ui-colors-headSection:#fff;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-warning02:#ED811C;--theme-ui-colors-sidebar:#F1F1F4;--theme-ui-colors-link:#6E56CF;--theme-ui-colors-choggleBox:#5163BA;--theme-ui-colors-darkBorder:#DCDBDD;--theme-ui-colors-code-border:#DFE1E5;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;color:var(--theme-ui-colors-text);background-color:var(--theme-ui-colors-background);}html.theme-ui-light,.theme-ui-light html{--theme-ui-colors-text:#25252D;--theme-ui-colors-textClear:#6F6E77;--theme-ui-colors-grayLight:#E8E8ED;--theme-ui-colors-hoverBackground:#f2f2f2;--theme-ui-colors-background:#FFF;--theme-ui-colors-backgroundClear:#FFF;--theme-ui-colors-primary:#5D40F7;--theme-ui-colors-purpleLight:#F6F1FC;--theme-ui-colors-purpleLight01:#6548FF1A;--theme-ui-colors-purple12:#F1EEFE;--theme-ui-colors-purpleStrong:#5842C3;--theme-ui-colors-whiteButtonText:#1A1523;--theme-ui-colors-codeBlockBackground:#32275F;--theme-ui-colors-failedConnectText:#86848D;--theme-ui-colors-changesWarning-background:#FFECC7;--theme-ui-colors-changesWarning-color:#5C0C17;--theme-ui-colors-greyIcon:#6F6E77;--theme-ui-colors-greyIconDisabled:#C9D0D8;--theme-ui-colors-missingScreenshotBanner-color:#5C0C17;--theme-ui-colors-missingScreenshotBanner-bg:#FFECC7;--theme-ui-colors-badge-new-bg:#DBEDDB;--theme-ui-colors-badge-new-color:#05644D;--theme-ui-colors-badge-modified-bg:#FFECC7;--theme-ui-colors-badge-modified-color:#5C0C17;--theme-ui-colors-badge-synced-bg:purple12;--theme-ui-colors-badge-synced-color:#5842C3;--theme-ui-colors-badge-deleted-bg:rgba(203, 36, 49, 0.1);--theme-ui-colors-badge-unknown-bg:#F3F5F7;--theme-ui-colors-badge-unknown-color:#9AA4AF;--theme-ui-colors-codeBlockBorder:#545454;--theme-ui-colors-secondary:#F9FAFB;--theme-ui-colors-danger:#CB2431;--theme-ui-colors-highlight:hsl(10, 40%, 90%);--theme-ui-colors-purple:#5B3DF5;--theme-ui-colors-purple08:#5842C3;--theme-ui-colors-muted:#F9F9FB;--theme-ui-colors-icons:#8091A5;--theme-ui-colors-gray:#F8F9FA;--theme-ui-colors-grey01:#F3F5F7;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-grey03:#F4F2F4;--theme-ui-colors-grey04:#9AA4AF;--theme-ui-colors-grey05:#667587;--theme-ui-colors-grey07:#F9F8F9;--theme-ui-colors-grey10:#86848D;--theme-ui-colors-grey12:#1A1523;--theme-ui-colors-greyTransparent:rgba(37, 37, 45, 0.4);--theme-ui-colors-borders:#E4E2E4;--theme-ui-colors-bordersFocused:#6E56CF;--theme-ui-colors-deep:#0E2150;--theme-ui-colors-deep1:#A0ADE7;--theme-ui-colors-lightGreen:#EBF8F1;--theme-ui-colors-lightOrange:#FDF4EC;--theme-ui-colors-darkOrange:#C17C10;--theme-ui-colors-error:#E55737;--theme-ui-colors-success:#3AB97A;--theme-ui-colors-headSection:#fff;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-warning02:#ED811C;--theme-ui-colors-sidebar:#F1F1F4;--theme-ui-colors-link:#6E56CF;--theme-ui-colors-choggleBox:#5163BA;--theme-ui-colors-darkBorder:#DCDBDD;--theme-ui-colors-code-border:#DFE1E5;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;}html.theme-ui-dark,.theme-ui-dark html{--theme-ui-colors-text:#fff;--theme-ui-colors-textClear:#6E707B;--theme-ui-colors-hoverBackground:#202020;--theme-ui-colors-grey02:#E6E6EA;--theme-ui-colors-background:#202022;--theme-ui-colors-backgroundClear:#28282C;--theme-ui-colors-primary:#4E54D7;--theme-ui-colors-secondary:#28282C;--theme-ui-colors-icons:#5D5D71;--theme-ui-colors-gray:#1D1D1F;--theme-ui-colors-borders:#3A3A46;--theme-ui-colors-deep:#28282C;--theme-ui-colors-headSection:#28282C;--theme-ui-colors-warning:#E67E22;--theme-ui-colors-sidebar:#28282C;--theme-ui-colors-code-border:#5D5D6F;--theme-ui-colors-code-blue:#3B41BD;--theme-ui-colors-code-gray:#667587;--theme-ui-colors-code-orange:#EA6D46;--theme-ui-colors-code-green:#3AB97A;--theme-ui-colors-link:#A9A9C6;--theme-ui-colors-choggleBox:#fff;}</style><style data-emotion="css-global h19pgh">*{box-sizing:border-box;}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;line-height:1.5;font-weight:400;}body{margin:0;}</style><style data-emotion="css yvak7d">.css-yvak7d{box-sizing:border-box;margin:0;min-width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:calc(100vh - 57px);width:100vw;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}</style><div class="css-yvak7d"><style data-emotion="css uqm8ih">.css-uqm8ih{box-sizing:border-box;margin:0;min-width:0;color:var(--theme-ui-colors-primary);overflow:visible;}</style><svg stroke-width="4" viewBox="0 0 32 32" width="48" height="48" fill="none" stroke="currentColor" role="img" id="spinner" class="css-uqm8ih"><title>Loading</title><circle stroke-width="4" r="12" cx="16" cy="16" fill="none" opacity="0.125"></circle><circle stroke-width="4" r="12" cx="16" cy="16" fill="none" stroke-dasharray="20 110"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 16 16" to="360 16 16" dur="750ms" repeatCount="indefinite"></animateTransform></circle></svg></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/[lib]/[sliceName]/[variation]/screenshot","query":{},"buildId":"W5H36cBabsItHQduZS-Az","runtimeConfig":{"sentryEnvironment":"alpha"},"nextExport":true,"isFallback":false,"appGip":true,"scriptLoader":[]}</script></body></html>