@sanity/vision 5.31.0-next.42 → 5.31.0-next.46
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SanityVision.js","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'\nimport {groq} from '@sanity/lezer-groq'\n\nconst sharedExtensions: Extension[] = [\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\nexport const groqExtensions: Extension[] = [groq(), ...sharedExtensions]\n\nexport const paramsExtensions: Extension[] = [javascriptLanguage, ...sharedExtensions]\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 {type Extension} from '@codemirror/state'\nimport {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 {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 extensions: Extension[]\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={props.extensions}\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 {type PerspectiveContextValue, type PerspectiveStack} from 'sanity'\n\nexport const SUPPORTED_PERSPECTIVES = [\n 'pinnedRelease',\n 'scheduledDrafts',\n 'raw',\n 'published',\n 'drafts',\n] 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, and `scheduledDrafts` is transformed to a stack of all scheduled\n * draft release IDs.\n */\nexport const VIRTUAL_PERSPECTIVES = ['pinnedRelease', 'scheduledDrafts'] 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 getActivePerspective({\n visionPerspective,\n perspectiveStack,\n scheduledDraftsStack,\n}: {\n visionPerspective: ClientPerspective | SupportedPerspective | undefined\n perspectiveStack: PerspectiveContextValue['perspectiveStack']\n scheduledDraftsStack?: PerspectiveStack\n}): ClientPerspective | undefined {\n if (visionPerspective === 'pinnedRelease') {\n return perspectiveStack\n }\n if (visionPerspective === 'scheduledDrafts') {\n return scheduledDraftsStack\n }\n return visionPerspective\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 {\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 {\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'>,\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 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-es/debounce.js'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {type TFunction, useTranslation} from 'sanity'\n\nimport {paramsExtensions} from '../codemirror/extensions'\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: string) => void\n paramsError: string | undefined\n hasValidParams: boolean\n editorRef: RefObject<VisionCodeMirrorHandle | null>\n}\n\nexport function ParamsEditor(props: ParamsEditorProps) {\n const {onChange, paramsError, hasValidParams, editorRef} = props\n const {t} = useTranslation(visionLocaleNamespace)\n\n const handleChangeRaw = useCallback(\n (newValue: string) => {\n onChange(newValue)\n },\n [onChange],\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 extensions={paramsExtensions}\n />\n </Card>\n )\n}\n\nexport function parseParams(value: string, t: TFunction<typeof visionLocaleNamespace>): 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'>) => Promise<void>\n updateQuery: (query: QueryConfig) => Promise<void>\n deleteQuery: (key: string) => Promise<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 async (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 await keyValueStore.setKey(keyValueStoreKey, {\n queries: newQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n }\n setSaving(false)\n },\n [keyValueStore, value.queries],\n )\n\n const updateQuery = useCallback(\n async (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 await keyValueStore.setKey(keyValueStoreKey, {\n queries: updatedQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n }\n setSaving(false)\n },\n [keyValueStore, value.queries],\n )\n\n const deleteQuery = useCallback(\n async (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 await keyValueStore.setKey(keyValueStoreKey, {\n queries: filteredQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setDeleteQueryError(err as Error)\n }\n setDeleting((prev) => prev.filter((k) => k !== key))\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-es/isEqual.js'\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 void 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 void 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 void 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\n href=\"https://www.sanity.io/docs/perspectives\"\n target=\"_blank\"\n >\n {t('settings.perspectives.action.docs-link')} →\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 isScheduledDraftsEnabled: boolean\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 isScheduledDraftsEnabled,\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 {\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 if (perspectiveName === 'scheduledDrafts') {\n if (!isScheduledDraftsEnabled) return null\n return (\n <option key=\"scheduledDrafts\" value=\"scheduledDrafts\">\n {t('settings.perspectives.scheduled-drafts')}\n </option>\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')} \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 ReleaseDocument,\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 {\n type ChangeEvent,\n useCallback,\n useEffect,\n useEffectEvent,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n getReleaseIdFromReleaseDocumentId,\n isCardinalityOneRelease,\n type PerspectiveStack,\n sortReleases,\n useActiveReleases,\n useClient,\n usePerspective,\n useScheduledDraftsEnabled,\n useTranslation,\n useWorkspace,\n} from 'sanity'\n\nimport {API_VERSIONS, DEFAULT_API_VERSION} from '../apiVersions'\nimport {groqExtensions} from '../codemirror/extensions'\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\n// Match Sanity API URLs with any domain (supports custom CDN domains like foolcdn.com)\nconst sanityUrl = /\\/(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 | undefined\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 | undefined\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 const isScheduledDraftsEnabled = useScheduledDraftsEnabled()\n const {data: releases = []} = useActiveReleases()\n const workspace = useWorkspace()\n const isDraftModelEnabled = workspace.document.drafts.enabled\n\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 = localStorage.get('dataset', defaultDataset)\n const storedApiVersion = localStorage.get(\n 'apiVersion',\n prefixApiVersion(`${config.defaultApiVersion}`),\n )\n const storedQuery = localStorage.get('query', '')\n const storedParams = localStorage.get('params', '{\\n \\n}')\n const storedPerspective = localStorage.get<SupportedPerspective | undefined>(\n 'perspective',\n undefined,\n )\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 | undefined>(\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 [rawParams, setRawParams] = useState<string>(storedParams)\n const params = useMemo(() => parseParams(rawParams, t), [rawParams, 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 // Compute scheduled drafts perspective stack\n const scheduledDraftsStack = useMemo((): PerspectiveStack | undefined => {\n if (!isScheduledDraftsEnabled) return undefined\n\n const scheduledDraftReleases = releases.filter(\n (release: ReleaseDocument) =>\n isCardinalityOneRelease(release) && release.state === 'scheduled',\n )\n const sorted = sortReleases(scheduledDraftReleases)\n const releaseIds = sorted.map((release: ReleaseDocument) =>\n getReleaseIdFromReleaseDocumentId(release._id),\n )\n const defaultPerspective = isDraftModelEnabled ? ['drafts'] : ['published']\n return [...releaseIds, ...defaultPerspective] as PerspectiveStack\n }, [releases, isDraftModelEnabled, isScheduledDraftsEnabled])\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({\n visionPerspective: perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }),\n dataset,\n allowReconfigure: true,\n })\n }, [\n perspectiveStack,\n scheduledDraftsStack,\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:\n options && 'perspective' in options ? options.perspective : perspective,\n perspectiveStack,\n scheduledDraftsStack,\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 const hasQuery = context.query.trim().length > 0\n\n setQueryInProgress(!context.params.error && hasQuery)\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 || !hasQuery) {\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 scheduledDraftsStack,\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)\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: string) => {\n setRawParams(value)\n localStorage.set('params', value)\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 setRawParams(parsedUrlObj.rawParams)\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:\n getActivePerspective({\n visionPerspective: perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }) ?? [],\n }\n return client.getUrl(\n client.getDataUrl('query', encodeQueryString(queryString, queryParams, urlQueryOpts)),\n )\n },\n [client, perspective, perspectiveStack, scheduledDraftsStack],\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 isScheduledDraftsEnabled={isScheduledDraftsEnabled}\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 extensions={groqExtensions}\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 {catchError, map, type Observable, 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 // oxlint-disable-next-line restrict-template-expressions - @TODO use new Error(msg, {cause: error}) instead of casting to string, and console.error() the full error\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","sharedExtensions","lineNumbers","highlightActiveLine","highlightActiveLineGutter","highlightSelectionMatches","highlightSpecialChars","indentOnInput","bracketMatching","closeBrackets","history","drawSelection","syntaxHighlighting","defaultHighlightStyle","fallback","keymap","of","key","run","defaultKeymap","historyKeymap","flat","filter","Boolean","groqExtensions","groq","paramsExtensions","javascriptLanguage","useCodemirrorTheme","theme","createTheme","cmTheme","createHighlight","cmHighlight","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","withConfig","displayName","componentId","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","t3","extensions","onChange","SUPPORTED_PERSPECTIVES","VIRTUAL_PERSPECTIVES","isSupportedPerspective","p","includes","isVirtualPerspective","maybeVirtualPerspective","hasPinnedPerspective","selectedPerspectiveName","getActivePerspective","visionPerspective","perspectiveStack","scheduledDraftsStack","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","newValue","handleChangeRaw","debounce","handleChange","t4","t5","t6","t7","t8","t9","parseParams","parsedParams","Error","validationError","undefined","raw","valid","error","STORED_QUERIES_NAMESPACE","queries","keyValueStoreKey","useSavedQueries","keyValueStore","useKeyValueStore","setValue","saving","setSaving","deleting","setDeleting","saveQueryError","setSaveQueryError","deleteQueryError","setDeleteQueryError","setError","getKey","sub","pipe","startWith","map","_temp","subscribe","next","unsubscribe","newQueries","_key","uuid","setKey","saveQuery","query_0","updatedQueries","q","updateQuery","prev","filteredQueries","q_0","prev_0","k","deleteQuery","data","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","savedQueryObj_0","push","closable","status","title","description","format","savedAt","handleSave","newTitle","prev_1","next_0","handleTitleSave","newUrl_0","q_1","savedQueryObj_1","duplicateQuery_0","q_2","savedQueryObj_2","handleUpdate","T0","T1","q_3","toLowerCase","textTransform","t10","t11","t12","t13","AddIcon","t14","t15","t16","event","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","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","isScheduledDraftsEnabled","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","bb0","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","useScheduledDraftsEnabled","useActiveReleases","releases","isDraftModelEnabled","useWorkspace","drafts","editorQueryRef","editorParamsRef","querySubscriptionRef","listenSubscriptionRef","storedDataset","defaultApiVersion","storedApiVersion","storedQuery","storedParams","storedPerspective","setDataset","setApiVersion","setCustomApiVersion","setPerspectiveState","setUrl","setQuery","rawParams","setRawParams","setQueryResult","setListenMutations","setQueryTime","setE2eTime","setQueryInProgress","setListenInProgress","isQueryRecallCollapsed","setIsQueryRecallCollapsed","scheduledDraftReleases","releaseIds","sortReleases","defaultPerspective","_client","useClient","allowReconfigure","client","cancelQuerySubscription","cancelListenerSubscription","context","hasQuery","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","observable","fetch","filterResponse","res","ms","result","handleQueryExecution","newPerspective","setPerspective","newDataset","target","handleChangeDataset","evt_0","newApiVersion","focus","handleChangeApiVersion","evt_1","newCustomApiVersion","handleCustomApiVersionChange","t27","evt_2","newPerspective_0","handleChangePerspective","t28","evt_3","prevMutations","handleListenerEvent","t29","shouldExecute","listen","events","includeAllVersions","err_0","handleListenExecution","t30","handleParamsChange","t31","usedApiVersion","usedDataset","urlQuery","parts","newPerspective_1","newApiVersion_0","t32","parsedUrlObj","t33","evt_4","clipboardData","data_0","getData","urlState","handlePaste","t34","isWithinRoot","handleKeyDown","t35","t36","addEventListener","removeEventListener","t37","t38","t39","stack","handleStudioPerspectiveChange","useEffectEvent","t40","t41","t42","queryString","queryParams","urlQueryOpts_0","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","t57","t58","t59","t60","t61","t62","left","top","transform","zIndex","pointerEvents","t63","t64","display","alignItems","t65","t66","t67","t68","t69","t70","t71","release_0","getReleaseIdFromReleaseDocumentId","release","_id","isCardinalityOneRelease","useDatasets","configDatasets","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
|
+
{"version":3,"file":"SanityVision.js","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'\nimport {groq} from '@sanity/lezer-groq'\n\nconst sharedExtensions: Extension[] = [\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\nexport const groqExtensions: Extension[] = [groq(), ...sharedExtensions]\n\nexport const paramsExtensions: Extension[] = [javascriptLanguage, ...sharedExtensions]\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 {type Extension} from '@codemirror/state'\nimport {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 {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 extensions: Extension[]\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={props.extensions}\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 {type PerspectiveContextValue, type PerspectiveStack} from 'sanity'\n\nexport const SUPPORTED_PERSPECTIVES = [\n 'pinnedRelease',\n 'scheduledDrafts',\n 'raw',\n 'published',\n 'drafts',\n] 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, and `scheduledDrafts` is transformed to a stack of all scheduled\n * draft release IDs.\n */\nexport const VIRTUAL_PERSPECTIVES = ['pinnedRelease', 'scheduledDrafts'] 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 getActivePerspective({\n visionPerspective,\n perspectiveStack,\n scheduledDraftsStack,\n}: {\n visionPerspective: ClientPerspective | SupportedPerspective | undefined\n perspectiveStack: PerspectiveContextValue['perspectiveStack']\n scheduledDraftsStack?: PerspectiveStack\n}): ClientPerspective | undefined {\n if (visionPerspective === 'pinnedRelease') {\n return perspectiveStack\n }\n if (visionPerspective === 'scheduledDrafts') {\n return scheduledDraftsStack\n }\n return visionPerspective\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 {\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 {\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'>,\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 position: relative;\n flex-shrink: 0;\n z-index: 6;\n background: var(--card-bg-color);\n overflow: visible;\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 min-height: 0;\n z-index: 1;\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 flex-wrap: wrap;\n`\n\nexport const TimingsCard = styled(Card)`\n position: relative;\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 flex-wrap: wrap;\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-es/debounce.js'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {type TFunction, useTranslation} from 'sanity'\n\nimport {paramsExtensions} from '../codemirror/extensions'\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: string) => void\n paramsError: string | undefined\n hasValidParams: boolean\n editorRef: RefObject<VisionCodeMirrorHandle | null>\n}\n\nexport function ParamsEditor(props: ParamsEditorProps) {\n const {onChange, paramsError, hasValidParams, editorRef} = props\n const {t} = useTranslation(visionLocaleNamespace)\n\n const handleChangeRaw = useCallback(\n (newValue: string) => {\n onChange(newValue)\n },\n [onChange],\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 extensions={paramsExtensions}\n />\n </Card>\n )\n}\n\nexport function parseParams(value: string, t: TFunction<typeof visionLocaleNamespace>): 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 {type ListenOptions} from '@sanity/client'\nimport {uuid} from '@sanity/uuid' // Import the UUID library\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {map, startWith} from 'rxjs/operators'\nimport {type KeyValueStoreValue, useClient, useCurrentUser, useKeyValueStore} from 'sanity'\n\nimport {DEFAULT_API_VERSION} from '../apiVersions'\n\nconst STORED_QUERIES_NAMESPACE = 'studio.vision-tool.saved-queries'\nconst SHARED_QUERY_DOCUMENT_TYPE = 'vision.sharedQuery'\nconst SHARED_QUERIES_QUERY = `*[_type == $sharedQueryType]{\n _id,\n authorId,\n savedAt,\n title,\n url\n} | order(savedAt desc)`\nconst SHARED_QUERY_LISTEN_OPTIONS: ListenOptions = {\n events: ['welcome', 'mutation', 'reconnect'],\n includeResult: true,\n visibility: 'query',\n}\n\nexport interface QueryConfig {\n _key: string\n url: string\n savedAt: string\n title?: string\n shared?: boolean\n authorId?: string\n isOwnedByCurrentUser?: boolean\n}\n\nexport interface StoredQueries {\n queries: QueryConfig[]\n}\n\nconst defaultValue = {\n queries: [],\n}\nconst keyValueStoreKey = STORED_QUERIES_NAMESPACE\n\ninterface SharedQueryDocument {\n _id: string\n _type?: string\n authorId: string\n savedAt: string\n title?: string\n url: string\n}\n\nexport function useSavedQueries(): {\n queries: QueryConfig[]\n saveQuery: (query: Omit<QueryConfig, '_key'>) => Promise<void>\n updateQuery: (query: QueryConfig) => Promise<void>\n deleteQuery: (key: string) => Promise<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 const workspaceClient = useClient({apiVersion: DEFAULT_API_VERSION})\n const currentUser = useCurrentUser()\n\n const [value, setValue] = useState<StoredQueries>(defaultValue)\n const [sharedQueries, setSharedQueries] = useState<QueryConfig[]>([])\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 personalQueries = useMemo(() => {\n return keyValueStore.getKey(keyValueStoreKey)\n }, [keyValueStore])\n\n const mapSharedQueries = useCallback(\n (docs: SharedQueryDocument[]): QueryConfig[] => {\n const currentUserId = currentUser?.id\n\n return docs.map((doc) => ({\n _key: doc._id,\n authorId: doc.authorId,\n isOwnedByCurrentUser: doc.authorId === currentUserId,\n savedAt: doc.savedAt,\n shared: true,\n title: doc.title,\n url: doc.url,\n }))\n },\n [currentUser],\n )\n\n useEffect(() => {\n const sub = personalQueries\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 }, [personalQueries])\n\n useEffect(() => {\n let cancelled = false\n\n const fetchSharedQueries = async () => {\n const docs = await workspaceClient.fetch<SharedQueryDocument[]>(SHARED_QUERIES_QUERY, {\n sharedQueryType: SHARED_QUERY_DOCUMENT_TYPE,\n })\n const nextDocs = docs || []\n if (!cancelled) {\n setSharedQueries(mapSharedQueries(nextDocs))\n }\n }\n\n void fetchSharedQueries().catch((err) => {\n if (!cancelled) {\n setError(err as Error)\n }\n })\n\n const sub = workspaceClient.observable\n .listen(\n `*[_type == $sharedQueryType]`,\n {\n sharedQueryType: SHARED_QUERY_DOCUMENT_TYPE,\n },\n SHARED_QUERY_LISTEN_OPTIONS,\n )\n .subscribe({\n next: () => {\n void fetchSharedQueries().catch((err) => {\n if (!cancelled) {\n setError(err as Error)\n }\n })\n },\n error: (err) => {\n if (!cancelled) {\n setError(err as Error)\n }\n },\n })\n\n return () => {\n cancelled = true\n sub.unsubscribe()\n }\n }, [workspaceClient, mapSharedQueries])\n\n const queries = useMemo(() => {\n return [...sharedQueries, ...value.queries].sort((a, b) => {\n return new Date(b.savedAt || 0).getTime() - new Date(a.savedAt || 0).getTime()\n })\n }, [sharedQueries, value.queries])\n\n const saveQuery = useCallback(\n async (query: Omit<QueryConfig, '_key'>) => {\n setSaving(true)\n setSaveQueryError(undefined)\n\n if (query.shared) {\n if (!currentUser?.id) {\n const authError = new Error('No current user found. Unable to save shared query.')\n setSaveQueryError(authError)\n setSaving(false)\n throw authError\n }\n\n try {\n const createdDoc = (await workspaceClient.create({\n _type: SHARED_QUERY_DOCUMENT_TYPE,\n authorId: currentUser.id,\n savedAt: query.savedAt,\n title: query.title,\n url: query.url,\n })) as SharedQueryDocument\n setSharedQueries((prev) => [...mapSharedQueries([createdDoc]), ...prev])\n setSaving(false)\n return\n } catch (err) {\n const saveError = err instanceof Error ? err : new Error(String(err))\n setSaveQueryError(saveError)\n setSaving(false)\n throw saveError\n }\n }\n\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 await keyValueStore.setKey(keyValueStoreKey, {\n queries: newQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n const saveError = err instanceof Error ? err : new Error(String(err))\n setSaveQueryError(saveError)\n setSaving(false)\n throw saveError\n }\n setSaving(false)\n },\n [currentUser, workspaceClient, keyValueStore, mapSharedQueries, value.queries],\n )\n\n const updateQuery = useCallback(\n async (query: QueryConfig) => {\n setSaving(true)\n setSaveQueryError(undefined)\n\n if (query.shared) {\n if (!currentUser?.id || query.authorId !== currentUser.id) {\n const authError = new Error('Only the author can update a shared query.')\n setSaveQueryError(authError)\n setSaving(false)\n throw authError\n }\n\n try {\n const updatedDoc = (await workspaceClient\n .patch(query._key)\n .set({\n savedAt: query.savedAt,\n title: query.title,\n url: query.url,\n })\n .commit()) as SharedQueryDocument\n\n const [updatedSharedQuery] = mapSharedQueries([updatedDoc])\n setSharedQueries((prev) =>\n prev.map((existingQuery) =>\n existingQuery._key === query._key ? updatedSharedQuery : existingQuery,\n ),\n )\n setSaving(false)\n return\n } catch (err) {\n const updateError = err instanceof Error ? err : new Error(String(err))\n setSaveQueryError(updateError)\n setSaving(false)\n throw updateError\n }\n }\n\n try {\n const updatedQueries = value.queries.map((q) =>\n q._key === query._key ? {...q, ...query} : q,\n )\n setValue({queries: updatedQueries})\n await keyValueStore.setKey(keyValueStoreKey, {\n queries: updatedQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n const updateError = err instanceof Error ? err : new Error(String(err))\n setSaveQueryError(updateError)\n setSaving(false)\n throw updateError\n }\n setSaving(false)\n },\n [workspaceClient, currentUser, keyValueStore, mapSharedQueries, value.queries],\n )\n\n const deleteQuery = useCallback(\n async (key: string) => {\n setDeleting((prev) => [...prev, key])\n setDeleteQueryError(undefined)\n const clearDeleting = () => setDeleting((prev) => prev.filter((k) => k !== key))\n\n const sharedQuery = sharedQueries.find((query) => query._key === key && query.shared)\n if (sharedQuery) {\n if (!currentUser?.id || sharedQuery.authorId !== currentUser.id) {\n setDeleteQueryError(new Error('Only the author can delete a shared query.'))\n clearDeleting()\n return\n }\n\n try {\n await workspaceClient.delete(key)\n setSharedQueries((prev) => prev.filter((query) => query._key !== key))\n } catch (err) {\n setDeleteQueryError(err as Error)\n }\n clearDeleting()\n return\n }\n\n try {\n const filteredQueries = value.queries.filter((q) => q._key !== key)\n setValue({queries: filteredQueries})\n await keyValueStore.setKey(keyValueStoreKey, {\n queries: filteredQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setDeleteQueryError(err as Error)\n }\n clearDeleting()\n },\n [workspaceClient, currentUser, keyValueStore, sharedQueries, value.queries],\n )\n\n return {\n 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: auto;\n width: 100%;\n min-width: 0;\n overflow: visible;\n`\n","import {AddIcon, LockIcon, SearchIcon, TrashIcon, UnpublishIcon, UsersIcon} from '@sanity/icons'\nimport {\n Badge,\n Box,\n Button,\n Card,\n Code,\n Dialog,\n Flex,\n Menu,\n MenuButton,\n MenuItem,\n Stack,\n Tab,\n TabList,\n Text,\n TextInput,\n Tooltip,\n useToast,\n} from '@sanity/ui'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {type ReactElement, useCallback, useState} from 'react'\nimport {ContextMenuButton, UserAvatar, 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'\nimport {StyledLabel} from './VisionGui.styled'\n\nexport function QueryRecall({\n url,\n getStateFromUrl,\n setStateFromParsedUrl,\n currentQuery,\n currentParams,\n generateUrl,\n compactMode = false,\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 compactMode?: boolean\n}): ReactElement {\n type QueryFilter = 'all' | 'personal' | 'shared'\n const toast = useToast()\n const {saveQuery, updateQuery, queries, deleteQuery, saving, deleting} = 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 [queryFilter, setQueryFilter] = useState<QueryFilter>('all')\n const [selectedUrl, setSelectedUrl] = useState<string | undefined>(url)\n const [pendingUnshareKeys, setPendingUnshareKeys] = useState<string[]>([])\n const [shareDialogQuery, setShareDialogQuery] = useState<QueryConfig | null>(null)\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 if (q.shared) 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.shared) 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(new Date(duplicateQuery?.savedAt || ''))}`,\n })\n return\n }\n\n if (!newUrl) return\n\n try {\n await saveQuery({\n shared: false,\n url: newUrl,\n savedAt: new Date().toISOString(),\n title: t('label.untitled-query'),\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 instanceof Error ? err.message : String(err),\n })\n }\n }, [\n queries,\n toast,\n t,\n currentQuery,\n currentParams,\n getStateFromUrl,\n generateUrl,\n formatDate,\n saveQuery,\n ])\n\n const handleShareQuery = useCallback((query: QueryConfig) => {\n setShareDialogQuery(query)\n }, [])\n\n const handleConfirmShareQuery = useCallback(async () => {\n if (!shareDialogQuery) return\n\n const sharedQueryKey = shareDialogQuery._key\n const sharedQueryUrl = shareDialogQuery.url\n const sharedQueryTitle = shareDialogQuery.title || t('label.untitled-query')\n\n try {\n await saveQuery({\n shared: true,\n title: sharedQueryTitle,\n url: sharedQueryUrl,\n savedAt: new Date().toISOString(),\n })\n\n await deleteQuery(sharedQueryKey)\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.shared-success'),\n })\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err instanceof Error ? err.message : String(err),\n })\n }\n setShareDialogQuery(null)\n }, [deleteQuery, saveQuery, shareDialogQuery, t, toast])\n\n const handleUnshareQuery = useCallback(\n async (query: QueryConfig) => {\n setPendingUnshareKeys((prev) => [...prev, query._key])\n const clearPending = () =>\n setPendingUnshareKeys((prev) => prev.filter((key) => key !== query._key))\n const nextQueryObj = getStateFromUrl(query.url)\n const duplicatePersonalQuery = queries?.find((existingQuery) => {\n if (existingQuery._key === query._key) return false\n if (existingQuery.shared) return false\n const existingQueryObj = getStateFromUrl(existingQuery.url)\n return (\n nextQueryObj &&\n existingQueryObj &&\n existingQueryObj.query === nextQueryObj.query &&\n isEqual(existingQueryObj.params, nextQueryObj.params)\n )\n })\n const unsharedQueryTitle = query.title || t('label.untitled-query')\n\n if (duplicatePersonalQuery) {\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicatePersonalQuery.title} - ${formatDate.format(\n new Date(duplicatePersonalQuery.savedAt || ''),\n )}`,\n })\n clearPending()\n return\n }\n\n try {\n await saveQuery({\n shared: false,\n title: unsharedQueryTitle,\n url: query.url,\n savedAt: new Date().toISOString(),\n })\n\n await deleteQuery(query._key)\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.unshared-success'),\n })\n clearPending()\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err instanceof Error ? err.message : String(err),\n })\n clearPending()\n }\n },\n [deleteQuery, formatDate, getStateFromUrl, queries, saveQuery, t, toast],\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 visibleQueries = queries?.filter((q) => !pendingUnshareKeys.includes(q._key))\n\n const filteredQueries = visibleQueries?.filter((q) => {\n const matchesSearch = (q.title ?? '').toLowerCase().includes(searchQuery.toLowerCase())\n const matchesFilter =\n queryFilter === 'all' ||\n (queryFilter === 'personal' && !q.shared) ||\n (queryFilter === 'shared' && q.shared)\n return matchesSearch && matchesFilter\n })\n\n return (\n <ScrollContainer>\n <FixedHeader space={3}>\n <Flex padding={3} paddingTop={2} paddingBottom={0} justify=\"space-between\" align=\"center\">\n <StyledLabel muted>{t('label.saved-queries')}</StyledLabel>\n <Button\n label={t('action.save-query')}\n icon={AddIcon}\n disabled={saving}\n onClick={() => void 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 <Box paddingX={3} paddingBottom={2}>\n <TabList space={1}>\n <Tab\n id=\"query-filter-all\"\n aria-controls=\"vision-query-recall-list\"\n label={t('label.all')}\n selected={queryFilter === 'all'}\n onClick={() => setQueryFilter('all')}\n />\n <Tab\n id=\"query-filter-personal\"\n aria-controls=\"vision-query-recall-list\"\n label={t('label.personal')}\n selected={queryFilter === 'personal'}\n onClick={() => setQueryFilter('personal')}\n />\n <Tab\n id=\"query-filter-shared\"\n aria-controls=\"vision-query-recall-list\"\n label={t('label.shared')}\n selected={queryFilter === 'shared'}\n onClick={() => setQueryFilter('shared')}\n />\n </TabList>\n </Box>\n </FixedHeader>\n <Stack id=\"vision-query-recall-list\" paddingY={3}>\n {filteredQueries?.map((q, index) => {\n const queryObj = getStateFromUrl(q.url)\n const fullQueryPreview = queryObj?.query || ''\n const shortQueryPreview = fullQueryPreview.split('{')[0]\n const isSelected = selectedUrl === q.url\n const canMutateQuery = !q.shared || q.isOwnedByCurrentUser\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 && canMutateQuery\n return (\n <Card\n key={q._key}\n width={'fill'}\n paddingX={compactMode ? 3 : 4}\n paddingY={compactMode ? 3 : 4}\n tone=\"default\"\n onClick={(event) => {\n const target = event.target as HTMLElement | null\n if (target?.closest('[data-query-actions=\"true\"]')) {\n return\n }\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={{\n borderTop: index === 0 ? '1px solid var(--card-border-color)' : undefined,\n position: 'relative',\n borderBottom: '1px solid var(--card-border-color)',\n borderLeft: isSelected\n ? '2px solid var(--card-muted-fg-color)'\n : '2px solid transparent',\n cursor: 'pointer',\n }}\n >\n <Stack space={compactMode ? 2 : 3}>\n <Flex justify=\"space-between\" align={'center'} style={{minHeight: '25px'}}>\n <Flex align=\"center\" gap={2} paddingRight={1} style={{minWidth: 0, flex: 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 void 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={compactMode ? 2 : 3}\n textOverflow=\"ellipsis\"\n style={{\n maxWidth: compactMode ? '180px' : '220px',\n cursor: canMutateQuery ? 'pointer' : 'default',\n padding: '2px 0',\n }}\n title={\n optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)\n }\n onClick={\n canMutateQuery\n ? () => {\n setEditingKey(q._key)\n setEditingTitle(q.title || q._key.slice(0, 5))\n }\n : undefined\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 <Flex align=\"center\" gap={2}>\n <Box\n data-query-actions=\"true\"\n style={{width: '25px', height: '25px', display: 'flex', alignItems: 'center'}}\n >\n {(!q.shared || canMutateQuery) && (\n <MenuButton\n button={<ContextMenuButton />}\n id={`${q._key}-menu`}\n menu={\n <Menu>\n {!q.shared && (\n <MenuItem\n icon={UsersIcon}\n padding={3}\n text={t('label.share')}\n onClick={(event) => {\n event.stopPropagation()\n handleShareQuery(q)\n }}\n />\n )}\n {q.shared && canMutateQuery && (\n <MenuItem\n icon={UnpublishIcon}\n padding={3}\n text={t('action.unshare')}\n onClick={(event) => {\n event.stopPropagation()\n void handleUnshareQuery(q)\n }}\n />\n )}\n {canMutateQuery && (\n <MenuItem\n tone=\"critical\"\n padding={3}\n icon={TrashIcon}\n text={t('action.delete')}\n onClick={(event) => {\n event.stopPropagation()\n void deleteQuery(q._key)\n }}\n />\n )}\n </Menu>\n }\n popover={{portal: true, placement: 'bottom-end', tone: 'default'}}\n />\n )}\n </Box>\n </Flex>\n </Flex>\n\n {fullQueryPreview ? (\n <Tooltip\n content={\n <Box\n padding={2}\n style={{maxWidth: '420px', maxHeight: '220px', overflow: 'auto'}}\n >\n <Code size={1}>{fullQueryPreview}</Code>\n </Box>\n }\n placement=\"top\"\n portal\n >\n <Code muted size={1}>\n {shortQueryPreview}\n </Code>\n </Tooltip>\n ) : (\n <Code muted />\n )}\n\n {compactMode ? (\n <Stack space={1} style={{paddingTop: 0, minHeight: '30px'}}>\n <Flex align=\"center\" gap={2} style={{minHeight: '18px'}}>\n <Box\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '17px',\n height: '17px',\n }}\n >\n {q.shared ? (\n <UserAvatar size={0} user={q.authorId || ''} withTooltip />\n ) : (\n <Box\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 0,\n color: 'var(--card-muted-fg-color)',\n }}\n >\n <LockIcon />\n </Box>\n )}\n </Box>\n <Badge\n mode=\"outline\"\n tone={q.shared ? 'primary' : 'default'}\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {q.shared ? t('label.shared') : t('label.personal')}\n </Badge>\n </Flex>\n <Text size={1} muted>\n {formatDate.format(new Date(q.savedAt || ''))}\n </Text>\n </Stack>\n ) : (\n <Flex align=\"center\" gap={2} style={{paddingTop: '2px', minHeight: '20px'}}>\n <Box\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '17px',\n height: '17px',\n }}\n >\n {q.shared ? (\n <UserAvatar size={0} user={q.authorId || ''} withTooltip />\n ) : (\n <Box\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 0,\n color: 'var(--card-muted-fg-color)',\n }}\n >\n <LockIcon />\n </Box>\n )}\n </Box>\n <Badge\n mode=\"outline\"\n tone={q.shared ? 'primary' : 'default'}\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {q.shared ? t('label.shared') : t('label.personal')}\n </Badge>\n <Text size={1} muted>\n •\n </Text>\n <Text size={1} muted>\n {formatDate.format(new Date(q.savedAt || ''))}\n </Text>\n </Flex>\n )}\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 void handleUpdate(q)\n }}\n />\n )}\n </Stack>\n </Card>\n )\n })}\n </Stack>\n {shareDialogQuery && (\n <Dialog\n id=\"vision-query-recall-share-dialog\"\n width={1}\n header={t('label.share')}\n onClose={() => setShareDialogQuery(null)}\n footer={\n <Flex width=\"fill\" justify=\"flex-end\" gap={3} padding={3} align=\"center\">\n <Button\n mode=\"bleed\"\n padding={2}\n text={t('action.query-cancel')}\n onClick={() => setShareDialogQuery(null)}\n />\n <Button\n padding={2}\n tone=\"primary\"\n text={t('action.save-shared-query')}\n onClick={() => void handleConfirmShareQuery()}\n />\n </Flex>\n }\n >\n <Box padding={4}>\n <Text size={2}>{t('save-query.share-warning')}</Text>\n </Box>\n </Dialog>\n )}\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}\n\ninterface RootSize {\n width: number\n height: 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 [rootSize, setRootSize] = useState<RootSize>(() => ({\n width: typeof window !== 'undefined' ? window.innerWidth : 1000,\n height: typeof window !== 'undefined' ? window.innerHeight : 800,\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 const entry = entries?.[0]\n if (entry) {\n setRootSize({width: entry.contentRect.width, height: entry.contentRect.height})\n setIsNarrowBreakpoint(entry.contentRect.width > 600)\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, rootSize}\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\n href=\"https://www.sanity.io/docs/perspectives\"\n target=\"_blank\"\n >\n {t('settings.perspectives.action.docs-link')} →\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 isScheduledDraftsEnabled: boolean\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 isScheduledDraftsEnabled,\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 {\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={[1, 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={[1, 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={[1, 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={[1, 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 if (perspectiveName === 'scheduledDrafts') {\n if (!isScheduledDraftsEnabled) return null\n return (\n <option key=\"scheduledDrafts\" value=\"scheduledDrafts\">\n {t('settings.perspectives.scheduled-drafts')}\n </option>\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={[1, customApiVersion === false ? 6 : 4]}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>\n {t('query.url')} \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 compactFooter?: boolean\n}\n\nexport function VisionGuiResult({\n error,\n queryInProgress,\n queryResult,\n listenInProgress,\n listenMutations,\n dataset,\n queryTime,\n e2eTime,\n compactFooter = false,\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\n justify={compactFooter ? 'flex-start' : 'space-between'}\n align={compactFooter ? 'stretch' : undefined}\n direction={compactFooter ? 'column' : ['column', 'column', 'row']}\n >\n <TimingsCard\n paddingX={compactFooter ? 3 : 4}\n paddingY={compactFooter ? 2 : 3}\n sizing=\"border\"\n style={compactFooter ? {width: '100%'} : {minWidth: 0}}\n >\n <TimingsTextContainer align=\"center\">\n <Box>\n <Text muted size={compactFooter ? 1 : 2}>\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={compactFooter ? 3 : 4}>\n <Text muted size={compactFooter ? 1 : 2}>\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\n paddingX={compactFooter ? 3 : 4}\n paddingY={compactFooter ? 2 : 3}\n sizing=\"border\"\n style={compactFooter ? {width: '100%'} : {marginLeft: 'auto', minWidth: 0}}\n >\n <SaveResultLabel muted size={compactFooter ? 1 : 2}>\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 ReleaseDocument,\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 {\n type ChangeEvent,\n useCallback,\n useEffect,\n useEffectEvent,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n getReleaseIdFromReleaseDocumentId,\n isCardinalityOneRelease,\n type PerspectiveStack,\n sortReleases,\n useActiveReleases,\n useClient,\n usePerspective,\n useScheduledDraftsEnabled,\n useTranslation,\n useWorkspace,\n} from 'sanity'\n\nimport {API_VERSIONS, DEFAULT_API_VERSION} from '../apiVersions'\nimport {groqExtensions} from '../codemirror/extensions'\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\n// Match Sanity API URLs with any domain (supports custom CDN domains like foolcdn.com)\nconst sanityUrl = /\\/(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 | undefined\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 | undefined\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 const isScheduledDraftsEnabled = useScheduledDraftsEnabled()\n const {data: releases = []} = useActiveReleases()\n const workspace = useWorkspace()\n const isDraftModelEnabled = workspace.document.drafts.enabled\n\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 = localStorage.get('dataset', defaultDataset)\n const storedApiVersion = localStorage.get(\n 'apiVersion',\n prefixApiVersion(`${config.defaultApiVersion}`),\n )\n const storedQuery = localStorage.get('query', '')\n const storedParams = localStorage.get('params', '{\\n \\n}')\n const storedPerspective = localStorage.get<SupportedPerspective | undefined>(\n 'perspective',\n undefined,\n )\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 | undefined>(\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 [rawParams, setRawParams] = useState<string>(storedParams)\n const params = useMemo(() => parseParams(rawParams, t), [rawParams, 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 // Compute scheduled drafts perspective stack\n const scheduledDraftsStack = useMemo((): PerspectiveStack | undefined => {\n if (!isScheduledDraftsEnabled) return undefined\n\n const scheduledDraftReleases = releases.filter(\n (release: ReleaseDocument) =>\n isCardinalityOneRelease(release) && release.state === 'scheduled',\n )\n const sorted = sortReleases(scheduledDraftReleases)\n const releaseIds = sorted.map((release: ReleaseDocument) =>\n getReleaseIdFromReleaseDocumentId(release._id),\n )\n const defaultPerspective = isDraftModelEnabled ? ['drafts'] : ['published']\n return [...releaseIds, ...defaultPerspective] as PerspectiveStack\n }, [releases, isDraftModelEnabled, isScheduledDraftsEnabled])\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({\n visionPerspective: perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }),\n dataset,\n allowReconfigure: true,\n })\n }, [\n perspectiveStack,\n scheduledDraftsStack,\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:\n options && 'perspective' in options ? options.perspective : perspective,\n perspectiveStack,\n scheduledDraftsStack,\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 const hasQuery = context.query.trim().length > 0\n\n setQueryInProgress(!context.params.error && hasQuery)\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 || !hasQuery) {\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 scheduledDraftsStack,\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)\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: string) => {\n setRawParams(value)\n localStorage.set('params', value)\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 setRawParams(parsedUrlObj.rawParams)\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:\n getActivePerspective({\n visionPerspective: perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }) ?? [],\n }\n return client.getUrl(\n client.getDataUrl('query', encodeQueryString(queryString, queryParams, urlQueryOpts)),\n )\n },\n [client, perspective, perspectiveStack, scheduledDraftsStack],\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 isScheduledDraftsEnabled={isScheduledDraftsEnabled}\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 extensions={groqExtensions}\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 {catchError, map, type Observable, 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 // oxlint-disable-next-line restrict-template-expressions - @TODO use new Error(msg, {cause: error}) instead of casting to string, and console.error() the full error\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","sharedExtensions","lineNumbers","highlightActiveLine","highlightActiveLineGutter","highlightSelectionMatches","highlightSpecialChars","indentOnInput","bracketMatching","closeBrackets","history","drawSelection","syntaxHighlighting","defaultHighlightStyle","fallback","keymap","of","key","run","defaultKeymap","historyKeymap","flat","filter","Boolean","groqExtensions","groq","paramsExtensions","javascriptLanguage","useCodemirrorTheme","theme","createTheme","cmTheme","createHighlight","cmHighlight","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","withConfig","displayName","componentId","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","t3","extensions","onChange","SUPPORTED_PERSPECTIVES","VIRTUAL_PERSPECTIVES","isSupportedPerspective","p","includes","isVirtualPerspective","maybeVirtualPerspective","hasPinnedPerspective","selectedPerspectiveName","getActivePerspective","visionPerspective","perspectiveStack","scheduledDraftsStack","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","newValue","handleChangeRaw","debounce","handleChange","t4","t5","t6","t7","t8","t9","parseParams","parsedParams","Error","validationError","undefined","raw","valid","error","STORED_QUERIES_NAMESPACE","SHARED_QUERY_DOCUMENT_TYPE","SHARED_QUERIES_QUERY","SHARED_QUERY_LISTEN_OPTIONS","events","includeResult","visibility","queries","keyValueStoreKey","useSavedQueries","keyValueStore","useKeyValueStore","workspaceClient","useClient","currentUser","useCurrentUser","setValue","sharedQueries","setSharedQueries","saving","setSaving","deleting","setDeleting","saveQueryError","setSaveQueryError","deleteQueryError","setDeleteQueryError","setError","getKey","personalQueries","id","docs","currentUserId","map","_key","_id","authorId","isOwnedByCurrentUser","savedAt","shared","title","mapSharedQueries","sub","pipe","startWith","_temp","subscribe","next","unsubscribe","cancelled","fetchSharedQueries","nextDocs","fetch","sharedQueryType","catch","err_0","sub_0","observable","listen","err_1","err_2","sort","_temp2","t10","authError","createdDoc","create","_type","prev","t11","saveError","err_3","String","newQueries","uuid","setKey","t12","saveError_0","err_4","saveQuery","query_0","authError_0","updatedDoc","patch","commit","updatedSharedQuery","prev_0","existingQuery","updateError","err_5","updatedQueries","q","t13","updateError_0","err_6","updateQuery","prev_1","clearDeleting","prev_2","k","sharedQuery","find","query_1","delete","prev_3","query_2","filteredQueries","q_0","t14","deleteQuery","b","getTime","data","FixedHeader","Stack","ScrollContainer","QueryRecall","getStateFromUrl","setStateFromParsedUrl","currentQuery","currentParams","generateUrl","compactMode","toast","useToast","month","day","year","hour","minute","hour12","formatDate","useDateTimeFormat","editingKey","setEditingKey","editingTitle","setEditingTitle","optimisticTitles","setOptimisticTitles","searchQuery","setSearchQuery","queryFilter","setQueryFilter","selectedUrl","setSelectedUrl","pendingUnshareKeys","setPendingUnshareKeys","shareDialogQuery","setShareDialogQuery","newUrl","some","savedQueryObj","isEqual","duplicateQuery","savedQueryObj_0","push","closable","status","description","format","handleSave","handleShareQuery","sharedQueryKey","sharedQueryUrl","sharedQueryTitle","handleConfirmShareQuery","clearPending","nextQueryObj","duplicatePersonalQuery","existingQueryObj","unsharedQueryTitle","handleUnshareQuery","newTitle","next_0","handleTitleSave","newUrl_0","q_1","savedQueryObj_1","duplicateQuery_0","q_2","savedQueryObj_2","handleUpdate","T0","T1","q_3","q_4","matchesSearch","toLowerCase","matchesFilter","t15","t16","t17","t18","t19","AddIcon","t20","t21","t22","event","currentTarget","t23","SearchIcon","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","q_5","index","queryObj","fullQueryPreview","shortQueryPreview","isSelected","canMutateQuery","areQueriesEqual","isEdited","event_0","target","closest","parsedUrl","position","borderLeft","minHeight","minWidth","flex","event_1","event_2","maxWidth","height","padding","width","borderRadius","display","alignItems","UsersIcon","event_3","stopPropagation","UnpublishIcon","event_4","TrashIcon","event_5","portal","placement","tone","maxHeight","overflow","paddingTop","justifyContent","whiteSpace","textOverflow","right","bottom","e","narrowBreakpoint","window","innerWidth","calculatePaneSizeOptions","rootHeight","document","body","getBoundingClientRect","defaultSize","size","allowResize","minSize","Math","min","max","maxSize","usePaneSize","visionRootRef","rootSize","setRootSize","isNarrowBreakpoint","setIsNarrowBreakpoint","paneSizeOptions","setPaneSizeOptions","_temp3","handleResize","entry","contentRect","resizeObserver","ResizeObserver","observe","disconnect","innerHeight","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","isScheduledDraftsEnabled","usePerspective","operationUrlElement","el","select","execCommand","console","handleCopyUrl","perspectiveName","CopyIcon","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","Code","muted","critical","QueryErrorDetails","details","bb0","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","keyPath","cached","segments","depthLimit","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","preventSave","evt","preventDefault","SaveCsvButton","blobUrl","isDisabled","DocumentSheetIcon","button","SaveJsonButton","VisionGuiResult","queryResult","listenMutations","queryTime","e2eTime","compactFooter","hasResult","jsonUrl","csvUrl","marginLeft","SaveResultButtons","Fragment","nodeContains","node","other","compareDocumentPosition","sanityUrl","isRunHotkey","isHotkey","VisionGui","config","projectId","defaultDataset","useScheduledDraftsEnabled","useActiveReleases","releases","isDraftModelEnabled","useWorkspace","drafts","editorQueryRef","editorParamsRef","querySubscriptionRef","listenSubscriptionRef","storedDataset","defaultApiVersion","storedApiVersion","storedQuery","storedParams","storedPerspective","setDataset","setApiVersion","setCustomApiVersion","setPerspectiveState","setUrl","setQuery","rawParams","setRawParams","setQueryResult","setListenMutations","setQueryTime","setE2eTime","setQueryInProgress","setListenInProgress","isQueryRecallCollapsed","setIsQueryRecallCollapsed","scheduledDraftReleases","releaseIds","sortReleases","defaultPerspective","_client","allowReconfigure","client","cancelQuerySubscription","cancelListenerSubscription","context","hasQuery","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","filterResponse","res","ms","result","handleQueryExecution","newPerspective","setPerspective","newDataset","handleChangeDataset","evt_0","newApiVersion","focus","handleChangeApiVersion","evt_1","newCustomApiVersion","handleCustomApiVersionChange","evt_2","newPerspective_0","handleChangePerspective","evt_3","prevMutations","handleListenerEvent","shouldExecute","includeAllVersions","handleListenExecution","handleParamsChange","usedApiVersion","usedDataset","urlQuery","parts","newPerspective_1","newApiVersion_0","parsedUrlObj","evt_4","clipboardData","data_0","getData","urlState","handlePaste","isWithinRoot","handleKeyDown","addEventListener","removeEventListener","t37","t38","t39","stack","handleStudioPerspectiveChange","useEffectEvent","t40","t41","t42","queryString","queryParams","urlQueryOpts_0","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","t57","t58","t59","t60","t61","t62","left","top","transform","zIndex","pointerEvents","t63","t64","t65","t66","t67","t68","t69","t70","t71","release_0","getReleaseIdFromReleaseDocumentId","release","isCardinalityOneRelease","useDatasets","configDatasets","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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"}
|