@sanity/vision 4.16.0-next.39 → 4.16.0-next.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SanityVision.js","sources":["../../src/apiVersions.ts","../../src/components/DelayedSpinner.tsx","../../src/codemirror/extensions.ts","../../src/codemirror/useCodemirrorTheme.ts","../../src/codemirror/VisionCodeMirror.styled.tsx","../../src/codemirror/VisionCodeMirror.tsx","../../src/perspectives.ts","../../src/util/encodeQueryString.ts","../../src/util/isPlainObject.ts","../../src/util/localStorage.ts","../../src/util/parseApiQueryString.ts","../../src/util/prefixApiVersion.ts","../../src/util/validateApiVersion.ts","../../src/util/tryParseParams.ts","../../src/components/VisionGui.styled.tsx","../../src/components/ParamsEditor.tsx","../../src/hooks/useSavedQueries.ts","../../src/components/QueryRecall.styled.tsx","../../src/components/QueryRecall.tsx","../../src/components/usePaneSize.ts","../../src/components/VisionGuiControls.tsx","../../src/components/PerspectivePopover.styled.tsx","../../src/components/PerspectivePopover.tsx","../../src/components/VisionGuiHeader.tsx","../../src/util/getBlobUrl.ts","../../src/components/QueryErrorDialog.styled.tsx","../../src/components/QueryErrorDetails.tsx","../../src/components/QueryErrorDialog.tsx","../../src/components/ResultView.styled.tsx","../../src/components/ResultView.tsx","../../src/components/SaveResultButtons.tsx","../../src/components/VisionGuiResult.tsx","../../src/components/VisionGui.tsx","../../src/hooks/useDatasets.ts","../../src/containers/VisionContainer.tsx","../../src/containers/VisionErrorBoundary.tsx","../../src/SanityVision.tsx"],"sourcesContent":["export const API_VERSIONS = [\n 'v1',\n 'vX',\n 'v2021-03-25',\n 'v2021-10-21',\n 'v2022-03-07',\n 'v2025-02-19',\n `v${new Date().toISOString().split('T')[0]}`,\n]\nexport const [DEFAULT_API_VERSION] = API_VERSIONS.slice(-1)\n","import {Spinner} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\n\ninterface DelayedSpinnerProps {\n delay?: number\n}\n\n// Waits for X ms before showing a spinner\nexport function DelayedSpinner(props: DelayedSpinnerProps) {\n const [show, setShow] = useState(false)\n\n useEffect(() => {\n const timer = setTimeout(() => setShow(true), props.delay || 500)\n return () => clearTimeout(timer)\n }, [props.delay])\n\n return show ? <Spinner muted size={4} /> : null\n}\n","import {closeBrackets} from '@codemirror/autocomplete'\nimport {defaultKeymap, history, historyKeymap} from '@codemirror/commands'\nimport {javascriptLanguage} from '@codemirror/lang-javascript'\nimport {\n bracketMatching,\n defaultHighlightStyle,\n indentOnInput,\n syntaxHighlighting,\n} from '@codemirror/language'\nimport {highlightSelectionMatches} from '@codemirror/search'\nimport {type Extension} from '@codemirror/state'\nimport {\n drawSelection,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n} from '@codemirror/view'\n\nexport const codemirrorExtensions: Extension[] = [\n [javascriptLanguage],\n lineNumbers(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSelectionMatches(),\n highlightSpecialChars(),\n indentOnInput(),\n bracketMatching(),\n closeBrackets(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, {fallback: true}),\n keymap.of(\n [\n // Override the default keymap for Mod-Enter to not insert a new line, we have a custom event handler for executing queries\n {key: 'Mod-Enter', run: () => true},\n\n // Add the default keymap and history keymap\n defaultKeymap,\n historyKeymap,\n ]\n .flat()\n .filter(Boolean),\n ),\n]\n","import {HighlightStyle, syntaxHighlighting} from '@codemirror/language'\nimport {EditorView} from '@codemirror/view'\nimport {tags as t} from '@lezer/highlight'\nimport {hues} from '@sanity/color'\nimport {rem, type Theme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function useCodemirrorTheme(theme: Theme) {\n const cmTheme = useMemo(() => createTheme(theme), [theme])\n const cmHighlight = useMemo(() => syntaxHighlighting(createHighlight(theme)), [theme])\n\n return [cmTheme, cmHighlight]\n}\n\nfunction createTheme(theme: Theme) {\n const {color, fonts} = theme.sanity\n const card = color.card.enabled\n const cursor = hues.blue[color.dark ? 400 : 500].hex\n const selection = hues.gray[theme.sanity.color.dark ? 900 : 100].hex\n\n return EditorView.theme(\n {\n '&': {\n color: card.fg,\n backgroundColor: card.bg,\n },\n\n '.cm-content': {\n caretColor: cursor,\n },\n\n '.cm-editor': {\n fontFamily: fonts.code.family,\n fontSize: rem(fonts.code.sizes[1].fontSize),\n lineHeight: 'inherit',\n },\n\n '.cm-cursor, .cm-dropCursor': {borderLeftColor: cursor},\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: selection,\n },\n\n '.cm-panels': {backgroundColor: card.bg, color: card.fg},\n '.cm-panels.cm-panels-top': {borderBottom: `2px solid ${card.border}`},\n '.cm-panels.cm-panels-bottom': {borderTop: `2px solid ${card.border}`},\n },\n {dark: color.dark},\n )\n}\n\nfunction createHighlight(theme: Theme) {\n const c = theme.sanity.color.base\n const s = theme.sanity.color.syntax\n return HighlightStyle.define([\n {tag: t.keyword, color: s.keyword},\n {tag: [t.propertyName, t.name, t.deleted, t.character, t.macroName], color: s.property},\n {tag: [t.function(t.variableName), t.labelName], color: s.function},\n {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: s.variable},\n {tag: [t.definition(t.name), t.separator], color: s.constant},\n {\n tag: [\n t.typeName,\n t.className,\n t.number,\n t.changed,\n t.annotation,\n t.modifier,\n t.self,\n t.namespace,\n ],\n color: s.number,\n },\n {\n tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)],\n color: s.operator,\n },\n {tag: [t.meta, t.comment], color: s.comment},\n {tag: t.strong, fontWeight: 'bold'},\n {tag: t.emphasis, fontStyle: 'italic'},\n {tag: t.strikethrough, textDecoration: 'line-through'},\n {tag: t.heading, fontWeight: 'bold', color: s.property},\n {tag: [t.atom, t.bool, t.special(t.variableName)], color: s.boolean},\n {tag: [t.processingInstruction, t.string, t.inserted], color: s.string},\n {tag: t.invalid, color: c.fg},\n ])\n}\n","import {rem} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const EditorRoot = styled.div`\n width: 100%;\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n overflow: clip;\n position: relative;\n display: flex;\n\n & .cm-theme {\n width: 100%;\n }\n\n & .cm-editor {\n height: 100%;\n\n font-size: 16px;\n line-height: 21px;\n }\n\n & .cm-line {\n padding-left: ${({theme}) => rem(theme.sanity.space[3])};\n }\n\n & .cm-content {\n border-right-width: ${({theme}) => rem(theme.sanity.space[4])} !important;\n padding-top: ${({theme}) => rem(theme.sanity.space[5])};\n }\n`\n","import {useTheme} from '@sanity/ui'\nimport CodeMirror, {\n EditorSelection,\n type ReactCodeMirrorProps,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror'\nimport {forwardRef, useCallback, useImperativeHandle, useRef, useState} from 'react'\n\nimport {codemirrorExtensions} from './extensions'\nimport {useCodemirrorTheme} from './useCodemirrorTheme'\nimport {EditorRoot} from './VisionCodeMirror.styled'\n\nexport interface VisionCodeMirrorHandle {\n resetEditorContent: (newContent: string) => void\n}\n\nexport const VisionCodeMirror = forwardRef<\n VisionCodeMirrorHandle,\n Pick<ReactCodeMirrorProps, 'onChange'> & {\n initialValue: ReactCodeMirrorProps['value']\n }\n>((props, ref) => {\n // The value prop is only passed for initial value, and is not updated when the parent component updates the value.\n // If you need to update the value, use the resetEditorContent function.\n const [initialValue] = useState(props.initialValue)\n const sanityTheme = useTheme()\n const theme = useCodemirrorTheme(sanityTheme)\n const codeMirrorRef = useRef<ReactCodeMirrorRef>(null)\n\n const resetEditorContent = useCallback((newContent: string) => {\n const editorView = codeMirrorRef.current?.view\n if (!editorView) return\n\n const currentDoc = editorView.state.doc.toString()\n if (newContent !== currentDoc) {\n editorView.dispatch({\n changes: {from: 0, to: currentDoc.length, insert: newContent},\n selection: EditorSelection.cursor(newContent.length), // Place cursor at end\n })\n }\n }, [])\n\n useImperativeHandle(\n ref,\n () => ({\n resetEditorContent,\n }),\n [resetEditorContent],\n )\n\n return (\n <EditorRoot>\n <CodeMirror\n ref={codeMirrorRef}\n basicSetup={false}\n theme={theme}\n extensions={codemirrorExtensions}\n value={initialValue}\n onChange={props.onChange}\n />\n </EditorRoot>\n )\n})\n\n// Add display name\nVisionCodeMirror.displayName = 'VisionCodeMirror'\n","import {type ClientPerspective} from '@sanity/client'\nimport isEqual from 'react-fast-compare'\nimport {type PerspectiveContextValue, 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 hasPinnedPerspectiveChanged(\n previous: PerspectiveContextValue,\n next: PerspectiveContextValue,\n): boolean {\n const hasPerspectiveStackChanged = !isEqual(previous.perspectiveStack, next.perspectiveStack)\n\n return (\n previous.selectedPerspectiveName !== next.selectedPerspectiveName || hasPerspectiveStackChanged\n )\n}\n\nexport function getActivePerspective({\n visionPerspective,\n perspectiveStack,\n 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 (err) {\n return {}\n }\n }\n}\n\nfunction supportsLocalStorage() {\n const mod = 'lsCheck'\n try {\n localStorage.setItem(mod, mod)\n localStorage.removeItem(mod)\n return true\n } catch (err) {\n return false\n }\n}\n","export interface ParsedApiQueryString {\n query: string\n params: Record<string, unknown>\n options: Record<string, string>\n}\n\nexport function parseApiQueryString(qs: URLSearchParams): ParsedApiQueryString {\n const params: Record<string, unknown> = {}\n const options: Record<string, string> = {}\n\n for (const [key, value] of qs.entries()) {\n if (key[0] === '$') {\n params[key.slice(1)] = JSON.parse(value)\n continue\n }\n\n if (key === 'perspective') {\n options[key] = value\n continue\n }\n }\n\n return {query: qs.get('query') || '', params, options}\n}\n","export function prefixApiVersion(version: string): string {\n if (version[0] !== 'v' && version !== 'other') {\n return `v${version}`\n }\n\n return version\n}\n","export function validateApiVersion(apiVersion: string): boolean {\n const parseableApiVersion = apiVersion.replace(/^v/, '').trim().toUpperCase()\n\n const isValidApiVersion =\n parseableApiVersion.length > 0 &&\n (parseableApiVersion === 'X' ||\n parseableApiVersion === '1' ||\n (/^\\d{4}-\\d{2}-\\d{2}$/.test(parseableApiVersion) && !isNaN(Date.parse(parseableApiVersion))))\n\n return isValidApiVersion\n}\n","import JSON5 from 'json5'\nimport {type TFunction} from 'sanity'\n\nexport function tryParseParams(\n val: string,\n t: TFunction<'vision', undefined>,\n): Record<string, unknown> | Error {\n try {\n const parsed = val ? JSON5.parse(val) : {}\n return typeof parsed === 'object' && parsed && !Array.isArray(parsed) ? parsed : {}\n } catch (err) {\n // JSON5 always prefixes the error message with JSON5:, so we remove it\n // to clean up the error tooltip\n err.message = `${t('params.error.params-invalid-json')}:\\n\\n${err.message.replace(\n 'JSON5:',\n '',\n )}`\n return err\n }\n}\n","import {Box, Card, Flex, Label, rem, Text} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const Root = styled(Flex)`\n .sidebarPanes .Pane {\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n & .Resizer {\n background: var(--card-border-color);\n opacity: 1;\n z-index: 1;\n box-sizing: border-box;\n background-clip: padding-box;\n border: solid transparent;\n }\n\n & .Resizer:hover {\n border-color: var(--card-shadow-ambient-color);\n }\n\n & .Resizer.horizontal {\n height: 11px;\n margin: -5px 0;\n border-width: 5px 0;\n cursor: row-resize;\n width: 100%;\n z-index: 4;\n }\n\n & .Resizer.vertical {\n width: 11px;\n margin: 0 -5px;\n border-width: 0 5px;\n cursor: col-resize;\n z-index: 2; /* To prevent the resizer from being hidden behind CodeMirror scroll area */\n }\n\n .Resizer.disabled {\n cursor: not-allowed;\n }\n\n .Resizer.disabled:hover {\n border-color: transparent;\n }\n`\n\nRoot.displayName = 'Root'\n\nexport const Header = styled(Card)`\n border-bottom: 1px solid var(--card-border-color);\n`\n\nexport const StyledLabel = styled(Label)`\n flex: 1;\n`\n\nexport const SplitpaneContainer = styled(Box)`\n position: relative;\n`\n\nexport const QueryCopyLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n\nexport const InputBackgroundContainer = styled(Box)`\n position: absolute;\n top: 1rem;\n left: 0;\n padding: 0;\n margin: 0;\n z-index: 10;\n right: 0;\n\n ${StyledLabel} {\n user-select: none;\n }\n`\n\nexport const InputBackgroundContainerLeft = styled(InputBackgroundContainer)`\n // This is so its aligned with the gutters of CodeMirror\n left: 33px;\n`\n\nexport const InputContainer = styled(Card)`\n width: 100%;\n height: 100%;\n position: relative;\n flex-direction: column;\n`\n\nexport const ResultOuterContainer = styled(Flex)`\n height: 100%;\n`\n\nexport const ResultInnerContainer = styled(Box)`\n position: relative;\n`\n\nexport const ResultContainer = styled(Card)<{$isInvalid: boolean}>`\n height: 100%;\n width: 100%;\n position: absolute;\n max-width: 100%;\n\n ${({$isInvalid}) =>\n $isInvalid &&\n css`\n &:after {\n background-color: var(--card-bg-color);\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n }\n `}\n`\n\nexport const Result = styled(Box)`\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 20;\n`\n\nexport const ResultFooter = styled(Flex)`\n border-top: 1px solid var(--card-border-color);\n`\n\nexport const TimingsCard = styled(Card)`\n position: relative;\n`\n\nexport const TimingsContainer = styled(Box)`\n width: 100%;\n height: 100%;\n`\n\nexport const TimingsTextContainer = styled(Flex)`\n height: 100%;\n min-height: ${({theme}) =>\n rem(\n theme.sanity.space[3] * 2 +\n theme.sanity.fonts.text.sizes[2].lineHeight -\n theme.sanity.fonts.text.sizes[2].ascenderHeight -\n theme.sanity.fonts.text.sizes[2].descenderHeight,\n )};\n`\n\nexport const DownloadsCard = styled(Card)`\n position: relative;\n`\n\nexport const SaveResultLabel = styled(Text)`\n transform: initial;\n &:before,\n &:after {\n content: none;\n }\n > span {\n display: flex !important;\n gap: ${({theme}) => rem(theme.sanity.space[3])};\n align-items: center;\n }\n`\n\nexport const ControlsContainer = styled(Box)`\n border-top: 1px solid var(--card-border-color);\n`\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text, Tooltip} from '@sanity/ui'\nimport {debounce} from 'lodash'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {type TFunction, useTranslation} from 'sanity'\n\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {tryParseParams} from '../util/tryParseParams'\nimport {type Params} from './VisionGui'\nimport {InputBackgroundContainerLeft, StyledLabel} from './VisionGui.styled'\n\nconst defaultValue = `{\\n \\n}`\n\nexport interface ParamsEditorProps {\n value: string\n onChange: (changeEvt: string) => void\n paramsError: string | undefined\n hasValidParams: boolean\n editorRef: RefObject<VisionCodeMirrorHandle | null>\n}\n\nexport interface ParamsEditorChange {\n valid: boolean\n}\n\nexport function ParamsEditor(props: ParamsEditorProps) {\n const {onChange, paramsError, hasValidParams, editorRef} = props\n const {t} = useTranslation(visionLocaleNamespace)\n\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 />\n </Card>\n )\n}\n\nexport function parseParams(\n value: string,\n t: TFunction<typeof visionLocaleNamespace, undefined>,\n): Params {\n const parsedParams = tryParseParams(value, t)\n const params = parsedParams instanceof Error ? {} : parsedParams\n const validationError = parsedParams instanceof Error ? parsedParams.message : undefined\n const isValid = !validationError\n\n return {\n parsed: params,\n raw: value,\n valid: isValid,\n error: validationError,\n }\n}\n","import {uuid} from '@sanity/uuid' // Import the UUID library\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {map, startWith} from 'rxjs/operators'\nimport {type KeyValueStoreValue, useKeyValueStore} from 'sanity'\n\nconst STORED_QUERIES_NAMESPACE = 'studio.vision-tool.saved-queries'\n\nexport interface QueryConfig {\n _key: string\n url: string\n savedAt: string\n title?: string\n shared?: boolean\n}\n\nexport interface StoredQueries {\n queries: QueryConfig[]\n}\n\nconst defaultValue = {\n queries: [],\n}\nconst keyValueStoreKey = STORED_QUERIES_NAMESPACE\n\nexport function useSavedQueries(): {\n queries: QueryConfig[]\n saveQuery: (query: Omit<QueryConfig, '_key'>) => Promise<void>\n updateQuery: (query: QueryConfig) => Promise<void>\n deleteQuery: (key: string) => Promise<void>\n saving: boolean\n deleting: string[]\n saveQueryError: Error | undefined\n deleteQueryError: Error | undefined\n error: Error | undefined\n} {\n const keyValueStore = useKeyValueStore()\n\n const [value, setValue] = useState<StoredQueries>(defaultValue)\n const [saving, setSaving] = useState(false)\n const [deleting, setDeleting] = useState<string[]>([])\n const [saveQueryError, setSaveQueryError] = useState<Error | undefined>()\n const [deleteQueryError, setDeleteQueryError] = useState<Error | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const queries = useMemo(() => {\n return keyValueStore.getKey(keyValueStoreKey)\n }, [keyValueStore])\n\n useEffect(() => {\n const sub = queries\n .pipe(\n startWith(defaultValue as any),\n map((data: StoredQueries) => {\n if (!data) {\n return defaultValue\n }\n return data\n }),\n )\n .subscribe({\n next: setValue,\n error: (err) => setError(err as Error),\n })\n\n return () => sub?.unsubscribe()\n }, [queries, keyValueStore])\n\n const saveQuery = useCallback(\n async (query: Omit<QueryConfig, '_key'>) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const newQuery = {...query, _key: uuid()} // Add a unique _key to the query\n const newQueries = [newQuery, ...value.queries]\n setValue({queries: newQueries})\n await keyValueStore.setKey(keyValueStoreKey, {\n queries: newQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n } finally {\n setSaving(false)\n }\n },\n [keyValueStore, value.queries],\n )\n\n const updateQuery = useCallback(\n async (query: QueryConfig) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const updatedQueries = value.queries.map((q) =>\n q._key === query._key ? {...q, ...query} : q,\n )\n setValue({queries: updatedQueries})\n await keyValueStore.setKey(keyValueStoreKey, {\n queries: updatedQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n } finally {\n setSaving(false)\n }\n },\n [keyValueStore, value.queries],\n )\n\n const deleteQuery = useCallback(\n async (key: string) => {\n setDeleting((prev) => [...prev, key])\n setDeleteQueryError(undefined)\n try {\n const filteredQueries = value.queries.filter((q) => q._key !== key)\n setValue({queries: filteredQueries})\n await keyValueStore.setKey(keyValueStoreKey, {\n queries: filteredQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setDeleteQueryError(err as Error)\n } finally {\n setDeleting((prev) => prev.filter((k) => k !== key))\n }\n },\n [keyValueStore, value.queries],\n )\n\n return {\n queries: value.queries,\n saveQuery,\n updateQuery,\n deleteQuery,\n saving,\n deleting,\n saveQueryError,\n deleteQueryError,\n error,\n }\n}\n","import {Box, Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const FixedHeader = styled(Stack)`\n position: sticky;\n top: 0;\n background: ${({theme}) => theme.sanity.color.base.bg};\n z-index: 1;\n`\n\nexport const ScrollContainer = styled(Box)`\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${({theme}) => theme.sanity.color.base.border};\n border-radius: 4px;\n }\n`\n","import {AddIcon, SearchIcon, TrashIcon} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Code,\n Flex,\n Menu,\n MenuButton,\n MenuItem,\n Stack,\n Text,\n TextInput,\n useToast,\n} from '@sanity/ui'\nimport {isEqual} from 'lodash'\nimport {type ReactElement, useCallback, useState} from 'react'\nimport {ContextMenuButton, useDateTimeFormat, useTranslation} from 'sanity'\n\nimport {type QueryConfig, useSavedQueries} from '../hooks/useSavedQueries'\nimport {visionLocaleNamespace} from '../i18n'\nimport {FixedHeader, ScrollContainer} from './QueryRecall.styled'\nimport {type ParsedUrlState} from './VisionGui'\n\nexport function QueryRecall({\n url,\n getStateFromUrl,\n setStateFromParsedUrl,\n currentQuery,\n currentParams,\n generateUrl,\n}: {\n url?: string\n getStateFromUrl: (data: string) => ParsedUrlState | null\n setStateFromParsedUrl: (parsedUrlObj: ParsedUrlState) => void\n currentQuery: string\n currentParams: Record<string, unknown>\n generateUrl: (query: string, params: Record<string, unknown>) => string\n}): ReactElement {\n const toast = useToast()\n const {saveQuery, updateQuery, queries, deleteQuery, saving, deleting, saveQueryError} =\n useSavedQueries()\n const {t} = useTranslation(visionLocaleNamespace)\n const formatDate = useDateTimeFormat({\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n const [editingKey, setEditingKey] = useState<string | null>(null)\n const [editingTitle, setEditingTitle] = useState('')\n const [optimisticTitles, setOptimisticTitles] = useState<Record<string, string>>({})\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedUrl, setSelectedUrl] = useState<string | undefined>(url)\n\n const handleSave = useCallback(async () => {\n // Generate the correct URL first\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(new Date(duplicateQuery?.savedAt || ''))}`,\n })\n return\n }\n\n if (newUrl) {\n await saveQuery({\n url: newUrl,\n savedAt: new Date().toISOString(),\n title: 'Untitled',\n })\n // Set the selected URL to the newly saved query's URL\n setSelectedUrl(newUrl)\n }\n if (saveQueryError) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: saveQueryError.message,\n })\n } else {\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n }\n }, [\n queries,\n saveQueryError,\n toast,\n t,\n currentQuery,\n currentParams,\n getStateFromUrl,\n generateUrl,\n formatDate,\n saveQuery,\n ])\n\n const handleTitleSave = useCallback(\n async (query: QueryConfig, newTitle: string) => {\n setEditingKey(null)\n setOptimisticTitles((prev) => ({...prev, [query._key]: newTitle}))\n\n try {\n await updateQuery({\n ...query,\n title: newTitle,\n })\n // Clear optimistic title on success\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n } catch (err) {\n // Clear optimistic title on error\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [updateQuery, toast, t],\n )\n\n const handleUpdate = useCallback(\n async (query: QueryConfig) => {\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n // Skip the current query when checking for duplicates\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(\n new Date(duplicateQuery?.savedAt || ''),\n )}`,\n })\n return\n }\n\n try {\n await updateQuery({\n ...query,\n url: newUrl,\n savedAt: new Date().toISOString(),\n })\n setSelectedUrl(newUrl)\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [\n currentQuery,\n currentParams,\n formatDate,\n generateUrl,\n updateQuery,\n toast,\n t,\n queries,\n getStateFromUrl,\n ],\n )\n\n const filteredQueries = queries?.filter((q) => {\n return q?.title?.toLowerCase().includes(searchQuery.toLowerCase())\n })\n\n return (\n <ScrollContainer>\n <FixedHeader space={3}>\n <Flex padding={3} paddingTop={4} paddingBottom={0} justify=\"space-between\" align=\"center\">\n <Text weight=\"semibold\" style={{textTransform: 'capitalize'}} size={4}>\n {t('label.saved-queries')}\n </Text>\n <Button\n label={t('action.save-query')}\n icon={AddIcon}\n disabled={saving}\n onClick={handleSave}\n mode=\"bleed\"\n />\n </Flex>\n <Box padding={3} paddingTop={0}>\n <TextInput\n placeholder={t('label.search-queries')}\n icon={SearchIcon}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.currentTarget.value)}\n />\n </Box>\n </FixedHeader>\n <Stack paddingY={3}>\n {filteredQueries?.map((q) => {\n const queryObj = getStateFromUrl(q.url)\n const isSelected = selectedUrl === q.url\n\n // Compare against current live state\n const areQueriesEqual =\n queryObj && currentQuery === queryObj.query && isEqual(currentParams, queryObj.params)\n\n const isEdited = isSelected && !areQueriesEqual\n return (\n <Card\n key={q._key}\n width={'fill'}\n padding={4}\n border\n tone={isSelected ? 'positive' : 'default'}\n onClick={() => {\n setSelectedUrl(q.url) // Update the selected query immediately\n const parsedUrl = getStateFromUrl(q.url)\n if (parsedUrl) {\n setStateFromParsedUrl(parsedUrl)\n }\n }}\n style={{position: 'relative'}}\n >\n <Stack space={3}>\n <Flex justify=\"space-between\" align={'center'}>\n <Flex align=\"center\" gap={2} paddingRight={1}>\n {editingKey === q._key ? (\n <TextInput\n value={editingTitle}\n onChange={(event) => setEditingTitle(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n void handleTitleSave(q, editingTitle)\n } else if (event.key === 'Escape') {\n setEditingKey(null)\n }\n }}\n onBlur={() => handleTitleSave(q, editingTitle)}\n autoFocus\n style={{maxWidth: '170px', height: '24px'}}\n />\n ) : (\n <Text\n weight=\"bold\"\n size={3}\n textOverflow=\"ellipsis\"\n style={{maxWidth: '170px', cursor: 'pointer', padding: '4px 0'}}\n title={\n optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)\n }\n onClick={() => {\n setEditingKey(q._key)\n setEditingTitle(q.title || q._key.slice(0, 5))\n }}\n >\n {optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)}\n </Text>\n )}\n {isEdited && (\n <Box\n style={{\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: 'var(--card-focus-ring-color)',\n }}\n />\n )}\n </Flex>\n <MenuButton\n button={<ContextMenuButton />}\n id={`${q._key}-menu`}\n menu={\n <Menu\n // style={{background: 'white', backgroundColor: 'white', borderRadius: '11%'}}\n >\n <MenuItem\n tone=\"critical\"\n padding={3}\n icon={TrashIcon}\n text={t('action.delete')}\n onClick={(event) => {\n event.stopPropagation()\n void deleteQuery(q._key)\n }}\n />\n </Menu>\n }\n popover={{portal: true, placement: 'bottom-end', tone: 'default'}}\n />\n </Flex>\n\n <Code muted>{queryObj?.query.split('{')[0]}</Code>\n\n <Flex align=\"center\" gap={1}>\n <Text size={1} muted>\n {formatDate.format(new Date(q.savedAt || ''))}\n </Text>\n </Flex>\n\n {isEdited && (\n <Button\n mode=\"ghost\"\n tone=\"default\"\n size={1}\n padding={2}\n style={{\n height: '24px',\n position: 'absolute',\n right: '16px',\n bottom: '16px',\n fontSize: '12px',\n }}\n text={t('action.update')}\n onClick={(e) => {\n e.stopPropagation()\n void handleUpdate(q)\n }}\n />\n )}\n </Stack>\n </Card>\n )\n })}\n </Stack>\n </ScrollContainer>\n )\n}\n","import {useEffect, useState} from 'react'\n\ninterface PaneSizeOptions {\n defaultSize: number\n size?: number\n allowResize: boolean\n minSize: number\n maxSize: number\n}\nfunction narrowBreakpoint(): boolean {\n return typeof window !== 'undefined' && window.innerWidth > 600\n}\n\nfunction calculatePaneSizeOptions(height: number | undefined): PaneSizeOptions {\n let rootHeight = height\n\n if (!rootHeight) {\n // Initial root height without header\n rootHeight =\n typeof window !== 'undefined' && typeof document !== 'undefined'\n ? document.body.getBoundingClientRect().height - 60\n : 0\n }\n return {\n defaultSize: rootHeight / (narrowBreakpoint() ? 2 : 1),\n size: rootHeight > 550 ? undefined : rootHeight * 0.4,\n allowResize: rootHeight > 550,\n minSize: Math.min(170, Math.max(170, rootHeight / 2)),\n maxSize: rootHeight > 650 ? rootHeight * 0.7 : rootHeight * 0.6,\n }\n}\n\nexport function usePaneSize({\n visionRootRef,\n}: {\n visionRootRef: React.RefObject<HTMLDivElement | null>\n}) {\n const [isNarrowBreakpoint, setIsNarrowBreakpoint] = useState(() => narrowBreakpoint())\n const [paneSizeOptions, setPaneSizeOptions] = useState<PaneSizeOptions>(() =>\n calculatePaneSizeOptions(undefined),\n )\n\n useEffect(() => {\n if (!visionRootRef.current) {\n return undefined\n }\n const handleResize = (entries: ResizeObserverEntry[]) => {\n setIsNarrowBreakpoint(narrowBreakpoint())\n const entry = entries?.[0]\n if (entry) {\n setPaneSizeOptions(calculatePaneSizeOptions(entry.contentRect.height))\n }\n }\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(visionRootRef.current)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [visionRootRef])\n\n return {paneSizeOptions, isNarrowBreakpoint}\n}\n","import {PlayIcon, StopIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Hotkeys, Text, Tooltip} from '@sanity/ui'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {ControlsContainer} from './VisionGui.styled'\n\nexport interface VisionGuiControlsProps {\n hasValidParams: boolean\n queryInProgress: boolean\n listenInProgress: boolean\n onQueryExecution: () => void\n onListenExecution: () => void\n}\n\n/**\n * Vision GUI controls\n * To handle query and listen execution.\n */\nexport function VisionGuiControls({\n hasValidParams,\n listenInProgress,\n queryInProgress,\n onQueryExecution,\n onListenExecution,\n}: VisionGuiControlsProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n return (\n <ControlsContainer>\n <Card padding={3} paddingX={3}>\n <Tooltip\n content={\n <Card radius={4}>\n <Text size={1} muted>\n {t('params.error.params-invalid-json')}\n </Text>\n </Card>\n }\n placement=\"top\"\n disabled={hasValidParams}\n portal\n >\n <Flex justify=\"space-evenly\">\n <Box flex={1}>\n <Tooltip\n content={\n <Card radius={4}>\n <Hotkeys keys={['Ctrl', 'Enter']} />\n </Card>\n }\n placement=\"top\"\n portal\n >\n <Button\n width=\"fill\"\n onClick={onQueryExecution}\n type=\"button\"\n icon={queryInProgress ? StopIcon : PlayIcon}\n disabled={listenInProgress || !hasValidParams}\n tone={queryInProgress ? 'positive' : 'primary'}\n text={queryInProgress ? t('action.query-cancel') : t('action.query-execute')}\n />\n </Tooltip>\n </Box>\n <Box flex={1} marginLeft={3}>\n <Button\n width=\"fill\"\n onClick={onListenExecution}\n type=\"button\"\n icon={listenInProgress ? StopIcon : PlayIcon}\n text={listenInProgress ? t('action.listen-cancel') : t('action.listen-execute')}\n mode=\"ghost\"\n disabled={!hasValidParams}\n tone={listenInProgress ? 'positive' : 'default'}\n />\n </Box>\n </Flex>\n </Tooltip>\n </Card>\n </ControlsContainer>\n )\n}\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const PerspectivePopoverContent = styled(Box)`\n /* This limits the width of the popover content */\n max-width: 240px;\n`\n\nexport const PerspectivePopoverLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n","import {HelpCircleIcon} from '@sanity/icons'\nimport {\n Badge,\n Box,\n Button,\n Card,\n type CardTone,\n Inline,\n Popover,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\nimport {Translate, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {PerspectivePopoverContent, PerspectivePopoverLink} from './PerspectivePopover.styled'\n\nconst Dot = styled.div<{$tone: CardTone}>`\n width: 4px;\n height: 4px;\n border-radius: 3px;\n box-shadow: 0 0 0 1px var(--card-bg-color);\n background-color: ${({$tone}) => `var(--card-badge-${$tone}-dot-color)`};\n`\n\nconst SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION = false\n\nexport function PerspectivePopover() {\n const [open, setOpen] = useState(false)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n\n const {t} = useTranslation(visionLocaleNamespace)\n\n useClickOutsideEvent(\n () => setOpen(false),\n () => [buttonRef.current, popoverRef.current],\n )\n\n return (\n <Popover\n content={\n <PerspectivePopoverContent>\n <Stack space={4}>\n <Inline space={2}>\n <Text weight=\"medium\">{t('settings.perspectives.title')}</Text>\n </Inline>\n\n <Card>\n <Text muted>{t('settings.perspectives.description')}</Text>\n </Card>\n <Card>\n <Stack space={2}>\n <Box>\n <Badge tone=\"primary\">{t('label.new')}</Badge>\n </Box>\n <Text muted>\n <Translate\n t={t}\n i18nKey=\"settings.perspective.preview-drafts-renamed-to-drafts.description\"\n />\n </Text>\n </Stack>\n </Card>\n {SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? (\n <Card>\n <Badge tone=\"caution\">{t('label.new')}</Badge>\n <Card>\n <Text muted>\n <Translate t={t} i18nKey=\"settings.perspectives.new-default.description\" />\n </Text>\n </Card>\n </Card>\n ) : null}\n\n <Card>\n <Text>\n <PerspectivePopoverLink\n href=\"https://www.sanity.io/docs/perspectives\"\n target=\"_blank\"\n >\n {t('settings.perspectives.action.docs-link')} →\n </PerspectivePopoverLink>\n </Text>\n </Card>\n </Stack>\n </PerspectivePopoverContent>\n }\n placement=\"bottom-start\"\n portal\n padding={3}\n ref={popoverRef}\n open={open}\n >\n <Button\n icon={HelpCircleIcon}\n mode=\"bleed\"\n padding={2}\n paddingRight={1}\n tone=\"primary\"\n fontSize={1}\n ref={buttonRef}\n onClick={handleClick}\n selected={open}\n >\n <Dot $tone={SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? 'caution' : 'primary'} />\n </Button>\n </Popover>\n )\n}\n","import {CopyIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Grid, Inline, Select, Stack, TextInput, Tooltip} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type ComponentType,\n Fragment,\n type RefObject,\n useCallback,\n useMemo,\n useRef,\n} from 'react'\nimport {type PerspectiveContextValue, type TFunction, usePerspective, useTranslation} from 'sanity'\n\nimport {API_VERSIONS} from '../apiVersions'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n hasPinnedPerspective,\n SUPPORTED_PERSPECTIVES,\n type SupportedPerspective,\n} from '../perspectives'\nimport {PerspectivePopover} from './PerspectivePopover'\nimport {Header, QueryCopyLink, StyledLabel} from './VisionGui.styled'\n\nconst PinnedReleasePerspectiveOption: ComponentType<{\n pinnedPerspective: PerspectiveContextValue\n t: TFunction\n}> = ({pinnedPerspective, t}) => {\n const name =\n typeof pinnedPerspective.selectedPerspective === 'object'\n ? pinnedPerspective.selectedPerspective.metadata.title\n : pinnedPerspective.selectedPerspectiveName\n\n const label = hasPinnedPerspective(pinnedPerspective)\n ? `(${t('settings.perspectives.pinned-release-label')})`\n : t('settings.perspectives.pinned-release-label')\n\n const text = useMemo(\n () => [name, label].filter((value) => typeof value !== 'undefined').join(' '),\n [label, name],\n )\n\n return (\n <option value=\"pinnedRelease\" disabled={!hasPinnedPerspective(pinnedPerspective)}>\n {text}\n </option>\n )\n}\n\nexport interface VisionGuiHeaderProps {\n onChangeDataset: (evt: ChangeEvent<HTMLSelectElement>) => void\n dataset: string\n customApiVersion: string | false\n apiVersion: string\n onChangeApiVersion: (evt: ChangeEvent<HTMLSelectElement>) => void\n datasets: string[]\n customApiVersionElementRef: RefObject<HTMLInputElement | null>\n onCustomApiVersionChange: (evt: ChangeEvent<HTMLInputElement>) => void\n isValidApiVersion: boolean\n onChangePerspective: (evt: ChangeEvent<HTMLSelectElement>) => void\n url?: string\n perspective?: SupportedPerspective\n isScheduledDraftsEnabled: boolean\n}\n\nexport function VisionGuiHeader({\n onChangeDataset,\n dataset,\n customApiVersion,\n apiVersion,\n onChangeApiVersion,\n datasets,\n customApiVersionElementRef,\n onCustomApiVersionChange,\n isValidApiVersion,\n onChangePerspective,\n url,\n perspective,\n isScheduledDraftsEnabled,\n}: VisionGuiHeaderProps) {\n const pinnedPerspective = usePerspective()\n const {t} = useTranslation(visionLocaleNamespace)\n const operationUrlElement = useRef<HTMLInputElement | null>(null)\n const handleCopyUrl = useCallback(() => {\n const el = operationUrlElement.current\n if (!el) return\n\n try {\n el.select()\n document.execCommand('copy')\n } catch (err) {\n console.error('Unable to copy to clipboard :(')\n }\n }, [])\n\n return (\n <Header paddingX={3} paddingY={2}>\n <Grid columns={[1, 4, 8, 12]}>\n {/* Dataset selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>{t('settings.dataset-label')}</StyledLabel>\n </Card>\n <Select value={dataset} onChange={onChangeDataset}>\n {datasets.map((ds: string) => (\n <option key={ds}>{ds}</option>\n ))}\n </Select>\n </Stack>\n </Box>\n\n {/* API version selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>{t('settings.api-version-label')}</StyledLabel>\n </Card>\n <Select\n data-testid=\"api-version-selector\"\n value={customApiVersion === false ? apiVersion : 'other'}\n onChange={onChangeApiVersion}\n >\n {API_VERSIONS.map((version) => (\n <option key={version}>{version}</option>\n ))}\n <option key=\"other\" value=\"other\">\n {t('settings.other-api-version-label')}\n </option>\n </Select>\n </Stack>\n </Box>\n\n {/* Custom API version input */}\n {customApiVersion !== false && (\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel textOverflow=\"ellipsis\">\n {t('settings.custom-api-version-label')}\n </StyledLabel>\n </Card>\n\n <TextInput\n ref={customApiVersionElementRef}\n value={customApiVersion}\n onChange={onCustomApiVersionChange}\n customValidity={\n isValidApiVersion ? undefined : t('settings.error.invalid-api-version')\n }\n maxLength={11}\n />\n </Stack>\n </Box>\n )}\n\n {/* Perspective selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingBottom={1}>\n <Inline space={1}>\n <Box>\n <StyledLabel>{t('settings.perspective-label')}</StyledLabel>\n </Box>\n\n <Box>\n <PerspectivePopover />\n </Box>\n </Inline>\n </Card>\n <Select value={perspective || 'default'} onChange={onChangePerspective}>\n {SUPPORTED_PERSPECTIVES.map((perspectiveName) => {\n if (perspectiveName === 'pinnedRelease') {\n return (\n <Fragment key=\"pinnedRelease\">\n <PinnedReleasePerspectiveOption pinnedPerspective={pinnedPerspective} t={t} />\n <option key=\"default\" value=\"default\">\n {t('settings.perspectives.default')}\n </option>\n <hr />\n </Fragment>\n )\n }\n if (perspectiveName === 'scheduledDrafts') {\n if (!isScheduledDraftsEnabled) return null\n return (\n <option key=\"scheduledDrafts\" value=\"scheduledDrafts\">\n {t('settings.perspectives.scheduled-drafts')}\n </option>\n )\n }\n return <option key={perspectiveName}>{perspectiveName}</option>\n })}\n </Select>\n </Stack>\n </Box>\n\n {/* Query URL (for copying) */}\n {typeof url === 'string' ? (\n <Box padding={1} flex={1} column={customApiVersion === false ? 6 : 4}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>\n {t('query.url')} \n <QueryCopyLink onClick={handleCopyUrl}>\n [{t('action.copy-url-to-clipboard')}]\n </QueryCopyLink>\n </StyledLabel>\n </Card>\n <Flex flex={1} gap={1}>\n <Box flex={1}>\n <TextInput readOnly type=\"url\" ref={operationUrlElement} value={url} />\n </Box>\n <Tooltip content={t('action.copy-url-to-clipboard')}>\n <Button\n aria-label={t('action.copy-url-to-clipboard')}\n type=\"button\"\n mode=\"ghost\"\n icon={CopyIcon}\n onClick={handleCopyUrl}\n />\n </Tooltip>\n </Flex>\n </Stack>\n </Box>\n ) : (\n <Box flex={1} />\n )}\n </Grid>\n </Header>\n )\n}\n","import {json2csv} from 'json-2-csv'\n\nfunction getBlobUrl(content: string, mimeType: string): string {\n return URL.createObjectURL(\n new Blob([content], {\n type: mimeType,\n }),\n )\n}\n\nfunction getMemoizedBlobUrlResolver(mimeType: string, stringEncoder: (input: any) => string) {\n return (() => {\n let prevResult = ''\n let prevContent = ''\n return (input: unknown) => {\n const content = stringEncoder(input)\n if (typeof content !== 'string' || content === '') {\n return undefined\n }\n\n if (content === prevContent) {\n return prevResult\n }\n\n prevContent = content\n if (prevResult) {\n URL.revokeObjectURL(prevResult)\n }\n\n prevResult = getBlobUrl(content, mimeType)\n return prevResult\n }\n })()\n}\n\nexport const getJsonBlobUrl = getMemoizedBlobUrlResolver('application/json', (input) =>\n JSON.stringify(input, null, 2),\n)\n\nexport const getCsvBlobUrl = getMemoizedBlobUrlResolver('text/csv', (input) => {\n return json2csv(Array.isArray(input) ? input : [input]).trim()\n})\n","import {Code} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const ErrorCode = styled(Code)`\n color: ${({theme}) => theme.sanity.color.muted.critical.enabled.fg};\n`\n","import {Box} from '@sanity/ui'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {ErrorCode} from './QueryErrorDialog.styled'\n\ninterface ContentLakeQueryError {\n details: {\n query: string\n start: number\n end: number\n\n lineNumber?: number\n column?: number\n }\n}\n\nexport function QueryErrorDetails({error}: {error: ContentLakeQueryError | Error}) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n if (!('details' in error)) {\n return null\n }\n\n const details = {...error.details, ...mapToLegacyDetails(error.details)}\n if (!details.line) {\n return null\n }\n\n return (\n <div>\n <ErrorCode size={1}>{`${details.line}\\n${dashLine(\n details.column,\n details.columnEnd,\n )}`}</ErrorCode>\n <Box marginTop={4}>\n <ErrorCode size={1}>{`${t('query.error.line')}: ${details.lineNumber}\\n${t(\n 'query.error.column',\n )}: ${details.column}`}</ErrorCode>\n </Box>\n </div>\n )\n}\n\nfunction mapToLegacyDetails(details: ContentLakeQueryError['details']) {\n if (!details || typeof details.query !== 'string' || typeof details.start !== 'number') {\n return {}\n }\n\n const {query, start, end} = details\n const lineStart = query.slice(0, start).lastIndexOf('\\n') + 1\n const lineNumber = (query.slice(0, lineStart).match(/\\n/g) || []).length\n const line = query.slice(lineStart, query.indexOf('\\n', lineStart))\n const column = start - lineStart\n const columnEnd = typeof end === 'number' ? end - lineStart : undefined\n\n return {line, lineNumber, column, columnEnd}\n}\n\nfunction dashLine(column: number, columnEnd: number | undefined): string {\n const line = '-'.repeat(column)\n const hats = `^`.repeat(columnEnd ? columnEnd - column : 1)\n return `${line}${hats}`\n}\n","import {Stack} from '@sanity/ui'\n\nimport {QueryErrorDetails} from './QueryErrorDetails'\nimport {ErrorCode} from './QueryErrorDialog.styled'\n\nexport function QueryErrorDialog(props: {error: Error}) {\n return (\n <Stack space={5} marginTop={2}>\n <ErrorCode size={1}>{props.error.message}</ErrorCode>\n <QueryErrorDetails error={props.error} />\n </Stack>\n )\n}\n","import {rem, type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const ResultViewWrapper = styled.div<{theme: Theme}>(({theme}) => {\n const {color, fonts, space} = theme.sanity\n\n return css`\n & .json-inspector,\n & .json-inspector .json-inspector__selection {\n font-family: ${fonts.code.family};\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n color: var(--card-code-fg-color);\n }\n\n & .json-inspector .json-inspector__leaf {\n padding-left: ${rem(space[4])};\n }\n\n & .json-inspector .json-inspector__leaf.json-inspector__leaf_root {\n padding-top: ${rem(space[0])};\n padding-left: 0;\n }\n\n & .json-inspector > .json-inspector__leaf_root > .json-inspector__line > .json-inspector__key {\n display: none;\n }\n\n & .json-inspector .json-inspector__line {\n display: block;\n position: relative;\n cursor: default;\n }\n\n & .json-inspector .json-inspector__line::after {\n content: '';\n position: absolute;\n top: 0;\n left: -200px;\n right: -50px;\n bottom: 0;\n z-index: -1;\n pointer-events: none;\n }\n\n & .json-inspector .json-inspector__line:hover::after {\n background: var(--card-code-bg-color);\n }\n\n & .json-inspector .json-inspector__leaf_composite > .json-inspector__line {\n cursor: pointer;\n }\n\n & .json-inspector .json-inspector__leaf_composite > .json-inspector__line::before {\n content: '▸ ';\n margin-left: calc(0px - ${rem(space[4])});\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n }\n\n &\n .json-inspector\n .json-inspector__leaf_expanded.json-inspector__leaf_composite\n > .json-inspector__line::before {\n content: '▾ ';\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n }\n\n & .json-inspector .json-inspector__radio,\n & .json-inspector .json-inspector__flatpath {\n display: none;\n }\n\n & .json-inspector .json-inspector__value {\n margin-left: ${rem(space[4] / 2)};\n }\n\n &\n .json-inspector\n > .json-inspector__leaf_root\n > .json-inspector__line\n > .json-inspector__key\n + .json-inspector__value {\n margin: 0;\n }\n\n & .json-inspector .json-inspector__key {\n color: ${color.syntax.property};\n }\n\n & .json-inspector .json-inspector__value_helper,\n & .json-inspector .json-inspector__value_null {\n color: ${color.syntax.constant};\n }\n\n & .json-inspector .json-inspector__not-found {\n padding-top: ${rem(space[2])};\n }\n\n & .json-inspector .json-inspector__value_string {\n color: ${color.syntax.string};\n word-break: break-word;\n }\n\n & .json-inspector .json-inspector__value_boolean {\n color: ${color.syntax.boolean};\n }\n\n & .json-inspector .json-inspector__value_number {\n color: ${color.syntax.number};\n }\n\n & .json-inspector .json-inspector__show-original {\n display: inline-block;\n padding: 0 6px;\n cursor: pointer;\n }\n\n & .json-inspector .json-inspector__show-original:hover {\n color: inherit;\n }\n\n & .json-inspector .json-inspector__show-original::before {\n content: '↔';\n }\n\n & .json-inspector .json-inspector__show-original:hover::after {\n content: ' expand';\n }\n `\n})\n","import {JsonInspector} from '@rexxars/react-json-inspector'\nimport {LinkIcon} from '@sanity/icons'\nimport {Code} from '@sanity/ui'\nimport LRU from 'quick-lru'\nimport {useDataset} from 'sanity'\nimport {IntentLink} from 'sanity/router'\n\nimport {ResultViewWrapper} from './ResultView.styled'\n\nconst lru = new LRU({maxSize: 50000})\n\nexport function ResultView(props: {data: unknown; datasetName: string}): React.JSX.Element {\n const {data, datasetName} = props\n const workspaceDataset = useDataset()\n\n if (isRecord(data) || Array.isArray(data)) {\n return (\n <ResultViewWrapper>\n <JsonInspector\n data={data}\n search={false}\n isExpanded={isExpanded}\n onClick={toggleExpanded}\n interactiveLabel={workspaceDataset === datasetName ? DocumentEditLabel : undefined}\n />\n </ResultViewWrapper>\n )\n }\n\n return <Code language=\"json\">{JSON.stringify(data)}</Code>\n}\n\nfunction DocumentEditLabel(props: {value: string; isKey: boolean; keypath: string}) {\n if (props.isKey || (!props.keypath.endsWith('_id') && !props.keypath.endsWith('_ref'))) {\n return null\n }\n\n return (\n <IntentLink intent=\"edit\" params={{id: props.value}}>\n <LinkIcon />\n </IntentLink>\n )\n}\n\nfunction isExpanded(keyPath: string, value: unknown): boolean {\n const depthLimit = 4\n const cached = lru.get(keyPath) as boolean | undefined\n\n if (typeof cached === 'boolean') {\n return cached\n }\n\n const segments = keyPath.split('.', depthLimit)\n if (segments.length === depthLimit) {\n return false\n }\n\n if (Array.isArray(value)) {\n return true\n }\n\n return isRecord(value) && !segments.some((key) => isArrayKeyOverLimit(key))\n}\n\nfunction toggleExpanded(event: {path: string}): void {\n const {path} = event\n const current = lru.get(path)\n\n if (current === undefined) {\n // something is wrong\n return\n }\n\n lru.set(path, !current)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nconst numeric = /^\\d+$/\nfunction isArrayKeyOverLimit(segment: string, limit = 10) {\n return numeric.test(segment) && parseInt(segment, 10) > limit\n}\n","import {DocumentSheetIcon} from '@sanity/icons'\nimport {Button, Tooltip} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\n\ninterface SaveButtonProps {\n blobUrl: string | undefined\n}\n\nfunction preventSave(evt: MouseEvent<HTMLButtonElement>) {\n return evt.preventDefault()\n}\n\nexport function SaveCsvButton({blobUrl}: SaveButtonProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n const isDisabled = !blobUrl\n\n const button = (\n <Button\n as=\"a\"\n disabled={isDisabled}\n download={isDisabled ? undefined : 'query-result.csv'}\n href={blobUrl}\n icon={DocumentSheetIcon}\n mode=\"ghost\"\n onClick={isDisabled ? preventSave : undefined}\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n text=\"CSV\" // String is a File extension\n tone=\"default\"\n />\n )\n\n return isDisabled ? (\n <Tooltip content={t('result.save-result-as-csv.not-csv-encodable')} placement=\"top\">\n {button}\n </Tooltip>\n ) : (\n button\n )\n}\n\nexport function SaveJsonButton({blobUrl}: SaveButtonProps) {\n return (\n <Button\n as=\"a\"\n download={'query-result.json'}\n href={blobUrl}\n icon={DocumentSheetIcon}\n mode=\"ghost\"\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n text=\"JSON\" // String is a File extension\n tone=\"default\"\n />\n )\n}\n","import {type MutationEvent} from '@sanity/client'\nimport {Box, Text} from '@sanity/ui'\nimport {Translate, useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {getCsvBlobUrl, getJsonBlobUrl} from '../util/getBlobUrl'\nimport {DelayedSpinner} from './DelayedSpinner'\nimport {QueryErrorDialog} from './QueryErrorDialog'\nimport {ResultView} from './ResultView'\nimport {SaveCsvButton, SaveJsonButton} from './SaveResultButtons'\nimport {\n DownloadsCard,\n InputBackgroundContainer,\n Result,\n ResultContainer,\n ResultFooter,\n ResultInnerContainer,\n ResultOuterContainer,\n SaveResultLabel,\n StyledLabel,\n TimingsCard,\n TimingsTextContainer,\n} from './VisionGui.styled'\n\ninterface VisionGuiResultProps {\n error?: Error | undefined\n queryInProgress: boolean\n queryResult?: unknown | undefined\n listenInProgress: boolean\n listenMutations: MutationEvent[]\n dataset: string\n queryTime: number | undefined\n e2eTime: number | undefined\n}\n\nexport function VisionGuiResult({\n error,\n queryInProgress,\n queryResult,\n listenInProgress,\n listenMutations,\n dataset,\n queryTime,\n e2eTime,\n}: VisionGuiResultProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n const hasResult = !error && !queryInProgress && typeof queryResult !== 'undefined'\n\n const jsonUrl = hasResult ? getJsonBlobUrl(queryResult) : ''\n const csvUrl = hasResult ? getCsvBlobUrl(queryResult) : ''\n\n return (\n <ResultOuterContainer direction=\"column\" data-testid=\"vision-result\">\n <ResultInnerContainer flex={1}>\n <ResultContainer\n flex={1}\n overflow=\"hidden\"\n tone={error ? 'critical' : 'default'}\n $isInvalid={Boolean(error)}\n >\n <Result overflow=\"auto\">\n <InputBackgroundContainer>\n <Box marginLeft={3}>\n <StyledLabel muted>{t('result.label')}</StyledLabel>\n </Box>\n </InputBackgroundContainer>\n <Box padding={3} paddingTop={5}>\n {(queryInProgress || (listenInProgress && listenMutations.length === 0)) && (\n <Box marginTop={3}>\n <DelayedSpinner />\n </Box>\n )}\n {error && <QueryErrorDialog error={error} />}\n {hasResult && <ResultView data={queryResult} datasetName={dataset} />}\n {listenInProgress && listenMutations.length > 0 && (\n <ResultView data={listenMutations} datasetName={dataset} />\n )}\n </Box>\n </Result>\n </ResultContainer>\n </ResultInnerContainer>\n {/* Execution time */}\n <ResultFooter justify=\"space-between\" direction={['column', 'column', 'row']}>\n <TimingsCard paddingX={4} paddingY={3} sizing=\"border\">\n <TimingsTextContainer align=\"center\">\n <Box>\n <Text muted>\n {t('result.execution-time-label')}:{' '}\n {typeof queryTime === 'number'\n ? `${queryTime}ms`\n : t('result.timing-not-applicable')}\n </Text>\n </Box>\n <Box marginLeft={4}>\n <Text muted>\n {t('result.end-to-end-time-label')}:{' '}\n {typeof e2eTime === 'number' ? `${e2eTime}ms` : t('result.timing-not-applicable')}\n </Text>\n </Box>\n </TimingsTextContainer>\n </TimingsCard>\n\n {hasResult && (\n <DownloadsCard paddingX={4} paddingY={3} sizing=\"border\">\n <SaveResultLabel muted>\n <Translate\n components={{\n SaveResultButtons: () => (\n <>\n <SaveJsonButton blobUrl={jsonUrl} />\n <SaveCsvButton blobUrl={csvUrl} />\n </>\n ),\n }}\n i18nKey=\"result.save-result-as-format\"\n t={t}\n />\n </SaveResultLabel>\n </DownloadsCard>\n )}\n </ResultFooter>\n </ResultOuterContainer>\n )\n}\n","/* eslint-disable max-statements */\nimport {SplitPane} from '@rexxars/react-split-pane'\nimport {\n type ClientPerspective,\n type ListenEvent,\n type MutationEvent,\n type ReleaseDocument,\n type StackablePerspective,\n} from '@sanity/client'\nimport {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Box, Button, Flex, useToast} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {type ChangeEvent, useCallback, useEffect, useMemo, useRef, useState} 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'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSIONS, DEFAULT_API_VERSION} from '../apiVersions'\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n getActivePerspective,\n isSupportedPerspective,\n isVirtualPerspective,\n type SupportedPerspective,\n} from '../perspectives'\nimport {type VisionProps} from '../types'\nimport {encodeQueryString} from '../util/encodeQueryString'\nimport {getLocalStorage} from '../util/localStorage'\nimport {parseApiQueryString, type ParsedApiQueryString} from '../util/parseApiQueryString'\nimport {prefixApiVersion} from '../util/prefixApiVersion'\nimport {validateApiVersion} from '../util/validateApiVersion'\nimport {ParamsEditor, parseParams} from './ParamsEditor'\nimport {QueryRecall} from './QueryRecall'\nimport {usePaneSize} from './usePaneSize'\nimport {\n InputBackgroundContainerLeft,\n InputContainer,\n Root,\n SplitpaneContainer,\n StyledLabel,\n} from './VisionGui.styled'\nimport {VisionGuiControls} from './VisionGuiControls'\nimport {VisionGuiHeader} from './VisionGuiHeader'\nimport {VisionGuiResult} from './VisionGuiResult'\n\nfunction nodeContains(node: Node, other: EventTarget | Node | null): boolean {\n if (!node || !other) {\n return false\n }\n\n // eslint-disable-next-line no-bitwise\n return node === other || !!(node.compareDocumentPosition(other as Node) & 16)\n}\n\nconst sanityUrl =\n /\\.(?:api|apicdn)\\.sanity\\.(?:io|work)\\/(vX|v1|v\\d{4}-\\d\\d-\\d\\d)\\/.*?(?:query|listen)\\/(.*?)\\?(.*)/\n\nconst isRunHotkey = (event: KeyboardEvent) =>\n isHotkey('ctrl+enter', event) || isHotkey('mod+enter', event)\n\ninterface Subscription {\n unsubscribe: () => void\n}\nexport interface Params {\n raw: string\n parsed: Record<string, unknown> | undefined\n valid: boolean\n error: string | undefined\n}\n\ninterface QueryExecutionOptions {\n apiVersion?: string\n dataset?: string\n perspective?: SupportedPerspective | 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 setQueryInProgress(!context.params.error && Boolean(context.query))\n setListenInProgress(false)\n setListenMutations([])\n setError(context.params.error ? new Error(context.params.error) : undefined)\n setQueryResult(undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (context.params.error) {\n return\n }\n\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective: context.perspective ?? [],\n }\n\n const ctxClient = client.withConfig({\n apiVersion: context.apiVersion,\n dataset: context.dataset,\n perspective: context.perspective,\n })\n\n const newUrl = ctxClient.getUrl(\n ctxClient.getDataUrl(\n 'query',\n encodeQueryString(context.query, context.params.parsed, urlQueryOpts),\n ),\n )\n setUrl(newUrl)\n\n const queryStart = Date.now()\n\n querySubscriptionRef.current = ctxClient.observable\n .fetch(context.query, context.params.parsed, {filterResponse: false, tag: 'vision'})\n .subscribe({\n next: (res) => {\n setQueryTime(res.ms)\n setE2eTime(Date.now() - queryStart)\n setQueryResult(res.result)\n setQueryInProgress(false)\n setError(undefined)\n },\n error: (err) => {\n setError(err)\n setQueryInProgress(false)\n },\n })\n },\n [\n queryInProgress,\n query,\n dataset,\n params.parsed,\n t,\n perspective,\n perspectiveStack,\n 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 as SupportedPerspective | undefined)\n localStorage.set('perspective', newPerspective)\n\n handleQueryExecution({perspective: newPerspective})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeDataset = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newDataset = evt.target.value\n localStorage.set('dataset', newDataset)\n setDataset(newDataset)\n handleQueryExecution({dataset: newDataset})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeApiVersion = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newApiVersion = evt.target.value\n if (newApiVersion?.toLowerCase() === 'other') {\n setCustomApiVersion('v')\n customApiVersionElementRef.current?.focus()\n return\n }\n\n setApiVersion(newApiVersion)\n setCustomApiVersion(false)\n localStorage.set('apiVersion', newApiVersion)\n handleQueryExecution({apiVersion: newApiVersion})\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle custom API version change\n const handleCustomApiVersionChange = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const newCustomApiVersion = evt.target.value || ''\n setCustomApiVersion(newCustomApiVersion || 'v')\n\n if (validateApiVersion(newCustomApiVersion)) {\n setApiVersion(newCustomApiVersion)\n localStorage.set('apiVersion', newCustomApiVersion)\n handleQueryExecution({apiVersion: newCustomApiVersion})\n }\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle perspective change\n const handleChangePerspective = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newPerspective = evt.target.value\n setPerspective(newPerspective === 'default' ? undefined : newPerspective)\n },\n [setPerspective],\n )\n\n const handleListenerEvent = useCallback((evt: ListenEvent<any>) => {\n if (evt.type !== 'mutation') {\n return\n }\n\n setListenMutations((prevMutations) =>\n prevMutations.length === 50 ? [evt, ...prevMutations.slice(0, 49)] : [evt, ...prevMutations],\n )\n }, [])\n const handleListenExecution = useCallback(() => {\n if (listenInProgress) {\n cancelListenerSubscription()\n setListenInProgress(false)\n return\n }\n\n const newUrl = client.getDataUrl('listen', encodeQueryString(query, params.parsed, {}))\n\n const shouldExecute = !params.error && query.trim().length > 0\n\n localStorage.set('query', query)\n localStorage.set('params', params.raw)\n\n cancelQuerySubscription()\n\n setUrl(newUrl)\n setListenMutations([])\n setQueryInProgress(false)\n setQueryResult(undefined)\n setListenInProgress(shouldExecute)\n setError(params.error ? new Error(params.error) : undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (!shouldExecute) {\n return\n }\n\n listenSubscriptionRef.current = client\n .listen(query, params.parsed, {events: ['mutation', 'welcome'], includeAllVersions: true})\n .subscribe({\n next: handleListenerEvent,\n error: (err) => {\n setError(err)\n setListenInProgress(false)\n },\n })\n }, [\n listenInProgress,\n params,\n query,\n localStorage,\n cancelQuerySubscription,\n handleListenerEvent,\n cancelListenerSubscription,\n client,\n ])\n\n const handleParamsChange = useCallback(\n (value: string) => {\n setRawParams(value)\n localStorage.set('params', value)\n },\n [localStorage],\n )\n\n // Get object of state values from provided URL\n const getStateFromUrl = useCallback(\n (data: string): ParsedUrlState | null => {\n const match = data.match(sanityUrl)\n if (!match) {\n return null\n }\n\n const [, usedApiVersion, usedDataset, urlQuery] = match\n\n const qs = new URLSearchParams(urlQuery)\n const parts: ParsedApiQueryString = parseApiQueryString(qs)\n if (!parts) return null\n let newApiVersion: string | undefined\n let newCustomApiVersion: string | false | undefined\n\n if (validateApiVersion(usedApiVersion)) {\n if (API_VERSIONS.includes(usedApiVersion)) {\n newApiVersion = usedApiVersion\n newCustomApiVersion = false\n } else {\n newCustomApiVersion = usedApiVersion\n }\n }\n\n const newPerspective =\n isSupportedPerspective(parts.options.perspective) &&\n !isVirtualPerspective(parts.options.perspective)\n ? parts.options.perspective\n : undefined\n\n if (\n newPerspective &&\n (!isSupportedPerspective(parts.options.perspective) ||\n isVirtualPerspective(parts.options.perspective))\n ) {\n toast.push({\n closable: true,\n id: 'vision-paste-unsupported-perspective',\n status: 'warning',\n title: 'Perspective in pasted url is currently not supported. Falling back to \"raw\"',\n })\n }\n\n return {\n query: parts.query,\n params: parts.params,\n rawParams: JSON.stringify(parts.params, null, 2),\n dataset: datasets.includes(usedDataset) ? usedDataset : dataset,\n apiVersion: newApiVersion || apiVersion,\n customApiVersion: newCustomApiVersion,\n perspective: newPerspective || perspective,\n url: data,\n }\n },\n [datasets, dataset, apiVersion, perspective, toast],\n )\n\n // Use state object from parsed URL to update state\n const setStateFromParsedUrl = useCallback(\n (parsedUrlObj: ParsedUrlState) => {\n // Update state with pasted values\n setDataset(parsedUrlObj.dataset)\n setQuery(parsedUrlObj.query)\n setRawParams(parsedUrlObj.rawParams)\n setApiVersion(parsedUrlObj.apiVersion)\n if (parsedUrlObj.customApiVersion) {\n setCustomApiVersion(parsedUrlObj.customApiVersion)\n }\n setPerspectiveState(parsedUrlObj.perspective)\n setUrl(parsedUrlObj.url)\n // Update the codemirror editor content\n editorQueryRef.current?.resetEditorContent(parsedUrlObj.query)\n editorParamsRef.current?.resetEditorContent(parsedUrlObj.rawParams)\n\n // Update localStorage and client config\n localStorage.merge({\n query: parsedUrlObj.query,\n params: parsedUrlObj.rawParams,\n dataset: parsedUrlObj.dataset,\n apiVersion: parsedUrlObj.customApiVersion || parsedUrlObj.apiVersion,\n perspective: parsedUrlObj.perspective,\n })\n\n // Execute query with new values\n handleQueryExecution(parsedUrlObj)\n },\n [localStorage, handleQueryExecution],\n )\n\n const handlePaste = useCallback(\n (evt: ClipboardEvent) => {\n if (!evt.clipboardData) {\n return\n }\n\n const data = evt.clipboardData.getData('text/plain')\n evt.preventDefault()\n const urlState = getStateFromUrl(data)\n if (urlState) {\n setStateFromParsedUrl(urlState)\n toast.push({\n closable: true,\n id: 'vision-paste',\n status: 'info',\n title: 'Parsed URL to query',\n })\n }\n },\n [getStateFromUrl, setStateFromParsedUrl, toast],\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const isWithinRoot =\n visionRootRef.current && nodeContains(visionRootRef.current, event.target)\n if (isRunHotkey(event) && isWithinRoot && params.valid) {\n handleQueryExecution()\n event.preventDefault()\n event.stopPropagation()\n }\n },\n [params.valid, handleQueryExecution],\n )\n\n useEffect(() => {\n window.document.addEventListener('paste', handlePaste)\n window.document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n window.document.removeEventListener('paste', handlePaste)\n window.document.removeEventListener('keydown', handleKeyDown)\n }\n }, [handleKeyDown, handlePaste])\n\n useEffect(() => {\n return () => {\n cancelQuerySubscription()\n cancelListenerSubscription()\n }\n }, [cancelQuerySubscription, cancelListenerSubscription])\n\n const handleStudioPerspectiveChange = useEffectEvent((stack: StackablePerspective[]) => {\n if (stack.length > 0) {\n setPerspective('pinnedRelease')\n }\n })\n // Handle pinned perspective changes\n useEffect(() => {\n handleStudioPerspectiveChange(perspectiveStack)\n }, [perspectiveStack])\n\n const generateUrl = useCallback(\n (queryString: string, queryParams: Record<string, unknown>) => {\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective:\n getActivePerspective({\n visionPerspective: perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }) ?? [],\n }\n return client.getUrl(\n client.getDataUrl('query', encodeQueryString(queryString, queryParams, urlQueryOpts)),\n )\n },\n [client, perspective, perspectiveStack, scheduledDraftsStack],\n )\n\n return (\n <Root\n direction=\"column\"\n height=\"fill\"\n ref={visionRootRef}\n sizing=\"border\"\n overflow=\"hidden\"\n data-testid=\"vision-root\"\n >\n <VisionGuiHeader\n apiVersion={apiVersion}\n customApiVersion={customApiVersion}\n dataset={dataset}\n datasets={datasets}\n onChangeDataset={handleChangeDataset}\n onChangeApiVersion={handleChangeApiVersion}\n customApiVersionElementRef={customApiVersionElementRef}\n onCustomApiVersionChange={handleCustomApiVersionChange}\n isValidApiVersion={isValidApiVersion}\n onChangePerspective={handleChangePerspective}\n url={url}\n perspective={perspective}\n isScheduledDraftsEnabled={isScheduledDraftsEnabled}\n />\n\n <SplitpaneContainer flex=\"auto\">\n <SplitPane\n minSize={800}\n defaultSize={window.innerWidth - 275}\n size={isQueryRecallCollapsed ? window.innerWidth : window.innerWidth - 275}\n maxSize={-225}\n primary=\"first\"\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n split={isNarrowBreakpoint ? 'vertical' : 'horizontal'}\n minSize={300}\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n split=\"horizontal\"\n defaultSize={\n isNarrowBreakpoint ? paneSizeOptions.defaultSize : paneSizeOptions.minSize\n }\n size={paneSizeOptions.size}\n allowResize={paneSizeOptions.allowResize}\n minSize={isNarrowBreakpoint ? paneSizeOptions.minSize : 100}\n maxSize={paneSizeOptions.maxSize}\n primary=\"first\"\n >\n <InputContainer display=\"flex\" data-testid=\"vision-query-editor\">\n <Box flex={1}>\n <InputBackgroundContainerLeft>\n <Flex>\n <StyledLabel muted>{t('query.label')}</StyledLabel>\n </Flex>\n </InputBackgroundContainerLeft>\n <VisionCodeMirror\n initialValue={query}\n onChange={setQuery}\n ref={editorQueryRef}\n />\n </Box>\n </InputContainer>\n <InputContainer display=\"flex\">\n <ParamsEditor\n value={params.raw}\n onChange={handleParamsChange}\n paramsError={params.error}\n hasValidParams={params.valid}\n editorRef={editorParamsRef}\n />\n\n <VisionGuiControls\n hasValidParams={params.valid}\n queryInProgress={queryInProgress}\n listenInProgress={listenInProgress}\n onQueryExecution={handleQueryExecution}\n onListenExecution={handleListenExecution}\n />\n </InputContainer>\n </SplitPane>\n </Box>\n <VisionGuiResult\n error={error}\n queryInProgress={queryInProgress}\n queryResult={queryResult}\n listenInProgress={listenInProgress}\n listenMutations={listenMutations}\n dataset={dataset}\n queryTime={queryTime}\n e2eTime={e2eTime}\n />\n </SplitPane>\n </Box>\n <Box style={{position: 'relative', height: '100%'}}>\n <Button\n mode=\"ghost\"\n padding={2}\n style={{\n position: 'absolute',\n left: -32,\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 100,\n pointerEvents: 'auto',\n }}\n onClick={() => setIsQueryRecallCollapsed(!isQueryRecallCollapsed)}\n >\n <div style={{display: 'flex', alignItems: 'center', height: '100%'}}>\n {isQueryRecallCollapsed ? <ChevronLeftIcon /> : <ChevronRightIcon />}\n </div>\n </Button>\n <QueryRecall\n url={url}\n getStateFromUrl={getStateFromUrl}\n setStateFromParsedUrl={setStateFromParsedUrl}\n currentQuery={query}\n currentParams={params.parsed || {}}\n generateUrl={generateUrl}\n />\n </Box>\n </SplitPane>\n </SplitpaneContainer>\n </Root>\n )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, map, type Observable, of} from 'rxjs'\n\nimport {type VisionConfig} from '../types'\n\nexport function useDatasets({\n client,\n datasets: configDatasets,\n}: {\n client: SanityClient\n datasets: VisionConfig['datasets']\n}): string[] | Error | null {\n const datasets$: Observable<string[] | Error> = useMemo(() => {\n if (Array.isArray(configDatasets)) {\n return of(configDatasets)\n }\n return client.observable.datasets.list().pipe(\n map((result) => {\n if (typeof configDatasets == 'function') {\n return configDatasets(result).map((d) => d.name)\n }\n return result.map((ds) => ds.name)\n }),\n catchError((err) => of(err)),\n )\n }, [client, configDatasets])\n const datasets = useObservable(datasets$, null)\n\n return datasets\n}\n","import {Flex} from '@sanity/ui'\nimport {useClient} from 'sanity'\n\nimport {DelayedSpinner} from '../components/DelayedSpinner'\nimport {VisionGui} from '../components/VisionGui'\nimport {useDatasets} from '../hooks/useDatasets'\nimport {type VisionProps} from '../types'\n\nexport function VisionContainer(props: VisionProps) {\n const datasetsClient = useClient({apiVersion: 'v2025-06-27'})\n const loadedDatasets = useDatasets({client: datasetsClient, datasets: props.config.datasets})\n\n if (!loadedDatasets) {\n return (\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n <DelayedSpinner />\n </Flex>\n )\n }\n\n const datasets =\n loadedDatasets instanceof Error\n ? // On error, use the clients configured dataset\n [props.client.config().dataset || 'production']\n : // Otherwise use the loaded list, obviously\n loadedDatasets\n\n const projectId = props.client.config().projectId\n const defaultDataset = props.config.defaultDataset || props.client.config().dataset || datasets[0]\n\n return (\n <VisionGui\n key={projectId}\n {...props}\n datasets={datasets}\n projectId={projectId}\n defaultDataset={defaultDataset}\n />\n )\n}\n","/* eslint-disable @sanity/i18n/no-attribute-string-literals */\n/* eslint-disable i18next/no-literal-string */\nimport {Button, Card, Code, Container, Heading, Stack} from '@sanity/ui'\nimport {Component, type PropsWithChildren} from 'react'\n\nimport {clearLocalStorage} from '../util/localStorage'\n\n/**\n * @internal\n */\nexport type VisionErrorBoundaryProps = PropsWithChildren\n\n/**\n * @internal\n */\ninterface VisionErrorBoundaryState {\n error: string | null\n numRetries: number\n}\n\n/**\n * @internal\n */\nexport class VisionErrorBoundary extends Component<\n VisionErrorBoundaryProps,\n VisionErrorBoundaryState\n> {\n constructor(props: VisionErrorBoundaryProps) {\n super(props)\n this.state = {error: null, numRetries: 0}\n }\n\n static getDerivedStateFromError(error: unknown) {\n // oxlint-disable-next-line restrict-template-expressions - @TODO use new Error(msg, {cause: error}) instead of casting to string, and console.error() the full error\n return {error: error instanceof Error ? error.message : `${error}`}\n }\n\n handleRetryRender = () =>\n this.setState((prev) => ({error: null, numRetries: prev.numRetries + 1}))\n\n handleRetryWithCacheClear = () => {\n clearLocalStorage()\n this.handleRetryRender()\n }\n\n render() {\n if (!this.state.error) {\n return this.props.children\n }\n\n const message = this.state.error\n const withCacheClear = this.state.numRetries > 0\n\n return (\n <Card\n height=\"fill\"\n overflow=\"auto\"\n paddingY={[4, 5, 6, 7]}\n paddingX={4}\n sizing=\"border\"\n tone=\"critical\"\n >\n <Container width={3}>\n <Stack space={4}>\n <div>\n <Button\n onClick={withCacheClear ? this.handleRetryWithCacheClear : this.handleRetryRender}\n text={withCacheClear ? 'Clear cache and retry' : 'Retry'}\n tone=\"default\"\n />\n </div>\n\n <Heading>An error occurred</Heading>\n\n <Card border radius={2} overflow=\"auto\" padding={4} tone=\"inherit\">\n <Stack space={4}>\n {message && (\n <Code size={1}>\n <strong>Error: {message}</strong>\n </Code>\n )}\n </Stack>\n </Card>\n </Stack>\n </Container>\n </Card>\n )\n }\n}\n","import {type Tool, useClient} from 'sanity'\n\nimport {DEFAULT_API_VERSION} from './apiVersions'\nimport {VisionContainer} from './containers/VisionContainer'\nimport {VisionErrorBoundary} from './containers/VisionErrorBoundary'\nimport {type VisionConfig} from './types'\n\ninterface SanityVisionProps {\n tool: Tool<VisionConfig>\n}\n\nfunction SanityVision(props: SanityVisionProps) {\n const client = useClient({apiVersion: '1'})\n const config: VisionConfig = {\n defaultApiVersion: DEFAULT_API_VERSION,\n ...props.tool.options,\n }\n\n return (\n <VisionErrorBoundary>\n <VisionContainer client={client} config={config} />\n </VisionErrorBoundary>\n )\n}\n\nexport default SanityVision\n"],"names":["API_VERSIONS","Date","toISOString","split","DEFAULT_API_VERSION","slice","DelayedSpinner","props","$","_c","show","setShow","useState","t0","t1","delay","timer","setTimeout","clearTimeout","useEffect","t2","jsx","Spinner","codemirrorExtensions","javascriptLanguage","lineNumbers","highlightActiveLine","highlightActiveLineGutter","highlightSelectionMatches","highlightSpecialChars","indentOnInput","bracketMatching","closeBrackets","history","drawSelection","syntaxHighlighting","defaultHighlightStyle","fallback","keymap","of","key","run","defaultKeymap","historyKeymap","flat","filter","Boolean","useCodemirrorTheme","theme","createTheme","cmTheme","createHighlight","cmHighlight","color","fonts","sanity","card","enabled","cursor","hues","blue","dark","hex","selection","gray","EditorView","fg","backgroundColor","bg","caretColor","fontFamily","code","family","fontSize","rem","sizes","lineHeight","borderLeftColor","borderBottom","border","borderTop","c","base","s","syntax","HighlightStyle","define","tag","t","keyword","propertyName","name","deleted","character","macroName","property","function","variableName","labelName","constant","standard","variable","definition","separator","typeName","className","number","changed","annotation","modifier","self","namespace","operator","operatorKeyword","url","escape","regexp","link","special","string","meta","comment","strong","fontWeight","emphasis","fontStyle","strikethrough","textDecoration","heading","atom","bool","boolean","processingInstruction","inserted","invalid","EditorRoot","styled","div","space","VisionCodeMirror","forwardRef","ref","initialValue","sanityTheme","useTheme","codeMirrorRef","useRef","Symbol","for","newContent","editorView","current","view","currentDoc","state","doc","toString","dispatch","changes","from","to","length","insert","EditorSelection","resetEditorContent","useImperativeHandle","t3","onChange","CodeMirror","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","Flex","Header","Card","StyledLabel","Label","SplitpaneContainer","Box","QueryCopyLink","a","InputBackgroundContainer","InputBackgroundContainerLeft","InputContainer","ResultOuterContainer","ResultInnerContainer","ResultContainer","$isInvalid","css","Result","ResultFooter","TimingsCard","TimingsTextContainer","text","ascenderHeight","descenderHeight","DownloadsCard","SaveResultLabel","Text","ControlsContainer","defaultValue","ParamsEditor","paramsError","hasValidParams","editorRef","useTranslation","visionLocaleNamespace","newValue","handleChangeRaw","debounce","handleChange","t4","t5","Tooltip","ErrorOutlineIcon","t6","jsxs","t7","t8","t9","parseParams","parsedParams","Error","validationError","undefined","raw","valid","error","STORED_QUERIES_NAMESPACE","queries","keyValueStoreKey","useSavedQueries","keyValueStore","useKeyValueStore","setValue","saving","setSaving","deleting","setDeleting","saveQueryError","setSaveQueryError","deleteQueryError","setDeleteQueryError","setError","useMemo","getKey","sub","pipe","startWith","map","data","subscribe","next","unsubscribe","saveQuery","useCallback","newQueries","_key","uuid","setKey","updateQuery","updatedQueries","q","deleteQuery","prev","filteredQueries","k","FixedHeader","Stack","ScrollContainer","QueryRecall","getStateFromUrl","setStateFromParsedUrl","currentQuery","currentParams","generateUrl","toast","useToast","month","day","year","hour","minute","hour12","formatDate","useDateTimeFormat","editingKey","setEditingKey","editingTitle","setEditingTitle","optimisticTitles","setOptimisticTitles","searchQuery","setSearchQuery","selectedUrl","setSelectedUrl","newUrl","some","savedQueryObj","isEqual","duplicateQuery","find","q_0","savedQueryObj_0","push","closable","status","title","description","format","savedAt","handleSave","newTitle","prev_1","next_0","prev_0","handleTitleSave","query_0","newUrl_0","q_1","savedQueryObj_1","duplicateQuery_0","q_2","savedQueryObj_2","handleUpdate","T0","T1","q_3","toLowerCase","textTransform","t10","t11","t12","t13","Button","AddIcon","t14","t15","t16","event","currentTarget","t17","TextInput","SearchIcon","q_4","queryObj","isSelected","areQueriesEqual","isEdited","parsedUrl","position","event_0","event_1","maxWidth","height","padding","width","borderRadius","MenuButton","ContextMenuButton","Menu","MenuItem","TrashIcon","event_2","stopPropagation","portal","placement","tone","Code","right","bottom","e","narrowBreakpoint","window","innerWidth","calculatePaneSizeOptions","rootHeight","document","body","getBoundingClientRect","defaultSize","size","allowResize","minSize","Math","min","max","maxSize","usePaneSize","visionRootRef","isNarrowBreakpoint","setIsNarrowBreakpoint","_temp","paneSizeOptions","setPaneSizeOptions","_temp2","handleResize","entry","contentRect","resizeObserver","ResizeObserver","observe","disconnect","VisionGuiControls","listenInProgress","queryInProgress","onQueryExecution","onListenExecution","Hotkeys","StopIcon","PlayIcon","PerspectivePopoverContent","PerspectivePopoverLink","Dot","$tone","PerspectivePopover","open","setOpen","buttonRef","popoverRef","handleClick","useClickOutsideEvent","Inline","Badge","Translate","HelpCircleIcon","Popover","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","Select","_temp3","t18","t19","t20","t21","t22","perspectiveName","Fragment","t23","t24","t25","CopyIcon","t26","Grid","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","muted","critical","QueryErrorDetails","details","mapToLegacyDetails","line","dashLine","column","columnEnd","lineNumber","start","end","lineStart","lastIndexOf","match","indexOf","repeat","hats","QueryErrorDialog","ResultViewWrapper","lru","LRU","ResultView","datasetName","workspaceDataset","useDataset","isRecord","DocumentEditLabel","JsonInspector","isExpanded","toggleExpanded","isKey","keypath","endsWith","id","LinkIcon","IntentLink","keyPath","cached","segments","depthLimit","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","preventSave","evt","preventDefault","SaveCsvButton","blobUrl","isDisabled","DocumentSheetIcon","button","SaveJsonButton","VisionGuiResult","queryResult","listenMutations","queryTime","e2eTime","hasResult","jsonUrl","csvUrl","SaveResultButtons","nodeContains","node","other","compareDocumentPosition","sanityUrl","isRunHotkey","isHotkey","VisionGui","config","projectId","defaultDataset","useScheduledDraftsEnabled","releases","useActiveReleases","isDraftModelEnabled","useWorkspace","drafts","editorQueryRef","editorParamsRef","querySubscriptionRef","listenSubscriptionRef","storedDataset","storedApiVersion","defaultApiVersion","storedQuery","storedParams","storedPerspective","setDataset","setApiVersion","setCustomApiVersion","setPerspectiveState","setUrl","setQuery","rawParams","setRawParams","setQueryResult","setListenMutations","setQueryTime","setE2eTime","setQueryInProgress","setListenInProgress","isQueryRecallCollapsed","setIsQueryRecallCollapsed","scheduledDraftReleases","release","isCardinalityOneRelease","releaseIds","sortReleases","getReleaseIdFromReleaseDocumentId","_id","defaultPerspective","_client","useClient","client","withConfig","allowReconfigure","cancelQuerySubscription","cancelListenerSubscription","handleQueryExecution","context","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","observable","fetch","filterResponse","res","ms","result","setPerspective","newPerspective","handleChangeDataset","newDataset","target","handleChangeApiVersion","newApiVersion","focus","handleCustomApiVersionChange","newCustomApiVersion","handleChangePerspective","handleListenerEvent","prevMutations","handleListenExecution","shouldExecute","listen","events","includeAllVersions","handleParamsChange","usedApiVersion","usedDataset","urlQuery","parts","parsedUrlObj","handlePaste","clipboardData","getData","urlState","handleKeyDown","isWithinRoot","addEventListener","removeEventListener","handleStudioPerspectiveChange","useEffectEvent","stack","queryString","queryParams","SplitPane","left","top","transform","zIndex","pointerEvents","display","alignItems","ChevronLeftIcon","ChevronRightIcon","useDatasets","configDatasets","bb0","list","catchError","useObservable","d","VisionContainer","datasetsClient","loadedDatasets","VisionErrorBoundary","Component","constructor","numRetries","getDerivedStateFromError","handleRetryRender","setState","handleRetryWithCacheClear","render","children","withCacheClear","Container","Heading","SanityVision","tool"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SanityVision.js","sources":["../../src/apiVersions.ts","../../src/components/DelayedSpinner.tsx","../../src/codemirror/extensions.ts","../../src/codemirror/useCodemirrorTheme.ts","../../src/codemirror/VisionCodeMirror.styled.tsx","../../src/codemirror/VisionCodeMirror.tsx","../../src/perspectives.ts","../../src/util/encodeQueryString.ts","../../src/util/isPlainObject.ts","../../src/util/localStorage.ts","../../src/util/parseApiQueryString.ts","../../src/util/prefixApiVersion.ts","../../src/util/validateApiVersion.ts","../../src/util/tryParseParams.ts","../../src/components/VisionGui.styled.tsx","../../src/components/ParamsEditor.tsx","../../src/hooks/useSavedQueries.ts","../../src/components/QueryRecall.styled.tsx","../../src/components/QueryRecall.tsx","../../src/components/usePaneSize.ts","../../src/components/VisionGuiControls.tsx","../../src/components/PerspectivePopover.styled.tsx","../../src/components/PerspectivePopover.tsx","../../src/components/VisionGuiHeader.tsx","../../src/util/getBlobUrl.ts","../../src/components/QueryErrorDialog.styled.tsx","../../src/components/QueryErrorDetails.tsx","../../src/components/QueryErrorDialog.tsx","../../src/components/ResultView.styled.tsx","../../src/components/ResultView.tsx","../../src/components/SaveResultButtons.tsx","../../src/components/VisionGuiResult.tsx","../../src/components/VisionGui.tsx","../../src/hooks/useDatasets.ts","../../src/containers/VisionContainer.tsx","../../src/containers/VisionErrorBoundary.tsx","../../src/SanityVision.tsx"],"sourcesContent":["export const API_VERSIONS = [\n 'v1',\n 'vX',\n 'v2021-03-25',\n 'v2021-10-21',\n 'v2022-03-07',\n 'v2025-02-19',\n `v${new Date().toISOString().split('T')[0]}`,\n]\nexport const [DEFAULT_API_VERSION] = API_VERSIONS.slice(-1)\n","import {Spinner} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\n\ninterface DelayedSpinnerProps {\n delay?: number\n}\n\n// Waits for X ms before showing a spinner\nexport function DelayedSpinner(props: DelayedSpinnerProps) {\n const [show, setShow] = useState(false)\n\n useEffect(() => {\n const timer = setTimeout(() => setShow(true), props.delay || 500)\n return () => clearTimeout(timer)\n }, [props.delay])\n\n return show ? <Spinner muted size={4} /> : null\n}\n","import {closeBrackets} from '@codemirror/autocomplete'\nimport {defaultKeymap, history, historyKeymap} from '@codemirror/commands'\nimport {javascriptLanguage} from '@codemirror/lang-javascript'\nimport {\n bracketMatching,\n defaultHighlightStyle,\n indentOnInput,\n syntaxHighlighting,\n} from '@codemirror/language'\nimport {highlightSelectionMatches} from '@codemirror/search'\nimport {type Extension} from '@codemirror/state'\nimport {\n drawSelection,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n} from '@codemirror/view'\n\nexport const codemirrorExtensions: Extension[] = [\n [javascriptLanguage],\n lineNumbers(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSelectionMatches(),\n highlightSpecialChars(),\n indentOnInput(),\n bracketMatching(),\n closeBrackets(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, {fallback: true}),\n keymap.of(\n [\n // Override the default keymap for Mod-Enter to not insert a new line, we have a custom event handler for executing queries\n {key: 'Mod-Enter', run: () => true},\n\n // Add the default keymap and history keymap\n defaultKeymap,\n historyKeymap,\n ]\n .flat()\n .filter(Boolean),\n ),\n]\n","import {HighlightStyle, syntaxHighlighting} from '@codemirror/language'\nimport {EditorView} from '@codemirror/view'\nimport {tags as t} from '@lezer/highlight'\nimport {hues} from '@sanity/color'\nimport {rem, type Theme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function useCodemirrorTheme(theme: Theme) {\n const cmTheme = useMemo(() => createTheme(theme), [theme])\n const cmHighlight = useMemo(() => syntaxHighlighting(createHighlight(theme)), [theme])\n\n return [cmTheme, cmHighlight]\n}\n\nfunction createTheme(theme: Theme) {\n const {color, fonts} = theme.sanity\n const card = color.card.enabled\n const cursor = hues.blue[color.dark ? 400 : 500].hex\n const selection = hues.gray[theme.sanity.color.dark ? 900 : 100].hex\n\n return EditorView.theme(\n {\n '&': {\n color: card.fg,\n backgroundColor: card.bg,\n },\n\n '.cm-content': {\n caretColor: cursor,\n },\n\n '.cm-editor': {\n fontFamily: fonts.code.family,\n fontSize: rem(fonts.code.sizes[1].fontSize),\n lineHeight: 'inherit',\n },\n\n '.cm-cursor, .cm-dropCursor': {borderLeftColor: cursor},\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: selection,\n },\n\n '.cm-panels': {backgroundColor: card.bg, color: card.fg},\n '.cm-panels.cm-panels-top': {borderBottom: `2px solid ${card.border}`},\n '.cm-panels.cm-panels-bottom': {borderTop: `2px solid ${card.border}`},\n },\n {dark: color.dark},\n )\n}\n\nfunction createHighlight(theme: Theme) {\n const c = theme.sanity.color.base\n const s = theme.sanity.color.syntax\n return HighlightStyle.define([\n {tag: t.keyword, color: s.keyword},\n {tag: [t.propertyName, t.name, t.deleted, t.character, t.macroName], color: s.property},\n {tag: [t.function(t.variableName), t.labelName], color: s.function},\n {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: s.variable},\n {tag: [t.definition(t.name), t.separator], color: s.constant},\n {\n tag: [\n t.typeName,\n t.className,\n t.number,\n t.changed,\n t.annotation,\n t.modifier,\n t.self,\n t.namespace,\n ],\n color: s.number,\n },\n {\n tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)],\n color: s.operator,\n },\n {tag: [t.meta, t.comment], color: s.comment},\n {tag: t.strong, fontWeight: 'bold'},\n {tag: t.emphasis, fontStyle: 'italic'},\n {tag: t.strikethrough, textDecoration: 'line-through'},\n {tag: t.heading, fontWeight: 'bold', color: s.property},\n {tag: [t.atom, t.bool, t.special(t.variableName)], color: s.boolean},\n {tag: [t.processingInstruction, t.string, t.inserted], color: s.string},\n {tag: t.invalid, color: c.fg},\n ])\n}\n","import {rem} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const EditorRoot = styled.div`\n width: 100%;\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n overflow: clip;\n position: relative;\n display: flex;\n\n & .cm-theme {\n width: 100%;\n }\n\n & .cm-editor {\n height: 100%;\n\n font-size: 16px;\n line-height: 21px;\n }\n\n & .cm-line {\n padding-left: ${({theme}) => rem(theme.sanity.space[3])};\n }\n\n & .cm-content {\n border-right-width: ${({theme}) => rem(theme.sanity.space[4])} !important;\n padding-top: ${({theme}) => rem(theme.sanity.space[5])};\n }\n`\n","import {useTheme} from '@sanity/ui'\nimport CodeMirror, {\n EditorSelection,\n type ReactCodeMirrorProps,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror'\nimport {forwardRef, useCallback, useImperativeHandle, useRef, useState} from 'react'\n\nimport {codemirrorExtensions} from './extensions'\nimport {useCodemirrorTheme} from './useCodemirrorTheme'\nimport {EditorRoot} from './VisionCodeMirror.styled'\n\nexport interface VisionCodeMirrorHandle {\n resetEditorContent: (newContent: string) => void\n}\n\nexport const VisionCodeMirror = forwardRef<\n VisionCodeMirrorHandle,\n Pick<ReactCodeMirrorProps, 'onChange'> & {\n initialValue: ReactCodeMirrorProps['value']\n }\n>((props, ref) => {\n // The value prop is only passed for initial value, and is not updated when the parent component updates the value.\n // If you need to update the value, use the resetEditorContent function.\n const [initialValue] = useState(props.initialValue)\n const sanityTheme = useTheme()\n const theme = useCodemirrorTheme(sanityTheme)\n const codeMirrorRef = useRef<ReactCodeMirrorRef>(null)\n\n const resetEditorContent = useCallback((newContent: string) => {\n const editorView = codeMirrorRef.current?.view\n if (!editorView) return\n\n const currentDoc = editorView.state.doc.toString()\n if (newContent !== currentDoc) {\n editorView.dispatch({\n changes: {from: 0, to: currentDoc.length, insert: newContent},\n selection: EditorSelection.cursor(newContent.length), // Place cursor at end\n })\n }\n }, [])\n\n useImperativeHandle(\n ref,\n () => ({\n resetEditorContent,\n }),\n [resetEditorContent],\n )\n\n return (\n <EditorRoot>\n <CodeMirror\n ref={codeMirrorRef}\n basicSetup={false}\n theme={theme}\n extensions={codemirrorExtensions}\n value={initialValue}\n onChange={props.onChange}\n />\n </EditorRoot>\n )\n})\n\n// Add display name\nVisionCodeMirror.displayName = 'VisionCodeMirror'\n","import {type ClientPerspective} from '@sanity/client'\nimport isEqual from 'react-fast-compare'\nimport {type PerspectiveContextValue, 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 hasPinnedPerspectiveChanged(\n previous: PerspectiveContextValue,\n next: PerspectiveContextValue,\n): boolean {\n const hasPerspectiveStackChanged = !isEqual(previous.perspectiveStack, next.perspectiveStack)\n\n return (\n previous.selectedPerspectiveName !== next.selectedPerspectiveName || hasPerspectiveStackChanged\n )\n}\n\nexport function getActivePerspective({\n visionPerspective,\n perspectiveStack,\n 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 (err) {\n return {}\n }\n }\n}\n\nfunction supportsLocalStorage() {\n const mod = 'lsCheck'\n try {\n localStorage.setItem(mod, mod)\n localStorage.removeItem(mod)\n return true\n } catch (err) {\n return false\n }\n}\n","export interface ParsedApiQueryString {\n query: string\n params: Record<string, unknown>\n options: Record<string, string>\n}\n\nexport function parseApiQueryString(qs: URLSearchParams): ParsedApiQueryString {\n const params: Record<string, unknown> = {}\n const options: Record<string, string> = {}\n\n for (const [key, value] of qs.entries()) {\n if (key[0] === '$') {\n params[key.slice(1)] = JSON.parse(value)\n continue\n }\n\n if (key === 'perspective') {\n options[key] = value\n continue\n }\n }\n\n return {query: qs.get('query') || '', params, options}\n}\n","export function prefixApiVersion(version: string): string {\n if (version[0] !== 'v' && version !== 'other') {\n return `v${version}`\n }\n\n return version\n}\n","export function validateApiVersion(apiVersion: string): boolean {\n const parseableApiVersion = apiVersion.replace(/^v/, '').trim().toUpperCase()\n\n const isValidApiVersion =\n parseableApiVersion.length > 0 &&\n (parseableApiVersion === 'X' ||\n parseableApiVersion === '1' ||\n (/^\\d{4}-\\d{2}-\\d{2}$/.test(parseableApiVersion) && !isNaN(Date.parse(parseableApiVersion))))\n\n return isValidApiVersion\n}\n","import JSON5 from 'json5'\nimport {type TFunction} from 'sanity'\n\nexport function tryParseParams(\n val: string,\n t: TFunction<'vision', undefined>,\n): Record<string, unknown> | Error {\n try {\n const parsed = val ? JSON5.parse(val) : {}\n return typeof parsed === 'object' && parsed && !Array.isArray(parsed) ? parsed : {}\n } catch (err) {\n // JSON5 always prefixes the error message with JSON5:, so we remove it\n // to clean up the error tooltip\n err.message = `${t('params.error.params-invalid-json')}:\\n\\n${err.message.replace(\n 'JSON5:',\n '',\n )}`\n return err\n }\n}\n","import {Box, Card, Flex, Label, rem, Text} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const Root = styled(Flex)`\n .sidebarPanes .Pane {\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n & .Resizer {\n background: var(--card-border-color);\n opacity: 1;\n z-index: 1;\n box-sizing: border-box;\n background-clip: padding-box;\n border: solid transparent;\n }\n\n & .Resizer:hover {\n border-color: var(--card-shadow-ambient-color);\n }\n\n & .Resizer.horizontal {\n height: 11px;\n margin: -5px 0;\n border-width: 5px 0;\n cursor: row-resize;\n width: 100%;\n z-index: 4;\n }\n\n & .Resizer.vertical {\n width: 11px;\n margin: 0 -5px;\n border-width: 0 5px;\n cursor: col-resize;\n z-index: 2; /* To prevent the resizer from being hidden behind CodeMirror scroll area */\n }\n\n .Resizer.disabled {\n cursor: not-allowed;\n }\n\n .Resizer.disabled:hover {\n border-color: transparent;\n }\n`\n\nRoot.displayName = 'Root'\n\nexport const Header = styled(Card)`\n border-bottom: 1px solid var(--card-border-color);\n`\n\nexport const StyledLabel = styled(Label)`\n flex: 1;\n`\n\nexport const SplitpaneContainer = styled(Box)`\n position: relative;\n`\n\nexport const QueryCopyLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n\nexport const InputBackgroundContainer = styled(Box)`\n position: absolute;\n top: 1rem;\n left: 0;\n padding: 0;\n margin: 0;\n z-index: 10;\n right: 0;\n\n ${StyledLabel} {\n user-select: none;\n }\n`\n\nexport const InputBackgroundContainerLeft = styled(InputBackgroundContainer)`\n // This is so its aligned with the gutters of CodeMirror\n left: 33px;\n`\n\nexport const InputContainer = styled(Card)`\n width: 100%;\n height: 100%;\n position: relative;\n flex-direction: column;\n`\n\nexport const ResultOuterContainer = styled(Flex)`\n height: 100%;\n`\n\nexport const ResultInnerContainer = styled(Box)`\n position: relative;\n`\n\nexport const ResultContainer = styled(Card)<{$isInvalid: boolean}>`\n height: 100%;\n width: 100%;\n position: absolute;\n max-width: 100%;\n\n ${({$isInvalid}) =>\n $isInvalid &&\n css`\n &:after {\n background-color: var(--card-bg-color);\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n }\n `}\n`\n\nexport const Result = styled(Box)`\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 20;\n`\n\nexport const ResultFooter = styled(Flex)`\n border-top: 1px solid var(--card-border-color);\n`\n\nexport const TimingsCard = styled(Card)`\n position: relative;\n`\n\nexport const TimingsContainer = styled(Box)`\n width: 100%;\n height: 100%;\n`\n\nexport const TimingsTextContainer = styled(Flex)`\n height: 100%;\n min-height: ${({theme}) =>\n rem(\n theme.sanity.space[3] * 2 +\n theme.sanity.fonts.text.sizes[2].lineHeight -\n theme.sanity.fonts.text.sizes[2].ascenderHeight -\n theme.sanity.fonts.text.sizes[2].descenderHeight,\n )};\n`\n\nexport const DownloadsCard = styled(Card)`\n position: relative;\n`\n\nexport const SaveResultLabel = styled(Text)`\n transform: initial;\n &:before,\n &:after {\n content: none;\n }\n > span {\n display: flex !important;\n gap: ${({theme}) => rem(theme.sanity.space[3])};\n align-items: center;\n }\n`\n\nexport const ControlsContainer = styled(Box)`\n border-top: 1px solid var(--card-border-color);\n`\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text, Tooltip} from '@sanity/ui'\nimport {debounce} from 'lodash'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {type TFunction, useTranslation} from 'sanity'\n\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {tryParseParams} from '../util/tryParseParams'\nimport {type Params} from './VisionGui'\nimport {InputBackgroundContainerLeft, StyledLabel} from './VisionGui.styled'\n\nconst defaultValue = `{\\n \\n}`\n\nexport interface ParamsEditorProps {\n value: string\n onChange: (changeEvt: string) => void\n paramsError: string | undefined\n hasValidParams: boolean\n editorRef: RefObject<VisionCodeMirrorHandle | null>\n}\n\nexport interface ParamsEditorChange {\n valid: boolean\n}\n\nexport function ParamsEditor(props: ParamsEditorProps) {\n const {onChange, paramsError, hasValidParams, editorRef} = props\n const {t} = useTranslation(visionLocaleNamespace)\n\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 />\n </Card>\n )\n}\n\nexport function parseParams(\n value: string,\n t: TFunction<typeof visionLocaleNamespace, undefined>,\n): Params {\n const parsedParams = tryParseParams(value, t)\n const params = parsedParams instanceof Error ? {} : parsedParams\n const validationError = parsedParams instanceof Error ? parsedParams.message : undefined\n const isValid = !validationError\n\n return {\n parsed: params,\n raw: value,\n valid: isValid,\n error: validationError,\n }\n}\n","import {uuid} from '@sanity/uuid' // Import the UUID library\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {map, startWith} from 'rxjs/operators'\nimport {type KeyValueStoreValue, useKeyValueStore} from 'sanity'\n\nconst STORED_QUERIES_NAMESPACE = 'studio.vision-tool.saved-queries'\n\nexport interface QueryConfig {\n _key: string\n url: string\n savedAt: string\n title?: string\n shared?: boolean\n}\n\nexport interface StoredQueries {\n queries: QueryConfig[]\n}\n\nconst defaultValue = {\n queries: [],\n}\nconst keyValueStoreKey = STORED_QUERIES_NAMESPACE\n\nexport function useSavedQueries(): {\n queries: QueryConfig[]\n saveQuery: (query: Omit<QueryConfig, '_key'>) => Promise<void>\n updateQuery: (query: QueryConfig) => Promise<void>\n deleteQuery: (key: string) => Promise<void>\n saving: boolean\n deleting: string[]\n saveQueryError: Error | undefined\n deleteQueryError: Error | undefined\n error: Error | undefined\n} {\n const keyValueStore = useKeyValueStore()\n\n const [value, setValue] = useState<StoredQueries>(defaultValue)\n const [saving, setSaving] = useState(false)\n const [deleting, setDeleting] = useState<string[]>([])\n const [saveQueryError, setSaveQueryError] = useState<Error | undefined>()\n const [deleteQueryError, setDeleteQueryError] = useState<Error | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const queries = useMemo(() => {\n return keyValueStore.getKey(keyValueStoreKey)\n }, [keyValueStore])\n\n useEffect(() => {\n const sub = queries\n .pipe(\n startWith(defaultValue as any),\n map((data: StoredQueries) => {\n if (!data) {\n return defaultValue\n }\n return data\n }),\n )\n .subscribe({\n next: setValue,\n error: (err) => setError(err as Error),\n })\n\n return () => sub?.unsubscribe()\n }, [queries, keyValueStore])\n\n const saveQuery = useCallback(\n async (query: Omit<QueryConfig, '_key'>) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const newQuery = {...query, _key: uuid()} // Add a unique _key to the query\n const newQueries = [newQuery, ...value.queries]\n setValue({queries: newQueries})\n await keyValueStore.setKey(keyValueStoreKey, {\n queries: newQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n }\n setSaving(false)\n },\n [keyValueStore, value.queries],\n )\n\n const updateQuery = useCallback(\n async (query: QueryConfig) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const updatedQueries = value.queries.map((q) =>\n q._key === query._key ? {...q, ...query} : q,\n )\n setValue({queries: updatedQueries})\n await keyValueStore.setKey(keyValueStoreKey, {\n queries: updatedQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n }\n setSaving(false)\n },\n [keyValueStore, value.queries],\n )\n\n const deleteQuery = useCallback(\n async (key: string) => {\n setDeleting((prev) => [...prev, key])\n setDeleteQueryError(undefined)\n try {\n const filteredQueries = value.queries.filter((q) => q._key !== key)\n setValue({queries: filteredQueries})\n await keyValueStore.setKey(keyValueStoreKey, {\n queries: filteredQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setDeleteQueryError(err as Error)\n }\n setDeleting((prev) => prev.filter((k) => k !== key))\n },\n [keyValueStore, value.queries],\n )\n\n return {\n queries: value.queries,\n saveQuery,\n updateQuery,\n deleteQuery,\n saving,\n deleting,\n saveQueryError,\n deleteQueryError,\n error,\n }\n}\n","import {Box, Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const FixedHeader = styled(Stack)`\n position: sticky;\n top: 0;\n background: ${({theme}) => theme.sanity.color.base.bg};\n z-index: 1;\n`\n\nexport const ScrollContainer = styled(Box)`\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${({theme}) => theme.sanity.color.base.border};\n border-radius: 4px;\n }\n`\n","import {AddIcon, SearchIcon, TrashIcon} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Code,\n Flex,\n Menu,\n MenuButton,\n MenuItem,\n Stack,\n Text,\n TextInput,\n useToast,\n} from '@sanity/ui'\nimport {isEqual} from 'lodash'\nimport {type ReactElement, useCallback, useState} from 'react'\nimport {ContextMenuButton, useDateTimeFormat, useTranslation} from 'sanity'\n\nimport {type QueryConfig, useSavedQueries} from '../hooks/useSavedQueries'\nimport {visionLocaleNamespace} from '../i18n'\nimport {FixedHeader, ScrollContainer} from './QueryRecall.styled'\nimport {type ParsedUrlState} from './VisionGui'\n\nexport function QueryRecall({\n url,\n getStateFromUrl,\n setStateFromParsedUrl,\n currentQuery,\n currentParams,\n generateUrl,\n}: {\n url?: string\n getStateFromUrl: (data: string) => ParsedUrlState | null\n setStateFromParsedUrl: (parsedUrlObj: ParsedUrlState) => void\n currentQuery: string\n currentParams: Record<string, unknown>\n generateUrl: (query: string, params: Record<string, unknown>) => string\n}): ReactElement {\n const toast = useToast()\n const {saveQuery, updateQuery, queries, deleteQuery, saving, deleting, saveQueryError} =\n useSavedQueries()\n const {t} = useTranslation(visionLocaleNamespace)\n const formatDate = useDateTimeFormat({\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n const [editingKey, setEditingKey] = useState<string | null>(null)\n const [editingTitle, setEditingTitle] = useState('')\n const [optimisticTitles, setOptimisticTitles] = useState<Record<string, string>>({})\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedUrl, setSelectedUrl] = useState<string | undefined>(url)\n\n const handleSave = useCallback(async () => {\n // Generate the correct URL first\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(new Date(duplicateQuery?.savedAt || ''))}`,\n })\n return\n }\n\n if (newUrl) {\n await saveQuery({\n url: newUrl,\n savedAt: new Date().toISOString(),\n title: 'Untitled',\n })\n // Set the selected URL to the newly saved query's URL\n setSelectedUrl(newUrl)\n }\n if (saveQueryError) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: saveQueryError.message,\n })\n } else {\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n }\n }, [\n queries,\n saveQueryError,\n toast,\n t,\n currentQuery,\n currentParams,\n getStateFromUrl,\n generateUrl,\n formatDate,\n saveQuery,\n ])\n\n const handleTitleSave = useCallback(\n async (query: QueryConfig, newTitle: string) => {\n setEditingKey(null)\n setOptimisticTitles((prev) => ({...prev, [query._key]: newTitle}))\n\n try {\n await updateQuery({\n ...query,\n title: newTitle,\n })\n // Clear optimistic title on success\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n } catch (err) {\n // Clear optimistic title on error\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [updateQuery, toast, t],\n )\n\n const handleUpdate = useCallback(\n async (query: QueryConfig) => {\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n // Skip the current query when checking for duplicates\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(\n new Date(duplicateQuery?.savedAt || ''),\n )}`,\n })\n return\n }\n\n try {\n await updateQuery({\n ...query,\n url: newUrl,\n savedAt: new Date().toISOString(),\n })\n setSelectedUrl(newUrl)\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [\n currentQuery,\n currentParams,\n formatDate,\n generateUrl,\n updateQuery,\n toast,\n t,\n queries,\n getStateFromUrl,\n ],\n )\n\n const filteredQueries = queries?.filter((q) => {\n return q?.title?.toLowerCase().includes(searchQuery.toLowerCase())\n })\n\n return (\n <ScrollContainer>\n <FixedHeader space={3}>\n <Flex padding={3} paddingTop={4} paddingBottom={0} justify=\"space-between\" align=\"center\">\n <Text weight=\"semibold\" style={{textTransform: 'capitalize'}} size={4}>\n {t('label.saved-queries')}\n </Text>\n <Button\n label={t('action.save-query')}\n icon={AddIcon}\n disabled={saving}\n onClick={handleSave}\n mode=\"bleed\"\n />\n </Flex>\n <Box padding={3} paddingTop={0}>\n <TextInput\n placeholder={t('label.search-queries')}\n icon={SearchIcon}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.currentTarget.value)}\n />\n </Box>\n </FixedHeader>\n <Stack paddingY={3}>\n {filteredQueries?.map((q) => {\n const queryObj = getStateFromUrl(q.url)\n const isSelected = selectedUrl === q.url\n\n // Compare against current live state\n const areQueriesEqual =\n queryObj && currentQuery === queryObj.query && isEqual(currentParams, queryObj.params)\n\n const isEdited = isSelected && !areQueriesEqual\n return (\n <Card\n key={q._key}\n width={'fill'}\n padding={4}\n border\n tone={isSelected ? 'positive' : 'default'}\n onClick={() => {\n setSelectedUrl(q.url) // Update the selected query immediately\n const parsedUrl = getStateFromUrl(q.url)\n if (parsedUrl) {\n setStateFromParsedUrl(parsedUrl)\n }\n }}\n style={{position: 'relative'}}\n >\n <Stack space={3}>\n <Flex justify=\"space-between\" align={'center'}>\n <Flex align=\"center\" gap={2} paddingRight={1}>\n {editingKey === q._key ? (\n <TextInput\n value={editingTitle}\n onChange={(event) => setEditingTitle(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n void handleTitleSave(q, editingTitle)\n } else if (event.key === 'Escape') {\n setEditingKey(null)\n }\n }}\n onBlur={() => handleTitleSave(q, editingTitle)}\n autoFocus\n style={{maxWidth: '170px', height: '24px'}}\n />\n ) : (\n <Text\n weight=\"bold\"\n size={3}\n textOverflow=\"ellipsis\"\n style={{maxWidth: '170px', cursor: 'pointer', padding: '4px 0'}}\n title={\n optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)\n }\n onClick={() => {\n setEditingKey(q._key)\n setEditingTitle(q.title || q._key.slice(0, 5))\n }}\n >\n {optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)}\n </Text>\n )}\n {isEdited && (\n <Box\n style={{\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: 'var(--card-focus-ring-color)',\n }}\n />\n )}\n </Flex>\n <MenuButton\n button={<ContextMenuButton />}\n id={`${q._key}-menu`}\n menu={\n <Menu\n // style={{background: 'white', backgroundColor: 'white', borderRadius: '11%'}}\n >\n <MenuItem\n tone=\"critical\"\n padding={3}\n icon={TrashIcon}\n text={t('action.delete')}\n onClick={(event) => {\n event.stopPropagation()\n void deleteQuery(q._key)\n }}\n />\n </Menu>\n }\n popover={{portal: true, placement: 'bottom-end', tone: 'default'}}\n />\n </Flex>\n\n <Code muted>{queryObj?.query.split('{')[0]}</Code>\n\n <Flex align=\"center\" gap={1}>\n <Text size={1} muted>\n {formatDate.format(new Date(q.savedAt || ''))}\n </Text>\n </Flex>\n\n {isEdited && (\n <Button\n mode=\"ghost\"\n tone=\"default\"\n size={1}\n padding={2}\n style={{\n height: '24px',\n position: 'absolute',\n right: '16px',\n bottom: '16px',\n fontSize: '12px',\n }}\n text={t('action.update')}\n onClick={(e) => {\n e.stopPropagation()\n void handleUpdate(q)\n }}\n />\n )}\n </Stack>\n </Card>\n )\n })}\n </Stack>\n </ScrollContainer>\n )\n}\n","import {useEffect, useState} from 'react'\n\ninterface PaneSizeOptions {\n defaultSize: number\n size?: number\n allowResize: boolean\n minSize: number\n maxSize: number\n}\nfunction narrowBreakpoint(): boolean {\n return typeof window !== 'undefined' && window.innerWidth > 600\n}\n\nfunction calculatePaneSizeOptions(height: number | undefined): PaneSizeOptions {\n let rootHeight = height\n\n if (!rootHeight) {\n // Initial root height without header\n rootHeight =\n typeof window !== 'undefined' && typeof document !== 'undefined'\n ? document.body.getBoundingClientRect().height - 60\n : 0\n }\n return {\n defaultSize: rootHeight / (narrowBreakpoint() ? 2 : 1),\n size: rootHeight > 550 ? undefined : rootHeight * 0.4,\n allowResize: rootHeight > 550,\n minSize: Math.min(170, Math.max(170, rootHeight / 2)),\n maxSize: rootHeight > 650 ? rootHeight * 0.7 : rootHeight * 0.6,\n }\n}\n\nexport function usePaneSize({\n visionRootRef,\n}: {\n visionRootRef: React.RefObject<HTMLDivElement | null>\n}) {\n const [isNarrowBreakpoint, setIsNarrowBreakpoint] = useState(() => narrowBreakpoint())\n const [paneSizeOptions, setPaneSizeOptions] = useState<PaneSizeOptions>(() =>\n calculatePaneSizeOptions(undefined),\n )\n\n useEffect(() => {\n if (!visionRootRef.current) {\n return undefined\n }\n const handleResize = (entries: ResizeObserverEntry[]) => {\n setIsNarrowBreakpoint(narrowBreakpoint())\n const entry = entries?.[0]\n if (entry) {\n setPaneSizeOptions(calculatePaneSizeOptions(entry.contentRect.height))\n }\n }\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(visionRootRef.current)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [visionRootRef])\n\n return {paneSizeOptions, isNarrowBreakpoint}\n}\n","import {PlayIcon, StopIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Hotkeys, Text, Tooltip} from '@sanity/ui'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {ControlsContainer} from './VisionGui.styled'\n\nexport interface VisionGuiControlsProps {\n hasValidParams: boolean\n queryInProgress: boolean\n listenInProgress: boolean\n onQueryExecution: () => void\n onListenExecution: () => void\n}\n\n/**\n * Vision GUI controls\n * To handle query and listen execution.\n */\nexport function VisionGuiControls({\n hasValidParams,\n listenInProgress,\n queryInProgress,\n onQueryExecution,\n onListenExecution,\n}: VisionGuiControlsProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n return (\n <ControlsContainer>\n <Card padding={3} paddingX={3}>\n <Tooltip\n content={\n <Card radius={4}>\n <Text size={1} muted>\n {t('params.error.params-invalid-json')}\n </Text>\n </Card>\n }\n placement=\"top\"\n disabled={hasValidParams}\n portal\n >\n <Flex justify=\"space-evenly\">\n <Box flex={1}>\n <Tooltip\n content={\n <Card radius={4}>\n <Hotkeys keys={['Ctrl', 'Enter']} />\n </Card>\n }\n placement=\"top\"\n portal\n >\n <Button\n width=\"fill\"\n onClick={onQueryExecution}\n type=\"button\"\n icon={queryInProgress ? StopIcon : PlayIcon}\n disabled={listenInProgress || !hasValidParams}\n tone={queryInProgress ? 'positive' : 'primary'}\n text={queryInProgress ? t('action.query-cancel') : t('action.query-execute')}\n />\n </Tooltip>\n </Box>\n <Box flex={1} marginLeft={3}>\n <Button\n width=\"fill\"\n onClick={onListenExecution}\n type=\"button\"\n icon={listenInProgress ? StopIcon : PlayIcon}\n text={listenInProgress ? t('action.listen-cancel') : t('action.listen-execute')}\n mode=\"ghost\"\n disabled={!hasValidParams}\n tone={listenInProgress ? 'positive' : 'default'}\n />\n </Box>\n </Flex>\n </Tooltip>\n </Card>\n </ControlsContainer>\n )\n}\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const PerspectivePopoverContent = styled(Box)`\n /* This limits the width of the popover content */\n max-width: 240px;\n`\n\nexport const PerspectivePopoverLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n","import {HelpCircleIcon} from '@sanity/icons'\nimport {\n Badge,\n Box,\n Button,\n Card,\n type CardTone,\n Inline,\n Popover,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\nimport {Translate, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {PerspectivePopoverContent, PerspectivePopoverLink} from './PerspectivePopover.styled'\n\nconst Dot = styled.div<{$tone: CardTone}>`\n width: 4px;\n height: 4px;\n border-radius: 3px;\n box-shadow: 0 0 0 1px var(--card-bg-color);\n background-color: ${({$tone}) => `var(--card-badge-${$tone}-dot-color)`};\n`\n\nconst SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION = false\n\nexport function PerspectivePopover() {\n const [open, setOpen] = useState(false)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n\n const {t} = useTranslation(visionLocaleNamespace)\n\n useClickOutsideEvent(\n () => setOpen(false),\n () => [buttonRef.current, popoverRef.current],\n )\n\n return (\n <Popover\n content={\n <PerspectivePopoverContent>\n <Stack space={4}>\n <Inline space={2}>\n <Text weight=\"medium\">{t('settings.perspectives.title')}</Text>\n </Inline>\n\n <Card>\n <Text muted>{t('settings.perspectives.description')}</Text>\n </Card>\n <Card>\n <Stack space={2}>\n <Box>\n <Badge tone=\"primary\">{t('label.new')}</Badge>\n </Box>\n <Text muted>\n <Translate\n t={t}\n i18nKey=\"settings.perspective.preview-drafts-renamed-to-drafts.description\"\n />\n </Text>\n </Stack>\n </Card>\n {SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? (\n <Card>\n <Badge tone=\"caution\">{t('label.new')}</Badge>\n <Card>\n <Text muted>\n <Translate t={t} i18nKey=\"settings.perspectives.new-default.description\" />\n </Text>\n </Card>\n </Card>\n ) : null}\n\n <Card>\n <Text>\n <PerspectivePopoverLink\n href=\"https://www.sanity.io/docs/perspectives\"\n target=\"_blank\"\n >\n {t('settings.perspectives.action.docs-link')} →\n </PerspectivePopoverLink>\n </Text>\n </Card>\n </Stack>\n </PerspectivePopoverContent>\n }\n placement=\"bottom-start\"\n portal\n padding={3}\n ref={popoverRef}\n open={open}\n >\n <Button\n icon={HelpCircleIcon}\n mode=\"bleed\"\n padding={2}\n paddingRight={1}\n tone=\"primary\"\n fontSize={1}\n ref={buttonRef}\n onClick={handleClick}\n selected={open}\n >\n <Dot $tone={SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? 'caution' : 'primary'} />\n </Button>\n </Popover>\n )\n}\n","import {CopyIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Grid, Inline, Select, Stack, TextInput, Tooltip} from '@sanity/ui'\nimport {\n type ChangeEvent,\n type ComponentType,\n Fragment,\n type RefObject,\n useCallback,\n useMemo,\n useRef,\n} from 'react'\nimport {type PerspectiveContextValue, type TFunction, usePerspective, useTranslation} from 'sanity'\n\nimport {API_VERSIONS} from '../apiVersions'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n hasPinnedPerspective,\n SUPPORTED_PERSPECTIVES,\n type SupportedPerspective,\n} from '../perspectives'\nimport {PerspectivePopover} from './PerspectivePopover'\nimport {Header, QueryCopyLink, StyledLabel} from './VisionGui.styled'\n\nconst PinnedReleasePerspectiveOption: ComponentType<{\n pinnedPerspective: PerspectiveContextValue\n t: TFunction\n}> = ({pinnedPerspective, t}) => {\n const name =\n typeof pinnedPerspective.selectedPerspective === 'object'\n ? pinnedPerspective.selectedPerspective.metadata.title\n : pinnedPerspective.selectedPerspectiveName\n\n const label = hasPinnedPerspective(pinnedPerspective)\n ? `(${t('settings.perspectives.pinned-release-label')})`\n : t('settings.perspectives.pinned-release-label')\n\n const text = useMemo(\n () => [name, label].filter((value) => typeof value !== 'undefined').join(' '),\n [label, name],\n )\n\n return (\n <option value=\"pinnedRelease\" disabled={!hasPinnedPerspective(pinnedPerspective)}>\n {text}\n </option>\n )\n}\n\nexport interface VisionGuiHeaderProps {\n onChangeDataset: (evt: ChangeEvent<HTMLSelectElement>) => void\n dataset: string\n customApiVersion: string | false\n apiVersion: string\n onChangeApiVersion: (evt: ChangeEvent<HTMLSelectElement>) => void\n datasets: string[]\n customApiVersionElementRef: RefObject<HTMLInputElement | null>\n onCustomApiVersionChange: (evt: ChangeEvent<HTMLInputElement>) => void\n isValidApiVersion: boolean\n onChangePerspective: (evt: ChangeEvent<HTMLSelectElement>) => void\n url?: string\n perspective?: SupportedPerspective\n isScheduledDraftsEnabled: boolean\n}\n\nexport function VisionGuiHeader({\n onChangeDataset,\n dataset,\n customApiVersion,\n apiVersion,\n onChangeApiVersion,\n datasets,\n customApiVersionElementRef,\n onCustomApiVersionChange,\n isValidApiVersion,\n onChangePerspective,\n url,\n perspective,\n isScheduledDraftsEnabled,\n}: VisionGuiHeaderProps) {\n const pinnedPerspective = usePerspective()\n const {t} = useTranslation(visionLocaleNamespace)\n const operationUrlElement = useRef<HTMLInputElement | null>(null)\n const handleCopyUrl = useCallback(() => {\n const el = operationUrlElement.current\n if (!el) return\n\n try {\n el.select()\n document.execCommand('copy')\n } catch (err) {\n console.error('Unable to copy to clipboard :(')\n }\n }, [])\n\n return (\n <Header paddingX={3} paddingY={2}>\n <Grid columns={[1, 4, 8, 12]}>\n {/* Dataset selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>{t('settings.dataset-label')}</StyledLabel>\n </Card>\n <Select value={dataset} onChange={onChangeDataset}>\n {datasets.map((ds: string) => (\n <option key={ds}>{ds}</option>\n ))}\n </Select>\n </Stack>\n </Box>\n\n {/* API version selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>{t('settings.api-version-label')}</StyledLabel>\n </Card>\n <Select\n data-testid=\"api-version-selector\"\n value={customApiVersion === false ? apiVersion : 'other'}\n onChange={onChangeApiVersion}\n >\n {API_VERSIONS.map((version) => (\n <option key={version}>{version}</option>\n ))}\n <option key=\"other\" value=\"other\">\n {t('settings.other-api-version-label')}\n </option>\n </Select>\n </Stack>\n </Box>\n\n {/* Custom API version input */}\n {customApiVersion !== false && (\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel textOverflow=\"ellipsis\">\n {t('settings.custom-api-version-label')}\n </StyledLabel>\n </Card>\n\n <TextInput\n ref={customApiVersionElementRef}\n value={customApiVersion}\n onChange={onCustomApiVersionChange}\n customValidity={\n isValidApiVersion ? undefined : t('settings.error.invalid-api-version')\n }\n maxLength={11}\n />\n </Stack>\n </Box>\n )}\n\n {/* Perspective selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingBottom={1}>\n <Inline space={1}>\n <Box>\n <StyledLabel>{t('settings.perspective-label')}</StyledLabel>\n </Box>\n\n <Box>\n <PerspectivePopover />\n </Box>\n </Inline>\n </Card>\n <Select value={perspective || 'default'} onChange={onChangePerspective}>\n {SUPPORTED_PERSPECTIVES.map((perspectiveName) => {\n if (perspectiveName === 'pinnedRelease') {\n return (\n <Fragment key=\"pinnedRelease\">\n <PinnedReleasePerspectiveOption pinnedPerspective={pinnedPerspective} t={t} />\n <option key=\"default\" value=\"default\">\n {t('settings.perspectives.default')}\n </option>\n <hr />\n </Fragment>\n )\n }\n if (perspectiveName === 'scheduledDrafts') {\n if (!isScheduledDraftsEnabled) return null\n return (\n <option key=\"scheduledDrafts\" value=\"scheduledDrafts\">\n {t('settings.perspectives.scheduled-drafts')}\n </option>\n )\n }\n return <option key={perspectiveName}>{perspectiveName}</option>\n })}\n </Select>\n </Stack>\n </Box>\n\n {/* Query URL (for copying) */}\n {typeof url === 'string' ? (\n <Box padding={1} flex={1} column={customApiVersion === false ? 6 : 4}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>\n {t('query.url')} \n <QueryCopyLink onClick={handleCopyUrl}>\n [{t('action.copy-url-to-clipboard')}]\n </QueryCopyLink>\n </StyledLabel>\n </Card>\n <Flex flex={1} gap={1}>\n <Box flex={1}>\n <TextInput readOnly type=\"url\" ref={operationUrlElement} value={url} />\n </Box>\n <Tooltip content={t('action.copy-url-to-clipboard')}>\n <Button\n aria-label={t('action.copy-url-to-clipboard')}\n type=\"button\"\n mode=\"ghost\"\n icon={CopyIcon}\n onClick={handleCopyUrl}\n />\n </Tooltip>\n </Flex>\n </Stack>\n </Box>\n ) : (\n <Box flex={1} />\n )}\n </Grid>\n </Header>\n )\n}\n","import {json2csv} from 'json-2-csv'\n\nfunction getBlobUrl(content: string, mimeType: string): string {\n return URL.createObjectURL(\n new Blob([content], {\n type: mimeType,\n }),\n )\n}\n\nfunction getMemoizedBlobUrlResolver(mimeType: string, stringEncoder: (input: any) => string) {\n return (() => {\n let prevResult = ''\n let prevContent = ''\n return (input: unknown) => {\n const content = stringEncoder(input)\n if (typeof content !== 'string' || content === '') {\n return undefined\n }\n\n if (content === prevContent) {\n return prevResult\n }\n\n prevContent = content\n if (prevResult) {\n URL.revokeObjectURL(prevResult)\n }\n\n prevResult = getBlobUrl(content, mimeType)\n return prevResult\n }\n })()\n}\n\nexport const getJsonBlobUrl = getMemoizedBlobUrlResolver('application/json', (input) =>\n JSON.stringify(input, null, 2),\n)\n\nexport const getCsvBlobUrl = getMemoizedBlobUrlResolver('text/csv', (input) => {\n return json2csv(Array.isArray(input) ? input : [input]).trim()\n})\n","import {Code} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const ErrorCode = styled(Code)`\n color: ${({theme}) => theme.sanity.color.muted.critical.enabled.fg};\n`\n","import {Box} from '@sanity/ui'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {ErrorCode} from './QueryErrorDialog.styled'\n\ninterface ContentLakeQueryError {\n details: {\n query: string\n start: number\n end: number\n\n lineNumber?: number\n column?: number\n }\n}\n\nexport function QueryErrorDetails({error}: {error: ContentLakeQueryError | Error}) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n if (!('details' in error)) {\n return null\n }\n\n const details = {...error.details, ...mapToLegacyDetails(error.details)}\n if (!details.line) {\n return null\n }\n\n return (\n <div>\n <ErrorCode size={1}>{`${details.line}\\n${dashLine(\n details.column,\n details.columnEnd,\n )}`}</ErrorCode>\n <Box marginTop={4}>\n <ErrorCode size={1}>{`${t('query.error.line')}: ${details.lineNumber}\\n${t(\n 'query.error.column',\n )}: ${details.column}`}</ErrorCode>\n </Box>\n </div>\n )\n}\n\nfunction mapToLegacyDetails(details: ContentLakeQueryError['details']) {\n if (!details || typeof details.query !== 'string' || typeof details.start !== 'number') {\n return {}\n }\n\n const {query, start, end} = details\n const lineStart = query.slice(0, start).lastIndexOf('\\n') + 1\n const lineNumber = (query.slice(0, lineStart).match(/\\n/g) || []).length\n const line = query.slice(lineStart, query.indexOf('\\n', lineStart))\n const column = start - lineStart\n const columnEnd = typeof end === 'number' ? end - lineStart : undefined\n\n return {line, lineNumber, column, columnEnd}\n}\n\nfunction dashLine(column: number, columnEnd: number | undefined): string {\n const line = '-'.repeat(column)\n const hats = `^`.repeat(columnEnd ? columnEnd - column : 1)\n return `${line}${hats}`\n}\n","import {Stack} from '@sanity/ui'\n\nimport {QueryErrorDetails} from './QueryErrorDetails'\nimport {ErrorCode} from './QueryErrorDialog.styled'\n\nexport function QueryErrorDialog(props: {error: Error}) {\n return (\n <Stack space={5} marginTop={2}>\n <ErrorCode size={1}>{props.error.message}</ErrorCode>\n <QueryErrorDetails error={props.error} />\n </Stack>\n )\n}\n","import {rem, type Theme} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const ResultViewWrapper = styled.div<{theme: Theme}>(({theme}) => {\n const {color, fonts, space} = theme.sanity\n\n return css`\n & .json-inspector,\n & .json-inspector .json-inspector__selection {\n font-family: ${fonts.code.family};\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n color: var(--card-code-fg-color);\n }\n\n & .json-inspector .json-inspector__leaf {\n padding-left: ${rem(space[4])};\n }\n\n & .json-inspector .json-inspector__leaf.json-inspector__leaf_root {\n padding-top: ${rem(space[0])};\n padding-left: 0;\n }\n\n & .json-inspector > .json-inspector__leaf_root > .json-inspector__line > .json-inspector__key {\n display: none;\n }\n\n & .json-inspector .json-inspector__line {\n display: block;\n position: relative;\n cursor: default;\n }\n\n & .json-inspector .json-inspector__line::after {\n content: '';\n position: absolute;\n top: 0;\n left: -200px;\n right: -50px;\n bottom: 0;\n z-index: -1;\n pointer-events: none;\n }\n\n & .json-inspector .json-inspector__line:hover::after {\n background: var(--card-code-bg-color);\n }\n\n & .json-inspector .json-inspector__leaf_composite > .json-inspector__line {\n cursor: pointer;\n }\n\n & .json-inspector .json-inspector__leaf_composite > .json-inspector__line::before {\n content: '▸ ';\n margin-left: calc(0px - ${rem(space[4])});\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n }\n\n &\n .json-inspector\n .json-inspector__leaf_expanded.json-inspector__leaf_composite\n > .json-inspector__line::before {\n content: '▾ ';\n font-size: ${fonts.code.sizes[2].fontSize}px;\n line-height: ${fonts.code.sizes[2].lineHeight}px;\n }\n\n & .json-inspector .json-inspector__radio,\n & .json-inspector .json-inspector__flatpath {\n display: none;\n }\n\n & .json-inspector .json-inspector__value {\n margin-left: ${rem(space[4] / 2)};\n }\n\n &\n .json-inspector\n > .json-inspector__leaf_root\n > .json-inspector__line\n > .json-inspector__key\n + .json-inspector__value {\n margin: 0;\n }\n\n & .json-inspector .json-inspector__key {\n color: ${color.syntax.property};\n }\n\n & .json-inspector .json-inspector__value_helper,\n & .json-inspector .json-inspector__value_null {\n color: ${color.syntax.constant};\n }\n\n & .json-inspector .json-inspector__not-found {\n padding-top: ${rem(space[2])};\n }\n\n & .json-inspector .json-inspector__value_string {\n color: ${color.syntax.string};\n word-break: break-word;\n }\n\n & .json-inspector .json-inspector__value_boolean {\n color: ${color.syntax.boolean};\n }\n\n & .json-inspector .json-inspector__value_number {\n color: ${color.syntax.number};\n }\n\n & .json-inspector .json-inspector__show-original {\n display: inline-block;\n padding: 0 6px;\n cursor: pointer;\n }\n\n & .json-inspector .json-inspector__show-original:hover {\n color: inherit;\n }\n\n & .json-inspector .json-inspector__show-original::before {\n content: '↔';\n }\n\n & .json-inspector .json-inspector__show-original:hover::after {\n content: ' expand';\n }\n `\n})\n","import {JsonInspector} from '@rexxars/react-json-inspector'\nimport {LinkIcon} from '@sanity/icons'\nimport {Code} from '@sanity/ui'\nimport LRU from 'quick-lru'\nimport {useDataset} from 'sanity'\nimport {IntentLink} from 'sanity/router'\n\nimport {ResultViewWrapper} from './ResultView.styled'\n\nconst lru = new LRU({maxSize: 50000})\n\nexport function ResultView(props: {data: unknown; datasetName: string}): React.JSX.Element {\n const {data, datasetName} = props\n const workspaceDataset = useDataset()\n\n if (isRecord(data) || Array.isArray(data)) {\n return (\n <ResultViewWrapper>\n <JsonInspector\n data={data}\n search={false}\n isExpanded={isExpanded}\n onClick={toggleExpanded}\n interactiveLabel={workspaceDataset === datasetName ? DocumentEditLabel : undefined}\n />\n </ResultViewWrapper>\n )\n }\n\n return <Code language=\"json\">{JSON.stringify(data)}</Code>\n}\n\nfunction DocumentEditLabel(props: {value: string; isKey: boolean; keypath: string}) {\n if (props.isKey || (!props.keypath.endsWith('_id') && !props.keypath.endsWith('_ref'))) {\n return null\n }\n\n return (\n <IntentLink intent=\"edit\" params={{id: props.value}}>\n <LinkIcon />\n </IntentLink>\n )\n}\n\nfunction isExpanded(keyPath: string, value: unknown): boolean {\n const depthLimit = 4\n const cached = lru.get(keyPath) as boolean | undefined\n\n if (typeof cached === 'boolean') {\n return cached\n }\n\n const segments = keyPath.split('.', depthLimit)\n if (segments.length === depthLimit) {\n return false\n }\n\n if (Array.isArray(value)) {\n return true\n }\n\n return isRecord(value) && !segments.some((key) => isArrayKeyOverLimit(key))\n}\n\nfunction toggleExpanded(event: {path: string}): void {\n const {path} = event\n const current = lru.get(path)\n\n if (current === undefined) {\n // something is wrong\n return\n }\n\n lru.set(path, !current)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nconst numeric = /^\\d+$/\nfunction isArrayKeyOverLimit(segment: string, limit = 10) {\n return numeric.test(segment) && parseInt(segment, 10) > limit\n}\n","import {DocumentSheetIcon} from '@sanity/icons'\nimport {Button, Tooltip} from '@sanity/ui'\nimport {type MouseEvent} from 'react'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\n\ninterface SaveButtonProps {\n blobUrl: string | undefined\n}\n\nfunction preventSave(evt: MouseEvent<HTMLButtonElement>) {\n return evt.preventDefault()\n}\n\nexport function SaveCsvButton({blobUrl}: SaveButtonProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n const isDisabled = !blobUrl\n\n const button = (\n <Button\n as=\"a\"\n disabled={isDisabled}\n download={isDisabled ? undefined : 'query-result.csv'}\n href={blobUrl}\n icon={DocumentSheetIcon}\n mode=\"ghost\"\n onClick={isDisabled ? preventSave : undefined}\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n text=\"CSV\" // String is a File extension\n tone=\"default\"\n />\n )\n\n return isDisabled ? (\n <Tooltip content={t('result.save-result-as-csv.not-csv-encodable')} placement=\"top\">\n {button}\n </Tooltip>\n ) : (\n button\n )\n}\n\nexport function SaveJsonButton({blobUrl}: SaveButtonProps) {\n return (\n <Button\n as=\"a\"\n download={'query-result.json'}\n href={blobUrl}\n icon={DocumentSheetIcon}\n mode=\"ghost\"\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n text=\"JSON\" // String is a File extension\n tone=\"default\"\n />\n )\n}\n","import {type MutationEvent} from '@sanity/client'\nimport {Box, Text} from '@sanity/ui'\nimport {Translate, useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {getCsvBlobUrl, getJsonBlobUrl} from '../util/getBlobUrl'\nimport {DelayedSpinner} from './DelayedSpinner'\nimport {QueryErrorDialog} from './QueryErrorDialog'\nimport {ResultView} from './ResultView'\nimport {SaveCsvButton, SaveJsonButton} from './SaveResultButtons'\nimport {\n DownloadsCard,\n InputBackgroundContainer,\n Result,\n ResultContainer,\n ResultFooter,\n ResultInnerContainer,\n ResultOuterContainer,\n SaveResultLabel,\n StyledLabel,\n TimingsCard,\n TimingsTextContainer,\n} from './VisionGui.styled'\n\ninterface VisionGuiResultProps {\n error?: Error | undefined\n queryInProgress: boolean\n queryResult?: unknown | undefined\n listenInProgress: boolean\n listenMutations: MutationEvent[]\n dataset: string\n queryTime: number | undefined\n e2eTime: number | undefined\n}\n\nexport function VisionGuiResult({\n error,\n queryInProgress,\n queryResult,\n listenInProgress,\n listenMutations,\n dataset,\n queryTime,\n e2eTime,\n}: VisionGuiResultProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n const hasResult = !error && !queryInProgress && typeof queryResult !== 'undefined'\n\n const jsonUrl = hasResult ? getJsonBlobUrl(queryResult) : ''\n const csvUrl = hasResult ? getCsvBlobUrl(queryResult) : ''\n\n return (\n <ResultOuterContainer direction=\"column\" data-testid=\"vision-result\">\n <ResultInnerContainer flex={1}>\n <ResultContainer\n flex={1}\n overflow=\"hidden\"\n tone={error ? 'critical' : 'default'}\n $isInvalid={Boolean(error)}\n >\n <Result overflow=\"auto\">\n <InputBackgroundContainer>\n <Box marginLeft={3}>\n <StyledLabel muted>{t('result.label')}</StyledLabel>\n </Box>\n </InputBackgroundContainer>\n <Box padding={3} paddingTop={5}>\n {(queryInProgress || (listenInProgress && listenMutations.length === 0)) && (\n <Box marginTop={3}>\n <DelayedSpinner />\n </Box>\n )}\n {error && <QueryErrorDialog error={error} />}\n {hasResult && <ResultView data={queryResult} datasetName={dataset} />}\n {listenInProgress && listenMutations.length > 0 && (\n <ResultView data={listenMutations} datasetName={dataset} />\n )}\n </Box>\n </Result>\n </ResultContainer>\n </ResultInnerContainer>\n {/* Execution time */}\n <ResultFooter justify=\"space-between\" direction={['column', 'column', 'row']}>\n <TimingsCard paddingX={4} paddingY={3} sizing=\"border\">\n <TimingsTextContainer align=\"center\">\n <Box>\n <Text muted>\n {t('result.execution-time-label')}:{' '}\n {typeof queryTime === 'number'\n ? `${queryTime}ms`\n : t('result.timing-not-applicable')}\n </Text>\n </Box>\n <Box marginLeft={4}>\n <Text muted>\n {t('result.end-to-end-time-label')}:{' '}\n {typeof e2eTime === 'number' ? `${e2eTime}ms` : t('result.timing-not-applicable')}\n </Text>\n </Box>\n </TimingsTextContainer>\n </TimingsCard>\n\n {hasResult && (\n <DownloadsCard paddingX={4} paddingY={3} sizing=\"border\">\n <SaveResultLabel muted>\n <Translate\n components={{\n SaveResultButtons: () => (\n <>\n <SaveJsonButton blobUrl={jsonUrl} />\n <SaveCsvButton blobUrl={csvUrl} />\n </>\n ),\n }}\n i18nKey=\"result.save-result-as-format\"\n t={t}\n />\n </SaveResultLabel>\n </DownloadsCard>\n )}\n </ResultFooter>\n </ResultOuterContainer>\n )\n}\n","/* eslint-disable max-statements */\nimport {SplitPane} from '@rexxars/react-split-pane'\nimport {\n type ClientPerspective,\n type ListenEvent,\n type MutationEvent,\n type ReleaseDocument,\n type StackablePerspective,\n} from '@sanity/client'\nimport {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Box, Button, Flex, useToast} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {type ChangeEvent, useCallback, useEffect, useMemo, useRef, useState} 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'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSIONS, DEFAULT_API_VERSION} from '../apiVersions'\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n getActivePerspective,\n isSupportedPerspective,\n isVirtualPerspective,\n type SupportedPerspective,\n} from '../perspectives'\nimport {type VisionProps} from '../types'\nimport {encodeQueryString} from '../util/encodeQueryString'\nimport {getLocalStorage} from '../util/localStorage'\nimport {parseApiQueryString, type ParsedApiQueryString} from '../util/parseApiQueryString'\nimport {prefixApiVersion} from '../util/prefixApiVersion'\nimport {validateApiVersion} from '../util/validateApiVersion'\nimport {ParamsEditor, parseParams} from './ParamsEditor'\nimport {QueryRecall} from './QueryRecall'\nimport {usePaneSize} from './usePaneSize'\nimport {\n InputBackgroundContainerLeft,\n InputContainer,\n Root,\n SplitpaneContainer,\n StyledLabel,\n} from './VisionGui.styled'\nimport {VisionGuiControls} from './VisionGuiControls'\nimport {VisionGuiHeader} from './VisionGuiHeader'\nimport {VisionGuiResult} from './VisionGuiResult'\n\nfunction nodeContains(node: Node, other: EventTarget | Node | null): boolean {\n if (!node || !other) {\n return false\n }\n\n // eslint-disable-next-line no-bitwise\n return node === other || !!(node.compareDocumentPosition(other as Node) & 16)\n}\n\nconst sanityUrl =\n /\\.(?:api|apicdn)\\.sanity\\.(?:io|work)\\/(vX|v1|v\\d{4}-\\d\\d-\\d\\d)\\/.*?(?:query|listen)\\/(.*?)\\?(.*)/\n\nconst isRunHotkey = (event: KeyboardEvent) =>\n isHotkey('ctrl+enter', event) || isHotkey('mod+enter', event)\n\ninterface Subscription {\n unsubscribe: () => void\n}\nexport interface Params {\n raw: string\n parsed: Record<string, unknown> | undefined\n valid: boolean\n error: string | undefined\n}\n\ninterface QueryExecutionOptions {\n apiVersion?: string\n dataset?: string\n perspective?: SupportedPerspective | 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 setQueryInProgress(!context.params.error && Boolean(context.query))\n setListenInProgress(false)\n setListenMutations([])\n setError(context.params.error ? new Error(context.params.error) : undefined)\n setQueryResult(undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (context.params.error) {\n return\n }\n\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective: context.perspective ?? [],\n }\n\n const ctxClient = client.withConfig({\n apiVersion: context.apiVersion,\n dataset: context.dataset,\n perspective: context.perspective,\n })\n\n const newUrl = ctxClient.getUrl(\n ctxClient.getDataUrl(\n 'query',\n encodeQueryString(context.query, context.params.parsed, urlQueryOpts),\n ),\n )\n setUrl(newUrl)\n\n const queryStart = Date.now()\n\n querySubscriptionRef.current = ctxClient.observable\n .fetch(context.query, context.params.parsed, {filterResponse: false, tag: 'vision'})\n .subscribe({\n next: (res) => {\n setQueryTime(res.ms)\n setE2eTime(Date.now() - queryStart)\n setQueryResult(res.result)\n setQueryInProgress(false)\n setError(undefined)\n },\n error: (err) => {\n setError(err)\n setQueryInProgress(false)\n },\n })\n },\n [\n queryInProgress,\n query,\n dataset,\n params.parsed,\n t,\n perspective,\n perspectiveStack,\n 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 as SupportedPerspective | undefined)\n localStorage.set('perspective', newPerspective)\n\n handleQueryExecution({perspective: newPerspective})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeDataset = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newDataset = evt.target.value\n localStorage.set('dataset', newDataset)\n setDataset(newDataset)\n handleQueryExecution({dataset: newDataset})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeApiVersion = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newApiVersion = evt.target.value\n if (newApiVersion?.toLowerCase() === 'other') {\n setCustomApiVersion('v')\n customApiVersionElementRef.current?.focus()\n return\n }\n\n setApiVersion(newApiVersion)\n setCustomApiVersion(false)\n localStorage.set('apiVersion', newApiVersion)\n handleQueryExecution({apiVersion: newApiVersion})\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle custom API version change\n const handleCustomApiVersionChange = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const newCustomApiVersion = evt.target.value || ''\n setCustomApiVersion(newCustomApiVersion || 'v')\n\n if (validateApiVersion(newCustomApiVersion)) {\n setApiVersion(newCustomApiVersion)\n localStorage.set('apiVersion', newCustomApiVersion)\n handleQueryExecution({apiVersion: newCustomApiVersion})\n }\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle perspective change\n const handleChangePerspective = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newPerspective = evt.target.value\n setPerspective(newPerspective === 'default' ? undefined : newPerspective)\n },\n [setPerspective],\n )\n\n const handleListenerEvent = useCallback((evt: ListenEvent<any>) => {\n if (evt.type !== 'mutation') {\n return\n }\n\n setListenMutations((prevMutations) =>\n prevMutations.length === 50 ? [evt, ...prevMutations.slice(0, 49)] : [evt, ...prevMutations],\n )\n }, [])\n const handleListenExecution = useCallback(() => {\n if (listenInProgress) {\n cancelListenerSubscription()\n setListenInProgress(false)\n return\n }\n\n const newUrl = client.getDataUrl('listen', encodeQueryString(query, params.parsed, {}))\n\n const shouldExecute = !params.error && query.trim().length > 0\n\n localStorage.set('query', query)\n localStorage.set('params', params.raw)\n\n cancelQuerySubscription()\n\n setUrl(newUrl)\n setListenMutations([])\n setQueryInProgress(false)\n setQueryResult(undefined)\n setListenInProgress(shouldExecute)\n setError(params.error ? new Error(params.error) : undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (!shouldExecute) {\n return\n }\n\n listenSubscriptionRef.current = client\n .listen(query, params.parsed, {events: ['mutation', 'welcome'], includeAllVersions: true})\n .subscribe({\n next: handleListenerEvent,\n error: (err) => {\n setError(err)\n setListenInProgress(false)\n },\n })\n }, [\n listenInProgress,\n params,\n query,\n localStorage,\n cancelQuerySubscription,\n handleListenerEvent,\n cancelListenerSubscription,\n client,\n ])\n\n const handleParamsChange = useCallback(\n (value: string) => {\n setRawParams(value)\n localStorage.set('params', value)\n },\n [localStorage],\n )\n\n // Get object of state values from provided URL\n const getStateFromUrl = useCallback(\n (data: string): ParsedUrlState | null => {\n const match = data.match(sanityUrl)\n if (!match) {\n return null\n }\n\n const [, usedApiVersion, usedDataset, urlQuery] = match\n\n const qs = new URLSearchParams(urlQuery)\n const parts: ParsedApiQueryString = parseApiQueryString(qs)\n if (!parts) return null\n let newApiVersion: string | undefined\n let newCustomApiVersion: string | false | undefined\n\n if (validateApiVersion(usedApiVersion)) {\n if (API_VERSIONS.includes(usedApiVersion)) {\n newApiVersion = usedApiVersion\n newCustomApiVersion = false\n } else {\n newCustomApiVersion = usedApiVersion\n }\n }\n\n const newPerspective =\n isSupportedPerspective(parts.options.perspective) &&\n !isVirtualPerspective(parts.options.perspective)\n ? parts.options.perspective\n : undefined\n\n if (\n newPerspective &&\n (!isSupportedPerspective(parts.options.perspective) ||\n isVirtualPerspective(parts.options.perspective))\n ) {\n toast.push({\n closable: true,\n id: 'vision-paste-unsupported-perspective',\n status: 'warning',\n title: 'Perspective in pasted url is currently not supported. Falling back to \"raw\"',\n })\n }\n\n return {\n query: parts.query,\n params: parts.params,\n rawParams: JSON.stringify(parts.params, null, 2),\n dataset: datasets.includes(usedDataset) ? usedDataset : dataset,\n apiVersion: newApiVersion || apiVersion,\n customApiVersion: newCustomApiVersion,\n perspective: newPerspective || perspective,\n url: data,\n }\n },\n [datasets, dataset, apiVersion, perspective, toast],\n )\n\n // Use state object from parsed URL to update state\n const setStateFromParsedUrl = useCallback(\n (parsedUrlObj: ParsedUrlState) => {\n // Update state with pasted values\n setDataset(parsedUrlObj.dataset)\n setQuery(parsedUrlObj.query)\n setRawParams(parsedUrlObj.rawParams)\n setApiVersion(parsedUrlObj.apiVersion)\n if (parsedUrlObj.customApiVersion) {\n setCustomApiVersion(parsedUrlObj.customApiVersion)\n }\n setPerspectiveState(parsedUrlObj.perspective)\n setUrl(parsedUrlObj.url)\n // Update the codemirror editor content\n editorQueryRef.current?.resetEditorContent(parsedUrlObj.query)\n editorParamsRef.current?.resetEditorContent(parsedUrlObj.rawParams)\n\n // Update localStorage and client config\n localStorage.merge({\n query: parsedUrlObj.query,\n params: parsedUrlObj.rawParams,\n dataset: parsedUrlObj.dataset,\n apiVersion: parsedUrlObj.customApiVersion || parsedUrlObj.apiVersion,\n perspective: parsedUrlObj.perspective,\n })\n\n // Execute query with new values\n handleQueryExecution(parsedUrlObj)\n },\n [localStorage, handleQueryExecution],\n )\n\n const handlePaste = useCallback(\n (evt: ClipboardEvent) => {\n if (!evt.clipboardData) {\n return\n }\n\n const data = evt.clipboardData.getData('text/plain')\n evt.preventDefault()\n const urlState = getStateFromUrl(data)\n if (urlState) {\n setStateFromParsedUrl(urlState)\n toast.push({\n closable: true,\n id: 'vision-paste',\n status: 'info',\n title: 'Parsed URL to query',\n })\n }\n },\n [getStateFromUrl, setStateFromParsedUrl, toast],\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const isWithinRoot =\n visionRootRef.current && nodeContains(visionRootRef.current, event.target)\n if (isRunHotkey(event) && isWithinRoot && params.valid) {\n handleQueryExecution()\n event.preventDefault()\n event.stopPropagation()\n }\n },\n [params.valid, handleQueryExecution],\n )\n\n useEffect(() => {\n window.document.addEventListener('paste', handlePaste)\n window.document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n window.document.removeEventListener('paste', handlePaste)\n window.document.removeEventListener('keydown', handleKeyDown)\n }\n }, [handleKeyDown, handlePaste])\n\n useEffect(() => {\n return () => {\n cancelQuerySubscription()\n cancelListenerSubscription()\n }\n }, [cancelQuerySubscription, cancelListenerSubscription])\n\n const handleStudioPerspectiveChange = useEffectEvent((stack: StackablePerspective[]) => {\n if (stack.length > 0) {\n setPerspective('pinnedRelease')\n }\n })\n // Handle pinned perspective changes\n useEffect(() => {\n handleStudioPerspectiveChange(perspectiveStack)\n }, [perspectiveStack])\n\n const generateUrl = useCallback(\n (queryString: string, queryParams: Record<string, unknown>) => {\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective:\n getActivePerspective({\n visionPerspective: perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }) ?? [],\n }\n return client.getUrl(\n client.getDataUrl('query', encodeQueryString(queryString, queryParams, urlQueryOpts)),\n )\n },\n [client, perspective, perspectiveStack, scheduledDraftsStack],\n )\n\n return (\n <Root\n direction=\"column\"\n height=\"fill\"\n ref={visionRootRef}\n sizing=\"border\"\n overflow=\"hidden\"\n data-testid=\"vision-root\"\n >\n <VisionGuiHeader\n apiVersion={apiVersion}\n customApiVersion={customApiVersion}\n dataset={dataset}\n datasets={datasets}\n onChangeDataset={handleChangeDataset}\n onChangeApiVersion={handleChangeApiVersion}\n customApiVersionElementRef={customApiVersionElementRef}\n onCustomApiVersionChange={handleCustomApiVersionChange}\n isValidApiVersion={isValidApiVersion}\n onChangePerspective={handleChangePerspective}\n url={url}\n perspective={perspective}\n isScheduledDraftsEnabled={isScheduledDraftsEnabled}\n />\n\n <SplitpaneContainer flex=\"auto\">\n <SplitPane\n minSize={800}\n defaultSize={window.innerWidth - 275}\n size={isQueryRecallCollapsed ? window.innerWidth : window.innerWidth - 275}\n maxSize={-225}\n primary=\"first\"\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n split={isNarrowBreakpoint ? 'vertical' : 'horizontal'}\n minSize={300}\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n split=\"horizontal\"\n defaultSize={\n isNarrowBreakpoint ? paneSizeOptions.defaultSize : paneSizeOptions.minSize\n }\n size={paneSizeOptions.size}\n allowResize={paneSizeOptions.allowResize}\n minSize={isNarrowBreakpoint ? paneSizeOptions.minSize : 100}\n maxSize={paneSizeOptions.maxSize}\n primary=\"first\"\n >\n <InputContainer display=\"flex\" data-testid=\"vision-query-editor\">\n <Box flex={1}>\n <InputBackgroundContainerLeft>\n <Flex>\n <StyledLabel muted>{t('query.label')}</StyledLabel>\n </Flex>\n </InputBackgroundContainerLeft>\n <VisionCodeMirror\n initialValue={query}\n onChange={setQuery}\n ref={editorQueryRef}\n />\n </Box>\n </InputContainer>\n <InputContainer display=\"flex\">\n <ParamsEditor\n value={params.raw}\n onChange={handleParamsChange}\n paramsError={params.error}\n hasValidParams={params.valid}\n editorRef={editorParamsRef}\n />\n\n <VisionGuiControls\n hasValidParams={params.valid}\n queryInProgress={queryInProgress}\n listenInProgress={listenInProgress}\n onQueryExecution={handleQueryExecution}\n onListenExecution={handleListenExecution}\n />\n </InputContainer>\n </SplitPane>\n </Box>\n <VisionGuiResult\n error={error}\n queryInProgress={queryInProgress}\n queryResult={queryResult}\n listenInProgress={listenInProgress}\n listenMutations={listenMutations}\n dataset={dataset}\n queryTime={queryTime}\n e2eTime={e2eTime}\n />\n </SplitPane>\n </Box>\n <Box style={{position: 'relative', height: '100%'}}>\n <Button\n mode=\"ghost\"\n padding={2}\n style={{\n position: 'absolute',\n left: -32,\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 100,\n pointerEvents: 'auto',\n }}\n onClick={() => setIsQueryRecallCollapsed(!isQueryRecallCollapsed)}\n >\n <div style={{display: 'flex', alignItems: 'center', height: '100%'}}>\n {isQueryRecallCollapsed ? <ChevronLeftIcon /> : <ChevronRightIcon />}\n </div>\n </Button>\n <QueryRecall\n url={url}\n getStateFromUrl={getStateFromUrl}\n setStateFromParsedUrl={setStateFromParsedUrl}\n currentQuery={query}\n currentParams={params.parsed || {}}\n generateUrl={generateUrl}\n />\n </Box>\n </SplitPane>\n </SplitpaneContainer>\n </Root>\n )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, map, type Observable, of} from 'rxjs'\n\nimport {type VisionConfig} from '../types'\n\nexport function useDatasets({\n client,\n datasets: configDatasets,\n}: {\n client: SanityClient\n datasets: VisionConfig['datasets']\n}): string[] | Error | null {\n const datasets$: Observable<string[] | Error> = useMemo(() => {\n if (Array.isArray(configDatasets)) {\n return of(configDatasets)\n }\n return client.observable.datasets.list().pipe(\n map((result) => {\n if (typeof configDatasets == 'function') {\n return configDatasets(result).map((d) => d.name)\n }\n return result.map((ds) => ds.name)\n }),\n catchError((err) => of(err)),\n )\n }, [client, configDatasets])\n const datasets = useObservable(datasets$, null)\n\n return datasets\n}\n","import {Flex} from '@sanity/ui'\nimport {useClient} from 'sanity'\n\nimport {DelayedSpinner} from '../components/DelayedSpinner'\nimport {VisionGui} from '../components/VisionGui'\nimport {useDatasets} from '../hooks/useDatasets'\nimport {type VisionProps} from '../types'\n\nexport function VisionContainer(props: VisionProps) {\n const datasetsClient = useClient({apiVersion: 'v2025-06-27'})\n const loadedDatasets = useDatasets({client: datasetsClient, datasets: props.config.datasets})\n\n if (!loadedDatasets) {\n return (\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n <DelayedSpinner />\n </Flex>\n )\n }\n\n const datasets =\n loadedDatasets instanceof Error\n ? // On error, use the clients configured dataset\n [props.client.config().dataset || 'production']\n : // Otherwise use the loaded list, obviously\n loadedDatasets\n\n const projectId = props.client.config().projectId\n const defaultDataset = props.config.defaultDataset || props.client.config().dataset || datasets[0]\n\n return (\n <VisionGui\n key={projectId}\n {...props}\n datasets={datasets}\n projectId={projectId}\n defaultDataset={defaultDataset}\n />\n )\n}\n","/* eslint-disable @sanity/i18n/no-attribute-string-literals */\n/* eslint-disable i18next/no-literal-string */\nimport {Button, Card, Code, Container, Heading, Stack} from '@sanity/ui'\nimport {Component, type PropsWithChildren} from 'react'\n\nimport {clearLocalStorage} from '../util/localStorage'\n\n/**\n * @internal\n */\nexport type VisionErrorBoundaryProps = PropsWithChildren\n\n/**\n * @internal\n */\ninterface VisionErrorBoundaryState {\n error: string | null\n numRetries: number\n}\n\n/**\n * @internal\n */\nexport class VisionErrorBoundary extends Component<\n VisionErrorBoundaryProps,\n VisionErrorBoundaryState\n> {\n constructor(props: VisionErrorBoundaryProps) {\n super(props)\n this.state = {error: null, numRetries: 0}\n }\n\n static getDerivedStateFromError(error: unknown) {\n // oxlint-disable-next-line restrict-template-expressions - @TODO use new Error(msg, {cause: error}) instead of casting to string, and console.error() the full error\n return {error: error instanceof Error ? error.message : `${error}`}\n }\n\n handleRetryRender = () =>\n this.setState((prev) => ({error: null, numRetries: prev.numRetries + 1}))\n\n handleRetryWithCacheClear = () => {\n clearLocalStorage()\n this.handleRetryRender()\n }\n\n render() {\n if (!this.state.error) {\n return this.props.children\n }\n\n const message = this.state.error\n const withCacheClear = this.state.numRetries > 0\n\n return (\n <Card\n height=\"fill\"\n overflow=\"auto\"\n paddingY={[4, 5, 6, 7]}\n paddingX={4}\n sizing=\"border\"\n tone=\"critical\"\n >\n <Container width={3}>\n <Stack space={4}>\n <div>\n <Button\n onClick={withCacheClear ? this.handleRetryWithCacheClear : this.handleRetryRender}\n text={withCacheClear ? 'Clear cache and retry' : 'Retry'}\n tone=\"default\"\n />\n </div>\n\n <Heading>An error occurred</Heading>\n\n <Card border radius={2} overflow=\"auto\" padding={4} tone=\"inherit\">\n <Stack space={4}>\n {message && (\n <Code size={1}>\n <strong>Error: {message}</strong>\n </Code>\n )}\n </Stack>\n </Card>\n </Stack>\n </Container>\n </Card>\n )\n }\n}\n","import {type Tool, useClient} from 'sanity'\n\nimport {DEFAULT_API_VERSION} from './apiVersions'\nimport {VisionContainer} from './containers/VisionContainer'\nimport {VisionErrorBoundary} from './containers/VisionErrorBoundary'\nimport {type VisionConfig} from './types'\n\ninterface SanityVisionProps {\n tool: Tool<VisionConfig>\n}\n\nfunction SanityVision(props: SanityVisionProps) {\n const client = useClient({apiVersion: '1'})\n const config: VisionConfig = {\n defaultApiVersion: DEFAULT_API_VERSION,\n ...props.tool.options,\n }\n\n return (\n <VisionErrorBoundary>\n <VisionContainer client={client} config={config} />\n </VisionErrorBoundary>\n )\n}\n\nexport default SanityVision\n"],"names":["API_VERSIONS","Date","toISOString","split","DEFAULT_API_VERSION","slice","DelayedSpinner","props","$","_c","show","setShow","useState","t0","t1","delay","timer","setTimeout","clearTimeout","useEffect","t2","jsx","Spinner","codemirrorExtensions","javascriptLanguage","lineNumbers","highlightActiveLine","highlightActiveLineGutter","highlightSelectionMatches","highlightSpecialChars","indentOnInput","bracketMatching","closeBrackets","history","drawSelection","syntaxHighlighting","defaultHighlightStyle","fallback","keymap","of","key","run","defaultKeymap","historyKeymap","flat","filter","Boolean","useCodemirrorTheme","theme","createTheme","cmTheme","createHighlight","cmHighlight","color","fonts","sanity","card","enabled","cursor","hues","blue","dark","hex","selection","gray","EditorView","fg","backgroundColor","bg","caretColor","fontFamily","code","family","fontSize","rem","sizes","lineHeight","borderLeftColor","borderBottom","border","borderTop","c","base","s","syntax","HighlightStyle","define","tag","t","keyword","propertyName","name","deleted","character","macroName","property","function","variableName","labelName","constant","standard","variable","definition","separator","typeName","className","number","changed","annotation","modifier","self","namespace","operator","operatorKeyword","url","escape","regexp","link","special","string","meta","comment","strong","fontWeight","emphasis","fontStyle","strikethrough","textDecoration","heading","atom","bool","boolean","processingInstruction","inserted","invalid","EditorRoot","styled","div","space","VisionCodeMirror","forwardRef","ref","initialValue","sanityTheme","useTheme","codeMirrorRef","useRef","Symbol","for","newContent","editorView","current","view","currentDoc","state","doc","toString","dispatch","changes","from","to","length","insert","EditorSelection","resetEditorContent","useImperativeHandle","t3","onChange","CodeMirror","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","Flex","Header","Card","StyledLabel","Label","SplitpaneContainer","Box","QueryCopyLink","a","InputBackgroundContainer","InputBackgroundContainerLeft","InputContainer","ResultOuterContainer","ResultInnerContainer","ResultContainer","$isInvalid","css","Result","ResultFooter","TimingsCard","TimingsTextContainer","text","ascenderHeight","descenderHeight","DownloadsCard","SaveResultLabel","Text","ControlsContainer","defaultValue","ParamsEditor","paramsError","hasValidParams","editorRef","useTranslation","visionLocaleNamespace","newValue","handleChangeRaw","debounce","handleChange","t4","t5","Tooltip","ErrorOutlineIcon","t6","jsxs","t7","t8","t9","parseParams","parsedParams","Error","validationError","undefined","raw","valid","error","STORED_QUERIES_NAMESPACE","queries","keyValueStoreKey","useSavedQueries","keyValueStore","useKeyValueStore","setValue","saving","setSaving","deleting","setDeleting","saveQueryError","setSaveQueryError","deleteQueryError","setDeleteQueryError","setError","getKey","sub","pipe","startWith","map","_temp","subscribe","next","unsubscribe","newQueries","_key","uuid","setKey","saveQuery","query_0","updatedQueries","q","updateQuery","prev","filteredQueries","q_0","prev_0","k","deleteQuery","data","FixedHeader","Stack","ScrollContainer","QueryRecall","getStateFromUrl","setStateFromParsedUrl","currentQuery","currentParams","generateUrl","toast","useToast","month","day","year","hour","minute","hour12","formatDate","useDateTimeFormat","editingKey","setEditingKey","editingTitle","setEditingTitle","optimisticTitles","setOptimisticTitles","searchQuery","setSearchQuery","selectedUrl","setSelectedUrl","newUrl","some","savedQueryObj","isEqual","duplicateQuery","find","savedQueryObj_0","push","closable","status","title","description","format","savedAt","handleSave","newTitle","prev_1","next_0","handleTitleSave","newUrl_0","q_1","savedQueryObj_1","duplicateQuery_0","q_2","savedQueryObj_2","handleUpdate","T0","T1","q_3","toLowerCase","textTransform","t10","t11","t12","t13","Button","AddIcon","t14","t15","t16","event","currentTarget","t17","TextInput","SearchIcon","q_4","queryObj","isSelected","areQueriesEqual","isEdited","parsedUrl","position","event_0","event_1","maxWidth","height","padding","width","borderRadius","MenuButton","ContextMenuButton","Menu","MenuItem","TrashIcon","event_2","stopPropagation","portal","placement","tone","Code","right","bottom","e","narrowBreakpoint","window","innerWidth","calculatePaneSizeOptions","rootHeight","document","body","getBoundingClientRect","defaultSize","size","allowResize","minSize","Math","min","max","maxSize","usePaneSize","visionRootRef","isNarrowBreakpoint","setIsNarrowBreakpoint","paneSizeOptions","setPaneSizeOptions","_temp2","handleResize","entry","contentRect","resizeObserver","ResizeObserver","observe","disconnect","VisionGuiControls","listenInProgress","queryInProgress","onQueryExecution","onListenExecution","Hotkeys","StopIcon","PlayIcon","PerspectivePopoverContent","PerspectivePopoverLink","Dot","$tone","PerspectivePopover","open","setOpen","buttonRef","popoverRef","handleClick","useClickOutsideEvent","Inline","Badge","Translate","HelpCircleIcon","Popover","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","Select","_temp3","t18","t19","t20","t21","t22","perspectiveName","Fragment","t23","t24","t25","CopyIcon","t26","Grid","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","muted","critical","QueryErrorDetails","details","bb0","mapToLegacyDetails","line","dashLine","column","columnEnd","lineNumber","start","end","lineStart","lastIndexOf","match","indexOf","repeat","hats","QueryErrorDialog","ResultViewWrapper","lru","LRU","ResultView","datasetName","workspaceDataset","useDataset","isRecord","DocumentEditLabel","JsonInspector","isExpanded","toggleExpanded","isKey","keypath","endsWith","id","LinkIcon","IntentLink","keyPath","cached","segments","depthLimit","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","preventSave","evt","preventDefault","SaveCsvButton","blobUrl","isDisabled","DocumentSheetIcon","button","SaveJsonButton","VisionGuiResult","queryResult","listenMutations","queryTime","e2eTime","hasResult","jsonUrl","csvUrl","SaveResultButtons","nodeContains","node","other","compareDocumentPosition","sanityUrl","isRunHotkey","isHotkey","VisionGui","config","projectId","defaultDataset","useScheduledDraftsEnabled","useActiveReleases","releases","isDraftModelEnabled","useWorkspace","drafts","editorQueryRef","editorParamsRef","querySubscriptionRef","listenSubscriptionRef","storedDataset","defaultApiVersion","storedApiVersion","storedQuery","storedParams","storedPerspective","setDataset","setApiVersion","setCustomApiVersion","setPerspectiveState","setUrl","setQuery","rawParams","setRawParams","setQueryResult","setListenMutations","setQueryTime","setE2eTime","setQueryInProgress","setListenInProgress","isQueryRecallCollapsed","setIsQueryRecallCollapsed","scheduledDraftReleases","releaseIds","sortReleases","defaultPerspective","_client","useClient","withConfig","allowReconfigure","client","cancelQuerySubscription","cancelListenerSubscription","context","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","observable","fetch","filterResponse","res","ms","result","handleQueryExecution","newPerspective","setPerspective","newDataset","target","handleChangeDataset","evt_0","newApiVersion","focus","handleChangeApiVersion","evt_1","newCustomApiVersion","handleCustomApiVersionChange","t27","evt_2","newPerspective_0","handleChangePerspective","t28","evt_3","prevMutations","handleListenerEvent","t29","shouldExecute","listen","events","includeAllVersions","err_0","handleListenExecution","t30","handleParamsChange","t31","usedApiVersion","usedDataset","urlQuery","parts","newPerspective_1","newApiVersion_0","t32","parsedUrlObj","t33","evt_4","clipboardData","data_0","getData","urlState","handlePaste","t34","isWithinRoot","handleKeyDown","t35","t36","addEventListener","removeEventListener","t37","t38","t39","stack","handleStudioPerspectiveChange","useEffectEvent","t40","t41","t42","queryString","queryParams","urlQueryOpts_0","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","t57","t58","SplitPane","t59","t60","t61","t62","left","top","transform","zIndex","pointerEvents","t63","t64","display","alignItems","t65","ChevronLeftIcon","ChevronRightIcon","t66","t67","t68","t69","t70","t71","release_0","getReleaseIdFromReleaseDocumentId","release","_id","isCardinalityOneRelease","useDatasets","configDatasets","list","catchError","useObservable","d","VisionContainer","datasetsClient","loadedDatasets","VisionErrorBoundary","Component","constructor","numRetries","getDerivedStateFromError","handleRetryRender","setState","handleRetryWithCacheClear","render","children","withCacheClear","Container","Heading","SanityVision","tool"],"mappings":"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"}
|