@sanity/vision 5.0.0-next.0-9b570ece82-202507150640 → 5.0.0-next.7

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,111 +0,0 @@
1
- "use strict";
2
- var sanity = require("sanity");
3
- const visionLocaleStrings = sanity.defineLocalesResources("vision", {
4
- /** Label for action "Copy to clipboard", tied to the "Query URL" field. Also used for accessibility purposes on button */
5
- "action.copy-url-to-clipboard": "Copy to clipboard",
6
- /** Label for deleting a query */
7
- "action.delete": "Delete",
8
- /** Label for editing a query's title */
9
- "action.edit-title": "Edit title",
10
- /** Label for stopping an ongoing listen operation */
11
- "action.listen-cancel": "Stop",
12
- /** Label for setting up a listener */
13
- "action.listen-execute": "Listen",
14
- /** Label for query loading table */
15
- "action.load-queries": "Load queries",
16
- /** Label for loading a query */
17
- "action.load-query": "Load query",
18
- /** Label for cancelling an ongoing query */
19
- "action.query-cancel": "Cancel",
20
- /** Label for executing the query, eg doing a fetch */
21
- "action.query-execute": "Fetch",
22
- /** Label for saving a query */
23
- "action.save-query": "Save query",
24
- /** Label for updating a query */
25
- "action.update": "Update",
26
- /** Label for actions user can take */
27
- "label.actions": "Actions",
28
- /** Label for saved queries that have been edited */
29
- "label.edited": "Edited",
30
- /**
31
- * Some features has a "New" label indicating that the feature was recently introduced.
32
- * This defines what the text of that label is. Keep it short and sweet.
33
- */
34
- "label.new": "New",
35
- /** Label for query type "personal" */
36
- "label.personal": "Personal",
37
- /** Label for savedAt date */
38
- "label.saved-at": "Saved at",
39
- /** Saved queries */
40
- "label.saved-queries": "Saved queries",
41
- /** Search queries */
42
- "label.search-queries": "Search queries",
43
- /** Share query */
44
- "label.share": "Share",
45
- /** Label for saved query type "team" */
46
- "label.team": "Team",
47
- /** Error message for when the "Params" input are not a valid json */
48
- "params.error.params-invalid-json": "Parameters are not valid JSON",
49
- /** Label for "Params" (parameters) editor/input */
50
- "params.label": "Params",
51
- /** Label for 'Column' indicator when there is an error within the query */
52
- "query.error.column": "Column",
53
- /** Label for 'Line' indicator when there is an error within the query */
54
- "query.error.line": "Line",
55
- /** Label for "Query" editor/input */
56
- "query.label": "Query",
57
- /** Label for the "Query URL" field, shown after executing a query, and allows for copying */
58
- "query.url": "Query URL",
59
- /** Label for "End to End time" information of the fetched query */
60
- "result.end-to-end-time-label": "End-to-end",
61
- /** Label for "Execution time" information of the fetched query */
62
- "result.execution-time-label": "Execution",
63
- /** Label for "Result" explorer/view */
64
- "result.label": "Result",
65
- /** Tooltip text shown when the query result is not encodable as CSV */
66
- "result.save-result-as-csv.not-csv-encodable": "Result cannot be encoded as CSV",
67
- /** Label for "Save result as" result action */
68
- "result.save-result-as-format": "Save result as <SaveResultButtons/>",
69
- /**
70
- * "Not applicable" message for when there is no Execution time or End to End time information
71
- * available for the query (eg when the query has not been executed, or errored)
72
- */
73
- "result.timing-not-applicable": "n/a",
74
- /** Query already saved error label */
75
- "save-query.already-saved": "Query already saved",
76
- /** Save error label */
77
- "save-query.error": "Error saving query",
78
- /** Save success label */
79
- "save-query.success": "Query saved",
80
- /** Label for the "API version" dropdown in settings */
81
- "settings.api-version-label": "API version",
82
- /** Label for the "Custom API version" input in settings, shown when "other" is chosen as API version */
83
- "settings.custom-api-version-label": "Custom API version",
84
- /** Label for the "Dataset" dropdown in vision settings */
85
- "settings.dataset-label": "Dataset",
86
- /** Error label for when the API version in 'Custom API version' input is invalid */
87
- "settings.error.invalid-api-version": "Invalid API version",
88
- /** Label for the "other" versions within the "API version" dropdown */
89
- "settings.other-api-version-label": "Other",
90
- /**
91
- * Label for the "Perspective" dropdown in vision settings
92
- * @see {@link https://www.sanity.io/docs/perspectives}
93
- */
94
- "settings.perspective-label": "Perspective",
95
- /** Notification about previewDrafts to drafts rename */
96
- "settings.perspective.preview-drafts-renamed-to-drafts.description": 'The "<code>previewDrafts</code>" perspective has been renamed to "<code>drafts</code>" and is now deprecated. This change is effective for all versions with perspective support (>= v2021-03-25).',
97
- /** Call to action to read the docs related to "Perspectives" */
98
- "settings.perspectives.action.docs-link": "Read docs",
99
- /** Option for selecting default perspective */
100
- "settings.perspectives.default": "No perspective (API default)",
101
- /** Description for popover that explains what "Perspectives" are */
102
- "settings.perspectives.description": 'Perspectives allow your query to run against different "views" of the content in your dataset',
103
- /** Description for upcoming default perspective change */
104
- "settings.perspectives.new-default.description": 'The default perspective will change from "<code>raw</code>" to "<code>published</code>" in an upcoming API version. Please consult docs for more details.',
105
- /** Label for the pinned release perspective */
106
- "settings.perspectives.pinned-release-label": "Pinned release",
107
- /** Title for popover that explains what "Perspectives" are */
108
- "settings.perspectives.title": "Perspectives"
109
- });
110
- exports.default = visionLocaleStrings;
111
- //# sourceMappingURL=resources.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SanityVision.mjs","sources":["../../src/apiVersions.ts","../../src/components/DelayedSpinner.tsx","../../src/codemirror/extensions.ts","../../src/codemirror/useCodemirrorTheme.ts","../../src/codemirror/VisionCodeMirror.styled.tsx","../../src/codemirror/VisionCodeMirror.tsx","../../src/perspectives.ts","../../src/util/encodeQueryString.ts","../../src/util/isPlainObject.ts","../../src/util/localStorage.ts","../../src/util/parseApiQueryString.ts","../../src/util/prefixApiVersion.ts","../../src/util/validateApiVersion.ts","../../src/util/tryParseParams.ts","../../src/components/VisionGui.styled.tsx","../../src/components/ParamsEditor.tsx","../../src/hooks/useSavedQueries.ts","../../src/components/QueryRecall.styled.tsx","../../src/components/QueryRecall.tsx","../../src/components/usePaneSize.ts","../../src/components/VisionGuiControls.tsx","../../src/components/PerspectivePopover.styled.tsx","../../src/components/PerspectivePopover.tsx","../../src/components/VisionGuiHeader.tsx","../../src/util/getBlobUrl.ts","../../src/components/QueryErrorDialog.styled.tsx","../../src/components/QueryErrorDetails.tsx","../../src/components/QueryErrorDialog.tsx","../../src/components/ResultView.styled.tsx","../../src/components/ResultView.tsx","../../src/components/SaveResultButtons.tsx","../../src/components/VisionGuiResult.tsx","../../src/components/VisionGui.tsx","../../src/hooks/useDatasets.ts","../../src/containers/VisionContainer.tsx","../../src/containers/VisionErrorBoundary.tsx","../../src/SanityVision.tsx"],"sourcesContent":["export const API_VERSIONS = [\n 'v1',\n 'vX',\n 'v2021-03-25',\n 'v2021-10-21',\n 'v2022-03-07',\n 'v2025-02-19',\n `v${new Date().toISOString().split('T')[0]}`,\n]\nexport const [DEFAULT_API_VERSION] = API_VERSIONS.slice(-1)\n","import {Spinner} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\n\ninterface DelayedSpinnerProps {\n delay?: number\n}\n\n// Waits for X ms before showing a spinner\nexport function DelayedSpinner(props: DelayedSpinnerProps) {\n const [show, setShow] = useState(false)\n\n useEffect(() => {\n const timer = setTimeout(() => setShow(true), props.delay || 500)\n return () => clearTimeout(timer)\n }, [props.delay])\n\n return show ? <Spinner muted size={4} /> : null\n}\n","import {closeBrackets} from '@codemirror/autocomplete'\nimport {defaultKeymap, history, historyKeymap} from '@codemirror/commands'\nimport {javascriptLanguage} from '@codemirror/lang-javascript'\nimport {\n bracketMatching,\n defaultHighlightStyle,\n indentOnInput,\n syntaxHighlighting,\n} from '@codemirror/language'\nimport {highlightSelectionMatches} from '@codemirror/search'\nimport {type Extension} from '@codemirror/state'\nimport {\n drawSelection,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n} from '@codemirror/view'\n\nexport const codemirrorExtensions: Extension[] = [\n [javascriptLanguage],\n lineNumbers(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSelectionMatches(),\n highlightSpecialChars(),\n indentOnInput(),\n bracketMatching(),\n closeBrackets(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, {fallback: true}),\n keymap.of(\n [\n // Override the default keymap for Mod-Enter to not insert a new line, we have a custom event handler for executing queries\n {key: 'Mod-Enter', run: () => true},\n\n // Add the default keymap and history keymap\n defaultKeymap,\n historyKeymap,\n ]\n .flat()\n .filter(Boolean),\n ),\n]\n","import {HighlightStyle, syntaxHighlighting} from '@codemirror/language'\nimport {EditorView} from '@codemirror/view'\nimport {tags as t} from '@lezer/highlight'\nimport {hues} from '@sanity/color'\nimport {rem, type Theme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function useCodemirrorTheme(theme: Theme) {\n const cmTheme = useMemo(() => createTheme(theme), [theme])\n const cmHighlight = useMemo(() => syntaxHighlighting(createHighlight(theme)), [theme])\n\n return [cmTheme, cmHighlight]\n}\n\nfunction createTheme(theme: Theme) {\n const {color, fonts} = theme.sanity\n const card = color.card.enabled\n const cursor = hues.blue[color.dark ? 400 : 500].hex\n const selection = hues.gray[theme.sanity.color.dark ? 900 : 100].hex\n\n return EditorView.theme(\n {\n '&': {\n color: card.fg,\n backgroundColor: card.bg,\n },\n\n '.cm-content': {\n caretColor: cursor,\n },\n\n '.cm-editor': {\n fontFamily: fonts.code.family,\n fontSize: rem(fonts.code.sizes[1].fontSize),\n lineHeight: 'inherit',\n },\n\n '.cm-cursor, .cm-dropCursor': {borderLeftColor: cursor},\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: selection,\n },\n\n '.cm-panels': {backgroundColor: card.bg, color: card.fg},\n '.cm-panels.cm-panels-top': {borderBottom: `2px solid ${card.border}`},\n '.cm-panels.cm-panels-bottom': {borderTop: `2px solid ${card.border}`},\n },\n {dark: color.dark},\n )\n}\n\nfunction createHighlight(theme: Theme) {\n const c = theme.sanity.color.base\n const s = theme.sanity.color.syntax\n return HighlightStyle.define([\n {tag: t.keyword, color: s.keyword},\n {tag: [t.propertyName, t.name, t.deleted, t.character, t.macroName], color: s.property},\n {tag: [t.function(t.variableName), t.labelName], color: s.function},\n {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: s.variable},\n {tag: [t.definition(t.name), t.separator], color: s.constant},\n {\n tag: [\n t.typeName,\n t.className,\n t.number,\n t.changed,\n t.annotation,\n t.modifier,\n t.self,\n t.namespace,\n ],\n color: s.number,\n },\n {\n tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)],\n color: s.operator,\n },\n {tag: [t.meta, t.comment], color: s.comment},\n {tag: t.strong, fontWeight: 'bold'},\n {tag: t.emphasis, fontStyle: 'italic'},\n {tag: t.strikethrough, textDecoration: 'line-through'},\n {tag: t.heading, fontWeight: 'bold', color: s.property},\n {tag: [t.atom, t.bool, t.special(t.variableName)], color: s.boolean},\n {tag: [t.processingInstruction, t.string, t.inserted], color: s.string},\n {tag: t.invalid, color: c.fg},\n ])\n}\n","import {rem} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const EditorRoot = styled.div`\n width: 100%;\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n overflow: clip;\n position: relative;\n display: flex;\n\n & .cm-theme {\n width: 100%;\n }\n\n & .cm-editor {\n height: 100%;\n\n font-size: 16px;\n line-height: 21px;\n }\n\n & .cm-line {\n padding-left: ${({theme}) => rem(theme.sanity.space[3])};\n }\n\n & .cm-content {\n border-right-width: ${({theme}) => rem(theme.sanity.space[4])} !important;\n padding-top: ${({theme}) => rem(theme.sanity.space[5])};\n }\n`\n","import {useTheme} from '@sanity/ui'\nimport CodeMirror, {\n EditorSelection,\n type ReactCodeMirrorProps,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror'\nimport {forwardRef, useCallback, useImperativeHandle, useRef, useState} from 'react'\n\nimport {codemirrorExtensions} from './extensions'\nimport {useCodemirrorTheme} from './useCodemirrorTheme'\nimport {EditorRoot} from './VisionCodeMirror.styled'\n\nexport interface VisionCodeMirrorHandle {\n resetEditorContent: (newContent: string) => void\n}\n\nexport const VisionCodeMirror = forwardRef<\n VisionCodeMirrorHandle,\n Pick<ReactCodeMirrorProps, 'onChange'> & {\n initialValue: ReactCodeMirrorProps['value']\n }\n>((props, ref) => {\n // The value prop is only passed for initial value, and is not updated when the parent component updates the value.\n // If you need to update the value, use the resetEditorContent function.\n const [initialValue] = useState(props.initialValue)\n const sanityTheme = useTheme()\n const theme = useCodemirrorTheme(sanityTheme)\n const codeMirrorRef = useRef<ReactCodeMirrorRef>(null)\n\n const resetEditorContent = useCallback((newContent: string) => {\n const editorView = codeMirrorRef.current?.view\n if (!editorView) return\n\n const currentDoc = editorView.state.doc.toString()\n if (newContent !== currentDoc) {\n editorView.dispatch({\n changes: {from: 0, to: currentDoc.length, insert: newContent},\n selection: EditorSelection.cursor(newContent.length), // Place cursor at end\n })\n }\n }, [])\n\n useImperativeHandle(\n ref,\n () => ({\n resetEditorContent,\n }),\n [resetEditorContent],\n )\n\n return (\n <EditorRoot>\n <CodeMirror\n ref={codeMirrorRef}\n basicSetup={false}\n theme={theme}\n extensions={codemirrorExtensions}\n value={initialValue}\n onChange={props.onChange}\n />\n </EditorRoot>\n )\n})\n\n// Add display name\nVisionCodeMirror.displayName = 'VisionCodeMirror'\n","import {type ClientPerspective} from '@sanity/client'\nimport isEqual from 'react-fast-compare'\nimport {type PerspectiveContextValue} from 'sanity'\n\nexport const SUPPORTED_PERSPECTIVES = ['pinnedRelease', 'raw', 'published', 'drafts'] as const\n\nexport type SupportedPerspective = (typeof SUPPORTED_PERSPECTIVES)[number]\n\n/**\n * Virtual perspectives are recognised by Vision, but do not concretely reflect the names of real\n * perspectives. Virtual perspectives are transformed into real perspectives before being used to\n * interact with data.\n *\n * For example, the `pinnedRelease` virtual perspective is transformed to the real perspective\n * currently pinned in Studio.\n */\nexport const VIRTUAL_PERSPECTIVES = ['pinnedRelease'] as const\n\nexport type VirtualPerspective = (typeof VIRTUAL_PERSPECTIVES)[number]\n\nexport function isSupportedPerspective(p: string): p is SupportedPerspective {\n return SUPPORTED_PERSPECTIVES.includes(p as SupportedPerspective)\n}\n\nexport function isVirtualPerspective(\n maybeVirtualPerspective: unknown,\n): maybeVirtualPerspective is VirtualPerspective {\n return (\n typeof maybeVirtualPerspective === 'string' &&\n VIRTUAL_PERSPECTIVES.includes(maybeVirtualPerspective as VirtualPerspective)\n )\n}\n\nexport function hasPinnedPerspective({selectedPerspectiveName}: PerspectiveContextValue): boolean {\n return typeof selectedPerspectiveName !== 'undefined'\n}\n\nexport function hasPinnedPerspectiveChanged(\n previous: PerspectiveContextValue,\n next: PerspectiveContextValue,\n): boolean {\n const hasPerspectiveStackChanged = !isEqual(previous.perspectiveStack, next.perspectiveStack)\n\n return (\n previous.selectedPerspectiveName !== next.selectedPerspectiveName || hasPerspectiveStackChanged\n )\n}\n\nexport function getActivePerspective({\n visionPerspective,\n perspectiveStack,\n}: {\n visionPerspective: ClientPerspective | SupportedPerspective | undefined\n perspectiveStack: PerspectiveContextValue['perspectiveStack']\n}): ClientPerspective | undefined {\n if (visionPerspective !== 'pinnedRelease') {\n return visionPerspective\n }\n return perspectiveStack\n}\n","export function encodeQueryString(\n query: string,\n params: Record<string, unknown> = {},\n options: Record<string, string | string[]> = {},\n): string {\n const searchParams = new URLSearchParams()\n searchParams.set('query', query)\n\n for (const [key, value] of Object.entries(params)) {\n searchParams.set(`$${key}`, JSON.stringify(value))\n }\n\n for (const [key, value] of Object.entries(options)) {\n if (value) searchParams.set(key, `${value}`)\n }\n\n return `?${searchParams}`\n}\n","export function isPlainObject(obj: unknown): obj is Record<string, unknown> {\n return (\n !!obj && typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]'\n )\n}\n","import {isPlainObject} from './isPlainObject'\n\nconst hasLocalStorage = supportsLocalStorage()\nconst keyPrefix = 'sanityVision:'\n\nexport interface LocalStorageish {\n get: <T>(key: string, defaultVal: T) => T\n set: <T>(key: string, value: T) => T\n merge: <T>(props: T) => T\n}\n\nexport function clearLocalStorage() {\n if (!hasLocalStorage) {\n return\n }\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key?.startsWith(keyPrefix)) {\n localStorage.removeItem(key)\n }\n }\n}\n\nexport function getLocalStorage(namespace: string): LocalStorageish {\n const storageKey = `${keyPrefix}${namespace}`\n let loadedState: Record<string, unknown> | null = null\n\n return {get, set, merge}\n\n function get<T>(key: string, defaultVal: T): T {\n const state = ensureState()\n return typeof state[key] === 'undefined' ? defaultVal : (state[key] as T)\n }\n\n function set<T>(key: string, value: T): T {\n const state = ensureState()\n state[key] = value\n localStorage.setItem(storageKey, JSON.stringify(loadedState))\n return value\n }\n\n function merge<T>(props: T): T {\n const state = {...ensureState(), ...props}\n localStorage.setItem(storageKey, JSON.stringify(state))\n return state\n }\n\n function ensureState(): Record<string, unknown> {\n if (loadedState === null) {\n loadedState = loadState()\n }\n\n return loadedState\n }\n\n function loadState() {\n if (!hasLocalStorage) {\n return {}\n }\n\n try {\n const stored = JSON.parse(localStorage.getItem(storageKey) || '{}')\n return isPlainObject(stored) ? stored : {}\n } catch (err) {\n return {}\n }\n }\n}\n\nfunction supportsLocalStorage() {\n const mod = 'lsCheck'\n try {\n localStorage.setItem(mod, mod)\n localStorage.removeItem(mod)\n return true\n } catch (err) {\n return false\n }\n}\n","export interface ParsedApiQueryString {\n query: string\n params: Record<string, unknown>\n options: Record<string, string>\n}\n\nexport function parseApiQueryString(qs: URLSearchParams): ParsedApiQueryString {\n const params: Record<string, unknown> = {}\n const options: Record<string, string> = {}\n\n for (const [key, value] of qs.entries()) {\n if (key[0] === '$') {\n params[key.slice(1)] = JSON.parse(value)\n continue\n }\n\n if (key === 'perspective') {\n options[key] = value\n continue\n }\n }\n\n return {query: qs.get('query') || '', params, options}\n}\n","export function prefixApiVersion(version: string): string {\n if (version[0] !== 'v' && version !== 'other') {\n return `v${version}`\n }\n\n return version\n}\n","export function validateApiVersion(apiVersion: string): boolean {\n const parseableApiVersion = apiVersion.replace(/^v/, '').trim().toUpperCase()\n\n const isValidApiVersion =\n parseableApiVersion.length > 0 &&\n (parseableApiVersion === 'X' ||\n parseableApiVersion === '1' ||\n (/^\\d{4}-\\d{2}-\\d{2}$/.test(parseableApiVersion) && !isNaN(Date.parse(parseableApiVersion))))\n\n return isValidApiVersion\n}\n","import JSON5 from 'json5'\nimport {type TFunction} from 'sanity'\n\nexport function tryParseParams(\n val: string,\n t: TFunction<'vision', undefined>,\n): Record<string, unknown> | Error {\n try {\n const parsed = val ? JSON5.parse(val) : {}\n return typeof parsed === 'object' && parsed && !Array.isArray(parsed) ? parsed : {}\n } catch (err) {\n // JSON5 always prefixes the error message with JSON5:, so we remove it\n // to clean up the error tooltip\n err.message = `${t('params.error.params-invalid-json')}:\\n\\n${err.message.replace(\n 'JSON5:',\n '',\n )}`\n return err\n }\n}\n","import {Box, Card, Flex, Label, rem, Text} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const Root = styled(Flex)`\n .sidebarPanes .Pane {\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n & .Resizer {\n background: var(--card-border-color);\n opacity: 1;\n z-index: 1;\n box-sizing: border-box;\n background-clip: padding-box;\n border: solid transparent;\n }\n\n & .Resizer:hover {\n border-color: var(--card-shadow-ambient-color);\n }\n\n & .Resizer.horizontal {\n height: 11px;\n margin: -5px 0;\n border-width: 5px 0;\n cursor: row-resize;\n width: 100%;\n z-index: 4;\n }\n\n & .Resizer.vertical {\n width: 11px;\n margin: 0 -5px;\n border-width: 0 5px;\n cursor: col-resize;\n z-index: 2; /* To prevent the resizer from being hidden behind CodeMirror scroll area */\n }\n\n .Resizer.disabled {\n cursor: not-allowed;\n }\n\n .Resizer.disabled:hover {\n border-color: transparent;\n }\n`\n\nRoot.displayName = 'Root'\n\nexport const Header = styled(Card)`\n border-bottom: 1px solid var(--card-border-color);\n`\n\nexport const StyledLabel = styled(Label)`\n flex: 1;\n`\n\nexport const SplitpaneContainer = styled(Box)`\n position: relative;\n`\n\nexport const QueryCopyLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n\nexport const InputBackgroundContainer = styled(Box)`\n position: absolute;\n top: 1rem;\n left: 0;\n padding: 0;\n margin: 0;\n z-index: 10;\n right: 0;\n\n ${StyledLabel} {\n user-select: none;\n }\n`\n\nexport const InputBackgroundContainerLeft = styled(InputBackgroundContainer)`\n // This is so its aligned with the gutters of CodeMirror\n left: 33px;\n`\n\nexport const InputContainer = styled(Card)`\n width: 100%;\n height: 100%;\n position: relative;\n flex-direction: column;\n`\n\nexport const ResultOuterContainer = styled(Flex)`\n height: 100%;\n`\n\nexport const ResultInnerContainer = styled(Box)`\n position: relative;\n`\n\nexport const ResultContainer = styled(Card)<{$isInvalid: boolean}>`\n height: 100%;\n width: 100%;\n position: absolute;\n max-width: 100%;\n\n ${({$isInvalid}) =>\n $isInvalid &&\n css`\n &:after {\n background-color: var(--card-bg-color);\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n }\n `}\n`\n\nexport const Result = styled(Box)`\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 20;\n`\n\nexport const ResultFooter = styled(Flex)`\n border-top: 1px solid var(--card-border-color);\n`\n\nexport const TimingsCard = styled(Card)`\n position: relative;\n`\n\nexport const TimingsContainer = styled(Box)`\n width: 100%;\n height: 100%;\n`\n\nexport const TimingsTextContainer = styled(Flex)`\n height: 100%;\n min-height: ${({theme}) =>\n rem(\n theme.sanity.space[3] * 2 +\n theme.sanity.fonts.text.sizes[2].lineHeight -\n theme.sanity.fonts.text.sizes[2].ascenderHeight -\n theme.sanity.fonts.text.sizes[2].descenderHeight,\n )};\n`\n\nexport const DownloadsCard = styled(Card)`\n position: relative;\n`\n\nexport const SaveResultLabel = styled(Text)`\n transform: initial;\n &:before,\n &:after {\n content: none;\n }\n > span {\n display: flex !important;\n gap: ${({theme}) => rem(theme.sanity.space[3])};\n align-items: center;\n }\n`\n\nexport const ControlsContainer = styled(Box)`\n border-top: 1px solid var(--card-border-color);\n`\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text, Tooltip} from '@sanity/ui'\nimport {debounce} from 'lodash'\nimport {type RefObject, useCallback, useEffect, useMemo, useState} from 'react'\nimport {type TFunction, useTranslation} from 'sanity'\n\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {tryParseParams} from '../util/tryParseParams'\nimport {type Params} from './VisionGui'\nimport {InputBackgroundContainerLeft, StyledLabel} from './VisionGui.styled'\n\nconst defaultValue = `{\\n \\n}`\n\nexport interface ParamsEditorProps {\n value: string\n onChange: (changeEvt: Params) => void\n paramsError: string | undefined\n hasValidParams: boolean\n editorRef: RefObject<VisionCodeMirrorHandle | null>\n}\n\nexport interface ParamsEditorChange {\n valid: boolean\n}\n\nexport function ParamsEditor(props: ParamsEditorProps) {\n const {onChange, paramsError, hasValidParams, editorRef} = props\n const {t} = useTranslation(visionLocaleNamespace)\n const {raw: value, error, parsed, valid} = parseParams(props.value, t)\n const [isValid, setValid] = useState(valid)\n const [init, setInit] = useState(false)\n\n // Emit onChange on very first render\n useEffect(() => {\n if (!init) {\n onChange({parsed, raw: value, valid: isValid, error})\n setInit(true)\n }\n }, [error, init, isValid, onChange, parsed, value])\n\n const handleChangeRaw = useCallback(\n (newValue: string) => {\n const event = parseParams(newValue, t)\n setValid(event.valid)\n onChange(event)\n },\n [onChange, t],\n )\n\n const handleChange = useMemo(() => debounce(handleChangeRaw, 333), [handleChangeRaw])\n return (\n <Card flex={1} tone={hasValidParams ? 'default' : 'critical'} data-testid=\"params-editor\">\n <InputBackgroundContainerLeft>\n <Flex>\n <StyledLabel muted>{t('params.label')}</StyledLabel>\n {paramsError && (\n <Tooltip animate placement=\"top\" portal content={<Text size={1}>{paramsError}</Text>}>\n <Box padding={1} marginX={2}>\n <Text>\n <ErrorOutlineIcon />\n </Text>\n </Box>\n </Tooltip>\n )}\n </Flex>\n </InputBackgroundContainerLeft>\n <VisionCodeMirror\n ref={editorRef}\n initialValue={props.value || defaultValue}\n onChange={handleChange}\n />\n </Card>\n )\n}\n\nexport function parseParams(\n value: string,\n t: TFunction<typeof visionLocaleNamespace, undefined>,\n): Params {\n const parsedParams = tryParseParams(value, t)\n const params = parsedParams instanceof Error ? {} : parsedParams\n const validationError = parsedParams instanceof Error ? parsedParams.message : undefined\n const isValid = !validationError\n\n return {\n parsed: params,\n raw: value,\n valid: isValid,\n error: validationError,\n }\n}\n","import {uuid} from '@sanity/uuid' // Import the UUID library\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {map, startWith} from 'rxjs/operators'\nimport {type KeyValueStoreValue, useKeyValueStore} from 'sanity'\n\nconst STORED_QUERIES_NAMESPACE = 'studio.vision-tool.saved-queries'\n\nexport interface QueryConfig {\n _key: string\n url: string\n savedAt: string\n title?: string\n shared?: boolean\n}\n\nexport interface StoredQueries {\n queries: QueryConfig[]\n}\n\nconst defaultValue = {\n queries: [],\n}\nconst keyValueStoreKey = STORED_QUERIES_NAMESPACE\n\nexport function useSavedQueries(): {\n queries: QueryConfig[]\n saveQuery: (query: Omit<QueryConfig, '_key'>) => void\n updateQuery: (query: QueryConfig) => void\n deleteQuery: (key: string) => void\n saving: boolean\n deleting: string[]\n saveQueryError: Error | undefined\n deleteQueryError: Error | undefined\n error: Error | undefined\n} {\n const keyValueStore = useKeyValueStore()\n\n const [value, setValue] = useState<StoredQueries>(defaultValue)\n const [saving, setSaving] = useState(false)\n const [deleting, setDeleting] = useState<string[]>([])\n const [saveQueryError, setSaveQueryError] = useState<Error | undefined>()\n const [deleteQueryError, setDeleteQueryError] = useState<Error | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const queries = useMemo(() => {\n return keyValueStore.getKey(keyValueStoreKey)\n }, [keyValueStore])\n\n useEffect(() => {\n const sub = queries\n .pipe(\n startWith(defaultValue as any),\n map((data: StoredQueries) => {\n if (!data) {\n return defaultValue\n }\n return data\n }),\n )\n .subscribe({\n next: setValue,\n error: (err) => setError(err as Error),\n })\n\n return () => sub?.unsubscribe()\n }, [queries, keyValueStore])\n\n const saveQuery = useCallback(\n (query: Omit<QueryConfig, '_key'>) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const newQuery = {...query, _key: uuid()} // Add a unique _key to the query\n const newQueries = [newQuery, ...value.queries]\n setValue({queries: newQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: newQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n } finally {\n setSaving(false)\n }\n },\n [keyValueStore, value.queries],\n )\n\n const updateQuery = useCallback(\n (query: QueryConfig) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const updatedQueries = value.queries.map((q) =>\n q._key === query._key ? {...q, ...query} : q,\n )\n setValue({queries: updatedQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: updatedQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n } finally {\n setSaving(false)\n }\n },\n [keyValueStore, value.queries],\n )\n\n const deleteQuery = useCallback(\n (key: string) => {\n setDeleting((prev) => [...prev, key])\n setDeleteQueryError(undefined)\n try {\n const filteredQueries = value.queries.filter((q) => q._key !== key)\n setValue({queries: filteredQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: filteredQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setDeleteQueryError(err as Error)\n } finally {\n setDeleting((prev) => prev.filter((k) => k !== key))\n }\n },\n [keyValueStore, value.queries],\n )\n\n return {\n queries: value.queries,\n saveQuery,\n updateQuery,\n deleteQuery,\n saving,\n deleting,\n saveQueryError,\n deleteQueryError,\n error,\n }\n}\n","import {Box, Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const FixedHeader = styled(Stack)`\n position: sticky;\n top: 0;\n background: ${({theme}) => theme.sanity.color.base.bg};\n z-index: 1;\n`\n\nexport const ScrollContainer = styled(Box)`\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${({theme}) => theme.sanity.color.base.border};\n border-radius: 4px;\n }\n`\n","import {AddIcon, SearchIcon, TrashIcon} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Code,\n Flex,\n Menu,\n MenuButton,\n MenuItem,\n Stack,\n Text,\n TextInput,\n useToast,\n} from '@sanity/ui'\nimport {isEqual} from 'lodash'\nimport {type ReactElement, useCallback, useState} from 'react'\nimport {ContextMenuButton, useDateTimeFormat, useTranslation} from 'sanity'\n\nimport {type QueryConfig, useSavedQueries} from '../hooks/useSavedQueries'\nimport {visionLocaleNamespace} from '../i18n'\nimport {FixedHeader, ScrollContainer} from './QueryRecall.styled'\nimport {type ParsedUrlState} from './VisionGui'\n\nexport function QueryRecall({\n url,\n getStateFromUrl,\n setStateFromParsedUrl,\n currentQuery,\n currentParams,\n generateUrl,\n}: {\n url?: string\n getStateFromUrl: (data: string) => ParsedUrlState | null\n setStateFromParsedUrl: (parsedUrlObj: ParsedUrlState) => void\n currentQuery: string\n currentParams: Record<string, unknown>\n generateUrl: (query: string, params: Record<string, unknown>) => string\n}): ReactElement {\n const toast = useToast()\n const {saveQuery, updateQuery, queries, deleteQuery, saving, deleting, saveQueryError} =\n useSavedQueries()\n const {t} = useTranslation(visionLocaleNamespace)\n const formatDate = useDateTimeFormat({\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n const [editingKey, setEditingKey] = useState<string | null>(null)\n const [editingTitle, setEditingTitle] = useState('')\n const [optimisticTitles, setOptimisticTitles] = useState<Record<string, string>>({})\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedUrl, setSelectedUrl] = useState<string | undefined>(url)\n\n const handleSave = useCallback(async () => {\n // Generate the correct URL first\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(new Date(duplicateQuery?.savedAt || ''))}`,\n })\n return\n }\n\n if (newUrl) {\n await saveQuery({\n url: newUrl,\n savedAt: new Date().toISOString(),\n title: 'Untitled',\n })\n // Set the selected URL to the newly saved query's URL\n setSelectedUrl(newUrl)\n }\n if (saveQueryError) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: saveQueryError.message,\n })\n } else {\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n }\n }, [\n queries,\n saveQueryError,\n toast,\n t,\n currentQuery,\n currentParams,\n getStateFromUrl,\n generateUrl,\n formatDate,\n saveQuery,\n ])\n\n const handleTitleSave = useCallback(\n async (query: QueryConfig, newTitle: string) => {\n setEditingKey(null)\n setOptimisticTitles((prev) => ({...prev, [query._key]: newTitle}))\n\n try {\n await updateQuery({\n ...query,\n title: newTitle,\n })\n // Clear optimistic title on success\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n } catch (err) {\n // Clear optimistic title on error\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [updateQuery, toast, t],\n )\n\n const handleUpdate = useCallback(\n async (query: QueryConfig) => {\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n // Skip the current query when checking for duplicates\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(\n new Date(duplicateQuery?.savedAt || ''),\n )}`,\n })\n return\n }\n\n try {\n await updateQuery({\n ...query,\n url: newUrl,\n savedAt: new Date().toISOString(),\n })\n setSelectedUrl(newUrl)\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [\n currentQuery,\n currentParams,\n formatDate,\n generateUrl,\n updateQuery,\n toast,\n t,\n queries,\n getStateFromUrl,\n ],\n )\n\n const filteredQueries = queries?.filter((q) => {\n return q?.title?.toLowerCase().includes(searchQuery.toLowerCase())\n })\n\n return (\n <ScrollContainer>\n <FixedHeader space={3}>\n <Flex padding={3} paddingTop={4} paddingBottom={0} justify=\"space-between\" align=\"center\">\n <Text weight=\"semibold\" style={{textTransform: 'capitalize'}} size={4}>\n {t('label.saved-queries')}\n </Text>\n <Button\n label={t('action.save-query')}\n icon={AddIcon}\n disabled={saving}\n onClick={handleSave}\n mode=\"bleed\"\n />\n </Flex>\n <Box padding={3} paddingTop={0}>\n <TextInput\n placeholder={t('label.search-queries')}\n icon={SearchIcon}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.currentTarget.value)}\n />\n </Box>\n </FixedHeader>\n <Stack paddingY={3}>\n {filteredQueries?.map((q) => {\n const queryObj = getStateFromUrl(q.url)\n const isSelected = selectedUrl === q.url\n\n // Compare against current live state\n const areQueriesEqual =\n queryObj && currentQuery === queryObj.query && isEqual(currentParams, queryObj.params)\n\n const isEdited = isSelected && !areQueriesEqual\n return (\n <Card\n key={q._key}\n width={'fill'}\n padding={4}\n border\n tone={isSelected ? 'positive' : 'default'}\n onClick={() => {\n setSelectedUrl(q.url) // Update the selected query immediately\n const parsedUrl = getStateFromUrl(q.url)\n if (parsedUrl) {\n setStateFromParsedUrl(parsedUrl)\n }\n }}\n style={{position: 'relative'}}\n >\n <Stack space={3}>\n <Flex justify=\"space-between\" align={'center'}>\n <Flex align=\"center\" gap={2} paddingRight={1}>\n {editingKey === q._key ? (\n <TextInput\n value={editingTitle}\n onChange={(event) => setEditingTitle(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n handleTitleSave(q, editingTitle)\n } else if (event.key === 'Escape') {\n setEditingKey(null)\n }\n }}\n onBlur={() => handleTitleSave(q, editingTitle)}\n autoFocus\n style={{maxWidth: '170px', height: '24px'}}\n />\n ) : (\n <Text\n weight=\"bold\"\n size={3}\n textOverflow=\"ellipsis\"\n style={{maxWidth: '170px', cursor: 'pointer', padding: '4px 0'}}\n title={\n optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)\n }\n onClick={() => {\n setEditingKey(q._key)\n setEditingTitle(q.title || q._key.slice(0, 5))\n }}\n >\n {optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)}\n </Text>\n )}\n {isEdited && (\n <Box\n style={{\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: 'var(--card-focus-ring-color)',\n }}\n />\n )}\n </Flex>\n <MenuButton\n button={<ContextMenuButton />}\n id={`${q._key}-menu`}\n menu={\n <Menu\n // style={{background: 'white', backgroundColor: 'white', borderRadius: '11%'}}\n >\n <MenuItem\n tone=\"critical\"\n padding={3}\n icon={TrashIcon}\n text={t('action.delete')}\n onClick={(event) => {\n event.stopPropagation()\n deleteQuery(q._key)\n }}\n />\n </Menu>\n }\n popover={{portal: true, placement: 'bottom-end', tone: 'default'}}\n />\n </Flex>\n\n <Code muted>{queryObj?.query.split('{')[0]}</Code>\n\n <Flex align=\"center\" gap={1}>\n <Text size={1} muted>\n {formatDate.format(new Date(q.savedAt || ''))}\n </Text>\n </Flex>\n\n {isEdited && (\n <Button\n mode=\"ghost\"\n tone=\"default\"\n size={1}\n padding={2}\n style={{\n height: '24px',\n position: 'absolute',\n right: '16px',\n bottom: '16px',\n fontSize: '12px',\n }}\n text={t('action.update')}\n onClick={(e) => {\n e.stopPropagation()\n handleUpdate(q)\n }}\n />\n )}\n </Stack>\n </Card>\n )\n })}\n </Stack>\n </ScrollContainer>\n )\n}\n","import {useEffect, useState} from 'react'\n\ninterface PaneSizeOptions {\n defaultSize: number\n size?: number\n allowResize: boolean\n minSize: number\n maxSize: number\n}\nfunction narrowBreakpoint(): boolean {\n return typeof window !== 'undefined' && window.innerWidth > 600\n}\n\nfunction calculatePaneSizeOptions(height: number | undefined): PaneSizeOptions {\n let rootHeight = height\n\n if (!rootHeight) {\n // Initial root height without header\n rootHeight =\n typeof window !== 'undefined' && typeof document !== 'undefined'\n ? document.body.getBoundingClientRect().height - 60\n : 0\n }\n return {\n defaultSize: rootHeight / (narrowBreakpoint() ? 2 : 1),\n size: rootHeight > 550 ? undefined : rootHeight * 0.4,\n allowResize: rootHeight > 550,\n minSize: Math.min(170, Math.max(170, rootHeight / 2)),\n maxSize: rootHeight > 650 ? rootHeight * 0.7 : rootHeight * 0.6,\n }\n}\n\nexport function usePaneSize({\n visionRootRef,\n}: {\n visionRootRef: React.RefObject<HTMLDivElement | null>\n}) {\n const [isNarrowBreakpoint, setIsNarrowBreakpoint] = useState(() => narrowBreakpoint())\n const [paneSizeOptions, setPaneSizeOptions] = useState<PaneSizeOptions>(() =>\n calculatePaneSizeOptions(undefined),\n )\n\n useEffect(() => {\n if (!visionRootRef.current) {\n return undefined\n }\n const handleResize = (entries: ResizeObserverEntry[]) => {\n setIsNarrowBreakpoint(narrowBreakpoint())\n const entry = entries?.[0]\n if (entry) {\n setPaneSizeOptions(calculatePaneSizeOptions(entry.contentRect.height))\n }\n }\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(visionRootRef.current)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [visionRootRef])\n\n return {paneSizeOptions, isNarrowBreakpoint}\n}\n","import {PlayIcon, StopIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Hotkeys, Text, Tooltip} from '@sanity/ui'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {ControlsContainer} from './VisionGui.styled'\n\nexport interface VisionGuiControlsProps {\n hasValidParams: boolean\n queryInProgress: boolean\n listenInProgress: boolean\n onQueryExecution: () => void\n onListenExecution: () => void\n}\n\n/**\n * Vision GUI controls\n * To handle query and listen execution.\n */\nexport function VisionGuiControls({\n hasValidParams,\n listenInProgress,\n queryInProgress,\n onQueryExecution,\n onListenExecution,\n}: VisionGuiControlsProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n return (\n <ControlsContainer>\n <Card padding={3} paddingX={3}>\n <Tooltip\n content={\n <Card radius={4}>\n <Text size={1} muted>\n {t('params.error.params-invalid-json')}\n </Text>\n </Card>\n }\n placement=\"top\"\n disabled={hasValidParams}\n portal\n >\n <Flex justify=\"space-evenly\">\n <Box flex={1}>\n <Tooltip\n content={\n <Card radius={4}>\n <Hotkeys keys={['Ctrl', 'Enter']} />\n </Card>\n }\n placement=\"top\"\n portal\n >\n <Button\n width=\"fill\"\n onClick={onQueryExecution}\n type=\"button\"\n icon={queryInProgress ? StopIcon : PlayIcon}\n disabled={listenInProgress || !hasValidParams}\n tone={queryInProgress ? 'positive' : 'primary'}\n text={queryInProgress ? t('action.query-cancel') : t('action.query-execute')}\n />\n </Tooltip>\n </Box>\n <Box flex={1} marginLeft={3}>\n <Button\n width=\"fill\"\n onClick={onListenExecution}\n type=\"button\"\n icon={listenInProgress ? StopIcon : PlayIcon}\n text={listenInProgress ? t('action.listen-cancel') : t('action.listen-execute')}\n mode=\"ghost\"\n disabled={!hasValidParams}\n tone={listenInProgress ? 'positive' : 'default'}\n />\n </Box>\n </Flex>\n </Tooltip>\n </Card>\n </ControlsContainer>\n )\n}\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const PerspectivePopoverContent = styled(Box)`\n /* This limits the width of the popover content */\n max-width: 240px;\n`\n\nexport const PerspectivePopoverLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n","import {HelpCircleIcon} from '@sanity/icons'\nimport {\n Badge,\n Box,\n Button,\n Card,\n type CardTone,\n Inline,\n Popover,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\nimport {Translate, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {PerspectivePopoverContent, PerspectivePopoverLink} from './PerspectivePopover.styled'\n\nconst Dot = styled.div<{$tone: CardTone}>`\n width: 4px;\n height: 4px;\n border-radius: 3px;\n box-shadow: 0 0 0 1px var(--card-bg-color);\n background-color: ${({$tone}) => `var(--card-badge-${$tone}-dot-color)`};\n`\n\nconst SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION = false\n\nexport function PerspectivePopover() {\n const [open, setOpen] = useState(false)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n\n const {t} = useTranslation(visionLocaleNamespace)\n\n useClickOutsideEvent(\n () => setOpen(false),\n () => [buttonRef.current, popoverRef.current],\n )\n\n return (\n <Popover\n content={\n <PerspectivePopoverContent>\n <Stack space={4}>\n <Inline space={2}>\n <Text weight=\"medium\">{t('settings.perspectives.title')}</Text>\n </Inline>\n\n <Card>\n <Text muted>{t('settings.perspectives.description')}</Text>\n </Card>\n <Card>\n <Stack space={2}>\n <Box>\n <Badge tone=\"primary\">{t('label.new')}</Badge>\n </Box>\n <Text muted>\n <Translate\n t={t}\n i18nKey=\"settings.perspective.preview-drafts-renamed-to-drafts.description\"\n />\n </Text>\n </Stack>\n </Card>\n {SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? (\n <Card>\n <Badge tone=\"caution\">{t('label.new')}</Badge>\n <Card>\n <Text muted>\n <Translate t={t} i18nKey=\"settings.perspectives.new-default.description\" />\n </Text>\n </Card>\n </Card>\n ) : null}\n\n <Card>\n <Text>\n <PerspectivePopoverLink href=\"https://sanity.io/docs/perspectives\" target=\"_blank\">\n {t('settings.perspectives.action.docs-link')} &rarr;\n </PerspectivePopoverLink>\n </Text>\n </Card>\n </Stack>\n </PerspectivePopoverContent>\n }\n placement=\"bottom-start\"\n portal\n padding={3}\n ref={popoverRef}\n open={open}\n >\n <Button\n icon={HelpCircleIcon}\n mode=\"bleed\"\n padding={2}\n paddingRight={1}\n tone=\"primary\"\n fontSize={1}\n ref={buttonRef}\n onClick={handleClick}\n selected={open}\n >\n <Dot $tone={SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? 'caution' : 'primary'} />\n </Button>\n </Popover>\n )\n}\n","import {CopyIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Grid, Inline, Select, Stack, TextInput, Tooltip} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type ComponentType,\n Fragment,\n type RefObject,\n useCallback,\n useMemo,\n useRef,\n} from 'react'\nimport {type PerspectiveContextValue, type TFunction, usePerspective, useTranslation} from 'sanity'\n\nimport {API_VERSIONS} from '../apiVersions'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n hasPinnedPerspective,\n SUPPORTED_PERSPECTIVES,\n type SupportedPerspective,\n} from '../perspectives'\nimport {PerspectivePopover} from './PerspectivePopover'\nimport {Header, QueryCopyLink, StyledLabel} from './VisionGui.styled'\n\nconst PinnedReleasePerspectiveOption: ComponentType<{\n pinnedPerspective: PerspectiveContextValue\n t: TFunction\n}> = ({pinnedPerspective, t}) => {\n const name =\n typeof pinnedPerspective.selectedPerspective === 'object'\n ? pinnedPerspective.selectedPerspective.metadata.title\n : pinnedPerspective.selectedPerspectiveName\n\n const label = hasPinnedPerspective(pinnedPerspective)\n ? `(${t('settings.perspectives.pinned-release-label')})`\n : t('settings.perspectives.pinned-release-label')\n\n const text = useMemo(\n () => [name, label].filter((value) => typeof value !== 'undefined').join(' '),\n [label, name],\n )\n\n return (\n <option value=\"pinnedRelease\" disabled={!hasPinnedPerspective(pinnedPerspective)}>\n {text}\n </option>\n )\n}\n\nexport interface VisionGuiHeaderProps {\n onChangeDataset: (evt: ChangeEvent<HTMLSelectElement>) => void\n dataset: string\n customApiVersion: string | false\n apiVersion: string\n onChangeApiVersion: (evt: ChangeEvent<HTMLSelectElement>) => void\n datasets: string[]\n customApiVersionElementRef: RefObject<HTMLInputElement | null>\n onCustomApiVersionChange: (evt: ChangeEvent<HTMLInputElement>) => void\n isValidApiVersion: boolean\n onChangePerspective: (evt: ChangeEvent<HTMLSelectElement>) => void\n url?: string\n perspective?: SupportedPerspective\n}\n\nexport function VisionGuiHeader({\n onChangeDataset,\n dataset,\n customApiVersion,\n apiVersion,\n onChangeApiVersion,\n datasets,\n customApiVersionElementRef,\n onCustomApiVersionChange,\n isValidApiVersion,\n onChangePerspective,\n url,\n perspective,\n}: VisionGuiHeaderProps) {\n const pinnedPerspective = usePerspective()\n const {t} = useTranslation(visionLocaleNamespace)\n const operationUrlElement = useRef<HTMLInputElement | null>(null)\n const handleCopyUrl = useCallback(() => {\n const el = operationUrlElement.current\n if (!el) return\n\n try {\n el.select()\n document.execCommand('copy')\n } catch (err) {\n console.error('Unable to copy to clipboard :(')\n }\n }, [])\n\n return (\n <Header paddingX={3} paddingY={2}>\n <Grid columns={[1, 4, 8, 12]}>\n {/* Dataset selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>{t('settings.dataset-label')}</StyledLabel>\n </Card>\n <Select value={dataset} onChange={onChangeDataset}>\n {datasets.map((ds: string) => (\n <option key={ds}>{ds}</option>\n ))}\n </Select>\n </Stack>\n </Box>\n\n {/* API version selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>{t('settings.api-version-label')}</StyledLabel>\n </Card>\n <Select\n data-testid=\"api-version-selector\"\n value={customApiVersion === false ? apiVersion : 'other'}\n onChange={onChangeApiVersion}\n >\n {API_VERSIONS.map((version) => (\n <option key={version}>{version}</option>\n ))}\n <option key=\"other\" value=\"other\">\n {t('settings.other-api-version-label')}\n </option>\n </Select>\n </Stack>\n </Box>\n\n {/* Custom API version input */}\n {customApiVersion !== false && (\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel textOverflow=\"ellipsis\">\n {t('settings.custom-api-version-label')}\n </StyledLabel>\n </Card>\n\n <TextInput\n ref={customApiVersionElementRef}\n value={customApiVersion}\n onChange={onCustomApiVersionChange}\n customValidity={\n isValidApiVersion ? undefined : t('settings.error.invalid-api-version')\n }\n maxLength={11}\n />\n </Stack>\n </Box>\n )}\n\n {/* Perspective selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingBottom={1}>\n <Inline space={1}>\n <Box>\n <StyledLabel>{t('settings.perspective-label')}</StyledLabel>\n </Box>\n\n <Box>\n <PerspectivePopover />\n </Box>\n </Inline>\n </Card>\n <Select value={perspective || 'default'} onChange={onChangePerspective}>\n {SUPPORTED_PERSPECTIVES.map((perspectiveName) => {\n if (perspectiveName === 'pinnedRelease') {\n return (\n <Fragment key=\"pinnedRelease\">\n <PinnedReleasePerspectiveOption pinnedPerspective={pinnedPerspective} t={t} />\n <option key=\"default\" value=\"default\">\n {t('settings.perspectives.default')}\n </option>\n <hr />\n </Fragment>\n )\n }\n return <option key={perspectiveName}>{perspectiveName}</option>\n })}\n </Select>\n </Stack>\n </Box>\n\n {/* Query URL (for copying) */}\n {typeof url === 'string' ? (\n <Box padding={1} flex={1} column={customApiVersion === false ? 6 : 4}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>\n {t('query.url')}&nbsp;\n <QueryCopyLink onClick={handleCopyUrl}>\n [{t('action.copy-url-to-clipboard')}]\n </QueryCopyLink>\n </StyledLabel>\n </Card>\n <Flex flex={1} gap={1}>\n <Box flex={1}>\n <TextInput readOnly type=\"url\" ref={operationUrlElement} value={url} />\n </Box>\n <Tooltip content={t('action.copy-url-to-clipboard')}>\n <Button\n aria-label={t('action.copy-url-to-clipboard')}\n type=\"button\"\n mode=\"ghost\"\n icon={CopyIcon}\n onClick={handleCopyUrl}\n />\n </Tooltip>\n </Flex>\n </Stack>\n </Box>\n ) : (\n <Box flex={1} />\n )}\n </Grid>\n </Header>\n )\n}\n","import {json2csv} from 'json-2-csv'\n\nfunction getBlobUrl(content: string, mimeType: string): string {\n return URL.createObjectURL(\n new Blob([content], {\n type: mimeType,\n }),\n )\n}\n\nfunction getMemoizedBlobUrlResolver(mimeType: string, stringEncoder: (input: any) => string) {\n return (() => {\n let prevResult = ''\n let prevContent = ''\n return (input: unknown) => {\n const content = stringEncoder(input)\n if (typeof content !== 'string' || content === '') {\n return undefined\n }\n\n if (content === prevContent) {\n return prevResult\n }\n\n prevContent = content\n if (prevResult) {\n URL.revokeObjectURL(prevResult)\n }\n\n prevResult = getBlobUrl(content, mimeType)\n return prevResult\n }\n })()\n}\n\nexport const getJsonBlobUrl = getMemoizedBlobUrlResolver('application/json', (input) =>\n JSON.stringify(input, null, 2),\n)\n\nexport const getCsvBlobUrl = getMemoizedBlobUrlResolver('text/csv', (input) => {\n return json2csv(Array.isArray(input) ? input : [input]).trim()\n})\n","import {Code} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const ErrorCode = styled(Code)`\n color: ${({theme}) => theme.sanity.color.muted.critical.enabled.fg};\n`\n","import {Box} from '@sanity/ui'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {ErrorCode} from './QueryErrorDialog.styled'\n\ninterface ContentLakeQueryError {\n details: {\n query: string\n start: number\n end: number\n\n lineNumber?: number\n column?: number\n }\n}\n\nexport function QueryErrorDetails({error}: {error: ContentLakeQueryError | Error}) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n if (!('details' in error)) {\n return null\n }\n\n const details = {...error.details, ...mapToLegacyDetails(error.details)}\n if (!details.line) {\n return null\n }\n\n return (\n <div>\n <ErrorCode size={1}>{`${details.line}\\n${dashLine(\n details.column,\n details.columnEnd,\n )}`}</ErrorCode>\n <Box marginTop={4}>\n <ErrorCode size={1}>{`${t('query.error.line')}: ${details.lineNumber}\\n${t(\n 'query.error.column',\n )}: ${details.column}`}</ErrorCode>\n </Box>\n </div>\n )\n}\n\nfunction mapToLegacyDetails(details: ContentLakeQueryError['details']) {\n if (!details || typeof details.query !== 'string' || typeof details.start !== 'number') {\n return {}\n }\n\n const {query, start, end} = details\n const lineStart = query.slice(0, start).lastIndexOf('\\n') + 1\n const lineNumber = (query.slice(0, lineStart).match(/\\n/g) || []).length\n const line = query.slice(lineStart, query.indexOf('\\n', lineStart))\n const column = start - lineStart\n const columnEnd = typeof end === 'number' ? end - lineStart : undefined\n\n return {line, lineNumber, column, columnEnd}\n}\n\nfunction dashLine(column: number, columnEnd: number | undefined): string {\n const line = '-'.repeat(column)\n const hats = `^`.repeat(columnEnd ? columnEnd - column : 1)\n return `${line}${hats}`\n}\n","import {Stack} from '@sanity/ui'\n\nimport {QueryErrorDetails} from './QueryErrorDetails'\nimport {ErrorCode} from './QueryErrorDialog.styled'\n\nexport function QueryErrorDialog(props: {error: Error}) {\n return (\n <Stack space={5} marginTop={2}>\n <ErrorCode size={1}>{props.error.message}</ErrorCode>\n <QueryErrorDetails error={props.error} />\n </Stack>\n )\n}\n","import {rem, type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const ResultViewWrapper = styled.div<{theme: Theme}>(({theme}) => {\n const {color, fonts, space} = theme.sanity\n\n return css`\n & .json-inspector,\n & .json-inspector .json-inspector__selection {\n font-family: ${fonts.code.family};\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n color: var(--card-code-fg-color);\n }\n\n & .json-inspector .json-inspector__leaf {\n padding-left: ${rem(space[4])};\n }\n\n & .json-inspector .json-inspector__leaf.json-inspector__leaf_root {\n padding-top: ${rem(space[0])};\n padding-left: 0;\n }\n\n & .json-inspector > .json-inspector__leaf_root > .json-inspector__line > .json-inspector__key {\n display: none;\n }\n\n & .json-inspector .json-inspector__line {\n display: block;\n position: relative;\n cursor: default;\n }\n\n & .json-inspector .json-inspector__line::after {\n content: '';\n position: absolute;\n top: 0;\n left: -200px;\n right: -50px;\n bottom: 0;\n z-index: -1;\n pointer-events: none;\n }\n\n & .json-inspector .json-inspector__line:hover::after {\n background: var(--card-code-bg-color);\n }\n\n & .json-inspector .json-inspector__leaf_composite > .json-inspector__line {\n cursor: pointer;\n }\n\n & .json-inspector .json-inspector__leaf_composite > .json-inspector__line::before {\n content: '▸ ';\n margin-left: calc(0px - ${rem(space[4])});\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n }\n\n &\n .json-inspector\n .json-inspector__leaf_expanded.json-inspector__leaf_composite\n > .json-inspector__line::before {\n content: '▾ ';\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n }\n\n & .json-inspector .json-inspector__radio,\n & .json-inspector .json-inspector__flatpath {\n display: none;\n }\n\n & .json-inspector .json-inspector__value {\n margin-left: ${rem(space[4] / 2)};\n }\n\n &\n .json-inspector\n > .json-inspector__leaf_root\n > .json-inspector__line\n > .json-inspector__key\n + .json-inspector__value {\n margin: 0;\n }\n\n & .json-inspector .json-inspector__key {\n color: ${color.syntax.property};\n }\n\n & .json-inspector .json-inspector__value_helper,\n & .json-inspector .json-inspector__value_null {\n color: ${color.syntax.constant};\n }\n\n & .json-inspector .json-inspector__not-found {\n padding-top: ${rem(space[2])};\n }\n\n & .json-inspector .json-inspector__value_string {\n color: ${color.syntax.string};\n word-break: break-word;\n }\n\n & .json-inspector .json-inspector__value_boolean {\n color: ${color.syntax.boolean};\n }\n\n & .json-inspector .json-inspector__value_number {\n color: ${color.syntax.number};\n }\n\n & .json-inspector .json-inspector__show-original {\n display: inline-block;\n padding: 0 6px;\n cursor: pointer;\n }\n\n & .json-inspector .json-inspector__show-original:hover {\n color: inherit;\n }\n\n & .json-inspector .json-inspector__show-original::before {\n content: '↔';\n }\n\n & .json-inspector .json-inspector__show-original:hover::after {\n content: ' expand';\n }\n `\n})\n","import {JsonInspector} from '@rexxars/react-json-inspector'\nimport {LinkIcon} from '@sanity/icons'\nimport {Code} from '@sanity/ui'\nimport LRU from 'quick-lru'\nimport {useDataset} from 'sanity'\nimport {IntentLink} from 'sanity/router'\n\nimport {ResultViewWrapper} from './ResultView.styled'\n\nconst lru = new LRU({maxSize: 50000})\n\nexport function ResultView(props: {data: unknown; datasetName: string}): React.JSX.Element {\n const {data, datasetName} = props\n const workspaceDataset = useDataset()\n\n if (isRecord(data) || Array.isArray(data)) {\n return (\n <ResultViewWrapper>\n <JsonInspector\n data={data}\n search={false}\n isExpanded={isExpanded}\n onClick={toggleExpanded}\n interactiveLabel={workspaceDataset === datasetName ? DocumentEditLabel : undefined}\n />\n </ResultViewWrapper>\n )\n }\n\n return <Code language=\"json\">{JSON.stringify(data)}</Code>\n}\n\nfunction DocumentEditLabel(props: {value: string; isKey: boolean; keypath: string}) {\n if (props.isKey || (!props.keypath.endsWith('_id') && !props.keypath.endsWith('_ref'))) {\n return null\n }\n\n return (\n <IntentLink intent=\"edit\" params={{id: props.value}}>\n <LinkIcon />\n </IntentLink>\n )\n}\n\nfunction isExpanded(keyPath: string, value: unknown): boolean {\n const depthLimit = 4\n const cached = lru.get(keyPath) as boolean | undefined\n\n if (typeof cached === 'boolean') {\n return cached\n }\n\n const segments = keyPath.split('.', depthLimit)\n if (segments.length === depthLimit) {\n return false\n }\n\n if (Array.isArray(value)) {\n return true\n }\n\n return isRecord(value) && !segments.some((key) => isArrayKeyOverLimit(key))\n}\n\nfunction toggleExpanded(event: {path: string}): void {\n const {path} = event\n const current = lru.get(path)\n\n if (current === undefined) {\n // something is wrong\n return\n }\n\n lru.set(path, !current)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nconst numeric = /^\\d+$/\nfunction isArrayKeyOverLimit(segment: string, limit = 10) {\n return numeric.test(segment) && parseInt(segment, 10) > limit\n}\n","import {DocumentSheetIcon} from '@sanity/icons'\nimport {Button, Tooltip} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\n\ninterface SaveButtonProps {\n blobUrl: string | undefined\n}\n\nfunction preventSave(evt: MouseEvent<HTMLButtonElement>) {\n return evt.preventDefault()\n}\n\nexport function SaveCsvButton({blobUrl}: SaveButtonProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n const isDisabled = !blobUrl\n\n const button = (\n <Button\n as=\"a\"\n disabled={isDisabled}\n download={isDisabled ? undefined : 'query-result.csv'}\n href={blobUrl}\n icon={DocumentSheetIcon}\n mode=\"ghost\"\n onClick={isDisabled ? preventSave : undefined}\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n text=\"CSV\" // String is a File extension\n tone=\"default\"\n />\n )\n\n return isDisabled ? (\n <Tooltip content={t('result.save-result-as-csv.not-csv-encodable')} placement=\"top\">\n {button}\n </Tooltip>\n ) : (\n button\n )\n}\n\nexport function SaveJsonButton({blobUrl}: SaveButtonProps) {\n return (\n <Button\n as=\"a\"\n download={'query-result.json'}\n href={blobUrl}\n icon={DocumentSheetIcon}\n mode=\"ghost\"\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n text=\"JSON\" // String is a File extension\n tone=\"default\"\n />\n )\n}\n","import {type MutationEvent} from '@sanity/client'\nimport {Box, Text} from '@sanity/ui'\nimport {Translate, useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {getCsvBlobUrl, getJsonBlobUrl} from '../util/getBlobUrl'\nimport {DelayedSpinner} from './DelayedSpinner'\nimport {QueryErrorDialog} from './QueryErrorDialog'\nimport {ResultView} from './ResultView'\nimport {SaveCsvButton, SaveJsonButton} from './SaveResultButtons'\nimport {\n DownloadsCard,\n InputBackgroundContainer,\n Result,\n ResultContainer,\n ResultFooter,\n ResultInnerContainer,\n ResultOuterContainer,\n SaveResultLabel,\n StyledLabel,\n TimingsCard,\n TimingsTextContainer,\n} from './VisionGui.styled'\n\ninterface VisionGuiResultProps {\n error?: Error | undefined\n queryInProgress: boolean\n queryResult?: unknown | undefined\n listenInProgress: boolean\n listenMutations: MutationEvent[]\n dataset: string\n queryTime: number | undefined\n e2eTime: number | undefined\n}\n\nexport function VisionGuiResult({\n error,\n queryInProgress,\n queryResult,\n listenInProgress,\n listenMutations,\n dataset,\n queryTime,\n e2eTime,\n}: VisionGuiResultProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n const hasResult = !error && !queryInProgress && typeof queryResult !== 'undefined'\n\n const jsonUrl = hasResult ? getJsonBlobUrl(queryResult) : ''\n const csvUrl = hasResult ? getCsvBlobUrl(queryResult) : ''\n\n return (\n <ResultOuterContainer direction=\"column\" data-testid=\"vision-result\">\n <ResultInnerContainer flex={1}>\n <ResultContainer\n flex={1}\n overflow=\"hidden\"\n tone={error ? 'critical' : 'default'}\n $isInvalid={Boolean(error)}\n >\n <Result overflow=\"auto\">\n <InputBackgroundContainer>\n <Box marginLeft={3}>\n <StyledLabel muted>{t('result.label')}</StyledLabel>\n </Box>\n </InputBackgroundContainer>\n <Box padding={3} paddingTop={5}>\n {(queryInProgress || (listenInProgress && listenMutations.length === 0)) && (\n <Box marginTop={3}>\n <DelayedSpinner />\n </Box>\n )}\n {error && <QueryErrorDialog error={error} />}\n {hasResult && <ResultView data={queryResult} datasetName={dataset} />}\n {listenInProgress && listenMutations.length > 0 && (\n <ResultView data={listenMutations} datasetName={dataset} />\n )}\n </Box>\n </Result>\n </ResultContainer>\n </ResultInnerContainer>\n {/* Execution time */}\n <ResultFooter justify=\"space-between\" direction={['column', 'column', 'row']}>\n <TimingsCard paddingX={4} paddingY={3} sizing=\"border\">\n <TimingsTextContainer align=\"center\">\n <Box>\n <Text muted>\n {t('result.execution-time-label')}:{' '}\n {typeof queryTime === 'number'\n ? `${queryTime}ms`\n : t('result.timing-not-applicable')}\n </Text>\n </Box>\n <Box marginLeft={4}>\n <Text muted>\n {t('result.end-to-end-time-label')}:{' '}\n {typeof e2eTime === 'number' ? `${e2eTime}ms` : t('result.timing-not-applicable')}\n </Text>\n </Box>\n </TimingsTextContainer>\n </TimingsCard>\n\n {hasResult && (\n <DownloadsCard paddingX={4} paddingY={3} sizing=\"border\">\n <SaveResultLabel muted>\n <Translate\n components={{\n SaveResultButtons: () => (\n <>\n <SaveJsonButton blobUrl={jsonUrl} />\n <SaveCsvButton blobUrl={csvUrl} />\n </>\n ),\n }}\n i18nKey=\"result.save-result-as-format\"\n t={t}\n />\n </SaveResultLabel>\n </DownloadsCard>\n )}\n </ResultFooter>\n </ResultOuterContainer>\n )\n}\n","/* eslint-disable max-statements */\nimport {SplitPane} from '@rexxars/react-split-pane'\nimport {\n type ClientPerspective,\n type ListenEvent,\n type MutationEvent,\n type StackablePerspective,\n} from '@sanity/client'\nimport {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Box, Button, Flex, useToast} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {type ChangeEvent, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {useClient, usePerspective, useTranslation} from 'sanity'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSIONS, DEFAULT_API_VERSION} from '../apiVersions'\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n getActivePerspective,\n isSupportedPerspective,\n isVirtualPerspective,\n type SupportedPerspective,\n} from '../perspectives'\nimport {type VisionProps} from '../types'\nimport {encodeQueryString} from '../util/encodeQueryString'\nimport {getLocalStorage} from '../util/localStorage'\nimport {parseApiQueryString, type ParsedApiQueryString} from '../util/parseApiQueryString'\nimport {prefixApiVersion} from '../util/prefixApiVersion'\nimport {validateApiVersion} from '../util/validateApiVersion'\nimport {ParamsEditor, parseParams} from './ParamsEditor'\nimport {QueryRecall} from './QueryRecall'\nimport {usePaneSize} from './usePaneSize'\nimport {\n InputBackgroundContainerLeft,\n InputContainer,\n Root,\n SplitpaneContainer,\n StyledLabel,\n} from './VisionGui.styled'\nimport {VisionGuiControls} from './VisionGuiControls'\nimport {VisionGuiHeader} from './VisionGuiHeader'\nimport {VisionGuiResult} from './VisionGuiResult'\n\nfunction nodeContains(node: Node, other: EventTarget | Node | null): boolean {\n if (!node || !other) {\n return false\n }\n\n // eslint-disable-next-line no-bitwise\n return node === other || !!(node.compareDocumentPosition(other as Node) & 16)\n}\n\nconst sanityUrl =\n /\\.(?:api|apicdn)\\.sanity\\.(?:io|work)\\/(vX|v1|v\\d{4}-\\d\\d-\\d\\d)\\/.*?(?:query|listen)\\/(.*?)\\?(.*)/\n\nconst isRunHotkey = (event: KeyboardEvent) =>\n isHotkey('ctrl+enter', event) || isHotkey('mod+enter', event)\n\ninterface Subscription {\n unsubscribe: () => void\n}\nexport interface Params {\n raw: string\n parsed: Record<string, unknown> | undefined\n valid: boolean\n error: string | undefined\n}\n\ninterface QueryExecutionOptions {\n apiVersion?: string\n dataset?: string\n perspective?: SupportedPerspective\n query?: string\n params?: Record<string, unknown>\n}\n\ninterface VisionGuiProps extends VisionProps {\n datasets: string[]\n projectId: string | undefined\n defaultDataset: string\n}\n\nexport interface ParsedUrlState {\n query: string\n params: Record<string, unknown>\n rawParams: string\n dataset: string\n apiVersion: string\n customApiVersion: string | false | undefined\n perspective: SupportedPerspective\n url: string\n}\n\nexport function VisionGui(props: VisionGuiProps) {\n const {datasets, config, projectId, defaultDataset} = props\n const toast = useToast()\n const {t} = useTranslation(visionLocaleNamespace)\n const {perspectiveStack} = usePerspective()\n\n const defaultApiVersion = prefixApiVersion(`${config.defaultApiVersion}`)\n const editorQueryRef = useRef<VisionCodeMirrorHandle>(null)\n const editorParamsRef = useRef<VisionCodeMirrorHandle>(null)\n const visionRootRef = useRef<HTMLDivElement | null>(null)\n const customApiVersionElementRef = useRef<HTMLInputElement | null>(null)\n const querySubscriptionRef = useRef<Subscription | undefined>(undefined)\n const listenSubscriptionRef = useRef<Subscription | undefined>(undefined)\n\n const [localStorage] = useState(() => getLocalStorage(projectId || 'default'))\n\n const {storedDataset, storedApiVersion, storedQuery, storedParams, storedPerspective} =\n useMemo(() => {\n return {\n storedDataset: localStorage.get('dataset', defaultDataset),\n storedApiVersion: localStorage.get('apiVersion', defaultApiVersion),\n storedQuery: localStorage.get('query', ''),\n storedParams: localStorage.get('params', '{\\n \\n}'),\n storedPerspective: localStorage.get<SupportedPerspective | undefined>(\n 'perspective',\n undefined,\n ),\n }\n }, [defaultDataset, defaultApiVersion, localStorage])\n\n const [dataset, setDataset] = useState<string>(() => {\n if (datasets.includes(storedDataset)) {\n return storedDataset\n }\n if (datasets.includes(defaultDataset)) {\n return defaultDataset\n }\n return datasets[0]\n })\n const [apiVersion, setApiVersion] = useState<string>(() =>\n API_VERSIONS.includes(storedApiVersion) ? storedApiVersion : DEFAULT_API_VERSION,\n )\n const [customApiVersion, setCustomApiVersion] = useState<string | false>(() =>\n API_VERSIONS.includes(storedApiVersion) ? false : storedApiVersion,\n )\n const [perspective, setPerspectiveState] = useState<SupportedPerspective>(\n storedPerspective || 'raw',\n )\n const isValidApiVersion = customApiVersion ? validateApiVersion(customApiVersion) : true\n\n const [url, setUrl] = useState<string | undefined>(undefined)\n const [query, setQuery] = useState<string>(() =>\n typeof storedQuery === 'string' ? storedQuery : '',\n )\n const [params, setParams] = useState<Params>(() => parseParams(storedParams, t))\n const [queryResult, setQueryResult] = useState<unknown | undefined>(undefined)\n const [listenMutations, setListenMutations] = useState<MutationEvent[]>([])\n const [error, setError] = useState<Error | undefined>(undefined)\n const [queryTime, setQueryTime] = useState<number | undefined>(undefined)\n const [e2eTime, setE2eTime] = useState<number | undefined>(undefined)\n const [queryInProgress, setQueryInProgress] = useState<boolean>(false)\n const [listenInProgress, setListenInProgress] = useState<boolean>(false)\n const [isQueryRecallCollapsed, setIsQueryRecallCollapsed] = useState(false)\n\n const {paneSizeOptions, isNarrowBreakpoint} = usePaneSize({visionRootRef})\n\n // Client with memoized initial value\n const _client = useClient({\n apiVersion: isValidApiVersion && customApiVersion ? customApiVersion : apiVersion,\n })\n const client = useMemo(() => {\n return _client.withConfig({\n apiVersion: isValidApiVersion && customApiVersion ? customApiVersion : apiVersion,\n perspective: getActivePerspective({visionPerspective: perspective, perspectiveStack}),\n dataset,\n allowReconfigure: true,\n })\n }, [\n perspectiveStack,\n perspective,\n customApiVersion,\n apiVersion,\n dataset,\n _client,\n isValidApiVersion,\n ])\n\n const cancelQuerySubscription = useCallback(() => {\n if (!querySubscriptionRef.current) {\n return\n }\n querySubscriptionRef.current.unsubscribe()\n querySubscriptionRef.current = undefined\n }, [])\n\n const cancelListenerSubscription = useCallback(() => {\n if (!listenSubscriptionRef.current) {\n return\n }\n listenSubscriptionRef.current.unsubscribe()\n listenSubscriptionRef.current = undefined\n }, [])\n\n const handleQueryExecution = useCallback(\n (options?: QueryExecutionOptions) => {\n if (queryInProgress) {\n cancelQuerySubscription()\n cancelListenerSubscription()\n setQueryInProgress(false)\n return\n }\n\n const context: Required<Omit<QueryExecutionOptions, 'params' | 'perspective'>> & {\n params: Params\n perspective: ClientPerspective | undefined\n } = {\n query: options?.query || query,\n dataset: options?.dataset || dataset,\n params: parseParams(JSON.stringify(options?.params || params.parsed, null, 2), t),\n perspective: getActivePerspective({\n visionPerspective: options?.perspective || perspective,\n perspectiveStack,\n }),\n apiVersion:\n options?.apiVersion ||\n (customApiVersion && isValidApiVersion ? customApiVersion : apiVersion),\n }\n\n localStorage.set('query', context.query)\n localStorage.set('params', context.params.raw)\n\n cancelListenerSubscription()\n\n setQueryInProgress(!context.params.error && Boolean(context.query))\n setListenInProgress(false)\n setListenMutations([])\n setError(context.params.error ? new Error(context.params.error) : undefined)\n setQueryResult(undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (context.params.error) {\n return\n }\n\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective: context.perspective ?? [],\n }\n\n const ctxClient = client.withConfig({\n apiVersion: context.apiVersion,\n dataset: context.dataset,\n perspective: context.perspective,\n })\n\n const newUrl = ctxClient.getUrl(\n ctxClient.getDataUrl(\n 'query',\n encodeQueryString(context.query, context.params.parsed, urlQueryOpts),\n ),\n )\n setUrl(newUrl)\n\n const queryStart = Date.now()\n\n querySubscriptionRef.current = ctxClient.observable\n .fetch(context.query, context.params.parsed, {filterResponse: false, tag: 'vision'})\n .subscribe({\n next: (res) => {\n setQueryTime(res.ms)\n setE2eTime(Date.now() - queryStart)\n setQueryResult(res.result)\n setQueryInProgress(false)\n setError(undefined)\n },\n error: (err) => {\n setError(err)\n setQueryInProgress(false)\n },\n })\n },\n [\n queryInProgress,\n query,\n dataset,\n params.parsed,\n t,\n perspective,\n perspectiveStack,\n customApiVersion,\n isValidApiVersion,\n apiVersion,\n localStorage,\n cancelListenerSubscription,\n client,\n cancelQuerySubscription,\n ],\n )\n\n const setPerspective = useCallback(\n (newPerspective: string | undefined): void => {\n if (newPerspective !== undefined && !isSupportedPerspective(newPerspective)) {\n return\n }\n\n setPerspectiveState(newPerspective as SupportedPerspective)\n localStorage.set('perspective', newPerspective)\n\n handleQueryExecution({perspective: newPerspective})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeDataset = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newDataset = evt.target.value\n localStorage.set('dataset', newDataset)\n setDataset(newDataset)\n handleQueryExecution({dataset: newDataset})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeApiVersion = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newApiVersion = evt.target.value\n if (newApiVersion?.toLowerCase() === 'other') {\n setCustomApiVersion('v')\n customApiVersionElementRef.current?.focus()\n return\n }\n\n setApiVersion(newApiVersion)\n setCustomApiVersion(false)\n localStorage.set('apiVersion', newApiVersion)\n handleQueryExecution({apiVersion: newApiVersion})\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle custom API version change\n const handleCustomApiVersionChange = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const newCustomApiVersion = evt.target.value || ''\n setCustomApiVersion(newCustomApiVersion || 'v')\n\n if (validateApiVersion(newCustomApiVersion)) {\n setApiVersion(newCustomApiVersion)\n localStorage.set('apiVersion', newCustomApiVersion)\n handleQueryExecution({apiVersion: newCustomApiVersion})\n }\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle perspective change\n const handleChangePerspective = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newPerspective = evt.target.value\n setPerspective(newPerspective === 'default' ? undefined : newPerspective)\n },\n [setPerspective],\n )\n\n const handleListenerEvent = useCallback((evt: ListenEvent<any>) => {\n if (evt.type !== 'mutation') {\n return\n }\n\n setListenMutations((prevMutations) =>\n prevMutations.length === 50 ? [evt, ...prevMutations.slice(0, 49)] : [evt, ...prevMutations],\n )\n }, [])\n const handleListenExecution = useCallback(() => {\n if (listenInProgress) {\n cancelListenerSubscription()\n setListenInProgress(false)\n return\n }\n\n const newUrl = client.getDataUrl('listen', encodeQueryString(query, params.parsed, {}))\n\n const shouldExecute = !params.error && query.trim().length > 0\n\n localStorage.set('query', query)\n localStorage.set('params', params.raw)\n\n cancelQuerySubscription()\n\n setUrl(newUrl)\n setListenMutations([])\n setQueryInProgress(false)\n setQueryResult(undefined)\n setListenInProgress(shouldExecute)\n setError(params.error ? new Error(params.error) : undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (!shouldExecute) {\n return\n }\n\n listenSubscriptionRef.current = client\n .listen(query, params.parsed, {events: ['mutation', 'welcome'], includeAllVersions: true})\n .subscribe({\n next: handleListenerEvent,\n error: (err) => {\n setError(err)\n setListenInProgress(false)\n },\n })\n }, [\n listenInProgress,\n params,\n query,\n localStorage,\n cancelQuerySubscription,\n handleListenerEvent,\n cancelListenerSubscription,\n client,\n ])\n\n const handleParamsChange = useCallback(\n (value: Params) => {\n setParams(value)\n localStorage.set('params', value.raw)\n },\n [localStorage],\n )\n\n // Get object of state values from provided URL\n const getStateFromUrl = useCallback(\n (data: string): ParsedUrlState | null => {\n const match = data.match(sanityUrl)\n if (!match) {\n return null\n }\n\n const [, usedApiVersion, usedDataset, urlQuery] = match\n\n const qs = new URLSearchParams(urlQuery)\n const parts: ParsedApiQueryString = parseApiQueryString(qs)\n if (!parts) return null\n let newApiVersion: string | undefined\n let newCustomApiVersion: string | false | undefined\n\n if (validateApiVersion(usedApiVersion)) {\n if (API_VERSIONS.includes(usedApiVersion)) {\n newApiVersion = usedApiVersion\n newCustomApiVersion = false\n } else {\n newCustomApiVersion = usedApiVersion\n }\n }\n\n const newPerspective =\n isSupportedPerspective(parts.options.perspective) &&\n !isVirtualPerspective(parts.options.perspective)\n ? parts.options.perspective\n : undefined\n\n if (\n newPerspective &&\n (!isSupportedPerspective(parts.options.perspective) ||\n isVirtualPerspective(parts.options.perspective))\n ) {\n toast.push({\n closable: true,\n id: 'vision-paste-unsupported-perspective',\n status: 'warning',\n title: 'Perspective in pasted url is currently not supported. Falling back to \"raw\"',\n })\n }\n\n return {\n query: parts.query,\n params: parts.params,\n rawParams: JSON.stringify(parts.params, null, 2),\n dataset: datasets.includes(usedDataset) ? usedDataset : dataset,\n apiVersion: newApiVersion || apiVersion,\n customApiVersion: newCustomApiVersion,\n perspective: newPerspective || perspective,\n url: data,\n }\n },\n [datasets, dataset, apiVersion, perspective, toast],\n )\n\n // Use state object from parsed URL to update state\n const setStateFromParsedUrl = useCallback(\n (parsedUrlObj: ParsedUrlState) => {\n // Update state with pasted values\n setDataset(parsedUrlObj.dataset)\n setQuery(parsedUrlObj.query)\n setParams({\n parsed: parsedUrlObj.params,\n raw: parsedUrlObj.rawParams,\n valid: true,\n error: undefined,\n })\n setApiVersion(parsedUrlObj.apiVersion)\n if (parsedUrlObj.customApiVersion) {\n setCustomApiVersion(parsedUrlObj.customApiVersion)\n }\n setPerspectiveState(parsedUrlObj.perspective)\n setUrl(parsedUrlObj.url)\n // Update the codemirror editor content\n editorQueryRef.current?.resetEditorContent(parsedUrlObj.query)\n editorParamsRef.current?.resetEditorContent(parsedUrlObj.rawParams)\n\n // Update localStorage and client config\n localStorage.merge({\n query: parsedUrlObj.query,\n params: parsedUrlObj.rawParams,\n dataset: parsedUrlObj.dataset,\n apiVersion: parsedUrlObj.customApiVersion || parsedUrlObj.apiVersion,\n perspective: parsedUrlObj.perspective,\n })\n\n // Execute query with new values\n handleQueryExecution(parsedUrlObj)\n },\n [localStorage, handleQueryExecution],\n )\n\n const handlePaste = useCallback(\n (evt: ClipboardEvent) => {\n if (!evt.clipboardData) {\n return\n }\n\n const data = evt.clipboardData.getData('text/plain')\n evt.preventDefault()\n const urlState = getStateFromUrl(data)\n if (urlState) {\n setStateFromParsedUrl(urlState)\n toast.push({\n closable: true,\n id: 'vision-paste',\n status: 'info',\n title: 'Parsed URL to query',\n })\n }\n },\n [getStateFromUrl, setStateFromParsedUrl, toast],\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const isWithinRoot =\n visionRootRef.current && nodeContains(visionRootRef.current, event.target)\n if (isRunHotkey(event) && isWithinRoot && params.valid) {\n handleQueryExecution()\n event.preventDefault()\n event.stopPropagation()\n }\n },\n [params.valid, handleQueryExecution],\n )\n\n useEffect(() => {\n window.document.addEventListener('paste', handlePaste)\n window.document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n window.document.removeEventListener('paste', handlePaste)\n window.document.removeEventListener('keydown', handleKeyDown)\n }\n }, [handleKeyDown, handlePaste])\n\n useEffect(() => {\n return () => {\n cancelQuerySubscription()\n cancelListenerSubscription()\n }\n }, [cancelQuerySubscription, cancelListenerSubscription])\n\n const handleStudioPerspectiveChange = useEffectEvent((stack: StackablePerspective[]) => {\n if (stack.length > 0) {\n setPerspective('pinnedRelease')\n }\n })\n // Handle pinned perspective changes\n useEffect(() => {\n handleStudioPerspectiveChange(perspectiveStack)\n }, [perspectiveStack])\n\n const generateUrl = useCallback(\n (queryString: string, queryParams: Record<string, unknown>) => {\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective: getActivePerspective({visionPerspective: perspective, perspectiveStack}) ?? [],\n }\n return client.getUrl(\n client.getDataUrl('query', encodeQueryString(queryString, queryParams, urlQueryOpts)),\n )\n },\n [client, perspective, perspectiveStack],\n )\n\n return (\n <Root\n direction=\"column\"\n height=\"fill\"\n ref={visionRootRef}\n sizing=\"border\"\n overflow=\"hidden\"\n data-testid=\"vision-root\"\n >\n <VisionGuiHeader\n apiVersion={apiVersion}\n customApiVersion={customApiVersion}\n dataset={dataset}\n datasets={datasets}\n onChangeDataset={handleChangeDataset}\n onChangeApiVersion={handleChangeApiVersion}\n customApiVersionElementRef={customApiVersionElementRef}\n onCustomApiVersionChange={handleCustomApiVersionChange}\n isValidApiVersion={isValidApiVersion}\n onChangePerspective={handleChangePerspective}\n url={url}\n perspective={perspective}\n />\n\n <SplitpaneContainer flex=\"auto\">\n <SplitPane\n minSize={800}\n defaultSize={window.innerWidth - 275}\n size={isQueryRecallCollapsed ? window.innerWidth : window.innerWidth - 275}\n maxSize={-225}\n primary=\"first\"\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n split={isNarrowBreakpoint ? 'vertical' : 'horizontal'}\n minSize={300}\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n split=\"horizontal\"\n defaultSize={\n isNarrowBreakpoint ? paneSizeOptions.defaultSize : paneSizeOptions.minSize\n }\n size={paneSizeOptions.size}\n allowResize={paneSizeOptions.allowResize}\n minSize={isNarrowBreakpoint ? paneSizeOptions.minSize : 100}\n maxSize={paneSizeOptions.maxSize}\n primary=\"first\"\n >\n <InputContainer display=\"flex\" data-testid=\"vision-query-editor\">\n <Box flex={1}>\n <InputBackgroundContainerLeft>\n <Flex>\n <StyledLabel muted>{t('query.label')}</StyledLabel>\n </Flex>\n </InputBackgroundContainerLeft>\n <VisionCodeMirror\n initialValue={query}\n onChange={setQuery}\n ref={editorQueryRef}\n />\n </Box>\n </InputContainer>\n <InputContainer display=\"flex\">\n <ParamsEditor\n value={params.raw}\n onChange={handleParamsChange}\n paramsError={params.error}\n hasValidParams={params.valid}\n editorRef={editorParamsRef}\n />\n\n <VisionGuiControls\n hasValidParams={params.valid}\n queryInProgress={queryInProgress}\n listenInProgress={listenInProgress}\n onQueryExecution={handleQueryExecution}\n onListenExecution={handleListenExecution}\n />\n </InputContainer>\n </SplitPane>\n </Box>\n <VisionGuiResult\n error={error}\n queryInProgress={queryInProgress}\n queryResult={queryResult}\n listenInProgress={listenInProgress}\n listenMutations={listenMutations}\n dataset={dataset}\n queryTime={queryTime}\n e2eTime={e2eTime}\n />\n </SplitPane>\n </Box>\n <Box style={{position: 'relative', height: '100%'}}>\n <Button\n mode=\"ghost\"\n padding={2}\n style={{\n position: 'absolute',\n left: -32,\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 100,\n pointerEvents: 'auto',\n }}\n onClick={() => setIsQueryRecallCollapsed(!isQueryRecallCollapsed)}\n >\n <div style={{display: 'flex', alignItems: 'center', height: '100%'}}>\n {isQueryRecallCollapsed ? <ChevronLeftIcon /> : <ChevronRightIcon />}\n </div>\n </Button>\n <QueryRecall\n url={url}\n getStateFromUrl={getStateFromUrl}\n setStateFromParsedUrl={setStateFromParsedUrl}\n currentQuery={query}\n currentParams={params.parsed || {}}\n generateUrl={generateUrl}\n />\n </Box>\n </SplitPane>\n </SplitpaneContainer>\n </Root>\n )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable} from 'rxjs'\nimport {catchError, map, of} from 'rxjs'\n\nimport {type VisionConfig} from '../types'\n\nexport function useDatasets({\n client,\n datasets: configDatasets,\n}: {\n client: SanityClient\n datasets: VisionConfig['datasets']\n}): string[] | Error | null {\n const datasets$: Observable<string[] | Error> = useMemo(() => {\n if (Array.isArray(configDatasets)) {\n return of(configDatasets)\n }\n return client.observable.datasets.list().pipe(\n map((result) => {\n if (typeof configDatasets == 'function') {\n return configDatasets(result).map((d) => d.name)\n }\n return result.map((ds) => ds.name)\n }),\n catchError((err) => of(err)),\n )\n }, [client, configDatasets])\n const datasets = useObservable(datasets$, null)\n\n return datasets\n}\n","import {Flex} from '@sanity/ui'\nimport {useClient} from 'sanity'\n\nimport {DelayedSpinner} from '../components/DelayedSpinner'\nimport {VisionGui} from '../components/VisionGui'\nimport {useDatasets} from '../hooks/useDatasets'\nimport {type VisionProps} from '../types'\n\nexport function VisionContainer(props: VisionProps) {\n const datasetsClient = useClient({apiVersion: 'v2025-06-27'})\n const loadedDatasets = useDatasets({client: datasetsClient, datasets: props.config.datasets})\n\n if (!loadedDatasets) {\n return (\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n <DelayedSpinner />\n </Flex>\n )\n }\n\n const datasets =\n loadedDatasets instanceof Error\n ? // On error, use the clients configured dataset\n [props.client.config().dataset || 'production']\n : // Otherwise use the loaded list, obviously\n loadedDatasets\n\n const projectId = props.client.config().projectId\n const defaultDataset = props.config.defaultDataset || props.client.config().dataset || datasets[0]\n\n return (\n <VisionGui\n key={projectId}\n {...props}\n datasets={datasets}\n projectId={projectId}\n defaultDataset={defaultDataset}\n />\n )\n}\n","/* eslint-disable @sanity/i18n/no-attribute-string-literals */\n/* eslint-disable i18next/no-literal-string */\nimport {Button, Card, Code, Container, Heading, Stack} from '@sanity/ui'\nimport {Component, type PropsWithChildren} from 'react'\n\nimport {clearLocalStorage} from '../util/localStorage'\n\n/**\n * @internal\n */\nexport type VisionErrorBoundaryProps = PropsWithChildren\n\n/**\n * @internal\n */\ninterface VisionErrorBoundaryState {\n error: string | null\n numRetries: number\n}\n\n/**\n * @internal\n */\nexport class VisionErrorBoundary extends Component<\n VisionErrorBoundaryProps,\n VisionErrorBoundaryState\n> {\n constructor(props: VisionErrorBoundaryProps) {\n super(props)\n this.state = {error: null, numRetries: 0}\n }\n\n static getDerivedStateFromError(error: unknown) {\n return {error: error instanceof Error ? error.message : `${error}`}\n }\n\n handleRetryRender = () =>\n this.setState((prev) => ({error: null, numRetries: prev.numRetries + 1}))\n\n handleRetryWithCacheClear = () => {\n clearLocalStorage()\n this.handleRetryRender()\n }\n\n render() {\n if (!this.state.error) {\n return this.props.children\n }\n\n const message = this.state.error\n const withCacheClear = this.state.numRetries > 0\n\n return (\n <Card\n height=\"fill\"\n overflow=\"auto\"\n paddingY={[4, 5, 6, 7]}\n paddingX={4}\n sizing=\"border\"\n tone=\"critical\"\n >\n <Container width={3}>\n <Stack space={4}>\n <div>\n <Button\n onClick={withCacheClear ? this.handleRetryWithCacheClear : this.handleRetryRender}\n text={withCacheClear ? 'Clear cache and retry' : 'Retry'}\n tone=\"default\"\n />\n </div>\n\n <Heading>An error occurred</Heading>\n\n <Card border radius={2} overflow=\"auto\" padding={4} tone=\"inherit\">\n <Stack space={4}>\n {message && (\n <Code size={1}>\n <strong>Error: {message}</strong>\n </Code>\n )}\n </Stack>\n </Card>\n </Stack>\n </Container>\n </Card>\n )\n }\n}\n","import {type Tool, useClient} from 'sanity'\n\nimport {DEFAULT_API_VERSION} from './apiVersions'\nimport {VisionContainer} from './containers/VisionContainer'\nimport {VisionErrorBoundary} from './containers/VisionErrorBoundary'\nimport {type VisionConfig} from './types'\n\ninterface SanityVisionProps {\n tool: Tool<VisionConfig>\n}\n\nfunction SanityVision(props: SanityVisionProps) {\n const client = useClient({apiVersion: '1'})\n const config: VisionConfig = {\n defaultApiVersion: DEFAULT_API_VERSION,\n ...props.tool.options,\n }\n\n return (\n <VisionErrorBoundary>\n <VisionContainer client={client} config={config} />\n </VisionErrorBoundary>\n )\n}\n\nexport default SanityVision\n"],"names":["API_VERSIONS","Date","toISOString","split","DEFAULT_API_VERSION","slice","DelayedSpinner","props","$","_c","show","setShow","useState","t0","t1","delay","timer","setTimeout","clearTimeout","useEffect","t2","codemirrorExtensions","javascriptLanguage","lineNumbers","highlightActiveLine","highlightActiveLineGutter","highlightSelectionMatches","highlightSpecialChars","indentOnInput","bracketMatching","closeBrackets","history","drawSelection","syntaxHighlighting","defaultHighlightStyle","fallback","keymap","of","key","run","defaultKeymap","historyKeymap","flat","filter","Boolean","useCodemirrorTheme","theme","createTheme","cmTheme","t3","createHighlight","cmHighlight","t4","color","fonts","sanity","card","enabled","cursor","hues","blue","dark","hex","selection","gray","EditorView","fg","backgroundColor","bg","caretColor","fontFamily","code","family","fontSize","rem","sizes","lineHeight","borderLeftColor","borderBottom","border","borderTop","c","base","s","syntax","HighlightStyle","define","tag","t","keyword","propertyName","name","deleted","character","macroName","property","function","variableName","labelName","constant","standard","variable","definition","separator","typeName","className","number","changed","annotation","modifier","self","namespace","operator","operatorKeyword","url","escape","regexp","link","special","string","meta","comment","strong","fontWeight","emphasis","fontStyle","strikethrough","textDecoration","heading","atom","bool","boolean","processingInstruction","inserted","invalid","EditorRoot","styled","div","space","VisionCodeMirror","forwardRef","ref","initialValue","sanityTheme","useTheme","codeMirrorRef","useRef","Symbol","for","newContent","editorView","current","view","currentDoc","state","doc","toString","dispatch","changes","from","to","length","insert","EditorSelection","resetEditorContent","useImperativeHandle","onChange","displayName","SUPPORTED_PERSPECTIVES","VIRTUAL_PERSPECTIVES","isSupportedPerspective","p","includes","isVirtualPerspective","maybeVirtualPerspective","hasPinnedPerspective","selectedPerspectiveName","getActivePerspective","visionPerspective","perspectiveStack","encodeQueryString","query","params","options","searchParams","URLSearchParams","set","value","Object","entries","JSON","stringify","isPlainObject","obj","prototype","call","hasLocalStorage","supportsLocalStorage","keyPrefix","clearLocalStorage","i","localStorage","startsWith","removeItem","getLocalStorage","storageKey","loadedState","get","merge","defaultVal","ensureState","setItem","loadState","stored","parse","getItem","mod","parseApiQueryString","qs","prefixApiVersion","version","validateApiVersion","apiVersion","parseableApiVersion","replace","trim","toUpperCase","test","isNaN","tryParseParams","val","parsed","JSON5","Array","isArray","err","message","Root","Flex","Header","Card","StyledLabel","Label","SplitpaneContainer","Box","QueryCopyLink","a","InputBackgroundContainer","InputBackgroundContainerLeft","InputContainer","ResultOuterContainer","ResultInnerContainer","ResultContainer","$isInvalid","css","Result","ResultFooter","TimingsCard","TimingsTextContainer","text","ascenderHeight","descenderHeight","DownloadsCard","SaveResultLabel","Text","ControlsContainer","defaultValue","ParamsEditor","paramsError","hasValidParams","editorRef","useTranslation","visionLocaleNamespace","parseParams","raw","error","valid","isValid","setValid","init","setInit","newValue","event","handleChangeRaw","t5","debounce","handleChange","t6","t7","t8","t9","t10","t11","t12","t13","parsedParams","Error","validationError","undefined","STORED_QUERIES_NAMESPACE","queries","keyValueStoreKey","useSavedQueries","keyValueStore","useKeyValueStore","setValue","saving","setSaving","deleting","setDeleting","saveQueryError","setSaveQueryError","deleteQueryError","setDeleteQueryError","setError","useMemo","getKey","sub","pipe","startWith","map","data","subscribe","next","unsubscribe","saveQuery","useCallback","newQueries","_key","uuid","setKey","updateQuery","updatedQueries","q","deleteQuery","prev","filteredQueries","k","FixedHeader","Stack","ScrollContainer","QueryRecall","getStateFromUrl","setStateFromParsedUrl","currentQuery","currentParams","generateUrl","toast","useToast","month","day","year","hour","minute","hour12","formatDate","useDateTimeFormat","editingKey","setEditingKey","editingTitle","setEditingTitle","optimisticTitles","setOptimisticTitles","searchQuery","setSearchQuery","selectedUrl","setSelectedUrl","newUrl","some","savedQueryObj","isEqual","duplicateQuery","find","q_0","savedQueryObj_0","push","closable","status","title","description","format","savedAt","handleSave","newTitle","prev_1","next_0","prev_0","handleTitleSave","query_0","newUrl_0","q_1","savedQueryObj_1","duplicateQuery_0","q_2","savedQueryObj_2","handleUpdate","T0","T1","q_3","toLowerCase","textTransform","AddIcon","t14","t15","t16","currentTarget","t17","SearchIcon","q_4","queryObj","isSelected","areQueriesEqual","isEdited","parsedUrl","position","event_0","event_1","maxWidth","height","padding","width","borderRadius","TrashIcon","event_2","stopPropagation","portal","placement","tone","right","bottom","e","narrowBreakpoint","window","innerWidth","calculatePaneSizeOptions","rootHeight","document","body","getBoundingClientRect","defaultSize","size","allowResize","minSize","Math","min","max","maxSize","usePaneSize","visionRootRef","isNarrowBreakpoint","setIsNarrowBreakpoint","_temp","paneSizeOptions","setPaneSizeOptions","_temp2","handleResize","entry","contentRect","resizeObserver","ResizeObserver","observe","disconnect","VisionGuiControls","listenInProgress","queryInProgress","onQueryExecution","onListenExecution","StopIcon","PlayIcon","PerspectivePopoverContent","PerspectivePopoverLink","Dot","$tone","PerspectivePopover","open","setOpen","buttonRef","popoverRef","handleClick","useClickOutsideEvent","HelpCircleIcon","o","PinnedReleasePerspectiveOption","pinnedPerspective","selectedPerspective","metadata","label","join","VisionGuiHeader","onChangeDataset","dataset","customApiVersion","onChangeApiVersion","datasets","customApiVersionElementRef","onCustomApiVersionChange","isValidApiVersion","onChangePerspective","perspective","usePerspective","operationUrlElement","el","select","execCommand","console","handleCopyUrl","_temp3","t18","t19","t20","t21","t22","perspectiveName","t23","t24","t25","CopyIcon","t26","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","Code","muted","critical","QueryErrorDetails","details","mapToLegacyDetails","line","dashLine","column","columnEnd","lineNumber","start","end","lineStart","lastIndexOf","match","indexOf","repeat","hats","QueryErrorDialog","ResultViewWrapper","lru","LRU","ResultView","datasetName","workspaceDataset","useDataset","isRecord","DocumentEditLabel","isExpanded","toggleExpanded","isKey","keypath","endsWith","id","keyPath","cached","segments","depthLimit","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","preventSave","evt","preventDefault","SaveCsvButton","blobUrl","isDisabled","DocumentSheetIcon","button","SaveJsonButton","VisionGuiResult","queryResult","listenMutations","queryTime","e2eTime","hasResult","jsonUrl","csvUrl","SaveResultButtons","Fragment","nodeContains","node","other","compareDocumentPosition","sanityUrl","isRunHotkey","isHotkey","VisionGui","config","projectId","defaultDataset","defaultApiVersion","editorQueryRef","editorParamsRef","querySubscriptionRef","listenSubscriptionRef","storedDataset","storedApiVersion","storedQuery","storedParams","storedPerspective","setDataset","setApiVersion","setCustomApiVersion","setPerspectiveState","setUrl","setQuery","setParams","setQueryResult","setListenMutations","setQueryTime","setE2eTime","setQueryInProgress","setListenInProgress","isQueryRecallCollapsed","setIsQueryRecallCollapsed","_client","useClient","client","withConfig","allowReconfigure","cancelQuerySubscription","cancelListenerSubscription","handleQueryExecution","context","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","observable","fetch","filterResponse","res","ms","result","setPerspective","newPerspective","handleChangeDataset","newDataset","target","handleChangeApiVersion","newApiVersion","focus","handleCustomApiVersionChange","newCustomApiVersion","handleChangePerspective","handleListenerEvent","prevMutations","handleListenExecution","shouldExecute","listen","events","includeAllVersions","handleParamsChange","usedApiVersion","usedDataset","urlQuery","parts","rawParams","parsedUrlObj","handlePaste","clipboardData","getData","urlState","handleKeyDown","isWithinRoot","addEventListener","removeEventListener","handleStudioPerspectiveChange","useEffectEvent","stack","queryString","queryParams","left","top","transform","zIndex","pointerEvents","display","alignItems","useDatasets","configDatasets","bb0","list","catchError","useObservable","d","VisionContainer","datasetsClient","loadedDatasets","VisionErrorBoundary","Component","constructor","numRetries","getDerivedStateFromError","handleRetryRender","setState","handleRetryWithCacheClear","render","children","withCacheClear","SanityVision","tool"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/i18n/index.ts","../../src/visionTool.ts"],"sourcesContent":["import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the vision tool\n *\n * @internal\n */\nexport const visionLocaleNamespace = 'vision' as const\n\n/**\n * The default locale bundle for the vision tool, which is US English.\n *\n * @internal\n */\nexport const visionUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: visionLocaleNamespace,\n resources: () => import('./resources'),\n})\n","import {EyeOpenIcon} from '@sanity/icons'\nimport {lazy} from 'react'\nimport {definePlugin} from 'sanity'\nimport {route} from 'sanity/router'\n\nimport {visionUsEnglishLocaleBundle} from './i18n'\nimport {type VisionToolConfig} from './types'\n\nexport const visionTool = definePlugin<VisionToolConfig | void>((options) => {\n const {name, title, icon, ...config} = options || {}\n return {\n name: '@sanity/vision',\n tools: [\n {\n name: name || 'vision',\n title: title || 'Vision',\n icon: icon || EyeOpenIcon,\n component: lazy(() => import('./SanityVision')),\n options: config,\n router: route.create('/*'),\n __internalApplicationType: 'sanity/vision',\n },\n ],\n i18n: {\n bundles: [visionUsEnglishLocaleBundle],\n },\n }\n})\n"],"names":["visionLocaleNamespace","visionUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","visionTool","definePlugin","options","name","title","icon","config","tools","EyeOpenIcon","component","lazy","router","route","create","__internalApplicationType","i18n","bundles"],"mappings":";;;;AAOaA,MAAAA,wBAAwB,UAOxBC,8BAA8BC,2BAA2B;AAAA,EACpEC,QAAQ;AAAA,EACRC,WAAWJ;AAAAA,EACXK,WAAWA,MAAM,OAAO,iBAAa;AACvC,CAAC,GCVYC,aAAaC,aAAuCC,CAAY,YAAA;AACrE,QAAA;AAAA,IAACC;AAAAA,IAAMC;AAAAA,IAAOC;AAAAA,IAAM,GAAGC;AAAAA,EAAM,IAAIJ,WAAW,CAAC;AAC5C,SAAA;AAAA,IACLC,MAAM;AAAA,IACNI,OAAO,CACL;AAAA,MACEJ,MAAMA,QAAQ;AAAA,MACdC,OAAOA,SAAS;AAAA,MAChBC,MAAMA,QAAQG;AAAAA,MACdC,WAAWC,KAAK,MAAM,OAAO,oBAAgB,CAAC;AAAA,MAC9CR,SAASI;AAAAA,MACTK,QAAQC,MAAMC,OAAO,IAAI;AAAA,MACzBC,2BAA2B;AAAA,IAAA,CAC5B;AAAA,IAEHC,MAAM;AAAA,MACJC,SAAS,CAACrB,2BAA2B;AAAA,IAAA;AAAA,EAEzC;AACF,CAAC;"}