{"version":3,"file":"SanityVision.mjs","sources":["../../src/apiVersions.ts","../../src/components/DelayedSpinner.tsx","../../src/codemirror/extensions.ts","../../src/codemirror/useCodemirrorTheme.ts","../../src/codemirror/VisionCodeMirror.styled.tsx","../../src/codemirror/VisionCodeMirror.tsx","../../src/perspectives.ts","../../src/util/encodeQueryString.ts","../../src/util/isPlainObject.ts","../../src/util/localStorage.ts","../../src/util/parseApiQueryString.ts","../../src/util/prefixApiVersion.ts","../../src/util/validateApiVersion.ts","../../src/util/tryParseParams.ts","../../src/components/VisionGui.styled.tsx","../../src/components/ParamsEditor.tsx","../../src/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 {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')} &rarr;\n                </PerspectivePopoverLink>\n              </Text>\n            </Card>\n          </Stack>\n        </PerspectivePopoverContent>\n      }\n      placement=\"bottom-start\"\n      portal\n      padding={3}\n      ref={popoverRef}\n      open={open}\n    >\n      <Button\n        icon={HelpCircleIcon}\n        mode=\"bleed\"\n        padding={2}\n        paddingRight={1}\n        tone=\"primary\"\n        fontSize={1}\n        ref={buttonRef}\n        onClick={handleClick}\n        selected={open}\n      >\n        <Dot tone={SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? 'caution' : 'primary'} />\n      </Button>\n    </Popover>\n  )\n}\n","import {CopyIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Grid, Inline, Select, Stack, TextInput, Tooltip} from '@sanity/ui'\nimport {\n  type ChangeEvent,\n  type ComponentType,\n  Fragment,\n  type RefObject,\n  useCallback,\n  useMemo,\n  useRef,\n} from 'react'\nimport {type PerspectiveContextValue, type TFunction, usePerspective, useTranslation} from 'sanity'\n\nimport {API_VERSIONS} from '../apiVersions'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n  hasPinnedPerspective,\n  SUPPORTED_PERSPECTIVES,\n  type SupportedPerspective,\n} from '../perspectives'\nimport {PerspectivePopover} from './PerspectivePopover'\nimport {Header, QueryCopyLink, StyledLabel} from './VisionGui.styled'\n\nconst PinnedReleasePerspectiveOption: ComponentType<{\n  pinnedPerspective: PerspectiveContextValue\n  t: TFunction\n}> = ({pinnedPerspective, t}) => {\n  const name =\n    typeof pinnedPerspective.selectedPerspective === 'object'\n      ? pinnedPerspective.selectedPerspective.metadata.title\n      : pinnedPerspective.selectedPerspectiveName\n\n  const label = hasPinnedPerspective(pinnedPerspective)\n    ? `(${t('settings.perspectives.pinned-release-label')})`\n    : t('settings.perspectives.pinned-release-label')\n\n  const text = useMemo(\n    () => [name, label].filter((value) => typeof value !== 'undefined').join(' '),\n    [label, name],\n  )\n\n  return (\n    <option value=\"pinnedRelease\" disabled={!hasPinnedPerspective(pinnedPerspective)}>\n      {text}\n    </option>\n  )\n}\n\nexport interface VisionGuiHeaderProps {\n  onChangeDataset: (evt: ChangeEvent<HTMLSelectElement>) => void\n  dataset: string\n  customApiVersion: string | false\n  apiVersion: string\n  onChangeApiVersion: (evt: ChangeEvent<HTMLSelectElement>) => void\n  datasets: string[]\n  customApiVersionElementRef: RefObject<HTMLInputElement | null>\n  onCustomApiVersionChange: (evt: ChangeEvent<HTMLInputElement>) => void\n  isValidApiVersion: boolean\n  onChangePerspective: (evt: ChangeEvent<HTMLSelectElement>) => void\n  url?: string\n  perspective?: SupportedPerspective\n}\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      // eslint-disable-next-line no-console\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')}&nbsp;\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","/* eslint-disable complexity */\nimport {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","import {SplitPane} from '@rexxars/react-split-pane'\nimport {\n  type ClientPerspective,\n  type ListenEvent,\n  type MutationEvent,\n  type StackablePerspective,\n} from '@sanity/client'\nimport {Box, 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 {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\\/(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 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\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  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  const handlePaste = useCallback(\n    (evt: ClipboardEvent) => {\n      if (!evt.clipboardData) {\n        return\n      }\n\n      const data = evt.clipboardData.getData('text/plain')\n      const match = data.match(sanityUrl)\n      if (!match) {\n        return\n      }\n\n      const [, usedApiVersion, usedDataset, urlQuery] = match\n      let parts: ParsedApiQueryString\n\n      try {\n        const qs = new URLSearchParams(urlQuery)\n        parts = parseApiQueryString(qs)\n      } catch (err) {\n        console.warn('Error while trying to parse API URL: ', err.message) // eslint-disable-line no-console\n        return // Give up on error\n      }\n\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      const finalState = {\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      }\n\n      evt.preventDefault()\n\n      // Update state with pasted values\n\n      setDataset(finalState.dataset)\n      setQuery(finalState.query)\n      setParams({\n        parsed: finalState.params,\n        raw: finalState.rawParams,\n        valid: true,\n        error: undefined,\n      })\n      setApiVersion(finalState.apiVersion)\n      if (finalState.customApiVersion) {\n        setCustomApiVersion(finalState.customApiVersion)\n      }\n      setPerspectiveState(finalState.perspective)\n\n      // Update the codemirror editor content\n      editorQueryRef.current?.resetEditorContent(finalState.query)\n      editorParamsRef.current?.resetEditorContent(finalState.rawParams)\n\n      // Update localStorage and client config\n      localStorage.merge({\n        query: finalState.query,\n        params: finalState.rawParams,\n        dataset: finalState.dataset,\n        apiVersion: finalState.customApiVersion || finalState.apiVersion,\n        perspective: finalState.perspective,\n      })\n\n      // Execute query with new values\n      handleQueryExecution(finalState)\n\n      toast.push({\n        closable: true,\n        id: 'vision-paste',\n        status: 'info',\n        title: 'Parsed URL to query',\n      })\n    },\n    [datasets, dataset, apiVersion, perspective, localStorage, toast, 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  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      <SplitpaneContainer flex=\"auto\">\n        <SplitPane\n          // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n          split={isNarrowBreakpoint ? 'vertical' : 'horizontal'}\n          minSize={280}\n          defaultSize={400}\n          maxSize={-400}\n        >\n          <Box height=\"stretch\" flex={1}>\n            {/*\n                    The way react-split-pane handles the sizes is kind of finicky and not clear. What the props above does is:\n                    - It sets the initial size of the panes to 1/2 of the total available height of the container\n                    - Sets the minimum size of a pane whatever is bigger of 1/2 of the total available height of the container, or 170px\n                    - The max size is set to either 60% or 70% of the available space, depending on if the container height is above 650px\n                    - Disables resizing when total height is below 500, since it becomes really cumbersome to work with the panes then\n                    - The \"primary\" prop (https://github.com/tomkp/react-split-pane#primary) tells the second pane to shrink or grow by the available space\n                    - Disables resize if the container height is less then 500px\n                    This should ensure that we mostly avoid a pane to take up all the room, and for the controls to not be eaten up by the pane\n                  */}\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 initialValue={query} onChange={setQuery} ref={editorQueryRef} />\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      </SplitpaneContainer>\n    </Root>\n  )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useEffect, useState} from 'react'\n\nexport function useDatasets(client: SanityClient): string[] | Error | undefined {\n  const projectId = client.config().projectId\n  const [datasets, setDatasets] = useState<string[] | Error | undefined>()\n\n  useEffect(() => {\n    const datasets$ = client.observable.datasets.list().subscribe({\n      next: (result) => setDatasets(result.map((ds) => ds.name)),\n      error: (err) => setDatasets(err),\n    })\n\n    return () => datasets$.unsubscribe()\n  }, [client, projectId])\n\n  return datasets || undefined\n}\n","import {Flex} from '@sanity/ui'\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 loadedDatasets = useDatasets(props.client)\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      {...props}\n      key={projectId}\n      datasets={datasets}\n      projectId={projectId}\n      defaultDataset={defaultDataset}\n    />\n  )\n}\n","/* eslint-disable @sanity/i18n/no-attribute-string-literals */\n/* eslint-disable i18next/no-literal-string */\nimport {Button, Card, Code, Container, Heading, Stack} from '@sanity/ui'\nimport {Component, type PropsWithChildren} from 'react'\n\nimport {clearLocalStorage} from '../util/localStorage'\n\n/**\n * @internal\n */\nexport type VisionErrorBoundaryProps = PropsWithChildren\n\n/**\n * @internal\n */\ninterface VisionErrorBoundaryState {\n  error: string | null\n  numRetries: number\n}\n\n/**\n * @internal\n */\nexport class VisionErrorBoundary extends Component<\n  VisionErrorBoundaryProps,\n  VisionErrorBoundaryState\n> {\n  constructor(props: VisionErrorBoundaryProps) {\n    super(props)\n    this.state = {error: null, numRetries: 0}\n  }\n\n  static getDerivedStateFromError(error: unknown) {\n    return {error: error instanceof Error ? error.message : `${error}`}\n  }\n\n  handleRetryRender = () =>\n    this.setState((prev) => ({error: null, numRetries: prev.numRetries + 1}))\n\n  handleRetryWithCacheClear = () => {\n    clearLocalStorage()\n    this.handleRetryRender()\n  }\n\n  render() {\n    if (!this.state.error) {\n      return this.props.children\n    }\n\n    const message = this.state.error\n    const withCacheClear = this.state.numRetries > 0\n\n    return (\n      <Card\n        height=\"fill\"\n        overflow=\"auto\"\n        paddingY={[4, 5, 6, 7]}\n        paddingX={4}\n        sizing=\"border\"\n        tone=\"critical\"\n      >\n        <Container width={3}>\n          <Stack space={4}>\n            <div>\n              <Button\n                onClick={withCacheClear ? this.handleRetryWithCacheClear : this.handleRetryRender}\n                text={withCacheClear ? 'Clear cache and retry' : 'Retry'}\n                tone=\"default\"\n              />\n            </div>\n\n            <Heading>An error occurred</Heading>\n\n            <Card border radius={2} overflow=\"auto\" padding={4} tone=\"inherit\">\n              <Stack space={4}>\n                {message && (\n                  <Code size={1}>\n                    <strong>Error: {message}</strong>\n                  </Code>\n                )}\n              </Stack>\n            </Card>\n          </Stack>\n        </Container>\n      </Card>\n    )\n  }\n}\n","import {type Tool, useClient} from 'sanity'\n\nimport {DEFAULT_API_VERSION} from './apiVersions'\nimport {VisionContainer} from './containers/VisionContainer'\nimport {VisionErrorBoundary} from './containers/VisionErrorBoundary'\nimport {type VisionConfig} from './types'\n\ninterface SanityVisionProps {\n  tool: Tool<VisionConfig>\n}\n\nfunction SanityVision(props: SanityVisionProps) {\n  const client = useClient({apiVersion: '1'})\n  const config: VisionConfig = {\n    defaultApiVersion: DEFAULT_API_VERSION,\n    ...props.tool.options,\n  }\n\n  return (\n    <VisionErrorBoundary>\n      <VisionContainer client={client} config={config} />\n    </VisionErrorBoundary>\n  )\n}\n\nexport default SanityVision\n"],"names":["API_VERSIONS","Date","toISOString","split","DEFAULT_API_VERSION","slice","DelayedSpinner","props","$","_c","show","setShow","useState","t0","t1","delay","timer","setTimeout","clearTimeout","useEffect","t2","codemirrorExtensions","javascriptLanguage","lineNumbers","highlightActiveLine","highlightActiveLineGutter","highlightSelectionMatches","highlightSpecialChars","indentOnInput","bracketMatching","closeBrackets","history","drawSelection","syntaxHighlighting","defaultHighlightStyle","fallback","keymap","of","key","run","defaultKeymap","historyKeymap","flat","filter","Boolean","useCodemirrorTheme","theme","createTheme","cmTheme","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","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","t10","t11","t12","t13","parsedParams","Error","validationError","undefined","narrowBreakpoint","window","innerWidth","calculatePaneSizeOptions","height","rootHeight","document","body","getBoundingClientRect","defaultSize","size","allowResize","minSize","Math","min","max","maxSize","usePaneSize","visionRootRef","isNarrowBreakpoint","setIsNarrowBreakpoint","_temp","paneSizeOptions","setPaneSizeOptions","_temp2","handleResize","entry","contentRect","resizeObserver","ResizeObserver","observe","disconnect","VisionGuiControls","listenInProgress","queryInProgress","onQueryExecution","onListenExecution","StopIcon","PlayIcon","t14","t15","PerspectivePopoverContent","PerspectivePopoverLink","Dot","tone","PerspectivePopover","open","setOpen","buttonRef","popoverRef","handleClick","useClickOutsideEvent","t16","HelpCircleIcon","t17","o","PinnedReleasePerspectiveOption","pinnedPerspective","selectedPerspective","metadata","title","label","join","VisionGuiHeader","onChangeDataset","dataset","customApiVersion","onChangeApiVersion","datasets","customApiVersionElementRef","onCustomApiVersionChange","isValidApiVersion","onChangePerspective","perspective","usePerspective","operationUrlElement","el","select","execCommand","console","handleCopyUrl","map","_temp3","t18","t19","t20","t21","t22","perspectiveName","t23","t24","t25","CopyIcon","t26","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","Code","muted","critical","QueryErrorDetails","details","mapToLegacyDetails","line","dashLine","column","columnEnd","lineNumber","start","end","lineStart","lastIndexOf","match","indexOf","repeat","hats","QueryErrorDialog","ResultViewWrapper","lru","LRU","ResultView","data","datasetName","workspaceDataset","useDataset","isRecord","DocumentEditLabel","isExpanded","toggleExpanded","isKey","keypath","endsWith","id","keyPath","cached","segments","depthLimit","some","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","preventSave","evt","preventDefault","SaveCsvButton","blobUrl","isDisabled","DocumentSheetIcon","button","SaveJsonButton","VisionGuiResult","queryResult","listenMutations","queryTime","e2eTime","hasResult","jsonUrl","csvUrl","SaveResultButtons","Fragment","nodeContains","node","other","compareDocumentPosition","sanityUrl","isRunHotkey","isHotkey","VisionGui","config","projectId","defaultDataset","toast","useToast","defaultApiVersion","editorQueryRef","editorParamsRef","querySubscriptionRef","listenSubscriptionRef","storedDataset","storedApiVersion","storedQuery","storedParams","storedPerspective","useMemo","setDataset","setApiVersion","setCustomApiVersion","setPerspectiveState","setUrl","setQuery","setParams","setQueryResult","setListenMutations","setError","setQueryTime","setE2eTime","setQueryInProgress","setListenInProgress","_client","useClient","client","withConfig","allowReconfigure","cancelQuerySubscription","useCallback","unsubscribe","cancelListenerSubscription","handleQueryExecution","context","urlQueryOpts","ctxClient","newUrl","getUrl","getDataUrl","queryStart","now","observable","fetch","filterResponse","subscribe","next","res","ms","result","setPerspective","newPerspective","handleChangeDataset","newDataset","target","handleChangeApiVersion","newApiVersion","toLowerCase","focus","handleCustomApiVersionChange","newCustomApiVersion","handleChangePerspective","handleListenerEvent","prevMutations","handleListenExecution","shouldExecute","listen","events","includeAllVersions","handleParamsChange","handleKeyDown","isWithinRoot","stopPropagation","handlePaste","clipboardData","getData","usedApiVersion","usedDataset","urlQuery","parts","warn","push","closable","status","finalState","rawParams","addEventListener","removeEventListener","handleStudioPerspectiveChange","useEffectEvent","stack","useDatasets","setDatasets","datasets$","list","VisionContainer","loadedDatasets","VisionErrorBoundary","Component","constructor","numRetries","getDerivedStateFromError","handleRetryRender","setState","prev","handleRetryWithCacheClear","render","children","withCacheClear","SanityVision","tool"],"mappings":"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"}