{"version":3,"sources":["../src/PlaygroundWrapper.tsx","../src/components/Playground.tsx","../src/util/useDatasets.ts","../src/consts.ts","../src/components/ShareUrlField.tsx","../src/util/copyDataToClipboard.ts","../src/util/messaging.ts","../src/components/JSONExplorer.tsx","../src/components/JSONExplorer.styled.tsx","../../../shared/util/jsonExplorerUtils.ts","../src/components/Playground.styled.tsx","../../../shared/util/formatErrorPath.ts"],"sourcesContent":["import * as React from \"react\";\nimport { GroqdPlaygroundProps } from \"./types\";\nimport { ToastProvider } from \"@sanity/ui\";\nimport GroqdPlayground from \"./components/Playground\";\n\nexport default function GroqdPlaygroundWrapper(props: GroqdPlaygroundProps) {\n  return (\n    <ToastProvider>\n      <GroqdPlayground {...props} />\n    </ToastProvider>\n  );\n}\n","import * as React from \"react\";\nimport { useClient } from \"sanity\";\nimport {\n  Box,\n  Button,\n  Card,\n  Code,\n  Flex,\n  Grid,\n  Label,\n  Select,\n  Spinner,\n  Stack,\n  Text,\n  Tooltip,\n} from \"@sanity/ui\";\nimport { z } from \"zod\";\nimport * as q from \"groqd\";\nimport has from \"lodash.has\";\nimport { BaseQuery } from \"groqd/src/baseQuery\";\nimport Split from \"@uiw/react-split\";\nimport { PlayIcon, ResetIcon } from \"@sanity/icons\";\nimport { GroqdPlaygroundProps } from \"../types\";\nimport { useDatasets } from \"../util/useDatasets\";\nimport { API_VERSIONS, DEFAULT_API_VERSION, STORAGE_KEYS } from \"../consts\";\nimport { ShareUrlField } from \"./ShareUrlField\";\nimport { useCopyDataAndNotify } from \"../util/copyDataToClipboard\";\nimport { emitInit, emitReset } from \"../util/messaging\";\nimport { JSONExplorer } from \"./JSONExplorer\";\nimport { CopyQueryButton, ErrorLineItem } from \"./Playground.styled\";\nimport { formatErrorPath } from \"../../../../shared/util/formatErrorPath\";\n\nexport default function GroqdPlayground({ tool }: GroqdPlaygroundProps) {\n  const [\n    {\n      query,\n      params,\n      parsedResponse,\n      fetchParseError,\n      rawResponse,\n      activeDataset,\n      activeAPIVersion,\n      queryUrl,\n      isFetching,\n      rawExecutionTime,\n      errorPaths,\n    },\n    dispatch,\n  ] = React.useReducer(reducer, null, () => {\n    const activeDataset =\n      localStorage.getItem(STORAGE_KEYS.DATASET) ||\n      tool.options?.defaultDataset ||\n      \"production\";\n    const activeAPIVersion =\n      localStorage.getItem(STORAGE_KEYS.API_VERSION) ||\n      tool.options?.defaultApiVersion ||\n      DEFAULT_API_VERSION;\n\n    return {\n      query: q.q(\"\"),\n      activeDataset,\n      activeAPIVersion,\n      isFetching: false,\n    };\n  });\n  const iframeRef = React.useRef<HTMLIFrameElement>(null);\n  const editorContainer = React.useRef<HTMLDivElement>(null);\n  const editorInitialWidth = React.useMemo(\n    () =>\n      +(localStorage.getItem(STORAGE_KEYS.EDITOR_WIDTH) || 0) ||\n      EDITOR_INITIAL_WIDTH,\n    []\n  );\n  const copyShareUrl = useCopyDataAndNotify(\"Copied share URL to clipboard!\");\n  const copyQueryUrl = useCopyDataAndNotify(\"Copied Query to clipboard!\");\n  const windowHref = window.location.href;\n\n  // Configure client\n  const _client = useClient({\n    apiVersion: tool.options?.defaultApiVersion || \"v2021-10-21\",\n  });\n  const client = React.useMemo(\n    () =>\n      _client.withConfig({\n        dataset: activeDataset,\n        apiVersion: activeAPIVersion,\n      }),\n    [_client, activeDataset, activeAPIVersion]\n  );\n  const datasets = useDatasets(_client);\n\n  const generateQueryUrl = (query: q.BaseQuery<any>, params?: Params) => {\n    const searchParams = new URLSearchParams();\n    searchParams.append(\"query\", query.query);\n    if (params) {\n      for (const [key, value] of Object.entries(params))\n        searchParams.append(key, String(value));\n    }\n\n    return client.getUrl(\n      client.getDataUrl(\"query\", \"?\" + searchParams.toString())\n    );\n  };\n\n  // Make sure activeDataset isn't outside of available datasets.\n  React.useEffect(() => {\n    if (datasets[0] && !datasets.includes(activeDataset))\n      handleDatasetChange(datasets[0]);\n  }, [datasets]);\n\n  const runQuery = React.useMemo(\n    () =>\n      q.makeSafeQueryRunner(\n        (query, params?: Record<string, string | number>) =>\n          new Promise((resolve, reject) => {\n            client.observable\n              .fetch(query, params, { filterResponse: false })\n              .subscribe({\n                next: (res) => {\n                  dispatch({\n                    type: \"RAW_RESPONSE_RECEIVED\",\n                    payload: { rawResponse: res.result, execTime: res.ms },\n                  });\n                  resolve(res.result);\n                },\n                error: (err) => {\n                  reject(err);\n                },\n              });\n          })\n      ),\n    [client]\n  );\n\n  const handleRun = async (query: q.BaseQuery<any>, params?: Params) => {\n    dispatch({\n      type: \"MAKE_FETCH_REQUEST\",\n      payload: { queryUrl: generateQueryUrl(query, params) },\n    });\n    try {\n      const data = await runQuery(query, params);\n      dispatch({\n        type: \"FETCH_RESPONSE_PARSED\",\n        payload: { parsedResponse: data },\n      });\n    } catch (err) {\n      /**\n       * Generate error paths\n       */\n      let errorPaths: Map<string, string> | undefined;\n      if (err instanceof q.GroqdParseError) {\n        errorPaths = new Map();\n        for (const e of err.zodError.errors) {\n          // If \"Required\" message and missing path, we're going to want to\n          if (e.message === \"Required\" && !has(err.rawResponse, e.path)) {\n            errorPaths.set(\n              e.path\n                .slice(0, -1)\n                .map((v) => String(v))\n                .join(\".\"),\n              `Field \"${e.path.at(-1)}\" is Required`\n            );\n          } else {\n            errorPaths.set(e.path.map((v) => String(v)).join(\".\"), e.message);\n          }\n        }\n      }\n\n      dispatch({\n        type: \"FETCH_PARSE_FAILURE\",\n        payload: { fetchParseError: err, errorPaths },\n      });\n    }\n  };\n\n  React.useEffect(() => {\n    const handleMessage = (message: MessageEvent) => {\n      if (message.origin !== EDITOR_ORIGIN) return;\n\n      try {\n        const payload = messageSchema.parse(JSON.parse(message.data));\n\n        if (payload.event === \"READY\") {\n          const storedCode =\n            new URL(window.location.href).searchParams.get(\"code\") ||\n            localStorage.getItem(STORAGE_KEYS.CODE);\n\n          message.source &&\n            emitInit(message.source, EDITOR_ORIGIN, {\n              code: storedCode || undefined,\n              origin: window.location.origin,\n            });\n        } else if (payload.event === \"INPUT\") {\n          localStorage.setItem(STORAGE_KEYS.CODE, payload.compressedRawCode);\n          setQP(\"code\", payload.compressedRawCode);\n\n          if (payload.requestShareCopy) {\n            copyShareUrl(window.location.href);\n          }\n\n          let playgroundRunQueryCount = 0;\n          const libs = {\n            groqd: q,\n            playground: {\n              runQuery: (\n                query: BaseQuery<any>,\n                params?: Record<string, string | number>\n              ) => {\n                playgroundRunQueryCount++;\n                if (playgroundRunQueryCount > 1) return;\n\n                try {\n                  if (query instanceof q.BaseQuery) {\n                    dispatch({\n                      type: \"INPUT_EVAL_SUCCESS\",\n                      payload: { query, params },\n                    });\n                    if (payload.requestImmediateFetch) {\n                      handleRun(query, params);\n                    }\n                  }\n                } catch {}\n              },\n            },\n          };\n          const scope = {\n            exports: {},\n            require: (name: keyof typeof libs) => libs[name],\n          };\n          const keys = Object.keys(scope);\n          new Function(...keys, payload.code)(\n            ...keys.map((key) => scope[key as keyof typeof scope])\n          );\n        } else if (payload.event === \"ERROR\") {\n          console.error(payload.message);\n        }\n      } catch {}\n    };\n\n    window.addEventListener(\"message\", handleMessage);\n\n    return () => {\n      window.removeEventListener(\"message\", handleMessage);\n    };\n  }, []);\n\n  const handleDatasetChange = (datasetName: string) => {\n    dispatch({ type: \"SET_ACTIVE_DATASET\", payload: { dataset: datasetName } });\n  };\n  const handleAPIVersionChange = (apiVersion: string) => {\n    dispatch({ type: \"SET_ACTIVE_API_VERSION\", payload: { apiVersion } });\n  };\n\n  const handleReset = () => {\n    iframeRef.current && emitReset(iframeRef.current, EDITOR_ORIGIN);\n  };\n\n  const handleCopyQuery = () => query.query && copyQueryUrl(query.query);\n\n  const handleEditorResize = () => {\n    const container = editorContainer.current;\n    if (!container) return;\n\n    localStorage.setItem(\n      STORAGE_KEYS.EDITOR_WIDTH,\n      String(container.clientWidth)\n    );\n  };\n\n  const responseView = (() => {\n    if (isFetching) {\n      return (\n        <Flex justify=\"center\" flex={1} align=\"center\">\n          <Spinner muted />\n        </Flex>\n      );\n    }\n\n    const execTimeDisplay = rawExecutionTime && (\n      <Tooltip\n        placement=\"right-end\"\n        content={\n          <Box padding={2}>\n            <Text>Raw execution time of query</Text>\n          </Box>\n        }\n      >\n        <span> ({rawExecutionTime}ms)</span>\n      </Tooltip>\n    );\n\n    if (fetchParseError || errorPaths?.size) {\n      let errorView = null;\n      const scrollToError = (path: string) => {\n        const lineEl = document.getElementById(`json-item-${path}`);\n        if (lineEl instanceof HTMLElement)\n          lineEl.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      };\n\n      if (errorPaths) {\n        errorView = (\n          <Stack space={2} flex={1} paddingX={3} paddingY={1}>\n            <Box marginBottom={1}>\n              <Text weight=\"semibold\" size={1}>\n                Error parsing:\n              </Text>\n            </Box>\n            {[...errorPaths.entries()].map(([path, message]) => (\n              <ErrorLineItem\n                key={path}\n                onClick={() => scrollToError(path)}\n                padding={1}\n              >\n                <Text size={2}>\n                  `result{formatErrorPath(path)}`: {message}\n                </Text>\n              </ErrorLineItem>\n            ))}\n          </Stack>\n        );\n      } else if (fetchParseError instanceof Error) {\n        errorView = <pre>{fetchParseError.message}</pre>;\n      } else {\n        errorView = <span>Something went wrong...</span>;\n      }\n\n      return (\n        <Flex flex={1} direction=\"column\">\n          <Split mode=\"vertical\">\n            <Flex direction=\"column\" style={{ maxHeight: 400 }}>\n              <Box marginY={3} paddingX={3}>\n                <Label muted>❗Error</Label>\n              </Box>\n              <Box flex={1} overflow=\"auto\">\n                {errorView}\n              </Box>\n            </Flex>\n            <Flex flex={1} direction=\"column\">\n              <Box paddingX={3} marginY={3}>\n                <Label muted>Raw Response {execTimeDisplay}</Label>\n              </Box>\n              <Box flex={1} style={{ height: \"100%\" }}>\n                <JSONExplorer\n                  data={rawResponse}\n                  highlightedPaths={errorPaths}\n                />\n              </Box>\n            </Flex>\n          </Split>\n        </Flex>\n      );\n    }\n\n    return (\n      <Flex flex={1} direction=\"column\" style={{ maxHeight: \"100%\" }}>\n        <Box padding={3}>\n          <Label muted>Query Response {execTimeDisplay}</Label>\n        </Box>\n        {parsedResponse ? <JSONExplorer data={parsedResponse} /> : null}\n      </Flex>\n    );\n  })();\n\n  return (\n    <Flex style={{ height: \"100%\" }} direction=\"column\">\n      <Card paddingX={3} paddingY={2} borderBottom>\n        <Grid columns={[6, 6, 12]}>\n          {/* Dataset selector */}\n          <Box padding={1} column={2}>\n            <Stack>\n              <Card paddingY={2}>\n                <Label muted>Dataset</Label>\n              </Card>\n              <Select\n                value={activeDataset}\n                onChange={(e) => handleDatasetChange(e.currentTarget.value)}\n              >\n                {datasets.map((ds) => (\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 paddingY={2}>\n                <Label muted>API Version</Label>\n              </Card>\n              <Select\n                value={activeAPIVersion}\n                onChange={(e) => handleAPIVersionChange(e.currentTarget.value)}\n              >\n                {API_VERSIONS.map((v) => (\n                  <option key={v}>{v}</option>\n                ))}\n              </Select>\n            </Stack>\n          </Box>\n\n          {/* Share URL*/}\n          <ShareUrlField\n            url={windowHref}\n            title=\"Share URL\"\n            column={queryUrl ? 4 : 8}\n            notificationMessage=\"Copied share URL to clipboard!\"\n          />\n          {/* Query URL */}\n          {queryUrl && (\n            <ShareUrlField\n              url={queryUrl}\n              title=\"Raw Query URL\"\n              notificationMessage=\"Copied raw query URL to clipboard!\"\n            />\n          )}\n        </Grid>\n      </Card>\n\n      <Box flex={1}>\n        <Split\n          style={{ width: \"100%\", height: \"100%\", overflow: \"hidden\" }}\n          onDragEnd={handleEditorResize}\n        >\n          <div\n            style={{\n              width: editorInitialWidth,\n              minWidth: 200,\n              height: \"100%\",\n              display: \"flex\",\n              flexDirection: \"column\",\n            }}\n            ref={editorContainer}\n          >\n            <div style={{ flex: 1, position: \"relative\" }}>\n              <iframe\n                src={EDITOR_URL}\n                width=\"100%\"\n                height=\"100%\"\n                style={{ border: \"none\" }}\n                ref={iframeRef}\n              />\n              <div style={{ position: \"absolute\", bottom: 12, left: 12 }}>\n                <Button\n                  icon={ResetIcon}\n                  text=\"Reset\"\n                  mode=\"ghost\"\n                  onClick={handleReset}\n                />\n              </div>\n            </div>\n            <Card paddingTop={3} paddingBottom={3} borderTop>\n              <Stack space={3}>\n                <Box>\n                  <Box paddingX={3} marginBottom={1}>\n                    <Label muted>\n                      Query{\"  \"}\n                      {query.query && (\n                        <CopyQueryButton onClick={handleCopyQuery} tabIndex={0}>\n                          (Copy to clipboard)\n                        </CopyQueryButton>\n                      )}\n                    </Label>\n                  </Box>\n                  <Flex padding={3} paddingBottom={4} overflow=\"auto\">\n                    <Code language=\"text\">{query.query}</Code>\n                    <Box width={3} />\n                  </Flex>\n                </Box>\n\n                {params && Object.keys(params).length > 0 ? (\n                  <Box paddingX={3}>\n                    <Box marginBottom={3}>\n                      <Label muted>Params</Label>\n                    </Box>\n                    <Stack space={3} marginLeft={3}>\n                      {Object.entries(params).map(([key, value]) => (\n                        <Text key={key} size={2} muted>\n                          ${key}: {value}\n                        </Text>\n                      ))}\n                    </Stack>\n                  </Box>\n                ) : null}\n              </Stack>\n            </Card>\n            <Card padding={3} borderTop>\n              <Button\n                tone=\"primary\"\n                icon={PlayIcon}\n                text=\"Fetch\"\n                fontSize={[2]}\n                padding={[3]}\n                style={{ width: \"100%\" }}\n                onClick={() => handleRun(query, params)}\n                disabled={!query.query}\n              />\n            </Card>\n          </div>\n          <Box\n            style={{\n              width: `calc(100% - ${editorInitialWidth}px)`,\n              minWidth: 100,\n              display: \"flex\",\n              flexDirection: \"column\",\n            }}\n          >\n            <Flex flex={1} direction=\"column\" overflow=\"hidden\">\n              {responseView}\n            </Flex>\n          </Box>\n        </Split>\n      </Box>\n    </Flex>\n  );\n}\n\nconst EDITOR_URL =\n  typeof process !== \"undefined\" &&\n  process?.env?.SANITY_STUDIO_GROQD_PLAYGROUND_ENV === \"development\"\n    ? \"http://localhost:3069\"\n    : \"https://unpkg.com/groqd-playground-editor@0.0.6/build/index.html\";\nconst EDITOR_ORIGIN = new URL(EDITOR_URL).origin;\n\ntype Params = Record<string, string | number>;\ntype State = {\n  query: BaseQuery<any>;\n  params?: Params;\n  queryUrl?: string;\n  isFetching: boolean;\n  rawExecutionTime?: number;\n  rawResponse?: unknown;\n  parsedResponse?: unknown;\n  inputParseError?: Error;\n  fetchParseError?: unknown;\n  activeAPIVersion: string;\n  activeDataset: string;\n  errorPaths?: Map<string, string>;\n};\n\ntype Action =\n  | {\n      type: \"INPUT_EVAL_SUCCESS\";\n      payload: { query: BaseQuery<any>; params?: Params };\n    }\n  | { type: \"INPUT_PARSE_FAILURE\"; payload: { inputParseError: Error } }\n  | { type: \"MAKE_FETCH_REQUEST\"; payload: { queryUrl: string } }\n  | {\n      type: \"RAW_RESPONSE_RECEIVED\";\n      payload: { rawResponse: unknown; execTime: number };\n    }\n  | { type: \"FETCH_RESPONSE_PARSED\"; payload: { parsedResponse: unknown } }\n  | {\n      type: \"FETCH_PARSE_FAILURE\";\n      payload: {\n        fetchParseError: unknown;\n        rawResponse?: unknown;\n        errorPaths?: Map<string, string>;\n      };\n    }\n  | { type: \"SET_ACTIVE_DATASET\"; payload: { dataset: string } }\n  | { type: \"SET_ACTIVE_API_VERSION\"; payload: { apiVersion: string } };\n\nconst reducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case \"INPUT_EVAL_SUCCESS\":\n      return {\n        ...state,\n        query: action.payload.query,\n        params: action.payload.params,\n        inputParseError: undefined,\n      };\n    case \"INPUT_PARSE_FAILURE\":\n      return {\n        ...state,\n        inputParseError: action.payload.inputParseError,\n      };\n    case \"MAKE_FETCH_REQUEST\":\n      return {\n        ...state,\n        isFetching: true,\n        queryUrl: action.payload.queryUrl,\n      };\n    case \"RAW_RESPONSE_RECEIVED\":\n      return {\n        ...state,\n        isFetching: false,\n        rawResponse: action.payload.rawResponse,\n        rawExecutionTime: action.payload.execTime,\n      };\n    case \"FETCH_RESPONSE_PARSED\":\n      return {\n        ...state,\n        parsedResponse: action.payload.parsedResponse,\n        fetchParseError: undefined,\n        errorPaths: undefined,\n      };\n    case \"FETCH_PARSE_FAILURE\":\n      return {\n        ...state,\n        isFetching: false,\n        fetchParseError: action.payload.fetchParseError,\n        errorPaths: action.payload.errorPaths,\n      };\n    case \"SET_ACTIVE_API_VERSION\":\n      localStorage.setItem(STORAGE_KEYS.API_VERSION, action.payload.apiVersion);\n      return { ...state, activeAPIVersion: action.payload.apiVersion };\n    case \"SET_ACTIVE_DATASET\":\n      localStorage.setItem(STORAGE_KEYS.DATASET, action.payload.dataset);\n      return { ...state, activeDataset: action.payload.dataset };\n    default:\n      return state;\n  }\n};\n\nconst EDITOR_INITIAL_WIDTH = 500;\n\nconst readySchema = z.object({\n  event: z.literal(\"READY\"),\n});\n\nconst inputSchema = z.object({\n  event: z.literal(\"INPUT\"),\n  compressedRawCode: z.string(),\n  code: z.string(),\n  requestImmediateFetch: z.boolean().optional().default(false),\n  requestShareCopy: z.boolean().optional().default(false),\n});\n\nconst errorSchema = z.object({\n  event: z.literal(\"ERROR\"),\n  message: z.string(),\n});\n\nconst messageSchema = z.union([inputSchema, errorSchema, readySchema]);\n\nconst url = new URL(window.location.href);\nconst setQP = (key: string, value: string) => {\n  url.searchParams.set(key, value);\n  window.history.replaceState(null, \"\", url);\n};\n","import * as React from \"react\";\nimport type { SanityClient } from \"sanity\";\n\nexport const useDatasets = (client: SanityClient) => {\n  const [datasets, setDatasets] = React.useState<string[]>([]);\n\n  React.useEffect(() => {\n    const datasets$ = client.observable.datasets.list().subscribe({\n      next: (result) => setDatasets(result.map((ds) => ds.name)),\n    });\n\n    return () => datasets$.unsubscribe();\n  }, []);\n\n  return datasets;\n};\n","export const STORAGE_KEYS = {\n  DATASET: \"__groqd_playground_dataset\",\n  API_VERSION: \"__groqd_playground_api_version\",\n  CODE: \"__groqd_playground_code\",\n  EDITOR_WIDTH: \"__groqd_playground_editor_width\",\n};\n\nexport const API_VERSIONS = [\"v1\", \"vX\", \"v2021-03-25\", \"v2021-10-21\"];\nexport const DEFAULT_API_VERSION = API_VERSIONS.at(-1) as string;\n","import * as React from \"react\";\nimport {\n  Box,\n  Button,\n  Card,\n  Flex,\n  Label,\n  Stack,\n  Text,\n  TextInput,\n  Tooltip,\n} from \"@sanity/ui\";\nimport { CopyIcon } from \"@sanity/icons\";\nimport { useCopyDataAndNotify } from \"../util/copyDataToClipboard\";\n\ntype ShareUrlFieldProps = {\n  url: string;\n  title: string;\n  column?: number;\n  notificationMessage?: string;\n};\n\nexport const ShareUrlField = ({\n  title,\n  url,\n  column = 4,\n  notificationMessage = \"Copied URL to clipboard!\",\n}: ShareUrlFieldProps) => {\n  const copyUrl = useCopyDataAndNotify(notificationMessage);\n  const handleCopyUrl = () => copyUrl(url);\n\n  return (\n    <Box padding={1} flex={1} column={column}>\n      <Stack>\n        <Card paddingY={2}>\n          <Label muted>{title}</Label>\n        </Card>\n        <Flex flex={1} gap={1}>\n          <Box flex={1}>\n            <TextInput readOnly type=\"url\" value={url} />\n          </Box>\n          <Tooltip\n            content={\n              <Box padding={2}>\n                <Text>Copy to clipboard</Text>\n              </Box>\n            }\n          >\n            <Button\n              aria-label=\"Copy 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};\n","import * as React from \"react\";\nimport { useToast } from \"@sanity/ui\";\n\nexport const useCopyDataAndNotify = (message: string) => {\n  const toast = useToast();\n\n  return React.useCallback(\n    (url: string) => {\n      navigator.clipboard.writeText(url).then(() => {\n        toast.push({ title: message });\n      });\n    },\n    [message]\n  );\n};\n","export const emitReset = (iframe: HTMLIFrameElement, target: string) => {\n  iframe.contentWindow?.postMessage(\n    JSON.stringify({ event: \"RESET_CODE\" }),\n    target\n  );\n};\n\nexport const emitInit = (\n  source: MessageEventSource,\n  target: string,\n  payload: { code?: string; origin: string }\n) => {\n  source.postMessage(JSON.stringify({ event: \"INIT\", ...payload }), {\n    targetOrigin: target,\n  });\n};\n","import * as React from \"react\";\nimport { Box, Button, Stack } from \"@sanity/ui\";\nimport {\n  CollapsibleContainer,\n  ErrorMessageText,\n  Key,\n  Label,\n  LineItem,\n  Root,\n  Value,\n} from \"./JSONExplorer.styled\";\nimport { CopyIcon } from \"@sanity/icons\";\nimport { useCopyDataAndNotify } from \"../util/copyDataToClipboard\";\nimport {\n  addToPath,\n  formatPrimitiveData,\n  isObject,\n} from \"../../../../shared/util/jsonExplorerUtils\";\n\ntype JSONExplorerDisplayProps = {\n  data: unknown;\n  prefix?: string;\n  highlightedPaths?: Map<string, string>;\n  currentPath?: string;\n};\n\nexport const JSONExplorer = (props: JSONExplorerDisplayProps) => {\n  const copyUrl = useCopyDataAndNotify(\"Copied JSON to clipboard!\");\n  const handleCopy = () => {\n    try {\n      copyUrl(JSON.stringify(props.data, null, 2));\n    } catch {}\n  };\n\n  return (\n    <Root flex={1}>\n      <Box\n        padding={3}\n        style={{ position: \"absolute\", inset: 0 }}\n        overflow=\"auto\"\n      >\n        <JSONExplorerDisplay {...props} />\n      </Box>\n      <Box style={{ position: \"absolute\", bottom: 0, right: 0 }} padding={3}>\n        <Button\n          aria-label=\"Copy to clipboard\"\n          type=\"button\"\n          mode=\"ghost\"\n          icon={CopyIcon}\n          text=\"Copy to clipboard\"\n          onClick={handleCopy}\n        />\n      </Box>\n    </Root>\n  );\n};\n\nconst JSONExplorerDisplay = ({\n  data,\n  prefix,\n  highlightedPaths,\n  currentPath = \"\",\n}: JSONExplorerDisplayProps) => {\n  const prefixDisplay = prefix !== undefined ? <Key>{prefix}: </Key> : null;\n  const errorMessage = highlightedPaths && highlightedPaths.get(currentPath);\n  const depth = currentPath === \"\" ? 0 : currentPath?.split(\".\").length || 0;\n\n  // Arrays\n  if (Array.isArray(data)) {\n    return (\n      <Collapsible\n        depth={depth}\n        title={\n          <React.Fragment>\n            {prefixDisplay}\n            <Label>[...] {data.length} items</Label>\n          </React.Fragment>\n        }\n        errorMessage={errorMessage}\n        id={`json-item-${currentPath}`}\n      >\n        <Stack space={2}>\n          {data.map((dat, i) => (\n            <JSONExplorerDisplay\n              data={dat}\n              key={i}\n              prefix={String(i)}\n              currentPath={addToPath(currentPath, String(i))}\n              highlightedPaths={highlightedPaths}\n            />\n          ))}\n        </Stack>\n      </Collapsible>\n    );\n  }\n\n  // Objects\n  if (isObject(data)) {\n    return (\n      <Collapsible\n        depth={depth}\n        title={\n          <React.Fragment>\n            {prefixDisplay}\n            <Label>\n              {`{...}`} {Object.keys(data).length} properties\n            </Label>\n          </React.Fragment>\n        }\n        errorMessage={errorMessage}\n        id={`json-item-${currentPath}`}\n      >\n        <Stack space={2}>\n          {Object.entries(data).map(([key, dat]) => (\n            <JSONExplorerDisplay\n              data={dat}\n              key={key}\n              prefix={key}\n              currentPath={addToPath(currentPath, key)}\n              highlightedPaths={highlightedPaths}\n            />\n          ))}\n        </Stack>\n      </Collapsible>\n    );\n  }\n\n  // Primitive leafs\n  return (\n    <LineItem\n      paddingY={1}\n      depth={depth}\n      hasError={!!errorMessage}\n      id={`json-item-${currentPath}`}\n    >\n      <Stack space={1}>\n        {errorMessage && <ErrorMessageText>{errorMessage}</ErrorMessageText>}\n        <div>\n          {prefixDisplay}\n          <Value>{formatPrimitiveData(data)}</Value>{\" \"}\n        </div>\n      </Stack>\n    </LineItem>\n  );\n};\n\nconst Collapsible = ({\n  title,\n  depth,\n  children,\n  errorMessage,\n  id,\n}: React.PropsWithChildren<{\n  title: JSX.Element;\n  depth: number;\n  errorMessage?: string;\n  id?: string;\n}>) => {\n  const [isExpanded, setIsExpanded] = React.useState(true);\n\n  return (\n    <CollapsibleContainer space={2} id={id} hasError={!!errorMessage}>\n      <LineItem\n        paddingY={1}\n        depth={depth}\n        onClick={() => setIsExpanded((v) => !v)}\n        pointer\n      >\n        <Stack space={1}>\n          {errorMessage && <ErrorMessageText>{errorMessage}</ErrorMessageText>}\n          <Box>{title}</Box>\n        </Stack>\n      </LineItem>\n      <div style={{ height: isExpanded ? \"auto\" : 0, overflow: \"hidden\" }}>\n        {children}\n      </div>\n    </CollapsibleContainer>\n  );\n};\n","import styled from \"styled-components\";\nimport { Box, Stack } from \"@sanity/ui\";\n\nexport const Root = styled(Box)`\n  font-family: Menlo, monospace;\n  font-size: 0.9em;\n  position: relative;\n  height: 100%;\n\n  --border-radius: 4px;\n  --error-bg-color: #ffe5ea;\n  --item-hover-color: #e7e7e7;\n\n  @media (prefers-color-scheme: dark) {\n    --error-bg-color: #470417;\n    --item-hover-color: #505050;\n  }\n`;\n\nexport const Label = styled.span`\n  color: #9d1fcd;\n  @media (prefers-color-scheme: dark) {\n    color: #d05afc;\n  }\n`;\n\nexport const Key = styled.span`\n  color: #1e61cd;\n  @media (prefers-color-scheme: dark) {\n    color: #5998fc;\n  }\n`;\nexport const Value = styled.span`\n  color: #967e1c;\n  @media (prefers-color-scheme: dark) {\n    color: #dbb931;\n  }\n`;\n\nexport const LineItem = styled(Box)<{\n  depth: number;\n  pointer?: boolean;\n  hasError?: boolean;\n}>`\n  padding-left: ${({ depth }) => depth * DEPTH_SC}px;\n  border-radius: var(--border-radius);\n  cursor: ${({ pointer }) => (pointer ? \"pointer\" : \"initial\")};\n\n  background-color: ${({ hasError }) =>\n    hasError ? \"var(--error-bg-color)\" : \"initial\"};\n\n  &:hover {\n    background-color: ${({ hasError }) =>\n      hasError ? undefined : \"var(--item-hover-color)\"};\n  }\n`;\n\nexport const CollapsibleContainer = styled(Stack)<{ hasError?: boolean }>`\n  border-radius: var(--border-radius);\n\n  background-color: ${({ hasError }) =>\n    hasError ? \"var(--error-bg-color)\" : \"initial\"};\n`;\n\nexport const ErrorMessageText = styled.div`\n  font-weight: 400;\n`;\n\nconst DEPTH_SC = 15;\n","export const formatPrimitiveData = (data: unknown) => {\n  if (typeof data === \"string\") return `\\\"${data}\\\"`;\n  if (data instanceof Date) return `(Date) ${data}`;\n  return String(data);\n};\nexport const isObject = (data: unknown): data is Record<string, unknown> =>\n  typeof data === \"object\" &&\n  data !== null &&\n  !Array.isArray(data) &&\n  !(data instanceof Date);\nexport const addToPath = (existingPath: string, newSegment: string) =>\n  existingPath ? `${existingPath}.${newSegment}` : newSegment;\n","import styled from \"styled-components\";\nimport { Box } from \"@sanity/ui\";\n\nexport const ErrorLineItem = styled(Box)`\n  border-radius: 4px;\n  cursor: pointer;\n\n  &:hover {\n    background-color: #e7e7e7;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    &:hover {\n      background-color: #505050;\n    }\n  }\n`;\n\nexport const CopyQueryButton = styled.button`\n  all: unset;\n  cursor: pointer;\n  &:focus {\n    box-shadow: inset 0 0 0 1px var(--card-border-color), 0 0 0 1px #fff,\n      0 0 0 3px var(--card-focus-ring-color);\n    border-radius: 0.1875rem;\n  }\n`;\n","export const formatErrorPath = (path: string) =>\n  path.split(\".\").reduce((acc, el) => {\n    if (!NumReg.test(el)) {\n      return `${acc}.${el}`;\n    }\n    return `${acc}[${el}]`;\n  }, \"\");\n\nconst NumReg = /\\d+/;\n"],"mappings":"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","names":["React","React","Box","Button","Card","Flex","Label","Stack","Text","Tooltip","React","React","url","url","_a","React","Box","Button","Stack","Box","Stack","Label","CopyIcon","Box","Button","CopyIcon","Label","Stack","styled","Box","_a","activeDataset","activeAPIVersion","query","params","errorPaths","Flex","Tooltip","Box","Text","Stack","Label","Card","Button"]}