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

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.
@@ -1,2771 +0,0 @@
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