@sanity/vision 6.7.0-next.5 → 6.7.0-next.50

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.
@@ -0,0 +1,2771 @@
1
+ import { t as visionLocaleNamespace } from "./i18n-DWd7qwtK.js";
2
+ import { Component, Fragment, forwardRef, useEffect, useEffectEvent, useImperativeHandle, useRef, useState } from "react";
3
+ import { ContextMenuButton, Translate, UserAvatar, getReleaseIdFromReleaseDocumentId, isCardinalityOneRelease, sortReleases, useActiveReleases, useClient, useCurrentUser, useDataset, useDateTimeFormat, useKeyValueStore, usePerspective, useScheduledDraftsEnabled, useTranslation, useWorkspace } from "sanity";
4
+ import { IntentLink } from "sanity/router";
5
+ import { c } from "react/compiler-runtime";
6
+ import { Badge, Box, Button, Card, Code, Container, Dialog, Flex, Grid, Heading, Hotkeys, Inline, Label, Menu, MenuButton, MenuItem, Popover, Select, Spinner, Stack, Tab, TabList, Text, TextInput, Tooltip, rem, useClickOutsideEvent, useTheme, useTheme_v2, useToast } from "@sanity/ui";
7
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
+ import { SplitPane } from "@rexxars/react-split-pane";
9
+ import { ChevronLeftIcon } from "@sanity/icons/ChevronLeft";
10
+ import { ChevronRightIcon } from "@sanity/icons/ChevronRight";
11
+ import { isHotkey } from "is-hotkey-esm";
12
+ import { closeBrackets } from "@codemirror/autocomplete";
13
+ import { defaultKeymap, history, historyKeymap } from "@codemirror/commands";
14
+ import { javascriptLanguage } from "@codemirror/lang-javascript";
15
+ import { HighlightStyle, bracketMatching, defaultHighlightStyle, indentOnInput, syntaxHighlighting } from "@codemirror/language";
16
+ import { highlightSelectionMatches } from "@codemirror/search";
17
+ import { EditorView, drawSelection, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, keymap, lineNumbers } from "@codemirror/view";
18
+ import { groq } from "@sanity/lezer-groq";
19
+ import CodeMirror, { EditorSelection } from "@uiw/react-codemirror";
20
+ import { assignInlineVars } from "@vanilla-extract/dynamic";
21
+ import { tags } from "@lezer/highlight";
22
+ import { hues } from "@sanity/color";
23
+ import { ErrorOutlineIcon } from "@sanity/icons/ErrorOutline";
24
+ import debounce from "lodash-es/debounce.js";
25
+ import JSON5 from "json5";
26
+ import { AddIcon } from "@sanity/icons/Add";
27
+ import { LockIcon } from "@sanity/icons/Lock";
28
+ import { SearchIcon } from "@sanity/icons/Search";
29
+ import { TrashIcon } from "@sanity/icons/Trash";
30
+ import { UnpublishIcon } from "@sanity/icons/Unpublish";
31
+ import { UsersIcon } from "@sanity/icons/Users";
32
+ import isEqual from "lodash-es/isEqual.js";
33
+ import { uuid } from "@sanity/uuid";
34
+ import { map, startWith } from "rxjs/operators";
35
+ import { PlayIcon } from "@sanity/icons/Play";
36
+ import { StopIcon } from "@sanity/icons/Stop";
37
+ import { CopyIcon } from "@sanity/icons/Copy";
38
+ import { HelpCircleIcon } from "@sanity/icons/HelpCircle";
39
+ import { json2csv } from "json-2-csv";
40
+ import { JsonInspector } from "@rexxars/react-json-inspector";
41
+ import { LinkIcon } from "@sanity/icons/Link";
42
+ import LRU from "quick-lru";
43
+ import { DocumentSheetIcon } from "@sanity/icons/DocumentSheet";
44
+ import { useObservable } from "react-rx";
45
+ import { catchError, map as map$1, of } from "rxjs";
46
+ const API_VERSIONS = [
47
+ "v1",
48
+ "vX",
49
+ "v2021-03-25",
50
+ "v2021-10-21",
51
+ "v2022-03-07",
52
+ "v2025-02-19",
53
+ `v${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}`
54
+ ], [DEFAULT_API_VERSION] = API_VERSIONS.slice(-1);
55
+ function DelayedSpinner(props) {
56
+ let $ = c(5), [show, setShow] = useState(!1), t0, t1;
57
+ $[0] === props.delay ? (t0 = $[1], t1 = $[2]) : (t0 = () => {
58
+ let timer = setTimeout(() => setShow(!0), props.delay || 500);
59
+ return () => clearTimeout(timer);
60
+ }, t1 = [props.delay], $[0] = props.delay, $[1] = t0, $[2] = t1), useEffect(t0, t1);
61
+ let t2;
62
+ return $[3] === show ? t2 = $[4] : (t2 = show ? /* @__PURE__ */ jsx(Spinner, {
63
+ muted: !0,
64
+ size: 4
65
+ }) : null, $[3] = show, $[4] = t2), t2;
66
+ }
67
+ const sharedExtensions = [
68
+ lineNumbers(),
69
+ highlightActiveLine(),
70
+ highlightActiveLineGutter(),
71
+ highlightSelectionMatches(),
72
+ highlightSpecialChars(),
73
+ indentOnInput(),
74
+ bracketMatching(),
75
+ closeBrackets(),
76
+ history(),
77
+ drawSelection(),
78
+ syntaxHighlighting(defaultHighlightStyle, { fallback: !0 }),
79
+ keymap.of([
80
+ {
81
+ key: "Mod-Enter",
82
+ run: () => !0
83
+ },
84
+ defaultKeymap,
85
+ historyKeymap
86
+ ].flat().filter(Boolean))
87
+ ], groqExtensions = [groq(), ...sharedExtensions], paramsExtensions = [javascriptLanguage, ...sharedExtensions];
88
+ function useCodemirrorTheme(theme) {
89
+ let $ = c(7), t0;
90
+ $[0] === theme ? t0 = $[1] : (t0 = createTheme(theme), $[0] = theme, $[1] = t0);
91
+ let cmTheme = t0, t1;
92
+ $[2] === theme ? t1 = $[3] : (t1 = syntaxHighlighting(createHighlight(theme)), $[2] = theme, $[3] = t1);
93
+ let cmHighlight = t1, t2;
94
+ return $[4] !== cmHighlight || $[5] !== cmTheme ? (t2 = [cmTheme, cmHighlight], $[4] = cmHighlight, $[5] = cmTheme, $[6] = t2) : t2 = $[6], t2;
95
+ }
96
+ function createTheme(theme) {
97
+ let { color, fonts } = theme.sanity, card = color.card.enabled, cursor = hues.blue[color.dark ? 400 : 500].hex, selection = hues.gray[theme.sanity.color.dark ? 900 : 100].hex;
98
+ return EditorView.theme({
99
+ "&": {
100
+ color: card.fg,
101
+ backgroundColor: card.bg
102
+ },
103
+ ".cm-content": { caretColor: cursor },
104
+ ".cm-editor": {
105
+ fontFamily: fonts.code.family,
106
+ fontSize: rem(fonts.code.sizes[1].fontSize),
107
+ lineHeight: "inherit"
108
+ },
109
+ ".cm-cursor, .cm-dropCursor": { borderLeftColor: cursor },
110
+ "&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection": { backgroundColor: selection },
111
+ ".cm-panels": {
112
+ backgroundColor: card.bg,
113
+ color: card.fg
114
+ },
115
+ ".cm-panels.cm-panels-top": { borderBottom: `2px solid ${card.border}` },
116
+ ".cm-panels.cm-panels-bottom": { borderTop: `2px solid ${card.border}` }
117
+ }, { dark: color.dark });
118
+ }
119
+ function createHighlight(theme) {
120
+ let c = theme.sanity.color.base, s = theme.sanity.color.syntax;
121
+ return HighlightStyle.define([
122
+ {
123
+ tag: tags.keyword,
124
+ color: s.keyword
125
+ },
126
+ {
127
+ tag: [
128
+ tags.propertyName,
129
+ tags.name,
130
+ tags.deleted,
131
+ tags.character,
132
+ tags.macroName
133
+ ],
134
+ color: s.property
135
+ },
136
+ {
137
+ tag: [tags.function(tags.variableName), tags.labelName],
138
+ color: s.function
139
+ },
140
+ {
141
+ tag: [
142
+ tags.color,
143
+ tags.constant(tags.name),
144
+ tags.standard(tags.name)
145
+ ],
146
+ color: s.variable
147
+ },
148
+ {
149
+ tag: [tags.definition(tags.name), tags.separator],
150
+ color: s.constant
151
+ },
152
+ {
153
+ tag: [
154
+ tags.typeName,
155
+ tags.className,
156
+ tags.number,
157
+ tags.changed,
158
+ tags.annotation,
159
+ tags.modifier,
160
+ tags.self,
161
+ tags.namespace
162
+ ],
163
+ color: s.number
164
+ },
165
+ {
166
+ tag: [
167
+ tags.operator,
168
+ tags.operatorKeyword,
169
+ tags.url,
170
+ tags.escape,
171
+ tags.regexp,
172
+ tags.link,
173
+ tags.special(tags.string)
174
+ ],
175
+ color: s.operator
176
+ },
177
+ {
178
+ tag: [tags.meta, tags.comment],
179
+ color: s.comment
180
+ },
181
+ {
182
+ tag: tags.strong,
183
+ fontWeight: "bold"
184
+ },
185
+ {
186
+ tag: tags.emphasis,
187
+ fontStyle: "italic"
188
+ },
189
+ {
190
+ tag: tags.strikethrough,
191
+ textDecoration: "line-through"
192
+ },
193
+ {
194
+ tag: tags.heading,
195
+ fontWeight: "bold",
196
+ color: s.property
197
+ },
198
+ {
199
+ tag: [
200
+ tags.atom,
201
+ tags.bool,
202
+ tags.special(tags.variableName)
203
+ ],
204
+ color: s.boolean
205
+ },
206
+ {
207
+ tag: [
208
+ tags.processingInstruction,
209
+ tags.string,
210
+ tags.inserted
211
+ ],
212
+ color: s.string
213
+ },
214
+ {
215
+ tag: tags.invalid,
216
+ color: c.fg
217
+ }
218
+ ]);
219
+ }
220
+ var contentBorderRightWidthVar = "var(--_116kdfx1)", contentPaddingTopVar = "var(--_116kdfx2)", editorRoot = "_116kdfx3", linePaddingLeftVar = "var(--_116kdfx0)";
221
+ function EditorRoot(t0) {
222
+ let $ = c(13), { children } = t0, { sanity } = useTheme(), t1;
223
+ $[0] === sanity.space[3] ? t1 = $[1] : (t1 = rem(sanity.space[3]), $[0] = sanity.space[3], $[1] = t1);
224
+ let t2 = `${t1}`, t3;
225
+ $[2] === sanity.space[4] ? t3 = $[3] : (t3 = rem(sanity.space[4]), $[2] = sanity.space[4], $[3] = t3);
226
+ let t4 = `${t3}`, t5;
227
+ $[4] === sanity.space[5] ? t5 = $[5] : (t5 = rem(sanity.space[5]), $[4] = sanity.space[5], $[5] = t5);
228
+ let t6 = `${t5}`, t7;
229
+ $[6] !== t2 || $[7] !== t4 || $[8] !== t6 ? (t7 = assignInlineVars({
230
+ [linePaddingLeftVar]: t2,
231
+ [contentBorderRightWidthVar]: t4,
232
+ [contentPaddingTopVar]: t6
233
+ }), $[6] = t2, $[7] = t4, $[8] = t6, $[9] = t7) : t7 = $[9];
234
+ let t8;
235
+ return $[10] !== children || $[11] !== t7 ? (t8 = /* @__PURE__ */ jsx("div", {
236
+ className: editorRoot,
237
+ style: t7,
238
+ children
239
+ }), $[10] = children, $[11] = t7, $[12] = t8) : t8 = $[12], t8;
240
+ }
241
+ const VisionCodeMirror = forwardRef((props, ref) => {
242
+ let $ = c(8), [initialValue] = useState(props.initialValue), theme = useCodemirrorTheme(useTheme()), codeMirrorRef = useRef(null), t0;
243
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = (newContent) => {
244
+ let editorView = codeMirrorRef.current?.view;
245
+ if (!editorView) return;
246
+ let currentDoc = editorView.state.doc.toString();
247
+ newContent !== currentDoc && editorView.dispatch({
248
+ changes: {
249
+ from: 0,
250
+ to: currentDoc.length,
251
+ insert: newContent
252
+ },
253
+ selection: EditorSelection.cursor(newContent.length)
254
+ });
255
+ }, $[0] = t0) : t0 = $[0];
256
+ let resetEditorContent = t0, t1, t2;
257
+ $[1] === Symbol.for("react.memo_cache_sentinel") ? (t1 = () => ({ resetEditorContent }), t2 = [resetEditorContent], $[1] = t1, $[2] = t2) : (t1 = $[1], t2 = $[2]), useImperativeHandle(ref, t1, t2);
258
+ let t3;
259
+ return $[3] !== initialValue || $[4] !== props.extensions || $[5] !== props.onChange || $[6] !== theme ? (t3 = /* @__PURE__ */ jsx(EditorRoot, { children: /* @__PURE__ */ jsx(CodeMirror, {
260
+ ref: codeMirrorRef,
261
+ basicSetup: !1,
262
+ theme,
263
+ extensions: props.extensions,
264
+ value: initialValue,
265
+ onChange: props.onChange
266
+ }) }), $[3] = initialValue, $[4] = props.extensions, $[5] = props.onChange, $[6] = theme, $[7] = t3) : t3 = $[7], t3;
267
+ });
268
+ VisionCodeMirror.displayName = "VisionCodeMirror";
269
+ const SUPPORTED_PERSPECTIVES = [
270
+ "pinnedRelease",
271
+ "scheduledDrafts",
272
+ "raw",
273
+ "published",
274
+ "drafts"
275
+ ], VIRTUAL_PERSPECTIVES = ["pinnedRelease", "scheduledDrafts"];
276
+ function isSupportedPerspective(p) {
277
+ return SUPPORTED_PERSPECTIVES.includes(p);
278
+ }
279
+ function isVirtualPerspective(maybeVirtualPerspective) {
280
+ return typeof maybeVirtualPerspective == "string" && VIRTUAL_PERSPECTIVES.includes(maybeVirtualPerspective);
281
+ }
282
+ function hasPinnedPerspective({ selectedPerspectiveName }) {
283
+ return selectedPerspectiveName !== void 0;
284
+ }
285
+ function getActivePerspective({ visionPerspective, perspectiveStack, scheduledDraftsStack }) {
286
+ return visionPerspective === "pinnedRelease" ? perspectiveStack : visionPerspective === "scheduledDrafts" ? scheduledDraftsStack : visionPerspective;
287
+ }
288
+ function encodeQueryString(query, params = {}, options = {}) {
289
+ let searchParams = new URLSearchParams();
290
+ searchParams.set("query", query);
291
+ for (let [key, value] of Object.entries(params)) searchParams.set(`$${key}`, JSON.stringify(value));
292
+ for (let [key, value] of Object.entries(options)) value && searchParams.set(key, `${value}`);
293
+ return `?${searchParams}`;
294
+ }
295
+ function isPlainObject(obj) {
296
+ return !!obj && typeof obj == "object" && Object.prototype.toString.call(obj) === "[object Object]";
297
+ }
298
+ const hasLocalStorage = supportsLocalStorage(), keyPrefix = "sanityVision:";
299
+ function clearLocalStorage() {
300
+ if (hasLocalStorage) for (let i = 0; i < localStorage.length; i++) {
301
+ let key = localStorage.key(i);
302
+ key?.startsWith(keyPrefix) && localStorage.removeItem(key);
303
+ }
304
+ }
305
+ function getLocalStorage(namespace) {
306
+ let storageKey = `${keyPrefix}${namespace}`, loadedState = null;
307
+ return {
308
+ get,
309
+ set,
310
+ merge
311
+ };
312
+ function get(key, defaultVal) {
313
+ let state = ensureState();
314
+ return state[key] === void 0 ? defaultVal : state[key];
315
+ }
316
+ function set(key, value) {
317
+ let state = ensureState();
318
+ return state[key] = value, localStorage.setItem(storageKey, JSON.stringify(loadedState)), value;
319
+ }
320
+ function merge(props) {
321
+ let state = {
322
+ ...ensureState(),
323
+ ...props
324
+ };
325
+ return localStorage.setItem(storageKey, JSON.stringify(state)), state;
326
+ }
327
+ function ensureState() {
328
+ return loadedState === null && (loadedState = loadState()), loadedState;
329
+ }
330
+ function loadState() {
331
+ if (!hasLocalStorage) return {};
332
+ try {
333
+ let stored = JSON.parse(localStorage.getItem(storageKey) || "{}");
334
+ return isPlainObject(stored) ? stored : {};
335
+ } catch {
336
+ return {};
337
+ }
338
+ }
339
+ }
340
+ function supportsLocalStorage() {
341
+ let mod = "lsCheck";
342
+ try {
343
+ return localStorage.setItem(mod, mod), localStorage.removeItem(mod), !0;
344
+ } catch {
345
+ return !1;
346
+ }
347
+ }
348
+ function parseApiQueryString(qs) {
349
+ let params = {}, options = {};
350
+ for (let [key, value] of qs.entries()) {
351
+ if (key[0] === "$") {
352
+ params[key.slice(1)] = JSON.parse(value);
353
+ continue;
354
+ }
355
+ if (key === "perspective") {
356
+ options[key] = value;
357
+ continue;
358
+ }
359
+ }
360
+ return {
361
+ query: qs.get("query") || "",
362
+ params,
363
+ options
364
+ };
365
+ }
366
+ function prefixApiVersion(version) {
367
+ return version[0] !== "v" && version !== "other" ? `v${version}` : version;
368
+ }
369
+ function validateApiVersion(apiVersion) {
370
+ let parseableApiVersion = apiVersion.replace(/^v/, "").trim().toUpperCase();
371
+ return parseableApiVersion.length > 0 && (parseableApiVersion === "X" || parseableApiVersion === "1" || /^\d{4}-\d{2}-\d{2}$/.test(parseableApiVersion) && !isNaN(Date.parse(parseableApiVersion)));
372
+ }
373
+ function tryParseParams(val, t) {
374
+ try {
375
+ let parsed = val ? JSON5.parse(val) : {};
376
+ return typeof parsed == "object" && parsed && !Array.isArray(parsed) ? parsed : {};
377
+ } catch (err) {
378
+ return err.message = `${t("params.error.params-invalid-json")}:\n\n${err.message.replace("JSON5:", "")}`, err;
379
+ }
380
+ }
381
+ var controlsContainer = "ior2o0m", downloadsCard = "ior2o0j", header = "ior2o03", inputBackgroundContainer = "ior2o07", inputBackgroundContainerLeft = "ior2o08", inputContainer = "ior2o09", queryCopyLink = "ior2o06", queryRecallPaneContainer = "ior2o01", queryRecallPaneWrapper = "ior2o02", result = "ior2o0e", resultContainer = "ior2o0c", resultContainerInvalid = "ior2o0d", resultFooter = "ior2o0f", resultInnerContainer = "ior2o0b", resultOuterContainer = "ior2o0a", root = "ior2o00", saveResultLabel = "ior2o0l", saveResultSpanGapVar = "var(--ior2o0k)", splitpaneContainer = "ior2o05", styledLabel = "ior2o04", timingsCard = "ior2o0g", timingsTextContainer = "ior2o0i", timingsTextMinHeightVar = "var(--ior2o0h)";
382
+ const Root = forwardRef(function(props, ref) {
383
+ let $ = c(3), t0;
384
+ return $[0] !== props || $[1] !== ref ? (t0 = /* @__PURE__ */ jsx(Flex, {
385
+ ...props,
386
+ ref,
387
+ className: root
388
+ }), $[0] = props, $[1] = ref, $[2] = t0) : t0 = $[2], t0;
389
+ });
390
+ function Header(props) {
391
+ let $ = c(2), t0;
392
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Card, {
393
+ ...props,
394
+ className: header
395
+ }), $[0] = props, $[1] = t0), t0;
396
+ }
397
+ function StyledLabel(props) {
398
+ let $ = c(2), t0;
399
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Label, {
400
+ ...props,
401
+ className: styledLabel
402
+ }), $[0] = props, $[1] = t0), t0;
403
+ }
404
+ function SplitpaneContainer(props) {
405
+ let $ = c(2), t0;
406
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Box, {
407
+ ...props,
408
+ className: splitpaneContainer
409
+ }), $[0] = props, $[1] = t0), t0;
410
+ }
411
+ function QueryRecallPaneContainer(props) {
412
+ let $ = c(2), t0;
413
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Flex, {
414
+ ...props,
415
+ direction: "column",
416
+ className: queryRecallPaneContainer
417
+ }), $[0] = props, $[1] = t0), t0;
418
+ }
419
+ function QueryRecallPaneWrapper(props) {
420
+ let $ = c(2), t0;
421
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Flex, {
422
+ ...props,
423
+ direction: "column",
424
+ flex: 1,
425
+ overflow: "hidden",
426
+ className: queryRecallPaneWrapper
427
+ }), $[0] = props, $[1] = t0), t0;
428
+ }
429
+ function QueryCopyLink(props) {
430
+ let $ = c(2), t0;
431
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx("a", {
432
+ ...props,
433
+ className: queryCopyLink
434
+ }), $[0] = props, $[1] = t0), t0;
435
+ }
436
+ function InputBackgroundContainer(props) {
437
+ let $ = c(2), t0;
438
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Box, {
439
+ ...props,
440
+ className: inputBackgroundContainer
441
+ }), $[0] = props, $[1] = t0), t0;
442
+ }
443
+ function InputBackgroundContainerLeft(props) {
444
+ let $ = c(2), t0;
445
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Box, {
446
+ ...props,
447
+ className: `${inputBackgroundContainer} ${inputBackgroundContainerLeft}`
448
+ }), $[0] = props, $[1] = t0), t0;
449
+ }
450
+ function InputContainer(props) {
451
+ let $ = c(2), t0;
452
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Card, {
453
+ ...props,
454
+ className: inputContainer
455
+ }), $[0] = props, $[1] = t0), t0;
456
+ }
457
+ function ResultOuterContainer(props) {
458
+ let $ = c(2), t0;
459
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Flex, {
460
+ ...props,
461
+ className: resultOuterContainer
462
+ }), $[0] = props, $[1] = t0), t0;
463
+ }
464
+ function ResultInnerContainer(props) {
465
+ let $ = c(2), t0;
466
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Box, {
467
+ ...props,
468
+ className: resultInnerContainer
469
+ }), $[0] = props, $[1] = t0), t0;
470
+ }
471
+ function ResultContainer(t0) {
472
+ let $ = c(6), isInvalid, props;
473
+ $[0] === t0 ? (isInvalid = $[1], props = $[2]) : ({isInvalid, ...props} = t0, $[0] = t0, $[1] = isInvalid, $[2] = props);
474
+ let t1 = isInvalid ? `${resultContainer} ${resultContainerInvalid}` : resultContainer, t2;
475
+ return $[3] !== props || $[4] !== t1 ? (t2 = /* @__PURE__ */ jsx(Card, {
476
+ ...props,
477
+ className: t1
478
+ }), $[3] = props, $[4] = t1, $[5] = t2) : t2 = $[5], t2;
479
+ }
480
+ function Result(props) {
481
+ let $ = c(2), t0;
482
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Box, {
483
+ ...props,
484
+ className: result
485
+ }), $[0] = props, $[1] = t0), t0;
486
+ }
487
+ function ResultFooter(props) {
488
+ let $ = c(2), t0;
489
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Flex, {
490
+ ...props,
491
+ className: resultFooter
492
+ }), $[0] = props, $[1] = t0), t0;
493
+ }
494
+ function TimingsCard(props) {
495
+ let $ = c(2), t0;
496
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Card, {
497
+ ...props,
498
+ className: timingsCard
499
+ }), $[0] = props, $[1] = t0), t0;
500
+ }
501
+ function TimingsTextContainer(props) {
502
+ let $ = c(7), { space, font } = useTheme_v2(), textSize = font.text.sizes[2], t0 = space[3] * 2 + textSize.lineHeight - textSize.ascenderHeight - textSize.descenderHeight, t1;
503
+ $[0] === t0 ? t1 = $[1] : (t1 = rem(t0), $[0] = t0, $[1] = t1);
504
+ let t2 = `${t1}`, t3;
505
+ $[2] === t2 ? t3 = $[3] : (t3 = assignInlineVars({ [timingsTextMinHeightVar]: t2 }), $[2] = t2, $[3] = t3);
506
+ let t4;
507
+ return $[4] !== props || $[5] !== t3 ? (t4 = /* @__PURE__ */ jsx(Flex, {
508
+ ...props,
509
+ className: timingsTextContainer,
510
+ style: t3
511
+ }), $[4] = props, $[5] = t3, $[6] = t4) : t4 = $[6], t4;
512
+ }
513
+ function DownloadsCard(props) {
514
+ let $ = c(2), t0;
515
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Card, {
516
+ ...props,
517
+ className: downloadsCard
518
+ }), $[0] = props, $[1] = t0), t0;
519
+ }
520
+ function SaveResultLabel(props) {
521
+ let $ = c(7), { space } = useTheme_v2(), t0;
522
+ $[0] === space[3] ? t0 = $[1] : (t0 = rem(space[3]), $[0] = space[3], $[1] = t0);
523
+ let t1 = `${t0}`, t2;
524
+ $[2] === t1 ? t2 = $[3] : (t2 = assignInlineVars({ [saveResultSpanGapVar]: t1 }), $[2] = t1, $[3] = t2);
525
+ let t3;
526
+ return $[4] !== props || $[5] !== t2 ? (t3 = /* @__PURE__ */ jsx(Text, {
527
+ ...props,
528
+ className: saveResultLabel,
529
+ style: t2
530
+ }), $[4] = props, $[5] = t2, $[6] = t3) : t3 = $[6], t3;
531
+ }
532
+ function ControlsContainer(props) {
533
+ let $ = c(2), t0;
534
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Box, {
535
+ ...props,
536
+ className: controlsContainer
537
+ }), $[0] = props, $[1] = t0), t0;
538
+ }
539
+ function ParamsEditor(props) {
540
+ let $ = c(21), { onChange, paramsError, hasValidParams, editorRef } = props, { t } = useTranslation(visionLocaleNamespace), t0;
541
+ $[0] === onChange ? t0 = $[1] : (t0 = (newValue) => {
542
+ onChange(newValue);
543
+ }, $[0] = onChange, $[1] = t0);
544
+ let handleChangeRaw = t0, t1;
545
+ $[2] === handleChangeRaw ? t1 = $[3] : (t1 = debounce(handleChangeRaw, 333), $[2] = handleChangeRaw, $[3] = t1);
546
+ let handleChange = t1, t2 = hasValidParams ? "default" : "critical", t3;
547
+ $[4] === t ? t3 = $[5] : (t3 = t("params.label"), $[4] = t, $[5] = t3);
548
+ let t4;
549
+ $[6] === t3 ? t4 = $[7] : (t4 = /* @__PURE__ */ jsx(StyledLabel, {
550
+ muted: !0,
551
+ children: t3
552
+ }), $[6] = t3, $[7] = t4);
553
+ let t5;
554
+ $[8] === paramsError ? t5 = $[9] : (t5 = paramsError && /* @__PURE__ */ jsx(Tooltip, {
555
+ animate: !0,
556
+ placement: "top",
557
+ portal: !0,
558
+ content: /* @__PURE__ */ jsx(Text, {
559
+ size: 1,
560
+ children: paramsError
561
+ }),
562
+ children: /* @__PURE__ */ jsx(Box, {
563
+ padding: 1,
564
+ marginX: 2,
565
+ children: /* @__PURE__ */ jsx(Text, { children: /* @__PURE__ */ jsx(ErrorOutlineIcon, {}) })
566
+ })
567
+ }), $[8] = paramsError, $[9] = t5);
568
+ let t6;
569
+ $[10] !== t4 || $[11] !== t5 ? (t6 = /* @__PURE__ */ jsx(InputBackgroundContainerLeft, { children: /* @__PURE__ */ jsxs(Flex, { children: [t4, t5] }) }), $[10] = t4, $[11] = t5, $[12] = t6) : t6 = $[12];
570
+ let t7 = props.value || "{\n \n}", t8;
571
+ $[13] !== editorRef || $[14] !== handleChange || $[15] !== t7 ? (t8 = /* @__PURE__ */ jsx(VisionCodeMirror, {
572
+ ref: editorRef,
573
+ initialValue: t7,
574
+ onChange: handleChange,
575
+ extensions: paramsExtensions
576
+ }), $[13] = editorRef, $[14] = handleChange, $[15] = t7, $[16] = t8) : t8 = $[16];
577
+ let t9;
578
+ return $[17] !== t2 || $[18] !== t6 || $[19] !== t8 ? (t9 = /* @__PURE__ */ jsxs(Card, {
579
+ flex: 1,
580
+ tone: t2,
581
+ "data-testid": "params-editor",
582
+ children: [t6, t8]
583
+ }), $[17] = t2, $[18] = t6, $[19] = t8, $[20] = t9) : t9 = $[20], t9;
584
+ }
585
+ function parseParams(value, t) {
586
+ let parsedParams = tryParseParams(value, t), params = parsedParams instanceof Error ? {} : parsedParams, validationError = parsedParams instanceof Error ? parsedParams.message : void 0;
587
+ return {
588
+ parsed: params,
589
+ raw: value,
590
+ valid: !validationError,
591
+ error: validationError
592
+ };
593
+ }
594
+ const SHARED_QUERY_DOCUMENT_TYPE = "vision.sharedQuery", SHARED_QUERY_LISTEN_OPTIONS = {
595
+ events: [
596
+ "welcome",
597
+ "mutation",
598
+ "reconnect"
599
+ ],
600
+ includeResult: !0,
601
+ visibility: "query"
602
+ }, defaultValue = { queries: [] }, keyValueStoreKey = "studio.vision-tool.saved-queries";
603
+ function useSavedQueries() {
604
+ let $ = c(45), keyValueStore = useKeyValueStore(), t0;
605
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = { apiVersion: DEFAULT_API_VERSION }, $[0] = t0) : t0 = $[0];
606
+ let workspaceClient = useClient(t0), currentUser = useCurrentUser(), [value, setValue] = useState(defaultValue), t1;
607
+ $[1] === Symbol.for("react.memo_cache_sentinel") ? (t1 = [], $[1] = t1) : t1 = $[1];
608
+ let [sharedQueries, setSharedQueries] = useState(t1), [saving, setSaving] = useState(!1), t2;
609
+ $[2] === Symbol.for("react.memo_cache_sentinel") ? (t2 = [], $[2] = t2) : t2 = $[2];
610
+ let [deleting, setDeleting] = useState(t2), [saveQueryError, setSaveQueryError] = useState(), [deleteQueryError, setDeleteQueryError] = useState(), [error, setError] = useState(), t3;
611
+ $[3] === keyValueStore ? t3 = $[4] : (t3 = keyValueStore.getKey(keyValueStoreKey), $[3] = keyValueStore, $[4] = t3);
612
+ let personalQueries = t3, t4;
613
+ $[5] === currentUser?.id ? t4 = $[6] : (t4 = (docs) => {
614
+ let currentUserId = currentUser?.id;
615
+ return docs.map((doc) => ({
616
+ _key: doc._id,
617
+ authorId: doc.authorId,
618
+ isOwnedByCurrentUser: doc.authorId === currentUserId,
619
+ savedAt: doc.savedAt,
620
+ shared: !0,
621
+ title: doc.title,
622
+ url: doc.url
623
+ }));
624
+ }, $[5] = currentUser?.id, $[6] = t4);
625
+ let mapSharedQueries = t4, t5, t6;
626
+ $[7] === personalQueries ? (t5 = $[8], t6 = $[9]) : (t5 = () => {
627
+ let sub = personalQueries.pipe(startWith(defaultValue), map(_temp$5)).subscribe({
628
+ next: setValue,
629
+ error: (err) => setError(err)
630
+ });
631
+ return () => sub?.unsubscribe();
632
+ }, t6 = [personalQueries], $[7] = personalQueries, $[8] = t5, $[9] = t6), useEffect(t5, t6);
633
+ let t7, t8;
634
+ $[10] !== mapSharedQueries || $[11] !== workspaceClient ? (t7 = () => {
635
+ let cancelled = !1, fetchSharedQueries = async () => {
636
+ let nextDocs = await workspaceClient.fetch("*[_type == $sharedQueryType]{\n _id,\n authorId,\n savedAt,\n title,\n url\n} | order(savedAt desc)", { sharedQueryType: SHARED_QUERY_DOCUMENT_TYPE }) || [];
637
+ cancelled || setSharedQueries(mapSharedQueries(nextDocs));
638
+ };
639
+ fetchSharedQueries().catch((err_0) => {
640
+ cancelled || setError(err_0);
641
+ });
642
+ let sub_0 = workspaceClient.observable.listen("*[_type == $sharedQueryType]", { sharedQueryType: SHARED_QUERY_DOCUMENT_TYPE }, SHARED_QUERY_LISTEN_OPTIONS).subscribe({
643
+ next: () => {
644
+ fetchSharedQueries().catch((err_1) => {
645
+ cancelled || setError(err_1);
646
+ });
647
+ },
648
+ error: (err_2) => {
649
+ cancelled || setError(err_2);
650
+ }
651
+ });
652
+ return () => {
653
+ cancelled = !0, sub_0.unsubscribe();
654
+ };
655
+ }, t8 = [workspaceClient, mapSharedQueries], $[10] = mapSharedQueries, $[11] = workspaceClient, $[12] = t7, $[13] = t8) : (t7 = $[12], t8 = $[13]), useEffect(t7, t8);
656
+ let t9;
657
+ $[14] !== sharedQueries || $[15] !== value.queries ? (t9 = [...sharedQueries, ...value.queries].sort(_temp2$4), $[14] = sharedQueries, $[15] = value.queries, $[16] = t9) : t9 = $[16];
658
+ let queries = t9, t10;
659
+ $[17] !== currentUser || $[18] !== keyValueStore || $[19] !== mapSharedQueries || $[20] !== value.queries || $[21] !== workspaceClient ? (t10 = async (query) => {
660
+ if (setSaving(!0), setSaveQueryError(void 0), query.shared) {
661
+ if (!currentUser?.id) {
662
+ let authError = /* @__PURE__ */ Error("No current user found. Unable to save shared query.");
663
+ throw setSaveQueryError(authError), setSaving(!1), authError;
664
+ }
665
+ try {
666
+ let createdDoc = await workspaceClient.create({
667
+ _type: SHARED_QUERY_DOCUMENT_TYPE,
668
+ authorId: currentUser.id,
669
+ savedAt: query.savedAt,
670
+ title: query.title,
671
+ url: query.url
672
+ });
673
+ setSharedQueries((prev) => [...mapSharedQueries([createdDoc]), ...prev]), setSaving(!1);
674
+ return;
675
+ } catch (t11) {
676
+ let err_3 = t11, saveError = err_3 instanceof Error ? err_3 : Error(String(err_3));
677
+ throw setSaveQueryError(saveError), setSaving(!1), saveError;
678
+ }
679
+ }
680
+ try {
681
+ let newQueries = [{
682
+ ...query,
683
+ _key: uuid()
684
+ }, ...value.queries];
685
+ setValue({ queries: newQueries }), await keyValueStore.setKey(keyValueStoreKey, { queries: newQueries });
686
+ } catch (t12) {
687
+ let err_4 = t12, saveError_0 = err_4 instanceof Error ? err_4 : Error(String(err_4));
688
+ throw setSaveQueryError(saveError_0), setSaving(!1), saveError_0;
689
+ }
690
+ setSaving(!1);
691
+ }, $[17] = currentUser, $[18] = keyValueStore, $[19] = mapSharedQueries, $[20] = value.queries, $[21] = workspaceClient, $[22] = t10) : t10 = $[22];
692
+ let saveQuery = t10, t11;
693
+ $[23] !== currentUser || $[24] !== keyValueStore || $[25] !== mapSharedQueries || $[26] !== value.queries || $[27] !== workspaceClient ? (t11 = async (query_0) => {
694
+ if (setSaving(!0), setSaveQueryError(void 0), query_0.shared) {
695
+ if (!currentUser?.id || query_0.authorId !== currentUser.id) {
696
+ let authError_0 = /* @__PURE__ */ Error("Only the author can update a shared query.");
697
+ throw setSaveQueryError(authError_0), setSaving(!1), authError_0;
698
+ }
699
+ try {
700
+ let updatedDoc = await workspaceClient.patch(query_0._key).set({
701
+ savedAt: query_0.savedAt,
702
+ title: query_0.title,
703
+ url: query_0.url
704
+ }).commit(), [updatedSharedQuery] = mapSharedQueries([updatedDoc]);
705
+ setSharedQueries((prev_0) => prev_0.map((existingQuery) => existingQuery._key === query_0._key ? updatedSharedQuery : existingQuery)), setSaving(!1);
706
+ return;
707
+ } catch (t12) {
708
+ let err_5 = t12, updateError = err_5 instanceof Error ? err_5 : Error(String(err_5));
709
+ throw setSaveQueryError(updateError), setSaving(!1), updateError;
710
+ }
711
+ }
712
+ try {
713
+ let updatedQueries = value.queries.map((q) => q._key === query_0._key ? {
714
+ ...q,
715
+ ...query_0
716
+ } : q);
717
+ setValue({ queries: updatedQueries }), await keyValueStore.setKey(keyValueStoreKey, { queries: updatedQueries });
718
+ } catch (t13) {
719
+ let err_6 = t13, updateError_0 = err_6 instanceof Error ? err_6 : Error(String(err_6));
720
+ throw setSaveQueryError(updateError_0), setSaving(!1), updateError_0;
721
+ }
722
+ setSaving(!1);
723
+ }, $[23] = currentUser, $[24] = keyValueStore, $[25] = mapSharedQueries, $[26] = value.queries, $[27] = workspaceClient, $[28] = t11) : t11 = $[28];
724
+ let updateQuery = t11, t12;
725
+ $[29] !== currentUser || $[30] !== keyValueStore || $[31] !== sharedQueries || $[32] !== value.queries || $[33] !== workspaceClient ? (t12 = async (key) => {
726
+ setDeleting((prev_1) => [...prev_1, key]), setDeleteQueryError(void 0);
727
+ let clearDeleting = () => setDeleting((prev_2) => prev_2.filter((k) => k !== key)), sharedQuery = sharedQueries.find((query_1) => query_1._key === key && query_1.shared);
728
+ if (sharedQuery) {
729
+ if (!currentUser?.id || sharedQuery.authorId !== currentUser.id) {
730
+ setDeleteQueryError(/* @__PURE__ */ Error("Only the author can delete a shared query.")), clearDeleting();
731
+ return;
732
+ }
733
+ try {
734
+ await workspaceClient.delete(key), setSharedQueries((prev_3) => prev_3.filter((query_2) => query_2._key !== key));
735
+ } catch (t13) {
736
+ setDeleteQueryError(t13);
737
+ }
738
+ clearDeleting();
739
+ return;
740
+ }
741
+ try {
742
+ let filteredQueries = value.queries.filter((q_0) => q_0._key !== key);
743
+ setValue({ queries: filteredQueries }), await keyValueStore.setKey(keyValueStoreKey, { queries: filteredQueries });
744
+ } catch (t14) {
745
+ setDeleteQueryError(t14);
746
+ }
747
+ clearDeleting();
748
+ }, $[29] = currentUser, $[30] = keyValueStore, $[31] = sharedQueries, $[32] = value.queries, $[33] = workspaceClient, $[34] = t12) : t12 = $[34];
749
+ let deleteQuery = t12, t13;
750
+ return $[35] !== deleteQuery || $[36] !== deleteQueryError || $[37] !== deleting || $[38] !== error || $[39] !== queries || $[40] !== saveQuery || $[41] !== saveQueryError || $[42] !== saving || $[43] !== updateQuery ? (t13 = {
751
+ queries,
752
+ saveQuery,
753
+ updateQuery,
754
+ deleteQuery,
755
+ saving,
756
+ deleting,
757
+ saveQueryError,
758
+ deleteQueryError,
759
+ error
760
+ }, $[35] = deleteQuery, $[36] = deleteQueryError, $[37] = deleting, $[38] = error, $[39] = queries, $[40] = saveQuery, $[41] = saveQueryError, $[42] = saving, $[43] = updateQuery, $[44] = t13) : t13 = $[44], t13;
761
+ }
762
+ function _temp2$4(a, b) {
763
+ return new Date(b.savedAt || 0).getTime() - new Date(a.savedAt || 0).getTime();
764
+ }
765
+ function _temp$5(data) {
766
+ return data || defaultValue;
767
+ }
768
+ var fixedHeader = "_15lckbo0", queryList = "_15lckbo2", scrollContainer = "_15lckbo1";
769
+ function FixedHeader(props) {
770
+ let $ = c(2), t0;
771
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Stack, {
772
+ ...props,
773
+ className: fixedHeader
774
+ }), $[0] = props, $[1] = t0), t0;
775
+ }
776
+ function ScrollContainer(props) {
777
+ let $ = c(2), t0;
778
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Flex, {
779
+ ...props,
780
+ direction: "column",
781
+ flex: 1,
782
+ overflow: "hidden",
783
+ className: scrollContainer
784
+ }), $[0] = props, $[1] = t0), t0;
785
+ }
786
+ function QueryList(props) {
787
+ let $ = c(2), t0;
788
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Box, {
789
+ ...props,
790
+ flex: 1,
791
+ overflow: "auto",
792
+ className: queryList
793
+ }), $[0] = props, $[1] = t0), t0;
794
+ }
795
+ function QueryRecall(t0) {
796
+ let $ = c(134), { url, getStateFromUrl, setStateFromParsedUrl, currentQuery, currentParams, generateUrl, compactMode: t1 } = t0, compactMode = t1 !== void 0 && t1, toast = useToast(), { saveQuery, updateQuery, queries, deleteQuery, saving } = useSavedQueries(), { t } = useTranslation(visionLocaleNamespace), t2;
797
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t2 = {
798
+ month: "short",
799
+ day: "numeric",
800
+ year: "numeric",
801
+ hour: "numeric",
802
+ minute: "2-digit",
803
+ hour12: !0
804
+ }, $[0] = t2) : t2 = $[0];
805
+ let formatDate = useDateTimeFormat(t2), [editingKey, setEditingKey] = useState(null), [editingTitle, setEditingTitle] = useState(""), t3;
806
+ $[1] === Symbol.for("react.memo_cache_sentinel") ? (t3 = {}, $[1] = t3) : t3 = $[1];
807
+ let [optimisticTitles, setOptimisticTitles] = useState(t3), [searchQuery, setSearchQuery] = useState(""), [queryFilter, setQueryFilter] = useState("all"), [selectedUrl, setSelectedUrl] = useState(url), t4;
808
+ $[2] === Symbol.for("react.memo_cache_sentinel") ? (t4 = [], $[2] = t4) : t4 = $[2];
809
+ let [pendingUnshareKeys, setPendingUnshareKeys] = useState(t4), [shareDialogQuery, setShareDialogQuery] = useState(null), t5;
810
+ $[3] !== currentParams || $[4] !== currentQuery || $[5] !== formatDate || $[6] !== generateUrl || $[7] !== getStateFromUrl || $[8] !== queries || $[9] !== saveQuery || $[10] !== t || $[11] !== toast ? (t5 = async () => {
811
+ let newUrl = generateUrl(currentQuery, currentParams);
812
+ if (queries?.some((q) => {
813
+ if (q.shared) return !1;
814
+ let savedQueryObj = getStateFromUrl(q.url);
815
+ return savedQueryObj && savedQueryObj.query === currentQuery && isEqual(savedQueryObj.params, currentParams);
816
+ })) {
817
+ let duplicateQuery = queries?.find((q_0) => {
818
+ if (q_0.shared) return !1;
819
+ let savedQueryObj_0 = getStateFromUrl(q_0.url);
820
+ return savedQueryObj_0 && savedQueryObj_0.query === currentQuery && isEqual(savedQueryObj_0.params, currentParams);
821
+ });
822
+ toast.push({
823
+ closable: !0,
824
+ status: "warning",
825
+ title: t("save-query.already-saved"),
826
+ description: `${duplicateQuery?.title} - ${formatDate.format(new Date(duplicateQuery?.savedAt || ""))}`
827
+ });
828
+ return;
829
+ }
830
+ if (newUrl) try {
831
+ await saveQuery({
832
+ shared: !1,
833
+ url: newUrl,
834
+ savedAt: (/* @__PURE__ */ new Date()).toISOString(),
835
+ title: t("label.untitled-query")
836
+ }), setSelectedUrl(newUrl), toast.push({
837
+ closable: !0,
838
+ status: "success",
839
+ title: t("save-query.success")
840
+ });
841
+ } catch (t6) {
842
+ let err = t6;
843
+ toast.push({
844
+ closable: !0,
845
+ status: "error",
846
+ title: t("save-query.error"),
847
+ description: err instanceof Error ? err.message : String(err)
848
+ });
849
+ }
850
+ }, $[3] = currentParams, $[4] = currentQuery, $[5] = formatDate, $[6] = generateUrl, $[7] = getStateFromUrl, $[8] = queries, $[9] = saveQuery, $[10] = t, $[11] = toast, $[12] = t5) : t5 = $[12];
851
+ let handleSave = t5, t6;
852
+ $[13] === Symbol.for("react.memo_cache_sentinel") ? (t6 = (query) => {
853
+ setShareDialogQuery(query);
854
+ }, $[13] = t6) : t6 = $[13];
855
+ let handleShareQuery = t6, t7;
856
+ $[14] !== deleteQuery || $[15] !== saveQuery || $[16] !== shareDialogQuery || $[17] !== t || $[18] !== toast ? (t7 = async () => {
857
+ if (!shareDialogQuery) return;
858
+ let sharedQueryKey = shareDialogQuery._key, sharedQueryUrl = shareDialogQuery.url, sharedQueryTitle = shareDialogQuery.title || t("label.untitled-query");
859
+ try {
860
+ await saveQuery({
861
+ shared: !0,
862
+ title: sharedQueryTitle,
863
+ url: sharedQueryUrl,
864
+ savedAt: (/* @__PURE__ */ new Date()).toISOString()
865
+ }), await deleteQuery(sharedQueryKey), toast.push({
866
+ closable: !0,
867
+ status: "success",
868
+ title: t("save-query.shared-success")
869
+ });
870
+ } catch (t8) {
871
+ let err_0 = t8;
872
+ toast.push({
873
+ closable: !0,
874
+ status: "error",
875
+ title: t("save-query.error"),
876
+ description: err_0 instanceof Error ? err_0.message : String(err_0)
877
+ });
878
+ }
879
+ setShareDialogQuery(null);
880
+ }, $[14] = deleteQuery, $[15] = saveQuery, $[16] = shareDialogQuery, $[17] = t, $[18] = toast, $[19] = t7) : t7 = $[19];
881
+ let handleConfirmShareQuery = t7, t8;
882
+ $[20] !== deleteQuery || $[21] !== formatDate || $[22] !== getStateFromUrl || $[23] !== queries || $[24] !== saveQuery || $[25] !== t || $[26] !== toast ? (t8 = async (query_0) => {
883
+ setPendingUnshareKeys((prev) => [...prev, query_0._key]);
884
+ let clearPending = () => setPendingUnshareKeys((prev_0) => prev_0.filter((key) => key !== query_0._key)), nextQueryObj = getStateFromUrl(query_0.url), duplicatePersonalQuery = queries?.find((existingQuery) => {
885
+ if (existingQuery._key === query_0._key || existingQuery.shared) return !1;
886
+ let existingQueryObj = getStateFromUrl(existingQuery.url);
887
+ return nextQueryObj && existingQueryObj && existingQueryObj.query === nextQueryObj.query && isEqual(existingQueryObj.params, nextQueryObj.params);
888
+ }), unsharedQueryTitle = query_0.title || t("label.untitled-query");
889
+ if (duplicatePersonalQuery) {
890
+ toast.push({
891
+ closable: !0,
892
+ status: "warning",
893
+ title: t("save-query.already-saved"),
894
+ description: `${duplicatePersonalQuery.title} - ${formatDate.format(new Date(duplicatePersonalQuery.savedAt || ""))}`
895
+ }), clearPending();
896
+ return;
897
+ }
898
+ try {
899
+ await saveQuery({
900
+ shared: !1,
901
+ title: unsharedQueryTitle,
902
+ url: query_0.url,
903
+ savedAt: (/* @__PURE__ */ new Date()).toISOString()
904
+ }), await deleteQuery(query_0._key), toast.push({
905
+ closable: !0,
906
+ status: "success",
907
+ title: t("save-query.unshared-success")
908
+ }), clearPending();
909
+ } catch (t9) {
910
+ let err_1 = t9;
911
+ toast.push({
912
+ closable: !0,
913
+ status: "error",
914
+ title: t("save-query.error"),
915
+ description: err_1 instanceof Error ? err_1.message : String(err_1)
916
+ }), clearPending();
917
+ }
918
+ }, $[20] = deleteQuery, $[21] = formatDate, $[22] = getStateFromUrl, $[23] = queries, $[24] = saveQuery, $[25] = t, $[26] = toast, $[27] = t8) : t8 = $[27];
919
+ let handleUnshareQuery = t8, t9;
920
+ $[28] !== t || $[29] !== toast || $[30] !== updateQuery ? (t9 = async (query_1, newTitle) => {
921
+ setEditingKey(null), setOptimisticTitles((prev_1) => ({
922
+ ...prev_1,
923
+ [query_1._key]: newTitle
924
+ }));
925
+ try {
926
+ await updateQuery({
927
+ ...query_1,
928
+ title: newTitle
929
+ }), setOptimisticTitles((prev_3) => {
930
+ let next_0 = { ...prev_3 };
931
+ return delete next_0[query_1._key], next_0;
932
+ });
933
+ } catch (t10) {
934
+ let err_2 = t10;
935
+ setOptimisticTitles((prev_2) => {
936
+ let next = { ...prev_2 };
937
+ return delete next[query_1._key], next;
938
+ }), toast.push({
939
+ closable: !0,
940
+ status: "error",
941
+ title: t("save-query.error"),
942
+ description: err_2.message
943
+ });
944
+ }
945
+ }, $[28] = t, $[29] = toast, $[30] = updateQuery, $[31] = t9) : t9 = $[31];
946
+ let handleTitleSave = t9, t10;
947
+ $[32] !== currentParams || $[33] !== currentQuery || $[34] !== formatDate || $[35] !== generateUrl || $[36] !== getStateFromUrl || $[37] !== queries || $[38] !== t || $[39] !== toast || $[40] !== updateQuery ? (t10 = async (query_2) => {
948
+ let newUrl_0 = generateUrl(currentQuery, currentParams);
949
+ if (queries?.some((q_1) => {
950
+ if (q_1._key === query_2._key) return !1;
951
+ let savedQueryObj_1 = getStateFromUrl(q_1.url);
952
+ return savedQueryObj_1 && savedQueryObj_1.query === currentQuery && isEqual(savedQueryObj_1.params, currentParams);
953
+ })) {
954
+ let duplicateQuery_0 = queries?.find((q_2) => {
955
+ if (q_2._key === query_2._key) return !1;
956
+ let savedQueryObj_2 = getStateFromUrl(q_2.url);
957
+ return savedQueryObj_2 && savedQueryObj_2.query === currentQuery && isEqual(savedQueryObj_2.params, currentParams);
958
+ });
959
+ toast.push({
960
+ closable: !0,
961
+ status: "warning",
962
+ title: t("save-query.already-saved"),
963
+ description: `${duplicateQuery_0?.title} - ${formatDate.format(new Date(duplicateQuery_0?.savedAt || ""))}`
964
+ });
965
+ return;
966
+ }
967
+ try {
968
+ await updateQuery({
969
+ ...query_2,
970
+ url: newUrl_0,
971
+ savedAt: (/* @__PURE__ */ new Date()).toISOString()
972
+ }), setSelectedUrl(newUrl_0), toast.push({
973
+ closable: !0,
974
+ status: "success",
975
+ title: t("save-query.success")
976
+ });
977
+ } catch (t11) {
978
+ let err_3 = t11;
979
+ toast.push({
980
+ closable: !0,
981
+ status: "error",
982
+ title: t("save-query.error"),
983
+ description: err_3.message
984
+ });
985
+ }
986
+ }, $[32] = currentParams, $[33] = currentQuery, $[34] = formatDate, $[35] = generateUrl, $[36] = getStateFromUrl, $[37] = queries, $[38] = t, $[39] = toast, $[40] = updateQuery, $[41] = t10) : t10 = $[41];
987
+ let handleUpdate = t10, T0, T1, T2, t11, t12, t13, t14;
988
+ if ($[42] !== compactMode || $[43] !== currentParams || $[44] !== currentQuery || $[45] !== deleteQuery || $[46] !== editingKey || $[47] !== editingTitle || $[48] !== formatDate || $[49] !== getStateFromUrl || $[50] !== handleSave || $[51] !== handleTitleSave || $[52] !== handleUnshareQuery || $[53] !== handleUpdate || $[54] !== optimisticTitles || $[55] !== pendingUnshareKeys || $[56] !== queries || $[57] !== queryFilter || $[58] !== saving || $[59] !== searchQuery || $[60] !== selectedUrl || $[61] !== setStateFromParsedUrl || $[62] !== t) {
989
+ let filteredQueries = (queries?.filter((q_3) => !pendingUnshareKeys.includes(q_3._key)))?.filter((q_4) => {
990
+ let matchesSearch = (q_4.title ?? "").toLowerCase().includes(searchQuery.toLowerCase()), matchesFilter = queryFilter === "all" || queryFilter === "personal" && !q_4.shared || queryFilter === "shared" && q_4.shared;
991
+ return matchesSearch && matchesFilter;
992
+ });
993
+ T2 = ScrollContainer;
994
+ let t15;
995
+ $[70] === t ? t15 = $[71] : (t15 = t("label.saved-queries"), $[70] = t, $[71] = t15);
996
+ let t16;
997
+ $[72] === t15 ? t16 = $[73] : (t16 = /* @__PURE__ */ jsx(StyledLabel, {
998
+ muted: !0,
999
+ children: t15
1000
+ }), $[72] = t15, $[73] = t16);
1001
+ let t17;
1002
+ $[74] === t ? t17 = $[75] : (t17 = t("action.save-query"), $[74] = t, $[75] = t17);
1003
+ let t18;
1004
+ $[76] === handleSave ? t18 = $[77] : (t18 = () => void handleSave(), $[76] = handleSave, $[77] = t18);
1005
+ let t19;
1006
+ $[78] !== saving || $[79] !== t17 || $[80] !== t18 ? (t19 = /* @__PURE__ */ jsx(Button, {
1007
+ "aria-label": t17,
1008
+ icon: AddIcon,
1009
+ disabled: saving,
1010
+ onClick: t18,
1011
+ mode: "bleed"
1012
+ }), $[78] = saving, $[79] = t17, $[80] = t18, $[81] = t19) : t19 = $[81];
1013
+ let t20;
1014
+ $[82] !== t16 || $[83] !== t19 ? (t20 = /* @__PURE__ */ jsxs(Flex, {
1015
+ padding: 3,
1016
+ paddingTop: 2,
1017
+ paddingBottom: 0,
1018
+ justify: "space-between",
1019
+ align: "center",
1020
+ children: [t16, t19]
1021
+ }), $[82] = t16, $[83] = t19, $[84] = t20) : t20 = $[84];
1022
+ let t21;
1023
+ $[85] === t ? t21 = $[86] : (t21 = t("label.search-queries"), $[85] = t, $[86] = t21);
1024
+ let t22;
1025
+ $[87] === Symbol.for("react.memo_cache_sentinel") ? (t22 = (event) => setSearchQuery(event.currentTarget.value), $[87] = t22) : t22 = $[87];
1026
+ let t23;
1027
+ $[88] !== searchQuery || $[89] !== t21 ? (t23 = /* @__PURE__ */ jsx(Box, {
1028
+ padding: 3,
1029
+ paddingTop: 0,
1030
+ children: /* @__PURE__ */ jsx(TextInput, {
1031
+ placeholder: t21,
1032
+ icon: SearchIcon,
1033
+ value: searchQuery,
1034
+ onChange: t22
1035
+ })
1036
+ }), $[88] = searchQuery, $[89] = t21, $[90] = t23) : t23 = $[90];
1037
+ let t24;
1038
+ $[91] === t ? t24 = $[92] : (t24 = t("label.all"), $[91] = t, $[92] = t24);
1039
+ let t25 = queryFilter === "all", t26;
1040
+ $[93] === Symbol.for("react.memo_cache_sentinel") ? (t26 = () => setQueryFilter("all"), $[93] = t26) : t26 = $[93];
1041
+ let t27;
1042
+ $[94] !== t24 || $[95] !== t25 ? (t27 = /* @__PURE__ */ jsx(Tab, {
1043
+ id: "query-filter-all",
1044
+ "aria-controls": "vision-query-recall-list",
1045
+ label: t24,
1046
+ selected: t25,
1047
+ onClick: t26
1048
+ }), $[94] = t24, $[95] = t25, $[96] = t27) : t27 = $[96];
1049
+ let t28;
1050
+ $[97] === t ? t28 = $[98] : (t28 = t("label.personal"), $[97] = t, $[98] = t28);
1051
+ let t29 = queryFilter === "personal", t30;
1052
+ $[99] === Symbol.for("react.memo_cache_sentinel") ? (t30 = () => setQueryFilter("personal"), $[99] = t30) : t30 = $[99];
1053
+ let t31;
1054
+ $[100] !== t28 || $[101] !== t29 ? (t31 = /* @__PURE__ */ jsx(Tab, {
1055
+ id: "query-filter-personal",
1056
+ "aria-controls": "vision-query-recall-list",
1057
+ label: t28,
1058
+ selected: t29,
1059
+ onClick: t30
1060
+ }), $[100] = t28, $[101] = t29, $[102] = t31) : t31 = $[102];
1061
+ let t32;
1062
+ $[103] === t ? t32 = $[104] : (t32 = t("label.shared"), $[103] = t, $[104] = t32);
1063
+ let t33 = queryFilter === "shared", t34;
1064
+ $[105] === Symbol.for("react.memo_cache_sentinel") ? (t34 = () => setQueryFilter("shared"), $[105] = t34) : t34 = $[105];
1065
+ let t35;
1066
+ $[106] !== t32 || $[107] !== t33 ? (t35 = /* @__PURE__ */ jsx(Tab, {
1067
+ id: "query-filter-shared",
1068
+ "aria-controls": "vision-query-recall-list",
1069
+ label: t32,
1070
+ selected: t33,
1071
+ onClick: t34
1072
+ }), $[106] = t32, $[107] = t33, $[108] = t35) : t35 = $[108];
1073
+ let t36;
1074
+ $[109] !== t27 || $[110] !== t31 || $[111] !== t35 ? (t36 = /* @__PURE__ */ jsx(Box, {
1075
+ paddingX: 3,
1076
+ paddingBottom: 2,
1077
+ children: /* @__PURE__ */ jsxs(TabList, {
1078
+ space: 1,
1079
+ children: [
1080
+ t27,
1081
+ t31,
1082
+ t35
1083
+ ]
1084
+ })
1085
+ }), $[109] = t27, $[110] = t31, $[111] = t35, $[112] = t36) : t36 = $[112], $[113] !== t20 || $[114] !== t23 || $[115] !== t36 ? (t14 = /* @__PURE__ */ jsxs(FixedHeader, {
1086
+ space: 3,
1087
+ children: [
1088
+ t20,
1089
+ t23,
1090
+ t36
1091
+ ]
1092
+ }), $[113] = t20, $[114] = t23, $[115] = t36, $[116] = t14) : t14 = $[116], T1 = QueryList, t13 = "vision-query-recall-list", T0 = Stack, t11 = 3, t12 = filteredQueries?.map((q_5, index) => {
1093
+ let queryObj = getStateFromUrl(q_5.url), fullQueryPreview = queryObj?.query || "", shortQueryPreview = fullQueryPreview.split("{")[0], isSelected = selectedUrl === q_5.url, canMutateQuery = !q_5.shared || q_5.isOwnedByCurrentUser, areQueriesEqual = queryObj && currentQuery === queryObj.query && isEqual(currentParams, queryObj.params), isEdited = isSelected && !areQueriesEqual && canMutateQuery;
1094
+ return /* @__PURE__ */ jsx(Card, {
1095
+ paddingX: compactMode ? 3 : 4,
1096
+ paddingY: compactMode ? 3 : 4,
1097
+ tone: "default",
1098
+ onClick: (event_0) => {
1099
+ if (event_0.target?.closest("[data-query-actions=\"true\"]")) return;
1100
+ setSelectedUrl(q_5.url);
1101
+ let parsedUrl = getStateFromUrl(q_5.url);
1102
+ parsedUrl && setStateFromParsedUrl(parsedUrl);
1103
+ },
1104
+ style: {
1105
+ borderTop: index === 0 ? "1px solid var(--card-border-color)" : void 0,
1106
+ position: "relative",
1107
+ borderBottom: "1px solid var(--card-border-color)",
1108
+ borderLeft: isSelected ? "2px solid var(--card-muted-fg-color)" : "2px solid transparent",
1109
+ cursor: "pointer"
1110
+ },
1111
+ children: /* @__PURE__ */ jsxs(Stack, {
1112
+ space: compactMode ? 2 : 3,
1113
+ children: [
1114
+ /* @__PURE__ */ jsxs(Flex, {
1115
+ justify: "space-between",
1116
+ align: "center",
1117
+ style: { minHeight: "25px" },
1118
+ children: [/* @__PURE__ */ jsxs(Flex, {
1119
+ align: "center",
1120
+ gap: 2,
1121
+ paddingRight: 1,
1122
+ style: {
1123
+ minWidth: 0,
1124
+ flex: 1
1125
+ },
1126
+ children: [editingKey === q_5._key ? /* @__PURE__ */ jsx(TextInput, {
1127
+ value: editingTitle,
1128
+ onChange: (event_1) => setEditingTitle(event_1.currentTarget.value),
1129
+ onKeyDown: (event_2) => {
1130
+ event_2.key === "Enter" ? handleTitleSave(q_5, editingTitle) : event_2.key === "Escape" && setEditingKey(null);
1131
+ },
1132
+ onBlur: () => handleTitleSave(q_5, editingTitle),
1133
+ autoFocus: !0,
1134
+ style: {
1135
+ maxWidth: "170px",
1136
+ height: "24px"
1137
+ }
1138
+ }) : /* @__PURE__ */ jsx(Text, {
1139
+ weight: "bold",
1140
+ size: compactMode ? 2 : 3,
1141
+ textOverflow: "ellipsis",
1142
+ style: {
1143
+ maxWidth: compactMode ? "180px" : "220px",
1144
+ cursor: canMutateQuery ? "pointer" : "default",
1145
+ padding: "2px 0"
1146
+ },
1147
+ title: optimisticTitles[q_5._key] || q_5.title || q_5._key.slice(q_5._key.length - 5, q_5._key.length),
1148
+ onClick: canMutateQuery ? () => {
1149
+ setEditingKey(q_5._key), setEditingTitle(q_5.title || q_5._key.slice(0, 5));
1150
+ } : void 0,
1151
+ children: optimisticTitles[q_5._key] || q_5.title || q_5._key.slice(q_5._key.length - 5, q_5._key.length)
1152
+ }), isEdited && /* @__PURE__ */ jsx(Box, { style: {
1153
+ width: "6px",
1154
+ height: "6px",
1155
+ borderRadius: "50%",
1156
+ backgroundColor: "var(--card-focus-ring-color)"
1157
+ } })]
1158
+ }), /* @__PURE__ */ jsx(Flex, {
1159
+ align: "center",
1160
+ gap: 2,
1161
+ children: /* @__PURE__ */ jsx(Box, {
1162
+ "data-query-actions": "true",
1163
+ style: {
1164
+ width: "25px",
1165
+ height: "25px",
1166
+ display: "flex",
1167
+ alignItems: "center"
1168
+ },
1169
+ children: (!q_5.shared || canMutateQuery) && /* @__PURE__ */ jsx(MenuButton, {
1170
+ button: /* @__PURE__ */ jsx(ContextMenuButton, {}),
1171
+ id: `${q_5._key}-menu`,
1172
+ menu: /* @__PURE__ */ jsxs(Menu, { children: [
1173
+ !q_5.shared && /* @__PURE__ */ jsx(MenuItem, {
1174
+ icon: UsersIcon,
1175
+ padding: 3,
1176
+ text: t("label.share"),
1177
+ onClick: (event_3) => {
1178
+ event_3.stopPropagation(), handleShareQuery(q_5);
1179
+ }
1180
+ }),
1181
+ q_5.shared && canMutateQuery && /* @__PURE__ */ jsx(MenuItem, {
1182
+ icon: UnpublishIcon,
1183
+ padding: 3,
1184
+ text: t("action.unshare"),
1185
+ onClick: (event_4) => {
1186
+ event_4.stopPropagation(), handleUnshareQuery(q_5);
1187
+ }
1188
+ }),
1189
+ canMutateQuery && /* @__PURE__ */ jsx(MenuItem, {
1190
+ tone: "critical",
1191
+ padding: 3,
1192
+ icon: TrashIcon,
1193
+ text: t("action.delete"),
1194
+ onClick: (event_5) => {
1195
+ event_5.stopPropagation(), deleteQuery(q_5._key);
1196
+ }
1197
+ })
1198
+ ] }),
1199
+ popover: {
1200
+ portal: !0,
1201
+ placement: "bottom-end",
1202
+ tone: "default"
1203
+ }
1204
+ })
1205
+ })
1206
+ })]
1207
+ }),
1208
+ fullQueryPreview ? /* @__PURE__ */ jsx(Tooltip, {
1209
+ content: /* @__PURE__ */ jsx(Box, {
1210
+ padding: 2,
1211
+ style: {
1212
+ maxWidth: "420px",
1213
+ maxHeight: "220px",
1214
+ overflow: "auto"
1215
+ },
1216
+ children: /* @__PURE__ */ jsx(Code, {
1217
+ size: 1,
1218
+ children: fullQueryPreview
1219
+ })
1220
+ }),
1221
+ placement: "top",
1222
+ portal: !0,
1223
+ children: /* @__PURE__ */ jsx(Code, {
1224
+ size: 1,
1225
+ children: shortQueryPreview
1226
+ })
1227
+ }) : /* @__PURE__ */ jsx(Code, {}),
1228
+ compactMode ? /* @__PURE__ */ jsxs(Stack, {
1229
+ space: 1,
1230
+ style: {
1231
+ paddingTop: 0,
1232
+ minHeight: "30px"
1233
+ },
1234
+ children: [/* @__PURE__ */ jsxs(Flex, {
1235
+ align: "center",
1236
+ gap: 2,
1237
+ style: { minHeight: "18px" },
1238
+ children: [/* @__PURE__ */ jsx(Box, {
1239
+ style: {
1240
+ display: "flex",
1241
+ alignItems: "center",
1242
+ justifyContent: "center",
1243
+ width: "17px",
1244
+ height: "17px"
1245
+ },
1246
+ children: q_5.shared ? /* @__PURE__ */ jsx(UserAvatar, {
1247
+ size: 0,
1248
+ user: q_5.authorId || "",
1249
+ withTooltip: !0
1250
+ }) : /* @__PURE__ */ jsx(Box, {
1251
+ style: {
1252
+ display: "flex",
1253
+ alignItems: "center",
1254
+ justifyContent: "center",
1255
+ lineHeight: 0,
1256
+ color: "var(--card-muted-fg-color)"
1257
+ },
1258
+ children: /* @__PURE__ */ jsx(LockIcon, {})
1259
+ })
1260
+ }), /* @__PURE__ */ jsx(Badge, {
1261
+ mode: "outline",
1262
+ tone: q_5.shared ? "primary" : "default",
1263
+ style: {
1264
+ whiteSpace: "nowrap",
1265
+ overflow: "hidden",
1266
+ textOverflow: "ellipsis"
1267
+ },
1268
+ children: q_5.shared ? t("label.shared") : t("label.personal")
1269
+ })]
1270
+ }), /* @__PURE__ */ jsx(Text, {
1271
+ size: 1,
1272
+ muted: !0,
1273
+ children: formatDate.format(new Date(q_5.savedAt || ""))
1274
+ })]
1275
+ }) : /* @__PURE__ */ jsxs(Flex, {
1276
+ align: "center",
1277
+ gap: 2,
1278
+ style: {
1279
+ paddingTop: "2px",
1280
+ minHeight: "20px"
1281
+ },
1282
+ children: [
1283
+ /* @__PURE__ */ jsx(Box, {
1284
+ style: {
1285
+ display: "flex",
1286
+ alignItems: "center",
1287
+ justifyContent: "center",
1288
+ width: "17px",
1289
+ height: "17px"
1290
+ },
1291
+ children: q_5.shared ? /* @__PURE__ */ jsx(UserAvatar, {
1292
+ size: 0,
1293
+ user: q_5.authorId || "",
1294
+ withTooltip: !0
1295
+ }) : /* @__PURE__ */ jsx(Box, {
1296
+ style: {
1297
+ display: "flex",
1298
+ alignItems: "center",
1299
+ justifyContent: "center",
1300
+ lineHeight: 0,
1301
+ color: "var(--card-muted-fg-color)"
1302
+ },
1303
+ children: /* @__PURE__ */ jsx(LockIcon, {})
1304
+ })
1305
+ }),
1306
+ /* @__PURE__ */ jsx(Badge, {
1307
+ mode: "outline",
1308
+ tone: q_5.shared ? "primary" : "default",
1309
+ style: {
1310
+ whiteSpace: "nowrap",
1311
+ overflow: "hidden",
1312
+ textOverflow: "ellipsis"
1313
+ },
1314
+ children: q_5.shared ? t("label.shared") : t("label.personal")
1315
+ }),
1316
+ /* @__PURE__ */ jsx(Text, {
1317
+ size: 1,
1318
+ muted: !0,
1319
+ children: "•"
1320
+ }),
1321
+ /* @__PURE__ */ jsx(Text, {
1322
+ size: 1,
1323
+ muted: !0,
1324
+ children: formatDate.format(new Date(q_5.savedAt || ""))
1325
+ })
1326
+ ]
1327
+ }),
1328
+ isEdited && /* @__PURE__ */ jsx(Button, {
1329
+ mode: "ghost",
1330
+ tone: "default",
1331
+ padding: 2,
1332
+ style: {
1333
+ height: "24px",
1334
+ position: "absolute",
1335
+ right: "16px",
1336
+ bottom: "16px",
1337
+ fontSize: "12px"
1338
+ },
1339
+ text: t("action.update"),
1340
+ onClick: (e) => {
1341
+ e.stopPropagation(), handleUpdate(q_5);
1342
+ }
1343
+ })
1344
+ ]
1345
+ })
1346
+ }, q_5._key);
1347
+ }), $[42] = compactMode, $[43] = currentParams, $[44] = currentQuery, $[45] = deleteQuery, $[46] = editingKey, $[47] = editingTitle, $[48] = formatDate, $[49] = getStateFromUrl, $[50] = handleSave, $[51] = handleTitleSave, $[52] = handleUnshareQuery, $[53] = handleUpdate, $[54] = optimisticTitles, $[55] = pendingUnshareKeys, $[56] = queries, $[57] = queryFilter, $[58] = saving, $[59] = searchQuery, $[60] = selectedUrl, $[61] = setStateFromParsedUrl, $[62] = t, $[63] = T0, $[64] = T1, $[65] = T2, $[66] = t11, $[67] = t12, $[68] = t13, $[69] = t14;
1348
+ } else T0 = $[63], T1 = $[64], T2 = $[65], t11 = $[66], t12 = $[67], t13 = $[68], t14 = $[69];
1349
+ let t15;
1350
+ $[117] !== T0 || $[118] !== t11 || $[119] !== t12 ? (t15 = /* @__PURE__ */ jsx(T0, {
1351
+ paddingY: t11,
1352
+ children: t12
1353
+ }), $[117] = T0, $[118] = t11, $[119] = t12, $[120] = t15) : t15 = $[120];
1354
+ let t16;
1355
+ $[121] !== T1 || $[122] !== t13 || $[123] !== t15 ? (t16 = /* @__PURE__ */ jsx(T1, {
1356
+ id: t13,
1357
+ children: t15
1358
+ }), $[121] = T1, $[122] = t13, $[123] = t15, $[124] = t16) : t16 = $[124];
1359
+ let t17;
1360
+ $[125] !== handleConfirmShareQuery || $[126] !== shareDialogQuery || $[127] !== t ? (t17 = shareDialogQuery && /* @__PURE__ */ jsx(Dialog, {
1361
+ id: "vision-query-recall-share-dialog",
1362
+ width: 1,
1363
+ header: t("label.share"),
1364
+ onClose: () => setShareDialogQuery(null),
1365
+ footer: /* @__PURE__ */ jsxs(Flex, {
1366
+ justify: "flex-end",
1367
+ gap: 3,
1368
+ padding: 3,
1369
+ align: "center",
1370
+ children: [/* @__PURE__ */ jsx(Button, {
1371
+ mode: "bleed",
1372
+ padding: 2,
1373
+ text: t("action.query-cancel"),
1374
+ onClick: () => setShareDialogQuery(null)
1375
+ }), /* @__PURE__ */ jsx(Button, {
1376
+ padding: 2,
1377
+ tone: "primary",
1378
+ text: t("action.save-shared-query"),
1379
+ onClick: () => void handleConfirmShareQuery()
1380
+ })]
1381
+ }),
1382
+ children: /* @__PURE__ */ jsx(Box, {
1383
+ padding: 4,
1384
+ children: /* @__PURE__ */ jsx(Text, {
1385
+ size: 2,
1386
+ children: t("save-query.share-warning")
1387
+ })
1388
+ })
1389
+ }), $[125] = handleConfirmShareQuery, $[126] = shareDialogQuery, $[127] = t, $[128] = t17) : t17 = $[128];
1390
+ let t18;
1391
+ return $[129] !== T2 || $[130] !== t14 || $[131] !== t16 || $[132] !== t17 ? (t18 = /* @__PURE__ */ jsxs(T2, { children: [
1392
+ t14,
1393
+ t16,
1394
+ t17
1395
+ ] }), $[129] = T2, $[130] = t14, $[131] = t16, $[132] = t17, $[133] = t18) : t18 = $[133], t18;
1396
+ }
1397
+ function narrowBreakpoint() {
1398
+ return typeof window < "u" && window.innerWidth > 600;
1399
+ }
1400
+ function calculatePaneSizeOptions(height) {
1401
+ let rootHeight = height;
1402
+ return rootHeight ||= typeof window < "u" && typeof document < "u" ? document.body.getBoundingClientRect().height - 60 : 0, {
1403
+ defaultSize: rootHeight / (narrowBreakpoint() ? 2 : 1),
1404
+ size: rootHeight > 550 ? void 0 : rootHeight * .4,
1405
+ allowResize: rootHeight > 550,
1406
+ minSize: Math.min(170, Math.max(170, rootHeight / 2)),
1407
+ maxSize: rootHeight > 650 ? rootHeight * .7 : rootHeight * .6
1408
+ };
1409
+ }
1410
+ function usePaneSize(t0) {
1411
+ let $ = c(7), { visionRootRef } = t0, [rootSize, setRootSize] = useState(_temp$4), [isNarrowBreakpoint, setIsNarrowBreakpoint] = useState(_temp2$3), [paneSizeOptions, setPaneSizeOptions] = useState(_temp3$2), t1, t2;
1412
+ $[0] === visionRootRef ? (t1 = $[1], t2 = $[2]) : (t1 = () => {
1413
+ if (!visionRootRef.current) return;
1414
+ let resizeObserver = new ResizeObserver((entries) => {
1415
+ let entry = entries?.[0];
1416
+ entry && (setRootSize({
1417
+ width: entry.contentRect.width,
1418
+ height: entry.contentRect.height
1419
+ }), setIsNarrowBreakpoint(entry.contentRect.width > 600), setPaneSizeOptions(calculatePaneSizeOptions(entry.contentRect.height)));
1420
+ });
1421
+ return resizeObserver.observe(visionRootRef.current), () => {
1422
+ resizeObserver.disconnect();
1423
+ };
1424
+ }, t2 = [visionRootRef], $[0] = visionRootRef, $[1] = t1, $[2] = t2), useEffect(t1, t2);
1425
+ let t3;
1426
+ return $[3] !== isNarrowBreakpoint || $[4] !== paneSizeOptions || $[5] !== rootSize ? (t3 = {
1427
+ paneSizeOptions,
1428
+ isNarrowBreakpoint,
1429
+ rootSize
1430
+ }, $[3] = isNarrowBreakpoint, $[4] = paneSizeOptions, $[5] = rootSize, $[6] = t3) : t3 = $[6], t3;
1431
+ }
1432
+ function _temp3$2() {
1433
+ return calculatePaneSizeOptions(void 0);
1434
+ }
1435
+ function _temp2$3() {
1436
+ return narrowBreakpoint();
1437
+ }
1438
+ function _temp$4() {
1439
+ return {
1440
+ width: typeof window < "u" ? window.innerWidth : 1e3,
1441
+ height: typeof window < "u" ? window.innerHeight : 800
1442
+ };
1443
+ }
1444
+ /**
1445
+ * Vision GUI controls
1446
+ * To handle query and listen execution.
1447
+ */
1448
+ function VisionGuiControls(t0) {
1449
+ let $ = c(30), { hasValidParams, listenInProgress, queryInProgress, onQueryExecution, onListenExecution } = t0, { t } = useTranslation(visionLocaleNamespace), t1;
1450
+ $[0] === t ? t1 = $[1] : (t1 = t("params.error.params-invalid-json"), $[0] = t, $[1] = t1);
1451
+ let t2;
1452
+ $[2] === t1 ? t2 = $[3] : (t2 = /* @__PURE__ */ jsx(Card, {
1453
+ radius: 4,
1454
+ children: /* @__PURE__ */ jsx(Text, {
1455
+ size: 1,
1456
+ muted: !0,
1457
+ children: t1
1458
+ })
1459
+ }), $[2] = t1, $[3] = t2);
1460
+ let t3;
1461
+ $[4] === Symbol.for("react.memo_cache_sentinel") ? (t3 = /* @__PURE__ */ jsx(Card, {
1462
+ radius: 4,
1463
+ children: /* @__PURE__ */ jsx(Hotkeys, { keys: ["Ctrl", "Enter"] })
1464
+ }), $[4] = t3) : t3 = $[4];
1465
+ let t4 = queryInProgress ? StopIcon : PlayIcon, t5 = listenInProgress || !hasValidParams, t6 = queryInProgress ? "positive" : "primary", t7;
1466
+ $[5] !== queryInProgress || $[6] !== t ? (t7 = t(queryInProgress ? "action.query-cancel" : "action.query-execute"), $[5] = queryInProgress, $[6] = t, $[7] = t7) : t7 = $[7];
1467
+ let t8;
1468
+ $[8] !== onQueryExecution || $[9] !== t4 || $[10] !== t5 || $[11] !== t6 || $[12] !== t7 ? (t8 = /* @__PURE__ */ jsx(Box, {
1469
+ flex: 1,
1470
+ children: /* @__PURE__ */ jsx(Tooltip, {
1471
+ content: t3,
1472
+ placement: "top",
1473
+ portal: !0,
1474
+ children: /* @__PURE__ */ jsx(Button, {
1475
+ width: "fill",
1476
+ onClick: onQueryExecution,
1477
+ type: "button",
1478
+ icon: t4,
1479
+ disabled: t5,
1480
+ tone: t6,
1481
+ text: t7
1482
+ })
1483
+ })
1484
+ }), $[8] = onQueryExecution, $[9] = t4, $[10] = t5, $[11] = t6, $[12] = t7, $[13] = t8) : t8 = $[13];
1485
+ let t9 = listenInProgress ? StopIcon : PlayIcon, t10;
1486
+ $[14] !== listenInProgress || $[15] !== t ? (t10 = t(listenInProgress ? "action.listen-cancel" : "action.listen-execute"), $[14] = listenInProgress, $[15] = t, $[16] = t10) : t10 = $[16];
1487
+ let t11 = !hasValidParams, t12 = listenInProgress ? "positive" : "default", t13;
1488
+ $[17] !== onListenExecution || $[18] !== t10 || $[19] !== t11 || $[20] !== t12 || $[21] !== t9 ? (t13 = /* @__PURE__ */ jsx(Box, {
1489
+ flex: 1,
1490
+ marginLeft: 3,
1491
+ children: /* @__PURE__ */ jsx(Button, {
1492
+ width: "fill",
1493
+ onClick: onListenExecution,
1494
+ type: "button",
1495
+ icon: t9,
1496
+ text: t10,
1497
+ mode: "ghost",
1498
+ disabled: t11,
1499
+ tone: t12
1500
+ })
1501
+ }), $[17] = onListenExecution, $[18] = t10, $[19] = t11, $[20] = t12, $[21] = t9, $[22] = t13) : t13 = $[22];
1502
+ let t14;
1503
+ $[23] !== t13 || $[24] !== t8 ? (t14 = /* @__PURE__ */ jsxs(Flex, {
1504
+ justify: "space-evenly",
1505
+ children: [t8, t13]
1506
+ }), $[23] = t13, $[24] = t8, $[25] = t14) : t14 = $[25];
1507
+ let t15;
1508
+ return $[26] !== hasValidParams || $[27] !== t14 || $[28] !== t2 ? (t15 = /* @__PURE__ */ jsx(ControlsContainer, { children: /* @__PURE__ */ jsx(Card, {
1509
+ padding: 3,
1510
+ paddingX: 3,
1511
+ children: /* @__PURE__ */ jsx(Tooltip, {
1512
+ content: t2,
1513
+ placement: "top",
1514
+ disabled: hasValidParams,
1515
+ portal: !0,
1516
+ children: t14
1517
+ })
1518
+ }) }), $[26] = hasValidParams, $[27] = t14, $[28] = t2, $[29] = t15) : t15 = $[29], t15;
1519
+ }
1520
+ var dot = "_1i6jn8t2", perspectivePopoverContent = "_1i6jn8t0", perspectivePopoverLink = "_1i6jn8t1";
1521
+ function PerspectivePopoverContent(props) {
1522
+ let $ = c(2), t0;
1523
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Box, {
1524
+ ...props,
1525
+ className: perspectivePopoverContent
1526
+ }), $[0] = props, $[1] = t0), t0;
1527
+ }
1528
+ function PerspectivePopoverLink(props) {
1529
+ let $ = c(2), t0;
1530
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx("a", {
1531
+ ...props,
1532
+ className: perspectivePopoverLink
1533
+ }), $[0] = props, $[1] = t0), t0;
1534
+ }
1535
+ function Dot(t0) {
1536
+ let $ = c(2), { tone } = t0, t1 = `var(--card-badge-${tone}-dot-color)`, t2;
1537
+ return $[0] === t1 ? t2 = $[1] : (t2 = /* @__PURE__ */ jsx("div", {
1538
+ className: dot,
1539
+ style: { backgroundColor: t1 }
1540
+ }), $[0] = t1, $[1] = t2), t2;
1541
+ }
1542
+ function PerspectivePopover() {
1543
+ let $ = c(39), [open, setOpen] = useState(!1), buttonRef = useRef(null), popoverRef = useRef(null), t0;
1544
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = () => setOpen(_temp$3), $[0] = t0) : t0 = $[0];
1545
+ let handleClick = t0, { t } = useTranslation(visionLocaleNamespace), t1, t2;
1546
+ $[1] === Symbol.for("react.memo_cache_sentinel") ? (t1 = () => setOpen(!1), t2 = () => [buttonRef.current, popoverRef.current], $[1] = t1, $[2] = t2) : (t1 = $[1], t2 = $[2]), useClickOutsideEvent(t1, t2);
1547
+ let t3;
1548
+ $[3] === t ? t3 = $[4] : (t3 = t("settings.perspectives.title"), $[3] = t, $[4] = t3);
1549
+ let t4;
1550
+ $[5] === t3 ? t4 = $[6] : (t4 = /* @__PURE__ */ jsx(Inline, {
1551
+ space: 2,
1552
+ children: /* @__PURE__ */ jsx(Text, {
1553
+ weight: "medium",
1554
+ children: t3
1555
+ })
1556
+ }), $[5] = t3, $[6] = t4);
1557
+ let t5;
1558
+ $[7] === t ? t5 = $[8] : (t5 = t("settings.perspectives.description"), $[7] = t, $[8] = t5);
1559
+ let t6;
1560
+ $[9] === t5 ? t6 = $[10] : (t6 = /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(Text, {
1561
+ muted: !0,
1562
+ children: t5
1563
+ }) }), $[9] = t5, $[10] = t6);
1564
+ let t7;
1565
+ $[11] === t ? t7 = $[12] : (t7 = t("label.new"), $[11] = t, $[12] = t7);
1566
+ let t8;
1567
+ $[13] === t7 ? t8 = $[14] : (t8 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Badge, {
1568
+ tone: "primary",
1569
+ children: t7
1570
+ }) }), $[13] = t7, $[14] = t8);
1571
+ let t9;
1572
+ $[15] === t ? t9 = $[16] : (t9 = /* @__PURE__ */ jsx(Text, {
1573
+ muted: !0,
1574
+ children: /* @__PURE__ */ jsx(Translate, {
1575
+ t,
1576
+ i18nKey: "settings.perspective.preview-drafts-renamed-to-drafts.description"
1577
+ })
1578
+ }), $[15] = t, $[16] = t9);
1579
+ let t10;
1580
+ $[17] !== t8 || $[18] !== t9 ? (t10 = /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(Stack, {
1581
+ space: 2,
1582
+ children: [t8, t9]
1583
+ }) }), $[17] = t8, $[18] = t9, $[19] = t10) : t10 = $[19];
1584
+ let t11;
1585
+ $[20] === t ? t11 = $[21] : (t11 = null, $[20] = t, $[21] = t11);
1586
+ let t12;
1587
+ $[22] === t ? t12 = $[23] : (t12 = t("settings.perspectives.action.docs-link"), $[22] = t, $[23] = t12);
1588
+ let t13;
1589
+ $[24] === t12 ? t13 = $[25] : (t13 = /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(Text, { children: /* @__PURE__ */ jsxs(PerspectivePopoverLink, {
1590
+ href: "https://www.sanity.io/docs/perspectives",
1591
+ target: "_blank",
1592
+ rel: "noopener noreferrer",
1593
+ children: [t12, " →"]
1594
+ }) }) }), $[24] = t12, $[25] = t13);
1595
+ let t14;
1596
+ $[26] !== t10 || $[27] !== t11 || $[28] !== t13 || $[29] !== t4 || $[30] !== t6 ? (t14 = /* @__PURE__ */ jsx(PerspectivePopoverContent, { children: /* @__PURE__ */ jsxs(Stack, {
1597
+ space: 4,
1598
+ children: [
1599
+ t4,
1600
+ t6,
1601
+ t10,
1602
+ t11,
1603
+ t13
1604
+ ]
1605
+ }) }), $[26] = t10, $[27] = t11, $[28] = t13, $[29] = t4, $[30] = t6, $[31] = t14) : t14 = $[31];
1606
+ let t15;
1607
+ $[32] === Symbol.for("react.memo_cache_sentinel") ? (t15 = /* @__PURE__ */ jsx(Dot, { tone: "primary" }), $[32] = t15) : t15 = $[32];
1608
+ let t16;
1609
+ $[33] === open ? t16 = $[34] : (t16 = /* @__PURE__ */ jsx(Button, {
1610
+ icon: HelpCircleIcon,
1611
+ mode: "bleed",
1612
+ padding: 2,
1613
+ paddingRight: 1,
1614
+ tone: "primary",
1615
+ fontSize: 1,
1616
+ ref: buttonRef,
1617
+ onClick: handleClick,
1618
+ selected: open,
1619
+ children: t15
1620
+ }), $[33] = open, $[34] = t16);
1621
+ let t17;
1622
+ return $[35] !== open || $[36] !== t14 || $[37] !== t16 ? (t17 = /* @__PURE__ */ jsx(Popover, {
1623
+ content: t14,
1624
+ placement: "bottom-start",
1625
+ portal: !0,
1626
+ padding: 3,
1627
+ ref: popoverRef,
1628
+ open,
1629
+ children: t16
1630
+ }), $[35] = open, $[36] = t14, $[37] = t16, $[38] = t17) : t17 = $[38], t17;
1631
+ }
1632
+ function _temp$3(o) {
1633
+ return !o;
1634
+ }
1635
+ const PinnedReleasePerspectiveOption = (t0) => {
1636
+ let $ = c(11), { pinnedPerspective, t } = t0, name = typeof pinnedPerspective.selectedPerspective == "object" ? pinnedPerspective.selectedPerspective.metadata.title : pinnedPerspective.selectedPerspectiveName, t1;
1637
+ $[0] !== pinnedPerspective || $[1] !== t ? (t1 = hasPinnedPerspective(pinnedPerspective) ? `(${t("settings.perspectives.pinned-release-label")})` : t("settings.perspectives.pinned-release-label"), $[0] = pinnedPerspective, $[1] = t, $[2] = t1) : t1 = $[2];
1638
+ let label = t1, t2;
1639
+ $[3] !== label || $[4] !== name ? (t2 = [name, label].filter(_temp$2), $[3] = label, $[4] = name, $[5] = t2) : t2 = $[5];
1640
+ let text = t2.join(" "), t3;
1641
+ $[6] === pinnedPerspective ? t3 = $[7] : (t3 = hasPinnedPerspective(pinnedPerspective), $[6] = pinnedPerspective, $[7] = t3);
1642
+ let t4 = !t3, t5;
1643
+ return $[8] !== t4 || $[9] !== text ? (t5 = /* @__PURE__ */ jsx("option", {
1644
+ value: "pinnedRelease",
1645
+ disabled: t4,
1646
+ children: text
1647
+ }), $[8] = t4, $[9] = text, $[10] = t5) : t5 = $[10], t5;
1648
+ };
1649
+ function VisionGuiHeader(t0) {
1650
+ let $ = c(68), { onChangeDataset, dataset, customApiVersion, apiVersion, onChangeApiVersion, datasets, customApiVersionElementRef, onCustomApiVersionChange, isValidApiVersion, onChangePerspective, url, perspective, isScheduledDraftsEnabled } = t0, pinnedPerspective = usePerspective(), { t } = useTranslation(visionLocaleNamespace), operationUrlElement = useRef(null), t1;
1651
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t1 = () => {
1652
+ let el = operationUrlElement.current;
1653
+ if (el) try {
1654
+ el.select(), document.execCommand("copy");
1655
+ } catch {
1656
+ console.error("Unable to copy to clipboard :(");
1657
+ }
1658
+ }, $[0] = t1) : t1 = $[0];
1659
+ let handleCopyUrl = t1, t2;
1660
+ $[1] === Symbol.for("react.memo_cache_sentinel") ? (t2 = [
1661
+ 1,
1662
+ 4,
1663
+ 8,
1664
+ 12
1665
+ ], $[1] = t2) : t2 = $[1];
1666
+ let t3;
1667
+ $[2] === Symbol.for("react.memo_cache_sentinel") ? (t3 = [1, 2], $[2] = t3) : t3 = $[2];
1668
+ let t4;
1669
+ $[3] === t ? t4 = $[4] : (t4 = t("settings.dataset-label"), $[3] = t, $[4] = t4);
1670
+ let t5;
1671
+ $[5] === t4 ? t5 = $[6] : (t5 = /* @__PURE__ */ jsx(Card, {
1672
+ paddingTop: 2,
1673
+ paddingBottom: 3,
1674
+ children: /* @__PURE__ */ jsx(StyledLabel, { children: t4 })
1675
+ }), $[5] = t4, $[6] = t5);
1676
+ let t6;
1677
+ $[7] === datasets ? t6 = $[8] : (t6 = datasets.map(_temp2$2), $[7] = datasets, $[8] = t6);
1678
+ let t7;
1679
+ $[9] !== dataset || $[10] !== onChangeDataset || $[11] !== t6 ? (t7 = /* @__PURE__ */ jsx(Select, {
1680
+ value: dataset,
1681
+ onChange: onChangeDataset,
1682
+ children: t6
1683
+ }), $[9] = dataset, $[10] = onChangeDataset, $[11] = t6, $[12] = t7) : t7 = $[12];
1684
+ let t8;
1685
+ $[13] !== t5 || $[14] !== t7 ? (t8 = /* @__PURE__ */ jsx(Box, {
1686
+ padding: 1,
1687
+ column: t3,
1688
+ children: /* @__PURE__ */ jsxs(Stack, { children: [t5, t7] })
1689
+ }), $[13] = t5, $[14] = t7, $[15] = t8) : t8 = $[15];
1690
+ let t9;
1691
+ $[16] === Symbol.for("react.memo_cache_sentinel") ? (t9 = [1, 2], $[16] = t9) : t9 = $[16];
1692
+ let t10;
1693
+ $[17] === t ? t10 = $[18] : (t10 = t("settings.api-version-label"), $[17] = t, $[18] = t10);
1694
+ let t11;
1695
+ $[19] === t10 ? t11 = $[20] : (t11 = /* @__PURE__ */ jsx(Card, {
1696
+ paddingTop: 2,
1697
+ paddingBottom: 3,
1698
+ children: /* @__PURE__ */ jsx(StyledLabel, { children: t10 })
1699
+ }), $[19] = t10, $[20] = t11);
1700
+ let t12 = customApiVersion === !1 ? apiVersion : "other", t13;
1701
+ $[21] === Symbol.for("react.memo_cache_sentinel") ? (t13 = API_VERSIONS.map(_temp3$1), $[21] = t13) : t13 = $[21];
1702
+ let t14;
1703
+ $[22] === t ? t14 = $[23] : (t14 = t("settings.other-api-version-label"), $[22] = t, $[23] = t14);
1704
+ let t15;
1705
+ $[24] === t14 ? t15 = $[25] : (t15 = /* @__PURE__ */ jsx("option", {
1706
+ value: "other",
1707
+ children: t14
1708
+ }, "other"), $[24] = t14, $[25] = t15);
1709
+ let t16;
1710
+ $[26] !== onChangeApiVersion || $[27] !== t12 || $[28] !== t15 ? (t16 = /* @__PURE__ */ jsxs(Select, {
1711
+ "data-testid": "api-version-selector",
1712
+ value: t12,
1713
+ onChange: onChangeApiVersion,
1714
+ children: [t13, t15]
1715
+ }), $[26] = onChangeApiVersion, $[27] = t12, $[28] = t15, $[29] = t16) : t16 = $[29];
1716
+ let t17;
1717
+ $[30] !== t11 || $[31] !== t16 ? (t17 = /* @__PURE__ */ jsx(Box, {
1718
+ padding: 1,
1719
+ column: t9,
1720
+ children: /* @__PURE__ */ jsxs(Stack, { children: [t11, t16] })
1721
+ }), $[30] = t11, $[31] = t16, $[32] = t17) : t17 = $[32];
1722
+ let t18;
1723
+ $[33] !== customApiVersion || $[34] !== customApiVersionElementRef || $[35] !== isValidApiVersion || $[36] !== onCustomApiVersionChange || $[37] !== t ? (t18 = customApiVersion !== !1 && /* @__PURE__ */ jsx(Box, {
1724
+ padding: 1,
1725
+ column: [1, 2],
1726
+ children: /* @__PURE__ */ jsxs(Stack, { children: [/* @__PURE__ */ jsx(Card, {
1727
+ paddingTop: 2,
1728
+ paddingBottom: 3,
1729
+ children: /* @__PURE__ */ jsx(StyledLabel, {
1730
+ textOverflow: "ellipsis",
1731
+ children: t("settings.custom-api-version-label")
1732
+ })
1733
+ }), /* @__PURE__ */ jsx(TextInput, {
1734
+ ref: customApiVersionElementRef,
1735
+ value: customApiVersion,
1736
+ onChange: onCustomApiVersionChange,
1737
+ customValidity: isValidApiVersion ? void 0 : t("settings.error.invalid-api-version"),
1738
+ maxLength: 11
1739
+ })] })
1740
+ }), $[33] = customApiVersion, $[34] = customApiVersionElementRef, $[35] = isValidApiVersion, $[36] = onCustomApiVersionChange, $[37] = t, $[38] = t18) : t18 = $[38];
1741
+ let t19;
1742
+ $[39] === Symbol.for("react.memo_cache_sentinel") ? (t19 = [1, 2], $[39] = t19) : t19 = $[39];
1743
+ let t20;
1744
+ $[40] === t ? t20 = $[41] : (t20 = t("settings.perspective-label"), $[40] = t, $[41] = t20);
1745
+ let t21;
1746
+ $[42] === t20 ? t21 = $[43] : (t21 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(StyledLabel, { children: t20 }) }), $[42] = t20, $[43] = t21);
1747
+ let t22;
1748
+ $[44] === Symbol.for("react.memo_cache_sentinel") ? (t22 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(PerspectivePopover, {}) }), $[44] = t22) : t22 = $[44];
1749
+ let t23;
1750
+ $[45] === t21 ? t23 = $[46] : (t23 = /* @__PURE__ */ jsx(Card, {
1751
+ paddingBottom: 1,
1752
+ children: /* @__PURE__ */ jsxs(Inline, {
1753
+ space: 1,
1754
+ children: [t21, t22]
1755
+ })
1756
+ }), $[45] = t21, $[46] = t23);
1757
+ let t24 = perspective || "default", t25;
1758
+ $[47] !== isScheduledDraftsEnabled || $[48] !== pinnedPerspective || $[49] !== t ? (t25 = SUPPORTED_PERSPECTIVES.map((perspectiveName) => perspectiveName === "pinnedRelease" ? /* @__PURE__ */ jsxs(Fragment, { children: [
1759
+ /* @__PURE__ */ jsx(PinnedReleasePerspectiveOption, {
1760
+ pinnedPerspective,
1761
+ t
1762
+ }),
1763
+ /* @__PURE__ */ jsx("option", {
1764
+ value: "default",
1765
+ children: t("settings.perspectives.default")
1766
+ }, "default"),
1767
+ /* @__PURE__ */ jsx("hr", {})
1768
+ ] }, "pinnedRelease") : perspectiveName === "scheduledDrafts" ? isScheduledDraftsEnabled ? /* @__PURE__ */ jsx("option", {
1769
+ value: "scheduledDrafts",
1770
+ children: t("settings.perspectives.scheduled-drafts")
1771
+ }, "scheduledDrafts") : null : /* @__PURE__ */ jsx("option", { children: perspectiveName }, perspectiveName)), $[47] = isScheduledDraftsEnabled, $[48] = pinnedPerspective, $[49] = t, $[50] = t25) : t25 = $[50];
1772
+ let t26;
1773
+ $[51] !== onChangePerspective || $[52] !== t24 || $[53] !== t25 ? (t26 = /* @__PURE__ */ jsx(Select, {
1774
+ value: t24,
1775
+ onChange: onChangePerspective,
1776
+ children: t25
1777
+ }), $[51] = onChangePerspective, $[52] = t24, $[53] = t25, $[54] = t26) : t26 = $[54];
1778
+ let t27;
1779
+ $[55] !== t23 || $[56] !== t26 ? (t27 = /* @__PURE__ */ jsx(Box, {
1780
+ padding: 1,
1781
+ column: t19,
1782
+ children: /* @__PURE__ */ jsxs(Stack, { children: [t23, t26] })
1783
+ }), $[55] = t23, $[56] = t26, $[57] = t27) : t27 = $[57];
1784
+ let t28;
1785
+ $[58] !== customApiVersion || $[59] !== t || $[60] !== url ? (t28 = typeof url == "string" ? /* @__PURE__ */ jsx(Box, {
1786
+ padding: 1,
1787
+ flex: 1,
1788
+ column: [1, customApiVersion === !1 ? 6 : 4],
1789
+ children: /* @__PURE__ */ jsxs(Stack, { children: [/* @__PURE__ */ jsx(Card, {
1790
+ paddingTop: 2,
1791
+ paddingBottom: 3,
1792
+ children: /* @__PURE__ */ jsxs(StyledLabel, { children: [
1793
+ t("query.url"),
1794
+ "\xA0",
1795
+ /* @__PURE__ */ jsxs(QueryCopyLink, {
1796
+ href: url,
1797
+ onClick: (event) => {
1798
+ event.preventDefault(), handleCopyUrl();
1799
+ },
1800
+ children: [
1801
+ "[",
1802
+ t("action.copy-url-to-clipboard"),
1803
+ "]"
1804
+ ]
1805
+ })
1806
+ ] })
1807
+ }), /* @__PURE__ */ jsxs(Flex, {
1808
+ flex: 1,
1809
+ gap: 1,
1810
+ children: [/* @__PURE__ */ jsx(Box, {
1811
+ flex: 1,
1812
+ children: /* @__PURE__ */ jsx(TextInput, {
1813
+ readOnly: !0,
1814
+ type: "url",
1815
+ ref: operationUrlElement,
1816
+ value: url
1817
+ })
1818
+ }), /* @__PURE__ */ jsx(Tooltip, {
1819
+ content: t("action.copy-url-to-clipboard"),
1820
+ children: /* @__PURE__ */ jsx(Button, {
1821
+ "aria-label": t("action.copy-url-to-clipboard"),
1822
+ type: "button",
1823
+ mode: "ghost",
1824
+ icon: CopyIcon,
1825
+ onClick: handleCopyUrl
1826
+ })
1827
+ })]
1828
+ })] })
1829
+ }) : /* @__PURE__ */ jsx(Box, { flex: 1 }), $[58] = customApiVersion, $[59] = t, $[60] = url, $[61] = t28) : t28 = $[61];
1830
+ let t29;
1831
+ return $[62] !== t17 || $[63] !== t18 || $[64] !== t27 || $[65] !== t28 || $[66] !== t8 ? (t29 = /* @__PURE__ */ jsx(Header, {
1832
+ paddingX: 3,
1833
+ paddingY: 2,
1834
+ children: /* @__PURE__ */ jsxs(Grid, {
1835
+ columns: t2,
1836
+ children: [
1837
+ t8,
1838
+ t17,
1839
+ t18,
1840
+ t27,
1841
+ t28
1842
+ ]
1843
+ })
1844
+ }), $[62] = t17, $[63] = t18, $[64] = t27, $[65] = t28, $[66] = t8, $[67] = t29) : t29 = $[67], t29;
1845
+ }
1846
+ function _temp3$1(version) {
1847
+ return /* @__PURE__ */ jsx("option", { children: version }, version);
1848
+ }
1849
+ function _temp2$2(ds) {
1850
+ return /* @__PURE__ */ jsx("option", { children: ds }, ds);
1851
+ }
1852
+ function _temp$2(value) {
1853
+ return value !== void 0;
1854
+ }
1855
+ function getBlobUrl(content, mimeType) {
1856
+ return URL.createObjectURL(new Blob([content], { type: mimeType }));
1857
+ }
1858
+ function getMemoizedBlobUrlResolver(mimeType, stringEncoder) {
1859
+ return (() => {
1860
+ let prevResult = "", prevContent = "";
1861
+ return (input) => {
1862
+ let content = stringEncoder(input);
1863
+ if (typeof content == "string" && content !== "") return content === prevContent ? prevResult : (prevContent = content, prevResult && URL.revokeObjectURL(prevResult), prevResult = getBlobUrl(content, mimeType), prevResult);
1864
+ };
1865
+ })();
1866
+ }
1867
+ const getJsonBlobUrl = getMemoizedBlobUrlResolver("application/json", (input) => JSON.stringify(input, null, 2)), getCsvBlobUrl = getMemoizedBlobUrlResolver("text/csv", (input) => json2csv(Array.isArray(input) ? input : [input]).trim());
1868
+ var errorCode = "vgszcp0";
1869
+ function ErrorCode(props) {
1870
+ let $ = c(2), t0;
1871
+ return $[0] === props ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(Code, {
1872
+ ...props,
1873
+ className: errorCode
1874
+ }), $[0] = props, $[1] = t0), t0;
1875
+ }
1876
+ function QueryErrorDetails(t0) {
1877
+ let $ = c(20), { error } = t0, { t } = useTranslation(visionLocaleNamespace);
1878
+ if (!("details" in error)) return null;
1879
+ let t1 = error.details, T0, details, t2, t3, t4, t5;
1880
+ if ($[0] !== error.details) {
1881
+ t5 = Symbol.for("react.early_return_sentinel");
1882
+ bb0: {
1883
+ if (details = {
1884
+ ...t1,
1885
+ ...mapToLegacyDetails(error.details)
1886
+ }, !details.line) {
1887
+ t5 = null;
1888
+ break bb0;
1889
+ }
1890
+ T0 = ErrorCode, t4 = 1, t2 = details.line, t3 = dashLine(details.column, details.columnEnd);
1891
+ }
1892
+ $[0] = error.details, $[1] = T0, $[2] = details, $[3] = t2, $[4] = t3, $[5] = t4, $[6] = t5;
1893
+ } else T0 = $[1], details = $[2], t2 = $[3], t3 = $[4], t4 = $[5], t5 = $[6];
1894
+ if (t5 !== Symbol.for("react.early_return_sentinel")) return t5;
1895
+ let t6 = `${t2}\n${t3}`, t7;
1896
+ $[7] !== T0 || $[8] !== t4 || $[9] !== t6 ? (t7 = /* @__PURE__ */ jsx(T0, {
1897
+ size: t4,
1898
+ children: t6
1899
+ }), $[7] = T0, $[8] = t4, $[9] = t6, $[10] = t7) : t7 = $[10];
1900
+ let t8;
1901
+ $[11] === t ? t8 = $[12] : (t8 = t("query.error.line"), $[11] = t, $[12] = t8);
1902
+ let t9 = details.lineNumber, t10;
1903
+ $[13] === t ? t10 = $[14] : (t10 = t("query.error.column"), $[13] = t, $[14] = t10);
1904
+ let t11 = `${t8}: ${t9}\n${t10}: ${details.column}`, t12;
1905
+ $[15] === t11 ? t12 = $[16] : (t12 = /* @__PURE__ */ jsx(Box, {
1906
+ marginTop: 4,
1907
+ children: /* @__PURE__ */ jsx(ErrorCode, {
1908
+ size: 1,
1909
+ children: t11
1910
+ })
1911
+ }), $[15] = t11, $[16] = t12);
1912
+ let t13;
1913
+ return $[17] !== t12 || $[18] !== t7 ? (t13 = /* @__PURE__ */ jsxs("div", { children: [t7, t12] }), $[17] = t12, $[18] = t7, $[19] = t13) : t13 = $[19], t13;
1914
+ }
1915
+ function mapToLegacyDetails(details) {
1916
+ if (!details || typeof details.query != "string" || typeof details.start != "number") return {};
1917
+ let { query, start, end } = details, lineStart = query.slice(0, start).lastIndexOf("\n") + 1, lineNumber = (query.slice(0, lineStart).match(/\n/g) || []).length;
1918
+ return {
1919
+ line: query.slice(lineStart, query.indexOf("\n", lineStart)),
1920
+ lineNumber,
1921
+ column: start - lineStart,
1922
+ columnEnd: typeof end == "number" ? end - lineStart : void 0
1923
+ };
1924
+ }
1925
+ function dashLine(column, columnEnd) {
1926
+ return `${"-".repeat(column)}${"^".repeat(columnEnd ? columnEnd - column : 1)}`;
1927
+ }
1928
+ function QueryErrorDialog(props) {
1929
+ let $ = c(7), t0;
1930
+ $[0] === props.error.message ? t0 = $[1] : (t0 = /* @__PURE__ */ jsx(ErrorCode, {
1931
+ size: 1,
1932
+ children: props.error.message
1933
+ }), $[0] = props.error.message, $[1] = t0);
1934
+ let t1;
1935
+ $[2] === props.error ? t1 = $[3] : (t1 = /* @__PURE__ */ jsx(QueryErrorDetails, { error: props.error }), $[2] = props.error, $[3] = t1);
1936
+ let t2;
1937
+ return $[4] !== t0 || $[5] !== t1 ? (t2 = /* @__PURE__ */ jsxs(Stack, {
1938
+ space: 5,
1939
+ marginTop: 2,
1940
+ children: [t0, t1]
1941
+ }), $[4] = t0, $[5] = t1, $[6] = t2) : t2 = $[6], t2;
1942
+ }
1943
+ var codeFamilyVar = "var(--_1rvgeh0)", codeFontSizeVar = "var(--_1rvgeh1)", codeLineHeightVar = "var(--_1rvgeh2)", resultViewWrapper = "_1rvgehc", space0Var = "var(--_1rvgeh3)", space2Var = "var(--_1rvgeh4)", space4HalfVar = "var(--_1rvgeh6)", space4Var = "var(--_1rvgeh5)", syntaxBooleanVar = "var(--_1rvgeha)", syntaxConstantVar = "var(--_1rvgeh8)", syntaxNumberVar = "var(--_1rvgehb)", syntaxPropertyVar = "var(--_1rvgeh7)", syntaxStringVar = "var(--_1rvgeh9)";
1944
+ const lru = new LRU({ maxSize: 5e4 });
1945
+ function ResultViewWrapper(t0) {
1946
+ let $ = c(24), { children } = t0, { color, font, space } = useTheme_v2(), codeSize = font.code.sizes[2], t1 = font.code.family, t2 = `${codeSize.fontSize}px`, t3 = `${codeSize.lineHeight}px`, t4;
1947
+ $[0] === space[0] ? t4 = $[1] : (t4 = rem(space[0]), $[0] = space[0], $[1] = t4);
1948
+ let t5 = `${t4}`, t6;
1949
+ $[2] === space[2] ? t6 = $[3] : (t6 = rem(space[2]), $[2] = space[2], $[3] = t6);
1950
+ let t7 = `${t6}`, t8;
1951
+ $[4] === space[4] ? t8 = $[5] : (t8 = rem(space[4]), $[4] = space[4], $[5] = t8);
1952
+ let t9 = `${t8}`, t10 = space[4] / 2, t11;
1953
+ $[6] === t10 ? t11 = $[7] : (t11 = rem(t10), $[6] = t10, $[7] = t11);
1954
+ let t12 = `${t11}`, t13;
1955
+ $[8] !== color.syntax.boolean || $[9] !== color.syntax.constant || $[10] !== color.syntax.number || $[11] !== color.syntax.property || $[12] !== color.syntax.string || $[13] !== font.code.family || $[14] !== t12 || $[15] !== t2 || $[16] !== t3 || $[17] !== t5 || $[18] !== t7 || $[19] !== t9 ? (t13 = assignInlineVars({
1956
+ [codeFamilyVar]: t1,
1957
+ [codeFontSizeVar]: t2,
1958
+ [codeLineHeightVar]: t3,
1959
+ [space0Var]: t5,
1960
+ [space2Var]: t7,
1961
+ [space4Var]: t9,
1962
+ [space4HalfVar]: t12,
1963
+ [syntaxPropertyVar]: color.syntax.property,
1964
+ [syntaxConstantVar]: color.syntax.constant,
1965
+ [syntaxStringVar]: color.syntax.string,
1966
+ [syntaxBooleanVar]: color.syntax.boolean,
1967
+ [syntaxNumberVar]: color.syntax.number
1968
+ }), $[8] = color.syntax.boolean, $[9] = color.syntax.constant, $[10] = color.syntax.number, $[11] = color.syntax.property, $[12] = color.syntax.string, $[13] = font.code.family, $[14] = t12, $[15] = t2, $[16] = t3, $[17] = t5, $[18] = t7, $[19] = t9, $[20] = t13) : t13 = $[20];
1969
+ let t14;
1970
+ return $[21] !== children || $[22] !== t13 ? (t14 = /* @__PURE__ */ jsx("div", {
1971
+ className: resultViewWrapper,
1972
+ style: t13,
1973
+ children
1974
+ }), $[21] = children, $[22] = t13, $[23] = t14) : t14 = $[23], t14;
1975
+ }
1976
+ function ResultView(props) {
1977
+ let $ = c(7), { data, datasetName } = props, workspaceDataset = useDataset();
1978
+ if (isRecord(data) || Array.isArray(data)) {
1979
+ let t0 = workspaceDataset === datasetName ? DocumentEditLabel : void 0, t1;
1980
+ return $[0] !== data || $[1] !== t0 ? (t1 = /* @__PURE__ */ jsx(ResultViewWrapper, { children: /* @__PURE__ */ jsx(JsonInspector, {
1981
+ data,
1982
+ search: !1,
1983
+ isExpanded,
1984
+ onClick: toggleExpanded,
1985
+ interactiveLabel: t0
1986
+ }) }), $[0] = data, $[1] = t0, $[2] = t1) : t1 = $[2], t1;
1987
+ }
1988
+ let t0;
1989
+ $[3] === data ? t0 = $[4] : (t0 = JSON.stringify(data), $[3] = data, $[4] = t0);
1990
+ let t1;
1991
+ return $[5] === t0 ? t1 = $[6] : (t1 = /* @__PURE__ */ jsx(Code, {
1992
+ language: "json",
1993
+ children: t0
1994
+ }), $[5] = t0, $[6] = t1), t1;
1995
+ }
1996
+ function DocumentEditLabel(props) {
1997
+ let $ = c(5);
1998
+ if (props.isKey || !props.keypath.endsWith("_id") && !props.keypath.endsWith("_ref")) return null;
1999
+ let t0;
2000
+ $[0] === props.value ? t0 = $[1] : (t0 = { id: props.value }, $[0] = props.value, $[1] = t0);
2001
+ let t1;
2002
+ $[2] === Symbol.for("react.memo_cache_sentinel") ? (t1 = /* @__PURE__ */ jsx(LinkIcon, {}), $[2] = t1) : t1 = $[2];
2003
+ let t2;
2004
+ return $[3] === t0 ? t2 = $[4] : (t2 = /* @__PURE__ */ jsx(IntentLink, {
2005
+ intent: "edit",
2006
+ params: t0,
2007
+ children: t1
2008
+ }), $[3] = t0, $[4] = t2), t2;
2009
+ }
2010
+ function isExpanded(keyPath, value) {
2011
+ let cached = lru.get(keyPath);
2012
+ if (typeof cached == "boolean") return cached;
2013
+ let segments = keyPath.split(".", 4);
2014
+ return segments.length === 4 ? !1 : Array.isArray(value) ? !0 : isRecord(value) && !segments.some((key) => isArrayKeyOverLimit(key));
2015
+ }
2016
+ function toggleExpanded(event) {
2017
+ let { path } = event, current = lru.get(path);
2018
+ current !== void 0 && lru.set(path, !current);
2019
+ }
2020
+ function isRecord(value) {
2021
+ return typeof value == "object" && !!value && !Array.isArray(value);
2022
+ }
2023
+ const numeric = /^\d+$/;
2024
+ function isArrayKeyOverLimit(segment, limit = 10) {
2025
+ return numeric.test(segment) && parseInt(segment, 10) > limit;
2026
+ }
2027
+ function SaveCsvButton(t0) {
2028
+ let $ = c(7), { blobUrl } = t0, { t } = useTranslation(visionLocaleNamespace);
2029
+ if (!blobUrl) {
2030
+ let t1;
2031
+ $[0] === t ? t1 = $[1] : (t1 = t("result.save-result-as-csv.not-csv-encodable"), $[0] = t, $[1] = t1);
2032
+ let t2;
2033
+ $[2] === Symbol.for("react.memo_cache_sentinel") ? (t2 = /* @__PURE__ */ jsx(Button, {
2034
+ disabled: !0,
2035
+ icon: DocumentSheetIcon,
2036
+ mode: "ghost",
2037
+ text: "CSV",
2038
+ tone: "default"
2039
+ }), $[2] = t2) : t2 = $[2];
2040
+ let t3;
2041
+ return $[3] === t1 ? t3 = $[4] : (t3 = /* @__PURE__ */ jsx(Tooltip, {
2042
+ content: t1,
2043
+ placement: "top",
2044
+ children: t2
2045
+ }), $[3] = t1, $[4] = t3), t3;
2046
+ }
2047
+ let t1;
2048
+ return $[5] === blobUrl ? t1 = $[6] : (t1 = /* @__PURE__ */ jsx(Button, {
2049
+ as: "a",
2050
+ download: "query-result.csv",
2051
+ href: blobUrl,
2052
+ icon: DocumentSheetIcon,
2053
+ mode: "ghost",
2054
+ text: "CSV",
2055
+ tone: "default"
2056
+ }), $[5] = blobUrl, $[6] = t1), t1;
2057
+ }
2058
+ function SaveJsonButton(t0) {
2059
+ let $ = c(2), { blobUrl } = t0, t1;
2060
+ return $[0] === blobUrl ? t1 = $[1] : (t1 = /* @__PURE__ */ jsx(Button, {
2061
+ as: "a",
2062
+ download: "query-result.json",
2063
+ href: blobUrl,
2064
+ icon: DocumentSheetIcon,
2065
+ mode: "ghost",
2066
+ text: "JSON",
2067
+ tone: "default"
2068
+ }), $[0] = blobUrl, $[1] = t1), t1;
2069
+ }
2070
+ function VisionGuiResult(t0) {
2071
+ let $ = c(84), { error, queryInProgress, queryResult, listenInProgress, listenMutations, dataset, queryTime, e2eTime, compactFooter: t1 } = t0, compactFooter = t1 !== void 0 && t1, { t } = useTranslation(visionLocaleNamespace), hasResult = !error && !queryInProgress && queryResult !== void 0, t2;
2072
+ $[0] !== hasResult || $[1] !== queryResult ? (t2 = hasResult ? getJsonBlobUrl(queryResult) : "", $[0] = hasResult, $[1] = queryResult, $[2] = t2) : t2 = $[2];
2073
+ let jsonUrl = t2, t3;
2074
+ $[3] !== hasResult || $[4] !== queryResult ? (t3 = hasResult ? getCsvBlobUrl(queryResult) : "", $[3] = hasResult, $[4] = queryResult, $[5] = t3) : t3 = $[5];
2075
+ let csvUrl = t3, t4 = error ? "critical" : "default", t5 = !!error, t6;
2076
+ $[6] === t ? t6 = $[7] : (t6 = t("result.label"), $[6] = t, $[7] = t6);
2077
+ let t7;
2078
+ $[8] === t6 ? t7 = $[9] : (t7 = /* @__PURE__ */ jsx(InputBackgroundContainer, { children: /* @__PURE__ */ jsx(Box, {
2079
+ marginLeft: 3,
2080
+ children: /* @__PURE__ */ jsx(StyledLabel, {
2081
+ muted: !0,
2082
+ children: t6
2083
+ })
2084
+ }) }), $[8] = t6, $[9] = t7);
2085
+ let t8;
2086
+ $[10] !== listenInProgress || $[11] !== listenMutations || $[12] !== queryInProgress ? (t8 = (queryInProgress || listenInProgress && listenMutations.length === 0) && /* @__PURE__ */ jsx(Box, {
2087
+ marginTop: 3,
2088
+ children: /* @__PURE__ */ jsx(DelayedSpinner, {})
2089
+ }), $[10] = listenInProgress, $[11] = listenMutations, $[12] = queryInProgress, $[13] = t8) : t8 = $[13];
2090
+ let t9;
2091
+ $[14] === error ? t9 = $[15] : (t9 = error && /* @__PURE__ */ jsx(QueryErrorDialog, { error }), $[14] = error, $[15] = t9);
2092
+ let t10;
2093
+ $[16] !== dataset || $[17] !== hasResult || $[18] !== queryResult ? (t10 = hasResult && /* @__PURE__ */ jsx(ResultView, {
2094
+ data: queryResult,
2095
+ datasetName: dataset
2096
+ }), $[16] = dataset, $[17] = hasResult, $[18] = queryResult, $[19] = t10) : t10 = $[19];
2097
+ let t11;
2098
+ $[20] !== dataset || $[21] !== listenInProgress || $[22] !== listenMutations ? (t11 = listenInProgress && listenMutations.length > 0 && /* @__PURE__ */ jsx(ResultView, {
2099
+ data: listenMutations,
2100
+ datasetName: dataset
2101
+ }), $[20] = dataset, $[21] = listenInProgress, $[22] = listenMutations, $[23] = t11) : t11 = $[23];
2102
+ let t12;
2103
+ $[24] !== t10 || $[25] !== t11 || $[26] !== t8 || $[27] !== t9 ? (t12 = /* @__PURE__ */ jsxs(Box, {
2104
+ padding: 3,
2105
+ paddingTop: 5,
2106
+ children: [
2107
+ t8,
2108
+ t9,
2109
+ t10,
2110
+ t11
2111
+ ]
2112
+ }), $[24] = t10, $[25] = t11, $[26] = t8, $[27] = t9, $[28] = t12) : t12 = $[28];
2113
+ let t13;
2114
+ $[29] !== t12 || $[30] !== t7 ? (t13 = /* @__PURE__ */ jsxs(Result, {
2115
+ overflow: "auto",
2116
+ children: [t7, t12]
2117
+ }), $[29] = t12, $[30] = t7, $[31] = t13) : t13 = $[31];
2118
+ let t14;
2119
+ $[32] !== t13 || $[33] !== t4 || $[34] !== t5 ? (t14 = /* @__PURE__ */ jsx(ResultInnerContainer, {
2120
+ flex: 1,
2121
+ children: /* @__PURE__ */ jsx(ResultContainer, {
2122
+ flex: 1,
2123
+ overflow: "hidden",
2124
+ tone: t4,
2125
+ isInvalid: t5,
2126
+ children: t13
2127
+ })
2128
+ }), $[32] = t13, $[33] = t4, $[34] = t5, $[35] = t14) : t14 = $[35];
2129
+ let t15 = compactFooter ? "flex-start" : "space-between", t16 = compactFooter ? "stretch" : void 0, t17;
2130
+ $[36] === compactFooter ? t17 = $[37] : (t17 = compactFooter ? "column" : [
2131
+ "column",
2132
+ "column",
2133
+ "row"
2134
+ ], $[36] = compactFooter, $[37] = t17);
2135
+ let t18 = compactFooter ? 3 : 4, t19 = compactFooter ? 2 : 3, t20;
2136
+ $[38] === compactFooter ? t20 = $[39] : (t20 = compactFooter ? { width: "100%" } : { minWidth: 0 }, $[38] = compactFooter, $[39] = t20);
2137
+ let t21 = compactFooter ? 1 : 2, t22;
2138
+ $[40] === t ? t22 = $[41] : (t22 = t("result.execution-time-label"), $[40] = t, $[41] = t22);
2139
+ let t23;
2140
+ $[42] !== queryTime || $[43] !== t ? (t23 = typeof queryTime == "number" ? `${queryTime}ms` : t("result.timing-not-applicable"), $[42] = queryTime, $[43] = t, $[44] = t23) : t23 = $[44];
2141
+ let t24;
2142
+ $[45] !== t21 || $[46] !== t22 || $[47] !== t23 ? (t24 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Text, {
2143
+ muted: !0,
2144
+ size: t21,
2145
+ children: [
2146
+ t22,
2147
+ ":",
2148
+ " ",
2149
+ t23
2150
+ ]
2151
+ }) }), $[45] = t21, $[46] = t22, $[47] = t23, $[48] = t24) : t24 = $[48];
2152
+ let t25 = compactFooter ? 3 : 4, t26 = compactFooter ? 1 : 2, t27;
2153
+ $[49] === t ? t27 = $[50] : (t27 = t("result.end-to-end-time-label"), $[49] = t, $[50] = t27);
2154
+ let t28;
2155
+ $[51] !== e2eTime || $[52] !== t ? (t28 = typeof e2eTime == "number" ? `${e2eTime}ms` : t("result.timing-not-applicable"), $[51] = e2eTime, $[52] = t, $[53] = t28) : t28 = $[53];
2156
+ let t29;
2157
+ $[54] !== t26 || $[55] !== t27 || $[56] !== t28 ? (t29 = /* @__PURE__ */ jsxs(Text, {
2158
+ muted: !0,
2159
+ size: t26,
2160
+ children: [
2161
+ t27,
2162
+ ":",
2163
+ " ",
2164
+ t28
2165
+ ]
2166
+ }), $[54] = t26, $[55] = t27, $[56] = t28, $[57] = t29) : t29 = $[57];
2167
+ let t30;
2168
+ $[58] !== t25 || $[59] !== t29 ? (t30 = /* @__PURE__ */ jsx(Box, {
2169
+ marginLeft: t25,
2170
+ children: t29
2171
+ }), $[58] = t25, $[59] = t29, $[60] = t30) : t30 = $[60];
2172
+ let t31;
2173
+ $[61] !== t24 || $[62] !== t30 ? (t31 = /* @__PURE__ */ jsxs(TimingsTextContainer, {
2174
+ align: "center",
2175
+ children: [t24, t30]
2176
+ }), $[61] = t24, $[62] = t30, $[63] = t31) : t31 = $[63];
2177
+ let t32;
2178
+ $[64] !== t18 || $[65] !== t19 || $[66] !== t20 || $[67] !== t31 ? (t32 = /* @__PURE__ */ jsx(TimingsCard, {
2179
+ paddingX: t18,
2180
+ paddingY: t19,
2181
+ sizing: "border",
2182
+ style: t20,
2183
+ children: t31
2184
+ }), $[64] = t18, $[65] = t19, $[66] = t20, $[67] = t31, $[68] = t32) : t32 = $[68];
2185
+ let t33;
2186
+ $[69] !== compactFooter || $[70] !== csvUrl || $[71] !== hasResult || $[72] !== jsonUrl || $[73] !== t ? (t33 = hasResult && /* @__PURE__ */ jsx(DownloadsCard, {
2187
+ paddingX: compactFooter ? 3 : 4,
2188
+ paddingY: compactFooter ? 2 : 3,
2189
+ sizing: "border",
2190
+ style: compactFooter ? { width: "100%" } : {
2191
+ marginLeft: "auto",
2192
+ minWidth: 0
2193
+ },
2194
+ children: /* @__PURE__ */ jsx(SaveResultLabel, {
2195
+ muted: !0,
2196
+ size: compactFooter ? 1 : 2,
2197
+ children: /* @__PURE__ */ jsx(Translate, {
2198
+ components: { SaveResultButtons: () => /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(SaveJsonButton, { blobUrl: jsonUrl }), /* @__PURE__ */ jsx(SaveCsvButton, { blobUrl: csvUrl })] }) },
2199
+ i18nKey: "result.save-result-as-format",
2200
+ t
2201
+ })
2202
+ })
2203
+ }), $[69] = compactFooter, $[70] = csvUrl, $[71] = hasResult, $[72] = jsonUrl, $[73] = t, $[74] = t33) : t33 = $[74];
2204
+ let t34;
2205
+ $[75] !== t15 || $[76] !== t16 || $[77] !== t17 || $[78] !== t32 || $[79] !== t33 ? (t34 = /* @__PURE__ */ jsxs(ResultFooter, {
2206
+ justify: t15,
2207
+ align: t16,
2208
+ direction: t17,
2209
+ children: [t32, t33]
2210
+ }), $[75] = t15, $[76] = t16, $[77] = t17, $[78] = t32, $[79] = t33, $[80] = t34) : t34 = $[80];
2211
+ let t35;
2212
+ return $[81] !== t14 || $[82] !== t34 ? (t35 = /* @__PURE__ */ jsxs(ResultOuterContainer, {
2213
+ direction: "column",
2214
+ "data-testid": "vision-result",
2215
+ children: [t14, t34]
2216
+ }), $[81] = t14, $[82] = t34, $[83] = t35) : t35 = $[83], t35;
2217
+ }
2218
+ function nodeContains(node, other) {
2219
+ return !node || !other ? !1 : node === other || !!(node.compareDocumentPosition(other) & 16);
2220
+ }
2221
+ const sanityUrl = /\/(vX|v1|v\d{4}-\d\d-\d\d)\/.*?(?:query|listen)\/(.*?)\?(.*)/, isRunHotkey = (event) => isHotkey("ctrl+enter", event) || isHotkey("mod+enter", event);
2222
+ function VisionGui(props) {
2223
+ let $ = c(209), { datasets, config, projectId, defaultDataset } = props, toast = useToast(), { t } = useTranslation(visionLocaleNamespace), { perspectiveStack } = usePerspective(), isScheduledDraftsEnabled = useScheduledDraftsEnabled(), { data: t0 } = useActiveReleases(), t1;
2224
+ $[0] === t0 ? t1 = $[1] : (t1 = t0 === void 0 ? [] : t0, $[0] = t0, $[1] = t1);
2225
+ let releases = t1, isDraftModelEnabled = useWorkspace().document.drafts.enabled, editorQueryRef = useRef(null), editorParamsRef = useRef(null), visionRootRef = useRef(null), customApiVersionElementRef = useRef(null), querySubscriptionRef = useRef(void 0), listenSubscriptionRef = useRef(void 0), t2;
2226
+ $[2] === projectId ? t2 = $[3] : (t2 = () => getLocalStorage(projectId || "default"), $[2] = projectId, $[3] = t2);
2227
+ let [localStorage] = useState(t2), t3;
2228
+ $[4] !== defaultDataset || $[5] !== localStorage ? (t3 = localStorage.get("dataset", defaultDataset), $[4] = defaultDataset, $[5] = localStorage, $[6] = t3) : t3 = $[6];
2229
+ let storedDataset = t3, t4;
2230
+ $[7] !== config.defaultApiVersion || $[8] !== localStorage ? (t4 = localStorage.get("apiVersion", prefixApiVersion(`${config.defaultApiVersion}`)), $[7] = config.defaultApiVersion, $[8] = localStorage, $[9] = t4) : t4 = $[9];
2231
+ let storedApiVersion = t4, t5;
2232
+ $[10] === localStorage ? t5 = $[11] : (t5 = localStorage.get("query", ""), $[10] = localStorage, $[11] = t5);
2233
+ let storedQuery = t5, t6;
2234
+ $[12] === localStorage ? t6 = $[13] : (t6 = localStorage.get("params", "{\n \n}"), $[12] = localStorage, $[13] = t6);
2235
+ let storedParams = t6, t7;
2236
+ $[14] === localStorage ? t7 = $[15] : (t7 = localStorage.get("perspective", void 0), $[14] = localStorage, $[15] = t7);
2237
+ let storedPerspective = t7, t8;
2238
+ $[16] !== datasets || $[17] !== defaultDataset || $[18] !== storedDataset ? (t8 = () => datasets.includes(storedDataset) ? storedDataset : datasets.includes(defaultDataset) ? defaultDataset : datasets[0], $[16] = datasets, $[17] = defaultDataset, $[18] = storedDataset, $[19] = t8) : t8 = $[19];
2239
+ let [dataset, setDataset] = useState(t8), t9;
2240
+ $[20] === storedApiVersion ? t9 = $[21] : (t9 = () => API_VERSIONS.includes(storedApiVersion) ? storedApiVersion : DEFAULT_API_VERSION, $[20] = storedApiVersion, $[21] = t9);
2241
+ let [apiVersion, setApiVersion] = useState(t9), t10;
2242
+ $[22] === storedApiVersion ? t10 = $[23] : (t10 = () => !API_VERSIONS.includes(storedApiVersion) && storedApiVersion, $[22] = storedApiVersion, $[23] = t10);
2243
+ let [customApiVersion, setCustomApiVersion] = useState(t10), [perspective, setPerspectiveState] = useState(storedPerspective || "raw"), t11;
2244
+ $[24] === customApiVersion ? t11 = $[25] : (t11 = !customApiVersion || validateApiVersion(customApiVersion), $[24] = customApiVersion, $[25] = t11);
2245
+ let isValidApiVersion = t11, [url, setUrl] = useState(void 0), t12;
2246
+ $[26] === storedQuery ? t12 = $[27] : (t12 = () => typeof storedQuery == "string" ? storedQuery : "", $[26] = storedQuery, $[27] = t12);
2247
+ let [query, setQuery] = useState(t12), [rawParams, setRawParams] = useState(storedParams), t13;
2248
+ $[28] !== rawParams || $[29] !== t ? (t13 = parseParams(rawParams, t), $[28] = rawParams, $[29] = t, $[30] = t13) : t13 = $[30];
2249
+ let params = t13, [queryResult, setQueryResult] = useState(void 0), t14;
2250
+ $[31] === Symbol.for("react.memo_cache_sentinel") ? (t14 = [], $[31] = t14) : t14 = $[31];
2251
+ let [listenMutations, setListenMutations] = useState(t14), [error, setError] = useState(void 0), [queryTime, setQueryTime] = useState(void 0), [e2eTime, setE2eTime] = useState(void 0), [queryInProgress, setQueryInProgress] = useState(!1), [listenInProgress, setListenInProgress] = useState(!1), [isQueryRecallCollapsed, setIsQueryRecallCollapsed] = useState(!1), t15;
2252
+ $[32] === Symbol.for("react.memo_cache_sentinel") ? (t15 = { visionRootRef }, $[32] = t15) : t15 = $[32];
2253
+ let { paneSizeOptions, isNarrowBreakpoint } = usePaneSize(t15), t16;
2254
+ bb0: {
2255
+ if (!isScheduledDraftsEnabled) {
2256
+ t16 = void 0;
2257
+ break bb0;
2258
+ }
2259
+ let t17;
2260
+ if ($[33] !== isDraftModelEnabled || $[34] !== releases) {
2261
+ let releaseIds = sortReleases(releases.filter(_temp$1)).map(_temp2$1), t18;
2262
+ $[36] === isDraftModelEnabled ? t18 = $[37] : (t18 = isDraftModelEnabled ? ["drafts"] : ["published"], $[36] = isDraftModelEnabled, $[37] = t18);
2263
+ let defaultPerspective = t18;
2264
+ t17 = [...releaseIds, ...defaultPerspective], $[33] = isDraftModelEnabled, $[34] = releases, $[35] = t17;
2265
+ } else t17 = $[35];
2266
+ t16 = t17;
2267
+ }
2268
+ let scheduledDraftsStack = t16, t17 = isValidApiVersion && customApiVersion ? customApiVersion : apiVersion, t18;
2269
+ $[38] === t17 ? t18 = $[39] : (t18 = { apiVersion: t17 }, $[38] = t17, $[39] = t18);
2270
+ let _client = useClient(t18), t19;
2271
+ $[40] !== _client || $[41] !== apiVersion || $[42] !== customApiVersion || $[43] !== dataset || $[44] !== isValidApiVersion || $[45] !== perspective || $[46] !== perspectiveStack || $[47] !== scheduledDraftsStack ? (t19 = _client.withConfig({
2272
+ apiVersion: isValidApiVersion && customApiVersion ? customApiVersion : apiVersion,
2273
+ perspective: getActivePerspective({
2274
+ visionPerspective: perspective,
2275
+ perspectiveStack,
2276
+ scheduledDraftsStack
2277
+ }),
2278
+ dataset,
2279
+ allowReconfigure: !0
2280
+ }), $[40] = _client, $[41] = apiVersion, $[42] = customApiVersion, $[43] = dataset, $[44] = isValidApiVersion, $[45] = perspective, $[46] = perspectiveStack, $[47] = scheduledDraftsStack, $[48] = t19) : t19 = $[48];
2281
+ let client = t19, t20;
2282
+ $[49] === Symbol.for("react.memo_cache_sentinel") ? (t20 = () => {
2283
+ querySubscriptionRef.current &&= (querySubscriptionRef.current.unsubscribe(), void 0);
2284
+ }, $[49] = t20) : t20 = $[49];
2285
+ let cancelQuerySubscription = t20, t21;
2286
+ $[50] === Symbol.for("react.memo_cache_sentinel") ? (t21 = () => {
2287
+ listenSubscriptionRef.current &&= (listenSubscriptionRef.current.unsubscribe(), void 0);
2288
+ }, $[50] = t21) : t21 = $[50];
2289
+ let cancelListenerSubscription = t21, t22;
2290
+ $[51] !== apiVersion || $[52] !== client || $[53] !== customApiVersion || $[54] !== dataset || $[55] !== isValidApiVersion || $[56] !== localStorage || $[57] !== params.parsed || $[58] !== perspective || $[59] !== perspectiveStack || $[60] !== query || $[61] !== queryInProgress || $[62] !== scheduledDraftsStack || $[63] !== t ? (t22 = (options) => {
2291
+ if (queryInProgress) {
2292
+ cancelQuerySubscription(), cancelListenerSubscription(), setQueryInProgress(!1);
2293
+ return;
2294
+ }
2295
+ let context = {
2296
+ query: options?.query || query,
2297
+ dataset: options?.dataset || dataset,
2298
+ params: parseParams(JSON.stringify(options?.params || params.parsed, null, 2), t),
2299
+ perspective: getActivePerspective({
2300
+ visionPerspective: options && "perspective" in options ? options.perspective : perspective,
2301
+ perspectiveStack,
2302
+ scheduledDraftsStack
2303
+ }),
2304
+ apiVersion: options?.apiVersion || (customApiVersion && isValidApiVersion ? customApiVersion : apiVersion)
2305
+ };
2306
+ localStorage.set("query", context.query), localStorage.set("params", context.params.raw), cancelListenerSubscription();
2307
+ let hasQuery = context.query.trim().length > 0;
2308
+ if (setQueryInProgress(!context.params.error && hasQuery), setListenInProgress(!1), setListenMutations([]), setError(context.params.error ? Error(context.params.error) : void 0), setQueryResult(void 0), setQueryTime(void 0), setE2eTime(void 0), context.params.error || !hasQuery) return;
2309
+ let urlQueryOpts = { perspective: context.perspective ?? [] }, ctxClient = client.withConfig({
2310
+ apiVersion: context.apiVersion,
2311
+ dataset: context.dataset,
2312
+ perspective: context.perspective
2313
+ }), newUrl = ctxClient.getUrl(ctxClient.getDataUrl("query", encodeQueryString(context.query, context.params.parsed, urlQueryOpts)));
2314
+ setUrl(newUrl);
2315
+ let queryStart = Date.now();
2316
+ querySubscriptionRef.current = ctxClient.observable.fetch(context.query, context.params.parsed, {
2317
+ filterResponse: !1,
2318
+ tag: "vision"
2319
+ }).subscribe({
2320
+ next: (res) => {
2321
+ setQueryTime(res.ms), setE2eTime(Date.now() - queryStart), setQueryResult(res.result), setQueryInProgress(!1), setError(void 0);
2322
+ },
2323
+ error: (err) => {
2324
+ setError(err), setQueryInProgress(!1);
2325
+ }
2326
+ });
2327
+ }, $[51] = apiVersion, $[52] = client, $[53] = customApiVersion, $[54] = dataset, $[55] = isValidApiVersion, $[56] = localStorage, $[57] = params.parsed, $[58] = perspective, $[59] = perspectiveStack, $[60] = query, $[61] = queryInProgress, $[62] = scheduledDraftsStack, $[63] = t, $[64] = t22) : t22 = $[64];
2328
+ let handleQueryExecution = t22, t23;
2329
+ $[65] !== handleQueryExecution || $[66] !== localStorage ? (t23 = (newPerspective) => {
2330
+ newPerspective !== void 0 && !isSupportedPerspective(newPerspective) || (setPerspectiveState(newPerspective), localStorage.set("perspective", newPerspective), handleQueryExecution({ perspective: newPerspective }));
2331
+ }, $[65] = handleQueryExecution, $[66] = localStorage, $[67] = t23) : t23 = $[67];
2332
+ let setPerspective = t23, t24;
2333
+ $[68] !== handleQueryExecution || $[69] !== localStorage ? (t24 = (evt) => {
2334
+ let newDataset = evt.target.value;
2335
+ localStorage.set("dataset", newDataset), setDataset(newDataset), handleQueryExecution({ dataset: newDataset });
2336
+ }, $[68] = handleQueryExecution, $[69] = localStorage, $[70] = t24) : t24 = $[70];
2337
+ let handleChangeDataset = t24, t25;
2338
+ $[71] !== handleQueryExecution || $[72] !== localStorage ? (t25 = (evt_0) => {
2339
+ let newApiVersion = evt_0.target.value;
2340
+ if (newApiVersion?.toLowerCase() === "other") {
2341
+ setCustomApiVersion("v"), customApiVersionElementRef.current?.focus();
2342
+ return;
2343
+ }
2344
+ setApiVersion(newApiVersion), setCustomApiVersion(!1), localStorage.set("apiVersion", newApiVersion), handleQueryExecution({ apiVersion: newApiVersion });
2345
+ }, $[71] = handleQueryExecution, $[72] = localStorage, $[73] = t25) : t25 = $[73];
2346
+ let handleChangeApiVersion = t25, t26;
2347
+ $[74] !== handleQueryExecution || $[75] !== localStorage ? (t26 = (evt_1) => {
2348
+ let newCustomApiVersion = evt_1.target.value || "";
2349
+ setCustomApiVersion(newCustomApiVersion || "v"), validateApiVersion(newCustomApiVersion) && (setApiVersion(newCustomApiVersion), localStorage.set("apiVersion", newCustomApiVersion), handleQueryExecution({ apiVersion: newCustomApiVersion }));
2350
+ }, $[74] = handleQueryExecution, $[75] = localStorage, $[76] = t26) : t26 = $[76];
2351
+ let handleCustomApiVersionChange = t26, t27;
2352
+ $[77] === setPerspective ? t27 = $[78] : (t27 = (evt_2) => {
2353
+ let newPerspective_0 = evt_2.target.value;
2354
+ setPerspective(newPerspective_0 === "default" ? void 0 : newPerspective_0);
2355
+ }, $[77] = setPerspective, $[78] = t27);
2356
+ let handleChangePerspective = t27, t28;
2357
+ $[79] === Symbol.for("react.memo_cache_sentinel") ? (t28 = (evt_3) => {
2358
+ evt_3.type === "mutation" && setListenMutations((prevMutations) => prevMutations.length === 50 ? [evt_3, ...prevMutations.slice(0, 49)] : [evt_3, ...prevMutations]);
2359
+ }, $[79] = t28) : t28 = $[79];
2360
+ let handleListenerEvent = t28, t29;
2361
+ $[80] !== client || $[81] !== listenInProgress || $[82] !== localStorage || $[83] !== params.error || $[84] !== params.parsed || $[85] !== params.raw || $[86] !== query ? (t29 = () => {
2362
+ if (listenInProgress) {
2363
+ cancelListenerSubscription(), setListenInProgress(!1);
2364
+ return;
2365
+ }
2366
+ let newUrl_0 = client.getDataUrl("listen", encodeQueryString(query, params.parsed, {})), shouldExecute = !params.error && query.trim().length > 0;
2367
+ localStorage.set("query", query), localStorage.set("params", params.raw), cancelQuerySubscription(), setUrl(newUrl_0), setListenMutations([]), setQueryInProgress(!1), setQueryResult(void 0), setListenInProgress(shouldExecute), setError(params.error ? Error(params.error) : void 0), setQueryTime(void 0), setE2eTime(void 0), shouldExecute && (listenSubscriptionRef.current = client.listen(query, params.parsed, {
2368
+ events: ["mutation", "welcome"],
2369
+ includeAllVersions: !0
2370
+ }).subscribe({
2371
+ next: handleListenerEvent,
2372
+ error: (err_0) => {
2373
+ setError(err_0), setListenInProgress(!1);
2374
+ }
2375
+ }));
2376
+ }, $[80] = client, $[81] = listenInProgress, $[82] = localStorage, $[83] = params.error, $[84] = params.parsed, $[85] = params.raw, $[86] = query, $[87] = t29) : t29 = $[87];
2377
+ let handleListenExecution = t29, t30;
2378
+ $[88] === localStorage ? t30 = $[89] : (t30 = (value) => {
2379
+ setRawParams(value), localStorage.set("params", value);
2380
+ }, $[88] = localStorage, $[89] = t30);
2381
+ let handleParamsChange = t30, t31;
2382
+ $[90] !== apiVersion || $[91] !== dataset || $[92] !== datasets || $[93] !== perspective || $[94] !== toast ? (t31 = (data) => {
2383
+ let match = data.match(sanityUrl);
2384
+ if (!match) return null;
2385
+ let [, usedApiVersion, usedDataset, urlQuery] = match, parts = parseApiQueryString(new URLSearchParams(urlQuery));
2386
+ if (!parts) return null;
2387
+ let newApiVersion_0, newCustomApiVersion_0;
2388
+ validateApiVersion(usedApiVersion) && (API_VERSIONS.includes(usedApiVersion) ? (newApiVersion_0 = usedApiVersion, newCustomApiVersion_0 = !1) : newCustomApiVersion_0 = usedApiVersion);
2389
+ let newPerspective_1 = isSupportedPerspective(parts.options.perspective) && !isVirtualPerspective(parts.options.perspective) ? parts.options.perspective : void 0;
2390
+ return newPerspective_1 && (!isSupportedPerspective(parts.options.perspective) || isVirtualPerspective(parts.options.perspective)) && toast.push({
2391
+ closable: !0,
2392
+ id: "vision-paste-unsupported-perspective",
2393
+ status: "warning",
2394
+ title: "Perspective in pasted url is currently not supported. Falling back to \"raw\""
2395
+ }), {
2396
+ query: parts.query,
2397
+ params: parts.params,
2398
+ rawParams: JSON.stringify(parts.params, null, 2),
2399
+ dataset: datasets.includes(usedDataset) ? usedDataset : dataset,
2400
+ apiVersion: newApiVersion_0 || apiVersion,
2401
+ customApiVersion: newCustomApiVersion_0,
2402
+ perspective: newPerspective_1 || perspective,
2403
+ url: data
2404
+ };
2405
+ }, $[90] = apiVersion, $[91] = dataset, $[92] = datasets, $[93] = perspective, $[94] = toast, $[95] = t31) : t31 = $[95];
2406
+ let getStateFromUrl = t31, t32;
2407
+ $[96] !== handleQueryExecution || $[97] !== localStorage ? (t32 = (parsedUrlObj) => {
2408
+ setDataset(parsedUrlObj.dataset), setQuery(parsedUrlObj.query), setRawParams(parsedUrlObj.rawParams), setApiVersion(parsedUrlObj.apiVersion), parsedUrlObj.customApiVersion && setCustomApiVersion(parsedUrlObj.customApiVersion), setPerspectiveState(parsedUrlObj.perspective), setUrl(parsedUrlObj.url), editorQueryRef.current?.resetEditorContent(parsedUrlObj.query), editorParamsRef.current?.resetEditorContent(parsedUrlObj.rawParams), localStorage.merge({
2409
+ query: parsedUrlObj.query,
2410
+ params: parsedUrlObj.rawParams,
2411
+ dataset: parsedUrlObj.dataset,
2412
+ apiVersion: parsedUrlObj.customApiVersion || parsedUrlObj.apiVersion,
2413
+ perspective: parsedUrlObj.perspective
2414
+ }), handleQueryExecution(parsedUrlObj);
2415
+ }, $[96] = handleQueryExecution, $[97] = localStorage, $[98] = t32) : t32 = $[98];
2416
+ let setStateFromParsedUrl = t32, t33;
2417
+ $[99] !== getStateFromUrl || $[100] !== setStateFromParsedUrl || $[101] !== toast ? (t33 = (evt_4) => {
2418
+ if (!evt_4.clipboardData) return;
2419
+ let data_0 = evt_4.clipboardData.getData("text/plain");
2420
+ evt_4.preventDefault();
2421
+ let urlState = getStateFromUrl(data_0);
2422
+ urlState && (setStateFromParsedUrl(urlState), toast.push({
2423
+ closable: !0,
2424
+ id: "vision-paste",
2425
+ status: "info",
2426
+ title: "Parsed URL to query"
2427
+ }));
2428
+ }, $[99] = getStateFromUrl, $[100] = setStateFromParsedUrl, $[101] = toast, $[102] = t33) : t33 = $[102];
2429
+ let handlePaste = t33, t34;
2430
+ $[103] !== handleQueryExecution || $[104] !== params.valid ? (t34 = (event) => {
2431
+ let isWithinRoot = visionRootRef.current && nodeContains(visionRootRef.current, event.target);
2432
+ isRunHotkey(event) && isWithinRoot && params.valid && (handleQueryExecution(), event.preventDefault(), event.stopPropagation());
2433
+ }, $[103] = handleQueryExecution, $[104] = params.valid, $[105] = t34) : t34 = $[105];
2434
+ let handleKeyDown = t34, t35, t36;
2435
+ $[106] !== handleKeyDown || $[107] !== handlePaste ? (t35 = () => (window.document.addEventListener("paste", handlePaste), window.document.addEventListener("keydown", handleKeyDown), () => {
2436
+ window.document.removeEventListener("paste", handlePaste), window.document.removeEventListener("keydown", handleKeyDown);
2437
+ }), t36 = [handleKeyDown, handlePaste], $[106] = handleKeyDown, $[107] = handlePaste, $[108] = t35, $[109] = t36) : (t35 = $[108], t36 = $[109]), useEffect(t35, t36);
2438
+ let t37, t38;
2439
+ $[110] === Symbol.for("react.memo_cache_sentinel") ? (t37 = () => () => {
2440
+ cancelQuerySubscription(), cancelListenerSubscription();
2441
+ }, t38 = [cancelQuerySubscription, cancelListenerSubscription], $[110] = t37, $[111] = t38) : (t37 = $[110], t38 = $[111]), useEffect(t37, t38);
2442
+ let t39;
2443
+ $[112] === setPerspective ? t39 = $[113] : (t39 = (stack) => {
2444
+ stack.length > 0 && setPerspective("pinnedRelease");
2445
+ }, $[112] = setPerspective, $[113] = t39);
2446
+ let handleStudioPerspectiveChange = useEffectEvent(t39), t40;
2447
+ $[114] !== handleStudioPerspectiveChange || $[115] !== perspectiveStack ? (t40 = () => {
2448
+ handleStudioPerspectiveChange(perspectiveStack);
2449
+ }, $[114] = handleStudioPerspectiveChange, $[115] = perspectiveStack, $[116] = t40) : t40 = $[116];
2450
+ let t41;
2451
+ $[117] === perspectiveStack ? t41 = $[118] : (t41 = [perspectiveStack], $[117] = perspectiveStack, $[118] = t41), useEffect(t40, t41);
2452
+ let t42;
2453
+ $[119] !== client || $[120] !== perspective || $[121] !== perspectiveStack || $[122] !== scheduledDraftsStack ? (t42 = (queryString, queryParams) => {
2454
+ let urlQueryOpts_0 = { perspective: getActivePerspective({
2455
+ visionPerspective: perspective,
2456
+ perspectiveStack,
2457
+ scheduledDraftsStack
2458
+ }) ?? [] };
2459
+ return client.getUrl(client.getDataUrl("query", encodeQueryString(queryString, queryParams, urlQueryOpts_0)));
2460
+ }, $[119] = client, $[120] = perspective, $[121] = perspectiveStack, $[122] = scheduledDraftsStack, $[123] = t42) : t42 = $[123];
2461
+ let generateUrl = t42, t43;
2462
+ $[124] !== apiVersion || $[125] !== customApiVersion || $[126] !== dataset || $[127] !== datasets || $[128] !== handleChangeApiVersion || $[129] !== handleChangeDataset || $[130] !== handleChangePerspective || $[131] !== handleCustomApiVersionChange || $[132] !== isScheduledDraftsEnabled || $[133] !== isValidApiVersion || $[134] !== perspective || $[135] !== url ? (t43 = /* @__PURE__ */ jsx(VisionGuiHeader, {
2463
+ apiVersion,
2464
+ customApiVersion,
2465
+ dataset,
2466
+ datasets,
2467
+ onChangeDataset: handleChangeDataset,
2468
+ onChangeApiVersion: handleChangeApiVersion,
2469
+ customApiVersionElementRef,
2470
+ onCustomApiVersionChange: handleCustomApiVersionChange,
2471
+ isValidApiVersion,
2472
+ onChangePerspective: handleChangePerspective,
2473
+ url,
2474
+ perspective,
2475
+ isScheduledDraftsEnabled
2476
+ }), $[124] = apiVersion, $[125] = customApiVersion, $[126] = dataset, $[127] = datasets, $[128] = handleChangeApiVersion, $[129] = handleChangeDataset, $[130] = handleChangePerspective, $[131] = handleCustomApiVersionChange, $[132] = isScheduledDraftsEnabled, $[133] = isValidApiVersion, $[134] = perspective, $[135] = url, $[136] = t43) : t43 = $[136];
2477
+ let t44 = isQueryRecallCollapsed ? window.innerWidth : window.innerWidth - 275, t45 = isNarrowBreakpoint ? "vertical" : "horizontal", t46 = isNarrowBreakpoint ? paneSizeOptions.defaultSize : paneSizeOptions.minSize, t47 = paneSizeOptions.size, t48 = paneSizeOptions.allowResize, t49 = isNarrowBreakpoint ? paneSizeOptions.minSize : 100, t50 = paneSizeOptions.maxSize, t51;
2478
+ $[137] === t ? t51 = $[138] : (t51 = t("query.label"), $[137] = t, $[138] = t51);
2479
+ let t52;
2480
+ $[139] === t51 ? t52 = $[140] : (t52 = /* @__PURE__ */ jsx(InputBackgroundContainerLeft, { children: /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(StyledLabel, {
2481
+ muted: !0,
2482
+ children: t51
2483
+ }) }) }), $[139] = t51, $[140] = t52);
2484
+ let t53;
2485
+ $[141] === query ? t53 = $[142] : (t53 = /* @__PURE__ */ jsx(VisionCodeMirror, {
2486
+ initialValue: query,
2487
+ onChange: setQuery,
2488
+ ref: editorQueryRef,
2489
+ extensions: groqExtensions
2490
+ }), $[141] = query, $[142] = t53);
2491
+ let t54;
2492
+ $[143] !== t52 || $[144] !== t53 ? (t54 = /* @__PURE__ */ jsx(InputContainer, {
2493
+ display: "flex",
2494
+ "data-testid": "vision-query-editor",
2495
+ children: /* @__PURE__ */ jsxs(Box, {
2496
+ flex: 1,
2497
+ children: [t52, t53]
2498
+ })
2499
+ }), $[143] = t52, $[144] = t53, $[145] = t54) : t54 = $[145];
2500
+ let t55;
2501
+ $[146] !== handleParamsChange || $[147] !== params.error || $[148] !== params.raw || $[149] !== params.valid ? (t55 = /* @__PURE__ */ jsx(ParamsEditor, {
2502
+ value: params.raw,
2503
+ onChange: handleParamsChange,
2504
+ paramsError: params.error,
2505
+ hasValidParams: params.valid,
2506
+ editorRef: editorParamsRef
2507
+ }), $[146] = handleParamsChange, $[147] = params.error, $[148] = params.raw, $[149] = params.valid, $[150] = t55) : t55 = $[150];
2508
+ let t56;
2509
+ $[151] !== handleListenExecution || $[152] !== handleQueryExecution || $[153] !== listenInProgress || $[154] !== params.valid || $[155] !== queryInProgress ? (t56 = /* @__PURE__ */ jsx(VisionGuiControls, {
2510
+ hasValidParams: params.valid,
2511
+ queryInProgress,
2512
+ listenInProgress,
2513
+ onQueryExecution: handleQueryExecution,
2514
+ onListenExecution: handleListenExecution
2515
+ }), $[151] = handleListenExecution, $[152] = handleQueryExecution, $[153] = listenInProgress, $[154] = params.valid, $[155] = queryInProgress, $[156] = t56) : t56 = $[156];
2516
+ let t57;
2517
+ $[157] !== t55 || $[158] !== t56 ? (t57 = /* @__PURE__ */ jsxs(InputContainer, {
2518
+ display: "flex",
2519
+ children: [t55, t56]
2520
+ }), $[157] = t55, $[158] = t56, $[159] = t57) : t57 = $[159];
2521
+ let t58;
2522
+ $[160] !== paneSizeOptions.allowResize || $[161] !== paneSizeOptions.maxSize || $[162] !== paneSizeOptions.size || $[163] !== t46 || $[164] !== t49 || $[165] !== t54 || $[166] !== t57 ? (t58 = /* @__PURE__ */ jsx(Box, {
2523
+ height: "stretch",
2524
+ flex: 1,
2525
+ children: /* @__PURE__ */ jsxs(SplitPane, {
2526
+ className: "sidebarPanes",
2527
+ split: "horizontal",
2528
+ defaultSize: t46,
2529
+ size: t47,
2530
+ allowResize: t48,
2531
+ minSize: t49,
2532
+ maxSize: t50,
2533
+ primary: "first",
2534
+ children: [t54, t57]
2535
+ })
2536
+ }), $[160] = paneSizeOptions.allowResize, $[161] = paneSizeOptions.maxSize, $[162] = paneSizeOptions.size, $[163] = t46, $[164] = t49, $[165] = t54, $[166] = t57, $[167] = t58) : t58 = $[167];
2537
+ let t59;
2538
+ $[168] !== dataset || $[169] !== e2eTime || $[170] !== error || $[171] !== listenInProgress || $[172] !== listenMutations || $[173] !== queryInProgress || $[174] !== queryResult || $[175] !== queryTime ? (t59 = /* @__PURE__ */ jsx(VisionGuiResult, {
2539
+ error,
2540
+ queryInProgress,
2541
+ queryResult,
2542
+ listenInProgress,
2543
+ listenMutations,
2544
+ dataset,
2545
+ queryTime,
2546
+ e2eTime
2547
+ }), $[168] = dataset, $[169] = e2eTime, $[170] = error, $[171] = listenInProgress, $[172] = listenMutations, $[173] = queryInProgress, $[174] = queryResult, $[175] = queryTime, $[176] = t59) : t59 = $[176];
2548
+ let t60;
2549
+ $[177] !== t45 || $[178] !== t58 || $[179] !== t59 ? (t60 = /* @__PURE__ */ jsx(Box, {
2550
+ height: "stretch",
2551
+ flex: 1,
2552
+ children: /* @__PURE__ */ jsxs(SplitPane, {
2553
+ className: "sidebarPanes",
2554
+ split: t45,
2555
+ minSize: 300,
2556
+ children: [t58, t59]
2557
+ })
2558
+ }), $[177] = t45, $[178] = t58, $[179] = t59, $[180] = t60) : t60 = $[180];
2559
+ let t61;
2560
+ $[181] === Symbol.for("react.memo_cache_sentinel") ? (t61 = {
2561
+ position: "absolute",
2562
+ left: -32,
2563
+ top: "50%",
2564
+ transform: "translateY(-50%)",
2565
+ zIndex: 100,
2566
+ pointerEvents: "auto"
2567
+ }, $[181] = t61) : t61 = $[181];
2568
+ let t62;
2569
+ $[182] === isQueryRecallCollapsed ? t62 = $[183] : (t62 = () => setIsQueryRecallCollapsed(!isQueryRecallCollapsed), $[182] = isQueryRecallCollapsed, $[183] = t62);
2570
+ let t63;
2571
+ $[184] === Symbol.for("react.memo_cache_sentinel") ? (t63 = {
2572
+ display: "flex",
2573
+ alignItems: "center",
2574
+ height: "100%"
2575
+ }, $[184] = t63) : t63 = $[184];
2576
+ let t64;
2577
+ $[185] === isQueryRecallCollapsed ? t64 = $[186] : (t64 = /* @__PURE__ */ jsx("div", {
2578
+ style: t63,
2579
+ children: jsx(isQueryRecallCollapsed ? ChevronLeftIcon : ChevronRightIcon, {})
2580
+ }), $[185] = isQueryRecallCollapsed, $[186] = t64);
2581
+ let t65;
2582
+ $[187] !== t62 || $[188] !== t64 ? (t65 = /* @__PURE__ */ jsx(Button, {
2583
+ mode: "ghost",
2584
+ padding: 2,
2585
+ style: t61,
2586
+ onClick: t62,
2587
+ children: t64
2588
+ }), $[187] = t62, $[188] = t64, $[189] = t65) : t65 = $[189];
2589
+ let t66;
2590
+ $[190] === params.parsed ? t66 = $[191] : (t66 = params.parsed || {}, $[190] = params.parsed, $[191] = t66);
2591
+ let t67;
2592
+ $[192] !== generateUrl || $[193] !== getStateFromUrl || $[194] !== query || $[195] !== setStateFromParsedUrl || $[196] !== t66 || $[197] !== url ? (t67 = /* @__PURE__ */ jsx(QueryRecallPaneWrapper, { children: /* @__PURE__ */ jsx(QueryRecall, {
2593
+ url,
2594
+ getStateFromUrl,
2595
+ setStateFromParsedUrl,
2596
+ currentQuery: query,
2597
+ currentParams: t66,
2598
+ generateUrl
2599
+ }) }), $[192] = generateUrl, $[193] = getStateFromUrl, $[194] = query, $[195] = setStateFromParsedUrl, $[196] = t66, $[197] = url, $[198] = t67) : t67 = $[198];
2600
+ let t68;
2601
+ $[199] !== t65 || $[200] !== t67 ? (t68 = /* @__PURE__ */ jsxs(QueryRecallPaneContainer, { children: [t65, t67] }), $[199] = t65, $[200] = t67, $[201] = t68) : t68 = $[201];
2602
+ let t69;
2603
+ $[202] !== t44 || $[203] !== t60 || $[204] !== t68 ? (t69 = /* @__PURE__ */ jsx(SplitpaneContainer, {
2604
+ flex: "auto",
2605
+ children: /* @__PURE__ */ jsxs(SplitPane, {
2606
+ minSize: 800,
2607
+ defaultSize: window.innerWidth - 275,
2608
+ size: t44,
2609
+ maxSize: -225,
2610
+ primary: "first",
2611
+ children: [t60, t68]
2612
+ })
2613
+ }), $[202] = t44, $[203] = t60, $[204] = t68, $[205] = t69) : t69 = $[205];
2614
+ let t70;
2615
+ return $[206] !== t43 || $[207] !== t69 ? (t70 = /* @__PURE__ */ jsxs(Root, {
2616
+ direction: "column",
2617
+ height: "fill",
2618
+ ref: visionRootRef,
2619
+ sizing: "border",
2620
+ overflow: "hidden",
2621
+ "data-testid": "vision-root",
2622
+ children: [t43, t69]
2623
+ }), $[206] = t43, $[207] = t69, $[208] = t70) : t70 = $[208], t70;
2624
+ }
2625
+ function _temp2$1(release_0) {
2626
+ return getReleaseIdFromReleaseDocumentId(release_0._id);
2627
+ }
2628
+ function _temp$1(release) {
2629
+ return isCardinalityOneRelease(release) && release.state === "scheduled";
2630
+ }
2631
+ function useDatasets(t0) {
2632
+ let $ = c(7), { client, datasets: configDatasets } = t0, t1;
2633
+ bb0: {
2634
+ if (Array.isArray(configDatasets)) {
2635
+ let t2;
2636
+ $[0] === configDatasets ? t2 = $[1] : (t2 = of(configDatasets), $[0] = configDatasets, $[1] = t2), t1 = t2;
2637
+ break bb0;
2638
+ }
2639
+ let t2;
2640
+ if ($[2] !== client.observable.datasets || $[3] !== configDatasets) {
2641
+ let t3;
2642
+ $[5] === configDatasets ? t3 = $[6] : (t3 = (result) => typeof configDatasets == "function" ? configDatasets(result).map(_temp) : result.map(_temp2), $[5] = configDatasets, $[6] = t3), t2 = client.observable.datasets.list().pipe(map$1(t3), catchError(_temp3)), $[2] = client.observable.datasets, $[3] = configDatasets, $[4] = t2;
2643
+ } else t2 = $[4];
2644
+ t1 = t2;
2645
+ }
2646
+ return useObservable(t1, null);
2647
+ }
2648
+ function _temp3(err) {
2649
+ return of(err);
2650
+ }
2651
+ function _temp2(ds) {
2652
+ return ds.name;
2653
+ }
2654
+ function _temp(d) {
2655
+ return d.name;
2656
+ }
2657
+ function VisionContainer(props) {
2658
+ let $ = c(19), t0;
2659
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = { apiVersion: "v2025-06-27" }, $[0] = t0) : t0 = $[0];
2660
+ let datasetsClient = useClient(t0), t1;
2661
+ $[1] !== datasetsClient || $[2] !== props.config.datasets ? (t1 = {
2662
+ client: datasetsClient,
2663
+ datasets: props.config.datasets
2664
+ }, $[1] = datasetsClient, $[2] = props.config.datasets, $[3] = t1) : t1 = $[3];
2665
+ let loadedDatasets = useDatasets(t1);
2666
+ if (!loadedDatasets) {
2667
+ let t2;
2668
+ return $[4] === Symbol.for("react.memo_cache_sentinel") ? (t2 = /* @__PURE__ */ jsx(Flex, {
2669
+ align: "center",
2670
+ height: "fill",
2671
+ justify: "center",
2672
+ children: /* @__PURE__ */ jsx(DelayedSpinner, {})
2673
+ }), $[4] = t2) : t2 = $[4], t2;
2674
+ }
2675
+ let t2;
2676
+ $[5] !== loadedDatasets || $[6] !== props.client ? (t2 = loadedDatasets instanceof Error ? [props.client.config().dataset || "production"] : loadedDatasets, $[5] = loadedDatasets, $[6] = props.client, $[7] = t2) : t2 = $[7];
2677
+ let datasets = t2, t3;
2678
+ $[8] === props.client ? t3 = $[9] : (t3 = props.client.config(), $[8] = props.client, $[9] = t3);
2679
+ let projectId = t3.projectId, t4;
2680
+ $[10] !== datasets || $[11] !== props.client || $[12] !== props.config.defaultDataset ? (t4 = props.config.defaultDataset || props.client.config().dataset || datasets[0], $[10] = datasets, $[11] = props.client, $[12] = props.config.defaultDataset, $[13] = t4) : t4 = $[13];
2681
+ let defaultDataset = t4, t5;
2682
+ return $[14] !== datasets || $[15] !== defaultDataset || $[16] !== projectId || $[17] !== props ? (t5 = /* @__PURE__ */ jsx(VisionGui, {
2683
+ ...props,
2684
+ datasets,
2685
+ projectId,
2686
+ defaultDataset
2687
+ }, projectId), $[14] = datasets, $[15] = defaultDataset, $[16] = projectId, $[17] = props, $[18] = t5) : t5 = $[18], t5;
2688
+ }
2689
+ /**
2690
+ * @internal
2691
+ */
2692
+ var VisionErrorBoundary = class extends Component {
2693
+ constructor(props) {
2694
+ super(props), this.state = {
2695
+ error: null,
2696
+ numRetries: 0
2697
+ };
2698
+ }
2699
+ static getDerivedStateFromError(error) {
2700
+ return { error: error instanceof Error ? error.message : `${error}` };
2701
+ }
2702
+ handleRetryRender = () => this.setState((prev) => ({
2703
+ error: null,
2704
+ numRetries: prev.numRetries + 1
2705
+ }));
2706
+ handleRetryWithCacheClear = () => {
2707
+ clearLocalStorage(), this.handleRetryRender();
2708
+ };
2709
+ render() {
2710
+ if (!this.state.error) return this.props.children;
2711
+ let message = this.state.error, withCacheClear = this.state.numRetries > 0;
2712
+ return /* @__PURE__ */ jsx(Card, {
2713
+ height: "fill",
2714
+ overflow: "auto",
2715
+ paddingY: [
2716
+ 4,
2717
+ 5,
2718
+ 6,
2719
+ 7
2720
+ ],
2721
+ paddingX: 4,
2722
+ sizing: "border",
2723
+ tone: "critical",
2724
+ children: /* @__PURE__ */ jsx(Container, {
2725
+ width: 3,
2726
+ children: /* @__PURE__ */ jsxs(Stack, {
2727
+ space: 4,
2728
+ children: [
2729
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Button, {
2730
+ onClick: withCacheClear ? this.handleRetryWithCacheClear : this.handleRetryRender,
2731
+ text: withCacheClear ? "Clear cache and retry" : "Retry",
2732
+ tone: "default"
2733
+ }) }),
2734
+ /* @__PURE__ */ jsx(Heading, { children: "An error occurred" }),
2735
+ /* @__PURE__ */ jsx(Card, {
2736
+ border: !0,
2737
+ radius: 2,
2738
+ overflow: "auto",
2739
+ padding: 4,
2740
+ tone: "inherit",
2741
+ children: /* @__PURE__ */ jsx(Stack, {
2742
+ space: 4,
2743
+ children: message && /* @__PURE__ */ jsx(Code, {
2744
+ size: 1,
2745
+ children: /* @__PURE__ */ jsxs("strong", { children: ["Error: ", message] })
2746
+ })
2747
+ })
2748
+ })
2749
+ ]
2750
+ })
2751
+ })
2752
+ });
2753
+ }
2754
+ };
2755
+ function SanityVision(props) {
2756
+ let $ = c(6), t0;
2757
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = { apiVersion: "1" }, $[0] = t0) : t0 = $[0];
2758
+ let client = useClient(t0), t1;
2759
+ $[1] === props.tool.options ? t1 = $[2] : (t1 = {
2760
+ defaultApiVersion: DEFAULT_API_VERSION,
2761
+ ...props.tool.options
2762
+ }, $[1] = props.tool.options, $[2] = t1);
2763
+ let config = t1, t2;
2764
+ return $[3] !== client || $[4] !== config ? (t2 = /* @__PURE__ */ jsx(VisionErrorBoundary, { children: /* @__PURE__ */ jsx(VisionContainer, {
2765
+ client,
2766
+ config
2767
+ }) }), $[3] = client, $[4] = config, $[5] = t2) : t2 = $[5], t2;
2768
+ }
2769
+ export { SanityVision as default };
2770
+
2771
+ //# sourceMappingURL=SanityVision-BKf_KyD3.js.map