sanity-plugin-iframe-pane 5.0.21 → 5.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +505 -390
- package/dist/index.js.map +1 -1
- package/package.json +7 -8
package/dist/index.js
CHANGED
|
@@ -1,424 +1,539 @@
|
|
|
1
|
-
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
1
|
import { c } from "react/compiler-runtime";
|
|
3
2
|
import { WarningOutlineIcon } from "@sanity/icons/WarningOutline";
|
|
4
3
|
import { createPreviewSecret } from "@sanity/preview-url-secret/create-secret";
|
|
5
4
|
import { definePreviewUrl } from "@sanity/preview-url-secret/define-preview-url";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { useActiveWorkspace,
|
|
5
|
+
import { Box, Button, Card, Container, Flex, Spinner, Stack, Text, Tooltip, usePrefersReducedMotion, useToast } from "@sanity/ui";
|
|
6
|
+
import { AnimatePresence, MotionConfig, motion } from "motion/react";
|
|
7
|
+
import { Suspense, memo, useEffect, useRef, useState, useTransition } from "react";
|
|
8
|
+
import { useActiveWorkspace, useClient, useCurrentUser, usePerspective } from "sanity";
|
|
10
9
|
import { suspend } from "suspend-react";
|
|
11
10
|
import { CopyIcon } from "@sanity/icons/Copy";
|
|
12
11
|
import { LaunchIcon } from "@sanity/icons/Launch";
|
|
13
12
|
import { MobileDeviceIcon } from "@sanity/icons/MobileDevice";
|
|
14
13
|
import { RefreshIcon } from "@sanity/icons/Refresh";
|
|
15
14
|
import { getRedirectTo } from "@sanity/preview-url-secret/get-redirect-to";
|
|
15
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
16
16
|
function DisplayUrl(props) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
let $ = c(4), t0;
|
|
18
|
+
$[0] === props.url ? t0 = $[1] : (t0 = getRedirectTo(props.url), $[0] = props.url, $[1] = t0);
|
|
19
|
+
let url = t0, truncatedUrl = `${url.origin === location.origin ? "" : url.origin}${url.pathname}${url.search}`, t1;
|
|
20
|
+
return $[2] === truncatedUrl ? t1 = $[3] : (t1 = /* @__PURE__ */ jsx(Text, {
|
|
21
|
+
size: 0,
|
|
22
|
+
textOverflow: "ellipsis",
|
|
23
|
+
children: truncatedUrl
|
|
24
|
+
}), $[2] = truncatedUrl, $[3] = t1), t1;
|
|
23
25
|
}
|
|
24
26
|
const sizes = {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
desktop: {
|
|
28
|
+
width: "100%",
|
|
29
|
+
height: "100%"
|
|
30
|
+
},
|
|
31
|
+
mobile: {
|
|
32
|
+
width: 414,
|
|
33
|
+
height: 746
|
|
34
|
+
}
|
|
33
35
|
}, DEFAULT_SIZE = "desktop";
|
|
34
36
|
function Toolbar(props) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
37
|
+
let $ = c(60), { url, iframeSize, setIframeSize, reloading, showUrl, reloadButton, handleReload } = props, validUrl = url instanceof URL, input = useRef(null), { push: pushToast } = useToast(), [, copy] = useCopyToClipboard(), t0;
|
|
38
|
+
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {
|
|
39
|
+
position: "absolute",
|
|
40
|
+
pointerEvents: "none",
|
|
41
|
+
opacity: 0
|
|
42
|
+
}, $[0] = t0) : t0 = $[0];
|
|
43
|
+
let t1;
|
|
44
|
+
$[1] !== url || $[2] !== validUrl ? (t1 = validUrl ? url.toString() : "", $[1] = url, $[2] = validUrl, $[3] = t1) : t1 = $[3];
|
|
45
|
+
let t2;
|
|
46
|
+
$[4] === t1 ? t2 = $[5] : (t2 = /* @__PURE__ */ jsx("textarea", {
|
|
47
|
+
"aria-hidden": !0,
|
|
48
|
+
style: t0,
|
|
49
|
+
ref: input,
|
|
50
|
+
value: t1,
|
|
51
|
+
readOnly: !0,
|
|
52
|
+
tabIndex: -1
|
|
53
|
+
}), $[4] = t1, $[5] = t2);
|
|
54
|
+
let t3;
|
|
55
|
+
$[6] === Symbol.for("react.memo_cache_sentinel") ? (t3 = { whiteSpace: "nowrap" }, $[6] = t3) : t3 = $[6];
|
|
56
|
+
let t4 = iframeSize === "mobile" ? "Exit mobile preview" : "Preview mobile viewport", t5;
|
|
57
|
+
$[7] === t4 ? t5 = $[8] : (t5 = /* @__PURE__ */ jsx(Text, {
|
|
58
|
+
size: 1,
|
|
59
|
+
style: t3,
|
|
60
|
+
children: t4
|
|
61
|
+
}), $[7] = t4, $[8] = t5);
|
|
62
|
+
let t6 = !validUrl, t7;
|
|
63
|
+
$[9] === Symbol.for("react.memo_cache_sentinel") ? (t7 = [1], $[9] = t7) : t7 = $[9];
|
|
64
|
+
let t8 = iframeSize === "mobile" ? "default" : "ghost", t9;
|
|
65
|
+
$[10] !== iframeSize || $[11] !== setIframeSize ? (t9 = () => setIframeSize(iframeSize === "mobile" ? "desktop" : "mobile"), $[10] = iframeSize, $[11] = setIframeSize, $[12] = t9) : t9 = $[12];
|
|
66
|
+
let t10;
|
|
67
|
+
$[13] !== t6 || $[14] !== t8 || $[15] !== t9 ? (t10 = /* @__PURE__ */ jsx(Button, {
|
|
68
|
+
disabled: t6,
|
|
69
|
+
fontSize: t7,
|
|
70
|
+
padding: 2,
|
|
71
|
+
mode: t8,
|
|
72
|
+
icon: MobileDeviceIcon,
|
|
73
|
+
onClick: t9
|
|
74
|
+
}), $[13] = t6, $[14] = t8, $[15] = t9, $[16] = t10) : t10 = $[16];
|
|
75
|
+
let t11;
|
|
76
|
+
$[17] !== t10 || $[18] !== t5 ? (t11 = /* @__PURE__ */ jsx(Flex, {
|
|
77
|
+
align: "center",
|
|
78
|
+
gap: 1,
|
|
79
|
+
children: /* @__PURE__ */ jsx(Tooltip, {
|
|
80
|
+
animate: !0,
|
|
81
|
+
content: t5,
|
|
82
|
+
padding: 2,
|
|
83
|
+
placement: "bottom-start",
|
|
84
|
+
children: t10
|
|
85
|
+
})
|
|
86
|
+
}), $[17] = t10, $[18] = t5, $[19] = t11) : t11 = $[19];
|
|
87
|
+
let t12;
|
|
88
|
+
$[20] !== showUrl || $[21] !== url || $[22] !== validUrl ? (t12 = showUrl && validUrl && /* @__PURE__ */ jsx(DisplayUrl, { url }), $[20] = showUrl, $[21] = url, $[22] = validUrl, $[23] = t12) : t12 = $[23];
|
|
89
|
+
let t13;
|
|
90
|
+
$[24] === t12 ? t13 = $[25] : (t13 = /* @__PURE__ */ jsx(Box, {
|
|
91
|
+
flex: 1,
|
|
92
|
+
children: t12
|
|
93
|
+
}), $[24] = t12, $[25] = t13);
|
|
94
|
+
let t14;
|
|
95
|
+
$[26] !== handleReload || $[27] !== reloadButton || $[28] !== reloading || $[29] !== validUrl ? (t14 = reloadButton ? /* @__PURE__ */ jsx(Tooltip, {
|
|
96
|
+
animate: !0,
|
|
97
|
+
content: /* @__PURE__ */ jsx(Text, {
|
|
98
|
+
size: 1,
|
|
99
|
+
style: { whiteSpace: "nowrap" },
|
|
100
|
+
children: reloading ? "Reloading…" : "Reload"
|
|
101
|
+
}),
|
|
102
|
+
padding: 2,
|
|
103
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
104
|
+
disabled: !validUrl,
|
|
105
|
+
mode: "bleed",
|
|
106
|
+
fontSize: [1],
|
|
107
|
+
padding: 2,
|
|
108
|
+
icon: RefreshIcon,
|
|
109
|
+
loading: reloading,
|
|
110
|
+
"aria-label": "Reload",
|
|
111
|
+
onClick: () => handleReload()
|
|
112
|
+
})
|
|
113
|
+
}) : null, $[26] = handleReload, $[27] = reloadButton, $[28] = reloading, $[29] = validUrl, $[30] = t14) : t14 = $[30];
|
|
114
|
+
let t15;
|
|
115
|
+
$[31] === Symbol.for("react.memo_cache_sentinel") ? (t15 = /* @__PURE__ */ jsx(Text, {
|
|
116
|
+
size: 1,
|
|
117
|
+
style: { whiteSpace: "nowrap" },
|
|
118
|
+
children: "Copy URL"
|
|
119
|
+
}), $[31] = t15) : t15 = $[31];
|
|
120
|
+
let t16 = !validUrl, t17;
|
|
121
|
+
$[32] === Symbol.for("react.memo_cache_sentinel") ? (t17 = [1], $[32] = t17) : t17 = $[32];
|
|
122
|
+
let t18;
|
|
123
|
+
$[33] === Symbol.for("react.memo_cache_sentinel") ? (t18 = [2], $[33] = t18) : t18 = $[33];
|
|
124
|
+
let t19;
|
|
125
|
+
$[34] !== copy || $[35] !== pushToast ? (t19 = () => {
|
|
126
|
+
input?.current?.value && copy(input.current.value).then((copied) => (pushToast(copied ? {
|
|
127
|
+
closable: !0,
|
|
128
|
+
status: "success",
|
|
129
|
+
title: "The URL is copied to the clipboard"
|
|
130
|
+
} : {
|
|
131
|
+
closable: !0,
|
|
132
|
+
status: "error",
|
|
133
|
+
title: "Failed to copy the URL to the clipboard"
|
|
134
|
+
}), copied));
|
|
135
|
+
}, $[34] = copy, $[35] = pushToast, $[36] = t19) : t19 = $[36];
|
|
136
|
+
let t20;
|
|
137
|
+
$[37] !== t16 || $[38] !== t19 ? (t20 = /* @__PURE__ */ jsx(Tooltip, {
|
|
138
|
+
animate: !0,
|
|
139
|
+
content: t15,
|
|
140
|
+
padding: 2,
|
|
141
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
142
|
+
mode: "bleed",
|
|
143
|
+
disabled: t16,
|
|
144
|
+
fontSize: t17,
|
|
145
|
+
icon: CopyIcon,
|
|
146
|
+
padding: t18,
|
|
147
|
+
"aria-label": "Copy URL",
|
|
148
|
+
onClick: t19
|
|
149
|
+
})
|
|
150
|
+
}), $[37] = t16, $[38] = t19, $[39] = t20) : t20 = $[39];
|
|
151
|
+
let t21;
|
|
152
|
+
$[40] === Symbol.for("react.memo_cache_sentinel") ? (t21 = /* @__PURE__ */ jsx(Text, {
|
|
153
|
+
size: 1,
|
|
154
|
+
style: { whiteSpace: "nowrap" },
|
|
155
|
+
children: "Open URL in a new tab"
|
|
156
|
+
}), $[40] = t21) : t21 = $[40];
|
|
157
|
+
let t22 = !validUrl, t23;
|
|
158
|
+
$[41] === Symbol.for("react.memo_cache_sentinel") ? (t23 = [1], $[41] = t23) : t23 = $[41];
|
|
159
|
+
let t24;
|
|
160
|
+
$[42] === Symbol.for("react.memo_cache_sentinel") ? (t24 = [2], $[42] = t24) : t24 = $[42];
|
|
161
|
+
let t25;
|
|
162
|
+
$[43] !== url || $[44] !== validUrl ? (t25 = validUrl ? () => window.open(url.toString()) : void 0, $[43] = url, $[44] = validUrl, $[45] = t25) : t25 = $[45];
|
|
163
|
+
let t26;
|
|
164
|
+
$[46] !== t22 || $[47] !== t25 ? (t26 = /* @__PURE__ */ jsx(Tooltip, {
|
|
165
|
+
animate: !0,
|
|
166
|
+
content: t21,
|
|
167
|
+
padding: 2,
|
|
168
|
+
placement: "bottom-end",
|
|
169
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
170
|
+
disabled: t22,
|
|
171
|
+
fontSize: t23,
|
|
172
|
+
icon: LaunchIcon,
|
|
173
|
+
mode: "ghost",
|
|
174
|
+
paddingY: t24,
|
|
175
|
+
text: "Open",
|
|
176
|
+
"aria-label": "Open URL in a new tab",
|
|
177
|
+
onClick: t25
|
|
178
|
+
})
|
|
179
|
+
}), $[46] = t22, $[47] = t25, $[48] = t26) : t26 = $[48];
|
|
180
|
+
let t27;
|
|
181
|
+
$[49] !== t14 || $[50] !== t20 || $[51] !== t26 ? (t27 = /* @__PURE__ */ jsxs(Flex, {
|
|
182
|
+
align: "center",
|
|
183
|
+
gap: 1,
|
|
184
|
+
children: [
|
|
185
|
+
t14,
|
|
186
|
+
t20,
|
|
187
|
+
t26
|
|
188
|
+
]
|
|
189
|
+
}), $[49] = t14, $[50] = t20, $[51] = t26, $[52] = t27) : t27 = $[52];
|
|
190
|
+
let t28;
|
|
191
|
+
$[53] !== t11 || $[54] !== t13 || $[55] !== t27 ? (t28 = /* @__PURE__ */ jsx(Card, {
|
|
192
|
+
padding: 2,
|
|
193
|
+
borderBottom: !0,
|
|
194
|
+
children: /* @__PURE__ */ jsxs(Flex, {
|
|
195
|
+
align: "center",
|
|
196
|
+
gap: 2,
|
|
197
|
+
children: [
|
|
198
|
+
t11,
|
|
199
|
+
t13,
|
|
200
|
+
t27
|
|
201
|
+
]
|
|
202
|
+
})
|
|
203
|
+
}), $[53] = t11, $[54] = t13, $[55] = t27, $[56] = t28) : t28 = $[56];
|
|
204
|
+
let t29;
|
|
205
|
+
return $[57] !== t2 || $[58] !== t28 ? (t29 = /* @__PURE__ */ jsxs(Fragment, { children: [t2, t28] }), $[57] = t2, $[58] = t28, $[59] = t29) : t29 = $[59], t29;
|
|
134
206
|
}
|
|
135
207
|
function useCopyToClipboard() {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const copy = t0;
|
|
148
|
-
let t1;
|
|
149
|
-
return $[1] !== copiedText ? (t1 = [copiedText, copy], $[1] = copiedText, $[2] = t1) : t1 = $[2], t1;
|
|
208
|
+
let $ = c(3), [copiedText, setCopiedText] = useState(null), t0;
|
|
209
|
+
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = async (text) => {
|
|
210
|
+
if (!navigator?.clipboard) return console.warn("Clipboard not supported"), !1;
|
|
211
|
+
try {
|
|
212
|
+
return await navigator.clipboard.writeText(text), setCopiedText(text), !0;
|
|
213
|
+
} catch (t1) {
|
|
214
|
+
return console.warn("Copy failed", t1), setCopiedText(null), !1;
|
|
215
|
+
}
|
|
216
|
+
}, $[0] = t0) : t0 = $[0];
|
|
217
|
+
let copy = t0, t1;
|
|
218
|
+
return $[1] === copiedText ? t1 = $[2] : (t1 = [copiedText, copy], $[1] = copiedText, $[2] = t1), t1;
|
|
150
219
|
}
|
|
151
220
|
const MotionFlex = motion.create(Flex);
|
|
152
221
|
function encodeStudioPerspective(studioPerspective) {
|
|
153
|
-
|
|
222
|
+
return Array.isArray(studioPerspective) ? studioPerspective.join(",") : studioPerspective;
|
|
154
223
|
}
|
|
155
224
|
function Iframe(props) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
startTransition(() => setExpiresAt(void 0)), previewSecretRef.current = void 0;
|
|
245
|
-
}, Math.max(0, expiresAt - Date.now()));
|
|
246
|
-
return () => clearTimeout(timeout);
|
|
247
|
-
}
|
|
248
|
-
}, t11 = [expiresAt], $[20] = expiresAt, $[21] = t10, $[22] = t11) : (t10 = $[21], t11 = $[22]), useEffect(t10, t11);
|
|
249
|
-
let t12;
|
|
250
|
-
$[23] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t12 = /* @__PURE__ */ jsx(Loading, { iframeSize: "desktop" }), $[23] = t12) : t12 = $[23];
|
|
251
|
-
const t13 = `${draftSnapshot.key}-${selectedPerspectiveName || "draft"}`, t14 = currentUser?.id;
|
|
252
|
-
let t15;
|
|
253
|
-
return $[24] !== attributes || $[25] !== defaultSize || $[26] !== draftSnapshot.draft || $[27] !== draftSnapshot.key || $[28] !== isResolvingUrl || $[29] !== perspective || $[30] !== reload || $[31] !== showDisplayUrl || $[32] !== t13 || $[33] !== t14 || $[34] !== url_1 ? (t15 = /* @__PURE__ */ jsx(Suspense, { fallback: t12, children: /* @__PURE__ */ jsx(IframeInner, { _key: draftSnapshot.key, draftSnapshot: draftSnapshot.draft, url: url_1, isResolvingUrl, attributes, perspective, defaultSize, reload, showDisplayUrl, userId: t14 }, t13) }), $[24] = attributes, $[25] = defaultSize, $[26] = draftSnapshot.draft, $[27] = draftSnapshot.key, $[28] = isResolvingUrl, $[29] = perspective, $[30] = reload, $[31] = showDisplayUrl, $[32] = t13, $[33] = t14, $[34] = url_1, $[35] = t15) : t15 = $[35], t15;
|
|
225
|
+
let $ = c(36), { document, options } = props, draft = document.draft || document.published || document.displayed, { defaultSize: t0, reload, attributes, showDisplayUrl: t1, key } = options, defaultSize = t0 === void 0 ? DEFAULT_SIZE : t0, showDisplayUrl = t1 === void 0 ? !0 : t1, basePath = useActiveWorkspace()?.activeWorkspace?.basePath || "/", urlRef = useRef(options.url), t2;
|
|
226
|
+
$[0] !== draft || $[1] !== key ? (t2 = () => ({
|
|
227
|
+
key,
|
|
228
|
+
draft
|
|
229
|
+
}), $[0] = draft, $[1] = key, $[2] = t2) : t2 = $[2];
|
|
230
|
+
let [draftSnapshot, setDraftSnapshot] = useState(t2), t3, t4;
|
|
231
|
+
$[3] === options.url ? (t3 = $[4], t4 = $[5]) : (t3 = () => {
|
|
232
|
+
urlRef.current = options.url;
|
|
233
|
+
}, t4 = [options.url], $[3] = options.url, $[4] = t3, $[5] = t4), useEffect(t3, t4);
|
|
234
|
+
let currentUser = useCurrentUser(), t5;
|
|
235
|
+
$[6] === Symbol.for("react.memo_cache_sentinel") ? (t5 = { apiVersion: "2023-10-16" }, $[6] = t5) : t5 = $[6];
|
|
236
|
+
let client = useClient(t5), [expiresAt, setExpiresAt] = useState(), previewSecretRef = useRef(void 0), [isResolvingUrl, startTransition] = useTransition(), { perspectiveStack, selectedPerspectiveName } = usePerspective(), t6;
|
|
237
|
+
$[7] !== perspectiveStack || $[8] !== selectedPerspectiveName ? (t6 = {
|
|
238
|
+
perspectiveStack,
|
|
239
|
+
selectedPerspectiveName
|
|
240
|
+
}, $[7] = perspectiveStack, $[8] = selectedPerspectiveName, $[9] = t6) : t6 = $[9];
|
|
241
|
+
let perspective = t6, t7, t8;
|
|
242
|
+
$[10] !== draft || $[11] !== draftSnapshot || $[12] !== key ? (t7 = () => {
|
|
243
|
+
JSON.stringify({
|
|
244
|
+
key,
|
|
245
|
+
draft
|
|
246
|
+
}) !== JSON.stringify(draftSnapshot) && startTransition(() => setDraftSnapshot({
|
|
247
|
+
key,
|
|
248
|
+
draft
|
|
249
|
+
}));
|
|
250
|
+
}, t8 = [
|
|
251
|
+
draft,
|
|
252
|
+
draftSnapshot,
|
|
253
|
+
key,
|
|
254
|
+
startTransition
|
|
255
|
+
], $[10] = draft, $[11] = draftSnapshot, $[12] = key, $[13] = t7, $[14] = t8) : (t7 = $[13], t8 = $[14]), useEffect(t7, t8);
|
|
256
|
+
let t9;
|
|
257
|
+
$[15] !== basePath || $[16] !== client || $[17] !== currentUser?.id || $[18] !== perspective ? (t9 = async (draft_0) => {
|
|
258
|
+
if (typeof location > "u") return;
|
|
259
|
+
let urlProp = urlRef.current;
|
|
260
|
+
if (typeof urlProp == "string") return new URL(urlProp, location.origin);
|
|
261
|
+
if (typeof urlProp == "function") {
|
|
262
|
+
let url = await urlProp(draft_0, perspective);
|
|
263
|
+
return typeof url == "string" ? new URL(url, location.origin) : url;
|
|
264
|
+
}
|
|
265
|
+
if (typeof urlProp == "object") {
|
|
266
|
+
let preview = typeof urlProp.preview == "function" ? await urlProp.preview(draft_0, perspective) : urlProp.preview;
|
|
267
|
+
if (typeof preview != "string") return preview;
|
|
268
|
+
if (!previewSecretRef.current) {
|
|
269
|
+
let { secret, expiresAt: expiresAt_0 } = await createPreviewSecret(client, "sanity-plugin-iframe-pane", location.href, currentUser?.id);
|
|
270
|
+
previewSecretRef.current = secret, startTransition(() => setExpiresAt(expiresAt_0.getTime()));
|
|
271
|
+
}
|
|
272
|
+
let url_0 = await definePreviewUrl({
|
|
273
|
+
origin: urlProp.origin === "same-origin" ? location.origin : urlProp.origin,
|
|
274
|
+
preview,
|
|
275
|
+
previewMode: { enable: urlProp.draftMode }
|
|
276
|
+
})({
|
|
277
|
+
client,
|
|
278
|
+
previewUrlSecret: previewSecretRef.current,
|
|
279
|
+
previewSearchParam: null,
|
|
280
|
+
studioBasePath: basePath,
|
|
281
|
+
studioPreviewPerspective: encodeStudioPerspective(perspective.perspectiveStack)
|
|
282
|
+
});
|
|
283
|
+
return new URL(url_0, location.origin);
|
|
284
|
+
}
|
|
285
|
+
}, $[15] = basePath, $[16] = client, $[17] = currentUser?.id, $[18] = perspective, $[19] = t9) : t9 = $[19], currentUser?.id;
|
|
286
|
+
let url_1 = t9, t10, t11;
|
|
287
|
+
$[20] === expiresAt ? (t10 = $[21], t11 = $[22]) : (t10 = () => {
|
|
288
|
+
if (expiresAt) {
|
|
289
|
+
let timeout = setTimeout(() => {
|
|
290
|
+
startTransition(() => setExpiresAt(void 0)), previewSecretRef.current = void 0;
|
|
291
|
+
}, Math.max(0, expiresAt - Date.now()));
|
|
292
|
+
return () => clearTimeout(timeout);
|
|
293
|
+
}
|
|
294
|
+
}, t11 = [expiresAt], $[20] = expiresAt, $[21] = t10, $[22] = t11), useEffect(t10, t11);
|
|
295
|
+
let t12;
|
|
296
|
+
$[23] === Symbol.for("react.memo_cache_sentinel") ? (t12 = /* @__PURE__ */ jsx(Loading, { iframeSize: "desktop" }), $[23] = t12) : t12 = $[23];
|
|
297
|
+
let t13 = `${draftSnapshot.key}-${selectedPerspectiveName || "draft"}`, t14 = currentUser?.id, t15;
|
|
298
|
+
return $[24] !== attributes || $[25] !== defaultSize || $[26] !== draftSnapshot.draft || $[27] !== draftSnapshot.key || $[28] !== isResolvingUrl || $[29] !== perspective || $[30] !== reload || $[31] !== showDisplayUrl || $[32] !== t13 || $[33] !== t14 || $[34] !== url_1 ? (t15 = /* @__PURE__ */ jsx(Suspense, {
|
|
299
|
+
fallback: t12,
|
|
300
|
+
children: /* @__PURE__ */ jsx(IframeInner, {
|
|
301
|
+
_key: draftSnapshot.key,
|
|
302
|
+
draftSnapshot: draftSnapshot.draft,
|
|
303
|
+
url: url_1,
|
|
304
|
+
isResolvingUrl,
|
|
305
|
+
attributes,
|
|
306
|
+
perspective,
|
|
307
|
+
defaultSize,
|
|
308
|
+
reload,
|
|
309
|
+
showDisplayUrl,
|
|
310
|
+
userId: t14
|
|
311
|
+
}, t13)
|
|
312
|
+
}), $[24] = attributes, $[25] = defaultSize, $[26] = draftSnapshot.draft, $[27] = draftSnapshot.key, $[28] = isResolvingUrl, $[29] = perspective, $[30] = reload, $[31] = showDisplayUrl, $[32] = t13, $[33] = t14, $[34] = url_1, $[35] = t15) : t15 = $[35], t15;
|
|
254
313
|
}
|
|
255
314
|
const IframeInner = memo(function(props) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
315
|
+
let $ = c(35), { isResolvingUrl, defaultSize: t0, reload, attributes: t1, showDisplayUrl: t2, draftSnapshot, userId, expiresAt, perspective: t3, _key } = props, defaultSize = t0 === void 0 ? DEFAULT_SIZE : t0, t4;
|
|
316
|
+
$[0] === t1 ? t4 = $[1] : (t4 = t1 === void 0 ? {} : t1, $[0] = t1, $[1] = t4);
|
|
317
|
+
let attributes = t4, showDisplayUrl = t2 === void 0 ? !0 : t2, { selectedPerspectiveName, perspectiveStack } = t3, [iframeSize, setIframeSize] = useState(sizes?.[defaultSize] ? defaultSize : DEFAULT_SIZE), prefersReducedMotion = usePrefersReducedMotion(), t5;
|
|
318
|
+
$[2] !== draftSnapshot || $[3] !== props ? (t5 = () => props.url(draftSnapshot), $[2] = draftSnapshot, $[3] = props, $[4] = t5) : t5 = $[4];
|
|
319
|
+
let t6;
|
|
320
|
+
$[5] !== _key || $[6] !== draftSnapshot || $[7] !== expiresAt || $[8] !== perspectiveStack || $[9] !== selectedPerspectiveName || $[10] !== t5 || $[11] !== userId ? (t6 = suspend(t5, [
|
|
321
|
+
"sanity-plugin-iframe-pane",
|
|
322
|
+
draftSnapshot,
|
|
323
|
+
selectedPerspectiveName,
|
|
324
|
+
perspectiveStack,
|
|
325
|
+
userId,
|
|
326
|
+
expiresAt,
|
|
327
|
+
_key,
|
|
328
|
+
resolveUUID
|
|
329
|
+
]), $[5] = _key, $[6] = draftSnapshot, $[7] = expiresAt, $[8] = perspectiveStack, $[9] = selectedPerspectiveName, $[10] = t5, $[11] = userId, $[12] = t6) : t6 = $[12];
|
|
330
|
+
let url = t6, [loading, setLoading] = useState(!0), [_reloading, setReloading] = useState(!1), reloading = _reloading || isResolvingUrl, iframe = useRef(null), t7;
|
|
331
|
+
$[13] === Symbol.for("react.memo_cache_sentinel") ? (t7 = () => {
|
|
332
|
+
if (!iframe?.current) return;
|
|
333
|
+
let { src } = iframe.current;
|
|
334
|
+
iframe.current.src = src, setReloading(!0);
|
|
335
|
+
}, $[13] = t7) : t7 = $[13];
|
|
336
|
+
let handleReload = t7, t8;
|
|
337
|
+
$[14] === prefersReducedMotion ? t8 = $[15] : (t8 = prefersReducedMotion ? { duration: 0 } : void 0, $[14] = prefersReducedMotion, $[15] = t8);
|
|
338
|
+
let t9;
|
|
339
|
+
$[16] === Symbol.for("react.memo_cache_sentinel") ? (t9 = { height: "100%" }, $[16] = t9) : t9 = $[16];
|
|
340
|
+
let t10 = !!reload?.button, t11;
|
|
341
|
+
$[17] !== iframeSize || $[18] !== reloading || $[19] !== showDisplayUrl || $[20] !== t10 || $[21] !== url ? (t11 = /* @__PURE__ */ jsx(Toolbar, {
|
|
342
|
+
url,
|
|
343
|
+
iframeSize,
|
|
344
|
+
reloading,
|
|
345
|
+
setIframeSize,
|
|
346
|
+
showUrl: showDisplayUrl,
|
|
347
|
+
reloadButton: t10,
|
|
348
|
+
handleReload
|
|
349
|
+
}), $[17] = iframeSize, $[18] = reloading, $[19] = showDisplayUrl, $[20] = t10, $[21] = url, $[22] = t11) : t11 = $[22];
|
|
350
|
+
let t12;
|
|
351
|
+
$[23] !== attributes || $[24] !== iframeSize || $[25] !== loading || $[26] !== reloading || $[27] !== url ? (t12 = url instanceof Error ? /* @__PURE__ */ jsx(ErrorCard, { error: url }) : /* @__PURE__ */ jsx(Card, {
|
|
352
|
+
tone: "transparent",
|
|
353
|
+
style: { height: "100%" },
|
|
354
|
+
children: /* @__PURE__ */ jsx(Frame, {
|
|
355
|
+
ref: iframe,
|
|
356
|
+
loading,
|
|
357
|
+
reloading,
|
|
358
|
+
iframeSize,
|
|
359
|
+
setReloading,
|
|
360
|
+
setLoading,
|
|
361
|
+
url,
|
|
362
|
+
attributes
|
|
363
|
+
})
|
|
364
|
+
}), $[23] = attributes, $[24] = iframeSize, $[25] = loading, $[26] = reloading, $[27] = url, $[28] = t12) : t12 = $[28];
|
|
365
|
+
let t13;
|
|
366
|
+
$[29] !== t11 || $[30] !== t12 ? (t13 = /* @__PURE__ */ jsxs(Flex, {
|
|
367
|
+
direction: "column",
|
|
368
|
+
style: t9,
|
|
369
|
+
children: [t11, t12]
|
|
370
|
+
}), $[29] = t11, $[30] = t12, $[31] = t13) : t13 = $[31];
|
|
371
|
+
let t14;
|
|
372
|
+
return $[32] !== t13 || $[33] !== t8 ? (t14 = /* @__PURE__ */ jsx(MotionConfig, {
|
|
373
|
+
transition: t8,
|
|
374
|
+
children: t13
|
|
375
|
+
}), $[32] = t13, $[33] = t8, $[34] = t14) : t14 = $[34], t14;
|
|
311
376
|
});
|
|
312
377
|
function Frame(props) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
378
|
+
let $ = c(22), { loading, setLoading, iframeSize, attributes, reloading, url, setReloading, ref: iframe } = props, t0;
|
|
379
|
+
$[0] !== attributes || $[1] !== setLoading || $[2] !== setReloading ? (t0 = function() {
|
|
380
|
+
setLoading(!1), setReloading(!1), attributes.onLoad && typeof attributes.onLoad == "function" && attributes.onLoad();
|
|
381
|
+
}, $[0] = attributes, $[1] = setLoading, $[2] = setReloading, $[3] = t0) : t0 = $[3];
|
|
382
|
+
let handleIframeLoad = t0, t1;
|
|
383
|
+
$[4] === Symbol.for("react.memo_cache_sentinel") ? (t1 = {
|
|
384
|
+
height: "100%",
|
|
385
|
+
position: "relative"
|
|
386
|
+
}, $[4] = t1) : t1 = $[4];
|
|
387
|
+
let t2;
|
|
388
|
+
$[5] !== iframeSize || $[6] !== loading || $[7] !== url ? (t2 = !url || loading && /* @__PURE__ */ jsx(MotionFlex, {
|
|
389
|
+
initial: "initial",
|
|
390
|
+
animate: "animate",
|
|
391
|
+
exit: "exit",
|
|
392
|
+
variants: spinnerVariants,
|
|
393
|
+
justify: "center",
|
|
394
|
+
align: "center",
|
|
395
|
+
style: {
|
|
396
|
+
inset: "0",
|
|
397
|
+
position: "absolute"
|
|
398
|
+
},
|
|
399
|
+
children: /* @__PURE__ */ jsx(Loading, { iframeSize })
|
|
400
|
+
}), $[5] = iframeSize, $[6] = loading, $[7] = url, $[8] = t2) : t2 = $[8];
|
|
401
|
+
let t3;
|
|
402
|
+
$[9] === t2 ? t3 = $[10] : (t3 = /* @__PURE__ */ jsx(AnimatePresence, { children: t2 }), $[9] = t2, $[10] = t3);
|
|
403
|
+
let t4;
|
|
404
|
+
$[11] !== attributes || $[12] !== handleIframeLoad || $[13] !== iframe || $[14] !== iframeSize || $[15] !== loading || $[16] !== reloading || $[17] !== url ? (t4 = url && /* @__PURE__ */ jsx(motion.iframe, {
|
|
405
|
+
ref: iframe,
|
|
406
|
+
title: "preview",
|
|
407
|
+
frameBorder: "0",
|
|
408
|
+
style: { maxHeight: "100%" },
|
|
409
|
+
src: url.toString(),
|
|
410
|
+
initial: ["background", iframeSize],
|
|
411
|
+
variants: iframeVariants,
|
|
412
|
+
animate: [
|
|
413
|
+
loading ? "background" : "active",
|
|
414
|
+
reloading ? "reloading" : "idle",
|
|
415
|
+
iframeSize
|
|
416
|
+
],
|
|
417
|
+
...attributes,
|
|
418
|
+
onLoad: handleIframeLoad
|
|
419
|
+
}), $[11] = attributes, $[12] = handleIframeLoad, $[13] = iframe, $[14] = iframeSize, $[15] = loading, $[16] = reloading, $[17] = url, $[18] = t4) : t4 = $[18];
|
|
420
|
+
let t5;
|
|
421
|
+
return $[19] !== t3 || $[20] !== t4 ? (t5 = /* @__PURE__ */ jsxs(Flex, {
|
|
422
|
+
align: "center",
|
|
423
|
+
justify: "center",
|
|
424
|
+
style: t1,
|
|
425
|
+
children: [t3, t4]
|
|
426
|
+
}), $[19] = t3, $[20] = t4, $[21] = t5) : t5 = $[21], t5;
|
|
349
427
|
}
|
|
350
428
|
const spinnerVariants = {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
429
|
+
initial: { opacity: 1 },
|
|
430
|
+
animate: { opacity: [
|
|
431
|
+
0,
|
|
432
|
+
0,
|
|
433
|
+
1
|
|
434
|
+
] },
|
|
435
|
+
exit: { opacity: [
|
|
436
|
+
1,
|
|
437
|
+
0,
|
|
438
|
+
0
|
|
439
|
+
] }
|
|
360
440
|
}, iframeVariants = {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
441
|
+
...sizes,
|
|
442
|
+
desktop: {
|
|
443
|
+
...sizes.desktop,
|
|
444
|
+
boxShadow: "0 0 0 0px var(--card-shadow-outline-color)"
|
|
445
|
+
},
|
|
446
|
+
mobile: {
|
|
447
|
+
...sizes.mobile,
|
|
448
|
+
boxShadow: "0 0 0 1px var(--card-shadow-outline-color)"
|
|
449
|
+
},
|
|
450
|
+
background: {
|
|
451
|
+
opacity: 0,
|
|
452
|
+
scale: 1
|
|
453
|
+
},
|
|
454
|
+
idle: { scale: 1 },
|
|
455
|
+
reloading: { scale: [
|
|
456
|
+
1,
|
|
457
|
+
1,
|
|
458
|
+
1,
|
|
459
|
+
.98
|
|
460
|
+
] },
|
|
461
|
+
active: {
|
|
462
|
+
opacity: [
|
|
463
|
+
0,
|
|
464
|
+
0,
|
|
465
|
+
1
|
|
466
|
+
],
|
|
467
|
+
scale: 1
|
|
468
|
+
}
|
|
384
469
|
};
|
|
385
470
|
function Loading(t0) {
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
471
|
+
let $ = c(6), { iframeSize } = t0, t1 = sizes[iframeSize], t2;
|
|
472
|
+
$[0] === t1 ? t2 = $[1] : (t2 = { ...t1 }, $[0] = t1, $[1] = t2);
|
|
473
|
+
let t3, t4;
|
|
474
|
+
$[2] === Symbol.for("react.memo_cache_sentinel") ? (t3 = /* @__PURE__ */ jsx(Spinner, { muted: !0 }), t4 = /* @__PURE__ */ jsx(Text, {
|
|
475
|
+
muted: !0,
|
|
476
|
+
size: 1,
|
|
477
|
+
children: "Loading…"
|
|
478
|
+
}), $[2] = t3, $[3] = t4) : (t3 = $[2], t4 = $[3]);
|
|
479
|
+
let t5;
|
|
480
|
+
return $[4] === t2 ? t5 = $[5] : (t5 = /* @__PURE__ */ jsxs(Flex, {
|
|
481
|
+
style: t2,
|
|
482
|
+
justify: "center",
|
|
483
|
+
align: "center",
|
|
484
|
+
direction: "column",
|
|
485
|
+
gap: 4,
|
|
486
|
+
children: [t3, t4]
|
|
487
|
+
}), $[4] = t2, $[5] = t5), t5;
|
|
400
488
|
}
|
|
401
489
|
function ErrorCard(t0) {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
490
|
+
let $ = c(8), { error } = t0, t1;
|
|
491
|
+
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t1 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, {
|
|
492
|
+
size: 1,
|
|
493
|
+
children: /* @__PURE__ */ jsx(WarningOutlineIcon, {})
|
|
494
|
+
}) }), $[0] = t1) : t1 = $[0];
|
|
495
|
+
let t2;
|
|
496
|
+
$[1] === error.name ? t2 = $[2] : (t2 = /* @__PURE__ */ jsx(Text, {
|
|
497
|
+
as: "h1",
|
|
498
|
+
size: 1,
|
|
499
|
+
weight: "bold",
|
|
500
|
+
children: error.name
|
|
501
|
+
}), $[1] = error.name, $[2] = t2);
|
|
502
|
+
let t3;
|
|
503
|
+
$[3] === error.message ? t3 = $[4] : (t3 = /* @__PURE__ */ jsx(Text, {
|
|
504
|
+
as: "p",
|
|
505
|
+
muted: !0,
|
|
506
|
+
size: 1,
|
|
507
|
+
children: error.message
|
|
508
|
+
}), $[3] = error.message, $[4] = t3);
|
|
509
|
+
let t4;
|
|
510
|
+
return $[5] !== t2 || $[6] !== t3 ? (t4 = /* @__PURE__ */ jsx(Card, {
|
|
511
|
+
height: "fill",
|
|
512
|
+
children: /* @__PURE__ */ jsx(Flex, {
|
|
513
|
+
align: "center",
|
|
514
|
+
height: "fill",
|
|
515
|
+
justify: "center",
|
|
516
|
+
padding: 4,
|
|
517
|
+
sizing: "border",
|
|
518
|
+
children: /* @__PURE__ */ jsx(Container, {
|
|
519
|
+
width: 0,
|
|
520
|
+
children: /* @__PURE__ */ jsx(Card, {
|
|
521
|
+
padding: 4,
|
|
522
|
+
radius: 2,
|
|
523
|
+
shadow: 1,
|
|
524
|
+
tone: "caution",
|
|
525
|
+
children: /* @__PURE__ */ jsxs(Flex, { children: [t1, /* @__PURE__ */ jsxs(Stack, {
|
|
526
|
+
flex: 1,
|
|
527
|
+
marginLeft: 3,
|
|
528
|
+
gap: 3,
|
|
529
|
+
children: [t2, t3]
|
|
530
|
+
})] })
|
|
531
|
+
})
|
|
532
|
+
})
|
|
533
|
+
})
|
|
534
|
+
}), $[5] = t2, $[6] = t3, $[7] = t4) : t4 = $[7], t4;
|
|
419
535
|
}
|
|
420
|
-
const resolveUUID =
|
|
421
|
-
export {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
//# sourceMappingURL=index.js.map
|
|
536
|
+
const resolveUUID = Symbol();
|
|
537
|
+
export { Iframe };
|
|
538
|
+
|
|
539
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/DisplayUrl.tsx","../src/Toolbar.tsx","../src/Iframe.tsx"],"sourcesContent":["import {getRedirectTo} from '@sanity/preview-url-secret/get-redirect-to'\nimport {Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function DisplayUrl(props: {url: URL}) {\n const truncatedUrl = useMemo(() => {\n const url = getRedirectTo(props.url)\n return `${url.origin === location.origin ? '' : url.origin}${url.pathname}${url.search}`\n }, [props.url])\n\n return (\n <Text size={0} textOverflow=\"ellipsis\">\n {truncatedUrl}\n </Text>\n )\n}\n","import {CopyIcon} from '@sanity/icons/Copy'\nimport {LaunchIcon} from '@sanity/icons/Launch'\nimport {MobileDeviceIcon} from '@sanity/icons/MobileDevice'\nimport {RefreshIcon} from '@sanity/icons/Refresh'\nimport {Box, Button, Card, Flex, Text, Tooltip, useToast} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\n\nimport {DisplayUrl} from './DisplayUrl'\nimport type {IframeSizeKey, SizeProps} from './types'\n\nexport const sizes: SizeProps = {\n desktop: {\n width: '100%',\n height: '100%',\n },\n mobile: {\n width: 414,\n height: 746,\n },\n}\n\nexport const DEFAULT_SIZE = 'desktop'\n\nexport interface ToolbarProps {\n url: URL | Error | undefined\n iframeSize: IframeSizeKey\n setIframeSize: (size: IframeSizeKey) => void\n showUrl: boolean\n reloading: boolean\n reloadButton: boolean\n handleReload: () => void\n}\nexport function Toolbar(props: ToolbarProps) {\n const {url, iframeSize, setIframeSize, reloading, showUrl, reloadButton, handleReload} = props\n const validUrl = url instanceof URL\n\n const input = useRef<HTMLTextAreaElement>(null)\n const {push: pushToast} = useToast()\n const [, copy] = useCopyToClipboard()\n\n return (\n <>\n <textarea\n aria-hidden\n style={{position: 'absolute', pointerEvents: 'none', opacity: 0}}\n ref={input}\n value={validUrl ? url.toString() : ''}\n readOnly\n tabIndex={-1}\n />\n <Card padding={2} borderBottom>\n <Flex align=\"center\" gap={2}>\n <Flex align=\"center\" gap={1}>\n <Tooltip\n animate\n content={\n <Text size={1} style={{whiteSpace: 'nowrap'}}>\n {iframeSize === 'mobile' ? 'Exit mobile preview' : 'Preview mobile viewport'}\n </Text>\n }\n padding={2}\n placement=\"bottom-start\"\n >\n <Button\n disabled={!validUrl}\n fontSize={[1]}\n padding={2}\n mode={iframeSize === 'mobile' ? 'default' : 'ghost'}\n icon={MobileDeviceIcon}\n onClick={() => setIframeSize(iframeSize === 'mobile' ? 'desktop' : 'mobile')}\n />\n </Tooltip>\n </Flex>\n <Box flex={1}>{showUrl && validUrl && <DisplayUrl url={url} />}</Box>\n <Flex align=\"center\" gap={1}>\n {reloadButton ? (\n <Tooltip\n animate\n content={\n <Text size={1} style={{whiteSpace: 'nowrap'}}>\n {reloading ? 'Reloading…' : 'Reload'}\n </Text>\n }\n padding={2}\n >\n <Button\n disabled={!validUrl}\n mode=\"bleed\"\n fontSize={[1]}\n padding={2}\n icon={RefreshIcon}\n loading={reloading}\n aria-label=\"Reload\"\n onClick={() => handleReload()}\n />\n </Tooltip>\n ) : null}\n <Tooltip\n animate\n content={\n <Text size={1} style={{whiteSpace: 'nowrap'}}>\n Copy URL\n </Text>\n }\n padding={2}\n >\n <Button\n mode=\"bleed\"\n disabled={!validUrl}\n fontSize={[1]}\n icon={CopyIcon}\n padding={[2]}\n aria-label=\"Copy URL\"\n onClick={() => {\n if (!input?.current?.value) return\n\n void copy(input.current.value).then((copied) => {\n if (copied) {\n pushToast({\n closable: true,\n status: 'success',\n title: 'The URL is copied to the clipboard',\n })\n } else {\n pushToast({\n closable: true,\n status: 'error',\n title: 'Failed to copy the URL to the clipboard',\n })\n }\n return copied\n })\n }}\n />\n </Tooltip>\n <Tooltip\n animate\n content={\n <Text size={1} style={{whiteSpace: 'nowrap'}}>\n Open URL in a new tab\n </Text>\n }\n padding={2}\n placement=\"bottom-end\"\n >\n <Button\n disabled={!validUrl}\n fontSize={[1]}\n icon={LaunchIcon}\n mode=\"ghost\"\n paddingY={[2]}\n text=\"Open\"\n aria-label=\"Open URL in a new tab\"\n onClick={validUrl ? () => window.open(url.toString()) : undefined}\n />\n </Tooltip>\n </Flex>\n </Flex>\n </Card>\n </>\n )\n}\n\ntype CopiedValue = string | null\n\ntype CopyFn = (text: string) => Promise<boolean>\n\nfunction useCopyToClipboard(): [CopiedValue, CopyFn] {\n const [copiedText, setCopiedText] = useState<CopiedValue>(null)\n\n const copy: CopyFn = useCallback(async (text) => {\n if (!navigator?.clipboard) {\n console.warn('Clipboard not supported')\n return false\n }\n\n // Try to save to clipboard then save it in the state if worked\n try {\n await navigator.clipboard.writeText(text)\n setCopiedText(text)\n return true\n } catch (error) {\n console.warn('Copy failed', error)\n setCopiedText(null)\n return false\n }\n }, [])\n\n return [copiedText, copy]\n}\n","import {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {createPreviewSecret} from '@sanity/preview-url-secret/create-secret'\nimport {definePreviewUrl} from '@sanity/preview-url-secret/define-preview-url'\nimport {Box, Card, Container, Flex, Spinner, Stack, Text, usePrefersReducedMotion} from '@sanity/ui'\nimport {AnimatePresence, motion, MotionConfig} from 'motion/react'\nimport type {HTMLAttributeReferrerPolicy} from 'react'\nimport {\n memo,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n} from 'react'\nimport {\n type SanityDocument,\n useActiveWorkspace,\n useClient,\n useCurrentUser,\n usePerspective,\n} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {DEFAULT_SIZE, sizes, Toolbar} from './Toolbar'\nimport type {IframeSizeKey} from './types'\n\nexport type UrlResolver = (\n document: SanityDocument | null,\n perspective: Pick<\n ReturnType<typeof usePerspective>,\n 'selectedPerspectiveName' | 'perspectiveStack'\n >,\n) => string | Error | undefined | Promise<string | Error | undefined>\n\nexport type {IframeSizeKey}\n\nexport interface IframeOptions {\n /**\n * If you have multiple iframe instances side-by-side you need to give each a unique key.\n */\n key?: string\n url:\n | string\n | UrlResolver\n | {\n /**\n * The URL origin of where the preview is hosted, for example `https://example.com`.\n * If it's an embedded Studio then set it to `'same-origin'`.\n */\n origin: 'same-origin' | (string & {})\n /**\n * The route to redirect to after enabling Draft Mode.\n * If you don't have enough data to build the URL, return an `Error` instance to show an error message.\n * @example `return new Error('Missing slug')`\n * To prolong the loading state, return `undefined`\n */\n preview: string | UrlResolver\n /**\n * The route that enables Draft Mode\n * @example '/api/draft'\n */\n draftMode: string\n }\n defaultSize?: IframeSizeKey\n showDisplayUrl?: boolean\n reload?: {\n button?: boolean\n }\n attributes?: Partial<{\n allow: string\n referrerPolicy: HTMLAttributeReferrerPolicy | undefined\n sandbox: string\n onLoad: () => void\n }>\n}\n\nconst MotionFlex = motion.create(Flex)\n\nexport interface IframeProps {\n document: {\n displayed: SanityDocument\n draft: SanityDocument | null\n published: SanityDocument | null\n }\n options: IframeOptions\n}\n\nfunction encodeStudioPerspective(studioPerspective: string[] | string): string {\n return Array.isArray(studioPerspective) ? studioPerspective.join(',') : studioPerspective\n}\n\nexport function Iframe(props: IframeProps): React.JSX.Element {\n const {document, options} = props\n const draft = document.draft || document.published || document.displayed\n\n const {defaultSize = DEFAULT_SIZE, reload, attributes, showDisplayUrl = true, key} = options\n\n const workspace = useActiveWorkspace()\n const basePath = workspace?.activeWorkspace?.basePath || '/'\n const urlRef = useRef(options.url)\n const [draftSnapshot, setDraftSnapshot] = useState(() => ({key, draft}))\n useEffect(() => {\n urlRef.current = options.url\n }, [options.url])\n const currentUser = useCurrentUser()\n const client = useClient({apiVersion: '2023-10-16'})\n const [expiresAt, setExpiresAt] = useState<number | undefined>()\n const previewSecretRef = useRef<string | undefined>(undefined)\n const [isResolvingUrl, startTransition] = useTransition()\n const {perspectiveStack, selectedPerspectiveName} = usePerspective()\n const perspective = useMemo(\n () => ({\n perspectiveStack,\n selectedPerspectiveName,\n }),\n [perspectiveStack, selectedPerspectiveName],\n )\n\n useEffect(() => {\n if (JSON.stringify({key, draft}) !== JSON.stringify(draftSnapshot)) {\n startTransition(() => setDraftSnapshot({key, draft}))\n }\n }, [draft, draftSnapshot, key, startTransition])\n\n const url = useCallback(\n async (draft: SanityDocument | null) => {\n if (typeof location === 'undefined') {\n return undefined\n }\n const urlProp = urlRef.current\n if (typeof urlProp === 'string') {\n return new URL(urlProp, location.origin)\n }\n if (typeof urlProp === 'function') {\n const url = await urlProp(draft, perspective)\n return typeof url === 'string' ? new URL(url, location.origin) : url\n }\n if (typeof urlProp === 'object') {\n const preview =\n typeof urlProp.preview === 'function'\n ? await urlProp.preview(draft, perspective)\n : urlProp.preview\n if (typeof preview !== 'string') {\n return preview\n }\n if (!previewSecretRef.current) {\n const {secret, expiresAt} = await createPreviewSecret(\n client,\n 'sanity-plugin-iframe-pane',\n location.href,\n currentUser?.id,\n )\n previewSecretRef.current = secret\n startTransition(() => setExpiresAt(expiresAt.getTime()))\n }\n\n const resolvePreviewUrl = definePreviewUrl({\n origin: urlProp.origin === 'same-origin' ? location.origin : urlProp.origin,\n preview,\n draftMode: {\n enable: urlProp.draftMode,\n },\n })\n const url = await resolvePreviewUrl({\n client,\n previewUrlSecret: previewSecretRef.current,\n previewSearchParam: null,\n studioBasePath: basePath,\n studioPreviewPerspective: encodeStudioPerspective(perspective.perspectiveStack),\n })\n return new URL(url, location.origin)\n }\n return undefined\n },\n [basePath, client, currentUser?.id, perspective, startTransition],\n )\n useEffect(() => {\n if (expiresAt) {\n const timeout = setTimeout(\n () => {\n startTransition(() => setExpiresAt(undefined))\n previewSecretRef.current = undefined\n },\n Math.max(0, expiresAt - Date.now()),\n )\n return () => clearTimeout(timeout)\n }\n return undefined\n }, [expiresAt])\n\n return (\n <Suspense fallback={<Loading iframeSize=\"desktop\" />}>\n <IframeInner\n key={`${draftSnapshot.key}-${selectedPerspectiveName || 'draft'}`}\n _key={draftSnapshot.key}\n draftSnapshot={draftSnapshot.draft}\n url={url}\n isResolvingUrl={isResolvingUrl}\n attributes={attributes}\n perspective={perspective}\n defaultSize={defaultSize}\n reload={reload}\n showDisplayUrl={showDisplayUrl}\n userId={currentUser?.id}\n />\n </Suspense>\n )\n}\n\nexport interface IframeInnerProps extends Omit<IframeOptions, 'url'> {\n url: (draftSnapshot: SanityDocument | null) => Promise<URL | Error | undefined>\n isResolvingUrl: boolean\n draftSnapshot: SanityDocument | null\n perspective: Parameters<UrlResolver>[1]\n userId?: string\n expiresAt?: number\n _key?: string\n}\nconst IframeInner = memo(function IframeInner(props: IframeInnerProps) {\n const {\n isResolvingUrl,\n defaultSize = DEFAULT_SIZE,\n reload,\n attributes = {},\n showDisplayUrl = true,\n draftSnapshot,\n userId,\n expiresAt,\n perspective: {selectedPerspectiveName, perspectiveStack},\n _key,\n } = props\n const [iframeSize, setIframeSize] = useState(sizes?.[defaultSize] ? defaultSize : DEFAULT_SIZE)\n\n const prefersReducedMotion = usePrefersReducedMotion()\n\n const url = suspend(\n () => props.url(draftSnapshot),\n [\n // Cache based on a few specific conditions\n 'sanity-plugin-iframe-pane',\n draftSnapshot,\n selectedPerspectiveName,\n perspectiveStack,\n userId,\n expiresAt,\n _key,\n resolveUUID,\n ],\n )\n\n const [loading, setLoading] = useState(true)\n const [_reloading, setReloading] = useState(false)\n const reloading = _reloading || isResolvingUrl\n\n const iframe = useRef<HTMLIFrameElement>(null)\n\n const handleReload = useCallback(() => {\n if (!iframe?.current) {\n return\n }\n\n // Funky way to reload an iframe without CORS issues\n const {src} = iframe.current\n iframe.current.src = src\n\n setReloading(true)\n }, [])\n\n return (\n <MotionConfig transition={prefersReducedMotion ? {duration: 0} : undefined}>\n <Flex direction=\"column\" style={{height: '100%'}}>\n <Toolbar\n url={url}\n iframeSize={iframeSize}\n reloading={reloading}\n setIframeSize={setIframeSize}\n showUrl={showDisplayUrl}\n reloadButton={!!reload?.button}\n handleReload={handleReload}\n />\n {url instanceof Error ? (\n <ErrorCard error={url} />\n ) : (\n <Card tone=\"transparent\" style={{height: '100%'}}>\n <Frame\n ref={iframe}\n loading={loading}\n reloading={reloading}\n iframeSize={iframeSize}\n setReloading={setReloading}\n setLoading={setLoading}\n url={url}\n attributes={attributes}\n />\n </Card>\n )}\n </Flex>\n </MotionConfig>\n )\n})\n\ninterface FrameProps extends Required<Pick<IframeOptions, 'attributes'>> {\n loading: boolean\n reloading: boolean\n setLoading: (loading: boolean) => void\n setReloading: (reloading: boolean) => void\n iframeSize: IframeSizeKey\n url: URL | undefined\n}\nfunction Frame(props: FrameProps & {ref?: React.Ref<HTMLIFrameElement>}) {\n const {\n loading,\n setLoading,\n iframeSize,\n attributes,\n reloading,\n url,\n setReloading,\n ref: iframe,\n } = props\n\n function handleIframeLoad() {\n setLoading(false)\n setReloading(false)\n // Run onLoad from attributes\n if (attributes.onLoad && typeof attributes.onLoad === 'function') {\n attributes.onLoad()\n }\n }\n\n return (\n <Flex align=\"center\" justify=\"center\" style={{height: '100%', position: 'relative'}}>\n <AnimatePresence>\n {!url ||\n (loading && (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={spinnerVariants}\n justify=\"center\"\n align=\"center\"\n style={{inset: '0', position: 'absolute'}}\n >\n <Loading iframeSize={iframeSize} />\n </MotionFlex>\n ))}\n </AnimatePresence>\n {url && (\n <motion.iframe\n ref={iframe}\n title=\"preview\"\n frameBorder=\"0\"\n style={{maxHeight: '100%'}}\n src={url.toString()}\n initial={['background', iframeSize]}\n variants={iframeVariants}\n animate={[\n loading ? 'background' : 'active',\n reloading ? 'reloading' : 'idle',\n iframeSize,\n ]}\n {...attributes}\n onLoad={handleIframeLoad}\n />\n )}\n </Flex>\n )\n}\n\nconst spinnerVariants = {\n initial: {opacity: 1},\n animate: {opacity: [0, 0, 1]},\n exit: {opacity: [1, 0, 0]},\n}\n\nconst iframeVariants = {\n ...sizes,\n desktop: {\n ...sizes.desktop,\n boxShadow: '0 0 0 0px var(--card-shadow-outline-color)',\n },\n mobile: {\n ...sizes.mobile,\n boxShadow: '0 0 0 1px var(--card-shadow-outline-color)',\n },\n background: {\n opacity: 0,\n scale: 1,\n },\n idle: {\n scale: 1,\n },\n reloading: {\n scale: [1, 1, 1, 0.98],\n },\n active: {\n opacity: [0, 0, 1],\n scale: 1,\n },\n}\n\nfunction Loading({iframeSize}: {iframeSize: IframeSizeKey}) {\n return (\n <Flex style={{...sizes[iframeSize]}} justify=\"center\" align=\"center\" direction=\"column\" gap={4}>\n <Spinner muted />\n <Text muted size={1}>\n Loading…\n </Text>\n </Flex>\n )\n}\n\nfunction ErrorCard({error}: {error: Error}) {\n return (\n <Card height=\"fill\">\n <Flex align=\"center\" height=\"fill\" justify=\"center\" padding={4} sizing=\"border\">\n <Container width={0}>\n <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n <Flex>\n <Box>\n <Text size={1}>\n <WarningOutlineIcon />\n </Text>\n </Box>\n <Stack flex={1} marginLeft={3} gap={3}>\n <Text as=\"h1\" size={1} weight=\"bold\">\n {error.name}\n </Text>\n <Text as=\"p\" muted size={1}>\n {error.message}\n </Text>\n </Stack>\n </Flex>\n </Card>\n </Container>\n </Flex>\n </Card>\n )\n}\n\n// https://github.com/pmndrs/suspend-react?tab=readme-ov-file#making-cache-keys-unique\nconst resolveUUID = Symbol()\n"],"names":["DisplayUrl","props","$","_c","t0","url","getRedirectTo","truncatedUrl","origin","location","pathname","search","t1","sizes","desktop","width","height","mobile","DEFAULT_SIZE","Toolbar","iframeSize","setIframeSize","reloading","showUrl","reloadButton","handleReload","validUrl","URL","input","useRef","push","pushToast","useToast","copy","useCopyToClipboard","for","position","pointerEvents","opacity","toString","t2","t3","whiteSpace","t4","t5","t6","t7","Symbol","t8","t9","t10","MobileDeviceIcon","t11","t12","t13","t14","RefreshIcon","t15","t16","t17","t18","t19","current","value","then","copied","closable","status","title","t20","CopyIcon","t21","t22","t23","t24","t25","window","open","undefined","t26","LaunchIcon","t27","t28","t29","copiedText","setCopiedText","useState","text","navigator","clipboard","console","warn","writeText","error","MotionFlex","motion","create","Flex","encodeStudioPerspective","studioPerspective","Array","isArray","join","Iframe","document","options","draft","published","displayed","defaultSize","reload","attributes","showDisplayUrl","key","basePath","useActiveWorkspace","activeWorkspace","urlRef","draftSnapshot","setDraftSnapshot","useEffect","currentUser","useCurrentUser","apiVersion","client","useClient","expiresAt","setExpiresAt","previewSecretRef","isResolvingUrl","startTransition","useTransition","perspectiveStack","selectedPerspectiveName","usePerspective","perspective","JSON","stringify","id","draft_0","urlProp","preview","secret","expiresAt_0","createPreviewSecret","href","getTime","url_0","definePreviewUrl","draftMode","enable","previewUrlSecret","previewSearchParam","studioBasePath","studioPreviewPerspective","url_1","timeout","setTimeout","Math","max","Date","now","clearTimeout","IframeInner","memo","userId","_key","prefersReducedMotion","usePrefersReducedMotion","suspend","resolveUUID","loading","setLoading","_reloading","setReloading","iframe","src","duration","button","Error","Frame","ref","onLoad","handleIframeLoad","spinnerVariants","inset","maxHeight","iframeVariants","initial","animate","exit","boxShadow","background","scale","idle","active","Loading","ErrorCard","name","message"],"mappings":";;;;;;;;;;;;;;;AAIO,SAAAA,WAAAC,OAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAAF,IAAA,CAAA,MAAAD,MAAAI,OAESD,KAAAE,cAAcL,MAAKI,GAAI,GAACH,EAAA,CAAA,IAAAD,MAAAI,KAAAH,OAAAE,MAAAA,KAAAF,EAAA,CAAA;AAApC,QAAAG,MAAYD,IADdG,eAEE,GAAUF,IAAGG,WAAYC,SAAQD,SAAvB,KAAsCH,IAAGG,MAAO,GAAGH,IAAGK,QAAS,GAAGL,IAAGM,MAAO;AACzE,MAAAC;AAAA,SAAAV,SAAAK,gBAGbK,yBAAC,MAAA,EAAW,MAAA,GAAgB,cAAA,YACzBL,UAAAA,aAAAA,CACH,GAAOL,OAAAK,cAAAL,OAAAU,MAAAA,KAAAV,EAAA,CAAA,GAFPU;AAEO;ACHJ,MAAMC,QAAmB;AAAA,EAC9BC,SAAS;AAAA,IACPC,OAAO;AAAA,IACPC,QAAQ;AAAA,EAAA;AAAA,EAEVC,QAAQ;AAAA,IACNF,OAAO;AAAA,IACPC,QAAQ;AAAA,EAAA;AAEZ,GAEaE,eAAe;AAWrB,SAAAC,QAAAlB,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAE;AAAAA,IAAAe;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAyFxB,OACzFyB,WAAiBrB,eAAesB,KAEhCC,QAAcC,OAA4B,IAAI,GAC9C;AAAA,IAAAC,MAAAC;AAAAA,EAAAA,IAA0BC,SAAAA,GAC1B,GAAAC,IAAA,IAAiBC,mBAAAA;AAAoB,MAAA9B;AAAAF,IAAA,CAAA,6BAAAiC,IAAA,2BAAA,KAMxB/B,KAAA;AAAA,IAAAgC,UAAW;AAAA,IAAUC,eAAiB;AAAA,IAAMC,SAAW;AAAA,EAAA,GAAEpC,OAAAE,MAAAA,KAAAF,EAAA,CAAA;AAAA,MAAAU;AAAAV,IAAA,CAAA,MAAAG,OAAAH,SAAAwB,YAEzDd,KAAAc,WAAWrB,IAAGkC,SAAAA,IAAd,IAA8BrC,OAAAG,KAAAH,OAAAwB,UAAAxB,OAAAU,MAAAA,KAAAV,EAAA,CAAA;AAAA,MAAAsC;AAAAtC,WAAAU,MAJvC4B,KAAA,oBAAA,YAAA,EACE,mBACO,OAAApC,IACFwB,KAAAA,OACE,OAAAhB,IACP,UAAA,IACU,UAAA,GAAA,CAAE,GACZV,OAAAU,IAAAV,OAAAsC,MAAAA,KAAAtC,EAAA,CAAA;AAAA,MAAAuC;AAAAvC,IAAA,CAAA,6BAAAiC,IAAA,2BAAA,KAO8BM,KAAA;AAAA,IAAAC,YAAa;AAAA,EAAA,GAASxC,OAAAuC,MAAAA,KAAAvC,EAAA,CAAA;AACzC,QAAAyC,KAAAvB,eAAe,WAAf,wBAAA;AAA2E,MAAAwB;AAAA1C,WAAAyC,MAD9EC,yBAAC,MAAA,EAAW,MAAA,GAAU,OAAAH,IACnBE,cACH,GAAOzC,OAAAyC,IAAAzC,OAAA0C,MAAAA,KAAA1C,EAAA,CAAA;AAMG,QAAA2C,MAACnB;AAAQ,MAAAoB;AAAA5C,IAAA,CAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KACTW,KAAA,CAAC,CAAC,GAAC5C,OAAA4C,MAAAA,KAAA5C,EAAA,CAAA;AAEP,QAAA8C,KAAA5B,eAAe,WAAf,YAAA;AAA6C,MAAA6B;AAAA/C,IAAA,EAAA,MAAAkB,cAAAlB,UAAAmB,iBAE1C4B,KAAAA,MAAM5B,cAAcD,eAAe,WAAf,YAAA,QAA8C,GAAClB,QAAAkB,YAAAlB,QAAAmB,eAAAnB,QAAA+C,MAAAA,KAAA/C,EAAA,EAAA;AAAA,MAAAgD;AAAAhD,IAAA,EAAA,MAAA2C,MAAA3C,UAAA8C,MAAA9C,EAAA,EAAA,MAAA+C,MAN9EC,0BAAC,QAAA,EACW,UAAAL,IACA,UAAAC,IACD,SAAA,GACH,MAAAE,IACAG,MAAAA,kBACG,SAAAF,IAAmE,GAC5E/C,QAAA2C,IAAA3C,QAAA8C,IAAA9C,QAAA+C,IAAA/C,QAAAgD,OAAAA,MAAAhD,EAAA,EAAA;AAAA,MAAAkD;AAAAlD,IAAA,EAAA,MAAAgD,OAAAhD,UAAA0C,MAlBNQ,0BAAC,MAAA,EAAW,OAAA,UAAc,KAAA,GACxB,8BAAC,SAAA,EACC,SAAA,IAEE,SAAAR,IAIO,SAAA,GACC,WAAA,gBAEVM,UAAAA,IAAAA,CAQF,GACF,GAAOhD,QAAAgD,KAAAhD,QAAA0C,IAAA1C,QAAAkD,OAAAA,MAAAlD,EAAA,EAAA;AAAA,MAAAmD;AAAAnD,IAAA,EAAA,MAAAqB,WAAArB,UAAAG,OAAAH,EAAA,EAAA,MAAAwB,YACQ2B,MAAA9B,WAAAG,gCAAwB,YAAA,EAAgBrB,IAAAA,CAAG,GAAIH,QAAAqB,SAAArB,QAAAG,KAAAH,QAAAwB,UAAAxB,QAAAmD,OAAAA,MAAAnD,EAAA,EAAA;AAAA,MAAAoD;AAAApD,YAAAmD,OAA9DC,MAAA,oBAAC,KAAA,EAAU,MAAA,GAAID,UAAAA,KAAgD,GAAMnD,QAAAmD,KAAAnD,QAAAoD,OAAAA,MAAApD,EAAA,EAAA;AAAA,MAAAqD;AAAArD,IAAA,EAAA,MAAAuB,gBAAAvB,EAAA,EAAA,MAAAsB,gBAAAtB,EAAA,EAAA,MAAAoB,aAAApB,UAAAwB,YAElE6B,MAAA/B,eACC,oBAAC,SAAA,EACC,SAAA,IAEE,6BAAC,MAAA,EAAW,MAAA,GAAU,OAAA;AAAA,IAAAkB,YAAa;AAAA,EAAA,GAChCpB,UAAAA,YAAA,oBAAA,SAAA,CACH,GAEO,SAAA,GAET,UAAA,oBAAC,QAAA,EACW,UAAA,CAACI,UACN,MAAA,SACK,UAAA,CAAC,CAAC,GACH,SAAA,GACH8B,MAAAA,aACGlC,SAAAA,WACE,cAAA,UACF,SAAA,MAAMG,aAAAA,GAAc,EAAA,CAEjC,IApBD,MAqBOvB,QAAAuB,cAAAvB,QAAAsB,cAAAtB,QAAAoB,WAAApB,QAAAwB,UAAAxB,QAAAqD,OAAAA,MAAArD,EAAA,EAAA;AAAA,MAAAuD;AAAAvD,IAAA,EAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KAIJsB,MAAA,oBAAC,MAAA,EAAW,MAAA,GAAU,OAAA;AAAA,IAAAf,YAAa;AAAA,EAAA,GAAW,sBAE9C,GAAOxC,QAAAuD,OAAAA,MAAAvD,EAAA,EAAA;AAMG,QAAAwD,OAAChC;AAAQ,MAAAiC;AAAAzD,IAAA,EAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KACTwB,MAAA,CAAC,CAAC,GAACzD,QAAAyD,OAAAA,MAAAzD,EAAA,EAAA;AAAA,MAAA0D;AAAA1D,IAAA,EAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KAEJyB,MAAA,CAAC,CAAC,GAAC1D,QAAA0D,OAAAA,MAAA1D,EAAA,EAAA;AAAA,MAAA2D;AAAA3D,IAAA,EAAA,MAAA+B,QAAA/B,UAAA6B,aAEH8B,MAAAA,MAAA;AACFjC,WAAKkC,SAAgBC,SAErB9B,KAAKL,MAAKkC,QAAQC,KAAM,EAACC,KAAMC,CAAAA,YAEhClC,UADEkC,SACQ;AAAA,MAAAC,UACE;AAAA,MAAIC,QACN;AAAA,MAASC,OACV;AAAA,IAAA,IAGC;AAAA,MAAAF,UACE;AAAA,MAAIC,QACN;AAAA,MAAOC,OACR;AAAA,IAAA,CALR,GAQIH,OACR;AAAA,EAAC,GACH/D,QAAA+B,MAAA/B,QAAA6B,WAAA7B,QAAA2D,OAAAA,MAAA3D,EAAA,EAAA;AAAA,MAAAmE;AAAAnE,IAAA,EAAA,MAAAwD,OAAAxD,UAAA2D,OAnCLQ,MAAA,oBAAC,SAAA,EACC,SAAA,IAEE,SAAAZ,KAIO,SAAA,GAET,8BAAC,QAAA,EACM,MAAA,SACK,UAAAC,KACA,UAAAC,KACJW,MAAAA,UACG,SAAAV,KACE,cAAA,YACF,SAAAC,KAmBR,EAAA,CAEL,GAAU3D,QAAAwD,KAAAxD,QAAA2D,KAAA3D,QAAAmE,OAAAA,MAAAnE,EAAA,EAAA;AAAA,MAAAqE;AAAArE,IAAA,EAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KAINoC,MAAA,oBAAC,MAAA,EAAW,MAAA,GAAU,OAAA;AAAA,IAAA7B,YAAa;AAAA,EAAA,GAAW,mCAE9C,GAAOxC,QAAAqE,OAAAA,MAAArE,EAAA,EAAA;AAMG,QAAAsE,OAAC9C;AAAQ,MAAA+C;AAAAvE,IAAA,EAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KACTsC,MAAA,CAAC,CAAC,GAACvE,QAAAuE,OAAAA,MAAAvE,EAAA,EAAA;AAAA,MAAAwE;AAAAxE,IAAA,EAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KAGHuC,MAAA,CAAC,CAAC,GAACxE,QAAAwE,OAAAA,MAAAxE,EAAA,EAAA;AAAA,MAAAyE;AAAAzE,IAAA,EAAA,MAAAG,OAAAH,UAAAwB,YAGJiD,MAAAjD,WAAA,MAAiBkD,OAAMC,KAAMxE,IAAGkC,SAAAA,CAAW,IAA3CuC,QAAwD5E,QAAAG,KAAAH,QAAAwB,UAAAxB,QAAAyE,OAAAA,MAAAzE,EAAA,EAAA;AAAA,MAAA6E;AAAA7E,IAAA,EAAA,MAAAsE,OAAAtE,UAAAyE,OAlBrEI,MAAA,oBAAC,SAAA,EACC,SAAA,IAEE,SAAAR,KAIO,SAAA,GACC,WAAA,cAEV,8BAAC,QAAA,EACW,UAAAC,KACA,UAAAC,KACJO,MAAAA,YACD,MAAA,SACK,UAAAN,KACL,MAAA,QACM,cAAA,yBACF,SAAAC,IAAAA,CAAwD,EAAA,CAErE,GAAUzE,QAAAsE,KAAAtE,QAAAyE,KAAAzE,QAAA6E,OAAAA,MAAA7E,EAAA,EAAA;AAAA,MAAA+E;AAAA/E,IAAA,EAAA,MAAAqD,OAAArD,UAAAmE,OAAAnE,EAAA,EAAA,MAAA6E,OAjFZE,MAAA,qBAAC,QAAW,OAAA,UAAc,KAAA,GACvB1B,UAAAA;AAAAA,IAAAA;AAAAA,IAsBDc;AAAAA,IAsCAU;AAAAA,EAAAA,GAqBF,GAAO7E,QAAAqD,KAAArD,QAAAmE,KAAAnE,QAAA6E,KAAA7E,QAAA+E,OAAAA,MAAA/E,EAAA,EAAA;AAAA,MAAAgF;AAAAhF,IAAA,EAAA,MAAAkD,OAAAlD,UAAAoD,OAAApD,EAAA,EAAA,MAAA+E,OA1GXC,0BAAC,MAAA,EAAc,YAAG,cAAA,IAChB,+BAAC,MAAA,EAAW,OAAA,UAAc,KAAA,GACxB9B,UAAAA;AAAAA,IAAAA;AAAAA,IAqBAE;AAAAA,IACA2B;AAAAA,EAAAA,GAmFF,EAAA,CACF,GAAO/E,QAAAkD,KAAAlD,QAAAoD,KAAApD,QAAA+E,KAAA/E,QAAAgF,OAAAA,MAAAhF,EAAA,EAAA;AAAA,MAAAiF;AAAA,SAAAjF,EAAA,EAAA,MAAAsC,MAAAtC,UAAAgF,OArHTC,uCACE3C,UAAAA;AAAAA,IAAAA;AAAAA,IAQA0C;AAAAA,EAAAA,EAAAA,CA4GO,GACNhF,QAAAsC,IAAAtC,QAAAgF,KAAAhF,QAAAiF,OAAAA,MAAAjF,EAAA,EAAA,GAtHHiF;AAsHG;AAQP,SAAAjD,qBAAA;AAAA,QAAAhC,IAAAC,EAAA,CAAA,GACE,CAAAiF,YAAAC,aAAA,IAAoCC,SAAsB,IAAI;AAAC,MAAAlF;AAAAF,IAAA,CAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KAE9B/B,YAAAmF,SAAA;AAC/B,QAAI,CAACC,WAASC;AACZC,aAAAA,QAAOC,KAAM,yBAAyB,GAC/B;AAIT,QAAA;AACE,aAAA,MAAMH,UAASC,UAAUG,UAAWL,IAAI,GACxCF,cAAcE,IAAI,GACX;AAAA,IAAI,SAAA3E,KAAA;AAEX8E,aAAAA,QAAOC,KAAM,eADNE,GAC0B,GACjCR,cAAc,IAAI,GACX;AAAA,IAAK;AAAA,EACb,GACFnF,OAAAE,MAAAA,KAAAF,EAAA,CAAA;AAhBD,QAAA+B,OAAqB7B;AAgBf,MAAAQ;AAAA,SAAAV,SAAAkF,cAECxE,KAAA,CAACwE,YAAYnD,IAAI,GAAC/B,OAAAkF,YAAAlF,OAAAU,MAAAA,KAAAV,EAAA,CAAA,GAAlBU;AAAkB;AC9G3B,MAAMkF,aAAaC,OAAOC,OAAOC,IAAI;AAWrC,SAASC,wBAAwBC,mBAA8C;AAC7E,SAAOC,MAAMC,QAAQF,iBAAiB,IAAIA,kBAAkBG,KAAK,GAAG,IAAIH;AAC1E;AAEO,SAAAI,OAAAtG,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAqG;AAAAA,IAAAC;AAAAA,EAAAA,IAA4BxG,OAC5ByG,QAAcF,SAAQE,SAAUF,SAAQG,aAAcH,SAAQI,WAE9D;AAAA,IAAAC,aAAAzG;AAAAA,IAAA0G;AAAAA,IAAAC;AAAAA,IAAAC,gBAAApG;AAAAA,IAAAqG;AAAAA,EAAAA,IAAqFR,SAA9EI,cAAAzG,OAAA0E,SAAA5D,eAAAd,IAAgD4G,iBAAApG,OAAAkE,SAAA,KAAAlE,IAGvDsG,WADkBC,sBACQC,iBAA2BF,YAApC,KACjBG,SAAexF,OAAO4E,QAAOpG,GAAI;AAAC,MAAAmC;AAAAtC,IAAA,CAAA,MAAAwG,SAAAxG,SAAA+G,OACiBzE,KAAAA,OAAO;AAAA,IAAAyE;AAAAA,IAAAP;AAAAA,EAAAA,IAAaxG,OAAAwG,OAAAxG,OAAA+G,KAAA/G,OAAAsC,MAAAA,KAAAtC,EAAA,CAAA;AAAvE,QAAA,CAAAoH,eAAAC,gBAAA,IAA0CjC,SAAS9C,EAAoB;AAAC,MAAAC,IAAAE;AAAAzC,IAAA,CAAA,MAAAuG,QAAApG,OAC9DoC,KAAAA,MAAA;AACR4E,WAAMvD,UAAW2C,QAAOpG;AAAAA,EAAV,GACbsC,KAAA,CAAC8D,QAAOpG,GAAI,GAACH,EAAA,CAAA,IAAAuG,QAAApG,KAAAH,OAAAuC,IAAAvC,OAAAyC,OAAAF,KAAAvC,EAAA,CAAA,GAAAyC,KAAAzC,EAAA,CAAA,IAFhBsH,UAAU/E,IAEPE,EAAa;AAChB,QAAA8E,cAAoBC,eAAAA;AAAgB,MAAA9E;AAAA1C,IAAA,CAAA,6BAAAiC,IAAA,2BAAA,KACXS,KAAA;AAAA,IAAA+E,YAAa;AAAA,EAAA,GAAazH,OAAA0C,MAAAA,KAAA1C,EAAA,CAAA;AAAnD,QAAA0H,SAAeC,UAAUjF,EAA0B,GACnD,CAAAkF,WAAAC,YAAA,IAAkCzC,SAAAA,GAClC0C,mBAAyBnG,OAA2BiD,MAAS,GAC7D,CAAAmD,gBAAAC,eAAA,IAA0CC,iBAC1C;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAoDC,eAAAA;AAAgB,MAAAzF;AAAA3C,IAAA,CAAA,MAAAkI,oBAAAlI,SAAAmI,2BAE3DxF,KAAA;AAAA,IAAAuF;AAAAA,IAAAC;AAAAA,EAAAA,GAGNnI,OAAAkI,kBAAAlI,OAAAmI,yBAAAnI,OAAA2C,MAAAA,KAAA3C,EAAA,CAAA;AAJH,QAAAqI,cACS1F;AAKR,MAAAC,IAAAE;AAAA9C,IAAA,EAAA,MAAAwG,SAAAxG,UAAAoH,iBAAApH,EAAA,EAAA,MAAA+G,OAESnE,KAAAA,MAAA;AACJ0F,SAAIC,UAAW;AAAA,MAAAxB;AAAAA,MAAAP;AAAAA,IAAAA,CAAY,MAAM8B,KAAIC,UAAWnB,aAAa,KAC/DY,gBAAgB,MAAMX,iBAAiB;AAAA,MAAAN;AAAAA,MAAAP;AAAAA,IAAAA,CAAY,CAAC;AAAA,EACrD,GACA1D,KAAA,CAAC0D,OAAOY,eAAeL,KAAKiB,eAAe,GAAChI,QAAAwG,OAAAxG,QAAAoH,eAAApH,QAAA+G,KAAA/G,QAAA4C,IAAA5C,QAAA8C,OAAAF,KAAA5C,EAAA,EAAA,GAAA8C,KAAA9C,EAAA,EAAA,IAJ/CsH,UAAU1E,IAIPE,EAA4C;AAAC,MAAAC;AAAA/C,IAAA,EAAA,MAAAgH,YAAAhH,UAAA0H,UAAA1H,EAAA,EAAA,MAAAuH,aAAAiB,MAAAxI,UAAAqI,eAG9CtF,YAAA0F,YAAA;AACE,QAAI,OAAOlI,WAAa;AAAW;AAGnC,UAAAmI,UAAgBvB,OAAMvD;AACtB,QAAI,OAAO8E,WAAY;AAAQ,aACtB,IAAIjH,IAAIiH,SAASnI,SAAQD,MAAO;AAEzC,QAAI,OAAOoI,WAAY,YAAU;AAC/B,YAAAvI,MAAY,MAAMuI,QAAQlC,SAAO6B,WAAW;AAAC,aACtC,OAAOlI,OAAQ,WAAf,IAA8BsB,IAAItB,KAAKI,SAAQD,MAAa,IAA5DH;AAAAA,IAA6D;AAEtE,QAAI,OAAOuI,WAAY,UAAQ;AAC7B,YAAAC,UACE,OAAOD,QAAOC,WAAa,aAA3B,MACUD,QAAOC,QAASnC,SAAO6B,WAAW,IACxCK,QAAOC;AACb,UAAI,OAAOA,WAAY;AAAQ,eACtBA;AAET,UAAI,CAACb,iBAAgBlE,SAAQ;AAC3B,cAAA;AAAA,UAAAgF;AAAAA,UAAAhB,WAAAiB;AAAAA,QAAAA,IAA4B,MAAMC,oBAChCpB,QACA,6BACAnH,SAAQwI,MACRxB,aAAWiB,EACb;AACAV,yBAAgBlE,UAAWgF,QAC3BZ,gBAAgB,MAAMH,aAAaD,YAASoB,QAAAA,CAAU,CAAC;AAAA,MAAC;AAU1D,YAAAC,QAAY,MAPcC,iBAAiB;AAAA,QAAA5I,QACjCoI,QAAOpI,WAAY,gBAAgBC,SAAQD,SAAUoI,QAAOpI;AAAAA,QAAOqI;AAAAA,QAAAQ,WAEhE;AAAA,UAAAC,QACDV,QAAOS;AAAAA,QAAAA;AAAAA,MACjB,CACD,EACmC;AAAA,QAAAzB;AAAAA,QAAA2B,kBAEhBvB,iBAAgBlE;AAAAA,QAAQ0F,oBACtB;AAAA,QAAIC,gBACRvC;AAAAA,QAAQwC,0BACExD,wBAAwBqC,YAAWH,gBAAiB;AAAA,MAAA,CAC/E;AAAC,aACK,IAAIzG,IAAItB,OAAKI,SAAQD,MAAO;AAAA,IAAC;AAAA,EACrC,GAEFN,QAAAgH,UAAAhH,QAAA0H,QAAA1H,EAAA,EAAA,IAAAuH,aAAAiB,IAAAxI,QAAAqI,aAAArI,QAAA+C,MAAAA,KAAA/C,EAAA,EAAA,GACkBuH,aAAWiB;AAlDhC,QAAAiB,QAAY1G;AAmDX,MAAAC,KAAAE;AAAAlD,YAAA4H,aACS5E,MAAAA,MAAA;AACR,QAAI4E,WAAS;AACX,YAAA8B,UAAgBC,WACd,MAAA;AACE3B,wBAAgB,MAAMH,aAAajD,MAAS,CAAC,GAC7CkD,iBAAgBlE,UAAWgB;AAAAA,MAAH,GAE1BgF,KAAIC,IAAK,GAAGjC,YAAYkC,KAAIC,IAAAA,CAAM,CACpC;AAAC,aACM,MAAMC,aAAaN,OAAO;AAAA,IAAC;AAAA,EACnC,GAEAxG,MAAA,CAAC0E,SAAS,GAAC5H,QAAA4H,WAAA5H,QAAAgD,KAAAhD,QAAAkD,QAAAF,MAAAhD,EAAA,EAAA,GAAAkD,MAAAlD,EAAA,EAAA,IAZdsH,UAAUtE,KAYPE,GAAW;AAAC,MAAAC;AAAAnD,IAAA,EAAA,6BAAAiC,IAAA,2BAAA,KAGOkB,0BAAC,WAAmB,YAAA,UAAA,CAAS,GAAGnD,QAAAmD,OAAAA,MAAAnD,EAAA,EAAA;AAE3C,QAAAoD,SAAGgE,cAAaL,GAAI,IAAIoB,2BAAA,OAAkC,IAUvD9E,MAAAkE,aAAWiB;AAAI,MAAAjF;AAAA,SAAAvD,UAAA6G,cAAA7G,EAAA,EAAA,MAAA2G,eAAA3G,EAAA,EAAA,MAAAoH,cAAAZ,SAAAxG,EAAA,EAAA,MAAAoH,cAAAL,OAAA/G,EAAA,EAAA,MAAA+H,kBAAA/H,EAAA,EAAA,MAAAqI,eAAArI,UAAA4G,UAAA5G,EAAA,EAAA,MAAA8G,kBAAA9G,EAAA,EAAA,MAAAoD,OAAApD,UAAAqD,OAAArD,EAAA,EAAA,MAAAyJ,SAZ3BlG,0BAAC,UAAA,EAAmB,UAAAJ,KAClB,UAAA,oBAAC,aAAA,EAEO,MAAAiE,cAAaL,KACJ,eAAAK,cAAaZ,OACvBrG,KAAAA,OACW4H,gBACJlB,YACCwB,aACA1B,aACLC,QACQE,gBACR,QAAAzD,IAAAA,GAVHD,GAUkB,EAAA,CAE3B,GAAWpD,QAAA6G,YAAA7G,QAAA2G,aAAA3G,EAAA,EAAA,IAAAoH,cAAAZ,OAAAxG,EAAA,EAAA,IAAAoH,cAAAL,KAAA/G,QAAA+H,gBAAA/H,QAAAqI,aAAArI,QAAA4G,QAAA5G,QAAA8G,gBAAA9G,QAAAoD,KAAApD,QAAAqD,KAAArD,QAAAyJ,OAAAzJ,QAAAuD,OAAAA,MAAAvD,EAAA,EAAA,GAdXuD;AAcW;AAaf,MAAM0G,cAAcC,KAAK,SAAAnK,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACvB;AAAA,IAAA8H;AAAAA,IAAApB,aAAAzG;AAAAA,IAAA0G;AAAAA,IAAAC,YAAAnG;AAAAA,IAAAoG,gBAAAxE;AAAAA,IAAA8E;AAAAA,IAAA+C;AAAAA,IAAAvC;AAAAA,IAAAS,aAAA9F;AAAAA,IAAA6H;AAAAA,EAAAA,IAWIrK,OATF4G,cAAAzG,OAAA0E,SAAA5D,eAAAd;AAA0B,MAAAuC;AAAAzC,WAAAU,MAE1B+B,KAAA/B,OAAAkE,SAAA,CAAA,IAAAlE,IAAeV,OAAAU,IAAAV,OAAAyC,MAAAA,KAAAzC,EAAA,CAAA;AAAf,QAAA6G,aAAApE,IACAqE,iBAAAxE,OAAAsC,SAAA,KAAAtC,IAIa;AAAA,IAAA6F;AAAAA,IAAAD;AAAAA,EAAAA,IAAA3F,IAGf,CAAArB,YAAAC,aAAA,IAAoCiE,SAASzE,QAAQgG,WAAW,IAAnBA,cAAA3F,YAAiD,GAE9FqJ,uBAA6BC,wBAAAA;AAAyB,MAAA5H;AAAA1C,IAAA,CAAA,MAAAoH,iBAAApH,SAAAD,SAGpD2C,KAAAA,MAAM3C,MAAKI,IAAKiH,aAAa,GAACpH,OAAAoH,eAAApH,OAAAD,OAAAC,OAAA0C,MAAAA,KAAA1C,EAAA,CAAA;AAAA,MAAA2C;AAAA3C,IAAA,CAAA,MAAAoK,QAAApK,EAAA,CAAA,MAAAoH,iBAAApH,EAAA,CAAA,MAAA4H,aAAA5H,SAAAkI,oBAAAlI,EAAA,CAAA,MAAAmI,2BAAAnI,EAAA,EAAA,MAAA0C,MAAA1C,EAAA,EAAA,MAAAmK,UADpBxH,KAAA4H,QACV7H,IACA,CAEE,6BACA0E,eACAe,yBACAD,kBACAiC,QACAvC,WACAwC,MACAI,WAAW,CAEf,GAACxK,OAAAoK,MAAApK,OAAAoH,eAAApH,OAAA4H,WAAA5H,OAAAkI,kBAAAlI,OAAAmI,yBAAAnI,QAAA0C,IAAA1C,QAAAmK,QAAAnK,QAAA2C,MAAAA,KAAA3C,EAAA,EAAA;AAbD,QAAAG,MAAYwC,IAeZ,CAAA8H,SAAAC,UAAA,IAA8BtF,SAAS,EAAI,GAC3C,CAAAuF,YAAAC,YAAA,IAAmCxF,SAAS,EAAK,GACjDhE,YAAkBuJ,cAAA5C,gBAElB8C,SAAelJ,OAA0B,IAAI;AAAC,MAAAiB;AAAA5C,IAAA,EAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KAEbW,KAAAA,MAAA;AAC/B,QAAI,CAACiI,QAAMjH;AAAS;AAKpB,UAAA;AAAA,MAAAkH;AAAAA,IAAAA,IAAcD,OAAMjH;AACpBiH,WAAMjH,QAAQkH,MAAOA,KAErBF,aAAa,EAAI;AAAA,EAAC,GACnB5K,QAAA4C,MAAAA,KAAA5C,EAAA,EAAA;AAVD,QAAAuB,eAAqBqB;AAUf,MAAAE;AAAA9C,YAAAqK,wBAGsBvH,KAAAuH,uBAAA;AAAA,IAAAU,UAAkC;AAAA,EAAA,IAAlCnG,QAAgD5E,QAAAqK,sBAAArK,QAAA8C,MAAAA,KAAA9C,EAAA,EAAA;AAAA,MAAA+C;AAAA/C,IAAA,EAAA,6BAAAiC,IAAA,2BAAA,KACxCc,KAAA;AAAA,IAAAjC,QAAS;AAAA,EAAA,GAAOd,QAAA+C,MAAAA,KAAA/C,EAAA,EAAA;AAO9B,QAAAgD,MAAA,CAAC,CAAC4D,QAAMoE;AAAQ,MAAA9H;AAAAlD,IAAA,EAAA,MAAAkB,cAAAlB,EAAA,EAAA,MAAAoB,aAAApB,EAAA,EAAA,MAAA8G,kBAAA9G,EAAA,EAAA,MAAAgD,OAAAhD,UAAAG,OANhC+C,0BAAC,SAAA,EACM/C,KACOe,YACDE,WACID,eACN2F,SAAAA,gBACK,cAAA9D,KACAzB,aAAAA,CAAY,GAC1BvB,QAAAkB,YAAAlB,QAAAoB,WAAApB,QAAA8G,gBAAA9G,QAAAgD,KAAAhD,QAAAG,KAAAH,QAAAkD,OAAAA,MAAAlD,EAAA,EAAA;AAAA,MAAAmD;AAAAnD,IAAA,EAAA,MAAA6G,cAAA7G,EAAA,EAAA,MAAAkB,cAAAlB,EAAA,EAAA,MAAAyK,WAAAzK,EAAA,EAAA,MAAAoB,aAAApB,UAAAG,OACDgD,MAAAhD,eAAe8K,QACd,oBAAC,WAAA,EAAiB9K,OAAAA,IAAAA,CAAG,IAErB,oBAAC,MAAA,EAAU,MAAA,eAAqB,OAAA;AAAA,IAAAW,QAAS;AAAA,EAAA,GACvC,UAAA,oBAAC,OAAA,EACM+J,KAAAA,QACIJ,SACErJ,WACCF,YACE0J,cACFF,YACPvK,KACO0G,YAAU,EAAA,CAE1B,GACD7G,QAAA6G,YAAA7G,QAAAkB,YAAAlB,QAAAyK,SAAAzK,QAAAoB,WAAApB,QAAAG,KAAAH,QAAAmD,OAAAA,MAAAnD,EAAA,EAAA;AAAA,MAAAoD;AAAApD,IAAA,EAAA,MAAAkD,OAAAlD,UAAAmD,OAzBHC,MAAA,qBAAC,MAAA,EAAe,WAAA,UAAgB,OAAAL,IAC9BG,UAAAA;AAAAA,IAAAA;AAAAA,IASCC;AAAAA,EAAAA,EAAAA,CAgBH,GAAOnD,QAAAkD,KAAAlD,QAAAmD,KAAAnD,QAAAoD,OAAAA,MAAApD,EAAA,EAAA;AAAA,MAAAqD;AAAA,SAAArD,EAAA,EAAA,MAAAoD,OAAApD,UAAA8C,MA3BTO,MAAA,oBAAC,cAAA,EAAyB,YAAAP,IACxBM,UAAAA,IAAAA,CA2BF,GAAepD,QAAAoD,KAAApD,QAAA8C,IAAA9C,QAAAqD,OAAAA,MAAArD,EAAA,EAAA,GA5BfqD;AA4Be,CAElB;AAUD,SAAA6H,MAAAnL,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACE;AAAA,IAAAwK;AAAAA,IAAAC;AAAAA,IAAAxJ;AAAAA,IAAA2F;AAAAA,IAAAzF;AAAAA,IAAAjB;AAAAA,IAAAyK;AAAAA,IAAAO,KAAAN;AAAAA,EAAAA,IASI9K;AAAK,MAAAG;AAAAF,IAAA,CAAA,MAAA6G,cAAA7G,SAAA0K,cAAA1K,EAAA,CAAA,MAAA4K,gBAET1K,gBAAA;AACEwK,eAAW,EAAK,GAChBE,aAAa,EAAK,GAEd/D,WAAUuE,UAAW,OAAOvE,WAAUuE,UAAY,cACpDvE,WAAUuE,OAAAA;AAAAA,EACX,GACFpL,OAAA6G,YAAA7G,OAAA0K,YAAA1K,OAAA4K,cAAA5K,OAAAE,MAAAA,KAAAF,EAAA,CAAA;AAPD,QAAAqL,mBAAAnL;AAOC,MAAAQ;AAAAV,IAAA,CAAA,6BAAAiC,IAAA,2BAAA,KAG8CvB,KAAA;AAAA,IAAAI,QAAS;AAAA,IAAMoB,UAAY;AAAA,EAAA,GAAWlC,OAAAU,MAAAA,KAAAV,EAAA,CAAA;AAAA,MAAAsC;AAAAtC,IAAA,CAAA,MAAAkB,cAAAlB,SAAAyK,WAAAzK,EAAA,CAAA,MAAAG,OAE9EmC,KAAA,CAACnC,OACCsK,WACC,oBAAC,YAAA,EACS,SAAA,WACA,SAAA,WACH,MAAA,QACKa,UAAAA,iBACF,SAAA,UACF,OAAA,UACC,OAAA;AAAA,IAAAC,OAAQ;AAAA,IAAGrJ,UAAY;AAAA,EAAA,GAE9B,UAAA,oBAAC,SAAA,EAAoBhB,WAAAA,CAAU,EAAA,CACjC,GACAlB,OAAAkB,YAAAlB,OAAAyK,SAAAzK,OAAAG,KAAAH,OAAAsC,MAAAA,KAAAtC,EAAA,CAAA;AAAA,MAAAuC;AAAAvC,WAAAsC,MAdNC,KAAA,oBAAC,mBACED,UAAAA,GAAAA,CAcH,GAAkBtC,OAAAsC,IAAAtC,QAAAuC,MAAAA,KAAAvC,EAAA,EAAA;AAAA,MAAAyC;AAAAzC,IAAA,EAAA,MAAA6G,cAAA7G,EAAA,EAAA,MAAAqL,oBAAArL,EAAA,EAAA,MAAA6K,UAAA7K,UAAAkB,cAAAlB,EAAA,EAAA,MAAAyK,WAAAzK,EAAA,EAAA,MAAAoB,aAAApB,EAAA,EAAA,MAAAG,OACjBsC,KAAAtC,OACC,qCACO0K,aACC,OAAA,WACM,aAAA,KACL,OAAA;AAAA,IAAAW,WAAY;AAAA,EAAA,GACd,KAAArL,IAAGkC,SAAAA,GACC,SAAA,CAAC,cAAcnB,UAAU,GACxBuK,UAAAA,gBACD,SAAA,CACPhB,UAAA,eAAA,UACArJ,YAAA,cAAA,QACAF,UAAU,GACX,GACG2F,YACIwE,QAAAA,iBAAAA,CAAgB,GAE3BrL,QAAA6G,YAAA7G,QAAAqL,kBAAArL,QAAA6K,QAAA7K,QAAAkB,YAAAlB,QAAAyK,SAAAzK,QAAAoB,WAAApB,QAAAG,KAAAH,QAAAyC,MAAAA,KAAAzC,EAAA,EAAA;AAAA,MAAA0C;AAAA,SAAA1C,EAAA,EAAA,MAAAuC,MAAAvC,UAAAyC,MAlCHC,KAAA,qBAAC,QAAW,OAAA,UAAiB,SAAA,UAAgB,OAAAhC,IAC3C6B,UAAAA;AAAAA,IAAAA;AAAAA,IAgBCE;AAAAA,EAAAA,EAAAA,CAkBH,GAAOzC,QAAAuC,IAAAvC,QAAAyC,IAAAzC,QAAA0C,MAAAA,KAAA1C,EAAA,EAAA,GAnCP0C;AAmCO;AAIX,MAAM4I,kBAAkB;AAAA,EACtBI,SAAS;AAAA,IAACtJ,SAAS;AAAA,EAAA;AAAA,EACnBuJ,SAAS;AAAA,IAACvJ,SAAS,CAAC,GAAG,GAAG,CAAC;AAAA,EAAA;AAAA,EAC3BwJ,MAAM;AAAA,IAACxJ,SAAS,CAAC,GAAG,GAAG,CAAC;AAAA,EAAA;AAC1B,GAEMqJ,iBAAiB;AAAA,EACrB,GAAG9K;AAAAA,EACHC,SAAS;AAAA,IACP,GAAGD,MAAMC;AAAAA,IACTiL,WAAW;AAAA,EAAA;AAAA,EAEb9K,QAAQ;AAAA,IACN,GAAGJ,MAAMI;AAAAA,IACT8K,WAAW;AAAA,EAAA;AAAA,EAEbC,YAAY;AAAA,IACV1J,SAAS;AAAA,IACT2J,OAAO;AAAA,EAAA;AAAA,EAETC,MAAM;AAAA,IACJD,OAAO;AAAA,EAAA;AAAA,EAET3K,WAAW;AAAA,IACT2K,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI;AAAA,EAAA;AAAA,EAEvBE,QAAQ;AAAA,IACN7J,SAAS,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB2J,OAAO;AAAA,EAAA;AAEX;AAEA,SAAAG,QAAAhM,IAAA;AAAA,QAAAF,IAAAC,EAAA,CAAA,GAAiB;AAAA,IAAAiB;AAAAA,EAAAA,IAAAhB,IAEIQ,KAAAC,MAAMO,UAAU;AAAC,MAAAoB;AAAAtC,WAAAU,MAArB4B,KAAA;AAAA,IAAA,GAAI5B;AAAAA,EAAAA,GAAkBV,OAAAU,IAAAV,OAAAsC,MAAAA,KAAAtC,EAAA,CAAA;AAAA,MAAAuC,IAAAE;AAAAzC,IAAA,CAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KACjCM,yBAAC,SAAA,EAAQ,OAAA,GAAA,CAAK,GACdE,KAAA,oBAAC,QAAK,OAAA,IAAY,MAAA,GAAG,2BAErB,GAAOzC,OAAAuC,IAAAvC,OAAAyC,OAAAF,KAAAvC,EAAA,CAAA,GAAAyC,KAAAzC,EAAA,CAAA;AAAA,MAAA0C;AAAA,SAAA1C,SAAAsC,MAJTI,0BAAC,MAAA,EAAY,OAAAJ,IAAgC,SAAA,UAAe,OAAA,UAAmB,WAAA,UAAc,KAAA,GAC3FC,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,EAAAA,EAAAA,CAGF,GAAOzC,OAAAsC,IAAAtC,OAAA0C,MAAAA,KAAA1C,EAAA,CAAA,GALP0C;AAKO;AAIX,SAAAyJ,UAAAjM,IAAA;AAAA,QAAAF,IAAAC,EAAA,CAAA,GAAmB;AAAA,IAAA0F;AAAAA,EAAAA,IAAAzF;AAAuB,MAAAQ;AAAAV,IAAA,CAAA,MAAA6C,uBAAAZ,IAAA,2BAAA,KAO5BvB,yBAAC,KAAA,EACC,UAAA,oBAAC,MAAA,EAAW,MAAA,GACV,UAAA,oBAAC,oBAAA,CAAA,CAAkB,EAAA,CACrB,EAAA,CACF,GAAMV,OAAAU,MAAAA,KAAAV,EAAA,CAAA;AAAA,MAAAsC;AAAAtC,IAAA,CAAA,MAAA2F,MAAAyG,QAEJ9J,KAAA,oBAAC,MAAA,EAAQ,IAAA,MAAW,MAAA,GAAU,QAAA,QAC3BqD,UAAAA,MAAKyG,KAAAA,CACR,GAAOpM,EAAA,CAAA,IAAA2F,MAAAyG,MAAApM,OAAAsC,MAAAA,KAAAtC,EAAA,CAAA;AAAA,MAAAuC;AAAAvC,IAAA,CAAA,MAAA2F,MAAA0G,WACP9J,KAAA,oBAAC,MAAA,EAAQ,IAAA,KAAI,OAAA,IAAY,MAAA,GACtBoD,UAAAA,MAAK0G,QAAAA,CACR,GAAOrM,EAAA,CAAA,IAAA2F,MAAA0G,SAAArM,OAAAuC,MAAAA,KAAAvC,EAAA,CAAA;AAAA,MAAAyC;AAAA,SAAAzC,EAAA,CAAA,MAAAsC,MAAAtC,SAAAuC,MAhBnBE,KAAA,oBAAC,MAAA,EAAY,QAAA,QACX,UAAA,oBAAC,QAAW,OAAA,UAAgB,QAAA,QAAe,SAAA,UAAkB,YAAU,QAAA,UACrE,8BAAC,WAAA,EAAiB,OAAA,GAChB,UAAA,oBAAC,MAAA,EAAc,SAAA,GAAW,QAAA,GAAW,WAAQ,MAAA,WAC3C,+BAAC,MAAA,EACC/B,UAAAA;AAAAA,IAAAA;AAAAA,yBAKC,OAAA,EAAY,MAAA,GAAe,YAAA,GAAQ,KAAA,GAClC4B,UAAAA;AAAAA,MAAAA;AAAAA,MAGAC;AAAAA,IAAAA,EAAAA,CAGF;AAAA,EAAA,GACF,EAAA,CACF,GACF,EAAA,CACF,EAAA,CACF,GAAOvC,OAAAsC,IAAAtC,OAAAuC,IAAAvC,OAAAyC,MAAAA,KAAAzC,EAAA,CAAA,GAtBPyC;AAsBO;AAKX,MAAM+H,cAAc3H,uBAAAA;"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["getRedirectTo","Text","useMemo","DisplayUrl","props","$","_c","t0","url","truncatedUrl","origin","location","pathname","search","t1","CopyIcon","LaunchIcon","MobileDeviceIcon","RefreshIcon","Box","Button","Card","Flex","Text","Tooltip","useToast","useCallback","useRef","useState","DisplayUrl","IframeSizeKey","SizeProps","sizes","desktop","width","height","mobile","DEFAULT_SIZE","ToolbarProps","url","URL","Error","iframeSize","setIframeSize","size","showUrl","reloading","reloadButton","handleReload","Toolbar","props","$","_c","validUrl","input","push","pushToast","copy","useCopyToClipboard","t0","Symbol","for","position","pointerEvents","opacity","t1","toString","t2","t3","whiteSpace","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","current","value","then","copied","closable","status","title","t20","t21","t22","t23","t24","t25","window","open","undefined","t26","t27","t28","t29","CopiedValue","CopyFn","text","Promise","copiedText","setCopiedText","navigator","clipboard","console","warn","writeText","error","WarningOutlineIcon","createPreviewSecret","definePreviewUrl","Box","Card","Container","Flex","Spinner","Stack","Text","usePrefersReducedMotion","AnimatePresence","motion","MotionConfig","HTMLAttributeReferrerPolicy","memo","Suspense","useCallback","useEffect","useMemo","useRef","useState","useTransition","SanityDocument","useActiveWorkspace","useClient","useCurrentUser","usePerspective","suspend","DEFAULT_SIZE","sizes","Toolbar","IframeSizeKey","UrlResolver","document","perspective","Pick","ReturnType","Error","Promise","IframeOptions","key","url","origin","preview","draftMode","defaultSize","showDisplayUrl","reload","button","attributes","Partial","allow","referrerPolicy","sandbox","onLoad","MotionFlex","create","IframeProps","displayed","draft","published","options","encodeStudioPerspective","studioPerspective","Array","isArray","join","Iframe","props","$","_c","t0","t1","undefined","workspace","basePath","activeWorkspace","urlRef","t2","draftSnapshot","setDraftSnapshot","t3","t4","current","currentUser","t5","Symbol","for","apiVersion","client","expiresAt","setExpiresAt","previewSecretRef","isResolvingUrl","startTransition","perspectiveStack","selectedPerspectiveName","t6","t7","t8","JSON","stringify","t9","id","draft_0","location","urlProp","URL","secret","expiresAt_0","href","getTime","resolvePreviewUrl","previewMode","enable","url_0","previewUrlSecret","previewSearchParam","studioBasePath","studioPreviewPerspective","url_1","t10","t11","timeout","setTimeout","Math","max","Date","now","clearTimeout","t12","t13","t14","t15","IframeInnerProps","Omit","Parameters","userId","_key","IframeInner","iframeSize","setIframeSize","prefersReducedMotion","resolveUUID","loading","setLoading","_reloading","setReloading","reloading","iframe","src","handleReload","duration","height","FrameProps","Required","Frame","ref","handleIframeLoad","position","spinnerVariants","inset","maxHeight","toString","iframeVariants","initial","opacity","animate","exit","desktop","boxShadow","mobile","background","scale","idle","active","Loading","ErrorCard","error","name","message"],"sources":["../src/DisplayUrl.tsx","../src/Toolbar.tsx","../src/Iframe.tsx"],"sourcesContent":["import {getRedirectTo} from '@sanity/preview-url-secret/get-redirect-to'\nimport {Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function DisplayUrl(props: {url: URL}) {\n const truncatedUrl = useMemo(() => {\n const url = getRedirectTo(props.url)\n return `${url.origin === location.origin ? '' : url.origin}${url.pathname}${url.search}`\n }, [props.url])\n\n return (\n <Text size={0} textOverflow=\"ellipsis\">\n {truncatedUrl}\n </Text>\n )\n}\n","import {CopyIcon} from '@sanity/icons/Copy'\nimport {LaunchIcon} from '@sanity/icons/Launch'\nimport {MobileDeviceIcon} from '@sanity/icons/MobileDevice'\nimport {RefreshIcon} from '@sanity/icons/Refresh'\nimport {Box, Button, Card, Flex, Text, Tooltip, useToast} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\n\nimport {DisplayUrl} from './DisplayUrl'\nimport type {IframeSizeKey, SizeProps} from './types'\n\nexport const sizes: SizeProps = {\n desktop: {\n width: '100%',\n height: '100%',\n },\n mobile: {\n width: 414,\n height: 746,\n },\n}\n\nexport const DEFAULT_SIZE = 'desktop'\n\nexport interface ToolbarProps {\n url: URL | Error | undefined\n iframeSize: IframeSizeKey\n setIframeSize: (size: IframeSizeKey) => void\n showUrl: boolean\n reloading: boolean\n reloadButton: boolean\n handleReload: () => void\n}\nexport function Toolbar(props: ToolbarProps) {\n const {url, iframeSize, setIframeSize, reloading, showUrl, reloadButton, handleReload} = props\n const validUrl = url instanceof URL\n\n const input = useRef<HTMLTextAreaElement>(null)\n const {push: pushToast} = useToast()\n const [, copy] = useCopyToClipboard()\n\n return (\n <>\n <textarea\n aria-hidden\n style={{position: 'absolute', pointerEvents: 'none', opacity: 0}}\n ref={input}\n value={validUrl ? url.toString() : ''}\n readOnly\n tabIndex={-1}\n />\n <Card padding={2} borderBottom>\n <Flex align=\"center\" gap={2}>\n <Flex align=\"center\" gap={1}>\n <Tooltip\n animate\n content={\n <Text size={1} style={{whiteSpace: 'nowrap'}}>\n {iframeSize === 'mobile' ? 'Exit mobile preview' : 'Preview mobile viewport'}\n </Text>\n }\n padding={2}\n placement=\"bottom-start\"\n >\n <Button\n disabled={!validUrl}\n fontSize={[1]}\n padding={2}\n mode={iframeSize === 'mobile' ? 'default' : 'ghost'}\n icon={MobileDeviceIcon}\n onClick={() => setIframeSize(iframeSize === 'mobile' ? 'desktop' : 'mobile')}\n />\n </Tooltip>\n </Flex>\n <Box flex={1}>{showUrl && validUrl && <DisplayUrl url={url} />}</Box>\n <Flex align=\"center\" gap={1}>\n {reloadButton ? (\n <Tooltip\n animate\n content={\n <Text size={1} style={{whiteSpace: 'nowrap'}}>\n {reloading ? 'Reloading…' : 'Reload'}\n </Text>\n }\n padding={2}\n >\n <Button\n disabled={!validUrl}\n mode=\"bleed\"\n fontSize={[1]}\n padding={2}\n icon={RefreshIcon}\n loading={reloading}\n aria-label=\"Reload\"\n onClick={() => handleReload()}\n />\n </Tooltip>\n ) : null}\n <Tooltip\n animate\n content={\n <Text size={1} style={{whiteSpace: 'nowrap'}}>\n Copy URL\n </Text>\n }\n padding={2}\n >\n <Button\n mode=\"bleed\"\n disabled={!validUrl}\n fontSize={[1]}\n icon={CopyIcon}\n padding={[2]}\n aria-label=\"Copy URL\"\n onClick={() => {\n if (!input?.current?.value) return\n\n void copy(input.current.value).then((copied) => {\n if (copied) {\n pushToast({\n closable: true,\n status: 'success',\n title: 'The URL is copied to the clipboard',\n })\n } else {\n pushToast({\n closable: true,\n status: 'error',\n title: 'Failed to copy the URL to the clipboard',\n })\n }\n return copied\n })\n }}\n />\n </Tooltip>\n <Tooltip\n animate\n content={\n <Text size={1} style={{whiteSpace: 'nowrap'}}>\n Open URL in a new tab\n </Text>\n }\n padding={2}\n placement=\"bottom-end\"\n >\n <Button\n disabled={!validUrl}\n fontSize={[1]}\n icon={LaunchIcon}\n mode=\"ghost\"\n paddingY={[2]}\n text=\"Open\"\n aria-label=\"Open URL in a new tab\"\n onClick={validUrl ? () => window.open(url.toString()) : undefined}\n />\n </Tooltip>\n </Flex>\n </Flex>\n </Card>\n </>\n )\n}\n\ntype CopiedValue = string | null\n\ntype CopyFn = (text: string) => Promise<boolean>\n\nfunction useCopyToClipboard(): [CopiedValue, CopyFn] {\n const [copiedText, setCopiedText] = useState<CopiedValue>(null)\n\n const copy: CopyFn = useCallback(async (text) => {\n if (!navigator?.clipboard) {\n console.warn('Clipboard not supported')\n return false\n }\n\n // Try to save to clipboard then save it in the state if worked\n try {\n await navigator.clipboard.writeText(text)\n setCopiedText(text)\n return true\n } catch (error) {\n console.warn('Copy failed', error)\n setCopiedText(null)\n return false\n }\n }, [])\n\n return [copiedText, copy]\n}\n","import {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {createPreviewSecret} from '@sanity/preview-url-secret/create-secret'\nimport {definePreviewUrl} from '@sanity/preview-url-secret/define-preview-url'\nimport {Box, Card, Container, Flex, Spinner, Stack, Text, usePrefersReducedMotion} from '@sanity/ui'\nimport {AnimatePresence, motion, MotionConfig} from 'motion/react'\nimport type {HTMLAttributeReferrerPolicy} from 'react'\nimport {\n memo,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n} from 'react'\nimport {\n type SanityDocument,\n useActiveWorkspace,\n useClient,\n useCurrentUser,\n usePerspective,\n} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {DEFAULT_SIZE, sizes, Toolbar} from './Toolbar'\nimport type {IframeSizeKey} from './types'\n\nexport type UrlResolver = (\n document: SanityDocument | null,\n perspective: Pick<\n ReturnType<typeof usePerspective>,\n 'selectedPerspectiveName' | 'perspectiveStack'\n >,\n) => string | Error | undefined | Promise<string | Error | undefined>\n\nexport type {IframeSizeKey}\n\nexport interface IframeOptions {\n /**\n * If you have multiple iframe instances side-by-side you need to give each a unique key.\n */\n key?: string\n url:\n | string\n | UrlResolver\n | {\n /**\n * The URL origin of where the preview is hosted, for example `https://example.com`.\n * If it's an embedded Studio then set it to `'same-origin'`.\n */\n origin: 'same-origin' | (string & {})\n /**\n * The route to redirect to after enabling Draft Mode.\n * If you don't have enough data to build the URL, return an `Error` instance to show an error message.\n * @example `return new Error('Missing slug')`\n * To prolong the loading state, return `undefined`\n */\n preview: string | UrlResolver\n /**\n * The route that enables Draft Mode\n * @example '/api/draft'\n */\n draftMode: string\n }\n defaultSize?: IframeSizeKey\n showDisplayUrl?: boolean\n reload?: {\n button?: boolean\n }\n attributes?: Partial<{\n allow: string\n referrerPolicy: HTMLAttributeReferrerPolicy | undefined\n sandbox: string\n onLoad: () => void\n }>\n}\n\nconst MotionFlex = motion.create(Flex)\n\nexport interface IframeProps {\n document: {\n displayed: SanityDocument\n draft: SanityDocument | null\n published: SanityDocument | null\n }\n options: IframeOptions\n}\n\nfunction encodeStudioPerspective(studioPerspective: string[] | string): string {\n return Array.isArray(studioPerspective) ? studioPerspective.join(',') : studioPerspective\n}\n\nexport function Iframe(props: IframeProps): React.JSX.Element {\n const {document, options} = props\n const draft = document.draft || document.published || document.displayed\n\n const {defaultSize = DEFAULT_SIZE, reload, attributes, showDisplayUrl = true, key} = options\n\n const workspace = useActiveWorkspace()\n const basePath = workspace?.activeWorkspace?.basePath || '/'\n const urlRef = useRef(options.url)\n const [draftSnapshot, setDraftSnapshot] = useState(() => ({key, draft}))\n useEffect(() => {\n urlRef.current = options.url\n }, [options.url])\n const currentUser = useCurrentUser()\n const client = useClient({apiVersion: '2023-10-16'})\n const [expiresAt, setExpiresAt] = useState<number | undefined>()\n const previewSecretRef = useRef<string | undefined>(undefined)\n const [isResolvingUrl, startTransition] = useTransition()\n const {perspectiveStack, selectedPerspectiveName} = usePerspective()\n const perspective = useMemo(\n () => ({\n perspectiveStack,\n selectedPerspectiveName,\n }),\n [perspectiveStack, selectedPerspectiveName],\n )\n\n useEffect(() => {\n if (JSON.stringify({key, draft}) !== JSON.stringify(draftSnapshot)) {\n startTransition(() => setDraftSnapshot({key, draft}))\n }\n }, [draft, draftSnapshot, key, startTransition])\n\n const url = useCallback(\n async (draft: SanityDocument | null) => {\n if (typeof location === 'undefined') {\n return undefined\n }\n const urlProp = urlRef.current\n if (typeof urlProp === 'string') {\n return new URL(urlProp, location.origin)\n }\n if (typeof urlProp === 'function') {\n const url = await urlProp(draft, perspective)\n return typeof url === 'string' ? new URL(url, location.origin) : url\n }\n if (typeof urlProp === 'object') {\n const preview =\n typeof urlProp.preview === 'function'\n ? await urlProp.preview(draft, perspective)\n : urlProp.preview\n if (typeof preview !== 'string') {\n return preview\n }\n if (!previewSecretRef.current) {\n const {secret, expiresAt} = await createPreviewSecret(\n client,\n 'sanity-plugin-iframe-pane',\n location.href,\n currentUser?.id,\n )\n previewSecretRef.current = secret\n startTransition(() => setExpiresAt(expiresAt.getTime()))\n }\n\n const resolvePreviewUrl = definePreviewUrl({\n origin: urlProp.origin === 'same-origin' ? location.origin : urlProp.origin,\n preview,\n previewMode: {\n enable: urlProp.draftMode,\n },\n })\n const url = await resolvePreviewUrl({\n client,\n previewUrlSecret: previewSecretRef.current,\n previewSearchParam: null,\n studioBasePath: basePath,\n studioPreviewPerspective: encodeStudioPerspective(perspective.perspectiveStack),\n })\n return new URL(url, location.origin)\n }\n return undefined\n },\n [basePath, client, currentUser?.id, perspective, startTransition],\n )\n useEffect(() => {\n if (expiresAt) {\n const timeout = setTimeout(\n () => {\n startTransition(() => setExpiresAt(undefined))\n previewSecretRef.current = undefined\n },\n Math.max(0, expiresAt - Date.now()),\n )\n return () => clearTimeout(timeout)\n }\n return undefined\n }, [expiresAt])\n\n return (\n <Suspense fallback={<Loading iframeSize=\"desktop\" />}>\n <IframeInner\n key={`${draftSnapshot.key}-${selectedPerspectiveName || 'draft'}`}\n _key={draftSnapshot.key}\n draftSnapshot={draftSnapshot.draft}\n url={url}\n isResolvingUrl={isResolvingUrl}\n attributes={attributes}\n perspective={perspective}\n defaultSize={defaultSize}\n reload={reload}\n showDisplayUrl={showDisplayUrl}\n userId={currentUser?.id}\n />\n </Suspense>\n )\n}\n\nexport interface IframeInnerProps extends Omit<IframeOptions, 'url'> {\n url: (draftSnapshot: SanityDocument | null) => Promise<URL | Error | undefined>\n isResolvingUrl: boolean\n draftSnapshot: SanityDocument | null\n perspective: Parameters<UrlResolver>[1]\n userId?: string\n expiresAt?: number\n _key?: string\n}\nconst IframeInner = memo(function IframeInner(props: IframeInnerProps) {\n const {\n isResolvingUrl,\n defaultSize = DEFAULT_SIZE,\n reload,\n attributes = {},\n showDisplayUrl = true,\n draftSnapshot,\n userId,\n expiresAt,\n perspective: {selectedPerspectiveName, perspectiveStack},\n _key,\n } = props\n const [iframeSize, setIframeSize] = useState(sizes?.[defaultSize] ? defaultSize : DEFAULT_SIZE)\n\n const prefersReducedMotion = usePrefersReducedMotion()\n\n const url = suspend(\n () => props.url(draftSnapshot),\n [\n // Cache based on a few specific conditions\n 'sanity-plugin-iframe-pane',\n draftSnapshot,\n selectedPerspectiveName,\n perspectiveStack,\n userId,\n expiresAt,\n _key,\n resolveUUID,\n ],\n )\n\n const [loading, setLoading] = useState(true)\n const [_reloading, setReloading] = useState(false)\n const reloading = _reloading || isResolvingUrl\n\n const iframe = useRef<HTMLIFrameElement>(null)\n\n const handleReload = useCallback(() => {\n if (!iframe?.current) {\n return\n }\n\n // Funky way to reload an iframe without CORS issues\n const {src} = iframe.current\n iframe.current.src = src\n\n setReloading(true)\n }, [])\n\n return (\n <MotionConfig transition={prefersReducedMotion ? {duration: 0} : undefined}>\n <Flex direction=\"column\" style={{height: '100%'}}>\n <Toolbar\n url={url}\n iframeSize={iframeSize}\n reloading={reloading}\n setIframeSize={setIframeSize}\n showUrl={showDisplayUrl}\n reloadButton={!!reload?.button}\n handleReload={handleReload}\n />\n {url instanceof Error ? (\n <ErrorCard error={url} />\n ) : (\n <Card tone=\"transparent\" style={{height: '100%'}}>\n <Frame\n ref={iframe}\n loading={loading}\n reloading={reloading}\n iframeSize={iframeSize}\n setReloading={setReloading}\n setLoading={setLoading}\n url={url}\n attributes={attributes}\n />\n </Card>\n )}\n </Flex>\n </MotionConfig>\n )\n})\n\ninterface FrameProps extends Required<Pick<IframeOptions, 'attributes'>> {\n loading: boolean\n reloading: boolean\n setLoading: (loading: boolean) => void\n setReloading: (reloading: boolean) => void\n iframeSize: IframeSizeKey\n url: URL | undefined\n}\nfunction Frame(props: FrameProps & {ref?: React.Ref<HTMLIFrameElement>}) {\n const {\n loading,\n setLoading,\n iframeSize,\n attributes,\n reloading,\n url,\n setReloading,\n ref: iframe,\n } = props\n\n function handleIframeLoad() {\n setLoading(false)\n setReloading(false)\n // Run onLoad from attributes\n if (attributes.onLoad && typeof attributes.onLoad === 'function') {\n attributes.onLoad()\n }\n }\n\n return (\n <Flex align=\"center\" justify=\"center\" style={{height: '100%', position: 'relative'}}>\n <AnimatePresence>\n {!url ||\n (loading && (\n <MotionFlex\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n variants={spinnerVariants}\n justify=\"center\"\n align=\"center\"\n style={{inset: '0', position: 'absolute'}}\n >\n <Loading iframeSize={iframeSize} />\n </MotionFlex>\n ))}\n </AnimatePresence>\n {url && (\n <motion.iframe\n ref={iframe}\n title=\"preview\"\n frameBorder=\"0\"\n style={{maxHeight: '100%'}}\n src={url.toString()}\n initial={['background', iframeSize]}\n variants={iframeVariants}\n animate={[\n loading ? 'background' : 'active',\n reloading ? 'reloading' : 'idle',\n iframeSize,\n ]}\n {...attributes}\n onLoad={handleIframeLoad}\n />\n )}\n </Flex>\n )\n}\n\nconst spinnerVariants = {\n initial: {opacity: 1},\n animate: {opacity: [0, 0, 1]},\n exit: {opacity: [1, 0, 0]},\n}\n\nconst iframeVariants = {\n ...sizes,\n desktop: {\n ...sizes.desktop,\n boxShadow: '0 0 0 0px var(--card-shadow-outline-color)',\n },\n mobile: {\n ...sizes.mobile,\n boxShadow: '0 0 0 1px var(--card-shadow-outline-color)',\n },\n background: {\n opacity: 0,\n scale: 1,\n },\n idle: {\n scale: 1,\n },\n reloading: {\n scale: [1, 1, 1, 0.98],\n },\n active: {\n opacity: [0, 0, 1],\n scale: 1,\n },\n}\n\nfunction Loading({iframeSize}: {iframeSize: IframeSizeKey}) {\n return (\n <Flex style={{...sizes[iframeSize]}} justify=\"center\" align=\"center\" direction=\"column\" gap={4}>\n <Spinner muted />\n <Text muted size={1}>\n Loading…\n </Text>\n </Flex>\n )\n}\n\nfunction ErrorCard({error}: {error: Error}) {\n return (\n <Card height=\"fill\">\n <Flex align=\"center\" height=\"fill\" justify=\"center\" padding={4} sizing=\"border\">\n <Container width={0}>\n <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n <Flex>\n <Box>\n <Text size={1}>\n <WarningOutlineIcon />\n </Text>\n </Box>\n <Stack flex={1} marginLeft={3} gap={3}>\n <Text as=\"h1\" size={1} weight=\"bold\">\n {error.name}\n </Text>\n <Text as=\"p\" muted size={1}>\n {error.message}\n </Text>\n </Stack>\n </Flex>\n </Card>\n </Container>\n </Flex>\n </Card>\n )\n}\n\n// https://github.com/pmndrs/suspend-react?tab=readme-ov-file#making-cache-keys-unique\nconst resolveUUID = Symbol()\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sanity-plugin-iframe-pane",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.23",
|
|
4
4
|
"description": "Display any URL in a View Pane, along with helpful buttons to Copy the URL or open in a new tab",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -28,24 +28,23 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@sanity/icons": "^5.0.0",
|
|
31
|
-
"@sanity/preview-url-secret": "^4.0.
|
|
32
|
-
"@sanity/ui": "^3.3.
|
|
31
|
+
"@sanity/preview-url-secret": "^4.0.8",
|
|
32
|
+
"@sanity/ui": "^3.3.1",
|
|
33
33
|
"motion": "^12.42.2",
|
|
34
34
|
"suspend-react": "^0.1.3"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@sanity/
|
|
37
|
+
"@sanity/tsconfig": "^2.2.0",
|
|
38
|
+
"@sanity/tsdown-config": "^0.11.0",
|
|
38
39
|
"@types/node": "^24.13.2",
|
|
39
40
|
"@types/react": "^19.2.17",
|
|
40
41
|
"@types/react-dom": "^19.2.3",
|
|
41
42
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
42
|
-
"babel-plugin-styled-components": "^2.3.0",
|
|
43
43
|
"react": "^19.2.7",
|
|
44
44
|
"react-dom": "^19.2.7",
|
|
45
45
|
"sanity": "^6.3.0",
|
|
46
46
|
"styled-components": "^6.4.3",
|
|
47
|
-
"
|
|
48
|
-
"@repo/tsconfig": "0.0.0"
|
|
47
|
+
"tsdown": "^0.22.3"
|
|
49
48
|
},
|
|
50
49
|
"peerDependencies": {
|
|
51
50
|
"react": "^19.2",
|
|
@@ -57,6 +56,6 @@
|
|
|
57
56
|
"node": ">=20.19 <22 || >=22.12"
|
|
58
57
|
},
|
|
59
58
|
"scripts": {
|
|
60
|
-
"build": "
|
|
59
|
+
"build": "tsdown"
|
|
61
60
|
}
|
|
62
61
|
}
|