slice-machine-ui 1.19.3-dev-rename-and-delete-variations.0 → 1.19.3-dev-next-release.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Simulator/index.tsx +4 -6
- package/lib/builders/SliceBuilder/Sidebar/{AddVariationModal.tsx → VariationModal.tsx} +3 -3
- package/lib/builders/SliceBuilder/Sidebar/index.tsx +37 -82
- package/lib/builders/SliceBuilder/index.tsx +27 -31
- package/out/404.html +1 -1
- package/out/_next/static/chunks/{585-f3dca093db4b3792.js → 125-f0e2eb84ee39757a.js} +1 -3
- package/out/_next/static/chunks/18539003-371d86ea83e7293b.js +97 -0
- package/out/_next/static/chunks/{125-e3857af2068bbedf.js → 474-2393e400314474be.js} +2 -2
- package/out/_next/static/chunks/482-39cef3a713901788.js +1 -0
- package/out/_next/static/chunks/{550-1dafbcec5d50b384.js → 550-e72c08c598051224.js} +1 -1
- package/out/_next/static/chunks/{80-c513d12da6156fb7.js → 80-821a0b5d4ad61185.js} +1 -1
- package/out/_next/static/chunks/840-884e41a48b92e5d3.js +1 -0
- package/out/_next/static/chunks/904-55ff54caf14254dc.js +1 -0
- package/out/_next/static/chunks/958-be627006594efb21.js +1 -0
- package/out/_next/static/chunks/pages/_app-152015a55bf443c9.js +439 -0
- package/out/_next/static/chunks/pages/{changelog-75b0bf58d1f3045d.js → changelog-fa36b9995c26e1d7.js} +1 -1
- package/out/_next/static/chunks/pages/{changes-9dcb1cdaa8b10560.js → changes-e388be4457a43c3a.js} +1 -1
- package/out/_next/static/chunks/pages/custom-types/{[customTypeId]-aa37e07c96c8f9b5.js → [customTypeId]-3a37eb3373bb8823.js} +1 -1
- package/out/_next/static/chunks/pages/{index-5266b7f0ca55025a.js → index-941b44c74dd339e4.js} +1 -1
- package/out/_next/static/chunks/pages/labs-ebce03a4e7a95a4e.js +1 -0
- package/out/_next/static/chunks/pages/page-types/{[pageTypeId]-d445f5cabeb460c0.js → [pageTypeId]-733f3890c0466a05.js} +1 -1
- package/out/_next/static/chunks/pages/slices/[lib]/[sliceName]/[variation]/{simulator-5e441f8b049cf91b.js → simulator-79a62d775e64898c.js} +1 -1
- package/out/_next/static/chunks/pages/slices/[lib]/[sliceName]/[variation]-2282320bb9091898.js +1 -0
- package/out/_next/static/chunks/pages/{slices-247c480530e98426.js → slices-22db04643850c1d8.js} +1 -1
- package/out/_next/static/css/{26b51745402a92af.css → 16b41648cd1de03b.css} +1 -1
- package/out/_next/static/css/{1fbd45881dcf43c4.css → 3e88bd24e38f18d0.css} +1 -1
- package/out/_next/static/css/412af4286eb0b283.css +1 -0
- package/out/_next/static/css/{f585032018f6024b.css → 51597cd1f01c4889.css} +1 -1
- package/out/_next/static/css/{e4f4acc81f000d9c.css → 6e4843007ff41825.css} +1 -1
- package/out/_next/static/css/{22d69420bda374a7.css → 867d8d7ab4a75762.css} +1 -1
- package/out/_next/static/xdIrFCP9it-7L81Mcll4H/_buildManifest.js +1 -0
- package/out/changelog.html +1 -1
- package/out/changes.html +1 -1
- package/out/custom-types/[customTypeId].html +1 -1
- package/out/custom-types.html +1 -1
- package/out/index.html +1 -1
- package/out/labs.html +1 -1
- package/out/page-types/[pageTypeId].html +1 -1
- package/out/slices/[lib]/[sliceName]/[variation]/simulator.html +1 -1
- package/out/slices/[lib]/[sliceName]/[variation].html +1 -1
- package/out/slices.html +1 -1
- package/package.json +7 -7
- package/src/apiClient.ts +4 -32
- package/src/components/ContentTabs/ContentTabs.css.ts +1 -1
- package/src/components/SideNav/SideNav.css.ts +11 -11
- package/src/features/labs/labsList/LabsListItem.tsx +1 -1
- package/src/features/slices/convertLegacySlice/ConvertLegacySliceAsNewSliceDialog.tsx +4 -3
- package/src/features/slices/sliceCards/SharedSliceCard.tsx +11 -16
- package/src/modules/environment/index.ts +2 -2
- package/src/modules/screenshots/sagas.ts +6 -3
- package/src/modules/selectedSlice/actions.ts +2 -7
- package/src/modules/selectedSlice/reducer.ts +1 -6
- package/src/modules/selectedSlice/sagas.ts +18 -10
- package/src/modules/slices/index.ts +1 -23
- package/src/modules/toaster/utils.tsx +12 -6
- package/src/modules/useSliceMachineActions.ts +3 -9
- package/test/src/modules/selectedSlice/sagas.test.ts +12 -14
- package/test/src/modules/toaster/utils.test.ts +34 -3
- package/components/DeleteVariationModal/index.tsx +0 -84
- package/components/Forms/RenameVariationModal/RenameVariationModal.css.ts +0 -7
- package/components/Forms/RenameVariationModal/RenameVariationModal.tsx +0 -118
- package/components/Forms/RenameVariationModal/index.ts +0 -1
- package/out/_next/static/RsTCACkh2zmwWfCbSFXPV/_buildManifest.js +0 -1
- package/out/_next/static/chunks/18539003-1bb05c8aa7db2bc2.js +0 -97
- package/out/_next/static/chunks/482-e6bbd1fcdcdf79ad.js +0 -1
- package/out/_next/static/chunks/840-c317c8ff8de0f202.js +0 -1
- package/out/_next/static/chunks/904-fffb060669223f24.js +0 -1
- package/out/_next/static/chunks/958-2d67a1095b8c1afc.js +0 -1
- package/out/_next/static/chunks/pages/_app-628af0af7eca309e.js +0 -428
- package/out/_next/static/chunks/pages/labs-2349c21fbac1bd23.js +0 -1
- package/out/_next/static/chunks/pages/slices/[lib]/[sliceName]/[variation]-5a4e1abab41b5a30.js +0 -1
- package/out/_next/static/css/66b3836ab88b0c5c.css +0 -1
- package/src/features/slices/sliceBuilder/actions/deleteVariation.ts +0 -86
- package/src/features/slices/sliceBuilder/actions/renameVariation.ts +0 -77
- /package/out/_next/static/{RsTCACkh2zmwWfCbSFXPV → xdIrFCP9it-7L81Mcll4H}/_ssgManifest.js +0 -0
|
@@ -291,17 +291,15 @@ const Simulator: ComponentWithSliceProps = ({ slice, variation }) => {
|
|
|
291
291
|
</>
|
|
292
292
|
)}
|
|
293
293
|
</BaseStyles>
|
|
294
|
-
{currentState === UiState.SUCCESS ? (
|
|
295
|
-
<
|
|
294
|
+
{currentState === UiState.SUCCESS && isDisplayEditor ? (
|
|
295
|
+
<Flex
|
|
296
296
|
className="editor"
|
|
297
297
|
sx={{
|
|
298
|
+
flexDirection: "column",
|
|
298
299
|
marginLeft: "16px",
|
|
299
300
|
maxWidth: "440px",
|
|
300
301
|
minWidth: "440px",
|
|
301
302
|
overflowY: "auto",
|
|
302
|
-
...(isDisplayEditor
|
|
303
|
-
? { display: "flex", flexDirection: "column" }
|
|
304
|
-
: { display: "none" }),
|
|
305
303
|
}}
|
|
306
304
|
>
|
|
307
305
|
{/*
|
|
@@ -335,7 +333,7 @@ const Simulator: ComponentWithSliceProps = ({ slice, variation }) => {
|
|
|
335
333
|
/>
|
|
336
334
|
</Suspense>
|
|
337
335
|
</ErrorBoundary>
|
|
338
|
-
</
|
|
336
|
+
</Flex>
|
|
339
337
|
) : null}
|
|
340
338
|
</Flex>
|
|
341
339
|
</Box>
|
|
@@ -15,7 +15,7 @@ const Error = ({ msg }: { msg?: string }) => (
|
|
|
15
15
|
{msg || "Error!"}
|
|
16
16
|
</Text>
|
|
17
17
|
);
|
|
18
|
-
const
|
|
18
|
+
const VariationModal: React.FunctionComponent<{
|
|
19
19
|
isOpen: boolean;
|
|
20
20
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
21
|
onClose: () => any;
|
|
@@ -51,7 +51,7 @@ const AddVariationModal: React.FunctionComponent<{
|
|
|
51
51
|
const originError = !(
|
|
52
52
|
origin.value.length && variations.find((v) => v.id === origin.value)
|
|
53
53
|
)
|
|
54
|
-
? { id: "
|
|
54
|
+
? { id: "Yuu must select an existing variation!" }
|
|
55
55
|
: null;
|
|
56
56
|
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
57
57
|
const invalidIdError = id &&
|
|
@@ -236,4 +236,4 @@ const AddVariationModal: React.FunctionComponent<{
|
|
|
236
236
|
);
|
|
237
237
|
};
|
|
238
238
|
|
|
239
|
-
export default
|
|
239
|
+
export default VariationModal;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { Box, Button } from "@prismicio/editor-ui";
|
|
2
2
|
import { useRouter } from "next/router";
|
|
3
|
-
import { type
|
|
3
|
+
import { type FC, useState } from "react";
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import type { SliceBuilderState } from "@builders/SliceBuilder";
|
|
7
|
-
import { DeleteVariationModal } from "@components/DeleteVariationModal";
|
|
8
|
-
import { RenameVariationModal } from "@components/Forms/RenameVariationModal";
|
|
5
|
+
import VariationModal from "@builders/SliceBuilder/Sidebar/VariationModal";
|
|
9
6
|
import ScreenshotChangesModal from "@components/ScreenshotChangesModal";
|
|
10
7
|
import type { ComponentUI } from "@lib/models/common/ComponentUI";
|
|
11
8
|
import type { VariationSM } from "@lib/models/common/Slice";
|
|
@@ -18,43 +15,27 @@ import useSliceMachineActions from "@src/modules/useSliceMachineActions";
|
|
|
18
15
|
type SidebarProps = {
|
|
19
16
|
slice: ComponentUI;
|
|
20
17
|
variation: VariationSM;
|
|
21
|
-
|
|
22
|
-
setSliceBuilderState: Dispatch<SetStateAction<SliceBuilderState>>;
|
|
18
|
+
updateSlice: (slice: ComponentUI) => void;
|
|
23
19
|
};
|
|
24
20
|
|
|
25
|
-
type DialogState =
|
|
26
|
-
| { type: "ADD_VARIATION" }
|
|
27
|
-
| { type: "RENAME_VARIATION"; variation: VariationSM }
|
|
28
|
-
| { type: "DELETE_VARIATION"; variation: VariationSM }
|
|
29
|
-
| undefined;
|
|
30
|
-
|
|
31
21
|
export const Sidebar: FC<SidebarProps> = (props) => {
|
|
32
|
-
const { slice, variation,
|
|
22
|
+
const { slice, variation, updateSlice } = props;
|
|
33
23
|
|
|
34
|
-
const
|
|
24
|
+
const router = useRouter();
|
|
35
25
|
|
|
36
26
|
const screenshotChangesModal = useScreenshotChangesModal();
|
|
37
27
|
const { sliceFilterFn, defaultVariationSelector } =
|
|
38
28
|
screenshotChangesModal.modalPayload;
|
|
39
29
|
|
|
40
|
-
const
|
|
41
|
-
const
|
|
30
|
+
const [showVariationModal, setShowVariationModal] = useState(false);
|
|
31
|
+
const { copyVariationSlice } = useSliceMachineActions();
|
|
42
32
|
|
|
43
33
|
return (
|
|
44
34
|
<>
|
|
45
35
|
<Box flexDirection="column" gap={16}>
|
|
46
36
|
{slice.model.variations.map((v) => (
|
|
47
37
|
<SharedSliceCard
|
|
48
|
-
action={{
|
|
49
|
-
type: "menu",
|
|
50
|
-
onRename: () => {
|
|
51
|
-
setDialog({ type: "RENAME_VARIATION", variation: v });
|
|
52
|
-
},
|
|
53
|
-
onRemove: () => {
|
|
54
|
-
setDialog({ type: "DELETE_VARIATION", variation: v });
|
|
55
|
-
},
|
|
56
|
-
removeDisabled: slice.model.variations.length <= 1,
|
|
57
|
-
}}
|
|
38
|
+
action={{ type: "menu" }}
|
|
58
39
|
key={v.id}
|
|
59
40
|
mode="navigation"
|
|
60
41
|
onUpdateScreenshot={() => {
|
|
@@ -75,7 +56,7 @@ export const Sidebar: FC<SidebarProps> = (props) => {
|
|
|
75
56
|
))}
|
|
76
57
|
<Button
|
|
77
58
|
onClick={() => {
|
|
78
|
-
|
|
59
|
+
setShowVariationModal(true);
|
|
79
60
|
}}
|
|
80
61
|
startIcon="add"
|
|
81
62
|
sx={{ bottom: 72, marginInline: 24, position: "sticky" }}
|
|
@@ -88,62 +69,36 @@ export const Sidebar: FC<SidebarProps> = (props) => {
|
|
|
88
69
|
slices={sliceFilterFn([slice])}
|
|
89
70
|
defaultVariationSelector={defaultVariationSelector}
|
|
90
71
|
/>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
sliceBuilderState={sliceBuilderState}
|
|
100
|
-
setSliceBuilderState={setSliceBuilderState}
|
|
101
|
-
/>
|
|
102
|
-
) : undefined}
|
|
103
|
-
{dialog?.type === "DELETE_VARIATION" ? (
|
|
104
|
-
<DeleteVariationModal
|
|
105
|
-
isOpen
|
|
106
|
-
onClose={() => {
|
|
107
|
-
setDialog(undefined);
|
|
108
|
-
}}
|
|
109
|
-
slice={slice}
|
|
110
|
-
variation={dialog.variation}
|
|
111
|
-
sliceBuilderState={sliceBuilderState}
|
|
112
|
-
setSliceBuilderState={setSliceBuilderState}
|
|
113
|
-
/>
|
|
114
|
-
) : undefined}
|
|
115
|
-
{dialog?.type === "ADD_VARIATION" ? (
|
|
116
|
-
<AddVariationModal
|
|
117
|
-
initialVariation={variation}
|
|
118
|
-
isOpen
|
|
119
|
-
onClose={() => {
|
|
120
|
-
setDialog(undefined);
|
|
121
|
-
}}
|
|
122
|
-
onSubmit={(id, name, copiedVariation) => {
|
|
123
|
-
copyVariationSlice(id, name, copiedVariation);
|
|
72
|
+
<VariationModal
|
|
73
|
+
initialVariation={variation}
|
|
74
|
+
isOpen={showVariationModal}
|
|
75
|
+
onClose={() => {
|
|
76
|
+
setShowVariationModal(false);
|
|
77
|
+
}}
|
|
78
|
+
onSubmit={(id, name, copiedVariation) => {
|
|
79
|
+
copyVariationSlice(id, name, copiedVariation);
|
|
124
80
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
81
|
+
// We have to immediately save the new variation to prevent an
|
|
82
|
+
// infinite loop related to screenshots handling.
|
|
83
|
+
const newVariation = Variation.copyValue(copiedVariation, id, name);
|
|
84
|
+
const newSlice = {
|
|
85
|
+
...slice,
|
|
86
|
+
model: {
|
|
87
|
+
...slice.model,
|
|
88
|
+
variations: [...slice.model.variations, newVariation],
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
updateSlice(newSlice);
|
|
136
92
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
) : undefined}
|
|
93
|
+
const url = SLICES_CONFIG.getBuilderPagePathname({
|
|
94
|
+
libraryName: newSlice.href,
|
|
95
|
+
sliceName: newSlice.model.name,
|
|
96
|
+
variationId: newVariation.id,
|
|
97
|
+
});
|
|
98
|
+
void router.replace(url);
|
|
99
|
+
}}
|
|
100
|
+
variations={slice.model.variations}
|
|
101
|
+
/>
|
|
147
102
|
</>
|
|
148
103
|
);
|
|
149
104
|
};
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
import { Box, Button } from "@prismicio/editor-ui";
|
|
2
|
-
import {
|
|
3
|
-
type Dispatch,
|
|
4
|
-
type FC,
|
|
5
|
-
type SetStateAction,
|
|
6
|
-
useEffect,
|
|
7
|
-
useState,
|
|
8
|
-
} from "react";
|
|
2
|
+
import React, { useState, useEffect } from "react";
|
|
9
3
|
|
|
10
|
-
import {
|
|
11
|
-
type ToastPayload,
|
|
12
|
-
handleRemoteResponse,
|
|
13
|
-
} from "@src/modules/toaster/utils";
|
|
4
|
+
import { handleRemoteResponse } from "@src/modules/toaster/utils";
|
|
14
5
|
|
|
15
6
|
import FieldZones from "./FieldZones";
|
|
16
7
|
import { Sidebar } from "./Sidebar";
|
|
@@ -36,7 +27,10 @@ import { selectIsSimulatorAvailableForFramework } from "@src/modules/environment
|
|
|
36
27
|
import { isSelectedSliceTouched } from "@src/modules/selectedSlice/selectors";
|
|
37
28
|
import { ComponentWithSliceProps } from "@src/layouts/WithSlice";
|
|
38
29
|
|
|
39
|
-
export type SliceBuilderState =
|
|
30
|
+
export type SliceBuilderState = {
|
|
31
|
+
loading: boolean;
|
|
32
|
+
done: boolean;
|
|
33
|
+
};
|
|
40
34
|
|
|
41
35
|
export const initialState: SliceBuilderState = {
|
|
42
36
|
loading: false,
|
|
@@ -44,60 +38,63 @@ export const initialState: SliceBuilderState = {
|
|
|
44
38
|
};
|
|
45
39
|
|
|
46
40
|
const SliceBuilder: ComponentWithSliceProps = ({ slice, variation }) => {
|
|
47
|
-
const { openToaster } = useSliceMachineActions();
|
|
41
|
+
const { openToaster, updateSlice } = useSliceMachineActions();
|
|
48
42
|
const isTouched = useSelector((store: SliceMachineStoreType) =>
|
|
49
43
|
isSelectedSliceTouched(store, slice.from, slice.model.id),
|
|
50
44
|
);
|
|
51
45
|
|
|
52
46
|
// We need to move this state to somewhere global to update the UI if any action from anywhere save or update to the filesystem I'd guess
|
|
53
|
-
const [
|
|
47
|
+
const [data, setData] = useState<SliceBuilderState>(initialState);
|
|
54
48
|
|
|
55
49
|
useEffect(() => {
|
|
56
50
|
if (isTouched) {
|
|
57
|
-
|
|
51
|
+
setData(initialState);
|
|
58
52
|
}
|
|
59
53
|
}, [isTouched]);
|
|
60
54
|
|
|
61
55
|
// activate/deactivate Success message
|
|
62
56
|
useEffect(() => {
|
|
63
|
-
if (
|
|
64
|
-
|
|
57
|
+
if (data.done) {
|
|
58
|
+
// @ts-expect-error TS(2345) FIXME: Argument of type '(content: string | React.ReactNo... Remove this comment to see the full error message
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
60
|
+
handleRemoteResponse(openToaster)(data);
|
|
65
61
|
}
|
|
66
62
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
67
|
-
}, [
|
|
63
|
+
}, [data]);
|
|
68
64
|
|
|
69
65
|
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
70
66
|
if (!variation) return <AppLayout />;
|
|
71
67
|
else
|
|
72
68
|
return (
|
|
73
69
|
<SliceBuilderForVariation
|
|
74
|
-
|
|
70
|
+
updateSlice={(slice) => {
|
|
71
|
+
updateSlice(slice, setData);
|
|
72
|
+
}}
|
|
75
73
|
slice={slice}
|
|
76
74
|
variation={variation}
|
|
77
75
|
isTouched={isTouched}
|
|
78
|
-
|
|
76
|
+
data={data}
|
|
79
77
|
/>
|
|
80
78
|
);
|
|
81
79
|
};
|
|
82
80
|
|
|
83
81
|
type SliceBuilderForVariationProps = {
|
|
84
|
-
|
|
82
|
+
updateSlice: (slice: ComponentUI) => void;
|
|
85
83
|
slice: ComponentUI;
|
|
86
84
|
variation: VariationSM;
|
|
87
85
|
isTouched: boolean;
|
|
88
|
-
|
|
86
|
+
data: SliceBuilderState;
|
|
89
87
|
};
|
|
90
|
-
const SliceBuilderForVariation: FC<SliceBuilderForVariationProps> = ({
|
|
91
|
-
|
|
88
|
+
const SliceBuilderForVariation: React.FC<SliceBuilderForVariationProps> = ({
|
|
89
|
+
updateSlice,
|
|
92
90
|
slice,
|
|
93
91
|
variation,
|
|
94
92
|
isTouched,
|
|
95
|
-
|
|
93
|
+
data,
|
|
96
94
|
}) => {
|
|
97
95
|
const isSimulatorAvailableForFramework = useSelector(
|
|
98
96
|
selectIsSimulatorAvailableForFramework,
|
|
99
97
|
);
|
|
100
|
-
const { updateSlice } = useSliceMachineActions();
|
|
101
98
|
|
|
102
99
|
return (
|
|
103
100
|
<AppLayout>
|
|
@@ -110,10 +107,10 @@ const SliceBuilderForVariation: FC<SliceBuilderForVariationProps> = ({
|
|
|
110
107
|
isTouched={!!isTouched}
|
|
111
108
|
/>
|
|
112
109
|
<Button
|
|
113
|
-
loading={
|
|
114
|
-
disabled={!isTouched ||
|
|
110
|
+
loading={data.loading}
|
|
111
|
+
disabled={!isTouched || data.loading}
|
|
115
112
|
onClick={() => {
|
|
116
|
-
updateSlice(slice
|
|
113
|
+
updateSlice(slice);
|
|
117
114
|
}}
|
|
118
115
|
data-cy="builder-save-button"
|
|
119
116
|
>
|
|
@@ -131,8 +128,7 @@ const SliceBuilderForVariation: FC<SliceBuilderForVariationProps> = ({
|
|
|
131
128
|
<Sidebar
|
|
132
129
|
slice={slice}
|
|
133
130
|
variation={variation}
|
|
134
|
-
|
|
135
|
-
setSliceBuilderState={setState}
|
|
131
|
+
updateSlice={updateSlice}
|
|
136
132
|
/>
|
|
137
133
|
<FieldZones variation={variation} />
|
|
138
134
|
</Box>
|
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/
|
|
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/412af4286eb0b283.css" as="style"/><link rel="stylesheet" href="/_next/static/css/412af4286eb0b283.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-152015a55bf443c9.js" defer=""></script><script src="/_next/static/chunks/pages/_error-69b4f498bafdd188.js" defer=""></script><script src="/_next/static/xdIrFCP9it-7L81Mcll4H/_buildManifest.js" defer=""></script><script src="/_next/static/xdIrFCP9it-7L81Mcll4H/_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":"xdIrFCP9it-7L81Mcll4H","runtimeConfig":{"sentryEnvironment":"alpha"},"nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
|