@sanity/vision 6.3.1-next.5 → 6.3.1-next.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +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.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.tsx","../../src/components/usePaneSize.ts","../../src/components/VisionGuiControls.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.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 {type Extension} from '@codemirror/state'\nimport {rem, useTheme} from '@sanity/ui'\nimport CodeMirror, {\n EditorSelection,\n type ReactCodeMirrorProps,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {forwardRef, type ReactNode, useCallback, useImperativeHandle, useRef, useState} from 'react'\n\nimport {useCodemirrorTheme} from './useCodemirrorTheme'\nimport {\n contentBorderRightWidthVar,\n contentPaddingTopVar,\n editorRoot,\n linePaddingLeftVar,\n} from './VisionCodeMirror.css'\n\nfunction EditorRoot({children}: {children: ReactNode}) {\n const {sanity} = useTheme()\n\n return (\n <div\n className={editorRoot}\n style={assignInlineVars({\n [linePaddingLeftVar]: `${rem(sanity.space[3])}`,\n [contentBorderRightWidthVar]: `${rem(sanity.space[4])}`,\n [contentPaddingTopVar]: `${rem(sanity.space[5])}`,\n })}\n >\n {children}\n </div>\n )\n}\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, useTheme_v2 as useThemeV2} from '@sanity/ui'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {type ComponentProps, type ComponentPropsWithoutRef, forwardRef} from 'react'\n\nimport {\n controlsContainer,\n downloadsCard,\n header,\n inputBackgroundContainer,\n inputBackgroundContainerLeft,\n inputContainer,\n queryCopyLink,\n result,\n resultContainer,\n resultContainerInvalid,\n resultFooter,\n resultInnerContainer,\n resultOuterContainer,\n root,\n saveResultLabel,\n saveResultSpanGapVar,\n splitpaneContainer,\n styledLabel,\n timingsCard,\n timingsTextContainer,\n timingsTextMinHeightVar,\n} from './VisionGui.css'\n\nexport const Root = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<typeof Flex>>(\n function Root(props, ref) {\n return <Flex {...props} ref={ref} className={root} />\n },\n)\n\nexport function Header(props: ComponentProps<typeof Card>) {\n return <Card {...props} className={header} />\n}\n\nexport function StyledLabel(props: ComponentProps<typeof Label>) {\n return <Label {...props} className={styledLabel} />\n}\n\nexport function SplitpaneContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={splitpaneContainer} />\n}\n\nexport function QueryCopyLink(props: ComponentProps<'a'>) {\n return <a {...props} className={queryCopyLink} />\n}\n\nexport function InputBackgroundContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={inputBackgroundContainer} />\n}\n\nexport function InputBackgroundContainerLeft(props: ComponentProps<typeof Box>) {\n return (\n <Box {...props} className={`${inputBackgroundContainer} ${inputBackgroundContainerLeft}`} />\n )\n}\n\nexport function InputContainer(props: ComponentProps<typeof Card>) {\n return <Card {...props} className={inputContainer} />\n}\n\nexport function ResultOuterContainer(props: ComponentProps<typeof Flex>) {\n return <Flex {...props} className={resultOuterContainer} />\n}\n\nexport function ResultInnerContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={resultInnerContainer} />\n}\n\nexport function ResultContainer({\n isInvalid,\n ...props\n}: ComponentProps<typeof Card> & {isInvalid: boolean}) {\n return (\n <Card\n {...props}\n className={isInvalid ? `${resultContainer} ${resultContainerInvalid}` : resultContainer}\n />\n )\n}\n\nexport function Result(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={result} />\n}\n\nexport function ResultFooter(props: ComponentProps<typeof Flex>) {\n return <Flex {...props} className={resultFooter} />\n}\n\nexport function TimingsCard(props: ComponentProps<typeof Card>) {\n return <Card {...props} className={timingsCard} />\n}\n\nexport function TimingsTextContainer(props: ComponentProps<typeof Flex>) {\n const {space, font} = useThemeV2()\n const textSize = font.text.sizes[2]\n const minHeight = rem(\n space[3] * 2 + textSize.lineHeight - textSize.ascenderHeight - textSize.descenderHeight,\n )\n\n return (\n <Flex\n {...props}\n className={timingsTextContainer}\n style={assignInlineVars({[timingsTextMinHeightVar]: `${minHeight}`})}\n />\n )\n}\n\nexport function DownloadsCard(props: ComponentProps<typeof Card>) {\n return <Card {...props} className={downloadsCard} />\n}\n\nexport function SaveResultLabel(props: ComponentProps<typeof Text>) {\n const {space} = useThemeV2()\n\n return (\n <Text\n {...props}\n className={saveResultLabel}\n style={assignInlineVars({[saveResultSpanGapVar]: `${rem(space[3])}`})}\n />\n )\n}\n\nexport function ControlsContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={controlsContainer} />\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 {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 ComponentProps, 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.css'\nimport {type ParsedUrlState} from './VisionGui'\nimport {StyledLabel} from './VisionGui.styled'\n\nfunction FixedHeader(props: ComponentProps<typeof Stack>) {\n return <Stack {...props} className={fixedHeader} />\n}\n\nfunction ScrollContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={scrollContainer} />\n}\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 {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 {type ComponentProps, useCallback, useRef, useState} from 'react'\nimport {Translate, useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {dot, perspectivePopoverContent, perspectivePopoverLink} from './PerspectivePopover.css'\n\nfunction PerspectivePopoverContent(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={perspectivePopoverContent} />\n}\n\nfunction PerspectivePopoverLink(props: ComponentProps<'a'>) {\n return <a {...props} className={perspectivePopoverLink} />\n}\n\nfunction Dot({tone}: {tone: CardTone}) {\n return <div className={dot} style={{backgroundColor: `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 rel=\"noopener noreferrer\"\n >\n {t('settings.perspectives.action.docs-link')} &rarr;\n </PerspectivePopoverLink>\n </Text>\n </Card>\n </Stack>\n </PerspectivePopoverContent>\n }\n placement=\"bottom-start\"\n portal\n padding={3}\n ref={popoverRef}\n open={open}\n >\n <Button\n icon={HelpCircleIcon}\n mode=\"bleed\"\n padding={2}\n paddingRight={1}\n tone=\"primary\"\n fontSize={1}\n ref={buttonRef}\n onClick={handleClick}\n selected={open}\n >\n <Dot tone={SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? 'caution' : 'primary'} />\n </Button>\n </Popover>\n )\n}\n","import {CopyIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Grid, Inline, Select, Stack, TextInput, Tooltip} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type ComponentType,\n Fragment,\n type RefObject,\n useCallback,\n useMemo,\n useRef,\n} from 'react'\nimport {type PerspectiveContextValue, type TFunction, usePerspective, useTranslation} from 'sanity'\n\nimport {API_VERSIONS} from '../apiVersions'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n hasPinnedPerspective,\n SUPPORTED_PERSPECTIVES,\n type SupportedPerspective,\n} from '../perspectives'\nimport {PerspectivePopover} from './PerspectivePopover'\nimport {Header, QueryCopyLink, StyledLabel} from './VisionGui.styled'\n\nconst PinnedReleasePerspectiveOption: ComponentType<{\n pinnedPerspective: PerspectiveContextValue\n t: TFunction\n}> = ({pinnedPerspective, t}) => {\n const name =\n typeof pinnedPerspective.selectedPerspective === 'object'\n ? pinnedPerspective.selectedPerspective.metadata.title\n : pinnedPerspective.selectedPerspectiveName\n\n const label = hasPinnedPerspective(pinnedPerspective)\n ? `(${t('settings.perspectives.pinned-release-label')})`\n : t('settings.perspectives.pinned-release-label')\n\n const text = useMemo(\n () => [name, label].filter((value) => typeof value !== 'undefined').join(' '),\n [label, name],\n )\n\n return (\n <option value=\"pinnedRelease\" disabled={!hasPinnedPerspective(pinnedPerspective)}>\n {text}\n </option>\n )\n}\n\nexport interface VisionGuiHeaderProps {\n onChangeDataset: (evt: ChangeEvent<HTMLSelectElement>) => void\n dataset: string\n customApiVersion: string | false\n apiVersion: string\n onChangeApiVersion: (evt: ChangeEvent<HTMLSelectElement>) => void\n datasets: string[]\n customApiVersionElementRef: RefObject<HTMLInputElement | null>\n onCustomApiVersionChange: (evt: ChangeEvent<HTMLInputElement>) => void\n isValidApiVersion: boolean\n onChangePerspective: (evt: ChangeEvent<HTMLSelectElement>) => void\n url?: string\n perspective?: SupportedPerspective\n 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')}&nbsp;\n <QueryCopyLink\n href={url}\n onClick={(event) => {\n // This is a copy-to-clipboard action, not a navigation\n event.preventDefault()\n handleCopyUrl()\n }}\n >\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 {type ComponentProps} from 'react'\n\nimport {errorCode} from './QueryErrorDialog.css'\n\nexport function ErrorCode(props: ComponentProps<typeof Code>) {\n return <Code {...props} className={errorCode} />\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 {JsonInspector} from '@rexxars/react-json-inspector'\nimport {LinkIcon} from '@sanity/icons'\nimport {Code, rem, useTheme_v2 as useThemeV2} from '@sanity/ui'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport LRU from 'quick-lru'\nimport {type ReactNode} from 'react'\nimport {useDataset} from 'sanity'\nimport {IntentLink} from 'sanity/router'\n\nimport {\n codeFamilyVar,\n codeFontSizeVar,\n codeLineHeightVar,\n resultViewWrapper,\n space0Var,\n space2Var,\n space4HalfVar,\n space4Var,\n syntaxBooleanVar,\n syntaxConstantVar,\n syntaxNumberVar,\n syntaxPropertyVar,\n syntaxStringVar,\n} from './ResultView.css'\n\nconst lru = new LRU({maxSize: 50000})\n\nfunction ResultViewWrapper({children}: {children: ReactNode}) {\n const {color, font, space} = useThemeV2()\n const codeSize = font.code.sizes[2]\n\n return (\n <div\n className={resultViewWrapper}\n style={assignInlineVars({\n [codeFamilyVar]: font.code.family,\n [codeFontSizeVar]: `${codeSize.fontSize}px`,\n [codeLineHeightVar]: `${codeSize.lineHeight}px`,\n [space0Var]: `${rem(space[0])}`,\n [space2Var]: `${rem(space[2])}`,\n [space4Var]: `${rem(space[4])}`,\n [space4HalfVar]: `${rem(space[4] / 2)}`,\n [syntaxPropertyVar]: color.syntax.property,\n [syntaxConstantVar]: color.syntax.constant,\n [syntaxStringVar]: color.syntax.string,\n [syntaxBooleanVar]: color.syntax.boolean,\n [syntaxNumberVar]: color.syntax.number,\n })}\n >\n {children}\n </div>\n )\n}\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 // oxlint-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 // oxlint-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","import {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 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 // oxlint-disable-next-line react/react-compiler\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 // oxlint-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","/* oxlint-disable @sanity/i18n/no-attribute-string-literals */\n/* oxlint-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","children","useTheme","space","t3","t4","t5","t6","t7","assignInlineVars","linePaddingLeftVar","contentBorderRightWidthVar","contentPaddingTopVar","t8","editorRoot","VisionCodeMirror","forwardRef","ref","initialValue","sanityTheme","codeMirrorRef","useRef","Symbol","for","newContent","editorView","current","view","currentDoc","state","doc","toString","dispatch","changes","from","to","length","insert","EditorSelection","resetEditorContent","useImperativeHandle","extensions","onChange","displayName","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","root","Header","header","StyledLabel","styledLabel","SplitpaneContainer","splitpaneContainer","QueryCopyLink","queryCopyLink","InputBackgroundContainer","inputBackgroundContainer","InputBackgroundContainerLeft","inputBackgroundContainerLeft","InputContainer","inputContainer","ResultOuterContainer","resultOuterContainer","ResultInnerContainer","resultInnerContainer","ResultContainer","isInvalid","resultContainer","resultContainerInvalid","Result","result","ResultFooter","resultFooter","TimingsCard","timingsCard","TimingsTextContainer","font","useThemeV2","textSize","text","ascenderHeight","descenderHeight","timingsTextMinHeightVar","timingsTextContainer","DownloadsCard","downloadsCard","SaveResultLabel","saveResultSpanGapVar","saveResultLabel","ControlsContainer","controlsContainer","defaultValue","ParamsEditor","paramsError","hasValidParams","editorRef","useTranslation","visionLocaleNamespace","newValue","handleChangeRaw","debounce","handleChange","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","a","b","getTime","data","FixedHeader","fixedHeader","ScrollContainer","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","Stack","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","perspectivePopoverContent","PerspectivePopoverLink","perspectivePopoverLink","Dot","dot","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","preventDefault","CopyIcon","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","errorCode","QueryErrorDetails","details","bb0","mapToLegacyDetails","line","dashLine","column","columnEnd","lineNumber","start","end","lineStart","lastIndexOf","match","indexOf","repeat","hats","QueryErrorDialog","lru","LRU","ResultViewWrapper","codeSize","codeFamilyVar","codeFontSizeVar","codeLineHeightVar","space0Var","space2Var","space4Var","space4HalfVar","syntaxPropertyVar","syntaxConstantVar","syntaxStringVar","syntaxBooleanVar","syntaxNumberVar","resultViewWrapper","ResultView","datasetName","workspaceDataset","useDataset","isRecord","DocumentEditLabel","isExpanded","toggleExpanded","isKey","keypath","endsWith","keyPath","cached","segments","depthLimit","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","preventSave","evt","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","withConfig","allowReconfigure","client","cancelQuerySubscription","cancelListenerSubscription","context","hasQuery","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","filterResponse","res","ms","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","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.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.tsx","../../src/components/usePaneSize.ts","../../src/components/VisionGuiControls.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.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 {type Extension} from '@codemirror/state'\nimport {rem, useTheme} from '@sanity/ui'\nimport CodeMirror, {\n EditorSelection,\n type ReactCodeMirrorProps,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {forwardRef, type ReactNode, useCallback, useImperativeHandle, useRef, useState} from 'react'\n\nimport {useCodemirrorTheme} from './useCodemirrorTheme'\nimport {\n contentBorderRightWidthVar,\n contentPaddingTopVar,\n editorRoot,\n linePaddingLeftVar,\n} from './VisionCodeMirror.css'\n\nfunction EditorRoot({children}: {children: ReactNode}) {\n const {sanity} = useTheme()\n\n return (\n <div\n className={editorRoot}\n style={assignInlineVars({\n [linePaddingLeftVar]: `${rem(sanity.space[3])}`,\n [contentBorderRightWidthVar]: `${rem(sanity.space[4])}`,\n [contentPaddingTopVar]: `${rem(sanity.space[5])}`,\n })}\n >\n {children}\n </div>\n )\n}\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, useTheme_v2 as useThemeV2} from '@sanity/ui'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {type ComponentProps, type ComponentPropsWithoutRef, forwardRef} from 'react'\n\nimport {\n controlsContainer,\n downloadsCard,\n header,\n inputBackgroundContainer,\n inputBackgroundContainerLeft,\n inputContainer,\n queryCopyLink,\n result,\n resultContainer,\n resultContainerInvalid,\n resultFooter,\n resultInnerContainer,\n resultOuterContainer,\n root,\n saveResultLabel,\n saveResultSpanGapVar,\n splitpaneContainer,\n styledLabel,\n timingsCard,\n timingsTextContainer,\n timingsTextMinHeightVar,\n} from './VisionGui.css'\n\nexport const Root = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<typeof Flex>>(\n function Root(props, ref) {\n return <Flex {...props} ref={ref} className={root} />\n },\n)\n\nexport function Header(props: ComponentProps<typeof Card>) {\n return <Card {...props} className={header} />\n}\n\nexport function StyledLabel(props: ComponentProps<typeof Label>) {\n return <Label {...props} className={styledLabel} />\n}\n\nexport function SplitpaneContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={splitpaneContainer} />\n}\n\nexport function QueryCopyLink(props: ComponentProps<'a'>) {\n return <a {...props} className={queryCopyLink} />\n}\n\nexport function InputBackgroundContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={inputBackgroundContainer} />\n}\n\nexport function InputBackgroundContainerLeft(props: ComponentProps<typeof Box>) {\n return (\n <Box {...props} className={`${inputBackgroundContainer} ${inputBackgroundContainerLeft}`} />\n )\n}\n\nexport function InputContainer(props: ComponentProps<typeof Card>) {\n return <Card {...props} className={inputContainer} />\n}\n\nexport function ResultOuterContainer(props: ComponentProps<typeof Flex>) {\n return <Flex {...props} className={resultOuterContainer} />\n}\n\nexport function ResultInnerContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={resultInnerContainer} />\n}\n\nexport function ResultContainer({\n isInvalid,\n ...props\n}: ComponentProps<typeof Card> & {isInvalid: boolean}) {\n return (\n <Card\n {...props}\n className={isInvalid ? `${resultContainer} ${resultContainerInvalid}` : resultContainer}\n />\n )\n}\n\nexport function Result(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={result} />\n}\n\nexport function ResultFooter(props: ComponentProps<typeof Flex>) {\n return <Flex {...props} className={resultFooter} />\n}\n\nexport function TimingsCard(props: ComponentProps<typeof Card>) {\n return <Card {...props} className={timingsCard} />\n}\n\nexport function TimingsTextContainer(props: ComponentProps<typeof Flex>) {\n const {space, font} = useThemeV2()\n const textSize = font.text.sizes[2]\n const minHeight = rem(\n space[3] * 2 + textSize.lineHeight - textSize.ascenderHeight - textSize.descenderHeight,\n )\n\n return (\n <Flex\n {...props}\n className={timingsTextContainer}\n style={assignInlineVars({[timingsTextMinHeightVar]: `${minHeight}`})}\n />\n )\n}\n\nexport function DownloadsCard(props: ComponentProps<typeof Card>) {\n return <Card {...props} className={downloadsCard} />\n}\n\nexport function SaveResultLabel(props: ComponentProps<typeof Text>) {\n const {space} = useThemeV2()\n\n return (\n <Text\n {...props}\n className={saveResultLabel}\n style={assignInlineVars({[saveResultSpanGapVar]: `${rem(space[3])}`})}\n />\n )\n}\n\nexport function ControlsContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={controlsContainer} />\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 {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 ComponentProps, 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.css'\nimport {type ParsedUrlState} from './VisionGui'\nimport {StyledLabel} from './VisionGui.styled'\n\nfunction FixedHeader(props: ComponentProps<typeof Stack>) {\n return <Stack {...props} className={fixedHeader} />\n}\n\nfunction ScrollContainer(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={scrollContainer} />\n}\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 aria-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 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 size={1}>{shortQueryPreview}</Code>\n </Tooltip>\n ) : (\n <Code />\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 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 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 {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 {type ComponentProps, useCallback, useRef, useState} from 'react'\nimport {Translate, useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {dot, perspectivePopoverContent, perspectivePopoverLink} from './PerspectivePopover.css'\n\nfunction PerspectivePopoverContent(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={perspectivePopoverContent} />\n}\n\nfunction PerspectivePopoverLink(props: ComponentProps<'a'>) {\n return <a {...props} className={perspectivePopoverLink} />\n}\n\nfunction Dot({tone}: {tone: CardTone}) {\n return <div className={dot} style={{backgroundColor: `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 rel=\"noopener noreferrer\"\n >\n {t('settings.perspectives.action.docs-link')} &rarr;\n </PerspectivePopoverLink>\n </Text>\n </Card>\n </Stack>\n </PerspectivePopoverContent>\n }\n placement=\"bottom-start\"\n portal\n padding={3}\n ref={popoverRef}\n open={open}\n >\n <Button\n icon={HelpCircleIcon}\n mode=\"bleed\"\n padding={2}\n paddingRight={1}\n tone=\"primary\"\n fontSize={1}\n ref={buttonRef}\n onClick={handleClick}\n selected={open}\n >\n <Dot tone={SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? 'caution' : 'primary'} />\n </Button>\n </Popover>\n )\n}\n","import {CopyIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Grid, Inline, Select, Stack, TextInput, Tooltip} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type ComponentType,\n Fragment,\n type RefObject,\n useCallback,\n useMemo,\n useRef,\n} from 'react'\nimport {type PerspectiveContextValue, type TFunction, usePerspective, useTranslation} from 'sanity'\n\nimport {API_VERSIONS} from '../apiVersions'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n hasPinnedPerspective,\n SUPPORTED_PERSPECTIVES,\n type SupportedPerspective,\n} from '../perspectives'\nimport {PerspectivePopover} from './PerspectivePopover'\nimport {Header, QueryCopyLink, StyledLabel} from './VisionGui.styled'\n\nconst PinnedReleasePerspectiveOption: ComponentType<{\n pinnedPerspective: PerspectiveContextValue\n t: TFunction\n}> = ({pinnedPerspective, t}) => {\n const name =\n typeof pinnedPerspective.selectedPerspective === 'object'\n ? pinnedPerspective.selectedPerspective.metadata.title\n : pinnedPerspective.selectedPerspectiveName\n\n const label = hasPinnedPerspective(pinnedPerspective)\n ? `(${t('settings.perspectives.pinned-release-label')})`\n : t('settings.perspectives.pinned-release-label')\n\n const text = useMemo(\n () => [name, label].filter((value) => typeof value !== 'undefined').join(' '),\n [label, name],\n )\n\n return (\n <option value=\"pinnedRelease\" disabled={!hasPinnedPerspective(pinnedPerspective)}>\n {text}\n </option>\n )\n}\n\nexport interface VisionGuiHeaderProps {\n onChangeDataset: (evt: ChangeEvent<HTMLSelectElement>) => void\n dataset: string\n customApiVersion: string | false\n apiVersion: string\n onChangeApiVersion: (evt: ChangeEvent<HTMLSelectElement>) => void\n datasets: string[]\n customApiVersionElementRef: RefObject<HTMLInputElement | null>\n onCustomApiVersionChange: (evt: ChangeEvent<HTMLInputElement>) => void\n isValidApiVersion: boolean\n onChangePerspective: (evt: ChangeEvent<HTMLSelectElement>) => void\n url?: string\n perspective?: SupportedPerspective\n 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')}&nbsp;\n <QueryCopyLink\n href={url}\n onClick={(event) => {\n // This is a copy-to-clipboard action, not a navigation\n event.preventDefault()\n handleCopyUrl()\n }}\n >\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 {type ComponentProps} from 'react'\n\nimport {errorCode} from './QueryErrorDialog.css'\n\nexport function ErrorCode(props: ComponentProps<typeof Code>) {\n return <Code {...props} className={errorCode} />\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 {JsonInspector} from '@rexxars/react-json-inspector'\nimport {LinkIcon} from '@sanity/icons'\nimport {Code, rem, useTheme_v2 as useThemeV2} from '@sanity/ui'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport LRU from 'quick-lru'\nimport {type ReactNode} from 'react'\nimport {useDataset} from 'sanity'\nimport {IntentLink} from 'sanity/router'\n\nimport {\n codeFamilyVar,\n codeFontSizeVar,\n codeLineHeightVar,\n resultViewWrapper,\n space0Var,\n space2Var,\n space4HalfVar,\n space4Var,\n syntaxBooleanVar,\n syntaxConstantVar,\n syntaxNumberVar,\n syntaxPropertyVar,\n syntaxStringVar,\n} from './ResultView.css'\n\nconst lru = new LRU({maxSize: 50000})\n\nfunction ResultViewWrapper({children}: {children: ReactNode}) {\n const {color, font, space} = useThemeV2()\n const codeSize = font.code.sizes[2]\n\n return (\n <div\n className={resultViewWrapper}\n style={assignInlineVars({\n [codeFamilyVar]: font.code.family,\n [codeFontSizeVar]: `${codeSize.fontSize}px`,\n [codeLineHeightVar]: `${codeSize.lineHeight}px`,\n [space0Var]: `${rem(space[0])}`,\n [space2Var]: `${rem(space[2])}`,\n [space4Var]: `${rem(space[4])}`,\n [space4HalfVar]: `${rem(space[4] / 2)}`,\n [syntaxPropertyVar]: color.syntax.property,\n [syntaxConstantVar]: color.syntax.constant,\n [syntaxStringVar]: color.syntax.string,\n [syntaxBooleanVar]: color.syntax.boolean,\n [syntaxNumberVar]: color.syntax.number,\n })}\n >\n {children}\n </div>\n )\n}\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 {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\n\ninterface SaveButtonProps {\n blobUrl: string | undefined\n}\n\nexport function SaveCsvButton({blobUrl}: SaveButtonProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n // An anchor cannot be disabled, so when there is nothing to download we render a plain\n // disabled button (which also prevents the click natively) instead of a disabled link.\n if (!blobUrl) {\n return (\n <Tooltip content={t('result.save-result-as-csv.not-csv-encodable')} placement=\"top\">\n <Button\n disabled\n icon={DocumentSheetIcon}\n mode=\"ghost\"\n // oxlint-disable-next-line @sanity/i18n/no-attribute-string-literals\n text=\"CSV\" // String is a File extension\n tone=\"default\"\n />\n </Tooltip>\n )\n }\n\n return (\n <Button\n as=\"a\"\n download=\"query-result.csv\"\n href={blobUrl}\n icon={DocumentSheetIcon}\n mode=\"ghost\"\n // oxlint-disable-next-line @sanity/i18n/no-attribute-string-literals\n text=\"CSV\" // String is a File extension\n tone=\"default\"\n />\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 // oxlint-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","import {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 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 // oxlint-disable-next-line react/react-compiler\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 // oxlint-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","/* oxlint-disable @sanity/i18n/no-attribute-string-literals */\n/* oxlint-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","children","useTheme","space","t3","t4","t5","t6","t7","assignInlineVars","linePaddingLeftVar","contentBorderRightWidthVar","contentPaddingTopVar","t8","editorRoot","VisionCodeMirror","forwardRef","ref","initialValue","sanityTheme","codeMirrorRef","useRef","Symbol","for","newContent","editorView","current","view","currentDoc","state","doc","toString","dispatch","changes","from","to","length","insert","EditorSelection","resetEditorContent","useImperativeHandle","extensions","onChange","displayName","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","root","Header","header","StyledLabel","styledLabel","SplitpaneContainer","splitpaneContainer","QueryCopyLink","queryCopyLink","InputBackgroundContainer","inputBackgroundContainer","InputBackgroundContainerLeft","inputBackgroundContainerLeft","InputContainer","inputContainer","ResultOuterContainer","resultOuterContainer","ResultInnerContainer","resultInnerContainer","ResultContainer","isInvalid","resultContainer","resultContainerInvalid","Result","result","ResultFooter","resultFooter","TimingsCard","timingsCard","TimingsTextContainer","font","useThemeV2","textSize","text","ascenderHeight","descenderHeight","timingsTextMinHeightVar","timingsTextContainer","DownloadsCard","downloadsCard","SaveResultLabel","saveResultSpanGapVar","saveResultLabel","ControlsContainer","controlsContainer","defaultValue","ParamsEditor","paramsError","hasValidParams","editorRef","useTranslation","visionLocaleNamespace","newValue","handleChangeRaw","debounce","handleChange","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","a","b","getTime","data","FixedHeader","fixedHeader","ScrollContainer","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","Stack","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","perspectivePopoverContent","PerspectivePopoverLink","perspectivePopoverLink","Dot","dot","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","preventDefault","CopyIcon","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","errorCode","QueryErrorDetails","details","bb0","mapToLegacyDetails","line","dashLine","column","columnEnd","lineNumber","start","end","lineStart","lastIndexOf","match","indexOf","repeat","hats","QueryErrorDialog","lru","LRU","ResultViewWrapper","codeSize","codeFamilyVar","codeFontSizeVar","codeLineHeightVar","space0Var","space2Var","space4Var","space4HalfVar","syntaxPropertyVar","syntaxConstantVar","syntaxStringVar","syntaxBooleanVar","syntaxNumberVar","resultViewWrapper","ResultView","datasetName","workspaceDataset","useDataset","isRecord","DocumentEditLabel","isExpanded","toggleExpanded","isKey","keypath","endsWith","keyPath","cached","segments","depthLimit","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","SaveCsvButton","blobUrl","DocumentSheetIcon","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","withConfig","allowReconfigure","client","cancelQuerySubscription","cancelListenerSubscription","context","hasQuery","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","filterResponse","res","ms","handleQueryExecution","newPerspective","setPerspective","evt","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","withCacheClear","SanityVision","tool"],"mappings":"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"}