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