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