@sanity/vision 4.13.1-next.2 → 4.14.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"SanityVision.js","sources":["../../src/apiVersions.ts","../../src/components/DelayedSpinner.tsx","../../src/codemirror/extensions.ts","../../src/codemirror/useCodemirrorTheme.ts","../../src/codemirror/VisionCodeMirror.styled.tsx","../../src/codemirror/VisionCodeMirror.tsx","../../src/perspectives.ts","../../src/util/encodeQueryString.ts","../../src/util/isPlainObject.ts","../../src/util/localStorage.ts","../../src/util/parseApiQueryString.ts","../../src/util/prefixApiVersion.ts","../../src/util/validateApiVersion.ts","../../src/util/tryParseParams.ts","../../src/components/VisionGui.styled.tsx","../../src/components/ParamsEditor.tsx","../../src/hooks/useSavedQueries.ts","../../src/components/QueryRecall.styled.tsx","../../src/components/QueryRecall.tsx","../../src/components/usePaneSize.ts","../../src/components/VisionGuiControls.tsx","../../src/components/PerspectivePopover.styled.tsx","../../src/components/PerspectivePopover.tsx","../../src/components/VisionGuiHeader.tsx","../../src/util/getBlobUrl.ts","../../src/components/QueryErrorDialog.styled.tsx","../../src/components/QueryErrorDetails.tsx","../../src/components/QueryErrorDialog.tsx","../../src/components/ResultView.styled.tsx","../../src/components/ResultView.tsx","../../src/components/SaveResultButtons.tsx","../../src/components/VisionGuiResult.tsx","../../src/components/VisionGui.tsx","../../src/hooks/useDatasets.ts","../../src/containers/VisionContainer.tsx","../../src/containers/VisionErrorBoundary.tsx","../../src/SanityVision.tsx"],"sourcesContent":["export const API_VERSIONS = [\n 'v1',\n 'vX',\n 'v2021-03-25',\n 'v2021-10-21',\n 'v2022-03-07',\n 'v2025-02-19',\n `v${new Date().toISOString().split('T')[0]}`,\n]\nexport const [DEFAULT_API_VERSION] = API_VERSIONS.slice(-1)\n","import {Spinner} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\n\ninterface DelayedSpinnerProps {\n delay?: number\n}\n\n// Waits for X ms before showing a spinner\nexport function DelayedSpinner(props: DelayedSpinnerProps) {\n const [show, setShow] = useState(false)\n\n useEffect(() => {\n const timer = setTimeout(() => setShow(true), props.delay || 500)\n return () => clearTimeout(timer)\n }, [props.delay])\n\n return show ? <Spinner muted size={4} /> : null\n}\n","import {closeBrackets} from '@codemirror/autocomplete'\nimport {defaultKeymap, history, historyKeymap} from '@codemirror/commands'\nimport {javascriptLanguage} from '@codemirror/lang-javascript'\nimport {\n bracketMatching,\n defaultHighlightStyle,\n indentOnInput,\n syntaxHighlighting,\n} from '@codemirror/language'\nimport {highlightSelectionMatches} from '@codemirror/search'\nimport {type Extension} from '@codemirror/state'\nimport {\n drawSelection,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n} from '@codemirror/view'\n\nexport const codemirrorExtensions: Extension[] = [\n [javascriptLanguage],\n lineNumbers(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSelectionMatches(),\n highlightSpecialChars(),\n indentOnInput(),\n bracketMatching(),\n closeBrackets(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, {fallback: true}),\n keymap.of(\n [\n // Override the default keymap for Mod-Enter to not insert a new line, we have a custom event handler for executing queries\n {key: 'Mod-Enter', run: () => true},\n\n // Add the default keymap and history keymap\n defaultKeymap,\n historyKeymap,\n ]\n .flat()\n .filter(Boolean),\n ),\n]\n","import {HighlightStyle, syntaxHighlighting} from '@codemirror/language'\nimport {EditorView} from '@codemirror/view'\nimport {tags as t} from '@lezer/highlight'\nimport {hues} from '@sanity/color'\nimport {rem, type Theme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function useCodemirrorTheme(theme: Theme) {\n const cmTheme = useMemo(() => createTheme(theme), [theme])\n const cmHighlight = useMemo(() => syntaxHighlighting(createHighlight(theme)), [theme])\n\n return [cmTheme, cmHighlight]\n}\n\nfunction createTheme(theme: Theme) {\n const {color, fonts} = theme.sanity\n const card = color.card.enabled\n const cursor = hues.blue[color.dark ? 400 : 500].hex\n const selection = hues.gray[theme.sanity.color.dark ? 900 : 100].hex\n\n return EditorView.theme(\n {\n '&': {\n color: card.fg,\n backgroundColor: card.bg,\n },\n\n '.cm-content': {\n caretColor: cursor,\n },\n\n '.cm-editor': {\n fontFamily: fonts.code.family,\n fontSize: rem(fonts.code.sizes[1].fontSize),\n lineHeight: 'inherit',\n },\n\n '.cm-cursor, .cm-dropCursor': {borderLeftColor: cursor},\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: selection,\n },\n\n '.cm-panels': {backgroundColor: card.bg, color: card.fg},\n '.cm-panels.cm-panels-top': {borderBottom: `2px solid ${card.border}`},\n '.cm-panels.cm-panels-bottom': {borderTop: `2px solid ${card.border}`},\n },\n {dark: color.dark},\n )\n}\n\nfunction createHighlight(theme: Theme) {\n const c = theme.sanity.color.base\n const s = theme.sanity.color.syntax\n return HighlightStyle.define([\n {tag: t.keyword, color: s.keyword},\n {tag: [t.propertyName, t.name, t.deleted, t.character, t.macroName], color: s.property},\n {tag: [t.function(t.variableName), t.labelName], color: s.function},\n {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: s.variable},\n {tag: [t.definition(t.name), t.separator], color: s.constant},\n {\n tag: [\n t.typeName,\n t.className,\n t.number,\n t.changed,\n t.annotation,\n t.modifier,\n t.self,\n t.namespace,\n ],\n color: s.number,\n },\n {\n tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)],\n color: s.operator,\n },\n {tag: [t.meta, t.comment], color: s.comment},\n {tag: t.strong, fontWeight: 'bold'},\n {tag: t.emphasis, fontStyle: 'italic'},\n {tag: t.strikethrough, textDecoration: 'line-through'},\n {tag: t.heading, fontWeight: 'bold', color: s.property},\n {tag: [t.atom, t.bool, t.special(t.variableName)], color: s.boolean},\n {tag: [t.processingInstruction, t.string, t.inserted], color: s.string},\n {tag: t.invalid, color: c.fg},\n ])\n}\n","import {rem} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const EditorRoot = styled.div`\n width: 100%;\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n overflow: clip;\n position: relative;\n display: flex;\n\n & .cm-theme {\n width: 100%;\n }\n\n & .cm-editor {\n height: 100%;\n\n font-size: 16px;\n line-height: 21px;\n }\n\n & .cm-line {\n padding-left: ${({theme}) => rem(theme.sanity.space[3])};\n }\n\n & .cm-content {\n border-right-width: ${({theme}) => rem(theme.sanity.space[4])} !important;\n padding-top: ${({theme}) => rem(theme.sanity.space[5])};\n }\n`\n","import {useTheme} from '@sanity/ui'\nimport CodeMirror, {\n EditorSelection,\n type ReactCodeMirrorProps,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror'\nimport {forwardRef, useCallback, useImperativeHandle, useRef, useState} from 'react'\n\nimport {codemirrorExtensions} from './extensions'\nimport {useCodemirrorTheme} from './useCodemirrorTheme'\nimport {EditorRoot} from './VisionCodeMirror.styled'\n\nexport interface VisionCodeMirrorHandle {\n resetEditorContent: (newContent: string) => void\n}\n\nexport const VisionCodeMirror = forwardRef<\n VisionCodeMirrorHandle,\n Pick<ReactCodeMirrorProps, 'onChange'> & {\n initialValue: ReactCodeMirrorProps['value']\n }\n>((props, ref) => {\n // The value prop is only passed for initial value, and is not updated when the parent component updates the value.\n // If you need to update the value, use the resetEditorContent function.\n const [initialValue] = useState(props.initialValue)\n const sanityTheme = useTheme()\n const theme = useCodemirrorTheme(sanityTheme)\n const codeMirrorRef = useRef<ReactCodeMirrorRef>(null)\n\n const resetEditorContent = useCallback((newContent: string) => {\n const editorView = codeMirrorRef.current?.view\n if (!editorView) return\n\n const currentDoc = editorView.state.doc.toString()\n if (newContent !== currentDoc) {\n editorView.dispatch({\n changes: {from: 0, to: currentDoc.length, insert: newContent},\n selection: EditorSelection.cursor(newContent.length), // Place cursor at end\n })\n }\n }, [])\n\n useImperativeHandle(\n ref,\n () => ({\n resetEditorContent,\n }),\n [resetEditorContent],\n )\n\n return (\n <EditorRoot>\n <CodeMirror\n ref={codeMirrorRef}\n basicSetup={false}\n theme={theme}\n extensions={codemirrorExtensions}\n value={initialValue}\n onChange={props.onChange}\n />\n </EditorRoot>\n )\n})\n\n// Add display name\nVisionCodeMirror.displayName = 'VisionCodeMirror'\n","import {type ClientPerspective} from '@sanity/client'\nimport isEqual from 'react-fast-compare'\nimport {type PerspectiveContextValue} from 'sanity'\n\nexport const SUPPORTED_PERSPECTIVES = ['pinnedRelease', 'raw', 'published', 'drafts'] as const\n\nexport type SupportedPerspective = (typeof SUPPORTED_PERSPECTIVES)[number]\n\n/**\n * Virtual perspectives are recognised by Vision, but do not concretely reflect the names of real\n * perspectives. Virtual perspectives are transformed into real perspectives before being used to\n * interact with data.\n *\n * For example, the `pinnedRelease` virtual perspective is transformed to the real perspective\n * currently pinned in Studio.\n */\nexport const VIRTUAL_PERSPECTIVES = ['pinnedRelease'] as const\n\nexport type VirtualPerspective = (typeof VIRTUAL_PERSPECTIVES)[number]\n\nexport function isSupportedPerspective(p: string): p is SupportedPerspective {\n return SUPPORTED_PERSPECTIVES.includes(p as SupportedPerspective)\n}\n\nexport function isVirtualPerspective(\n maybeVirtualPerspective: unknown,\n): maybeVirtualPerspective is VirtualPerspective {\n return (\n typeof maybeVirtualPerspective === 'string' &&\n VIRTUAL_PERSPECTIVES.includes(maybeVirtualPerspective as VirtualPerspective)\n )\n}\n\nexport function hasPinnedPerspective({selectedPerspectiveName}: PerspectiveContextValue): boolean {\n return typeof selectedPerspectiveName !== 'undefined'\n}\n\nexport function hasPinnedPerspectiveChanged(\n previous: PerspectiveContextValue,\n next: PerspectiveContextValue,\n): boolean {\n const hasPerspectiveStackChanged = !isEqual(previous.perspectiveStack, next.perspectiveStack)\n\n return (\n previous.selectedPerspectiveName !== next.selectedPerspectiveName || hasPerspectiveStackChanged\n )\n}\n\nexport function getActivePerspective({\n visionPerspective,\n perspectiveStack,\n}: {\n visionPerspective: ClientPerspective | SupportedPerspective | undefined\n perspectiveStack: PerspectiveContextValue['perspectiveStack']\n}): ClientPerspective | undefined {\n if (visionPerspective !== 'pinnedRelease') {\n return visionPerspective\n }\n return perspectiveStack\n}\n","export function encodeQueryString(\n query: string,\n params: Record<string, unknown> = {},\n options: Record<string, string | string[]> = {},\n): string {\n const searchParams = new URLSearchParams()\n searchParams.set('query', query)\n\n for (const [key, value] of Object.entries(params)) {\n searchParams.set(`$${key}`, JSON.stringify(value))\n }\n\n for (const [key, value] of Object.entries(options)) {\n if (value) searchParams.set(key, `${value}`)\n }\n\n return `?${searchParams}`\n}\n","export function isPlainObject(obj: unknown): obj is Record<string, unknown> {\n return (\n !!obj && typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]'\n )\n}\n","import {isPlainObject} from './isPlainObject'\n\nconst hasLocalStorage = supportsLocalStorage()\nconst keyPrefix = 'sanityVision:'\n\nexport interface LocalStorageish {\n get: <T>(key: string, defaultVal: T) => T\n set: <T>(key: string, value: T) => T\n merge: <T>(props: T) => T\n}\n\nexport function clearLocalStorage() {\n if (!hasLocalStorage) {\n return\n }\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key?.startsWith(keyPrefix)) {\n localStorage.removeItem(key)\n }\n }\n}\n\nexport function getLocalStorage(namespace: string): LocalStorageish {\n const storageKey = `${keyPrefix}${namespace}`\n let loadedState: Record<string, unknown> | null = null\n\n return {get, set, merge}\n\n function get<T>(key: string, defaultVal: T): T {\n const state = ensureState()\n return typeof state[key] === 'undefined' ? defaultVal : (state[key] as T)\n }\n\n function set<T>(key: string, value: T): T {\n const state = ensureState()\n state[key] = value\n localStorage.setItem(storageKey, JSON.stringify(loadedState))\n return value\n }\n\n function merge<T>(props: T): T {\n const state = {...ensureState(), ...props}\n localStorage.setItem(storageKey, JSON.stringify(state))\n return state\n }\n\n function ensureState(): Record<string, unknown> {\n if (loadedState === null) {\n loadedState = loadState()\n }\n\n return loadedState\n }\n\n function loadState() {\n if (!hasLocalStorage) {\n return {}\n }\n\n try {\n const stored = JSON.parse(localStorage.getItem(storageKey) || '{}')\n return isPlainObject(stored) ? stored : {}\n } catch (err) {\n return {}\n }\n }\n}\n\nfunction supportsLocalStorage() {\n const mod = 'lsCheck'\n try {\n localStorage.setItem(mod, mod)\n localStorage.removeItem(mod)\n return true\n } catch (err) {\n return false\n }\n}\n","export interface ParsedApiQueryString {\n query: string\n params: Record<string, unknown>\n options: Record<string, string>\n}\n\nexport function parseApiQueryString(qs: URLSearchParams): ParsedApiQueryString {\n const params: Record<string, unknown> = {}\n const options: Record<string, string> = {}\n\n for (const [key, value] of qs.entries()) {\n if (key[0] === '$') {\n params[key.slice(1)] = JSON.parse(value)\n continue\n }\n\n if (key === 'perspective') {\n options[key] = value\n continue\n }\n }\n\n return {query: qs.get('query') || '', params, options}\n}\n","export function prefixApiVersion(version: string): string {\n if (version[0] !== 'v' && version !== 'other') {\n return `v${version}`\n }\n\n return version\n}\n","export function validateApiVersion(apiVersion: string): boolean {\n const parseableApiVersion = apiVersion.replace(/^v/, '').trim().toUpperCase()\n\n const isValidApiVersion =\n parseableApiVersion.length > 0 &&\n (parseableApiVersion === 'X' ||\n parseableApiVersion === '1' ||\n (/^\\d{4}-\\d{2}-\\d{2}$/.test(parseableApiVersion) && !isNaN(Date.parse(parseableApiVersion))))\n\n return isValidApiVersion\n}\n","import JSON5 from 'json5'\nimport {type TFunction} from 'sanity'\n\nexport function tryParseParams(\n val: string,\n t: TFunction<'vision', undefined>,\n): Record<string, unknown> | Error {\n try {\n const parsed = val ? JSON5.parse(val) : {}\n return typeof parsed === 'object' && parsed && !Array.isArray(parsed) ? parsed : {}\n } catch (err) {\n // JSON5 always prefixes the error message with JSON5:, so we remove it\n // to clean up the error tooltip\n err.message = `${t('params.error.params-invalid-json')}:\\n\\n${err.message.replace(\n 'JSON5:',\n '',\n )}`\n return err\n }\n}\n","import {Box, Card, Flex, Label, rem, Text} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const Root = styled(Flex)`\n .sidebarPanes .Pane {\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n & .Resizer {\n background: var(--card-border-color);\n opacity: 1;\n z-index: 1;\n box-sizing: border-box;\n background-clip: padding-box;\n border: solid transparent;\n }\n\n & .Resizer:hover {\n border-color: var(--card-shadow-ambient-color);\n }\n\n & .Resizer.horizontal {\n height: 11px;\n margin: -5px 0;\n border-width: 5px 0;\n cursor: row-resize;\n width: 100%;\n z-index: 4;\n }\n\n & .Resizer.vertical {\n width: 11px;\n margin: 0 -5px;\n border-width: 0 5px;\n cursor: col-resize;\n z-index: 2; /* To prevent the resizer from being hidden behind CodeMirror scroll area */\n }\n\n .Resizer.disabled {\n cursor: not-allowed;\n }\n\n .Resizer.disabled:hover {\n border-color: transparent;\n }\n`\n\nRoot.displayName = 'Root'\n\nexport const Header = styled(Card)`\n border-bottom: 1px solid var(--card-border-color);\n`\n\nexport const StyledLabel = styled(Label)`\n flex: 1;\n`\n\nexport const SplitpaneContainer = styled(Box)`\n position: relative;\n`\n\nexport const QueryCopyLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n\nexport const InputBackgroundContainer = styled(Box)`\n position: absolute;\n top: 1rem;\n left: 0;\n padding: 0;\n margin: 0;\n z-index: 10;\n right: 0;\n\n ${StyledLabel} {\n user-select: none;\n }\n`\n\nexport const InputBackgroundContainerLeft = styled(InputBackgroundContainer)`\n // This is so its aligned with the gutters of CodeMirror\n left: 33px;\n`\n\nexport const InputContainer = styled(Card)`\n width: 100%;\n height: 100%;\n position: relative;\n flex-direction: column;\n`\n\nexport const ResultOuterContainer = styled(Flex)`\n height: 100%;\n`\n\nexport const ResultInnerContainer = styled(Box)`\n position: relative;\n`\n\nexport const ResultContainer = styled(Card)<{$isInvalid: boolean}>`\n height: 100%;\n width: 100%;\n position: absolute;\n max-width: 100%;\n\n ${({$isInvalid}) =>\n $isInvalid &&\n css`\n &:after {\n background-color: var(--card-bg-color);\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n }\n `}\n`\n\nexport const Result = styled(Box)`\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 20;\n`\n\nexport const ResultFooter = styled(Flex)`\n border-top: 1px solid var(--card-border-color);\n`\n\nexport const TimingsCard = styled(Card)`\n position: relative;\n`\n\nexport const TimingsContainer = styled(Box)`\n width: 100%;\n height: 100%;\n`\n\nexport const TimingsTextContainer = styled(Flex)`\n height: 100%;\n min-height: ${({theme}) =>\n rem(\n theme.sanity.space[3] * 2 +\n theme.sanity.fonts.text.sizes[2].lineHeight -\n theme.sanity.fonts.text.sizes[2].ascenderHeight -\n theme.sanity.fonts.text.sizes[2].descenderHeight,\n )};\n`\n\nexport const DownloadsCard = styled(Card)`\n position: relative;\n`\n\nexport const SaveResultLabel = styled(Text)`\n transform: initial;\n &:before,\n &:after {\n content: none;\n }\n > span {\n display: flex !important;\n gap: ${({theme}) => rem(theme.sanity.space[3])};\n align-items: center;\n }\n`\n\nexport const ControlsContainer = styled(Box)`\n border-top: 1px solid var(--card-border-color);\n`\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text, Tooltip} from '@sanity/ui'\nimport {debounce} from 'lodash'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {type TFunction, useTranslation} from 'sanity'\n\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {tryParseParams} from '../util/tryParseParams'\nimport {type Params} from './VisionGui'\nimport {InputBackgroundContainerLeft, StyledLabel} from './VisionGui.styled'\n\nconst defaultValue = `{\\n \\n}`\n\nexport interface ParamsEditorProps {\n value: string\n onChange: (changeEvt: string) => void\n paramsError: string | undefined\n hasValidParams: boolean\n editorRef: RefObject<VisionCodeMirrorHandle | null>\n}\n\nexport interface ParamsEditorChange {\n valid: boolean\n}\n\nexport function ParamsEditor(props: ParamsEditorProps) {\n const {onChange, paramsError, hasValidParams, editorRef} = props\n const {t} = useTranslation(visionLocaleNamespace)\n\n const handleChangeRaw = useCallback(\n (newValue: string) => {\n onChange(newValue)\n },\n [onChange],\n )\n\n const handleChange = useMemo(() => debounce(handleChangeRaw, 333), [handleChangeRaw])\n return (\n <Card flex={1} tone={hasValidParams ? 'default' : 'critical'} data-testid=\"params-editor\">\n <InputBackgroundContainerLeft>\n <Flex>\n <StyledLabel muted>{t('params.label')}</StyledLabel>\n {paramsError && (\n <Tooltip animate placement=\"top\" portal content={<Text size={1}>{paramsError}</Text>}>\n <Box padding={1} marginX={2}>\n <Text>\n <ErrorOutlineIcon />\n </Text>\n </Box>\n </Tooltip>\n )}\n </Flex>\n </InputBackgroundContainerLeft>\n <VisionCodeMirror\n ref={editorRef}\n initialValue={props.value || defaultValue}\n onChange={handleChange}\n />\n </Card>\n )\n}\n\nexport function parseParams(\n value: string,\n t: TFunction<typeof visionLocaleNamespace, undefined>,\n): Params {\n const parsedParams = tryParseParams(value, t)\n const params = parsedParams instanceof Error ? {} : parsedParams\n const validationError = parsedParams instanceof Error ? parsedParams.message : undefined\n const isValid = !validationError\n\n return {\n parsed: params,\n raw: value,\n valid: isValid,\n error: validationError,\n }\n}\n","import {uuid} from '@sanity/uuid' // Import the UUID library\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {map, startWith} from 'rxjs/operators'\nimport {type KeyValueStoreValue, useKeyValueStore} from 'sanity'\n\nconst STORED_QUERIES_NAMESPACE = 'studio.vision-tool.saved-queries'\n\nexport interface QueryConfig {\n _key: string\n url: string\n savedAt: string\n title?: string\n shared?: boolean\n}\n\nexport interface StoredQueries {\n queries: QueryConfig[]\n}\n\nconst defaultValue = {\n queries: [],\n}\nconst keyValueStoreKey = STORED_QUERIES_NAMESPACE\n\nexport function useSavedQueries(): {\n queries: QueryConfig[]\n saveQuery: (query: Omit<QueryConfig, '_key'>) => void\n updateQuery: (query: QueryConfig) => void\n deleteQuery: (key: string) => void\n saving: boolean\n deleting: string[]\n saveQueryError: Error | undefined\n deleteQueryError: Error | undefined\n error: Error | undefined\n} {\n const keyValueStore = useKeyValueStore()\n\n const [value, setValue] = useState<StoredQueries>(defaultValue)\n const [saving, setSaving] = useState(false)\n const [deleting, setDeleting] = useState<string[]>([])\n const [saveQueryError, setSaveQueryError] = useState<Error | undefined>()\n const [deleteQueryError, setDeleteQueryError] = useState<Error | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const queries = useMemo(() => {\n return keyValueStore.getKey(keyValueStoreKey)\n }, [keyValueStore])\n\n useEffect(() => {\n const sub = queries\n .pipe(\n startWith(defaultValue as any),\n map((data: StoredQueries) => {\n if (!data) {\n return defaultValue\n }\n return data\n }),\n )\n .subscribe({\n next: setValue,\n error: (err) => setError(err as Error),\n })\n\n return () => sub?.unsubscribe()\n }, [queries, keyValueStore])\n\n const saveQuery = useCallback(\n (query: Omit<QueryConfig, '_key'>) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const newQuery = {...query, _key: uuid()} // Add a unique _key to the query\n const newQueries = [newQuery, ...value.queries]\n setValue({queries: newQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: newQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n } finally {\n setSaving(false)\n }\n },\n [keyValueStore, value.queries],\n )\n\n const updateQuery = useCallback(\n (query: QueryConfig) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const updatedQueries = value.queries.map((q) =>\n q._key === query._key ? {...q, ...query} : q,\n )\n setValue({queries: updatedQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: updatedQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n } finally {\n setSaving(false)\n }\n },\n [keyValueStore, value.queries],\n )\n\n const deleteQuery = useCallback(\n (key: string) => {\n setDeleting((prev) => [...prev, key])\n setDeleteQueryError(undefined)\n try {\n const filteredQueries = value.queries.filter((q) => q._key !== key)\n setValue({queries: filteredQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: filteredQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setDeleteQueryError(err as Error)\n } finally {\n setDeleting((prev) => prev.filter((k) => k !== key))\n }\n },\n [keyValueStore, value.queries],\n )\n\n return {\n queries: value.queries,\n saveQuery,\n updateQuery,\n deleteQuery,\n saving,\n deleting,\n saveQueryError,\n deleteQueryError,\n error,\n }\n}\n","import {Box, Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const FixedHeader = styled(Stack)`\n position: sticky;\n top: 0;\n background: ${({theme}) => theme.sanity.color.base.bg};\n z-index: 1;\n`\n\nexport const ScrollContainer = styled(Box)`\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${({theme}) => theme.sanity.color.base.border};\n border-radius: 4px;\n }\n`\n","import {AddIcon, SearchIcon, TrashIcon} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Code,\n Flex,\n Menu,\n MenuButton,\n MenuItem,\n Stack,\n Text,\n TextInput,\n useToast,\n} from '@sanity/ui'\nimport {isEqual} from 'lodash'\nimport {type ReactElement, useCallback, useState} from 'react'\nimport {ContextMenuButton, useDateTimeFormat, useTranslation} from 'sanity'\n\nimport {type QueryConfig, useSavedQueries} from '../hooks/useSavedQueries'\nimport {visionLocaleNamespace} from '../i18n'\nimport {FixedHeader, ScrollContainer} from './QueryRecall.styled'\nimport {type ParsedUrlState} from './VisionGui'\n\nexport function QueryRecall({\n url,\n getStateFromUrl,\n setStateFromParsedUrl,\n currentQuery,\n currentParams,\n generateUrl,\n}: {\n url?: string\n getStateFromUrl: (data: string) => ParsedUrlState | null\n setStateFromParsedUrl: (parsedUrlObj: ParsedUrlState) => void\n currentQuery: string\n currentParams: Record<string, unknown>\n generateUrl: (query: string, params: Record<string, unknown>) => string\n}): ReactElement {\n const toast = useToast()\n const {saveQuery, updateQuery, queries, deleteQuery, saving, deleting, saveQueryError} =\n useSavedQueries()\n const {t} = useTranslation(visionLocaleNamespace)\n const formatDate = useDateTimeFormat({\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n const [editingKey, setEditingKey] = useState<string | null>(null)\n const [editingTitle, setEditingTitle] = useState('')\n const [optimisticTitles, setOptimisticTitles] = useState<Record<string, string>>({})\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedUrl, setSelectedUrl] = useState<string | undefined>(url)\n\n const handleSave = useCallback(async () => {\n // Generate the correct URL first\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(new Date(duplicateQuery?.savedAt || ''))}`,\n })\n return\n }\n\n if (newUrl) {\n await saveQuery({\n url: newUrl,\n savedAt: new Date().toISOString(),\n title: 'Untitled',\n })\n // Set the selected URL to the newly saved query's URL\n setSelectedUrl(newUrl)\n }\n if (saveQueryError) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: saveQueryError.message,\n })\n } else {\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n }\n }, [\n queries,\n saveQueryError,\n toast,\n t,\n currentQuery,\n currentParams,\n getStateFromUrl,\n generateUrl,\n formatDate,\n saveQuery,\n ])\n\n const handleTitleSave = useCallback(\n async (query: QueryConfig, newTitle: string) => {\n setEditingKey(null)\n setOptimisticTitles((prev) => ({...prev, [query._key]: newTitle}))\n\n try {\n await updateQuery({\n ...query,\n title: newTitle,\n })\n // Clear optimistic title on success\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n } catch (err) {\n // Clear optimistic title on error\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [updateQuery, toast, t],\n )\n\n const handleUpdate = useCallback(\n async (query: QueryConfig) => {\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n // Skip the current query when checking for duplicates\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(\n new Date(duplicateQuery?.savedAt || ''),\n )}`,\n })\n return\n }\n\n try {\n await updateQuery({\n ...query,\n url: newUrl,\n savedAt: new Date().toISOString(),\n })\n setSelectedUrl(newUrl)\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [\n currentQuery,\n currentParams,\n formatDate,\n generateUrl,\n updateQuery,\n toast,\n t,\n queries,\n getStateFromUrl,\n ],\n )\n\n const filteredQueries = queries?.filter((q) => {\n return q?.title?.toLowerCase().includes(searchQuery.toLowerCase())\n })\n\n return (\n <ScrollContainer>\n <FixedHeader space={3}>\n <Flex padding={3} paddingTop={4} paddingBottom={0} justify=\"space-between\" align=\"center\">\n <Text weight=\"semibold\" style={{textTransform: 'capitalize'}} size={4}>\n {t('label.saved-queries')}\n </Text>\n <Button\n label={t('action.save-query')}\n icon={AddIcon}\n disabled={saving}\n onClick={handleSave}\n mode=\"bleed\"\n />\n </Flex>\n <Box padding={3} paddingTop={0}>\n <TextInput\n placeholder={t('label.search-queries')}\n icon={SearchIcon}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.currentTarget.value)}\n />\n </Box>\n </FixedHeader>\n <Stack paddingY={3}>\n {filteredQueries?.map((q) => {\n const queryObj = getStateFromUrl(q.url)\n const isSelected = selectedUrl === q.url\n\n // Compare against current live state\n const areQueriesEqual =\n queryObj && currentQuery === queryObj.query && isEqual(currentParams, queryObj.params)\n\n const isEdited = isSelected && !areQueriesEqual\n return (\n <Card\n key={q._key}\n width={'fill'}\n padding={4}\n border\n tone={isSelected ? 'positive' : 'default'}\n onClick={() => {\n setSelectedUrl(q.url) // Update the selected query immediately\n const parsedUrl = getStateFromUrl(q.url)\n if (parsedUrl) {\n setStateFromParsedUrl(parsedUrl)\n }\n }}\n style={{position: 'relative'}}\n >\n <Stack space={3}>\n <Flex justify=\"space-between\" align={'center'}>\n <Flex align=\"center\" gap={2} paddingRight={1}>\n {editingKey === q._key ? (\n <TextInput\n value={editingTitle}\n onChange={(event) => setEditingTitle(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n handleTitleSave(q, editingTitle)\n } else if (event.key === 'Escape') {\n setEditingKey(null)\n }\n }}\n onBlur={() => handleTitleSave(q, editingTitle)}\n autoFocus\n style={{maxWidth: '170px', height: '24px'}}\n />\n ) : (\n <Text\n weight=\"bold\"\n size={3}\n textOverflow=\"ellipsis\"\n style={{maxWidth: '170px', cursor: 'pointer', padding: '4px 0'}}\n title={\n optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)\n }\n onClick={() => {\n setEditingKey(q._key)\n setEditingTitle(q.title || q._key.slice(0, 5))\n }}\n >\n {optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)}\n </Text>\n )}\n {isEdited && (\n <Box\n style={{\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: 'var(--card-focus-ring-color)',\n }}\n />\n )}\n </Flex>\n <MenuButton\n button={<ContextMenuButton />}\n id={`${q._key}-menu`}\n menu={\n <Menu\n // style={{background: 'white', backgroundColor: 'white', borderRadius: '11%'}}\n >\n <MenuItem\n tone=\"critical\"\n padding={3}\n icon={TrashIcon}\n text={t('action.delete')}\n onClick={(event) => {\n event.stopPropagation()\n deleteQuery(q._key)\n }}\n />\n </Menu>\n }\n popover={{portal: true, placement: 'bottom-end', tone: 'default'}}\n />\n </Flex>\n\n <Code muted>{queryObj?.query.split('{')[0]}</Code>\n\n <Flex align=\"center\" gap={1}>\n <Text size={1} muted>\n {formatDate.format(new Date(q.savedAt || ''))}\n </Text>\n </Flex>\n\n {isEdited && (\n <Button\n mode=\"ghost\"\n tone=\"default\"\n size={1}\n padding={2}\n style={{\n height: '24px',\n position: 'absolute',\n right: '16px',\n bottom: '16px',\n fontSize: '12px',\n }}\n text={t('action.update')}\n onClick={(e) => {\n e.stopPropagation()\n handleUpdate(q)\n }}\n />\n )}\n </Stack>\n </Card>\n )\n })}\n </Stack>\n </ScrollContainer>\n )\n}\n","import {useEffect, useState} from 'react'\n\ninterface PaneSizeOptions {\n defaultSize: number\n size?: number\n allowResize: boolean\n minSize: number\n maxSize: number\n}\nfunction narrowBreakpoint(): boolean {\n return typeof window !== 'undefined' && window.innerWidth > 600\n}\n\nfunction calculatePaneSizeOptions(height: number | undefined): PaneSizeOptions {\n let rootHeight = height\n\n if (!rootHeight) {\n // Initial root height without header\n rootHeight =\n typeof window !== 'undefined' && typeof document !== 'undefined'\n ? document.body.getBoundingClientRect().height - 60\n : 0\n }\n return {\n defaultSize: rootHeight / (narrowBreakpoint() ? 2 : 1),\n size: rootHeight > 550 ? undefined : rootHeight * 0.4,\n allowResize: rootHeight > 550,\n minSize: Math.min(170, Math.max(170, rootHeight / 2)),\n maxSize: rootHeight > 650 ? rootHeight * 0.7 : rootHeight * 0.6,\n }\n}\n\nexport function usePaneSize({\n visionRootRef,\n}: {\n visionRootRef: React.RefObject<HTMLDivElement | null>\n}) {\n const [isNarrowBreakpoint, setIsNarrowBreakpoint] = useState(() => narrowBreakpoint())\n const [paneSizeOptions, setPaneSizeOptions] = useState<PaneSizeOptions>(() =>\n calculatePaneSizeOptions(undefined),\n )\n\n useEffect(() => {\n if (!visionRootRef.current) {\n return undefined\n }\n const handleResize = (entries: ResizeObserverEntry[]) => {\n setIsNarrowBreakpoint(narrowBreakpoint())\n const entry = entries?.[0]\n if (entry) {\n setPaneSizeOptions(calculatePaneSizeOptions(entry.contentRect.height))\n }\n }\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(visionRootRef.current)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [visionRootRef])\n\n return {paneSizeOptions, isNarrowBreakpoint}\n}\n","import {PlayIcon, StopIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Hotkeys, Text, Tooltip} from '@sanity/ui'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {ControlsContainer} from './VisionGui.styled'\n\nexport interface VisionGuiControlsProps {\n hasValidParams: boolean\n queryInProgress: boolean\n listenInProgress: boolean\n onQueryExecution: () => void\n onListenExecution: () => void\n}\n\n/**\n * Vision GUI controls\n * To handle query and listen execution.\n */\nexport function VisionGuiControls({\n hasValidParams,\n listenInProgress,\n queryInProgress,\n onQueryExecution,\n onListenExecution,\n}: VisionGuiControlsProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n return (\n <ControlsContainer>\n <Card padding={3} paddingX={3}>\n <Tooltip\n content={\n <Card radius={4}>\n <Text size={1} muted>\n {t('params.error.params-invalid-json')}\n </Text>\n </Card>\n }\n placement=\"top\"\n disabled={hasValidParams}\n portal\n >\n <Flex justify=\"space-evenly\">\n <Box flex={1}>\n <Tooltip\n content={\n <Card radius={4}>\n <Hotkeys keys={['Ctrl', 'Enter']} />\n </Card>\n }\n placement=\"top\"\n portal\n >\n <Button\n width=\"fill\"\n onClick={onQueryExecution}\n type=\"button\"\n icon={queryInProgress ? StopIcon : PlayIcon}\n disabled={listenInProgress || !hasValidParams}\n tone={queryInProgress ? 'positive' : 'primary'}\n text={queryInProgress ? t('action.query-cancel') : t('action.query-execute')}\n />\n </Tooltip>\n </Box>\n <Box flex={1} marginLeft={3}>\n <Button\n width=\"fill\"\n onClick={onListenExecution}\n type=\"button\"\n icon={listenInProgress ? StopIcon : PlayIcon}\n text={listenInProgress ? t('action.listen-cancel') : t('action.listen-execute')}\n mode=\"ghost\"\n disabled={!hasValidParams}\n tone={listenInProgress ? 'positive' : 'default'}\n />\n </Box>\n </Flex>\n </Tooltip>\n </Card>\n </ControlsContainer>\n )\n}\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const PerspectivePopoverContent = styled(Box)`\n /* This limits the width of the popover content */\n max-width: 240px;\n`\n\nexport const PerspectivePopoverLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n","import {HelpCircleIcon} from '@sanity/icons'\nimport {\n Badge,\n Box,\n Button,\n Card,\n type CardTone,\n Inline,\n Popover,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\nimport {Translate, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {PerspectivePopoverContent, PerspectivePopoverLink} from './PerspectivePopover.styled'\n\nconst Dot = styled.div<{$tone: CardTone}>`\n width: 4px;\n height: 4px;\n border-radius: 3px;\n box-shadow: 0 0 0 1px var(--card-bg-color);\n background-color: ${({$tone}) => `var(--card-badge-${$tone}-dot-color)`};\n`\n\nconst SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION = false\n\nexport function PerspectivePopover() {\n const [open, setOpen] = useState(false)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n\n const {t} = useTranslation(visionLocaleNamespace)\n\n useClickOutsideEvent(\n () => setOpen(false),\n () => [buttonRef.current, popoverRef.current],\n )\n\n return (\n <Popover\n content={\n <PerspectivePopoverContent>\n <Stack space={4}>\n <Inline space={2}>\n <Text weight=\"medium\">{t('settings.perspectives.title')}</Text>\n </Inline>\n\n <Card>\n <Text muted>{t('settings.perspectives.description')}</Text>\n </Card>\n <Card>\n <Stack space={2}>\n <Box>\n <Badge tone=\"primary\">{t('label.new')}</Badge>\n </Box>\n <Text muted>\n <Translate\n t={t}\n i18nKey=\"settings.perspective.preview-drafts-renamed-to-drafts.description\"\n />\n </Text>\n </Stack>\n </Card>\n {SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? (\n <Card>\n <Badge tone=\"caution\">{t('label.new')}</Badge>\n <Card>\n <Text muted>\n <Translate t={t} i18nKey=\"settings.perspectives.new-default.description\" />\n </Text>\n </Card>\n </Card>\n ) : null}\n\n <Card>\n <Text>\n <PerspectivePopoverLink\n href=\"https://www.sanity.io/docs/perspectives\"\n target=\"_blank\"\n >\n {t('settings.perspectives.action.docs-link')} &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 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","import {type MutationEvent} from '@sanity/client'\nimport {Box, Text} from '@sanity/ui'\nimport {Translate, useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {getCsvBlobUrl, getJsonBlobUrl} from '../util/getBlobUrl'\nimport {DelayedSpinner} from './DelayedSpinner'\nimport {QueryErrorDialog} from './QueryErrorDialog'\nimport {ResultView} from './ResultView'\nimport {SaveCsvButton, SaveJsonButton} from './SaveResultButtons'\nimport {\n DownloadsCard,\n InputBackgroundContainer,\n Result,\n ResultContainer,\n ResultFooter,\n ResultInnerContainer,\n ResultOuterContainer,\n SaveResultLabel,\n StyledLabel,\n TimingsCard,\n TimingsTextContainer,\n} from './VisionGui.styled'\n\ninterface VisionGuiResultProps {\n error?: Error | undefined\n queryInProgress: boolean\n queryResult?: unknown | undefined\n listenInProgress: boolean\n listenMutations: MutationEvent[]\n dataset: string\n queryTime: number | undefined\n e2eTime: number | undefined\n}\n\nexport function VisionGuiResult({\n error,\n queryInProgress,\n queryResult,\n listenInProgress,\n listenMutations,\n dataset,\n queryTime,\n e2eTime,\n}: VisionGuiResultProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n const hasResult = !error && !queryInProgress && typeof queryResult !== 'undefined'\n\n const jsonUrl = hasResult ? getJsonBlobUrl(queryResult) : ''\n const csvUrl = hasResult ? getCsvBlobUrl(queryResult) : ''\n\n return (\n <ResultOuterContainer direction=\"column\" data-testid=\"vision-result\">\n <ResultInnerContainer flex={1}>\n <ResultContainer\n flex={1}\n overflow=\"hidden\"\n tone={error ? 'critical' : 'default'}\n $isInvalid={Boolean(error)}\n >\n <Result overflow=\"auto\">\n <InputBackgroundContainer>\n <Box marginLeft={3}>\n <StyledLabel muted>{t('result.label')}</StyledLabel>\n </Box>\n </InputBackgroundContainer>\n <Box padding={3} paddingTop={5}>\n {(queryInProgress || (listenInProgress && listenMutations.length === 0)) && (\n <Box marginTop={3}>\n <DelayedSpinner />\n </Box>\n )}\n {error && <QueryErrorDialog error={error} />}\n {hasResult && <ResultView data={queryResult} datasetName={dataset} />}\n {listenInProgress && listenMutations.length > 0 && (\n <ResultView data={listenMutations} datasetName={dataset} />\n )}\n </Box>\n </Result>\n </ResultContainer>\n </ResultInnerContainer>\n {/* Execution time */}\n <ResultFooter justify=\"space-between\" direction={['column', 'column', 'row']}>\n <TimingsCard paddingX={4} paddingY={3} sizing=\"border\">\n <TimingsTextContainer align=\"center\">\n <Box>\n <Text muted>\n {t('result.execution-time-label')}:{' '}\n {typeof queryTime === 'number'\n ? `${queryTime}ms`\n : t('result.timing-not-applicable')}\n </Text>\n </Box>\n <Box marginLeft={4}>\n <Text muted>\n {t('result.end-to-end-time-label')}:{' '}\n {typeof e2eTime === 'number' ? `${e2eTime}ms` : t('result.timing-not-applicable')}\n </Text>\n </Box>\n </TimingsTextContainer>\n </TimingsCard>\n\n {hasResult && (\n <DownloadsCard paddingX={4} paddingY={3} sizing=\"border\">\n <SaveResultLabel muted>\n <Translate\n components={{\n SaveResultButtons: () => (\n <>\n <SaveJsonButton blobUrl={jsonUrl} />\n <SaveCsvButton blobUrl={csvUrl} />\n </>\n ),\n }}\n i18nKey=\"result.save-result-as-format\"\n t={t}\n />\n </SaveResultLabel>\n </DownloadsCard>\n )}\n </ResultFooter>\n </ResultOuterContainer>\n )\n}\n","/* eslint-disable max-statements */\nimport {SplitPane} from '@rexxars/react-split-pane'\nimport {\n type ClientPerspective,\n type ListenEvent,\n type MutationEvent,\n type StackablePerspective,\n} from '@sanity/client'\nimport {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Box, Button, Flex, useToast} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {type ChangeEvent, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {useClient, usePerspective, useTranslation} from 'sanity'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSIONS, DEFAULT_API_VERSION} from '../apiVersions'\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n getActivePerspective,\n isSupportedPerspective,\n isVirtualPerspective,\n type SupportedPerspective,\n} from '../perspectives'\nimport {type VisionProps} from '../types'\nimport {encodeQueryString} from '../util/encodeQueryString'\nimport {getLocalStorage} from '../util/localStorage'\nimport {parseApiQueryString, type ParsedApiQueryString} from '../util/parseApiQueryString'\nimport {prefixApiVersion} from '../util/prefixApiVersion'\nimport {validateApiVersion} from '../util/validateApiVersion'\nimport {ParamsEditor, parseParams} from './ParamsEditor'\nimport {QueryRecall} from './QueryRecall'\nimport {usePaneSize} from './usePaneSize'\nimport {\n InputBackgroundContainerLeft,\n InputContainer,\n Root,\n SplitpaneContainer,\n StyledLabel,\n} from './VisionGui.styled'\nimport {VisionGuiControls} from './VisionGuiControls'\nimport {VisionGuiHeader} from './VisionGuiHeader'\nimport {VisionGuiResult} from './VisionGuiResult'\n\nfunction nodeContains(node: Node, other: EventTarget | Node | null): boolean {\n if (!node || !other) {\n return false\n }\n\n // eslint-disable-next-line no-bitwise\n return node === other || !!(node.compareDocumentPosition(other as Node) & 16)\n}\n\nconst sanityUrl =\n /\\.(?:api|apicdn)\\.sanity\\.(?:io|work)\\/(vX|v1|v\\d{4}-\\d\\d-\\d\\d)\\/.*?(?:query|listen)\\/(.*?)\\?(.*)/\n\nconst isRunHotkey = (event: KeyboardEvent) =>\n isHotkey('ctrl+enter', event) || isHotkey('mod+enter', event)\n\ninterface Subscription {\n unsubscribe: () => void\n}\nexport interface Params {\n raw: string\n parsed: Record<string, unknown> | undefined\n valid: boolean\n error: string | undefined\n}\n\ninterface QueryExecutionOptions {\n apiVersion?: string\n dataset?: string\n perspective?: SupportedPerspective\n query?: string\n params?: Record<string, unknown>\n}\n\ninterface VisionGuiProps extends VisionProps {\n datasets: string[]\n projectId: string | undefined\n defaultDataset: string\n}\n\nexport interface ParsedUrlState {\n query: string\n params: Record<string, unknown>\n rawParams: string\n dataset: string\n apiVersion: string\n customApiVersion: string | false | undefined\n perspective: SupportedPerspective\n url: string\n}\n\nexport function VisionGui(props: VisionGuiProps) {\n const {datasets, config, projectId, defaultDataset} = props\n const toast = useToast()\n const {t} = useTranslation(visionLocaleNamespace)\n const {perspectiveStack} = usePerspective()\n\n const editorQueryRef = useRef<VisionCodeMirrorHandle>(null)\n const editorParamsRef = useRef<VisionCodeMirrorHandle>(null)\n const visionRootRef = useRef<HTMLDivElement | null>(null)\n const customApiVersionElementRef = useRef<HTMLInputElement | null>(null)\n const querySubscriptionRef = useRef<Subscription | undefined>(undefined)\n const listenSubscriptionRef = useRef<Subscription | undefined>(undefined)\n\n const [localStorage] = useState(() => getLocalStorage(projectId || 'default'))\n\n const storedDataset = localStorage.get('dataset', defaultDataset)\n const storedApiVersion = localStorage.get(\n 'apiVersion',\n prefixApiVersion(`${config.defaultApiVersion}`),\n )\n const storedQuery = localStorage.get('query', '')\n const storedParams = localStorage.get('params', '{\\n \\n}')\n const storedPerspective = localStorage.get<SupportedPerspective | undefined>(\n 'perspective',\n undefined,\n )\n\n const [dataset, setDataset] = useState<string>(() => {\n if (datasets.includes(storedDataset)) {\n return storedDataset\n }\n if (datasets.includes(defaultDataset)) {\n return defaultDataset\n }\n return datasets[0]\n })\n const [apiVersion, setApiVersion] = useState<string>(() =>\n API_VERSIONS.includes(storedApiVersion) ? storedApiVersion : DEFAULT_API_VERSION,\n )\n const [customApiVersion, setCustomApiVersion] = useState<string | false>(() =>\n API_VERSIONS.includes(storedApiVersion) ? false : storedApiVersion,\n )\n const [perspective, setPerspectiveState] = useState<SupportedPerspective>(\n storedPerspective || 'raw',\n )\n const isValidApiVersion = customApiVersion ? validateApiVersion(customApiVersion) : true\n\n const [url, setUrl] = useState<string | undefined>(undefined)\n const [query, setQuery] = useState<string>(() =>\n typeof storedQuery === 'string' ? storedQuery : '',\n )\n const [rawParams, setRawParams] = useState<string>(storedParams)\n const params = useMemo(() => parseParams(rawParams, t), [rawParams, t])\n const [queryResult, setQueryResult] = useState<unknown | undefined>(undefined)\n const [listenMutations, setListenMutations] = useState<MutationEvent[]>([])\n const [error, setError] = useState<Error | undefined>(undefined)\n const [queryTime, setQueryTime] = useState<number | undefined>(undefined)\n const [e2eTime, setE2eTime] = useState<number | undefined>(undefined)\n const [queryInProgress, setQueryInProgress] = useState<boolean>(false)\n const [listenInProgress, setListenInProgress] = useState<boolean>(false)\n const [isQueryRecallCollapsed, setIsQueryRecallCollapsed] = useState(false)\n\n const {paneSizeOptions, isNarrowBreakpoint} = usePaneSize({visionRootRef})\n\n // Client with memoized initial value\n const _client = useClient({\n apiVersion: isValidApiVersion && customApiVersion ? customApiVersion : apiVersion,\n })\n const client = useMemo(() => {\n return _client.withConfig({\n apiVersion: isValidApiVersion && customApiVersion ? customApiVersion : apiVersion,\n perspective: getActivePerspective({visionPerspective: perspective, perspectiveStack}),\n dataset,\n allowReconfigure: true,\n })\n }, [\n perspectiveStack,\n perspective,\n customApiVersion,\n apiVersion,\n dataset,\n _client,\n isValidApiVersion,\n ])\n\n const cancelQuerySubscription = useCallback(() => {\n if (!querySubscriptionRef.current) {\n return\n }\n querySubscriptionRef.current.unsubscribe()\n querySubscriptionRef.current = undefined\n }, [])\n\n const cancelListenerSubscription = useCallback(() => {\n if (!listenSubscriptionRef.current) {\n return\n }\n listenSubscriptionRef.current.unsubscribe()\n listenSubscriptionRef.current = undefined\n }, [])\n\n const handleQueryExecution = useCallback(\n (options?: QueryExecutionOptions) => {\n if (queryInProgress) {\n cancelQuerySubscription()\n cancelListenerSubscription()\n setQueryInProgress(false)\n return\n }\n\n const context: Required<Omit<QueryExecutionOptions, 'params' | 'perspective'>> & {\n params: Params\n perspective: ClientPerspective | undefined\n } = {\n query: options?.query || query,\n dataset: options?.dataset || dataset,\n params: parseParams(JSON.stringify(options?.params || params.parsed, null, 2), t),\n perspective: getActivePerspective({\n visionPerspective: options?.perspective || perspective,\n perspectiveStack,\n }),\n apiVersion:\n options?.apiVersion ||\n (customApiVersion && isValidApiVersion ? customApiVersion : apiVersion),\n }\n\n localStorage.set('query', context.query)\n localStorage.set('params', context.params.raw)\n\n cancelListenerSubscription()\n\n setQueryInProgress(!context.params.error && Boolean(context.query))\n setListenInProgress(false)\n setListenMutations([])\n setError(context.params.error ? new Error(context.params.error) : undefined)\n setQueryResult(undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (context.params.error) {\n return\n }\n\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective: context.perspective ?? [],\n }\n\n const ctxClient = client.withConfig({\n apiVersion: context.apiVersion,\n dataset: context.dataset,\n perspective: context.perspective,\n })\n\n const newUrl = ctxClient.getUrl(\n ctxClient.getDataUrl(\n 'query',\n encodeQueryString(context.query, context.params.parsed, urlQueryOpts),\n ),\n )\n setUrl(newUrl)\n\n const queryStart = Date.now()\n\n querySubscriptionRef.current = ctxClient.observable\n .fetch(context.query, context.params.parsed, {filterResponse: false, tag: 'vision'})\n .subscribe({\n next: (res) => {\n setQueryTime(res.ms)\n setE2eTime(Date.now() - queryStart)\n setQueryResult(res.result)\n setQueryInProgress(false)\n setError(undefined)\n },\n error: (err) => {\n setError(err)\n setQueryInProgress(false)\n },\n })\n },\n [\n queryInProgress,\n query,\n dataset,\n params.parsed,\n t,\n perspective,\n perspectiveStack,\n customApiVersion,\n isValidApiVersion,\n apiVersion,\n localStorage,\n cancelListenerSubscription,\n client,\n cancelQuerySubscription,\n ],\n )\n\n const setPerspective = useCallback(\n (newPerspective: string | undefined): void => {\n if (newPerspective !== undefined && !isSupportedPerspective(newPerspective)) {\n return\n }\n\n setPerspectiveState(newPerspective as SupportedPerspective)\n localStorage.set('perspective', newPerspective)\n\n handleQueryExecution({perspective: newPerspective})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeDataset = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newDataset = evt.target.value\n localStorage.set('dataset', newDataset)\n setDataset(newDataset)\n handleQueryExecution({dataset: newDataset})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeApiVersion = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newApiVersion = evt.target.value\n if (newApiVersion?.toLowerCase() === 'other') {\n setCustomApiVersion('v')\n customApiVersionElementRef.current?.focus()\n return\n }\n\n setApiVersion(newApiVersion)\n setCustomApiVersion(false)\n localStorage.set('apiVersion', newApiVersion)\n handleQueryExecution({apiVersion: newApiVersion})\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle custom API version change\n const handleCustomApiVersionChange = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const newCustomApiVersion = evt.target.value || ''\n setCustomApiVersion(newCustomApiVersion || 'v')\n\n if (validateApiVersion(newCustomApiVersion)) {\n setApiVersion(newCustomApiVersion)\n localStorage.set('apiVersion', newCustomApiVersion)\n handleQueryExecution({apiVersion: newCustomApiVersion})\n }\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle perspective change\n const handleChangePerspective = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newPerspective = evt.target.value\n setPerspective(newPerspective === 'default' ? undefined : newPerspective)\n },\n [setPerspective],\n )\n\n const handleListenerEvent = useCallback((evt: ListenEvent<any>) => {\n if (evt.type !== 'mutation') {\n return\n }\n\n setListenMutations((prevMutations) =>\n prevMutations.length === 50 ? [evt, ...prevMutations.slice(0, 49)] : [evt, ...prevMutations],\n )\n }, [])\n const handleListenExecution = useCallback(() => {\n if (listenInProgress) {\n cancelListenerSubscription()\n setListenInProgress(false)\n return\n }\n\n const newUrl = client.getDataUrl('listen', encodeQueryString(query, params.parsed, {}))\n\n const shouldExecute = !params.error && query.trim().length > 0\n\n localStorage.set('query', query)\n localStorage.set('params', params.raw)\n\n cancelQuerySubscription()\n\n setUrl(newUrl)\n setListenMutations([])\n setQueryInProgress(false)\n setQueryResult(undefined)\n setListenInProgress(shouldExecute)\n setError(params.error ? new Error(params.error) : undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (!shouldExecute) {\n return\n }\n\n listenSubscriptionRef.current = client\n .listen(query, params.parsed, {events: ['mutation', 'welcome'], includeAllVersions: true})\n .subscribe({\n next: handleListenerEvent,\n error: (err) => {\n setError(err)\n setListenInProgress(false)\n },\n })\n }, [\n listenInProgress,\n params,\n query,\n localStorage,\n cancelQuerySubscription,\n handleListenerEvent,\n cancelListenerSubscription,\n client,\n ])\n\n const handleParamsChange = useCallback(\n (value: string) => {\n setRawParams(value)\n localStorage.set('params', value)\n },\n [localStorage],\n )\n\n // Get object of state values from provided URL\n const getStateFromUrl = useCallback(\n (data: string): ParsedUrlState | null => {\n const match = data.match(sanityUrl)\n if (!match) {\n return null\n }\n\n const [, usedApiVersion, usedDataset, urlQuery] = match\n\n const qs = new URLSearchParams(urlQuery)\n const parts: ParsedApiQueryString = parseApiQueryString(qs)\n if (!parts) return null\n let newApiVersion: string | undefined\n let newCustomApiVersion: string | false | undefined\n\n if (validateApiVersion(usedApiVersion)) {\n if (API_VERSIONS.includes(usedApiVersion)) {\n newApiVersion = usedApiVersion\n newCustomApiVersion = false\n } else {\n newCustomApiVersion = usedApiVersion\n }\n }\n\n const newPerspective =\n isSupportedPerspective(parts.options.perspective) &&\n !isVirtualPerspective(parts.options.perspective)\n ? parts.options.perspective\n : undefined\n\n if (\n newPerspective &&\n (!isSupportedPerspective(parts.options.perspective) ||\n isVirtualPerspective(parts.options.perspective))\n ) {\n toast.push({\n closable: true,\n id: 'vision-paste-unsupported-perspective',\n status: 'warning',\n title: 'Perspective in pasted url is currently not supported. Falling back to \"raw\"',\n })\n }\n\n return {\n query: parts.query,\n params: parts.params,\n rawParams: JSON.stringify(parts.params, null, 2),\n dataset: datasets.includes(usedDataset) ? usedDataset : dataset,\n apiVersion: newApiVersion || apiVersion,\n customApiVersion: newCustomApiVersion,\n perspective: newPerspective || perspective,\n url: data,\n }\n },\n [datasets, dataset, apiVersion, perspective, toast],\n )\n\n // Use state object from parsed URL to update state\n const setStateFromParsedUrl = useCallback(\n (parsedUrlObj: ParsedUrlState) => {\n // Update state with pasted values\n setDataset(parsedUrlObj.dataset)\n setQuery(parsedUrlObj.query)\n setRawParams(parsedUrlObj.rawParams)\n setApiVersion(parsedUrlObj.apiVersion)\n if (parsedUrlObj.customApiVersion) {\n setCustomApiVersion(parsedUrlObj.customApiVersion)\n }\n setPerspectiveState(parsedUrlObj.perspective)\n setUrl(parsedUrlObj.url)\n // Update the codemirror editor content\n editorQueryRef.current?.resetEditorContent(parsedUrlObj.query)\n editorParamsRef.current?.resetEditorContent(parsedUrlObj.rawParams)\n\n // Update localStorage and client config\n localStorage.merge({\n query: parsedUrlObj.query,\n params: parsedUrlObj.rawParams,\n dataset: parsedUrlObj.dataset,\n apiVersion: parsedUrlObj.customApiVersion || parsedUrlObj.apiVersion,\n perspective: parsedUrlObj.perspective,\n })\n\n // Execute query with new values\n handleQueryExecution(parsedUrlObj)\n },\n [localStorage, handleQueryExecution],\n )\n\n const handlePaste = useCallback(\n (evt: ClipboardEvent) => {\n if (!evt.clipboardData) {\n return\n }\n\n const data = evt.clipboardData.getData('text/plain')\n evt.preventDefault()\n const urlState = getStateFromUrl(data)\n if (urlState) {\n setStateFromParsedUrl(urlState)\n toast.push({\n closable: true,\n id: 'vision-paste',\n status: 'info',\n title: 'Parsed URL to query',\n })\n }\n },\n [getStateFromUrl, setStateFromParsedUrl, toast],\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const isWithinRoot =\n visionRootRef.current && nodeContains(visionRootRef.current, event.target)\n if (isRunHotkey(event) && isWithinRoot && params.valid) {\n handleQueryExecution()\n event.preventDefault()\n event.stopPropagation()\n }\n },\n [params.valid, handleQueryExecution],\n )\n\n useEffect(() => {\n window.document.addEventListener('paste', handlePaste)\n window.document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n window.document.removeEventListener('paste', handlePaste)\n window.document.removeEventListener('keydown', handleKeyDown)\n }\n }, [handleKeyDown, handlePaste])\n\n useEffect(() => {\n return () => {\n cancelQuerySubscription()\n cancelListenerSubscription()\n }\n }, [cancelQuerySubscription, cancelListenerSubscription])\n\n const handleStudioPerspectiveChange = useEffectEvent((stack: StackablePerspective[]) => {\n if (stack.length > 0) {\n setPerspective('pinnedRelease')\n }\n })\n // Handle pinned perspective changes\n useEffect(() => {\n handleStudioPerspectiveChange(perspectiveStack)\n }, [perspectiveStack])\n\n const generateUrl = useCallback(\n (queryString: string, queryParams: Record<string, unknown>) => {\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective: getActivePerspective({visionPerspective: perspective, perspectiveStack}) ?? [],\n }\n return client.getUrl(\n client.getDataUrl('query', encodeQueryString(queryString, queryParams, urlQueryOpts)),\n )\n },\n [client, perspective, perspectiveStack],\n )\n\n return (\n <Root\n direction=\"column\"\n height=\"fill\"\n ref={visionRootRef}\n sizing=\"border\"\n overflow=\"hidden\"\n data-testid=\"vision-root\"\n >\n <VisionGuiHeader\n apiVersion={apiVersion}\n customApiVersion={customApiVersion}\n dataset={dataset}\n datasets={datasets}\n onChangeDataset={handleChangeDataset}\n onChangeApiVersion={handleChangeApiVersion}\n customApiVersionElementRef={customApiVersionElementRef}\n onCustomApiVersionChange={handleCustomApiVersionChange}\n isValidApiVersion={isValidApiVersion}\n onChangePerspective={handleChangePerspective}\n url={url}\n perspective={perspective}\n />\n\n <SplitpaneContainer flex=\"auto\">\n <SplitPane\n minSize={800}\n defaultSize={window.innerWidth - 275}\n size={isQueryRecallCollapsed ? window.innerWidth : window.innerWidth - 275}\n maxSize={-225}\n primary=\"first\"\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n split={isNarrowBreakpoint ? 'vertical' : 'horizontal'}\n minSize={300}\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n split=\"horizontal\"\n defaultSize={\n isNarrowBreakpoint ? paneSizeOptions.defaultSize : paneSizeOptions.minSize\n }\n size={paneSizeOptions.size}\n allowResize={paneSizeOptions.allowResize}\n minSize={isNarrowBreakpoint ? paneSizeOptions.minSize : 100}\n maxSize={paneSizeOptions.maxSize}\n primary=\"first\"\n >\n <InputContainer display=\"flex\" data-testid=\"vision-query-editor\">\n <Box flex={1}>\n <InputBackgroundContainerLeft>\n <Flex>\n <StyledLabel muted>{t('query.label')}</StyledLabel>\n </Flex>\n </InputBackgroundContainerLeft>\n <VisionCodeMirror\n initialValue={query}\n onChange={setQuery}\n ref={editorQueryRef}\n />\n </Box>\n </InputContainer>\n <InputContainer display=\"flex\">\n <ParamsEditor\n value={params.raw}\n onChange={handleParamsChange}\n paramsError={params.error}\n hasValidParams={params.valid}\n editorRef={editorParamsRef}\n />\n\n <VisionGuiControls\n hasValidParams={params.valid}\n queryInProgress={queryInProgress}\n listenInProgress={listenInProgress}\n onQueryExecution={handleQueryExecution}\n onListenExecution={handleListenExecution}\n />\n </InputContainer>\n </SplitPane>\n </Box>\n <VisionGuiResult\n error={error}\n queryInProgress={queryInProgress}\n queryResult={queryResult}\n listenInProgress={listenInProgress}\n listenMutations={listenMutations}\n dataset={dataset}\n queryTime={queryTime}\n e2eTime={e2eTime}\n />\n </SplitPane>\n </Box>\n <Box style={{position: 'relative', height: '100%'}}>\n <Button\n mode=\"ghost\"\n padding={2}\n style={{\n position: 'absolute',\n left: -32,\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 100,\n pointerEvents: 'auto',\n }}\n onClick={() => setIsQueryRecallCollapsed(!isQueryRecallCollapsed)}\n >\n <div style={{display: 'flex', alignItems: 'center', height: '100%'}}>\n {isQueryRecallCollapsed ? <ChevronLeftIcon /> : <ChevronRightIcon />}\n </div>\n </Button>\n <QueryRecall\n url={url}\n getStateFromUrl={getStateFromUrl}\n setStateFromParsedUrl={setStateFromParsedUrl}\n currentQuery={query}\n currentParams={params.parsed || {}}\n generateUrl={generateUrl}\n />\n </Box>\n </SplitPane>\n </SplitpaneContainer>\n </Root>\n )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, map, type Observable, of} from 'rxjs'\n\nimport {type VisionConfig} from '../types'\n\nexport function useDatasets({\n client,\n datasets: configDatasets,\n}: {\n client: SanityClient\n datasets: VisionConfig['datasets']\n}): string[] | Error | null {\n const datasets$: Observable<string[] | Error> = useMemo(() => {\n if (Array.isArray(configDatasets)) {\n return of(configDatasets)\n }\n return client.observable.datasets.list().pipe(\n map((result) => {\n if (typeof configDatasets == 'function') {\n return configDatasets(result).map((d) => d.name)\n }\n return result.map((ds) => ds.name)\n }),\n catchError((err) => of(err)),\n )\n }, [client, configDatasets])\n const datasets = useObservable(datasets$, null)\n\n return datasets\n}\n","import {Flex} from '@sanity/ui'\nimport {useClient} from 'sanity'\n\nimport {DelayedSpinner} from '../components/DelayedSpinner'\nimport {VisionGui} from '../components/VisionGui'\nimport {useDatasets} from '../hooks/useDatasets'\nimport {type VisionProps} from '../types'\n\nexport function VisionContainer(props: VisionProps) {\n const datasetsClient = useClient({apiVersion: 'v2025-06-27'})\n const loadedDatasets = useDatasets({client: datasetsClient, datasets: props.config.datasets})\n\n if (!loadedDatasets) {\n return (\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n <DelayedSpinner />\n </Flex>\n )\n }\n\n const datasets =\n loadedDatasets instanceof Error\n ? // On error, use the clients configured dataset\n [props.client.config().dataset || 'production']\n : // Otherwise use the loaded list, obviously\n loadedDatasets\n\n const projectId = props.client.config().projectId\n const defaultDataset = props.config.defaultDataset || props.client.config().dataset || datasets[0]\n\n return (\n <VisionGui\n key={projectId}\n {...props}\n datasets={datasets}\n projectId={projectId}\n defaultDataset={defaultDataset}\n />\n )\n}\n","/* eslint-disable @sanity/i18n/no-attribute-string-literals */\n/* eslint-disable i18next/no-literal-string */\nimport {Button, Card, Code, Container, Heading, Stack} from '@sanity/ui'\nimport {Component, type PropsWithChildren} from 'react'\n\nimport {clearLocalStorage} from '../util/localStorage'\n\n/**\n * @internal\n */\nexport type VisionErrorBoundaryProps = PropsWithChildren\n\n/**\n * @internal\n */\ninterface VisionErrorBoundaryState {\n error: string | null\n numRetries: number\n}\n\n/**\n * @internal\n */\nexport class VisionErrorBoundary extends Component<\n VisionErrorBoundaryProps,\n VisionErrorBoundaryState\n> {\n constructor(props: VisionErrorBoundaryProps) {\n super(props)\n this.state = {error: null, numRetries: 0}\n }\n\n static getDerivedStateFromError(error: unknown) {\n return {error: error instanceof Error ? error.message : `${error}`}\n }\n\n handleRetryRender = () =>\n this.setState((prev) => ({error: null, numRetries: prev.numRetries + 1}))\n\n handleRetryWithCacheClear = () => {\n clearLocalStorage()\n this.handleRetryRender()\n }\n\n render() {\n if (!this.state.error) {\n return this.props.children\n }\n\n const message = this.state.error\n const withCacheClear = this.state.numRetries > 0\n\n return (\n <Card\n height=\"fill\"\n overflow=\"auto\"\n paddingY={[4, 5, 6, 7]}\n paddingX={4}\n sizing=\"border\"\n tone=\"critical\"\n >\n <Container width={3}>\n <Stack space={4}>\n <div>\n <Button\n onClick={withCacheClear ? this.handleRetryWithCacheClear : this.handleRetryRender}\n text={withCacheClear ? 'Clear cache and retry' : 'Retry'}\n tone=\"default\"\n />\n </div>\n\n <Heading>An error occurred</Heading>\n\n <Card border radius={2} overflow=\"auto\" padding={4} tone=\"inherit\">\n <Stack space={4}>\n {message && (\n <Code size={1}>\n <strong>Error: {message}</strong>\n </Code>\n )}\n </Stack>\n </Card>\n </Stack>\n </Container>\n </Card>\n )\n }\n}\n","import {type Tool, useClient} from 'sanity'\n\nimport {DEFAULT_API_VERSION} from './apiVersions'\nimport {VisionContainer} from './containers/VisionContainer'\nimport {VisionErrorBoundary} from './containers/VisionErrorBoundary'\nimport {type VisionConfig} from './types'\n\ninterface SanityVisionProps {\n tool: Tool<VisionConfig>\n}\n\nfunction SanityVision(props: SanityVisionProps) {\n const client = useClient({apiVersion: '1'})\n const config: VisionConfig = {\n defaultApiVersion: DEFAULT_API_VERSION,\n ...props.tool.options,\n }\n\n return (\n <VisionErrorBoundary>\n <VisionContainer client={client} config={config} />\n </VisionErrorBoundary>\n )\n}\n\nexport default SanityVision\n"],"names":["API_VERSIONS","Date","toISOString","split","DEFAULT_API_VERSION","slice","DelayedSpinner","props","$","_c","show","setShow","useState","t0","t1","delay","timer","setTimeout","clearTimeout","useEffect","t2","jsx","Spinner","codemirrorExtensions","javascriptLanguage","lineNumbers","highlightActiveLine","highlightActiveLineGutter","highlightSelectionMatches","highlightSpecialChars","indentOnInput","bracketMatching","closeBrackets","history","drawSelection","syntaxHighlighting","defaultHighlightStyle","fallback","keymap","of","key","run","defaultKeymap","historyKeymap","flat","filter","Boolean","useCodemirrorTheme","theme","createTheme","cmTheme","createHighlight","cmHighlight","color","fonts","sanity","card","enabled","cursor","hues","blue","dark","hex","selection","gray","EditorView","fg","backgroundColor","bg","caretColor","fontFamily","code","family","fontSize","rem","sizes","lineHeight","borderLeftColor","borderBottom","border","borderTop","c","base","s","syntax","HighlightStyle","define","tag","t","keyword","propertyName","name","deleted","character","macroName","property","function","variableName","labelName","constant","standard","variable","definition","separator","typeName","className","number","changed","annotation","modifier","self","namespace","operator","operatorKeyword","url","escape","regexp","link","special","string","meta","comment","strong","fontWeight","emphasis","fontStyle","strikethrough","textDecoration","heading","atom","bool","boolean","processingInstruction","inserted","invalid","EditorRoot","styled","div","space","VisionCodeMirror","forwardRef","ref","initialValue","sanityTheme","useTheme","codeMirrorRef","useRef","Symbol","for","newContent","editorView","current","view","currentDoc","state","doc","toString","dispatch","changes","from","to","length","insert","EditorSelection","resetEditorContent","useImperativeHandle","t3","onChange","CodeMirror","displayName","SUPPORTED_PERSPECTIVES","VIRTUAL_PERSPECTIVES","isSupportedPerspective","p","includes","isVirtualPerspective","maybeVirtualPerspective","hasPinnedPerspective","selectedPerspectiveName","getActivePerspective","visionPerspective","perspectiveStack","encodeQueryString","query","params","options","searchParams","URLSearchParams","set","value","Object","entries","JSON","stringify","isPlainObject","obj","prototype","call","hasLocalStorage","supportsLocalStorage","keyPrefix","clearLocalStorage","i","localStorage","startsWith","removeItem","getLocalStorage","storageKey","loadedState","get","merge","defaultVal","ensureState","setItem","loadState","stored","parse","getItem","mod","parseApiQueryString","qs","prefixApiVersion","version","validateApiVersion","apiVersion","parseableApiVersion","replace","trim","toUpperCase","test","isNaN","tryParseParams","val","parsed","JSON5","Array","isArray","err","message","Root","Flex","Header","Card","StyledLabel","Label","SplitpaneContainer","Box","QueryCopyLink","a","InputBackgroundContainer","InputBackgroundContainerLeft","InputContainer","ResultOuterContainer","ResultInnerContainer","ResultContainer","$isInvalid","css","Result","ResultFooter","TimingsCard","TimingsTextContainer","text","ascenderHeight","descenderHeight","DownloadsCard","SaveResultLabel","Text","ControlsContainer","defaultValue","ParamsEditor","paramsError","hasValidParams","editorRef","useTranslation","visionLocaleNamespace","newValue","handleChangeRaw","debounce","handleChange","t4","t5","Tooltip","ErrorOutlineIcon","t6","jsxs","t7","t8","t9","parseParams","parsedParams","Error","validationError","undefined","raw","valid","error","STORED_QUERIES_NAMESPACE","queries","keyValueStoreKey","useSavedQueries","keyValueStore","useKeyValueStore","setValue","saving","setSaving","deleting","setDeleting","saveQueryError","setSaveQueryError","deleteQueryError","setDeleteQueryError","setError","useMemo","getKey","sub","pipe","startWith","map","data","subscribe","next","unsubscribe","saveQuery","useCallback","newQueries","_key","uuid","setKey","updateQuery","updatedQueries","q","deleteQuery","prev","filteredQueries","k","FixedHeader","Stack","ScrollContainer","QueryRecall","getStateFromUrl","setStateFromParsedUrl","currentQuery","currentParams","generateUrl","toast","useToast","month","day","year","hour","minute","hour12","formatDate","useDateTimeFormat","editingKey","setEditingKey","editingTitle","setEditingTitle","optimisticTitles","setOptimisticTitles","searchQuery","setSearchQuery","selectedUrl","setSelectedUrl","newUrl","some","savedQueryObj","isEqual","duplicateQuery","find","q_0","savedQueryObj_0","push","closable","status","title","description","format","savedAt","handleSave","newTitle","prev_1","next_0","prev_0","handleTitleSave","query_0","newUrl_0","q_1","savedQueryObj_1","duplicateQuery_0","q_2","savedQueryObj_2","handleUpdate","T0","T1","q_3","toLowerCase","textTransform","t10","t11","t12","t13","Button","AddIcon","t14","t15","t16","event","currentTarget","t17","TextInput","SearchIcon","q_4","queryObj","isSelected","areQueriesEqual","isEdited","parsedUrl","position","event_0","event_1","maxWidth","height","padding","width","borderRadius","MenuButton","ContextMenuButton","Menu","MenuItem","TrashIcon","event_2","stopPropagation","portal","placement","tone","Code","right","bottom","e","narrowBreakpoint","window","innerWidth","calculatePaneSizeOptions","rootHeight","document","body","getBoundingClientRect","defaultSize","size","allowResize","minSize","Math","min","max","maxSize","usePaneSize","visionRootRef","isNarrowBreakpoint","setIsNarrowBreakpoint","_temp","paneSizeOptions","setPaneSizeOptions","_temp2","handleResize","entry","contentRect","resizeObserver","ResizeObserver","observe","disconnect","VisionGuiControls","listenInProgress","queryInProgress","onQueryExecution","onListenExecution","Hotkeys","StopIcon","PlayIcon","PerspectivePopoverContent","PerspectivePopoverLink","Dot","$tone","PerspectivePopover","open","setOpen","buttonRef","popoverRef","handleClick","useClickOutsideEvent","Inline","Badge","Translate","HelpCircleIcon","Popover","o","PinnedReleasePerspectiveOption","pinnedPerspective","selectedPerspective","metadata","label","join","VisionGuiHeader","onChangeDataset","dataset","customApiVersion","onChangeApiVersion","datasets","customApiVersionElementRef","onCustomApiVersionChange","isValidApiVersion","onChangePerspective","perspective","usePerspective","operationUrlElement","el","select","execCommand","console","handleCopyUrl","Select","_temp3","t18","t19","t20","t21","t22","perspectiveName","Fragment","t23","t24","t25","CopyIcon","t26","Grid","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","muted","critical","QueryErrorDetails","details","mapToLegacyDetails","line","dashLine","column","columnEnd","lineNumber","start","end","lineStart","lastIndexOf","match","indexOf","repeat","hats","QueryErrorDialog","ResultViewWrapper","lru","LRU","ResultView","datasetName","workspaceDataset","useDataset","isRecord","DocumentEditLabel","JsonInspector","isExpanded","toggleExpanded","isKey","keypath","endsWith","id","LinkIcon","IntentLink","keyPath","cached","segments","depthLimit","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","preventSave","evt","preventDefault","SaveCsvButton","blobUrl","isDisabled","DocumentSheetIcon","button","SaveJsonButton","VisionGuiResult","queryResult","listenMutations","queryTime","e2eTime","hasResult","jsonUrl","csvUrl","SaveResultButtons","nodeContains","node","other","compareDocumentPosition","sanityUrl","isRunHotkey","isHotkey","VisionGui","config","projectId","defaultDataset","editorQueryRef","editorParamsRef","querySubscriptionRef","listenSubscriptionRef","storedDataset","defaultApiVersion","storedApiVersion","storedQuery","storedParams","storedPerspective","setDataset","setApiVersion","setCustomApiVersion","setPerspectiveState","setUrl","setQuery","rawParams","setRawParams","setQueryResult","setListenMutations","setQueryTime","setE2eTime","setQueryInProgress","setListenInProgress","isQueryRecallCollapsed","setIsQueryRecallCollapsed","_client","useClient","withConfig","allowReconfigure","client","cancelQuerySubscription","cancelListenerSubscription","context","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","observable","fetch","filterResponse","res","ms","result","handleQueryExecution","newPerspective","setPerspective","newDataset","target","handleChangeDataset","evt_0","newApiVersion","focus","handleChangeApiVersion","evt_1","newCustomApiVersion","handleCustomApiVersionChange","evt_2","newPerspective_0","handleChangePerspective","evt_3","prevMutations","handleListenerEvent","shouldExecute","listen","events","includeAllVersions","err_0","handleListenExecution","t27","handleParamsChange","t28","usedApiVersion","usedDataset","urlQuery","parts","newPerspective_1","t29","parsedUrlObj","t30","evt_4","clipboardData","data_0","getData","urlState","handlePaste","t31","isWithinRoot","handleKeyDown","t32","t33","addEventListener","removeEventListener","t34","t35","t36","stack","handleStudioPerspectiveChange","useEffectEvent","t37","t38","t39","queryString","queryParams","urlQueryOpts_0","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","SplitPane","t56","t57","t58","t59","left","top","transform","zIndex","pointerEvents","t60","t61","display","alignItems","t62","ChevronLeftIcon","ChevronRightIcon","t63","t64","t65","t66","t67","t68","useDatasets","configDatasets","bb0","list","catchError","useObservable","d","VisionContainer","datasetsClient","loadedDatasets","VisionErrorBoundary","Component","constructor","numRetries","getDerivedStateFromError","handleRetryRender","setState","handleRetryWithCacheClear","render","children","withCacheClear","Container","Heading","SanityVision","tool"],"mappings":";;;;;;AAAO,MAAMA,eAAe,CAC1B,MACA,MACA,eACA,eACA,eACA,eACA,KAAI,oBAAIC,KAAAA,GAAOC,YAAAA,EAAcC,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,GAEjC,CAACC,mBAAmB,IAAIJ,aAAaK,MAAM,EAAE;ACDnD,SAAAC,eAAAC,OAAA;AAAA,QAAAC,IAAAC,qBAAAA,EAAA,CAAA,GACL,CAAAC,MAAAC,OAAA,IAAwBC,MAAAA,WAAc;AAAC,MAAAC,IAAAC;AAAAN,IAAA,CAAA,MAAAD,MAAAQ,SAE7BF,KAAAA,MAAA;AACR,UAAAG,QAAcC,WAAA,MAAiBN,QAAO,EAAK,GAAGJ,MAAKQ,SAAA,GAAa;AAAC,WAAA,MACpDG,aAAaF,KAAK;AAAA,EAAC,GAC/BF,KAAA,CAACP,MAAKQ,KAAA,GAAOP,EAAA,CAAA,IAAAD,MAAAQ,OAAAP,OAAAK,IAAAL,OAAAM,OAAAD,KAAAL,EAAA,CAAA,GAAAM,KAAAN,EAAA,CAAA,IAHhBW,MAAAA,UAAUN,IAGPC,EAAa;AAAC,MAAAM;AAAA,SAAAZ,SAAAE,QAEVU,KAAAV,OAAOW,2BAAAA,IAACC,GAAAA,SAAA,EAAQ,OAAA,IAAY,MAAA,EAAA,KAAK,MAAOd,OAAAE,MAAAF,OAAAY,MAAAA,KAAAZ,EAAA,CAAA,GAAxCY;AAAwC;ACI1C,MAAMG,uBAAoC,CAC/C,CAACC,eAAAA,kBAAkB,GACnBC,KAAAA,YAAAA,GACAC,KAAAA,uBACAC,KAAAA,6BACAC,OAAAA,6BACAC,KAAAA,yBACAC,uBAAAA,GACAC,yBAAAA,GACAC,2BAAAA,GACAC,SAAAA,QAAAA,GACAC,KAAAA,cAAAA,GACAC,SAAAA,mBAAmBC,gCAAuB;AAAA,EAACC,UAAU;AAAI,CAAC,GAC1DC,KAAAA,OAAOC,GACL;AAAA;AAAA,EAEE;AAAA,IAACC,KAAK;AAAA,IAAaC,KAAKA,MAAM;AAAA,EAAA;AAAA;AAAA,EAG9BC,SAAAA;AAAAA,EACAC,SAAAA;AAAa,EAEZC,KAAAA,EACAC,OAAOC,OAAO,CACnB,CAAC;ACrCI,SAAAC,mBAAAC,OAAA;AAAA,QAAAxC,IAAAC,qBAAAA,EAAA,CAAA;AAAA,MAAAI;AAAAL,WAAAwC,SACyBnC,KAAAoC,YAAYD,KAAK,GAACxC,OAAAwC,OAAAxC,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAAhD,QAAA0C,UAA8BrC;AAA4B,MAAAC;AAAAN,WAAAwC,SACxBlC,KAAAqB,SAAAA,mBAAmBgB,gBAAgBH,KAAK,CAAC,GAACxC,OAAAwC,OAAAxC,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAA5E,QAAA4C,cAAkCtC;AAAoD,MAAAM;AAAA,SAAAZ,EAAA,CAAA,MAAA4C,eAAA5C,SAAA0C,WAE/E9B,KAAA,CAAC8B,SAASE,WAAW,GAAC5C,OAAA4C,aAAA5C,OAAA0C,SAAA1C,OAAAY,MAAAA,KAAAZ,EAAA,CAAA,GAAtBY;AAAsB;AAG/B,SAAS6B,YAAYD,OAAc;AACjC,QAAM;AAAA,IAAA,OAACK;AAAAA,IAAOC;AAAAA,EAAAA,IAASN,MAAMO,QACvBC,OAAOH,QAAMG,KAAKC,SAClBC,SAASC,MAAAA,KAAKC,KAAKP,QAAMQ,OAAO,MAAM,GAAG,EAAEC,KAC3CC,YAAYJ,MAAAA,KAAKK,KAAKhB,MAAMO,OAAOF,MAAMQ,OAAO,MAAM,GAAG,EAAEC;AAEjE,SAAOG,KAAAA,WAAWjB,MAChB;AAAA,IACE,KAAK;AAAA,MACHK,OAAOG,KAAKU;AAAAA,MACZC,iBAAiBX,KAAKY;AAAAA,IAAAA;AAAAA,IAGxB,eAAe;AAAA,MACbC,YAAYX;AAAAA,IAAAA;AAAAA,IAGd,cAAc;AAAA,MACZY,YAAYhB,MAAMiB,KAAKC;AAAAA,MACvBC,UAAUC,GAAAA,IAAIpB,MAAMiB,KAAKI,MAAM,CAAC,EAAEF,QAAQ;AAAA,MAC1CG,YAAY;AAAA,IAAA;AAAA,IAGd,8BAA8B;AAAA,MAACC,iBAAiBnB;AAAAA,IAAAA;AAAAA,IAChD,0FAA0F;AAAA,MACxFS,iBAAiBJ;AAAAA,IAAAA;AAAAA,IAGnB,cAAc;AAAA,MAACI,iBAAiBX,KAAKY;AAAAA,MAAIf,OAAOG,KAAKU;AAAAA,IAAAA;AAAAA,IACrD,4BAA4B;AAAA,MAACY,cAAc,aAAatB,KAAKuB,MAAM;AAAA,IAAA;AAAA,IACnE,+BAA+B;AAAA,MAACC,WAAW,aAAaxB,KAAKuB,MAAM;AAAA,IAAA;AAAA,EAAE,GAEvE;AAAA,IAAClB,MAAMR,QAAMQ;AAAAA,EAAAA,CACf;AACF;AAEA,SAASV,gBAAgBH,OAAc;AACrC,QAAMiC,IAAIjC,MAAMO,OAAOF,MAAM6B,MACvBC,IAAInC,MAAMO,OAAOF,MAAM+B;AAC7B,SAAOC,SAAAA,eAAeC,OAAO,CAC3B;AAAA,IAACC,KAAKC,UAAAA,KAAEC;AAAAA,IAASpC,OAAO8B,EAAEM;AAAAA,EAAAA,GAC1B;AAAA,IAACF,KAAK,CAACC,UAAAA,KAAEE,cAAcF,UAAAA,KAAEG,MAAMH,eAAEI,SAASJ,UAAAA,KAAEK,WAAWL,UAAAA,KAAEM,SAAS;AAAA,IAAGzC,OAAO8B,EAAEY;AAAAA,EAAAA,GAC9E;AAAA,IAACR,KAAK,CAACC,UAAAA,KAAEQ,SAASR,UAAAA,KAAES,YAAY,GAAGT,UAAAA,KAAEU,SAAS;AAAA,IAAG7C,OAAO8B,EAAEa;AAAAA,EAAAA,GAC1D;AAAA,IAACT,KAAK,CAACC,UAAAA,KAAEnC,OAAOmC,UAAAA,KAAEW,SAASX,UAAAA,KAAEG,IAAI,GAAGH,UAAAA,KAAEY,SAASZ,UAAAA,KAAEG,IAAI,CAAC;AAAA,IAAGtC,OAAO8B,EAAEkB;AAAAA,EAAAA,GAClE;AAAA,IAACd,KAAK,CAACC,UAAAA,KAAEc,WAAWd,UAAAA,KAAEG,IAAI,GAAGH,UAAAA,KAAEe,SAAS;AAAA,IAAGlD,OAAO8B,EAAEgB;AAAAA,EAAAA,GACpD;AAAA,IACEZ,KAAK,CACHC,UAAAA,KAAEgB,UACFhB,UAAAA,KAAEiB,WACFjB,UAAAA,KAAEkB,QACFlB,UAAAA,KAAEmB,SACFnB,UAAAA,KAAEoB,YACFpB,eAAEqB,UACFrB,UAAAA,KAAEsB,MACFtB,UAAAA,KAAEuB,SAAS;AAAA,IAEb1D,OAAO8B,EAAEuB;AAAAA,EAAAA,GAEX;AAAA,IACEnB,KAAK,CAACC,UAAAA,KAAEwB,UAAUxB,UAAAA,KAAEyB,iBAAiBzB,UAAAA,KAAE0B,KAAK1B,UAAAA,KAAE2B,QAAQ3B,eAAE4B,QAAQ5B,UAAAA,KAAE6B,MAAM7B,UAAAA,KAAE8B,QAAQ9B,UAAAA,KAAE+B,MAAM,CAAC;AAAA,IAC3FlE,OAAO8B,EAAE6B;AAAAA,EAAAA,GAEX;AAAA,IAACzB,KAAK,CAACC,UAAAA,KAAEgC,MAAMhC,UAAAA,KAAEiC,OAAO;AAAA,IAAGpE,OAAO8B,EAAEsC;AAAAA,EAAAA,GACpC;AAAA,IAAClC,KAAKC,UAAAA,KAAEkC;AAAAA,IAAQC,YAAY;AAAA,EAAA,GAC5B;AAAA,IAACpC,KAAKC,UAAAA,KAAEoC;AAAAA,IAAUC,WAAW;AAAA,EAAA,GAC7B;AAAA,IAACtC,KAAKC,UAAAA,KAAEsC;AAAAA,IAAeC,gBAAgB;AAAA,EAAA,GACvC;AAAA,IAACxC,KAAKC,UAAAA,KAAEwC;AAAAA,IAASL,YAAY;AAAA,IAAQtE,OAAO8B,EAAEY;AAAAA,EAAAA,GAC9C;AAAA,IAACR,KAAK,CAACC,eAAEyC,MAAMzC,UAAAA,KAAE0C,MAAM1C,UAAAA,KAAE8B,QAAQ9B,eAAES,YAAY,CAAC;AAAA,IAAG5C,OAAO8B,EAAEgD;AAAAA,EAAAA,GAC5D;AAAA,IAAC5C,KAAK,CAACC,UAAAA,KAAE4C,uBAAuB5C,UAAAA,KAAE+B,QAAQ/B,UAAAA,KAAE6C,QAAQ;AAAA,IAAGhF,OAAO8B,EAAEoC;AAAAA,EAAAA,GAChE;AAAA,IAAChC,KAAKC,UAAAA,KAAE8C;AAAAA,IAASjF,OAAO4B,EAAEf;AAAAA,EAAAA,CAAG,CAC9B;AACH;AClFO,MAAMqE,aAAaC,iBAAAA,OAAOC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,oBAqBb,CAAC;AAAA,EAACzF;AAAK,MAAM0B,GAAAA,IAAI1B,MAAMO,OAAOmF,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,0BAIjC,CAAC;AAAA,EAAC1F;AAAK,MAAM0B,GAAAA,IAAI1B,MAAMO,OAAOmF,MAAM,CAAC,CAAC,CAAC;AAAA,mBAC9C,CAAC;AAAA,EAAC1F;AAAK,MAAM0B,GAAAA,IAAI1B,MAAMO,OAAOmF,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA,GCb7CC,mBAAmBC,MAAAA,WAK9B,CAAArI,OAAAsI,QAAA;AAAA,QAAArI,IAAAC,qBAAAA,EAAA,CAAA,GAGA,CAAAqI,YAAA,IAAuBlI,MAAAA,SAASL,MAAKuI,YAAa,GAClDC,cAAoBC,GAAAA,SAAAA,GACpBhG,QAAcD,mBAAmBgG,WAAW,GAC5CE,gBAAsBC,MAAAA,OAAA,IAA+B;AAAC,MAAArI;AAAAL,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAEfvI,KAAAwI,CAAAA,eAAA;AACrC,UAAAC,aAAmBL,cAAaM,SAAAC;AAAc,QAAA,CACzCF;AAAU;AAEf,UAAAG,aAAmBH,WAAUI,MAAAC,IAAAC,SAAAA;AACzBP,mBAAeI,cACjBH,WAAUO,SAAA;AAAA,MAAAC,SAAA;AAAA,QAAAC,MAAA;AAAA,QAAAC,IACeP,WAAUQ;AAAAA,QAAAC,QAAiBb;AAAAA,MAAAA;AAAAA,MAAUtF,WACjDoG,WAAAA,gBAAAzG,OAAuB2F,WAAUY,MAAO;AAAA,IAAA,CACpD;AAAA,EAAC,GAELzJ,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAXD,QAAA4J,qBAA2BvJ;AAWrB,MAAAC,IAAAM;AAAAZ,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAIJtI,KAAAA,OAAA;AAAA,IAAAsJ;AAAAA,EAAAA,IAGAhJ,MAACgJ,kBAAkB,GAAC5J,OAAAM,IAAAN,OAAAY,OAAAN,KAAAN,EAAA,CAAA,GAAAY,KAAAZ,EAAA,CAAA,IALtB6J,0BACExB,KACA/H,IAGAM,EACF;AAAC,MAAAkJ;AAAA,SAAA9J,EAAA,CAAA,MAAAsI,gBAAAtI,EAAA,CAAA,MAAAD,MAAAgK,YAAA/J,EAAA,CAAA,MAAAwC,SAGCsH,oCAAC,YAAA,EACC,UAAAjJ,2BAAAA,IAACmJ,oBAAAA,SAAA,EACMvB,KAAAA,eACO,YAAA,IACLjG,OACKzB,YAAAA,sBACLuH,qBACG,UAAAvI,MAAKgK,SAAAA,CAAS,EAAA,CAE5B,GAAa/J,OAAAsI,cAAAtI,EAAA,CAAA,IAAAD,MAAAgK,UAAA/J,OAAAwC,OAAAxC,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA,GATb8J;AASa,CAEhB;AAGD3B,iBAAiB8B,cAAc;AC7DxB,MAAMC,yBAAyB,CAAC,iBAAiB,OAAO,aAAa,QAAQ,GAYvEC,uBAAuB,CAAC,eAAe;AAI7C,SAASC,uBAAuBC,GAAsC;AAC3E,SAAOH,uBAAuBI,SAASD,CAAyB;AAClE;AAEO,SAASE,qBACdC,yBAC+C;AAC/C,SACE,OAAOA,2BAA4B,YACnCL,qBAAqBG,SAASE,uBAA6C;AAE/E;AAEO,SAASC,qBAAqB;AAAA,EAACC;AAAgD,GAAY;AAChG,SAAO,OAAOA,0BAA4B;AAC5C;AAaO,SAASC,qBAAqB;AAAA,EACnCC;AAAAA,EACAC;AAIF,GAAkC;AAChC,SAAID,sBAAsB,kBACjBA,oBAEFC;AACT;AC3DO,SAASC,kBACdC,OACAC,SAAkC,CAAA,GAClCC,UAA6C,CAAA,GACrC;AACR,QAAMC,eAAe,IAAIC,gBAAAA;AACzBD,eAAaE,IAAI,SAASL,KAAK;AAE/B,aAAW,CAAC/I,KAAKqJ,KAAK,KAAKC,OAAOC,QAAQP,MAAM;AAC9CE,iBAAaE,IAAI,IAAIpJ,GAAG,IAAIwJ,KAAKC,UAAUJ,KAAK,CAAC;AAGnD,aAAW,CAACrJ,KAAKqJ,KAAK,KAAKC,OAAOC,QAAQN,OAAO;AAC3CI,aAAOH,aAAaE,IAAIpJ,KAAK,GAAGqJ,KAAK,EAAE;AAG7C,SAAO,IAAIH,YAAY;AACzB;ACjBO,SAASQ,cAAcC,KAA8C;AAC1E,SACE,CAAC,CAACA,OAAO,OAAOA,OAAQ,YAAYL,OAAOM,UAAUxC,SAASyC,KAAKF,GAAG,MAAM;AAEhF;ACFA,MAAMG,kBAAkBC,wBAClBC,YAAY;AAQX,SAASC,oBAAoB;AAClC,MAAKH;AAIL,aAASI,IAAI,GAAGA,IAAIC,aAAa1C,QAAQyC,KAAK;AAC5C,YAAMlK,MAAMmK,aAAanK,IAAIkK,CAAC;AAC1BlK,WAAKoK,WAAWJ,SAAS,KAC3BG,aAAaE,WAAWrK,GAAG;AAAA,IAE/B;AACF;AAEO,SAASsK,gBAAgB/F,WAAoC;AAClE,QAAMgG,aAAa,GAAGP,SAAS,GAAGzF,SAAS;AAC3C,MAAIiG,cAA8C;AAElD,SAAO;AAAA,IAACC;AAAAA,IAAKrB;AAAAA,IAAKsB;AAAAA,EAAAA;AAElB,WAASD,IAAOzK,KAAa2K,YAAkB;AAC7C,UAAMzD,QAAQ0D,YAAAA;AACd,WAAO,OAAO1D,MAAMlH,GAAG,IAAM,MAAc2K,aAAczD,MAAMlH,GAAG;AAAA,EACpE;AAEA,WAASoJ,IAAOpJ,KAAaqJ,OAAa;AACxC,UAAMnC,QAAQ0D,YAAAA;AACd1D,WAAAA,MAAMlH,GAAG,IAAIqJ,OACbc,aAAaU,QAAQN,YAAYf,KAAKC,UAAUe,WAAW,CAAC,GACrDnB;AAAAA,EACT;AAEA,WAASqB,MAAS3M,OAAa;AAC7B,UAAMmJ,QAAQ;AAAA,MAAC,GAAG0D,YAAAA;AAAAA,MAAe,GAAG7M;AAAAA,IAAAA;AACpCoM,WAAAA,aAAaU,QAAQN,YAAYf,KAAKC,UAAUvC,KAAK,CAAC,GAC/CA;AAAAA,EACT;AAEA,WAAS0D,cAAuC;AAC9C,WAAIJ,gBAAgB,SAClBA,cAAcM,UAAAA,IAGTN;AAAAA,EACT;AAEA,WAASM,YAAY;AACnB,QAAI,CAAChB;AACH,aAAO,CAAA;AAGT,QAAI;AACF,YAAMiB,SAASvB,KAAKwB,MAAMb,aAAac,QAAQV,UAAU,KAAK,IAAI;AAClE,aAAOb,cAAcqB,MAAM,IAAIA,SAAS,CAAA;AAAA,IAC1C,QAAc;AACZ,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAShB,uBAAuB;AAC9B,QAAMmB,MAAM;AACZ,MAAI;AACFf,WAAAA,aAAaU,QAAQK,KAAKA,GAAG,GAC7Bf,aAAaE,WAAWa,GAAG,GACpB;AAAA,EACT,QAAc;AACZ,WAAO;AAAA,EACT;AACF;ACzEO,SAASC,oBAAoBC,IAA2C;AAC7E,QAAMpC,SAAkC,IAClCC,UAAkC,CAAA;AAExC,aAAW,CAACjJ,KAAKqJ,KAAK,KAAK+B,GAAG7B,WAAW;AACvC,QAAIvJ,IAAI,CAAC,MAAM,KAAK;AAClBgJ,aAAOhJ,IAAInC,MAAM,CAAC,CAAC,IAAI2L,KAAKwB,MAAM3B,KAAK;AACvC;AAAA,IACF;AAEA,QAAIrJ,QAAQ,eAAe;AACzBiJ,cAAQjJ,GAAG,IAAIqJ;AACf;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IAACN,OAAOqC,GAAGX,IAAI,OAAO,KAAK;AAAA,IAAIzB;AAAAA,IAAQC;AAAAA,EAAAA;AAChD;ACvBO,SAASoC,iBAAiBC,SAAyB;AACxD,SAAIA,QAAQ,CAAC,MAAM,OAAOA,YAAY,UAC7B,IAAIA,OAAO,KAGbA;AACT;ACNO,SAASC,mBAAmBC,YAA6B;AAC9D,QAAMC,sBAAsBD,WAAWE,QAAQ,MAAM,EAAE,EAAEC,KAAAA,EAAOC,YAAAA;AAQhE,SALEH,oBAAoBhE,SAAS,MAC5BgE,wBAAwB,OACvBA,wBAAwB,OACvB,sBAAsBI,KAAKJ,mBAAmB,KAAK,CAACK,MAAMrO,KAAKuN,MAAMS,mBAAmB,CAAC;AAGhG;ACPO,SAASM,eACdC,KACAhJ,GACiC;AACjC,MAAI;AACF,UAAMiJ,SAASD,MAAME,eAAAA,QAAMlB,MAAMgB,GAAG,IAAI,CAAA;AACxC,WAAO,OAAOC,UAAW,YAAYA,UAAU,CAACE,MAAMC,QAAQH,MAAM,IAAIA,SAAS,CAAA;AAAA,EACnF,SAASI,KAAK;AAGZA,WAAAA,IAAIC,UAAU,GAAGtJ,EAAE,kCAAkC,CAAC;AAAA;AAAA,EAAQqJ,IAAIC,QAAQZ,QACxE,UACA,EACF,CAAC,IACMW;AAAAA,EACT;AACF;AChBO,MAAME,OAAOvG,iBAAAA,OAAOwG,OAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6C/BD,KAAKtE,cAAc;AAEZ,MAAMwE,SAASzG,iBAAAA,OAAO0G,OAAI;AAAA;AAAA,GAIpBC,cAAc3G,iBAAAA,OAAO4G,QAAK;AAAA;AAAA,GAI1BC,qBAAqB7G,iBAAAA,OAAO8G,MAAG;AAAA;AAAA,GAI/BC,gBAAgB/G,iBAAAA,OAAOgH;AAAAA;AAAAA;AAAAA,GAKvBC,2BAA2BjH,iBAAAA,OAAO8G,MAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAS9CH,WAAW;AAAA;AAAA;AAAA,GAKFO,+BAA+BlH,iBAAAA,OAAOiH,wBAAwB;AAAA;AAAA;AAAA,GAK9DE,iBAAiBnH,iBAAAA,OAAO0G,OAAI;AAAA;AAAA;AAAA;AAAA;AAAA,GAO5BU,uBAAuBpH,iBAAAA,OAAOwG,OAAI;AAAA;AAAA,GAIlCa,uBAAuBrH,iBAAAA,OAAO8G,MAAG;AAAA;AAAA,GAIjCQ,kBAAkBtH,iBAAAA,OAAO0G,OAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMtC,CAAC;AAAA,EAACa;AAAU,MACZA,cACAC,iBAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,KAUC;AAAA,GAGQC,SAASzH,iBAAAA,OAAO8G,MAAG;AAAA;AAAA;AAAA;AAAA;AAAA,GAOnBY,eAAe1H,iBAAAA,OAAOwG,OAAI;AAAA;AAAA,GAI1BmB,cAAc3H,iBAAAA,OAAO0G,OAAI;AAAA;AAAA;AAIN1G,iBAAAA,OAAO8G,MAAG;AAAA;AAAA;AAAA;AAAA,MAK7Bc,uBAAuB5H,iBAAAA,OAAOwG,OAAI;AAAA;AAAA,gBAE/B,CAAC;AAAA,EAAChM;AAAK,MACnB0B,GAAAA,IACE1B,MAAMO,OAAOmF,MAAM,CAAC,IAAI,IACtB1F,MAAMO,OAAOD,MAAM+M,KAAK1L,MAAM,CAAC,EAAEC,aACjC5B,MAAMO,OAAOD,MAAM+M,KAAK1L,MAAM,CAAC,EAAE2L,iBACjCtN,MAAMO,OAAOD,MAAM+M,KAAK1L,MAAM,CAAC,EAAE4L,eACrC,CAAC;AAAA,GAGQC,gBAAgBhI,iBAAAA,OAAO0G,OAAI;AAAA;AAAA,GAI3BuB,kBAAkBjI,iBAAAA,OAAOkI,OAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAQ/B,CAAC;AAAA,EAAC1N;AAAK,MAAM0B,GAAAA,IAAI1B,MAAMO,OAAOmF,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA,GAKrCiI,oBAAoBnI,iBAAAA,OAAO8G,MAAG;AAAA;AAAA,GC9JrCsB,iBAAe;AAAA;AAAA;AAcd,SAAAC,aAAAtQ,OAAA;AAAA,QAAAC,IAAAC,uBAAA,EAAA,GACL;AAAA,IAAA8J;AAAAA,IAAAuG;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAA2DzQ,OAC3D;AAAA,IAAAiF;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC;AAAC,MAAArQ;AAAAL,WAAA+J,YAG/C1J,KAAAsQ,CAAAA,aAAA;AACE5G,aAAS4G,QAAQ;AAAA,EAAC,GACnB3Q,OAAA+J,UAAA/J,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAHH,QAAA4Q,kBAAwBvQ;AAKvB,MAAAC;AAAAN,WAAA4Q,mBAEkCtQ,KAAAuQ,0BAASD,oBAAoB,GAAC5Q,OAAA4Q,iBAAA5Q,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAAjE,QAAA8Q,eAAmCxQ,IAEZM,KAAA2P,iBAAiB,YAAY;AAAU,MAAAzG;AAAA9J,WAAAgF,KAGlC8E,KAAA9E,EAAE,cAAc,GAAChF,OAAAgF,GAAAhF,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA;AAAA,MAAA+Q;AAAA/Q,WAAA8J,MAArCiH,KAAAlQ,+BAAC,aAAA,EAAY,OAAA,IAAOiJ,UAAAA,IAAkB,GAAc9J,OAAA8J,IAAA9J,OAAA+Q,MAAAA,KAAA/Q,EAAA,CAAA;AAAA,MAAAgR;AAAAhR,WAAAsQ,eACnDU,KAAAV,eACCzP,+BAACoQ,GAAAA,WAAQ,SAAA,IAAkB,WAAA,OAAM,QAAA,IAAgB,SAAApQ,+BAACqP,GAAAA,QAAW,MAAA,GAAII,uBAAY,GAC3E,UAAAzP,2BAAAA,IAACiO,GAAAA,OAAa,SAAA,GAAY,SAAA,GACxB,UAAAjO,2BAAAA,IAACqP,GAAAA,QACC,UAAArP,+BAACqQ,MAAAA,kBAAA,CAAA,CAAgB,GACnB,EAAA,CACF,GACF,GACDlR,OAAAsQ,aAAAtQ,OAAAgR,MAAAA,KAAAhR,EAAA,CAAA;AAAA,MAAAmR;AAAAnR,IAAA,EAAA,MAAA+Q,MAAA/Q,UAAAgR,MAXLG,oCAAC,8BAAA,EACC,UAAAC,2BAAAA,KAAC5C,GAAAA,MAAA,EACCuC,UAAAA;AAAAA,IAAAA;AAAAA,IACCC;AAAAA,EAAAA,EAAAA,CASH,GACF,GAA+BhR,QAAA+Q,IAAA/Q,QAAAgR,IAAAhR,QAAAmR,MAAAA,KAAAnR,EAAA,EAAA;AAGf,QAAAqR,KAAAtR,MAAKsL,SAAA+E;AAAsB,MAAAkB;AAAAtR,IAAA,EAAA,MAAAwQ,aAAAxQ,UAAA8Q,gBAAA9Q,EAAA,EAAA,MAAAqR,MAF3CC,oCAAC,oBACMd,KAAAA,WACS,cAAAa,IACJP,UAAAA,cAAY,GACtB9Q,QAAAwQ,WAAAxQ,QAAA8Q,cAAA9Q,QAAAqR,IAAArR,QAAAsR,MAAAA,KAAAtR,EAAA,EAAA;AAAA,MAAAuR;AAAA,SAAAvR,EAAA,EAAA,MAAAY,MAAAZ,UAAAmR,MAAAnR,EAAA,EAAA,MAAAsR,MAnBJC,qCAAC7C,SAAA,EAAW,SAAS,MAAA9N,IAAqD,eAAA,iBACxEuQ,UAAAA;AAAAA,IAAAA;AAAAA,IAcAG;AAAAA,EAAAA,GAKF,GAAOtR,QAAAY,IAAAZ,QAAAmR,IAAAnR,QAAAsR,IAAAtR,QAAAuR,MAAAA,KAAAvR,EAAA,EAAA,GApBPuR;AAoBO;AAIJ,SAASC,YACdnG,OACArG,GACQ;AACR,QAAMyM,eAAe1D,eAAe1C,OAAOrG,CAAC,GACtCgG,SAASyG,wBAAwBC,QAAQ,CAAA,IAAKD,cAC9CE,kBAAkBF,wBAAwBC,QAAQD,aAAanD,UAAUsD;AAG/E,SAAO;AAAA,IACL3D,QAAQjD;AAAAA,IACR6G,KAAKxG;AAAAA,IACLyG,OALc,CAACH;AAAAA,IAMfI,OAAOJ;AAAAA,EAAAA;AAEX;ACzEA,MAAMK,2BAA2B,oCAc3B5B,eAAe;AAAA,EACnB6B,SAAS,CAAA;AACX,GACMC,mBAAmBF;AAElB,SAASG,kBAUd;AACA,QAAMC,gBAAgBC,OAAAA,iBAAAA,GAEhB,CAAChH,OAAOiH,QAAQ,IAAIlS,MAAAA,SAAwBgQ,YAAY,GACxD,CAACmC,QAAQC,SAAS,IAAIpS,MAAAA,SAAS,EAAK,GACpC,CAACqS,UAAUC,WAAW,IAAItS,eAAmB,CAAA,CAAE,GAC/C,CAACuS,gBAAgBC,iBAAiB,IAAIxS,MAAAA,SAAAA,GACtC,CAACyS,kBAAkBC,mBAAmB,IAAI1S,MAAAA,YAC1C,CAAC2R,OAAOgB,QAAQ,IAAI3S,eAAAA,GAEpB6R,UAAUe,MAAAA,QAAQ,MACfZ,cAAca,OAAOf,gBAAgB,GAC3C,CAACE,aAAa,CAAC;AAElBzR,QAAAA,UAAU,MAAM;AACd,UAAMuS,MAAMjB,QACTkB,KACCC,UAAAA,UAAUhD,YAAmB,GAC7BiD,cAAKC,CAAAA,SACEA,QACIlD,YAGV,CACH,EACCmD,UAAU;AAAA,MACTC,MAAMlB;AAAAA,MACNP,OAAQ1D,CAAAA,QAAQ0E,SAAS1E,GAAY;AAAA,IAAA,CACtC;AAEH,WAAO,MAAM6E,KAAKO,YAAAA;AAAAA,EACpB,GAAG,CAACxB,SAASG,aAAa,CAAC;AAE3B,QAAMsB,YAAYC,kBACf5I,CAAAA,UAAqC;AACpCyH,cAAU,EAAI,GACdI,kBAAkBhB,MAAS;AAC3B,QAAI;AAEF,YAAMgC,aAAa,CADF;AAAA,QAAC,GAAG7I;AAAAA,QAAO8I,MAAMC,KAAAA,KAAAA;AAAAA,MAAK,GACT,GAAGzI,MAAM4G,OAAO;AAC9CK,eAAS;AAAA,QAACL,SAAS2B;AAAAA,MAAAA,CAAW,GAC9BxB,cAAc2B,OAAO7B,kBAAkB;AAAA,QACrCD,SAAS2B;AAAAA,MAAAA,CACuB;AAAA,IACpC,SAASvF,OAAK;AACZuE,wBAAkBvE,KAAY;AAAA,IAChC,UAAA;AACEmE,gBAAU,EAAK;AAAA,IACjB;AAAA,EACF,GACA,CAACJ,eAAe/G,MAAM4G,OAAO,CAC/B,GAEM+B,cAAcL,kBACjB5I,CAAAA,YAAuB;AACtByH,cAAU,EAAI,GACdI,kBAAkBhB,MAAS;AAC3B,QAAI;AACF,YAAMqC,iBAAiB5I,MAAM4G,QAAQoB,IAAKa,OACxCA,EAAEL,SAAS9I,QAAM8I,OAAO;AAAA,QAAC,GAAGK;AAAAA,QAAG,GAAGnJ;AAAAA,MAAAA,IAASmJ,CAC7C;AACA5B,eAAS;AAAA,QAACL,SAASgC;AAAAA,MAAAA,CAAe,GAClC7B,cAAc2B,OAAO7B,kBAAkB;AAAA,QACrCD,SAASgC;AAAAA,MAAAA,CACuB;AAAA,IACpC,SAAS5F,OAAK;AACZuE,wBAAkBvE,KAAY;AAAA,IAChC,UAAA;AACEmE,gBAAU,EAAK;AAAA,IACjB;AAAA,EACF,GACA,CAACJ,eAAe/G,MAAM4G,OAAO,CAC/B,GAEMkC,cAAcR,kBACjB3R,CAAAA,QAAgB;AACf0Q,gBAAa0B,CAAAA,SAAS,CAAC,GAAGA,MAAMpS,GAAG,CAAC,GACpC8Q,oBAAoBlB,MAAS;AAC7B,QAAI;AACF,YAAMyC,kBAAkBhJ,MAAM4G,QAAQ5P,OAAQ6R,CAAAA,QAAMA,IAAEL,SAAS7R,GAAG;AAClEsQ,eAAS;AAAA,QAACL,SAASoC;AAAAA,MAAAA,CAAgB,GACnCjC,cAAc2B,OAAO7B,kBAAkB;AAAA,QACrCD,SAASoC;AAAAA,MAAAA,CACuB;AAAA,IACpC,SAAShG,OAAK;AACZyE,0BAAoBzE,KAAY;AAAA,IAClC,UAAA;AACEqE,kBAAa0B,UAASA,KAAK/R,OAAQiS,CAAAA,MAAMA,MAAMtS,GAAG,CAAC;AAAA,IACrD;AAAA,EACF,GACA,CAACoQ,eAAe/G,MAAM4G,OAAO,CAC/B;AAEA,SAAO;AAAA,IACLA,SAAS5G,MAAM4G;AAAAA,IACfyB;AAAAA,IACAM;AAAAA,IACAG;AAAAA,IACA5B;AAAAA,IACAE;AAAAA,IACAE;AAAAA,IACAE;AAAAA,IACAd;AAAAA,EAAAA;AAEJ;ACvIO,MAAMwC,cAAcvM,iBAAAA,OAAOwM,QAAK;AAAA;AAAA;AAAA,gBAGvB,CAAC;AAAA,EAAChS;AAAK,MAAMA,MAAMO,OAAOF,MAAM6B,KAAKd,EAAE;AAAA;AAAA,GAI1C6Q,kBAAkBzM,iBAAAA,OAAO8G,MAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAcvB,CAAC;AAAA,EAACtM;AAAK,MAAMA,MAAMO,OAAOF,MAAM6B,KAAKH,MAAM;AAAA;AAAA;AAAA;ACAtD,SAAAmQ,YAAArU,IAAA;AAAA,QAAAL,IAAAC,uBAAA,EAAA,GAAqB;AAAA,IAAAyG;AAAAA,IAAAiO;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAA1U,IAe1B2U,QAAcC,GAAAA,YACd;AAAA,IAAAvB;AAAAA,IAAAM;AAAAA,IAAA/B;AAAAA,IAAAkC;AAAAA,IAAA5B;AAAAA,IAAAI;AAAAA,EAAAA,IACER,mBACF;AAAA,IAAAnN;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC;AAAC,MAAApQ;AAAAN,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KACZtI,KAAA;AAAA,IAAA4U,OAC5B;AAAA,IAAOC,KACT;AAAA,IAASC,MACR;AAAA,IAASC,MACT;AAAA,IAASC,QACP;AAAA,IAASC,QAAA;AAAA,EAAA,GAElBvV,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAPD,QAAAwV,aAAmBC,OAAAA,kBAAkBnV,EAOpC,GACD,CAAAoV,YAAAC,aAAA,IAAoCvV,MAAAA,aAA4B,GAChE,CAAAwV,cAAAC,eAAA,IAAwCzV,MAAAA,SAAS,EAAE;AAAC,MAAAQ;AAAAZ,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAC6BhI,KAAA,CAAA,GAAEZ,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AAAnF,QAAA,CAAA8V,kBAAAC,mBAAA,IAAgD3V,MAAAA,SAAiCQ,EAAE,GACnF,CAAAoV,aAAAC,cAAA,IAAsC7V,MAAAA,SAAS,EAAE,GACjD,CAAA8V,aAAAC,cAAA,IAAsC/V,MAAAA,SAA6BsG,GAAG;AAAC,MAAAoD;AAAA9J,IAAA,CAAA,MAAA8U,iBAAA9U,SAAA6U,gBAAA7U,EAAA,CAAA,MAAAwV,cAAAxV,SAAA+U,eAAA/U,EAAA,CAAA,MAAA2U,mBAAA3U,SAAAiS,WAAAjS,EAAA,CAAA,MAAA0T,aAAA1T,EAAA,CAAA,MAAA2S,kBAAA3S,EAAA,EAAA,MAAAgF,KAAAhF,UAAAgV,SAExClL,iBAAA;AAE7B,UAAAsM,SAAerB,YAAYF,cAAcC,aAAa;AAUpD,QAPkB7C,SAAOoE,KAAAnC,CAAAA,MAAA;AACzB,YAAAoC,gBAAsB3B,gBAAgBT,EAACxN,GAAI;AAAC,aAE1C4P,iBACAA,cAAavL,UAAW8J,gBACxB0B,iBAAAA,QAAQD,cAAatL,QAAS8J,aAAa;AAAA,IAAC,CAAA,GAIjC;AACb,YAAA0B,iBAAuBvE,SAAOwE,KAAAC,CAAAA,QAAA;AAC5B,cAAAC,kBAAsBhC,gBAAgBT,IAACxN,GAAI;AAAC,eAE1C4P,mBACAA,gBAAavL,UAAW8J,gBACxB0B,iBAAAA,QAAQD,gBAAatL,QAAS8J,aAAa;AAAA,MAAC,CAAA;AAGhDE,YAAK4B,KAAA;AAAA,QAAAC,UAAA;AAAA,QAAAC,QAEK;AAAA,QAASC,OACV/R,EAAE,0BAA0B;AAAA,QAACgS,aACvB,GAAGR,gBAAcO,KAAA,MAAavB,WAAUyB,OAAA,IAAAxX,KAAiB+W,gBAAcU,WAAa,EAAE,CAAC,CAAC;AAAA,MAAA,CACtG;AAAC;AAAA,IAAA;AAIAd,eAAM,MACF1C,UAAS;AAAA,MAAAhN,KACR0P;AAAAA,MAAMc,UACF,oBAAAzX,KAAAA,GAAAC,YAAAA;AAAAA,MAAwBqX,OAC1B;AAAA,IAAA,CACR,GAEDZ,eAAeC,MAAM,IAEnBzD,iBACFqC,MAAK4B,KAAA;AAAA,MAAAC,UAAA;AAAA,MAAAC,QAEK;AAAA,MAAOC,OACR/R,EAAE,kBAAkB;AAAA,MAACgS,aACfrE,eAAcrE;AAAAA,IAAAA,CAC5B,IAED0G,MAAK4B,KAAA;AAAA,MAAAC,UAAA;AAAA,MAAAC,QAEK;AAAA,MAASC,OACV/R,EAAE,oBAAoB;AAAA,IAAA,CAC9B;AAAA,EAAC,GAELhF,OAAA8U,eAAA9U,OAAA6U,cAAA7U,OAAAwV,YAAAxV,OAAA+U,aAAA/U,OAAA2U,iBAAA3U,OAAAiS,SAAAjS,OAAA0T,WAAA1T,OAAA2S,gBAAA3S,QAAAgF,GAAAhF,QAAAgV,OAAAhV,QAAA8J,MAAAA,KAAA9J,EAAA,EAAA;AAvDD,QAAAmX,aAAmBrN;AAkEjB,MAAAiH;AAAA/Q,IAAA,EAAA,MAAAgF,KAAAhF,UAAAgV,SAAAhV,EAAA,EAAA,MAAAgU,eAGAjD,KAAA,OAAAhG,OAAAqM,aAAA;AACEzB,sBAAkB,GAClBI,oBAAmB3B,CAAAA,UAAA;AAAA,MAAA,GAAgBA;AAAAA,MAAI,CAAGrJ,MAAK8I,IAAA,GAAQuD;AAAAA,IAAAA,EAAU;AAAC,QAAA;AAAA,YAG1DpD,YAAW;AAAA,QAAA,GACZjJ;AAAAA,QAAKgM,OACDK;AAAAA,MAAAA,CACR,GAEDrB,oBAAmBsB,CAAAA,WAAA;AACjB,cAAAC,SAAA;AAAA,UAAA,GAAiBlD;AAAAA,QAAAA;AAAK,eAAA,OACfZ,OAAKzI,MAAK8I,IAAA,GACVL;AAAAA,MAAI,CACZ;AAAA,IAAC,SAAAxC,KAAA;AACK3C,YAAAA,MAAAA;AAEP0H,0BAAmBwB,CAAAA,WAAA;AACjB,cAAA/D,OAAA;AAAA,UAAA,GAAiBY;AAAAA,QAAAA;AAAK,eAAA,OACfZ,KAAKzI,MAAK8I,IAAA,GACVL;AAAAA,MAAI,CACZ,GACDwB,MAAK4B,KAAA;AAAA,QAAAC,UAAA;AAAA,QAAAC,QAEK;AAAA,QAAOC,OACR/R,EAAE,kBAAkB;AAAA,QAACgS,aACf3I,IAAGC;AAAAA,MAAAA,CACjB;AAAA,IAAC;AAAA,EAAA,GAELtO,QAAAgF,GAAAhF,QAAAgV,OAAAhV,QAAAgU,aAAAhU,QAAA+Q,MAAAA,KAAA/Q,EAAA,EAAA;AA9BH,QAAAwX,kBAAwBzG;AAgCvB,MAAAC;AAAAhR,IAAA,EAAA,MAAA8U,iBAAA9U,EAAA,EAAA,MAAA6U,gBAAA7U,UAAAwV,cAAAxV,EAAA,EAAA,MAAA+U,eAAA/U,EAAA,EAAA,MAAA2U,mBAAA3U,EAAA,EAAA,MAAAiS,WAAAjS,EAAA,EAAA,MAAAgF,KAAAhF,EAAA,EAAA,MAAAgV,SAAAhV,UAAAgU,eAGChD,YAAAyG,YAAA;AACE,UAAAC,WAAe3C,YAAYF,cAAcC,aAAa;AAYpD,QATkB7C,SAAOoE,KAAAsB,CAAAA,QAAA;AAAA,UAErBzD,IAACL,SAAU9I,QAAK8I;AAAK,eAAA;AACzB,YAAA+D,kBAAsBjD,gBAAgBT,IAACxN,GAAI;AAAC,aAE1C4P,mBACAA,gBAAavL,UAAW8J,gBACxB0B,iBAAAA,QAAQD,gBAAatL,QAAS8J,aAAa;AAAA,IAAC,CAAA,GAIjC;AACb,YAAA+C,mBAAuB5F,SAAOwE,KAAAqB,CAAAA,QAAA;AAAA,YACxB5D,IAACL,SAAU9I,QAAK8I;AAAK,iBAAA;AACzB,cAAAkE,kBAAsBpD,gBAAgBT,IAACxN,GAAI;AAAC,eAE1C4P,mBACAA,gBAAavL,UAAW8J,gBACxB0B,iBAAAA,QAAQD,gBAAatL,QAAS8J,aAAa;AAAA,MAAC,CAAA;AAGhDE,YAAK4B,KAAA;AAAA,QAAAC,UAAA;AAAA,QAAAC,QAEK;AAAA,QAASC,OACV/R,EAAE,0BAA0B;AAAA,QAACgS,aACvB,GAAGR,kBAAcO,KAAA,MAAavB,WAAUyB,OAAA,IAAAxX,KAC1C+W,kBAAcU,WAAa,EAAE,CACxC,CAAC;AAAA,MAAA,CACF;AAAC;AAAA,IAAA;AAAA,QAAA;AAAA,YAKIlD,YAAW;AAAA,QAAA,GACZjJ;AAAAA,QAAKrE,KACH0P;AAAAA,QAAMc,UACF,oBAAAzX,KAAAA,GAAAC,YAAAA;AAAAA,MAAuB,CACjC,GACDyW,eAAeC,QAAM,GACrBpB,MAAK4B,KAAA;AAAA,QAAAC,UAAA;AAAA,QAAAC,QAEK;AAAA,QAASC,OACV/R,EAAE,oBAAoB;AAAA,MAAA,CAC9B;AAAA,IAAC,SAAAmM,KAAA;AACK9C,YAAAA,QAAAA;AACP2G,YAAK4B,KAAA;AAAA,QAAAC,UAAA;AAAA,QAAAC,QAEK;AAAA,QAAOC,OACR/R,EAAE,kBAAkB;AAAA,QAACgS,aACf3I,MAAGC;AAAAA,MAAAA,CACjB;AAAA,IAAC;AAAA,EAAA,GAELtO,QAAA8U,eAAA9U,QAAA6U,cAAA7U,QAAAwV,YAAAxV,QAAA+U,aAAA/U,QAAA2U,iBAAA3U,QAAAiS,SAAAjS,QAAAgF,GAAAhF,QAAAgV,OAAAhV,QAAAgU,aAAAhU,QAAAgR,MAAAA,KAAAhR,EAAA,EAAA;AAzDH,QAAAgY,eAAqBhH;AAqEpB,MAAAiH,IAAAC,IAAA/G,IAAAE,IAAAC;AAAA,MAAAtR,EAAA,EAAA,MAAA8U,iBAAA9U,EAAA,EAAA,MAAA6U,gBAAA7U,EAAA,EAAA,MAAAmU,eAAAnU,EAAA,EAAA,MAAA0V,cAAA1V,EAAA,EAAA,MAAA4V,gBAAA5V,UAAAwV,cAAAxV,EAAA,EAAA,MAAA2U,mBAAA3U,EAAA,EAAA,MAAAmX,cAAAnX,EAAA,EAAA,MAAAwX,mBAAAxX,EAAA,EAAA,MAAAgY,gBAAAhY,EAAA,EAAA,MAAA8V,oBAAA9V,EAAA,EAAA,MAAAiS,WAAAjS,EAAA,EAAA,MAAAuS,UAAAvS,EAAA,EAAA,MAAAgW,eAAAhW,EAAA,EAAA,MAAAkW,eAAAlW,EAAA,EAAA,MAAA4U,yBAAA5U,UAAAgF,GAAA;AAED,UAAAqP,kBAAwBpC,SAAO5P,OAAA8V,CAAAA,QACtBjE,KAAC6C,OAAAqB,YAAAA,EAAA9N,SAAgC0L,YAAWoC,YAAAA,CAAc,CAAA;AAIhEF,SAAAzD;AAAe,QAAAlD;AAAAvR,MAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAGqB2I,MAAA;AAAA,MAAA8G,eAAgB;AAAA,IAAA,GAAarY,QAAAuR,OAAAA,MAAAvR,EAAA,EAAA;AAAA,QAAAsY;AAAAtY,cAAAgF,KACzDsT,OAAAtT,EAAE,qBAAqB,GAAChF,QAAAgF,GAAAhF,QAAAsY,QAAAA,OAAAtY,EAAA,EAAA;AAAA,QAAAuY;AAAAvY,cAAAsY,QAD3BC,MAAA1X,2BAAAA,IAACqP,SAAA,EAAY,QAAA,YAAkB,OAAAqB,KAAqC,MAAA,GACjE+G,UAAAA,KAAAA,CACH,GAAOtY,QAAAsY,MAAAtY,QAAAuY,OAAAA,MAAAvY,EAAA,EAAA;AAAA,QAAAwY;AAAAxY,cAAAgF,KAEEwT,MAAAxT,EAAE,mBAAmB,GAAChF,QAAAgF,GAAAhF,QAAAwY,OAAAA,MAAAxY,EAAA,EAAA;AAAA,QAAAyY;AAAAzY,MAAA,EAAA,MAAAmX,cAAAnX,UAAAuS,UAAAvS,EAAA,EAAA,MAAAwY,OAD/BC,qCAACC,GAAAA,QAAA,EACQ,OAAAF,KACDG,MAAAA,MAAAA,SACIpG,UAAAA,QACD4E,SAAAA,YACJ,MAAA,QAAA,CAAO,GACZnX,QAAAmX,YAAAnX,QAAAuS,QAAAvS,QAAAwY,KAAAxY,QAAAyY,OAAAA,MAAAzY,EAAA,EAAA;AAAA,QAAA4Y;AAAA5Y,MAAA,EAAA,MAAAuY,OAAAvY,UAAAyY,OAVJG,MAAAxH,2BAAAA,KAAC5C,WAAc,SAAA,GAAe,YAAA,GAAkB,eAAA,GAAW,SAAA,iBAAsB,OAAA,UAC/E+J,UAAAA;AAAAA,MAAAA;AAAAA,MAGAE;AAAAA,IAAAA,EAAAA,CAOF,GAAOzY,QAAAuY,KAAAvY,QAAAyY,KAAAzY,QAAA4Y,OAAAA,MAAA5Y,EAAA,EAAA;AAAA,QAAA6Y;AAAA7Y,cAAAgF,KAGU6T,MAAA7T,EAAE,sBAAsB,GAAChF,QAAAgF,GAAAhF,QAAA6Y,OAAAA,MAAA7Y,EAAA,EAAA;AAAA,QAAA8Y;AAAA9Y,MAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAG5BkQ,MAAAC,CAAAA,UAAW9C,eAAe8C,MAAKC,cAAA3N,KAAoB,GAACrL,QAAA8Y,OAAAA,MAAA9Y,EAAA,EAAA;AAAA,QAAAiZ;AAAAjZ,MAAA,EAAA,MAAAgW,eAAAhW,UAAA6Y,OALlEI,qCAACnK,GAAAA,KAAA,EAAa,YAAe,YAAA,GAC3B,UAAAjO,2BAAAA,IAACqY,cAAA,EACc,aAAAL,KACPM,MAAAA,MAAAA,YACCnD,OAAAA,aACG,UAAA8C,IAAAA,CAAoD,EAAA,CAElE,GAAM9Y,QAAAgW,aAAAhW,QAAA6Y,KAAA7Y,QAAAiZ,OAAAA,MAAAjZ,EAAA,EAAA,GAAAA,EAAA,EAAA,MAAA4Y,OAAA5Y,UAAAiZ,OApBR3H,KAAAF,2BAAAA,KAAC,aAAA,EAAmB,OAAA,GAClBwH,UAAAA;AAAAA,MAAAA;AAAAA,MAYAK;AAAAA,IAAAA,EAAAA,CAQF,GAAcjZ,QAAA4Y,KAAA5Y,QAAAiZ,KAAAjZ,QAAAsR,MAAAA,KAAAtR,EAAA,EAAA,GACbiY,KAAAzD,GAAAA,OAAgBrD,KAAA,GACdE,KAAAgD,iBAAehB,IAAA+F,CAAAA,QAAA;AACd,YAAAC,WAAiB1E,gBAAgBT,IAACxN,GAAI,GACtC4S,aAAmBpD,gBAAgBhC,IAACxN,KAGpC6S,kBACEF,YAAYxE,iBAAiBwE,SAAQtO,SAAUwL,iBAAAA,QAAQzB,eAAeuE,SAAQrO,MAAO,GAEvFwO,WAAiBF,cAAU,CAAKC;AAAe,aAE7C1Y,2BAAAA,IAAC6N,GAAAA,MAAA,EAEQ,OAAA,QACE,SAAA,GACT,QAAA,IACM,MAAA4K,aAAa,aAAa,WACvB,SAAA,MAAA;AACPnD,uBAAejC,IAACxN,GAAI;AACpB,cAAA+S,YAAkB9E,gBAAgBT,IAACxN,GAAI;AACnC+S,qBACF7E,sBAAsB6E,SAAS;AAAA,MAAC,GAG7B,OAAA;AAAA,QAAAC,UAAW;AAAA,MAAA,GAElB,UAAAtI,2BAAAA,KAACoD,GAAAA,OAAA,EAAa,OAAA,GACZ,UAAA;AAAA,QAAApD,2BAAAA,KAAC5C,GAAAA,MAAA,EAAa,SAAA,iBAAuB,OAAA,UACnC,UAAA;AAAA,UAAA4C,gCAAC5C,GAAAA,QAAW,OAAA,UAAc,KAAA,GAAiB,cAAA,GACxCkH,UAAAA;AAAAA,YAAAA,eAAexB,IAACL,OACfhT,2BAAAA,IAACqY,GAAAA,WAAA,EACQtD,OAAAA,cACG,UAAA+D,CAAAA,YAAW9D,gBAAgBkD,QAAKC,cAAA3N,KAAoB,GACnD,WAAAuO,CAAAA,YAAA;AACLb,sBAAK/W,QAAS,UAChBwV,gBAAgBtD,KAAG0B,YAAY,IACtBmD,QAAK/W,QAAS,YACvB2T,kBAAkB;AAAA,YAAC,GAGf,QAAA,MAAM6B,gBAAgBtD,KAAG0B,YAAY,GAC7C,eACO,OAAA;AAAA,cAAAiE,UAAW;AAAA,cAAOC,QAAU;AAAA,YAAA,EAAM,KAG3CjZ,2BAAAA,IAACqP,GAAAA,MAAA,EACQ,QAAA,QACD,SACO,cAAA,YACN,OAAA;AAAA,cAAA2J,UAAW;AAAA,cAAO3W,QAAU;AAAA,cAAS6W,SAAW;AAAA,YAAA,GAErD,OAAAjE,iBAAiB5B,IAACL,IAAA,KAClBK,IAAC6C,SACD7C,IAACL,KAAAhU,MAAYqU,IAACL,KAAApK,SAAA,GAAkByK,IAACL,KAAApK,MAAY,GAEtC,SAAA,MAAA;AACPkM,4BAAczB,IAACL,IAAK,GACpBgC,gBAAgB3B,IAAC6C,SAAU7C,IAACL,KAAAhU,MAAA,GAAA,CAAgB,CAAC;AAAA,YAAC,GAG/CiW,UAAAA,iBAAiB5B,IAACL,IAAA,KACjBK,IAAC6C,SACD7C,IAACL,KAAAhU,MAAYqU,IAACL,KAAApK,YAAkByK,IAACL,KAAApK,MAAY,GACjD;AAAA,YAED+P,YACC3Y,2BAAAA,IAACiO,QAAA,EACQ,OAAA;AAAA,cAAAkL,OACE;AAAA,cAAKF,QACJ;AAAA,cAAKG,cACC;AAAA,cAAKtW,iBACF;AAAA,YAAA,EAA8B,CAChD;AAAA,UAAA,GAGP;AAAA,UACA9C,2BAAAA,IAACqZ,GAAAA,YAAA,EACS,QAAArZ,2BAAAA,IAACsZ,OAAAA,mBAAA,CAAA,IACL,IAAA,GAAGjG,IAACL,IAAA,SAEN,MAAAhT,2BAAAA,IAACuZ,GAAAA,MAAA,EAGC,UAAAvZ,2BAAAA,IAACwZ,GAAAA,UAAA,EACM,MAAA,YACI,SAAA,GACHC,MAAAA,MAAAA,WACA,MAAAtV,EAAE,eAAe,GACd,SAAAuV,CAAAA,YAAA;AACPxB,oBAAKyB,gBAAAA,GACLrG,YAAYD,IAACL,IAAK;AAAA,UAAC,EAAA,IAGzB,GAEO,SAAA;AAAA,YAAA4G,QAAA;AAAA,YAAAC,WAA0B;AAAA,YAAYC,MAAQ;AAAA,UAAA,EAAS;WAEpE;AAAA,QAEA9Z,2BAAAA,IAAC+Z,GAAAA,MAAA,EAAK,WAAOvB,UAAAA,UAAQtO,MAAApL,MAAc,GAAG,EAAA,CAAA,EAAA,CAAK;AAAA,QAE3CkB,2BAAAA,IAAC2N,GAAAA,QAAW,OAAA,UAAc,KAAA,GACxB,UAAA3N,2BAAAA,IAACqP,GAAAA,QAAW,MAAA,GAAG,WACZsF,UAAAA,WAAUyB,OAAA,IAAAxX,KAAiByU,IAACgD,WAAY,EAAE,CAAC,EAAA,CAC9C,EAAA,CACF;AAAA,QAECsC,YACC3Y,2BAAAA,IAAC6X,GAAAA,QAAA,EACM,MAAA,SACA,MAAA,WACC,SACG,SAAA,GACF,OAAA;AAAA,UAAAoB,QACG;AAAA,UAAMJ,UACJ;AAAA,UAAUmB,OACb;AAAA,UAAMC,QACL;AAAA,UAAM7W,UACJ;AAAA,QAAA,GAEN,MAAAe,EAAE,eAAe,GACd,SAAA+V,CAAAA,MAAA;AACPA,YAACP,gBAAAA,GACDxC,aAAa9D,GAAC;AAAA,QAAC,EAAA;SAIvB,EAAA,GAnHKA,IAACL,IAoHR;AAAA,IAAO,CAAA,GAET7T,QAAA8U,eAAA9U,QAAA6U,cAAA7U,QAAAmU,aAAAnU,QAAA0V,YAAA1V,QAAA4V,cAAA5V,QAAAwV,YAAAxV,QAAA2U,iBAAA3U,QAAAmX,YAAAnX,QAAAwX,iBAAAxX,QAAAgY,cAAAhY,QAAA8V,kBAAA9V,QAAAiS,SAAAjS,QAAAuS,QAAAvS,QAAAgW,aAAAhW,QAAAkW,aAAAlW,QAAA4U,uBAAA5U,QAAAgF,GAAAhF,QAAAiY,IAAAjY,QAAAkY,IAAAlY,QAAAmR,IAAAnR,QAAAqR,IAAArR,QAAAsR;AAAAA,EAAA;AAAA2G,SAAAjY,EAAA,EAAA,GAAAkY,KAAAlY,EAAA,EAAA,GAAAmR,KAAAnR,EAAA,EAAA,GAAAqR,KAAArR,EAAA,EAAA,GAAAsR,KAAAtR,EAAA,EAAA;AAAA,MAAAuR;AAAAvR,IAAA,EAAA,MAAAiY,MAAAjY,UAAAmR,MAAAnR,EAAA,EAAA,MAAAqR,MAlIJE,KAAA1Q,2BAAAA,IAAC,IAAA,EAAgB,UAAAsQ,IACdE,UAAAA,GAAAA,CAkIH,GAAQrR,QAAAiY,IAAAjY,QAAAmR,IAAAnR,QAAAqR,IAAArR,QAAAuR,MAAAA,KAAAvR,EAAA,EAAA;AAAA,MAAAsY;AAAA,SAAAtY,EAAA,EAAA,MAAAkY,MAAAlY,UAAAsR,MAAAtR,EAAA,EAAA,MAAAuR,MA1JV+G,sCAAC,IAAA,EACChH,UAAAA;AAAAA,IAAAA;AAAAA,IAsBAC;AAAAA,EAAAA,GAoIF,GAAkBvR,QAAAkY,IAAAlY,QAAAsR,IAAAtR,QAAAuR,IAAAvR,QAAAsY,OAAAA,MAAAtY,EAAA,EAAA,GA3JlBsY;AA2JkB;AC7XtB,SAAS0C,mBAA4B;AACnC,SAAO,OAAOC,SAAW,OAAeA,OAAOC,aAAa;AAC9D;AAEA,SAASC,yBAAyBrB,QAA6C;AAC7E,MAAIsB,aAAatB;AAEjB,SAAKsB,eAEHA,aACE,OAAOH,SAAW,OAAe,OAAOI,WAAa,MACjDA,SAASC,KAAKC,sBAAAA,EAAwBzB,SAAS,KAC/C,IAED;AAAA,IACL0B,aAAaJ,cAAcJ,qBAAqB,IAAI;AAAA,IACpDS,MAAML,aAAa,MAAMxJ,SAAYwJ,aAAa;AAAA,IAClDM,aAAaN,aAAa;AAAA,IAC1BO,SAASC,KAAKC,IAAI,KAAKD,KAAKE,IAAI,KAAKV,aAAa,CAAC,CAAC;AAAA,IACpDW,SAASX,aAAa,MAAMA,aAAa,MAAMA,aAAa;AAAA,EAAA;AAEhE;AAEO,SAAAY,YAAA3b,IAAA;AAAA,QAAAL,IAAAC,uBAAA,CAAA,GAAqB;AAAA,IAAAgc;AAAAA,EAAAA,IAAA5b,IAK1B,CAAA6b,oBAAAC,qBAAA,IAAoD/b,MAAAA,SAAAgc,OAAiC,GACrF,CAAAC,iBAAAC,kBAAA,IAA8Clc,MAAAA,SAAAmc,QAE9C;AAAC,MAAAjc,IAAAM;AAAAZ,WAAAic,iBAES3b,KAAAA,MAAA;AAAA,QAAA,CACH2b,cAAalT;AAAA;AAGlB,UAAAyT,eAAAjR,CAAAA,YAAA;AACE4Q,4BAAsBnB,kBAAkB;AACxC,YAAAyB,QAAclR,UAAO,CAAA;AACjBkR,eACFH,mBAAmBnB,yBAAyBsB,MAAKC,YAAA5C,MAAmB,CAAC;AAAA,IAAC,GAG1E6C,iBAAA,IAAAC,eAA0CJ,YAAY;AACtDG,WAAAA,eAAcE,QAASZ,cAAalT,OAAQ,GAAC,MAAA;AAG3C4T,qBAAcG,WAAAA;AAAAA,IAAa;AAAA,EAAA,GAE5Blc,MAACqb,aAAa,GAACjc,OAAAic,eAAAjc,OAAAM,IAAAN,OAAAY,OAAAN,KAAAN,EAAA,CAAA,GAAAY,KAAAZ,EAAA,CAAA,IAjBlBW,gBAAUL,IAiBPM,EAAe;AAAC,MAAAkJ;AAAA,SAAA9J,EAAA,CAAA,MAAAkc,sBAAAlc,SAAAqc,mBAEZvS,KAAA;AAAA,IAAAuS;AAAAA,IAAAH;AAAAA,EAAAA,GAAqClc,OAAAkc,oBAAAlc,OAAAqc,iBAAArc,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA,GAArC8J;AAAqC;AA7BvC,SAAAyS,WAAA;AAAA,SAOHpB,yBAAAvJ,MAAkC;AAAC;AAPhC,SAAAwK,UAAA;AAAA,SAK8DpB,iBAAAA;AAAkB;AClBhF,SAAA+B,kBAAA1c,IAAA;AAAA,QAAAL,IAAAC,uBAAA,EAAA,GAA2B;AAAA,IAAAsQ;AAAAA,IAAAyM;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAA9c,IAOhC;AAAA,IAAA2E;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC;AAAC,MAAApQ;AAAAN,WAAAgF,KASlC1E,KAAA0E,EAAE,kCAAkC,GAAChF,OAAAgF,GAAAhF,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAAA,MAAAY;AAAAZ,WAAAM,MAF1CM,KAAAC,2BAAAA,IAAC6N,GAAAA,MAAA,EAAa,QAAA,GACZ,UAAA7N,2BAAAA,IAACqP,GAAAA,MAAA,EAAW,MAAA,GAAG,OAAA,IACZ5P,UAAAA,GAAAA,CACH,EAAA,CACF,GAAON,OAAAM,IAAAN,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AAAA,MAAA8J;AAAA9J,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAUDkB,KAAAjJ,2BAAAA,IAAC6N,GAAAA,MAAA,EAAa,QAAA,GACZ,UAAA7N,2BAAAA,IAACuc,YAAA,EAAc,MAAA,CAAC,QAAQ,OAAO,EAAA,CAAC,EAAA,CAClC,GAAOpd,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA;AASD,QAAA+Q,KAAAkM,kBAAeI,MAAAA,WAAAC,MAAAA,UACXtM,KAAAgM,oBAAgB,CAAKzM,gBACzBY,KAAA8L,kBAAkB,aAAa;AAAS,MAAA5L;AAAArR,IAAA,CAAA,MAAAid,mBAAAjd,SAAAgF,KACxCqM,KAAkBrM,EAAlBiY,kBAAoB,wBAA2B,sBAAN,GAA6Bjd,OAAAid,iBAAAjd,OAAAgF,GAAAhF,OAAAqR,MAAAA,KAAArR,EAAA,CAAA;AAAA,MAAAsR;AAAAtR,IAAA,CAAA,MAAAkd,oBAAAld,EAAA,CAAA,MAAA+Q,MAAA/Q,EAAA,EAAA,MAAAgR,MAAAhR,EAAA,EAAA,MAAAmR,MAAAnR,UAAAqR,MAjBlFC,KAAAzQ,2BAAAA,IAACiO,GAAAA,KAAA,EAAU,MAAA,GACT,yCAACmC,GAAAA,SAAA,EAEG,SAAAnH,IAIQ,WAAA,OACV,YAEA,yCAAC4O,GAAAA,QAAA,EACO,OAAA,QACGwE,SAAAA,kBACJ,MAAA,UACC,MAAAnM,IACI,UAAAC,IACJ,MAAAG,IACA,MAAAE,GAAAA,IAEV,EAAA,CACF,GAAMrR,OAAAkd,kBAAAld,OAAA+Q,IAAA/Q,QAAAgR,IAAAhR,QAAAmR,IAAAnR,QAAAqR,IAAArR,QAAAsR,MAAAA,KAAAtR,EAAA,EAAA;AAMI,QAAAuR,KAAAyL,mBAAgBK,MAAAA,WAAAC,MAAAA;AAAsB,MAAAhF;AAAAtY,IAAA,EAAA,MAAAgd,oBAAAhd,UAAAgF,KACtCsT,MAAmBtT,EAAnBgY,mBAAqB,yBAA4B,uBAAN,GAA8Bhd,QAAAgd,kBAAAhd,QAAAgF,GAAAhF,QAAAsY,OAAAA,MAAAtY,EAAA,EAAA;AAErE,QAAAuY,OAAChI,gBACLiI,MAAAwE,mBAAmB,aAAa;AAAS,MAAAvE;AAAAzY,IAAA,EAAA,MAAAmd,qBAAAnd,EAAA,EAAA,MAAAsY,OAAAtY,EAAA,EAAA,MAAAuY,OAAAvY,EAAA,EAAA,MAAAwY,OAAAxY,UAAAuR,MATnDkH,MAAA5X,2BAAAA,IAACiO,GAAAA,KAAA,EAAU,MAAA,GAAe,YAAA,GACxB,UAAAjO,2BAAAA,IAAC6X,GAAAA,UACO,OAAA,QACGyE,SAAAA,mBACJ,MAAA,UACC,MAAA5L,IACA,MAAA+G,KACD,MAAA,SACK,UAAAC,KACJ,MAAAC,IAAAA,CAAyC,EAAA,CAEnD,GAAMxY,QAAAmd,mBAAAnd,QAAAsY,KAAAtY,QAAAuY,KAAAvY,QAAAwY,KAAAxY,QAAAuR,IAAAvR,QAAAyY,OAAAA,MAAAzY,EAAA,EAAA;AAAA,MAAA4Y;AAAA5Y,IAAA,EAAA,MAAAyY,OAAAzY,UAAAsR,MAjCRsH,MAAAxH,2BAAAA,KAAC5C,GAAAA,MAAA,EAAa,SAAA,gBACZ8C,UAAAA;AAAAA,IAAAA;AAAAA,IAqBAmH;AAAAA,EAAAA,EAAAA,CAYF,GAAOzY,QAAAyY,KAAAzY,QAAAsR,IAAAtR,QAAA4Y,OAAAA,MAAA5Y,EAAA,EAAA;AAAA,MAAA6Y;AAAA,SAAA7Y,EAAA,EAAA,MAAAuQ,kBAAAvQ,UAAA4Y,OAAA5Y,EAAA,EAAA,MAAAY,MAhDbiY,MAAAhY,2BAAAA,IAAC,mBAAA,EACC,UAAAA,2BAAAA,IAAC6N,GAAAA,MAAA,EAAc,SAAA,GAAa,UAAA,GAC1B,UAAA7N,2BAAAA,IAACoQ,GAAAA,SAAA,EAEG,SAAArQ,IAMQ,WAAA,OACA2P,UAAAA,gBACV,QAAA,IAEAqI,UAAAA,KAmCF,EAAA,CACF,EAAA,CACF,GAAoB5Y,QAAAuQ,gBAAAvQ,QAAA4Y,KAAA5Y,QAAAY,IAAAZ,QAAA6Y,OAAAA,MAAA7Y,EAAA,EAAA,GAnDpB6Y;AAmDoB;AC7EjB,MAAM0E,4BAA4BvV,iBAAAA,OAAO8G,MAAG;AAAA;AAAA;AAAA,GAKtC0O,yBAAyBxV,iBAAAA,OAAOgH;AAAAA;AAAAA;AAAAA,GCYvCyO,MAAMzV,iBAAAA,OAAOC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,sBAKG,CAAC;AAAA,EAACyV;AAAK,MAAM,oBAAoBA,KAAK,aAAa;AAAA;AAKlE,SAAAC,qBAAA;AAAA,QAAA3d,IAAAC,qBAAAA,EAAA,EAAA,GACL,CAAA2d,MAAAC,OAAA,IAAwBzd,MAAAA,WAAc,GACtC0d,YAAkBpV,aAAA,IAAqC,GACvDqV,aAAmBrV,MAAAA,OAAA,IAAkC;AAAC,MAAArI;AAAAL,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAEtBvI,KAAAA,MAAMwd,QAAOzB,OAAU,GAACpc,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAAxD,QAAAge,cAAoB3d,IAEpB;AAAA,IAAA2E;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC;AAAC,MAAApQ,IAAAM;AAAAZ,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAG/CtI,KAAAA,MAAMud,UAAa,GACnBjd,KAAAA,MAAA,CAAOkd,UAAS/U,SAAUgV,WAAUhV,OAAA,GAAS/I,OAAAM,IAAAN,OAAAY,OAAAN,KAAAN,EAAA,CAAA,GAAAY,KAAAZ,EAAA,CAAA,IAF/Cie,GAAAA,qBACE3d,IACAM,EACF;AAAC,MAAAkJ;AAAA9J,WAAAgF,KAQkC8E,KAAA9E,EAAE,6BAA6B,GAAChF,OAAAgF,GAAAhF,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA;AAAA,MAAA+Q;AAAA/Q,WAAA8J,MADzDiH,KAAAlQ,2BAAAA,IAACqd,GAAAA,QAAA,EAAc,OAAA,GACb,UAAArd,2BAAAA,IAACqP,GAAAA,MAAA,EAAY,QAAA,UAAUpG,cAAiC,EAAA,CAC1D,GAAS9J,OAAA8J,IAAA9J,OAAA+Q,MAAAA,KAAA/Q,EAAA,CAAA;AAAA,MAAAgR;AAAAhR,WAAAgF,KAGMgM,KAAAhM,EAAE,mCAAmC,GAAChF,OAAAgF,GAAAhF,OAAAgR,MAAAA,KAAAhR,EAAA,CAAA;AAAA,MAAAmR;AAAAnR,WAAAgR,MADrDG,oCAACzC,GAAAA,MAAA,EACC,UAAA7N,2BAAAA,IAACqP,GAAAA,MAAA,EAAK,OAAA,IAAOc,UAAAA,GAAAA,CAAuC,GACtD,GAAOhR,OAAAgR,IAAAhR,QAAAmR,MAAAA,KAAAnR,EAAA,EAAA;AAAA,MAAAqR;AAAArR,YAAAgF,KAIsBqM,KAAArM,EAAE,WAAW,GAAChF,QAAAgF,GAAAhF,QAAAqR,MAAAA,KAAArR,EAAA,EAAA;AAAA,MAAAsR;AAAAtR,YAAAqR,MADvCC,oCAACxC,GAAAA,KAAA,EACC,UAAAjO,2BAAAA,IAACsd,GAAAA,OAAA,EAAW,MAAA,WAAW9M,UAAAA,GAAAA,CAAe,GACxC,GAAMrR,QAAAqR,IAAArR,QAAAsR,MAAAA,KAAAtR,EAAA,EAAA;AAAA,MAAAuR;AAAAvR,YAAAgF,KACNuM,KAAA1Q,2BAAAA,IAACqP,GAAAA,MAAA,EAAK,OAAA,IACJ,UAAArP,2BAAAA,IAACud,OAAAA,WAAA,EACIpZ,GACK,SAAA,qEAAmE,EAAA,CAE/E,GAAOhF,QAAAgF,GAAAhF,QAAAuR,MAAAA,KAAAvR,EAAA,EAAA;AAAA,MAAAsY;AAAAtY,IAAA,EAAA,MAAAsR,MAAAtR,UAAAuR,MAVX+G,MAAAzX,2BAAAA,IAAC6N,GAAAA,MAAA,EACC,UAAA0C,2BAAAA,KAACoD,GAAAA,OAAA,EAAa,OAAA,GACZlD,UAAAA;AAAAA,IAAAA;AAAAA,IAGAC;AAAAA,EAAAA,EAAAA,CAMF,GACF,GAAOvR,QAAAsR,IAAAtR,QAAAuR,IAAAvR,QAAAsY,OAAAA,MAAAtY,EAAA,EAAA;AAAA,MAAAuY;AAAAvY,YAAAgF,KACNuT,MAQQ,MACDvY,QAAAgF,GAAAhF,QAAAuY,OAAAA,MAAAvY,EAAA,EAAA;AAAA,MAAAwY;AAAAxY,YAAAgF,KAQDwT,MAAAxT,EAAE,wCAAwC,GAAChF,QAAAgF,GAAAhF,QAAAwY,OAAAA,MAAAxY,EAAA,EAAA;AAAA,MAAAyY;AAAAzY,YAAAwY,OANlDC,MAAA5X,2BAAAA,IAAC6N,GAAAA,MAAA,EACC,UAAA7N,2BAAAA,IAACqP,GAAAA,MAAA,EACC,UAAAkB,2BAAAA,KAAC,wBAAA,EACM,MAAA,2CACE,QAAA,UAENoH,UAAAA;AAAAA,IAAAA;AAAAA,IAA4C;AAAA,EAAA,EAAA,CAC/C,EAAA,CACF,EAAA,CACF,GAAOxY,QAAAwY,KAAAxY,QAAAyY,OAAAA,MAAAzY,EAAA,EAAA;AAAA,MAAA4Y;AAAA5Y,IAAA,EAAA,MAAAsY,OAAAtY,EAAA,EAAA,MAAAuY,OAAAvY,EAAA,EAAA,MAAAyY,OAAAzY,EAAA,EAAA,MAAA+Q,MAAA/Q,UAAAmR,MA1CXyH,MAAA/X,2BAAAA,IAAC,2BAAA,EACC,UAAAuQ,2BAAAA,KAACoD,GAAAA,OAAA,EAAa,OAAA,GACZzD,UAAAA;AAAAA,IAAAA;AAAAA,IAIAI;AAAAA,IAGAmH;AAAAA,IAaCC;AAAAA,IAWDE;AAAAA,EAAAA,EAAAA,CAUF,EAAA,CACF,GAA4BzY,QAAAsY,KAAAtY,QAAAuY,KAAAvY,QAAAyY,KAAAzY,QAAA+Q,IAAA/Q,QAAAmR,IAAAnR,QAAA4Y,OAAAA,MAAA5Y,EAAA,EAAA;AAAA,MAAA6Y;AAAA7Y,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAmB5BiQ,MAAAhY,2BAAAA,IAAC,KAAA,EAAW,OAAoD,WAAS,GAAIb,QAAA6Y,OAAAA,MAAA7Y,EAAA,EAAA;AAAA,MAAA8Y;AAAA9Y,YAAA4d,QAX/E9E,qCAACJ,GAAAA,QAAA,EACO2F,MAAAA,MAAAA,gBACD,MAAA,SACI,YACK,cAAA,GACT,MAAA,WACK,UAAA,GACLP,gBACIE,SAAAA,aACCJ,gBAEV/E,eACF,GAAS7Y,QAAA4d,MAAA5d,QAAA8Y,OAAAA,MAAA9Y,EAAA,EAAA;AAAA,MAAAiZ;AAAA,SAAAjZ,EAAA,EAAA,MAAA4d,QAAA5d,UAAA4Y,OAAA5Y,EAAA,EAAA,MAAA8Y,OAlEXG,qCAACqF,GAAAA,SAAA,EAEG,SAAA1F,KA8CQ,WAAA,gBACV,YACS,YACJmF,KAAAA,YACCH,MAEN9E,eAaF,GAAU9Y,QAAA4d,MAAA5d,QAAA4Y,KAAA5Y,QAAA8Y,KAAA9Y,QAAAiZ,OAAAA,MAAAjZ,EAAA,EAAA,GAnEViZ;AAmEU;AAlFP,SAAAmD,QAAAmC,GAAA;AAAA,SAAA,CAKiDA;AAAC;ACZzD,MAAMC,iCAGDne,CAAAA,OAAA;AAAA,QAAAL,IAAAC,uBAAA,CAAA,GAAC;AAAA,IAAAwe;AAAAA,IAAAzZ;AAAAA,EAAAA,IAAA3E,IACJ8E,OACE,OAAOsZ,kBAAiBC,uBAAyB,WAC7CD,kBAAiBC,oBAAAC,SAAA5H,QACjB0H,kBAAiB/T;AAAwB,MAAApK;AAAAN,IAAA,CAAA,MAAAye,qBAAAze,SAAAgF,KAEjC1E,KAAAmK,qBAAqBgU,iBAAiB,IAChD,IAAIzZ,EAAE,4CAA4C,CAAC,MACnDA,EAAE,4CAA4C,GAAChF,OAAAye,mBAAAze,OAAAgF,GAAAhF,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAFnD,QAAA4e,QAActe;AAEqC,MAAAM;AAAAZ,IAAA,CAAA,MAAA4e,SAAA5e,SAAAmF,QAG3CvE,KAAA,CAACuE,MAAMyZ,KAAK,EAAAvc,OAAA+Z,OAAgD,GAACpc,OAAA4e,OAAA5e,OAAAmF,MAAAnF,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AADrE,QAAA6P,OACQjP,GAA6Die,KAAM,GAAG,GAKpC/U,KAAA,CAACW,qBAAqBgU,iBAAiB;AAAC,MAAA1N;AAAA,SAAA/Q,EAAA,CAAA,MAAA8J,MAAA9J,SAAA6P,QAAhFkB,KAAAlQ,2BAAAA,IAAA,UAAA,EAAc,OAAA,iBAA0B,UAAAiJ,IACrC+F,UAAAA,KAAAA,CACH,GAAS7P,OAAA8J,IAAA9J,OAAA6P,MAAA7P,OAAA+Q,MAAAA,KAAA/Q,EAAA,CAAA,GAFT+Q;AAES;AAmBN,SAAA+N,gBAAAze,IAAA;AAAA,QAAAL,IAAAC,uBAAA,EAAA,GAAyB;AAAA,IAAA8e;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAzR;AAAAA,IAAA0R;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAA7Y;AAAAA,IAAA8Y;AAAAA,EAAAA,IAAAnf,IAc9Boe,oBAA0BgB,OAAAA,kBAC1B;AAAA,IAAAza;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC,GAChDgP,sBAA4BhX,MAAAA,OAAA,IAAoC;AAAC,MAAApI;AAAAN,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAC/BtI,KAAAA,MAAA;AAChC,UAAAqf,KAAWD,oBAAmB3W;AAAQ,QACjC4W;AAAE,UAAA;AAGLA,WAAEC,OAAAA,GACFvE,SAAAwE,YAAqB,MAAM;AAAA,MAAC,QAAA;AAE5BC,gBAAA/N,MAAc,gCAAgC;AAAA,MAAC;AAAA,EAAA,GAElD/R,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAVD,QAAA+f,gBAAsBzf;AAUhB,MAAAM;AAAAZ,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAIahI,KAAA,CAAA,GAAA,GAAA,GAAA,EAAA,GAAaZ,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AAAA,MAAA8J;AAAA9J,WAAAgF,KAKN8E,KAAA9E,EAAE,wBAAwB,GAAChF,OAAAgF,GAAAhF,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA;AAAA,MAAA+Q;AAAA/Q,WAAA8J,MAD3CiH,KAAAlQ,2BAAAA,IAAC6N,GAAAA,MAAA,EAAiB,YAAA,GAAkB,eAAA,GAClC,UAAA7N,2BAAAA,IAAC,aAAA,EAAaiJ,cAA4B,EAAA,CAC5C,GAAO9J,OAAA8J,IAAA9J,OAAA+Q,MAAAA,KAAA/Q,EAAA,CAAA;AAAA,MAAAgR;AAAAhR,WAAAmf,YAEJnO,KAAAmO,SAAQ9L,IAAAkJ,QAER,GAACvc,OAAAmf,UAAAnf,OAAAgR,MAAAA,KAAAhR,EAAA,CAAA;AAAA,MAAAmR;AAAAnR,IAAA,CAAA,MAAAgf,WAAAhf,SAAA+e,mBAAA/e,EAAA,EAAA,MAAAgR,MAHJG,oCAAC6O,GAAAA,QAAA,EAAchB,OAAAA,SAAmBD,UAAAA,iBAC/B/N,UAAAA,IAGH,GAAShR,OAAAgf,SAAAhf,OAAA+e,iBAAA/e,QAAAgR,IAAAhR,QAAAmR,MAAAA,KAAAnR,EAAA,EAAA;AAAA,MAAAqR;AAAArR,IAAA,EAAA,MAAA+Q,MAAA/Q,UAAAmR,MATbE,KAAAxQ,2BAAAA,IAACiO,GAAAA,OAAa,YAAW,QAAA,GACvB,0CAAC0F,UAAA,EACCzD,UAAAA;AAAAA,IAAAA;AAAAA,IAGAI;AAAAA,EAAAA,EAAAA,CAKF,GACF,GAAMnR,QAAA+Q,IAAA/Q,QAAAmR,IAAAnR,QAAAqR,MAAAA,KAAArR,EAAA,EAAA;AAAA,MAAAsR;AAAAtR,YAAAgF,KAMcsM,KAAAtM,EAAE,4BAA4B,GAAChF,QAAAgF,GAAAhF,QAAAsR,MAAAA,KAAAtR,EAAA,EAAA;AAAA,MAAAuR;AAAAvR,YAAAsR,MAD/CC,KAAA1Q,2BAAAA,IAAC6N,GAAAA,MAAA,EAAiB,YAAA,GAAkB,eAAA,GAClC,UAAA7N,2BAAAA,IAAC,aAAA,EAAayQ,cAAgC,EAAA,CAChD,GAAOtR,QAAAsR,IAAAtR,QAAAuR,MAAAA,KAAAvR,EAAA,EAAA;AAGE,QAAAsY,MAAA2G,0BAA6BzR,aAAa;AAAO,MAAA+K;AAAAvY,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAGvD2P,MAAA/Y,aAAA6T,IAAA4M,QAEA,GAACjgB,QAAAuY,OAAAA,MAAAvY,EAAA,EAAA;AAAA,MAAAwY;AAAAxY,YAAAgF,KAECwT,MAAAxT,EAAE,kCAAkC,GAAChF,QAAAgF,GAAAhF,QAAAwY,OAAAA,MAAAxY,EAAA,EAAA;AAAA,MAAAyY;AAAAzY,YAAAwY,OADxCC,MAAA5X,2BAAAA,IAAA,UAAA,EAA0B,OAAA,SACvB2X,UAAAA,IAAAA,GADS,OAEZ,GAASxY,QAAAwY,KAAAxY,QAAAyY,OAAAA,MAAAzY,EAAA,EAAA;AAAA,MAAA4Y;AAAA5Y,IAAA,EAAA,MAAAkf,sBAAAlf,UAAAsY,OAAAtY,EAAA,EAAA,MAAAyY,OAVXG,sCAACoH,WAAA,EACa,eAAA,wBACL,OAAA1H,KACG4G,UAAAA,oBAET3G,UAAAA;AAAAA,IAAAA;AAAAA,IAGDE;AAAAA,EAAAA,GAGF,GAASzY,QAAAkf,oBAAAlf,QAAAsY,KAAAtY,QAAAyY,KAAAzY,QAAA4Y,OAAAA,MAAA5Y,EAAA,EAAA;AAAA,MAAA6Y;AAAA7Y,IAAA,EAAA,MAAA4Y,OAAA5Y,UAAAuR,MAhBbsH,MAAAhY,2BAAAA,IAACiO,GAAAA,OAAa,YAAW,QAAA,GACvB,0CAAC0F,UAAA,EACCjD,UAAAA;AAAAA,IAAAA;AAAAA,IAGAqH;AAAAA,EAAAA,EAAAA,CAYF,GACF,GAAM5Y,QAAA4Y,KAAA5Y,QAAAuR,IAAAvR,QAAA6Y,OAAAA,MAAA7Y,EAAA,EAAA;AAAA,MAAA8Y;AAAA9Y,IAAA,EAAA,MAAAif,oBAAAjf,EAAA,EAAA,MAAAof,8BAAApf,EAAA,EAAA,MAAAsf,qBAAAtf,EAAA,EAAA,MAAAqf,4BAAArf,UAAAgF,KAGL8T,MAAAmG,qBAAgB,MACfpe,2BAAAA,IAACiO,GAAAA,KAAA,EAAa,SAAA,GAAW,QAAA,GACvB,0CAAC0F,GAAAA,OAAA,EACC,UAAA;AAAA,IAAA3T,2BAAAA,IAAC6N,GAAAA,MAAA,EAAiB,YAAA,GAAkB,eAAA,GAClC,UAAA7N,2BAAAA,IAAC,aAAA,EAAyB,cAAA,YACvBmE,UAAAA,EAAE,mCAAmC,EAAA,CACxC,GACF;AAAA,IAEAnE,2BAAAA,IAACqY,GAAAA,WAAA,EACMkG,KAAAA,4BACEH,yBACGI,UAAAA,0BAER,gBAAAC,oBAAiB1N,SAAe5M,EAAE,oCAAoC,GAE7D,WAAA,GAAA,CAAE;AAAA,EAAA,EAAA,CAEjB,EAAA,CACF,GACDhF,QAAAif,kBAAAjf,QAAAof,4BAAApf,QAAAsf,mBAAAtf,QAAAqf,0BAAArf,QAAAgF,GAAAhF,QAAA8Y,OAAAA,MAAA9Y,EAAA,EAAA;AAAA,MAAAiZ;AAAAjZ,YAAAgF,KAQuBiU,MAAAjU,EAAE,4BAA4B,GAAChF,QAAAgF,GAAAhF,QAAAiZ,OAAAA,MAAAjZ,EAAA,EAAA;AAAA,MAAAkgB;AAAAlgB,YAAAiZ,OAD/CiH,MAAArf,2BAAAA,IAACiO,QAAA,EACC,UAAAjO,2BAAAA,IAAC,aAAA,EAAaoY,UAAAA,KAAgC,EAAA,CAChD,GAAMjZ,QAAAiZ,KAAAjZ,QAAAkgB,OAAAA,MAAAlgB,EAAA,EAAA;AAAA,MAAAmgB;AAAAngB,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAENuX,MAAAtf,2BAAAA,IAACiO,GAAAA,KAAA,EACC,yCAAC,oBAAA,CAAA,CAAkB,EAAA,CACrB,GAAM9O,QAAAmgB,OAAAA,MAAAngB,EAAA,EAAA;AAAA,MAAAogB;AAAApgB,YAAAkgB,OARVE,MAAAvf,2BAAAA,IAAC6N,GAAAA,MAAA,EAAoB,kBACnB,UAAA0C,2BAAAA,KAAC8M,GAAAA,QAAA,EAAc,UACbgC,UAAAA;AAAAA,IAAAA;AAAAA,IAIAC;AAAAA,EAAAA,EAAAA,CAGF,EAAA,CACF,GAAOngB,QAAAkgB,KAAAlgB,QAAAogB,OAAAA,MAAApgB,EAAA,EAAA;AACQ,QAAAqgB,MAAAb,eAAe;AAAS,MAAAc;AAAAtgB,IAAA,EAAA,MAAAye,qBAAAze,UAAAgF,KACpCsb,MAAApW,uBAAAmJ,IAAAkN,CAAAA,oBACKA,oBAAoB,kDAEnBC,MAAAA,UAAA,EACC,UAAA;AAAA,IAAA3f,2BAAAA,IAAC,gCAAA,EAAkD4d,mBAAsBzZ,EAAAA,CAAC;AAAA,mCAC1E,UAAA,EAA4B,OAAA,WACzBA,UAAAA,EAAE,+BAA+B,KADxB,SAEZ;AAAA,2CACM;AAAA,EAAA,EAAA,GALM,eAMd,IAGGnE,2BAAAA,IAAA,UAAA,EAA+B0f,6BAAlBA,eAAkC,CACvD,GAACvgB,QAAAye,mBAAAze,QAAAgF,GAAAhF,QAAAsgB,OAAAA,MAAAtgB,EAAA,EAAA;AAAA,MAAAygB;AAAAzgB,IAAA,EAAA,MAAAuf,uBAAAvf,UAAAqgB,OAAArgB,EAAA,EAAA,MAAAsgB,OAdJG,qCAACT,GAAAA,QAAA,EAAc,OAAAK,KAAoCd,UAAAA,qBAChDe,UAAAA,KAcH,GAAStgB,QAAAuf,qBAAAvf,QAAAqgB,KAAArgB,QAAAsgB,KAAAtgB,QAAAygB,OAAAA,MAAAzgB,EAAA,EAAA;AAAA,MAAA0gB;AAAA1gB,IAAA,EAAA,MAAAogB,OAAApgB,UAAAygB,OA5BbC,MAAA7f,2BAAAA,IAACiO,GAAAA,OAAa,YAAW,QAAA,GACvB,0CAAC0F,UAAA,EACC4L,UAAAA;AAAAA,IAAAA;AAAAA,IAWAK;AAAAA,EAAAA,EAAAA,CAgBF,GACF,GAAMzgB,QAAAogB,KAAApgB,QAAAygB,KAAAzgB,QAAA0gB,OAAAA,MAAA1gB,EAAA,EAAA;AAAA,MAAA2gB;AAAA3gB,IAAA,EAAA,MAAAif,oBAAAjf,UAAAgF,KAAAhF,EAAA,EAAA,MAAA0G,OAGLia,aAAOja,OAAQ,WACd7F,2BAAAA,IAACiO,GAAAA,KAAA,EAAa,SAAA,GAAS,SAAW,QAAAmQ,qBAAgB,KAAU,IAAA,GAC1D,UAAA7N,2BAAAA,KAACoD,GAAAA,OAAA,EACC,UAAA;AAAA,IAAA3T,2BAAAA,IAAC6N,GAAAA,QAAiB,YAAA,GAAkB,kBAClC,0CAAC,aAAA,EACE1J,UAAAA;AAAAA,MAAAA,EAAE,WAAW;AAAA,MAAE;AAAA,MAChBoM,2BAAAA,KAAC,eAAA,EAAuB2O,SAAAA,eAAe,UAAA;AAAA,QAAA;AAAA,QACnC/a,EAAE,8BAA8B;AAAA,QAAE;AAAA,MAAA,EAAA,CACtC;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IACAoM,2BAAAA,KAAC5C,GAAAA,MAAA,EAAW,MAAA,GAAQ,QAClB,UAAA;AAAA,MAAA3N,2BAAAA,IAACiO,GAAAA,KAAA,EAAU,MAAA,GACT,UAAAjO,2BAAAA,IAACqY,GAAAA,WAAA,EAAU,cAAc,MAAA,OAAWwG,KAAAA,qBAA4BhZ,OAAAA,QAClE;AAAA,MACA7F,+BAACoQ,GAAAA,WAAiB,SAAAjM,EAAE,8BAA8B,GAChD,UAAAnE,2BAAAA,IAAC6X,GAAAA,UACa,cAAA1T,EAAE,8BAA8B,GACvC,MAAA,UACA,MAAA,SACC4b,sBACGb,SAAAA,eAAa,EAAA,CAE1B;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF,IAEAlf,2BAAAA,IAACiO,GAAAA,KAAA,EAAU,SAAC,GACb9O,QAAAif,kBAAAjf,QAAAgF,GAAAhF,QAAA0G,KAAA1G,QAAA2gB,OAAAA,MAAA3gB,EAAA,EAAA;AAAA,MAAA6gB;AAAA,SAAA7gB,EAAA,EAAA,MAAA6Y,OAAA7Y,EAAA,EAAA,MAAA8Y,OAAA9Y,EAAA,EAAA,MAAA0gB,OAAA1gB,EAAA,EAAA,MAAA2gB,OAAA3gB,UAAAqR,MA3HLwP,qCAAC,QAAA,EAAiB,UAAA,GAAa,UAAA,GAC7B,UAAAzP,2BAAAA,KAAC0P,GAAAA,MAAA,EAAc,SAAAlgB,IAEbyQ,UAAAA;AAAAA,IAAAA;AAAAA,IAcAwH;AAAAA,IAqBCC;AAAAA,IAuBD4H;AAAAA,IAiCCC;AAAAA,EAAAA,EAAAA,CA8BH,EAAA,CACF,GAAS3gB,QAAA6Y,KAAA7Y,QAAA8Y,KAAA9Y,QAAA0gB,KAAA1gB,QAAA2gB,KAAA3gB,QAAAqR,IAAArR,QAAA6gB,OAAAA,MAAA7gB,EAAA,EAAA,GA7HT6gB;AA6HS;AA3JN,SAAAZ,SAAA3S,SAAA;AAAA,SA0DSzM,2BAAAA,IAAA,UAAA,EAAuByM,UAAAA,QAAAA,GAAVA,OAAkB;AAAS;AA1DjD,SAAAiP,SAAAwE,IAAA;AAAA,SAwCSlgB,2BAAAA,IAAA,UAAA,EAAkBkgB,UAAAA,GAAAA,GAALA,EAAQ;AAAS;AA7EzC,SAAA3E,QAAA/Q,OAAA;AAAA,SAWqC,OAAOA,QAAU;AAAW;ACnCtE,SAAS2V,WAAWC,SAAiBC,UAA0B;AAC7D,SAAOC,IAAIC,gBACT,IAAIC,KAAK,CAACJ,OAAO,GAAG;AAAA,IAClBK,MAAMJ;AAAAA,EAAAA,CACP,CACH;AACF;AAEA,SAASK,2BAA2BL,UAAkBM,eAAuC;AAC3F,SAAQ,uBAAM;AACZ,QAAIC,aAAa,IACbC,cAAc;AAClB,WAAQC,CAAAA,UAAmB;AACzB,YAAMV,UAAUO,cAAcG,KAAK;AACnC,UAAI,EAAA,OAAOV,WAAY,YAAYA,YAAY;AAI/C,eAAIA,YAAYS,gBAIhBA,cAAcT,SACVQ,cACFN,IAAIS,gBAAgBH,UAAU,GAGhCA,aAAaT,WAAWC,SAASC,QAAQ,IAClCO;AAAAA,IACT;AAAA,EACF,GAAA;AACF;AAEO,MAAMI,iBAAiBN,2BAA2B,oBAAqBI,CAAAA,UAC5EnW,KAAKC,UAAUkW,OAAO,MAAM,CAAC,CAC/B,GAEaG,gBAAgBP,2BAA2B,YAAaI,CAAAA,UAC5DI,kBAAS5T,MAAMC,QAAQuT,KAAK,IAAIA,QAAQ,CAACA,KAAK,CAAC,EAAEhU,KAAAA,CACzD,GCtCYqU,YAAYha,iBAAAA,OAAO4S,OAAI;AAAA,WACzB,CAAC;AAAA,EAACpY;AAAK,MAAMA,MAAMO,OAAOF,MAAMof,MAAMC,SAASjf,QAAQS,EAAE;AAAA;ACa7D,SAAAye,kBAAA9hB,IAAA;AAAA,QAAAL,IAAAC,uBAAA,CAAA,GAA2B;AAAA,IAAA8R;AAAAA,EAAAA,IAAA1R,IAChC;AAAA,IAAA2E;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC;AAAC,MAAA,EAE3C,aAAaqB;AAAK,WAAA;AAIxB,QAAAqQ,UAAA;AAAA,IAAA,GAAoBrQ,MAAKqQ;AAAAA,IAAA,GAAaC,mBAAmBtQ,MAAKqQ,OAAQ;AAAA,EAAA;AAAE,MAAA,CACnEA,QAAOE;AAAA,WAAA;AAMa,QAAAhiB,KAAA,GAAG8hB,QAAOE,IAAA;AAAA,EAAUC,SACvCH,QAAOI,QACPJ,QAAOK,SACT,CAAC;AAAE,MAAA7hB;AAAAZ,WAAAM,MAHHM,KAAAC,+BAAC,WAAA,EAAgB,MAAA,GAAIP,UAAAA,IAGjB,GAAYN,OAAAM,IAAAN,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AAEO,QAAA8J,KAAA,GAAG9E,EAAE,kBAAkB,CAAC,OAAOod,QAAOM,UAAA;AAAA,EAAgB1d,EACzE,oBACF,CAAC,KAAKod,QAAOI,MAAA;AAAS,MAAAzR;AAAA/Q,WAAA8J,MAHxBiH,KAAAlQ,2BAAAA,IAACiO,GAAAA,KAAA,EAAe,WAAA,GACd,UAAAjO,2BAAAA,IAAC,WAAA,EAAgB,MAAA,GAAIiJ,cAEE,EAAA,CACzB,GAAM9J,OAAA8J,IAAA9J,OAAA+Q,MAAAA,KAAA/Q,EAAA,CAAA;AAAA,MAAAgR;AAAA,SAAAhR,EAAA,CAAA,MAAAY,MAAAZ,SAAA+Q,MATRC,KAAAI,2BAAAA,KAAA,OAAA,EACExQ,UAAAA;AAAAA,IAAAA;AAAAA,IAIAmQ;AAAAA,EAAAA,EAAAA,CAKF,GAAM/Q,OAAAY,IAAAZ,OAAA+Q,IAAA/Q,OAAAgR,MAAAA,KAAAhR,EAAA,CAAA,GAVNgR;AAUM;AAIV,SAASqR,mBAAmBD,SAA2C;AACrE,MAAI,CAACA,WAAW,OAAOA,QAAQrX,SAAU,YAAY,OAAOqX,QAAQO,SAAU;AAC5E,WAAO,CAAA;AAGT,QAAM;AAAA,IAAC5X;AAAAA,IAAO4X;AAAAA,IAAOC;AAAAA,EAAAA,IAAOR,SACtBS,YAAY9X,MAAMlL,MAAM,GAAG8iB,KAAK,EAAEG,YAAY;AAAA,CAAI,IAAI,GACtDJ,cAAc3X,MAAMlL,MAAM,GAAGgjB,SAAS,EAAEE,MAAM,KAAK,KAAK,CAAA,GAAItZ,QAC5D6Y,OAAOvX,MAAMlL,MAAMgjB,WAAW9X,MAAMiY,QAAQ;AAAA,GAAMH,SAAS,CAAC,GAC5DL,SAASG,QAAQE,WACjBJ,YAAY,OAAOG,OAAQ,WAAWA,MAAMC,YAAYjR;AAE9D,SAAO;AAAA,IAAC0Q;AAAAA,IAAMI;AAAAA,IAAYF;AAAAA,IAAQC;AAAAA,EAAAA;AACpC;AAEA,SAASF,SAASC,QAAgBC,WAAuC;AACvE,QAAMH,OAAO,IAAIW,OAAOT,MAAM,GACxBU,OAAO,IAAID,OAAOR,YAAYA,YAAYD,SAAS,CAAC;AAC1D,SAAO,GAAGF,IAAI,GAAGY,IAAI;AACvB;AC1DO,SAAAC,iBAAApjB,OAAA;AAAA,QAAAC,IAAAC,qBAAAA,EAAA,CAAA;AAAA,MAAAI;AAAAL,IAAA,CAAA,MAAAD,MAAAgS,MAAAzD,WAGDjO,oCAAC,WAAA,EAAgB,SAAIN,UAAAA,MAAKgS,MAAAzD,QAAAA,CAAe,GAAYtO,EAAA,CAAA,IAAAD,MAAAgS,MAAAzD,SAAAtO,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAAA,MAAAM;AAAAN,IAAA,CAAA,MAAAD,MAAAgS,SACrDzR,KAAAO,2BAAAA,IAAC,mBAAA,EAAyB,OAAAd,MAAKgS,MAAAA,CAAM,GAAI/R,EAAA,CAAA,IAAAD,MAAAgS,OAAA/R,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,CAAA,MAAAK,MAAAL,SAAAM,MAF3CM,qCAAC4T,GAAAA,OAAA,EAAa,OAAA,GAAc,cAC1BnU,UAAAA;AAAAA,IAAAA;AAAAA,IACAC;AAAAA,EAAAA,EAAAA,CACF,GAAQN,OAAAK,IAAAL,OAAAM,IAAAN,OAAAY,MAAAA,KAAAZ,EAAA,CAAA,GAHRY;AAGQ;ACPL,MAAMwiB,oBAAoBpb,iBAAAA,OAAOC,IAAoB,CAAC;AAAA,EAACzF;AAAK,MAAM;AACvE,QAAM;AAAA,IAACK,OAAAA;AAAAA,IAAOC;AAAAA,IAAOoF;AAAAA,EAAAA,IAAS1F,MAAMO;AAEpC,SAAOyM,iBAAAA;AAAAA;AAAAA;AAAAA,qBAGY1M,MAAMiB,KAAKC,MAAM;AAAA,mBACnBlB,MAAMiB,KAAKI,MAAM,CAAC,EAAEF,QAAQ;AAAA,qBAC1BnB,MAAMiB,KAAKI,MAAM,CAAC,EAAEC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,sBAK7BF,OAAIgE,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,qBAIdhE,OAAIgE,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAmCFhE,OAAIgE,MAAM,CAAC,CAAC,CAAC;AAAA,mBAC1BpF,MAAMiB,KAAKI,MAAM,CAAC,EAAEF,QAAQ;AAAA,qBAC1BnB,MAAMiB,KAAKI,MAAM,CAAC,EAAEC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAQhCtB,MAAMiB,KAAKI,MAAM,CAAC,EAAEF,QAAQ;AAAA,qBAC1BnB,MAAMiB,KAAKI,MAAM,CAAC,EAAEC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAS9BF,GAAAA,IAAIgE,MAAM,CAAC,IAAI,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAavBrF,OAAM+B,OAAOW,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,eAKrB1C,OAAM+B,OAAOe,QAAQ;AAAA;AAAA;AAAA;AAAA,qBAIfzB,OAAIgE,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,eAInBrF,OAAM+B,OAAOmC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,eAKnBlE,OAAM+B,OAAO+C,OAAO;AAAA;AAAA;AAAA;AAAA,eAIpB9E,OAAM+B,OAAOsB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBlC,CAAC,GC1HKmd,MAAM,IAAIC,aAAAA,QAAI;AAAA,EAACvH,SAAS;AAAK,CAAC;AAE7B,SAAAwH,WAAAxjB,OAAA;AAAA,QAAAC,IAAAC,uBAAA,CAAA,GACL;AAAA,IAAAqT;AAAAA,IAAAkQ;AAAAA,EAAAA,IAA4BzjB,OAC5B0jB,mBAAyBC,kBAAAA;AAAY,MAEjCC,SAASrQ,IAAI,KAAKnF,MAAAC,QAAckF,IAAI,GAAC;AAQf,UAAAjT,MAAAojB,qBAAqBD,cAAWI,oBAAAhS;AAAgC,QAAAtR;AAAA,WAAAN,EAAA,CAAA,MAAAsT,QAAAtT,SAAAK,OANtFC,MAAAO,2BAAAA,IAAC,qBACC,UAAAA,2BAAAA,IAACgjB,mBAAAA,eAAA,EACOvQ,MACE,QAAA,IACIwQ,YACHC,yBACS,kBAAA1jB,IAAAA,CAAgE,GAEtF,GAAoBL,OAAAsT,MAAAtT,OAAAK,KAAAL,OAAAM,OAAAA,MAAAN,EAAA,CAAA,GARpBM;AAAAA,EAQoB;AAAA,MAAAD;AAAAL,WAAAsT,QAIMjT,KAAAmL,KAAAC,UAAe6H,IAAI,GAACtT,OAAAsT,MAAAtT,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAAA,MAAAM;AAAA,SAAAN,SAAAK,MAA3CC,KAAAO,+BAAC+Z,GAAAA,MAAA,EAAc,UAAA,QAAQva,UAAAA,GAAAA,CAAqB,GAAOL,OAAAK,IAAAL,OAAAM,MAAAA,KAAAN,EAAA,CAAA,GAAnDM;AAAmD;AAG5D,SAAAsjB,kBAAA7jB,OAAA;AAAA,QAAAC,IAAAC,qBAAAA,EAAA,CAAA;AAAA,MACMF,MAAKikB,SAAW,CAACjkB,MAAKkkB,QAAAC,SAAkB,KAAK,MAAMnkB,MAAKkkB,QAAAC,SAAkB,MAAM;AAAE,WAAA;AAAA,MAAA7jB;AAAAL,IAAA,CAAA,MAAAD,MAAAsL,SAKlDhL,KAAA;AAAA,IAAA8jB,IAAKpkB,MAAKsL;AAAAA,EAAAA,GAAOrL,EAAA,CAAA,IAAAD,MAAAsL,OAAArL,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAAA,MAAAM;AAAAN,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KACjDtI,KAAAO,2BAAAA,IAACujB,MAAAA,UAAA,CAAA,CAAQ,GAAGpkB,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAAA,MAAAY;AAAA,SAAAZ,SAAAK,MADdO,oCAACyjB,OAAAA,YAAA,EAAkB,QAAA,QAAe,QAAAhkB,IAChCC,UAAAA,GAAAA,CACF,GAAaN,OAAAK,IAAAL,OAAAY,MAAAA,KAAAZ,EAAA,CAAA,GAFbY;AAEa;AAIjB,SAASkjB,WAAWQ,SAAiBjZ,OAAyB;AAE5D,QAAMkZ,SAASlB,IAAI5W,IAAI6X,OAAO;AAE9B,MAAI,OAAOC,UAAW;AACpB,WAAOA;AAGT,QAAMC,WAAWF,QAAQ3kB,MAAM,KAAK8kB,CAAU;AAC9C,SAAID,SAAS/a,WAAWgb,IACf,KAGLtW,MAAMC,QAAQ/C,KAAK,IACd,KAGFsY,SAAStY,KAAK,KAAK,CAACmZ,SAASnO,KAAMrU,CAAAA,QAAQ0iB,oBAAoB1iB,GAAG,CAAC;AAC5E;AAEA,SAAS+hB,eAAehL,OAA6B;AACnD,QAAM;AAAA,IAAC4L;AAAAA,EAAAA,IAAQ5L,OACThQ,UAAUsa,IAAI5W,IAAIkY,IAAI;AAExB5b,cAAY6I,UAKhByR,IAAIjY,IAAIuZ,MAAM,CAAC5b,OAAO;AACxB;AAEA,SAAS4a,SAAStY,OAAkD;AAClE,SAAOA,UAAU,QAAQ,OAAOA,SAAU,YAAY,CAAC8C,MAAMC,QAAQ/C,KAAK;AAC5E;AAEA,MAAMuZ,UAAU;AAChB,SAASF,oBAAoBG,SAAiBC,QAAQ,IAAI;AACxD,SAAOF,QAAQ/W,KAAKgX,OAAO,KAAKE,SAASF,SAAS,EAAE,IAAIC;AAC1D;ACxEA,SAASE,YAAYC,KAAoC;AACvD,SAAOA,IAAIC,eAAAA;AACb;AAEO,SAAAC,cAAA9kB,IAAA;AAAA,QAAAL,IAAAC,uBAAA,CAAA,GAAuB;AAAA,IAAAmlB;AAAAA,EAAAA,IAAA/kB,IAC5B;AAAA,IAAA2E;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC,GAChD2U,cAAoBD,SAMN9kB,KAAA+kB,aAAUzT,SAAe,oBAI1BhR,KAAAykB,aAAUL,cAAApT;AAA0B,MAAA9H;AAAA9J,IAAA,CAAA,MAAAolB,WAAAplB,EAAA,CAAA,MAAAqlB,cAAArlB,EAAA,CAAA,MAAAM,MAAAN,SAAAY,MAP/CkJ,KAAAjJ,2BAAAA,IAAC6X,GAAAA,QAAA,EACI,IAAA,KACO2M,UAAAA,YACA,UAAA/kB,IACJ8kB,MAAAA,SACAE,+BACD,MAAA,SACI,SAAA1kB,IAEJ,MAAA,OACA,MAAA,WAAS,GACdZ,OAAAolB,SAAAplB,OAAAqlB,YAAArlB,OAAAM,IAAAN,OAAAY,IAAAZ,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA;AAZJ,QAAAulB,SACEzb;AAYD,MAAAiH;AAAA,SAAA/Q,EAAA,CAAA,MAAAulB,UAAAvlB,SAAAqlB,cAAArlB,EAAA,CAAA,MAAAgF,KAEM+L,KAAAsU,aACLxkB,2BAAAA,IAACoQ,YAAA,EAAiB,SAAAjM,EAAE,6CAA6C,GAAa,WAAA,OAC3EugB,kBACH,IAEAA,QACDvlB,OAAAulB,QAAAvlB,OAAAqlB,YAAArlB,OAAAgF,GAAAhF,OAAA+Q,MAAAA,KAAA/Q,EAAA,CAAA,GANM+Q;AAMN;AAGI,SAAAyU,eAAAnlB,IAAA;AAAA,QAAAL,IAAAC,uBAAA,CAAA,GAAwB;AAAA,IAAAmlB;AAAAA,EAAAA,IAAA/kB;AAA0B,MAAAC;AAAA,SAAAN,SAAAolB,WAErD9kB,KAAAO,2BAAAA,IAAC6X,WAAA,EACI,IAAA,KACO,UAAA,qBACJ0M,eACAE,MAAAA,MAAAA,mBACD,MAAA,SAEA,MAAA,QACA,MAAA,UAAA,CAAS,GACdtlB,OAAAolB,SAAAplB,OAAAM,MAAAA,KAAAN,EAAA,CAAA,GATFM;AASE;ACnBC,SAAAmlB,gBAAAplB,IAAA;AAAA,QAAAL,IAAAC,uBAAA,EAAA,GAAyB;AAAA,IAAA8R;AAAAA,IAAAkL;AAAAA,IAAAyI;AAAAA,IAAA1I;AAAAA,IAAA2I;AAAAA,IAAA3G;AAAAA,IAAA4G;AAAAA,IAAAC;AAAAA,EAAAA,IAAAxlB,IAU9B;AAAA,IAAA2E;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC,GAChDoV,YAAkB,CAAC/T,SAAK,CAAKkL,mBAAmB,OAAOyI,cAAgB;AAAW,MAAAplB;AAAAN,IAAA,CAAA,MAAA8lB,aAAA9lB,SAAA0lB,eAElEplB,KAAAwlB,YAAYjE,eAAe6D,WAAW,IAAI,IAAE1lB,OAAA8lB,WAAA9lB,OAAA0lB,aAAA1lB,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAA5D,QAAA+lB,UAAgBzlB;AAA4C,MAAAM;AAAAZ,IAAA,CAAA,MAAA8lB,aAAA9lB,SAAA0lB,eAC7C9kB,KAAAklB,YAAYhE,cAAc4D,WAAW,IAAI,IAAE1lB,OAAA8lB,WAAA9lB,OAAA0lB,aAAA1lB,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AAA1D,QAAAgmB,SAAeplB,IAQDkJ,KAAAiI,QAAQ,aAAa,WACfhB,KAAAzO,CAAAA,CAAQyP;AAAM,MAAAf;AAAAhR,WAAAgF,KAKAgM,KAAAhM,EAAE,cAAc,GAAChF,OAAAgF,GAAAhF,OAAAgR,MAAAA,KAAAhR,EAAA,CAAA;AAAA,MAAAmR;AAAAnR,WAAAgR,MAFzCG,KAAAtQ,2BAAAA,IAAC,0BAAA,EACC,UAAAA,2BAAAA,IAACiO,GAAAA,KAAA,EAAgB,YAAA,GACf,UAAAjO,2BAAAA,IAAC,aAAA,EAAY,OAAA,IAAOmQ,UAAAA,GAAAA,CAAkB,EAAA,CACxC,EAAA,CACF,GAA2BhR,OAAAgR,IAAAhR,OAAAmR,MAAAA,KAAAnR,EAAA,CAAA;AAAA,MAAAqR;AAAArR,IAAA,EAAA,MAAAgd,oBAAAhd,UAAA2lB,mBAAA3lB,EAAA,EAAA,MAAAid,mBAExB5L,MAAC4L,mBAAoBD,oBAAoB2I,gBAAelc,WAAA,MACvD5I,+BAACiO,GAAAA,OAAe,WAAA,GACd,yCAAC,gBAAA,CAAA,CAAc,GACjB,GACD9O,QAAAgd,kBAAAhd,QAAA2lB,iBAAA3lB,QAAAid,iBAAAjd,QAAAqR,MAAAA,KAAArR,EAAA,EAAA;AAAA,MAAAsR;AAAAtR,YAAA+R,SACAT,KAAAS,SAASlR,2BAAAA,IAAC,oBAAwBkR,MAAAA,CAAK,GAAI/R,QAAA+R,OAAA/R,QAAAsR,MAAAA,KAAAtR,EAAA,EAAA;AAAA,MAAAuR;AAAAvR,IAAA,EAAA,MAAAgf,WAAAhf,UAAA8lB,aAAA9lB,EAAA,EAAA,MAAA0lB,eAC3CnU,KAAAuU,aAAajlB,2BAAAA,IAAC,YAAA,EAAiB6kB,MAAAA,aAA0B1G,aAAAA,QAAAA,CAAO,GAAIhf,QAAAgf,SAAAhf,QAAA8lB,WAAA9lB,QAAA0lB,aAAA1lB,QAAAuR,MAAAA,KAAAvR,EAAA,EAAA;AAAA,MAAAsY;AAAAtY,IAAA,EAAA,MAAAgf,WAAAhf,UAAAgd,oBAAAhd,EAAA,EAAA,MAAA2lB,mBACpErN,MAAA0E,oBAAoB2I,gBAAelc,SAAA,KAClC5I,2BAAAA,IAAC,cAAiB8kB,uBAA8B3G,aAAAA,QAAAA,CAAO,GACxDhf,QAAAgf,SAAAhf,QAAAgd,kBAAAhd,QAAA2lB,iBAAA3lB,QAAAsY,OAAAA,MAAAtY,EAAA,EAAA;AAAA,MAAAuY;AAAAvY,IAAA,EAAA,MAAAsY,OAAAtY,EAAA,EAAA,MAAAqR,MAAArR,EAAA,EAAA,MAAAsR,MAAAtR,UAAAuR,MAVHgH,sCAACzJ,GAAAA,KAAA,EAAa,YAAe,YAAA,GAC1BuC,UAAAA;AAAAA,IAAAA;AAAAA,IAKAC;AAAAA,IACAC;AAAAA,IACA+G;AAAAA,EAAAA,GAGH,GAAMtY,QAAAsY,KAAAtY,QAAAqR,IAAArR,QAAAsR,IAAAtR,QAAAuR,IAAAvR,QAAAuY,OAAAA,MAAAvY,EAAA,EAAA;AAAA,MAAAwY;AAAAxY,IAAA,EAAA,MAAAuY,OAAAvY,UAAAmR,MAjBRqH,MAAApH,2BAAAA,KAAC,QAAA,EAAgB,UAAA,QACfD,UAAAA;AAAAA,IAAAA;AAAAA,IAKAoH;AAAAA,EAAAA,EAAAA,CAYF,GAASvY,QAAAuY,KAAAvY,QAAAmR,IAAAnR,QAAAwY,OAAAA,MAAAxY,EAAA,EAAA;AAAA,MAAAyY;AAAAzY,IAAA,EAAA,MAAAwY,OAAAxY,UAAA8J,MAAA9J,EAAA,EAAA,MAAA+Q,MAzBb0H,qCAAC,wBAA2B,SAC1B,yCAAC,iBAAA,EACO,MAAA,GACG,UAAA,UACH,MAAA3O,IACM,YAAAiH,IAEZyH,eAmBF,GACF,GAAuBxY,QAAAwY,KAAAxY,QAAA8J,IAAA9J,QAAA+Q,IAAA/Q,QAAAyY,OAAAA,MAAAzY,EAAA,EAAA;AAAA,MAAA4Y;AAAA5Y,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAE0BgQ,MAAA,CAAC,UAAU,UAAU,KAAK,GAAC5Y,QAAA4Y,OAAAA,MAAA5Y,EAAA,EAAA;AAAA,MAAA6Y;AAAA7Y,YAAAgF,KAKjE6T,MAAA7T,EAAE,6BAA6B,GAAChF,QAAAgF,GAAAhF,QAAA6Y,OAAAA,MAAA7Y,EAAA,EAAA;AAAA,MAAA8Y;AAAA9Y,IAAA,EAAA,MAAA4lB,aAAA5lB,UAAAgF,KAChC8T,MAAA,OAAO8M,aAAc,WAClB,GAAGA,SAAS,OACZ5gB,EAAE,8BAA8B,GAAChF,QAAA4lB,WAAA5lB,QAAAgF,GAAAhF,QAAA8Y,OAAAA,MAAA9Y,EAAA,EAAA;AAAA,MAAAiZ;AAAAjZ,IAAA,EAAA,MAAA6Y,OAAA7Y,UAAA8Y,OALzCG,MAAApY,2BAAAA,IAACiO,GAAAA,KAAA,EACC,UAAAsC,2BAAAA,KAAClB,GAAAA,MAAA,EAAK,OAAA,IACH2I,UAAAA;AAAAA,IAAAA;AAAAA,IAAiC;AAAA,IAAE;AAAA,IACnCC;AAAAA,EAAAA,EAAAA,CAGH,GACF,GAAM9Y,QAAA6Y,KAAA7Y,QAAA8Y,KAAA9Y,QAAAiZ,OAAAA,MAAAjZ,EAAA,EAAA;AAAA,MAAAkgB;AAAAlgB,YAAAgF,KAGDkb,MAAAlb,EAAE,8BAA8B,GAAChF,QAAAgF,GAAAhF,QAAAkgB,OAAAA,MAAAlgB,EAAA,EAAA;AAAA,MAAAmgB;AAAAngB,IAAA,EAAA,MAAA6lB,WAAA7lB,UAAAgF,KACjCmb,MAAA,OAAO0F,WAAY,WAAW,GAAGA,OAAO,OAAO7gB,EAAE,8BAA8B,GAAChF,QAAA6lB,SAAA7lB,QAAAgF,GAAAhF,QAAAmgB,OAAAA,MAAAngB,EAAA,EAAA;AAAA,MAAAogB;AAAApgB,IAAA,EAAA,MAAAkgB,OAAAlgB,UAAAmgB,OAHrFC,MAAAvf,2BAAAA,IAACiO,GAAAA,OAAgB,YAAA,GACf,UAAAsC,2BAAAA,KAAClB,GAAAA,MAAA,EAAK,OAAA,IACHgQ,UAAAA;AAAAA,IAAAA;AAAAA,IAAkC;AAAA,IAAE;AAAA,IACpCC;AAAAA,EAAAA,EAAAA,CACH,GACF,GAAMngB,QAAAkgB,KAAAlgB,QAAAmgB,KAAAngB,QAAAogB,OAAAA,MAAApgB,EAAA,EAAA;AAAA,MAAAqgB;AAAArgB,IAAA,EAAA,MAAAiZ,OAAAjZ,UAAAogB,OAfVC,MAAAxf,+BAAC,eAAsB,UAAA,GAAa,UAAA,GAAU,QAAA,UAC5C,UAAAuQ,2BAAAA,KAAC,sBAAA,EAA2B,OAAA,UAC1B6H,UAAAA;AAAAA,IAAAA;AAAAA,IAQAmH;AAAAA,EAAAA,EAAAA,CAMF,GACF,GAAcpgB,QAAAiZ,KAAAjZ,QAAAogB,KAAApgB,QAAAqgB,OAAAA,MAAArgB,EAAA,EAAA;AAAA,MAAAsgB;AAAAtgB,IAAA,EAAA,MAAAgmB,UAAAhmB,EAAA,EAAA,MAAA8lB,aAAA9lB,EAAA,EAAA,MAAA+lB,WAAA/lB,UAAAgF,KAEbsb,MAAAwF,aACCjlB,2BAAAA,IAAC,eAAA,EAAwB,UAAA,GAAa,aAAU,QAAA,UAC9C,UAAAA,2BAAAA,IAAC,iBAAA,EAAgB,OAAA,IACf,UAAAA,2BAAAA,IAACud,OAAAA,aACa,YAAA;AAAA,IAAA6H,mBAAAA,MAAA7U,2BAAAA,KAAAoP,WAAAA,UAAA,EAGN,UAAA;AAAA,MAAA3f,2BAAAA,IAAC,gBAAA,EAAwBklB,SAAAA,QAAAA,CAAO;AAAA,MAChCllB,2BAAAA,IAAC,eAAA,EAAuBmlB,SAAAA,OAAAA,CAAM;AAAA,IAAA,EAAA,CAAI;AAAA,EAAA,GAIhC,SAAA,gCACLhhB,EAAAA,IAEP,EAAA,CACF,GACDhF,QAAAgmB,QAAAhmB,QAAA8lB,WAAA9lB,QAAA+lB,SAAA/lB,QAAAgF,GAAAhF,QAAAsgB,OAAAA,MAAAtgB,EAAA,EAAA;AAAA,MAAAygB;AAAAzgB,IAAA,EAAA,MAAAqgB,OAAArgB,UAAAsgB,OArCHG,MAAArP,2BAAAA,KAAC,cAAA,EAAqB,SAAA,iBAA2B,WAAAwH,KAC/CyH,UAAAA;AAAAA,IAAAA;AAAAA,IAmBCC;AAAAA,EAAAA,EAAAA,CAkBH,GAAetgB,QAAAqgB,KAAArgB,QAAAsgB,KAAAtgB,QAAAygB,OAAAA,MAAAzgB,EAAA,EAAA;AAAA,MAAA0gB;AAAA,SAAA1gB,EAAA,EAAA,MAAAyY,OAAAzY,UAAAygB,OApEjBC,sCAAC,sBAAA,EAA+B,WAAA,UAAqB,eAAA,iBACnDjI,UAAAA;AAAAA,IAAAA;AAAAA,IA6BAgI;AAAAA,EAAAA,EAAAA,CAuCF,GAAuBzgB,QAAAyY,KAAAzY,QAAAygB,KAAAzgB,QAAA0gB,OAAAA,MAAA1gB,EAAA,EAAA,GArEvB0gB;AAqEuB;AC7E3B,SAASwF,aAAaC,MAAYC,OAA2C;AAC3E,SAAI,CAACD,QAAQ,CAACC,QACL,KAIFD,SAASC,SAAS,CAAC,EAAED,KAAKE,wBAAwBD,KAAa,IAAI;AAC5E;AAEA,MAAME,YACJ,qGAEIC,cAAexN,CAAAA,UACnByN,YAAAA,SAAS,cAAczN,KAAK,KAAKyN,qBAAS,aAAazN,KAAK;AAqCvD,SAAA0N,UAAA1mB,OAAA;AAAA,QAAAC,IAAAC,uBAAA,GAAA,GACL;AAAA,IAAAkf;AAAAA,IAAAuH;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAsD7mB,OACtDiV,QAAcC,GAAAA,YACd;AAAA,IAAAjQ;AAAAA,EAAAA,IAAYyL,OAAAA,eAAAC,MAAAA,qBAAoC,GAChD;AAAA,IAAA7F;AAAAA,EAAAA,IAA2B4U,sBAAAA,GAE3BoH,iBAAuBne,MAAAA,OAAA,IAAmC,GAC1Doe,kBAAwBpe,aAAA,IAAmC,GAC3DuT,gBAAsBvT,MAAAA,OAAA,IAAkC,GACxD0W,6BAAmC1W,MAAAA,OAAA,IAAoC,GACvEqe,uBAA6Bre,aAAAkJ,MAA0C,GACvEoV,wBAA8Bte,MAAAA,OAAAkJ,MAA0C;AAAC,MAAAvR;AAAAL,WAAA2mB,aAEzCtmB,KAAAA,MAAMiM,gBAAgBqa,aAAa,SAAS,GAAC3mB,OAAA2mB,WAAA3mB,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAA7E,QAAA,CAAAmM,aAAA,IAAuB/L,MAAAA,SAASC,EAA6C;AAAC,MAAAC;AAAAN,IAAA,CAAA,MAAA4mB,kBAAA5mB,SAAAmM,iBAExD7L,KAAA6L,cAAYM,IAAK,WAAWma,cAAc,GAAC5mB,OAAA4mB,gBAAA5mB,OAAAmM,eAAAnM,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAAjE,QAAAinB,gBAAsB3mB;AAA2C,MAAAM;AAAAZ,WAAA0mB,OAAAQ,qBAAAlnB,SAAAmM,iBACxCvL,KAAAuL,cAAYM,IACnC,cACAY,iBAAiB,GAAGqZ,OAAMQ,iBAAA,EAAoB,CAChD,GAAClnB,EAAA,CAAA,IAAA0mB,OAAAQ,mBAAAlnB,OAAAmM,eAAAnM,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AAHD,QAAAmnB,mBAAyBvmB;AAGxB,MAAAkJ;AAAA9J,WAAAmM,iBACmBrC,KAAAqC,cAAYM,IAAK,SAAS,EAAE,GAACzM,OAAAmM,eAAAnM,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA;AAAjD,QAAAonB,cAAoBtd;AAA6B,MAAAiH;AAAA/Q,YAAAmM,iBAC5B4E,KAAA5E,cAAYM,IAAK,UAAU;AAAA;AAAA,EAAU,GAACzM,QAAAmM,eAAAnM,QAAA+Q,MAAAA,KAAA/Q,EAAA,EAAA;AAA3D,QAAAqnB,eAAqBtW;AAAsC,MAAAC;AAAAhR,YAAAmM,iBACjC6E,KAAA7E,cAAYM,IACpC,eAAamF,MAEf,GAAC5R,QAAAmM,eAAAnM,QAAAgR,MAAAA,KAAAhR,EAAA,EAAA;AAHD,QAAAsnB,oBAA0BtW;AAGzB,MAAAG;AAAAnR,IAAA,EAAA,MAAAmf,YAAAnf,UAAA4mB,kBAAA5mB,EAAA,EAAA,MAAAinB,iBAE8C9V,KAAAA,MACzCgO,SAAQ7U,SAAU2c,aAAa,IAC1BA,gBAEL9H,SAAQ7U,SAAUsc,cAAc,IAC3BA,iBAEFzH,SAAQ,CAAA,GAChBnf,QAAAmf,UAAAnf,QAAA4mB,gBAAA5mB,QAAAinB,eAAAjnB,QAAAmR,MAAAA,KAAAnR,EAAA,EAAA;AARD,QAAA,CAAAgf,SAAAuI,UAAA,IAA8BnnB,MAAAA,SAAiB+Q,EAQ9C;AAAC,MAAAE;AAAArR,YAAAmnB,oBACmD9V,KAAAA,MACnD7R,aAAA8K,SAAsB6c,gBAAgB,IAAIA,mBAAgBvnB,qBAAsBI,QAAAmnB,kBAAAnnB,QAAAqR,MAAAA,KAAArR,EAAA,EAAA;AADlF,QAAA,CAAAwN,YAAAga,aAAA,IAAoCpnB,MAAAA,SAAiBiR,EAErD;AAAC,MAAAC;AAAAtR,YAAAmnB,oBACwE7V,KAAAA,MACvE9R,aAAA8K,SAAsB6c,gBAAgB,IAAC,KAAWA,kBAAgBnnB,QAAAmnB,kBAAAnnB,QAAAsR,MAAAA,KAAAtR,EAAA,EAAA;AADpE,QAAA,CAAAif,kBAAAwI,mBAAA,IAAgDrnB,MAAAA,SAAyBkR,EAEzE,GACA,CAAAkO,aAAAkI,mBAAA,IAA2CtnB,eACzCknB,qBAAqB,KACvB;AAAC,MAAA/V;AAAAvR,YAAAif,oBACyB1N,KAAA0N,mBAAmB1R,mBAAmB0R,gBAAgB,IAAC,IAAOjf,QAAAif,kBAAAjf,QAAAuR,MAAAA,KAAAvR,EAAA,EAAA;AAAxF,QAAAsf,oBAA0B/N,IAE1B,CAAA7K,KAAAihB,MAAA,IAAsBvnB,MAAAA,SAAAwR,MAAsC;AAAC,MAAA0G;AAAAtY,YAAAonB,eAClB9O,MAAAA,MACzC,OAAO8O,eAAgB,WAAWA,cAAc,IAAEpnB,QAAAonB,aAAApnB,QAAAsY,OAAAA,MAAAtY,EAAA,EAAA;AADpD,QAAA,CAAA+K,OAAA6c,QAAA,IAA0BxnB,eAAiBkY,GAE3C,GACA,CAAAuP,WAAAC,YAAA,IAAkC1nB,MAAAA,SAAiBinB,YAAY;AAAC,MAAA9O;AAAAvY,IAAA,EAAA,MAAA6nB,aAAA7nB,UAAAgF,KACnCuT,MAAA/G,YAAYqW,WAAW7iB,CAAC,GAAChF,QAAA6nB,WAAA7nB,QAAAgF,GAAAhF,QAAAuY,OAAAA,MAAAvY,EAAA,EAAA;AAAtD,QAAAgL,SAA6BuN,KAC7B,CAAAmN,aAAAqC,cAAA,IAAsC3nB,MAAAA,SAAAwR,MAAuC;AAAC,MAAA4G;AAAAxY,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KACN4P,MAAA,CAAA,GAAExY,QAAAwY,OAAAA,MAAAxY,EAAA,EAAA;AAA1E,QAAA,CAAA2lB,iBAAAqC,kBAAA,IAA8C5nB,MAAAA,SAA0BoY,GAAE,GAC1E,CAAAzG,OAAAgB,QAAA,IAA0B3S,MAAAA,SAAAwR,MAAqC,GAC/D,CAAAgU,WAAAqC,YAAA,IAAkC7nB,MAAAA,SAAAwR,MAAsC,GACxE,CAAAiU,SAAAqC,UAAA,IAA8B9nB,eAAAwR,MAAsC,GACpE,CAAAqL,iBAAAkL,kBAAA,IAA8C/nB,MAAAA,WAAuB,GACrE,CAAA4c,kBAAAoL,mBAAA,IAAgDhoB,MAAAA,WAAuB,GACvE,CAAAioB,wBAAAC,yBAAA,IAA4DloB,MAAAA,WAAc;AAAC,MAAAqY;AAAAzY,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAEjB6P,MAAA;AAAA,IAAAwD;AAAAA,EAAAA,GAAejc,QAAAyY,OAAAA,MAAAzY,EAAA,EAAA;AAAzE,QAAA;AAAA,IAAAqc;AAAAA,IAAAH;AAAAA,EAAAA,IAA8CF,YAAYvD,GAAe,GAI3DG,MAAA0G,qBAAqBL,mBAAmBA,mBAAmBzR;AAAU,MAAAqL;AAAA7Y,YAAA4Y,OADzDC,MAAA;AAAA,IAAArL,YACZoL;AAAAA,EAAAA,GACb5Y,QAAA4Y,KAAA5Y,QAAA6Y,OAAAA,MAAA7Y,EAAA,EAAA;AAFD,QAAAuoB,UAAgBC,OAAAA,UAAU3P,GAEzB;AAAC,MAAAC;AAAA9Y,IAAA,EAAA,MAAAuoB,WAAAvoB,EAAA,EAAA,MAAAwN,cAAAxN,EAAA,EAAA,MAAAif,oBAAAjf,UAAAgf,WAAAhf,EAAA,EAAA,MAAAsf,qBAAAtf,EAAA,EAAA,MAAAwf,eAAAxf,EAAA,EAAA,MAAA6K,oBAEOiO,MAAAyP,QAAOE,WAAA;AAAA,IAAAjb,YACA8R,qBAAqBL,mBAAmBA,mBAAmBzR;AAAAA,IAAUgS,aACpE7U,qBAAA;AAAA,MAAAC,mBAAyC4U;AAAAA,MAAW3U;AAAAA,IAAAA,CAAmB;AAAA,IAACmU;AAAAA,IAAA0J,kBAAA;AAAA,EAAA,CAGtF,GAAC1oB,QAAAuoB,SAAAvoB,QAAAwN,YAAAxN,QAAAif,kBAAAjf,QAAAgf,SAAAhf,QAAAsf,mBAAAtf,QAAAwf,aAAAxf,QAAA6K,kBAAA7K,QAAA8Y,OAAAA,MAAA9Y,EAAA,EAAA;AANJ,QAAA2oB,SACS7P;AAcP,MAAAG;AAAAjZ,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAE0CqQ,MAAAA,MAAA;AACrC8N,yBAAoBhe,YAGzBge,qBAAoBhe,QAAA0K,YAAAA,GACpBsT,qBAAoBhe,UAAA6I;AAAAA,EAAA,GACrB5R,QAAAiZ,OAAAA,MAAAjZ,EAAA,EAAA;AAND,QAAA4oB,0BAAgC3P;AAM1B,MAAAiH;AAAAlgB,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAEyCsX,MAAAA,MAAA;AACxC8G,0BAAqBje,YAG1Bie,sBAAqBje,QAAA0K,YAAAA,GACrBuT,sBAAqBje,UAAA6I;AAAAA,EAAA,GACtB5R,QAAAkgB,OAAAA,MAAAlgB,EAAA,EAAA;AAND,QAAA6oB,6BAAmC3I;AAM7B,MAAAC;AAAAngB,YAAAwN,cAAAxN,EAAA,EAAA,MAAA2oB,UAAA3oB,EAAA,EAAA,MAAAif,oBAAAjf,EAAA,EAAA,MAAAgf,WAAAhf,UAAAsf,qBAAAtf,EAAA,EAAA,MAAAmM,iBAAAnM,EAAA,EAAA,MAAAgL,OAAAiD,UAAAjO,EAAA,EAAA,MAAAwf,eAAAxf,EAAA,EAAA,MAAA6K,oBAAA7K,EAAA,EAAA,MAAA+K,SAAA/K,UAAAid,mBAAAjd,EAAA,EAAA,MAAAgF,KAGJmb,MAAAlV,CAAAA,YAAA;AAAA,QACMgS,iBAAe;AACjB2L,iCACAC,8BACAV,qBAAwB;AAAC;AAAA,IAAA;AAI3B,UAAAW,UAAA;AAAA,MAAA/d,OAISE,SAAOF,SAAWA;AAAAA,MAAKiU,SACrB/T,SAAO+T,WAAaA;AAAAA,MAAOhU,QAC5BwG,YAAYhG,KAAAC,UAAeR,SAAOD,UAAYA,OAAMiD,eAAgB,GAAGjJ,CAAC;AAAA,MAACwa,aACpE7U,qBAAA;AAAA,QAAAC,mBACQK,SAAOuU,eAAiBA;AAAAA,QAAW3U;AAAAA,MAAAA,CAEvD;AAAA,MAAC2C,YAEAvC,SAAOuC,eACNyR,oBAAoBK,oBAAoBL,mBAAmBzR;AAAAA,IAAAA;AAc3C,QAXrBrB,cAAYf,IAAK,SAAS0d,QAAO/d,KAAM,GACvCoB,cAAYf,IAAK,UAAU0d,QAAO9d,OAAA6G,GAAW,GAE7CgX,2BAAAA,GAEAV,mBAAmB,CAACW,QAAO9d,OAAA+G,SAAiBzP,CAAAA,CAAQwmB,QAAO/d,KAAO,GAClEqd,sBAAyB,GACzBJ,qBAAqB,GACrBjV,SAAS+V,QAAO9d,OAAA+G,QAAA,IAAAL,MAA0BoX,QAAO9d,OAAA+G,KAAA,IAAAH,MAA0B,GAC3EmW,eAAcnW,MAAU,GACxBqW,aAAYrW,MAAU,GACtBsW,WAAUtW,MAAU,GAEhBkX,QAAO9d,OAAA+G;AAAA;AAIX,UAAAgX,eAAA;AAAA,MAAAvJ,aACesJ,QAAOtJ,eAAA,CAAA;AAAA,IAAA,GAGtBwJ,YAAkBL,OAAMF,WAAA;AAAA,MAAAjb,YACVsb,QAAOtb;AAAAA,MAAAwR,SACV8J,QAAO9J;AAAAA,MAAAQ,aACHsJ,QAAOtJ;AAAAA,IAAAA,CACrB,GAEDpJ,SAAe4S,UAASC,OACtBD,UAASE,WACP,SACApe,kBAAkBge,QAAO/d,OAAQ+d,QAAO9d,OAAAiD,QAAgB8a,YAAY,CACtE,CACF;AACApB,WAAOvR,MAAM;AAEb,UAAA+S,aAAmB1pB,KAAA2pB,IAAAA;AAEnBrC,yBAAoBhe,UAAWigB,UAASK,WAAAC,MAC/BR,QAAO/d,OAAQ+d,QAAO9d,OAAAiD,QAAA;AAAA,MAAAsb,gBAAA;AAAA,MAAAxkB,KAA6C;AAAA,IAAA,CAAS,EAACwO,UAAA;AAAA,MAAAC,MAAAgW,CAAAA,QAAA;AAGhFvB,qBAAauB,IAAGC,EAAG,GACnBvB,WAAWzoB,KAAA2pB,QAAaD,UAAU,GAClCpB,eAAeyB,IAAGE,MAAO,GACzBvB,qBAAwB,GACxBpV,SAAQnB,MAAU;AAAA,MAAC;AAAA,MAAAG,OAAA1D,CAAAA,QAAA;AAGnB0E,iBAAS1E,GAAG,GACZ8Z,qBAAwB;AAAA,MAAC;AAAA,IAAA,CAE5B;AAAA,EAAC,GACLnoB,QAAAwN,YAAAxN,QAAA2oB,QAAA3oB,QAAAif,kBAAAjf,QAAAgf,SAAAhf,QAAAsf,mBAAAtf,QAAAmM,eAAAnM,EAAA,EAAA,IAAAgL,OAAAiD,QAAAjO,QAAAwf,aAAAxf,QAAA6K,kBAAA7K,QAAA+K,OAAA/K,QAAAid,iBAAAjd,QAAAgF,GAAAhF,QAAAmgB,OAAAA,MAAAngB,EAAA,EAAA;AA7EH,QAAA2pB,uBAA6BxJ;AA8F5B,MAAAC;AAAApgB,IAAA,EAAA,MAAA2pB,wBAAA3pB,UAAAmM,iBAGCiU,MAAAwJ,CAAAA,mBAAA;AACMA,uBAAchY,WAAmBxH,uBAAuBwf,cAAc,MAI1ElC,oBAAoBkC,cAAsC,GAC1Dzd,cAAYf,IAAK,eAAewe,cAAc,GAE9CD,qBAAoB;AAAA,MAAAnK,aAAeoK;AAAAA,IAAAA,CAAe;AAAA,EAAC,GACpD5pB,QAAA2pB,sBAAA3pB,QAAAmM,eAAAnM,QAAAogB,OAAAA,MAAApgB,EAAA,EAAA;AAVH,QAAA6pB,iBAAuBzJ;AAYtB,MAAAC;AAAArgB,IAAA,EAAA,MAAA2pB,wBAAA3pB,UAAAmM,iBAGCkU,MAAA4E,CAAAA,QAAA;AACE,UAAA6E,aAAmB7E,IAAG8E,OAAA1e;AACtBc,IAAAA,cAAYf,IAAK,WAAW0e,UAAU,GACtCvC,WAAWuC,UAAU,GACrBH,qBAAoB;AAAA,MAAA3K,SAAW8K;AAAAA,IAAAA,CAAW;AAAA,EAAC,GAC5C9pB,QAAA2pB,sBAAA3pB,QAAAmM,eAAAnM,QAAAqgB,OAAAA,MAAArgB,EAAA,EAAA;AANH,QAAAgqB,sBAA4B3J;AAQ3B,MAAAC;AAAAtgB,IAAA,EAAA,MAAA2pB,wBAAA3pB,UAAAmM,iBAGCmU,MAAA2J,CAAAA,UAAA;AACE,UAAAC,gBAAsBjF,MAAG8E,OAAA1e;AAAa,QAClC6e,eAAa9R,YAAAA,MAAoB,SAAO;AAC1CqP,0BAAoB,GAAG,GACvBrI,2BAA0BrW,SAAAohB,MAAAA;AAAA;AAAA,IAAA;AAI5B3C,kBAAc0C,aAAa,GAC3BzC,sBAAyB,GACzBtb,cAAYf,IAAK,cAAc8e,aAAa,GAC5CP,qBAAoB;AAAA,MAAAnc,YAAc0c;AAAAA,IAAAA,CAAc;AAAA,EAAC,GAClDlqB,QAAA2pB,sBAAA3pB,QAAAmM,eAAAnM,QAAAsgB,OAAAA,MAAAtgB,EAAA,EAAA;AAbH,QAAAoqB,yBAA+B9J;AAe9B,MAAAG;AAAAzgB,IAAA,EAAA,MAAA2pB,wBAAA3pB,UAAAmM,iBAICsU,MAAA4J,CAAAA,UAAA;AACE,UAAAC,sBAA4BrF,MAAG8E,OAAA1e,SAAiB;AAChDoc,wBAAoB6C,uBAAuB,GAAG,GAE1C/c,mBAAmB+c,mBAAmB,MACxC9C,cAAc8C,mBAAmB,GACjCne,cAAYf,IAAK,cAAckf,mBAAmB,GAClDX,qBAAoB;AAAA,MAAAnc,YAAc8c;AAAAA,IAAAA,CAAoB;AAAA,EAAC,GAE1DtqB,QAAA2pB,sBAAA3pB,QAAAmM,eAAAnM,QAAAygB,OAAAA,MAAAzgB,EAAA,EAAA;AAVH,QAAAuqB,+BAAqC9J;AAYpC,MAAAC;AAAA1gB,YAAA6pB,kBAICnJ,MAAA8J,CAAAA,UAAA;AACE,UAAAC,mBAAuBxF,MAAG8E,OAAA1e;AAC1Bwe,mBAAeD,qBAAmB,YAAShY,SAAegY,gBAAc;AAAA,EAAC,GAC1E5pB,QAAA6pB,gBAAA7pB,QAAA0gB,OAAAA,MAAA1gB,EAAA,EAAA;AAJH,QAAA0qB,0BAAgChK;AAM/B,MAAAC;AAAA3gB,IAAA,EAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAEuC+X,MAAAgK,CAAAA,UAAA;AAClC1F,UAAG3D,SAAU,cAIjB0G,mBAAkB4C,mBAChBA,cAAanhB,WAAA,MAAkBwb,OAAG,GAAK2F,cAAa/qB,WAAY,CAAC,IAAA,CAAKolB,OAAG,GAAK2F,aAAa,CAC7F;AAAA,EAAC,GACF5qB,QAAA2gB,OAAAA,MAAA3gB,EAAA,EAAA;AARD,QAAA6qB,sBAA4BlK;AAQtB,MAAAE;AAAA7gB,IAAA,EAAA,MAAA2oB,UAAA3oB,EAAA,EAAA,MAAAgd,oBAAAhd,EAAA,EAAA,MAAAmM,iBAAAnM,UAAAgL,OAAA+G,SAAA/R,EAAA,EAAA,MAAAgL,OAAAiD,UAAAjO,EAAA,EAAA,MAAAgL,OAAA6G,OAAA7R,UAAA+K,SACoC8V,MAAAA,MAAA;AAAA,QACpC7D,kBAAgB;AAClB6L,iCAAAA,GACAT,sBAAyB;AAAC;AAAA,IAAA;AAI5B,UAAA1Q,WAAeiR,OAAMO,WAAY,UAAUpe,kBAAkBC,OAAOC,OAAMiD,QAAA,CAAA,CAAW,CAAC,GAEtF6c,gBAAsB,CAAC9f,OAAM+G,SAAUhH,MAAK4C,KAAAA,EAAOlE,SAAA;AAEnD0C,IAAAA,cAAYf,IAAK,SAASL,KAAK,GAC/BoB,cAAYf,IAAK,UAAUJ,OAAM6G,GAAI,GAErC+W,2BAEAjB,OAAOvR,QAAM,GACb4R,qBAAqB,GACrBG,qBAAwB,GACxBJ,eAAcnW,MAAU,GACxBwW,oBAAoB0C,aAAa,GACjC/X,SAAS/H,OAAM+G,QAAA,IAAAL,MAAmB1G,OAAM+G,KAAA,IAAAH,MAAmB,GAC3DqW,aAAYrW,MAAU,GACtBsW,WAAUtW,MAAU,GAEfkZ,kBAIL9D,sBAAqBje,UAAW4f,OAAMoC,OAC5BhgB,OAAOC,OAAMiD,QAAA;AAAA,MAAA+c,QAAA,CAAmB,YAAY,SAAS;AAAA,MAAAC,oBAAA;AAAA,IAAA,CAA4B,EAAC1X,UAAA;AAAA,MAAAC,MAElFqX;AAAAA,MAAmB9Y,OAAAmZ,CAAAA,UAAA;AAEvBnY,iBAAS1E,KAAG,GACZ+Z,sBAAyB;AAAA,MAAC;AAAA,IAAA,CAE7B;AAAA,EAAC,GACLpoB,QAAA2oB,QAAA3oB,QAAAgd,kBAAAhd,QAAAmM,eAAAnM,EAAA,EAAA,IAAAgL,OAAA+G,OAAA/R,EAAA,EAAA,IAAAgL,OAAAiD,QAAAjO,EAAA,EAAA,IAAAgL,OAAA6G,KAAA7R,QAAA+K,OAAA/K,QAAA6gB,OAAAA,MAAA7gB,EAAA,EAAA;AAtCD,QAAAmrB,wBAA8BtK;AA+C5B,MAAAuK;AAAAprB,YAAAmM,iBAGAif,MAAA/f,CAAAA,UAAA;AACEyc,iBAAazc,KAAK,GAClBc,cAAYf,IAAK,UAAUC,KAAK;AAAA,EAAC,GAClCrL,QAAAmM,eAAAnM,QAAAorB,OAAAA,MAAAprB,EAAA,EAAA;AAJH,QAAAqrB,qBAA2BD;AAM1B,MAAAE;AAAAtrB,IAAA,EAAA,MAAAwN,cAAAxN,EAAA,EAAA,MAAAgf,WAAAhf,EAAA,EAAA,MAAAmf,YAAAnf,EAAA,EAAA,MAAAwf,eAAAxf,UAAAgV,SAICsW,MAAAhY,CAAAA,SAAA;AACE,UAAAyP,QAAczP,KAAIyP,MAAAuD,SAAgB;AAAC,QAAA,CAC9BvD;AAAK,aAAA;AAIV,UAAA,CAAA,EAAAwI,gBAAAC,aAAAC,QAAA,IAAkD1I,OAElD3V,KAAA,IAAAjC,gBAA+BsgB,QAAQ,GACvCC,QAAoCve,oBAAoBC,EAAE;AAAC,QAAA,CACtDse;AAAK,aAAA;AACNxB,QAAAA,iBACAI;AAEA/c,uBAAmBge,cAAc,MAC/B/rB,aAAA8K,SAAsBihB,cAAc,KACtCrB,kBAAgBqB,gBAChBjB,wBAAAA,MAEAA,wBAAsBiB;AAI1B,UAAAI,mBACEvhB,uBAAuBshB,MAAKzgB,QAAAuU,WAAoB,KAAC,CAChDjV,qBAAqBmhB,MAAKzgB,QAAAuU,WAAoB,IAC3CkM,MAAKzgB,QAAAuU,cAAA5N;AACI,WAGbgY,qBACC,CAACxf,uBAAuBshB,MAAKzgB,QAAAuU,WAAoB,KAChDjV,qBAAqBmhB,MAAKzgB,QAAAuU,WAAoB,MAEhDxK,MAAK4B,KAAA;AAAA,MAAAC,UAAA;AAAA,MAAAsN,IAEC;AAAA,MAAsCrN,QAClC;AAAA,MAASC,OACV;AAAA,IAAA,CACR,GAAC;AAAA,MAAAhM,OAIK2gB,MAAK3gB;AAAAA,MAAAC,QACJ0gB,MAAK1gB;AAAAA,MAAA6c,WACFrc,KAAAC,UAAeigB,MAAK1gB,QAAA,MAAA,CAAgB;AAAA,MAACgU,SACvCG,SAAQ7U,SAAUkhB,WAAW,IAAIA,cAAcxM;AAAAA,MAAOxR,YACnD0c,mBAAiB1c;AAAAA,MAAUyR,kBACrBqL;AAAAA,MAAmB9K,aACxBoK,oBAAkBpK;AAAAA,MAAW9Y,KACrC4M;AAAAA,IAAAA;AAAAA,EAAI,GAEZtT,QAAAwN,YAAAxN,QAAAgf,SAAAhf,QAAAmf,UAAAnf,QAAAwf,aAAAxf,QAAAgV,OAAAhV,QAAAsrB,OAAAA,MAAAtrB,EAAA,EAAA;AArDH,QAAA2U,kBAAwB2W;AAuDvB,MAAAM;AAAA5rB,IAAA,EAAA,MAAA2pB,wBAAA3pB,UAAAmM,iBAICyf,MAAAC,CAAAA,iBAAA;AAEEtE,eAAWsE,aAAY7M,OAAQ,GAC/B4I,SAASiE,aAAY9gB,KAAM,GAC3B+c,aAAa+D,aAAYhE,SAAU,GACnCL,cAAcqE,aAAYre,UAAW,GACjCqe,aAAY5M,oBACdwI,oBAAoBoE,aAAY5M,gBAAiB,GAEnDyI,oBAAoBmE,aAAYrM,WAAY,GAC5CmI,OAAOkE,aAAYnlB,GAAI,GAEvBmgB,eAAc9d,SAAAa,mBAA6BiiB,aAAY9gB,KAAA,GACvD+b,gBAAe/d,SAAAa,mBAA6BiiB,aAAYhE,SAAA,GAGxD1b,cAAYO,MAAA;AAAA,MAAA3B,OACH8gB,aAAY9gB;AAAAA,MAAAC,QACX6gB,aAAYhE;AAAAA,MAAA7I,SACX6M,aAAY7M;AAAAA,MAAAxR,YACTqe,aAAY5M,oBAAqB4M,aAAYre;AAAAA,MAAWgS,aACvDqM,aAAYrM;AAAAA,IAAAA,CAC1B,GAGDmK,qBAAqBkC,YAAY;AAAA,EAAC,GACnC7rB,QAAA2pB,sBAAA3pB,QAAAmM,eAAAnM,QAAA4rB,OAAAA,MAAA5rB,EAAA,EAAA;AA3BH,QAAA4U,wBAA8BgX;AA6B7B,MAAAE;AAAA9rB,IAAA,EAAA,MAAA2U,mBAAA3U,UAAA4U,yBAAA5U,EAAA,EAAA,MAAAgV,SAGC8W,MAAAC,CAAAA,UAAA;AAAA,QAAA,CACO9G,MAAG+G;AAAA;AAIR,UAAAC,SAAahH,MAAG+G,cAAAE,QAAuB,YAAY;AACnDjH,UAAGC,eAAAA;AACH,UAAAiH,WAAiBxX,gBAAgBrB,MAAI;AACjC6Y,iBACFvX,sBAAsBuX,QAAQ,GAC9BnX,MAAK4B,KAAA;AAAA,MAAAC,UAAA;AAAA,MAAAsN,IAEC;AAAA,MAAcrN,QACV;AAAA,MAAMC,OACP;AAAA,IAAA,CACR;AAAA,EAAC,GAEL/W,QAAA2U,iBAAA3U,QAAA4U,uBAAA5U,QAAAgV,OAAAhV,QAAA8rB,OAAAA,MAAA9rB,EAAA,EAAA;AAlBH,QAAAosB,cAAoBN;AAoBnB,MAAAO;AAAArsB,YAAA2pB,wBAAA3pB,EAAA,EAAA,MAAAgL,OAAA8G,SAGCua,MAAAtT,CAAAA,UAAA;AACE,UAAAuT,eACErQ,cAAalT,WAAYmd,aAAajK,cAAalT,SAAUgQ,MAAKgR,MAAO;AACvExD,gBAAYxN,KAAK,KAAKuT,gBAAgBthB,OAAM8G,UAC9C6X,qBAAAA,GACA5Q,MAAKmM,eAAAA,GACLnM,MAAKyB,gBAAAA;AAAAA,EAAkB,GAE1Bxa,QAAA2pB,sBAAA3pB,EAAA,EAAA,IAAAgL,OAAA8G,OAAA9R,QAAAqsB,OAAAA,MAAArsB,EAAA,EAAA;AATH,QAAAusB,gBAAsBF;AAWrB,MAAAG,KAAAC;AAAAzsB,IAAA,EAAA,MAAAusB,iBAAAvsB,UAAAosB,eAESI,MAAAA,OACRvR,OAAAI,SAAAqR,iBAAiC,SAASN,WAAW,GACrDnR,OAAAI,SAAAqR,iBAAiC,WAAWH,aAAa,GAAC,MAAA;AAGxDtR,WAAAI,SAAAsR,oBAAoC,SAASP,WAAW,GACxDnR,OAAAI,SAAAsR,oBAAoC,WAAWJ,aAAa;AAAA,EAAC,IAE9DE,MAAA,CAACF,eAAeH,WAAW,GAACpsB,QAAAusB,eAAAvsB,QAAAosB,aAAApsB,QAAAwsB,KAAAxsB,SAAAysB,QAAAD,MAAAxsB,EAAA,EAAA,GAAAysB,MAAAzsB,EAAA,GAAA,IAR/BW,MAAAA,UAAU6rB,KAQPC,GAA4B;AAAC,MAAAG,KAAAC;AAAA7sB,IAAA,GAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAEtBgkB,MAAAA,MAAA,MAAA;AAENhE,4BAAAA,GACAC,2BAAAA;AAAAA,EAA4B,GAE7BgE,MAAA,CAACjE,yBAAyBC,0BAA0B,GAAC7oB,SAAA4sB,KAAA5sB,SAAA6sB,QAAAD,MAAA5sB,EAAA,GAAA,GAAA6sB,MAAA7sB,EAAA,GAAA,IALxDW,MAAAA,UAAUisB,KAKPC,GAAqD;AAAC,MAAAC;AAAA9sB,aAAA6pB,kBAEJiD,MAAAC,CAAAA,UAAA;AAC/CA,UAAKtjB,SAAA,KACPogB,eAAe,eAAe;AAAA,EAAC,GAElC7pB,SAAA6pB,gBAAA7pB,SAAA8sB,OAAAA,MAAA9sB,EAAA,GAAA;AAJD,QAAAgtB,gCAAsCC,eAAAA,eAAeH,GAIpD;AAAC,MAAAI;AAAAltB,IAAA,GAAA,MAAAgtB,iCAAAhtB,WAAA6K,oBAEQqiB,MAAAA,MAAA;AACRF,kCAA8BniB,gBAAgB;AAAA,EAAC,GAChD7K,SAAAgtB,+BAAAhtB,SAAA6K,kBAAA7K,SAAAktB,OAAAA,MAAAltB,EAAA,GAAA;AAAA,MAAAmtB;AAAAntB,aAAA6K,oBAAEsiB,OAACtiB,gBAAgB,GAAC7K,SAAA6K,kBAAA7K,SAAAmtB,OAAAA,MAAAntB,EAAA,GAAA,GAFrBW,MAAAA,UAAUusB,KAEPC,GAAkB;AAAC,MAAAC;AAAAptB,IAAA,GAAA,MAAA2oB,UAAA3oB,WAAAwf,eAAAxf,EAAA,GAAA,MAAA6K,oBAGpBuiB,MAAAA,CAAAC,aAAAC,gBAAA;AACE,UAAAC,iBAAA;AAAA,MAAA/N,aACe7U,qBAAA;AAAA,QAAAC,mBAAyC4U;AAAAA,QAAW3U;AAAAA,MAAAA,CAAmB,KAAC,CAAA;AAAA,IAAA;AACtF,WACM8d,OAAMM,OACXN,OAAMO,WAAY,SAASpe,kBAAkBuiB,aAAaC,aAAavE,cAAY,CAAC,CACtF;AAAA,EAAC,GACF/oB,SAAA2oB,QAAA3oB,SAAAwf,aAAAxf,SAAA6K,kBAAA7K,SAAAotB,OAAAA,MAAAptB,EAAA,GAAA;AARH,QAAA+U,cAAoBqY;AAUnB,MAAAI;AAAAxtB,IAAA,GAAA,MAAAwN,cAAAxN,EAAA,GAAA,MAAAif,oBAAAjf,WAAAgf,WAAAhf,EAAA,GAAA,MAAAmf,YAAAnf,EAAA,GAAA,MAAAoqB,0BAAApqB,EAAA,GAAA,MAAAgqB,uBAAAhqB,EAAA,GAAA,MAAA0qB,2BAAA1qB,WAAAuqB,gCAAAvqB,EAAA,GAAA,MAAAsf,qBAAAtf,EAAA,GAAA,MAAAwf,eAAAxf,WAAA0G,OAWG8mB,MAAA3sB,+BAAC,iBAAA,EACa2M,YACMyR,kBACTD,SACCG,UACO6K,iBAAAA,qBACGI,oBAAAA,wBACQhL,4BACFmL,0BAAAA,8BACPjL,mBACEoL,qBAAAA,yBAChBhkB,KACQ8Y,YAAAA,CAAW,GACxBxf,SAAAwN,YAAAxN,SAAAif,kBAAAjf,SAAAgf,SAAAhf,SAAAmf,UAAAnf,SAAAoqB,wBAAApqB,SAAAgqB,qBAAAhqB,SAAA0qB,yBAAA1qB,SAAAuqB,8BAAAvqB,SAAAsf,mBAAAtf,SAAAwf,aAAAxf,SAAA0G,KAAA1G,SAAAwtB,OAAAA,MAAAxtB,EAAA,GAAA;AAMQ,QAAAytB,MAAApF,yBAAsBpN,OAAAC,aAAuBD,OAAAC,aAAA,KAQxCwS,MAAAxR,qBAAqB,aAAa,cAQnCyR,MAAAzR,qBAAqBG,gBAAeb,cAAea,gBAAeV,SAE9DiS,MAAAvR,gBAAeZ,MACRoS,MAAAxR,gBAAeX,aACnBoS,MAAA5R,qBAAqBG,gBAAeV,UAAA,KACpCoS,MAAA1R,gBAAeN;AAAQ,MAAAiS;AAAAhuB,aAAAgF,KAOJgpB,MAAAhpB,EAAE,aAAa,GAAChF,SAAAgF,GAAAhF,SAAAguB,OAAAA,MAAAhuB,EAAA,GAAA;AAAA,MAAAiuB;AAAAjuB,aAAAguB,OAFxCC,MAAAptB,2BAAAA,IAAC,8BAAA,EACC,UAAAA,2BAAAA,IAAC2N,GAAAA,MAAA,EACC,UAAA3N,2BAAAA,IAAC,aAAA,EAAY,OAAA,IAAOmtB,UAAAA,IAAAA,CAAiB,EAAA,CACvC,EAAA,CACF,GAA+BhuB,SAAAguB,KAAAhuB,SAAAiuB,OAAAA,MAAAjuB,EAAA,GAAA;AAAA,MAAAkuB;AAAAluB,aAAA+K,SAC/BmjB,qCAAC,kBAAA,EACenjB,qBACJ6c,oBACLf,KAAAA,gBAAc,GACnB7mB,SAAA+K,OAAA/K,SAAAkuB,OAAAA,MAAAluB,EAAA,GAAA;AAAA,MAAAmuB;AAAAnuB,IAAA,GAAA,MAAAiuB,OAAAjuB,WAAAkuB,OAXNC,MAAAttB,2BAAAA,IAAC,gBAAA,EAAuB,SAAA,QAAmB,eAAA,uBACzC,UAAAuQ,gCAACtC,GAAAA,KAAA,EAAU,MAAA,GACTmf,UAAAA;AAAAA,IAAAA;AAAAA,IAKAC;AAAAA,EAAAA,EAAAA,CAKF,GACF,GAAiBluB,SAAAiuB,KAAAjuB,SAAAkuB,KAAAluB,SAAAmuB,OAAAA,MAAAnuB,EAAA,GAAA;AAAA,MAAAouB;AAAApuB,aAAAqrB,sBAAArrB,EAAA,GAAA,MAAAgL,OAAA+G,SAAA/R,EAAA,GAAA,MAAAgL,OAAA6G,OAAA7R,EAAA,GAAA,MAAAgL,OAAA8G,SAEfsc,qCAAC,cAAA,EACQ,OAAApjB,OAAM6G,KACHwZ,UAAAA,oBACG,aAAArgB,OAAM+G,OACH,gBAAA/G,OAAM8G,OACXgV,WAAAA,gBAAAA,CAAe,GAC1B9mB,SAAAqrB,oBAAArrB,EAAA,GAAA,IAAAgL,OAAA+G,OAAA/R,EAAA,GAAA,IAAAgL,OAAA6G,KAAA7R,EAAA,GAAA,IAAAgL,OAAA8G,OAAA9R,SAAAouB,OAAAA,MAAApuB,EAAA,GAAA;AAAA,MAAAquB;AAAAruB,aAAAmrB,yBAAAnrB,EAAA,GAAA,MAAA2pB,wBAAA3pB,EAAA,GAAA,MAAAgd,oBAAAhd,WAAAgL,OAAA8G,SAAA9R,WAAAid,mBAEFoR,MAAAxtB,2BAAAA,IAAC,mBAAA,EACiB,gBAAAmK,OAAM8G,OACLmL,iBACCD,kBACA2M,kBAAAA,sBACCwB,mBAAAA,sBAAAA,CAAqB,GACxCnrB,SAAAmrB,uBAAAnrB,SAAA2pB,sBAAA3pB,SAAAgd,kBAAAhd,EAAA,GAAA,IAAAgL,OAAA8G,OAAA9R,SAAAid,iBAAAjd,SAAAquB,OAAAA,MAAAruB,EAAA,GAAA;AAAA,MAAAsuB;AAAAtuB,IAAA,GAAA,MAAAouB,OAAApuB,WAAAquB,OAfJC,MAAAld,2BAAAA,KAAC,gBAAA,EAAuB,SAAA,QACtBgd,UAAAA;AAAAA,IAAAA;AAAAA,IAQAC;AAAAA,EAAAA,EAAAA,CAOF,GAAiBruB,SAAAouB,KAAApuB,SAAAquB,KAAAruB,SAAAsuB,OAAAA,MAAAtuB,EAAA,GAAA;AAAA,MAAAuuB;AAAAvuB,IAAA,GAAA,MAAAqc,gBAAAX,eAAA1b,EAAA,GAAA,MAAAqc,gBAAAN,WAAA/b,WAAAqc,gBAAAZ,QAAAzb,EAAA,GAAA,MAAA2tB,OAAA3tB,EAAA,GAAA,MAAA8tB,OAAA9tB,EAAA,GAAA,MAAAmuB,OAAAnuB,WAAAsuB,OA3CrBC,MAAA1tB,2BAAAA,IAACiO,GAAAA,KAAA,EAAW,QAAA,WAAgB,MAAA,GAC1B,UAAAsC,2BAAAA,KAACod,eAAAA,WAAA,EACW,WAAA,gBACJ,OAAA,cAEJ,aAAAb,KAEI,MAAAC,KACO,aAAAC,KACJ,SAAAC,KACA,SAAAC,KACD,SAAA,SAERI,UAAAA;AAAAA,IAAAA;AAAAA,IAcAG;AAAAA,EAAAA,EAAAA,CAiBF,GACF,GAAMtuB,EAAA,GAAA,IAAAqc,gBAAAX,aAAA1b,EAAA,GAAA,IAAAqc,gBAAAN,SAAA/b,EAAA,GAAA,IAAAqc,gBAAAZ,MAAAzb,SAAA2tB,KAAA3tB,SAAA8tB,KAAA9tB,SAAAmuB,KAAAnuB,SAAAsuB,KAAAtuB,SAAAuuB,OAAAA,MAAAvuB,EAAA,GAAA;AAAA,MAAAyuB;AAAAzuB,IAAA,GAAA,MAAAgf,WAAAhf,EAAA,GAAA,MAAA6lB,WAAA7lB,EAAA,GAAA,MAAA+R,SAAA/R,EAAA,GAAA,MAAAgd,oBAAAhd,EAAA,GAAA,MAAA2lB,mBAAA3lB,EAAA,GAAA,MAAAid,mBAAAjd,EAAA,GAAA,MAAA0lB,eAAA1lB,WAAA4lB,aACN6I,qCAAC,iBAAA,EACQ1c,OACUkL,iBACJyI,aACK1I,kBACD2I,iBACR3G,SACE4G,WACFC,QAAAA,CAAO,GAChB7lB,SAAAgf,SAAAhf,SAAA6lB,SAAA7lB,SAAA+R,OAAA/R,SAAAgd,kBAAAhd,SAAA2lB,iBAAA3lB,SAAAid,iBAAAjd,SAAA0lB,aAAA1lB,SAAA4lB,WAAA5lB,SAAAyuB,OAAAA,MAAAzuB,EAAA,GAAA;AAAA,MAAA0uB;AAAA1uB,IAAA,GAAA,MAAA0tB,OAAA1tB,WAAAuuB,OAAAvuB,EAAA,GAAA,MAAAyuB,OA9DNC,qCAAC5f,GAAAA,KAAA,EAAW,QAAA,WAAgB,MAAA,GAC1B,UAAAsC,2BAAAA,KAACod,eAAAA,WAAA,EACW,WAAA,gBAEH,OAAAd,KACE,SAAA,KAETa,UAAAA;AAAAA,IAAAA;AAAAA,IA8CAE;AAAAA,EAAAA,GAUF,EAAA,CACF,GAAMzuB,SAAA0tB,KAAA1tB,SAAAuuB,KAAAvuB,SAAAyuB,KAAAzuB,SAAA0uB,OAAAA,MAAA1uB,EAAA,GAAA;AAAA,MAAA2uB;AAAA3uB,IAAA,GAAA,MAAA2I,OAAAC,IAAA,2BAAA,KACM+lB,MAAA;AAAA,IAAAjV,UAAW;AAAA,IAAUI,QAAU;AAAA,EAAA,GAAO9Z,SAAA2uB,OAAAA,MAAA3uB,EAAA,GAAA;AAAA,MAAA4uB;AAAA5uB,IAAA,GAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAIvCgmB,MAAA;AAAA,IAAAlV,UACK;AAAA,IAAUmV,MAAA;AAAA,IAAAC,KAEf;AAAA,IAAKC,WACC;AAAA,IAAkBC,QAAA;AAAA,IAAAC,eAEd;AAAA,EAAA,GAChBjvB,SAAA4uB,OAAAA,MAAA5uB,EAAA,GAAA;AAAA,MAAAkvB;AAAAlvB,aAAAqoB,0BACQ6G,MAAAA,MAAM5G,0BAAyB,CAAED,sBAAsB,GAACroB,SAAAqoB,wBAAAroB,SAAAkvB,OAAAA,MAAAlvB,EAAA,GAAA;AAAA,MAAAmvB;AAAAnvB,IAAA,GAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAErDumB,MAAA;AAAA,IAAAC,SAAU;AAAA,IAAMC,YAAc;AAAA,IAAQvV,QAAU;AAAA,EAAA,GAAO9Z,SAAAmvB,OAAAA,MAAAnvB,EAAA,GAAA;AAAA,MAAAsvB;AAAAtvB,aAAAqoB,0BAAnEiH,MAAAzuB,2BAAAA,IAAA,OAAA,EAAY,OAAAsuB,KACT9G,UAAAA,yBAAyBxnB,2BAAAA,IAAC0uB,MAAAA,iBAAA,CAAA,KAAqB1uB,2BAAAA,IAAC2uB,MAAAA,kBAAA,CAAA,CAAgB,EAAA,CACnE,GAAMxvB,SAAAqoB,wBAAAroB,SAAAsvB,OAAAA,MAAAtvB,EAAA,GAAA;AAAA,MAAAyvB;AAAAzvB,IAAA,GAAA,MAAAkvB,OAAAlvB,WAAAsvB,OAfRG,qCAAC/W,GAAAA,QAAA,EACM,MAAA,SACI,SAAA,GACF,OAAAkW,KAQE,SAAAM,KAETI,eAGF,GAAStvB,SAAAkvB,KAAAlvB,SAAAsvB,KAAAtvB,SAAAyvB,OAAAA,MAAAzvB,EAAA,GAAA;AAAA,MAAA0vB;AAAA1vB,IAAA,GAAA,MAAAgL,OAAAiD,UAMQyhB,MAAA1kB,OAAMiD,UAAA,CAAA,GAAajO,EAAA,GAAA,IAAAgL,OAAAiD,QAAAjO,SAAA0vB,OAAAA,MAAA1vB,EAAA,GAAA;AAAA,MAAA2vB;AAAA3vB,aAAA+U,eAAA/U,EAAA,GAAA,MAAA2U,mBAAA3U,EAAA,GAAA,MAAA+K,SAAA/K,EAAA,GAAA,MAAA4U,yBAAA5U,WAAA0vB,OAAA1vB,EAAA,GAAA,MAAA0G,OALpCipB,MAAA9uB,2BAAAA,IAAC,aAAA,EACM6F,KACYiO,iBACMC,uBACT7J,cAAAA,OACC,eAAA2kB,KACF3a,YAAAA,CAAW,GACxB/U,SAAA+U,aAAA/U,SAAA2U,iBAAA3U,SAAA+K,OAAA/K,SAAA4U,uBAAA5U,SAAA0vB,KAAA1vB,SAAA0G,KAAA1G,SAAA2vB,OAAAA,MAAA3vB,EAAA,GAAA;AAAA,MAAA4vB;AAAA5vB,IAAA,GAAA,MAAAyvB,OAAAzvB,WAAA2vB,OAzBJC,sCAAC9gB,GAAAA,KAAA,EAAW,OAAA6f,KACVc,UAAAA;AAAAA,IAAAA;AAAAA,IAiBAE;AAAAA,EAAAA,EAAAA,CAQF,GAAM3vB,SAAAyvB,KAAAzvB,SAAA2vB,KAAA3vB,SAAA4vB,OAAAA,MAAA5vB,EAAA,GAAA;AAAA,MAAA6vB;AAAA7vB,IAAA,GAAA,MAAAytB,OAAAztB,WAAA0uB,OAAA1uB,EAAA,GAAA,MAAA4vB,OAnGVC,MAAAhvB,2BAAAA,IAAC,oBAAA,EAAwB,MAAA,QACvB,UAAAuQ,2BAAAA,KAACod,eAAAA,WAAA,EACU,SAAA,KACI,aAAAvT,OAAAC,aAAA,KACP,MAAAuS,KACG,SAAA,MACD,SAAA,SAERiB,UAAAA;AAAAA,IAAAA;AAAAA,IAiEAkB;AAAAA,EAAAA,GA2BF,EAAA,CACF,GAAqB5vB,SAAAytB,KAAAztB,SAAA0uB,KAAA1uB,SAAA4vB,KAAA5vB,SAAA6vB,OAAAA,MAAA7vB,EAAA,GAAA;AAAA,MAAA8vB;AAAA,SAAA9vB,EAAA,GAAA,MAAAwtB,OAAAxtB,WAAA6vB,OA5HvBC,sCAAC,MAAA,EACW,WAAA,UACH,QAAA,QACF7T,KAAAA,eACE,QAAA,UACE,UAAA,UACG,eAAA,eAEZuR,UAAAA;AAAAA,IAAAA;AAAAA,IAeAqC;AAAAA,EAAAA,EAAAA,CAsGF,GAAO7vB,SAAAwtB,KAAAxtB,SAAA6vB,KAAA7vB,SAAA8vB,OAAAA,MAAA9vB,EAAA,GAAA,GA7HP8vB;AA6HO;ACjsBJ,SAAAC,YAAA1vB,IAAA;AAAA,QAAAL,IAAAC,uBAAA,CAAA,GAAqB;AAAA,IAAA0oB;AAAAA,IAAAxJ,UAAA6Q;AAAAA,EAAAA,IAAA3vB;AAM3B,MAAAC;AAAA2vB,OAAA;AAAA,QAEO9hB,MAAAC,QAAc4hB,cAAc,GAAC;AAAA,UAAApvB;AAAAZ,eAAAgwB,kBACxBpvB,MAAAmB,KAAAA,GAAGiuB,cAAc,GAAChwB,OAAAgwB,gBAAAhwB,OAAAY,OAAAA,MAAAZ,EAAA,CAAA,GAAzBM,KAAOM;AAAkB,YAAAqvB;AAAAA,IAAA;AAAA,QAAArvB;AAAA,QAAAZ,EAAA,CAAA,MAAA2oB,OAAAU,WAAAlK,YAAAnf,EAAA,CAAA,MAAAgwB,gBAAA;AAAA,UAAAlmB;AAAA9J,eAAAgwB,kBAGrBlmB,KAAA4f,CAAAA,WACE,OAAOsG,kBAAkB,aACpBA,eAAetG,MAAM,EAACrW,IAAA+I,KAAkB,IAE1CsN,OAAMrW,IAAAkJ,MAAoB,GAClCvc,OAAAgwB,gBAAAhwB,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA,GANIY,KAAA+nB,OAAMU,WAAAlK,SAAA+Q,OAA2B/c,KACtCE,KAAAA,IAAIvJ,EAKH,GACDqmB,KAAAA,WAAAlQ,MAA2B,CAC7B,GAACjgB,EAAA,CAAA,IAAA2oB,OAAAU,WAAAlK,UAAAnf,OAAAgwB,gBAAAhwB,OAAAY;AAAAA,IAAA;AAAAA,WAAAZ,EAAA,CAAA;AARDM,SAAOM;AAAAA,EAQN;AAE4C,SAA9BwvB,QAAAA,cAd+B9vB,QAcF;AAE/B;AAvBV,SAAA2f,OAAA5R,KAAA;AAAA,SAkBmBtM,KAAAA,GAAGsM,GAAG;AAAC;AAlB1B,SAAAkO,OAAAwE,IAAA;AAAA,SAgB2BA,GAAE5b;AAAA;AAhB7B,SAAAiX,MAAAiU,GAAA;AAAA,SAc4CA,EAAClrB;AAAA;ACb7C,SAAAmrB,gBAAAvwB,OAAA;AAAA,QAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAA,MAAAI;AAAAL,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAC4BvI,KAAA;AAAA,IAAAmN,YAAa;AAAA,EAAA,GAAcxN,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAA5D,QAAAuwB,iBAAuB/H,OAAAA,UAAUnoB,EAA2B;AAAC,MAAAC;AAAAN,IAAA,CAAA,MAAAuwB,kBAAAvwB,SAAAD,MAAA2mB,OAAAvH,YAC1B7e,KAAA;AAAA,IAAAqoB,QAAS4H;AAAAA,IAAcpR,UAAYpf,MAAK2mB,OAAAvH;AAAAA,EAAAA,GAAiBnf,OAAAuwB,gBAAAvwB,EAAA,CAAA,IAAAD,MAAA2mB,OAAAvH,UAAAnf,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAA5F,QAAAwwB,iBAAuBT,YAAYzvB,EAAyD;AAAC,MAAA,CAExFkwB,gBAAc;AAAA,QAAA5vB;AAAA,WAAAZ,EAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAEfhI,MAAAC,2BAAAA,IAAC2N,GAAAA,MAAA,EAAW,OAAA,UAAgB,QAAA,QAAe,SAAA,UACzC,UAAA3N,2BAAAA,IAAC,gBAAA,CAAA,CAAc,EAAA,CACjB,GAAOb,OAAAY,OAAAA,MAAAZ,EAAA,CAAA,GAFPY;AAAAA,EAEO;AAAA,MAAAA;AAAAZ,WAAAwwB,kBAAAxwB,EAAA,CAAA,MAAAD,MAAA4oB,UAKT/nB,KAAA4vB,0BAAc9e,QAAiB,CAE1B3R,MAAK4oB,OAAAjC,SAAgB1H,WAAY,YAAY,IAE9CwR,gBAAcxwB,OAAAwwB,gBAAAxwB,EAAA,CAAA,IAAAD,MAAA4oB,QAAA3oB,OAAAY,MAAAA,KAAAZ,EAAA,CAAA;AALpB,QAAAmf,WACEve;AAIkB,MAAAkJ;AAAA9J,IAAA,CAAA,MAAAD,MAAA4oB,UAEF7e,KAAA/J,MAAK4oB,OAAAjC,UAAgB1mB,EAAA,CAAA,IAAAD,MAAA4oB,QAAA3oB,OAAA8J,MAAAA,KAAA9J,EAAA,CAAA;AAAvC,QAAA2mB,YAAkB7c,GAAqB6c;AAAU,MAAA5V;AAAA/Q,IAAA,EAAA,MAAAmf,YAAAnf,UAAAD,MAAA4oB,UAAA3oB,EAAA,EAAA,MAAAD,MAAA2mB,OAAAE,kBAC1B7V,KAAAhR,MAAK2mB,OAAAE,kBAA0B7mB,MAAK4oB,OAAAjC,OAAAA,EAAgB1H,WAAYG,SAAQ,CAAA,GAAGnf,QAAAmf,UAAAnf,EAAA,EAAA,IAAAD,MAAA4oB,QAAA3oB,EAAA,EAAA,IAAAD,MAAA2mB,OAAAE,gBAAA5mB,QAAA+Q,MAAAA,KAAA/Q,EAAA,EAAA;AAAlG,QAAA4mB,iBAAuB7V;AAA2E,MAAAC;AAAA,SAAAhR,EAAA,EAAA,MAAAmf,YAAAnf,EAAA,EAAA,MAAA4mB,kBAAA5mB,EAAA,EAAA,MAAA2mB,aAAA3mB,UAAAD,SAGhGiR,oCAAC,WAAA,EACe,GACVjR,OACMof,UACCwH,WACKC,eAAAA,YAAc,GAC9B5mB,QAAAmf,UAAAnf,QAAA4mB,gBAAA5mB,QAAA2mB,WAAA3mB,QAAAD,OAAAC,QAAAgR,MAAAA,KAAAhR,EAAA,EAAA,GANFgR;AAME;ACdC,MAAMyf,4BAA4BC,MAAAA,UAGvC;AAAA,EACAC,YAAY5wB,OAAiC;AAC3C,UAAMA,KAAK,GACX,KAAKmJ,QAAQ;AAAA,MAAC6I,OAAO;AAAA,MAAM6e,YAAY;AAAA,IAAA;AAAA,EACzC;AAAA,EAEA,OAAOC,yBAAyB9e,OAAgB;AAC9C,WAAO;AAAA,MAACA,OAAOA,iBAAiBL,QAAQK,MAAMzD,UAAU,GAAGyD,KAAK;AAAA,IAAA;AAAA,EAClE;AAAA,EAEA+e,oBAAoBA,MAClB,KAAKC,SAAU3c,CAAAA,UAAU;AAAA,IAACrC,OAAO;AAAA,IAAM6e,YAAYxc,KAAKwc,aAAa;AAAA,EAAA,EAAG;AAAA,EAE1EI,4BAA4BA,MAAM;AAChC/kB,sBAAAA,GACA,KAAK6kB,kBAAAA;AAAAA,EACP;AAAA,EAEAG,SAAS;AACP,QAAI,CAAC,KAAK/nB,MAAM6I;AACd,aAAO,KAAKhS,MAAMmxB;AAGpB,UAAM5iB,UAAU,KAAKpF,MAAM6I,OACrBof,iBAAiB,KAAKjoB,MAAM0nB,aAAa;AAE/C,WACE/vB,2BAAAA,IAAC6N,GAAAA,MAAA,EACC,QAAO,QACP,UAAS,QACT,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,GACrB,UAAU,GACV,QAAO,UACP,MAAK,YAEL,UAAA7N,2BAAAA,IAACuwB,GAAAA,WAAA,EAAU,OAAO,GAChB,UAAAhgB,2BAAAA,KAACoD,GAAAA,OAAA,EAAM,OAAO,GACZ,UAAA;AAAA,MAAA3T,+BAAC,OAAA,EACC,UAAAA,2BAAAA,IAAC6X,GAAAA,QAAA,EACC,SAASyY,iBAAiB,KAAKH,4BAA4B,KAAKF,mBAChE,MAAMK,iBAAiB,0BAA0B,SACjD,MAAK,WAAS,GAElB;AAAA,MAEAtwB,2BAAAA,IAACwwB,GAAAA,WAAQ,UAAA,oBAAA,CAAiB;AAAA,MAE1BxwB,2BAAAA,IAAC6N,GAAAA,QAAK,QAAM,IAAC,QAAQ,GAAG,UAAS,QAAO,SAAS,GAAG,MAAK,WACvD,UAAA7N,2BAAAA,IAAC2T,GAAAA,OAAA,EAAM,OAAO,GACXlG,UAAAA,0CACEsM,GAAAA,MAAA,EAAK,MAAM,GACV,UAAAxJ,2BAAAA,KAAC,UAAA,EAAO,UAAA;AAAA,QAAA;AAAA,QAAQ9C;AAAAA,MAAAA,GAAQ,EAAA,CAC1B,GAEJ,EAAA,CACF;AAAA,IAAA,EAAA,CACF,GACF,GACF;AAAA,EAEJ;AACF;AC5EA,SAAAgjB,aAAAvxB,OAAA;AAAA,QAAAC,IAAAC,qBAAAA,EAAA,CAAA;AAAA,MAAAI;AAAAL,IAAA,CAAA,MAAA2I,OAAAC,IAAA,2BAAA,KAC2BvI,KAAA;AAAA,IAAAmN,YAAa;AAAA,EAAA,GAAIxN,OAAAK,MAAAA,KAAAL,EAAA,CAAA;AAA1C,QAAA2oB,SAAeH,OAAAA,UAAUnoB,EAAiB;AAAC,MAAAC;AAAAN,IAAA,CAAA,MAAAD,MAAAwxB,KAAAtmB,WACd3K,KAAA;AAAA,IAAA4mB,mBAAAtnB;AAAAA,IAAA,GAExBG,MAAKwxB,KAAAtmB;AAAAA,EAAAA,GACTjL,EAAA,CAAA,IAAAD,MAAAwxB,KAAAtmB,SAAAjL,OAAAM,MAAAA,KAAAN,EAAA,CAAA;AAHD,QAAA0mB,SAA6BpmB;AAG5B,MAAAM;AAAA,SAAAZ,EAAA,CAAA,MAAA2oB,UAAA3oB,SAAA0mB,UAGC9lB,oCAAC,qBAAA,EACC,UAAAC,2BAAAA,IAAC,iBAAA,EAAwB8nB,QAAgBjC,OAAAA,CAAM,EAAA,CACjD,GAAsB1mB,OAAA2oB,QAAA3oB,OAAA0mB,QAAA1mB,OAAAY,MAAAA,KAAAZ,EAAA,CAAA,GAFtBY;AAEsB;;"}
1
+ {"version":3,"file":"SanityVision.js","sources":["../../src/apiVersions.ts","../../src/components/DelayedSpinner.tsx","../../src/codemirror/extensions.ts","../../src/codemirror/useCodemirrorTheme.ts","../../src/codemirror/VisionCodeMirror.styled.tsx","../../src/codemirror/VisionCodeMirror.tsx","../../src/perspectives.ts","../../src/util/encodeQueryString.ts","../../src/util/isPlainObject.ts","../../src/util/localStorage.ts","../../src/util/parseApiQueryString.ts","../../src/util/prefixApiVersion.ts","../../src/util/validateApiVersion.ts","../../src/util/tryParseParams.ts","../../src/components/VisionGui.styled.tsx","../../src/components/ParamsEditor.tsx","../../src/hooks/useSavedQueries.ts","../../src/components/QueryRecall.styled.tsx","../../src/components/QueryRecall.tsx","../../src/components/usePaneSize.ts","../../src/components/VisionGuiControls.tsx","../../src/components/PerspectivePopover.styled.tsx","../../src/components/PerspectivePopover.tsx","../../src/components/VisionGuiHeader.tsx","../../src/util/getBlobUrl.ts","../../src/components/QueryErrorDialog.styled.tsx","../../src/components/QueryErrorDetails.tsx","../../src/components/QueryErrorDialog.tsx","../../src/components/ResultView.styled.tsx","../../src/components/ResultView.tsx","../../src/components/SaveResultButtons.tsx","../../src/components/VisionGuiResult.tsx","../../src/components/VisionGui.tsx","../../src/hooks/useDatasets.ts","../../src/containers/VisionContainer.tsx","../../src/containers/VisionErrorBoundary.tsx","../../src/SanityVision.tsx"],"sourcesContent":["export const API_VERSIONS = [\n 'v1',\n 'vX',\n 'v2021-03-25',\n 'v2021-10-21',\n 'v2022-03-07',\n 'v2025-02-19',\n `v${new Date().toISOString().split('T')[0]}`,\n]\nexport const [DEFAULT_API_VERSION] = API_VERSIONS.slice(-1)\n","import {Spinner} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\n\ninterface DelayedSpinnerProps {\n delay?: number\n}\n\n// Waits for X ms before showing a spinner\nexport function DelayedSpinner(props: DelayedSpinnerProps) {\n const [show, setShow] = useState(false)\n\n useEffect(() => {\n const timer = setTimeout(() => setShow(true), props.delay || 500)\n return () => clearTimeout(timer)\n }, [props.delay])\n\n return show ? <Spinner muted size={4} /> : null\n}\n","import {closeBrackets} from '@codemirror/autocomplete'\nimport {defaultKeymap, history, historyKeymap} from '@codemirror/commands'\nimport {javascriptLanguage} from '@codemirror/lang-javascript'\nimport {\n bracketMatching,\n defaultHighlightStyle,\n indentOnInput,\n syntaxHighlighting,\n} from '@codemirror/language'\nimport {highlightSelectionMatches} from '@codemirror/search'\nimport {type Extension} from '@codemirror/state'\nimport {\n drawSelection,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n} from '@codemirror/view'\n\nexport const codemirrorExtensions: Extension[] = [\n [javascriptLanguage],\n lineNumbers(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSelectionMatches(),\n highlightSpecialChars(),\n indentOnInput(),\n bracketMatching(),\n closeBrackets(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, {fallback: true}),\n keymap.of(\n [\n // Override the default keymap for Mod-Enter to not insert a new line, we have a custom event handler for executing queries\n {key: 'Mod-Enter', run: () => true},\n\n // Add the default keymap and history keymap\n defaultKeymap,\n historyKeymap,\n ]\n .flat()\n .filter(Boolean),\n ),\n]\n","import {HighlightStyle, syntaxHighlighting} from '@codemirror/language'\nimport {EditorView} from '@codemirror/view'\nimport {tags as t} from '@lezer/highlight'\nimport {hues} from '@sanity/color'\nimport {rem, type Theme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function useCodemirrorTheme(theme: Theme) {\n const cmTheme = useMemo(() => createTheme(theme), [theme])\n const cmHighlight = useMemo(() => syntaxHighlighting(createHighlight(theme)), [theme])\n\n return [cmTheme, cmHighlight]\n}\n\nfunction createTheme(theme: Theme) {\n const {color, fonts} = theme.sanity\n const card = color.card.enabled\n const cursor = hues.blue[color.dark ? 400 : 500].hex\n const selection = hues.gray[theme.sanity.color.dark ? 900 : 100].hex\n\n return EditorView.theme(\n {\n '&': {\n color: card.fg,\n backgroundColor: card.bg,\n },\n\n '.cm-content': {\n caretColor: cursor,\n },\n\n '.cm-editor': {\n fontFamily: fonts.code.family,\n fontSize: rem(fonts.code.sizes[1].fontSize),\n lineHeight: 'inherit',\n },\n\n '.cm-cursor, .cm-dropCursor': {borderLeftColor: cursor},\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: selection,\n },\n\n '.cm-panels': {backgroundColor: card.bg, color: card.fg},\n '.cm-panels.cm-panels-top': {borderBottom: `2px solid ${card.border}`},\n '.cm-panels.cm-panels-bottom': {borderTop: `2px solid ${card.border}`},\n },\n {dark: color.dark},\n )\n}\n\nfunction createHighlight(theme: Theme) {\n const c = theme.sanity.color.base\n const s = theme.sanity.color.syntax\n return HighlightStyle.define([\n {tag: t.keyword, color: s.keyword},\n {tag: [t.propertyName, t.name, t.deleted, t.character, t.macroName], color: s.property},\n {tag: [t.function(t.variableName), t.labelName], color: s.function},\n {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: s.variable},\n {tag: [t.definition(t.name), t.separator], color: s.constant},\n {\n tag: [\n t.typeName,\n t.className,\n t.number,\n t.changed,\n t.annotation,\n t.modifier,\n t.self,\n t.namespace,\n ],\n color: s.number,\n },\n {\n tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)],\n color: s.operator,\n },\n {tag: [t.meta, t.comment], color: s.comment},\n {tag: t.strong, fontWeight: 'bold'},\n {tag: t.emphasis, fontStyle: 'italic'},\n {tag: t.strikethrough, textDecoration: 'line-through'},\n {tag: t.heading, fontWeight: 'bold', color: s.property},\n {tag: [t.atom, t.bool, t.special(t.variableName)], color: s.boolean},\n {tag: [t.processingInstruction, t.string, t.inserted], color: s.string},\n {tag: t.invalid, color: c.fg},\n ])\n}\n","import {rem} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const EditorRoot = styled.div`\n width: 100%;\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n overflow: clip;\n position: relative;\n display: flex;\n\n & .cm-theme {\n width: 100%;\n }\n\n & .cm-editor {\n height: 100%;\n\n font-size: 16px;\n line-height: 21px;\n }\n\n & .cm-line {\n padding-left: ${({theme}) => rem(theme.sanity.space[3])};\n }\n\n & .cm-content {\n border-right-width: ${({theme}) => rem(theme.sanity.space[4])} !important;\n padding-top: ${({theme}) => rem(theme.sanity.space[5])};\n }\n`\n","import {useTheme} from '@sanity/ui'\nimport CodeMirror, {\n EditorSelection,\n type ReactCodeMirrorProps,\n type ReactCodeMirrorRef,\n} from '@uiw/react-codemirror'\nimport {forwardRef, useCallback, useImperativeHandle, useRef, useState} from 'react'\n\nimport {codemirrorExtensions} from './extensions'\nimport {useCodemirrorTheme} from './useCodemirrorTheme'\nimport {EditorRoot} from './VisionCodeMirror.styled'\n\nexport interface VisionCodeMirrorHandle {\n resetEditorContent: (newContent: string) => void\n}\n\nexport const VisionCodeMirror = forwardRef<\n VisionCodeMirrorHandle,\n Pick<ReactCodeMirrorProps, 'onChange'> & {\n initialValue: ReactCodeMirrorProps['value']\n }\n>((props, ref) => {\n // The value prop is only passed for initial value, and is not updated when the parent component updates the value.\n // If you need to update the value, use the resetEditorContent function.\n const [initialValue] = useState(props.initialValue)\n const sanityTheme = useTheme()\n const theme = useCodemirrorTheme(sanityTheme)\n const codeMirrorRef = useRef<ReactCodeMirrorRef>(null)\n\n const resetEditorContent = useCallback((newContent: string) => {\n const editorView = codeMirrorRef.current?.view\n if (!editorView) return\n\n const currentDoc = editorView.state.doc.toString()\n if (newContent !== currentDoc) {\n editorView.dispatch({\n changes: {from: 0, to: currentDoc.length, insert: newContent},\n selection: EditorSelection.cursor(newContent.length), // Place cursor at end\n })\n }\n }, [])\n\n useImperativeHandle(\n ref,\n () => ({\n resetEditorContent,\n }),\n [resetEditorContent],\n )\n\n return (\n <EditorRoot>\n <CodeMirror\n ref={codeMirrorRef}\n basicSetup={false}\n theme={theme}\n extensions={codemirrorExtensions}\n value={initialValue}\n onChange={props.onChange}\n />\n </EditorRoot>\n )\n})\n\n// Add display name\nVisionCodeMirror.displayName = 'VisionCodeMirror'\n","import {type ClientPerspective} from '@sanity/client'\nimport isEqual from 'react-fast-compare'\nimport {type PerspectiveContextValue, type PerspectiveStack} from 'sanity'\n\nexport const SUPPORTED_PERSPECTIVES = [\n 'pinnedRelease',\n 'scheduledDrafts',\n 'raw',\n 'published',\n 'drafts',\n] as const\n\nexport type SupportedPerspective = (typeof SUPPORTED_PERSPECTIVES)[number]\n\n/**\n * Virtual perspectives are recognised by Vision, but do not concretely reflect the names of real\n * perspectives. Virtual perspectives are transformed into real perspectives before being used to\n * interact with data.\n *\n * For example, the `pinnedRelease` virtual perspective is transformed to the real perspective\n * currently pinned in Studio, and `scheduledDrafts` is transformed to a stack of all scheduled\n * draft release IDs.\n */\nexport const VIRTUAL_PERSPECTIVES = ['pinnedRelease', 'scheduledDrafts'] as const\n\nexport type VirtualPerspective = (typeof VIRTUAL_PERSPECTIVES)[number]\n\nexport function isSupportedPerspective(p: string): p is SupportedPerspective {\n return SUPPORTED_PERSPECTIVES.includes(p as SupportedPerspective)\n}\n\nexport function isVirtualPerspective(\n maybeVirtualPerspective: unknown,\n): maybeVirtualPerspective is VirtualPerspective {\n return (\n typeof maybeVirtualPerspective === 'string' &&\n VIRTUAL_PERSPECTIVES.includes(maybeVirtualPerspective as VirtualPerspective)\n )\n}\n\nexport function hasPinnedPerspective({selectedPerspectiveName}: PerspectiveContextValue): boolean {\n return typeof selectedPerspectiveName !== 'undefined'\n}\n\nexport function hasPinnedPerspectiveChanged(\n previous: PerspectiveContextValue,\n next: PerspectiveContextValue,\n): boolean {\n const hasPerspectiveStackChanged = !isEqual(previous.perspectiveStack, next.perspectiveStack)\n\n return (\n previous.selectedPerspectiveName !== next.selectedPerspectiveName || hasPerspectiveStackChanged\n )\n}\n\nexport function getActivePerspective({\n visionPerspective,\n perspectiveStack,\n scheduledDraftsStack,\n}: {\n visionPerspective: ClientPerspective | SupportedPerspective | undefined\n perspectiveStack: PerspectiveContextValue['perspectiveStack']\n scheduledDraftsStack?: PerspectiveStack\n}): ClientPerspective | undefined {\n if (visionPerspective === 'pinnedRelease') {\n return perspectiveStack\n }\n if (visionPerspective === 'scheduledDrafts') {\n return scheduledDraftsStack\n }\n return visionPerspective\n}\n","export function encodeQueryString(\n query: string,\n params: Record<string, unknown> = {},\n options: Record<string, string | string[]> = {},\n): string {\n const searchParams = new URLSearchParams()\n searchParams.set('query', query)\n\n for (const [key, value] of Object.entries(params)) {\n searchParams.set(`$${key}`, JSON.stringify(value))\n }\n\n for (const [key, value] of Object.entries(options)) {\n if (value) searchParams.set(key, `${value}`)\n }\n\n return `?${searchParams}`\n}\n","export function isPlainObject(obj: unknown): obj is Record<string, unknown> {\n return (\n !!obj && typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]'\n )\n}\n","import {isPlainObject} from './isPlainObject'\n\nconst hasLocalStorage = supportsLocalStorage()\nconst keyPrefix = 'sanityVision:'\n\nexport interface LocalStorageish {\n get: <T>(key: string, defaultVal: T) => T\n set: <T>(key: string, value: T) => T\n merge: <T>(props: T) => T\n}\n\nexport function clearLocalStorage() {\n if (!hasLocalStorage) {\n return\n }\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key?.startsWith(keyPrefix)) {\n localStorage.removeItem(key)\n }\n }\n}\n\nexport function getLocalStorage(namespace: string): LocalStorageish {\n const storageKey = `${keyPrefix}${namespace}`\n let loadedState: Record<string, unknown> | null = null\n\n return {get, set, merge}\n\n function get<T>(key: string, defaultVal: T): T {\n const state = ensureState()\n return typeof state[key] === 'undefined' ? defaultVal : (state[key] as T)\n }\n\n function set<T>(key: string, value: T): T {\n const state = ensureState()\n state[key] = value\n localStorage.setItem(storageKey, JSON.stringify(loadedState))\n return value\n }\n\n function merge<T>(props: T): T {\n const state = {...ensureState(), ...props}\n localStorage.setItem(storageKey, JSON.stringify(state))\n return state\n }\n\n function ensureState(): Record<string, unknown> {\n if (loadedState === null) {\n loadedState = loadState()\n }\n\n return loadedState\n }\n\n function loadState() {\n if (!hasLocalStorage) {\n return {}\n }\n\n try {\n const stored = JSON.parse(localStorage.getItem(storageKey) || '{}')\n return isPlainObject(stored) ? stored : {}\n } catch (err) {\n return {}\n }\n }\n}\n\nfunction supportsLocalStorage() {\n const mod = 'lsCheck'\n try {\n localStorage.setItem(mod, mod)\n localStorage.removeItem(mod)\n return true\n } catch (err) {\n return false\n }\n}\n","export interface ParsedApiQueryString {\n query: string\n params: Record<string, unknown>\n options: Record<string, string>\n}\n\nexport function parseApiQueryString(qs: URLSearchParams): ParsedApiQueryString {\n const params: Record<string, unknown> = {}\n const options: Record<string, string> = {}\n\n for (const [key, value] of qs.entries()) {\n if (key[0] === '$') {\n params[key.slice(1)] = JSON.parse(value)\n continue\n }\n\n if (key === 'perspective') {\n options[key] = value\n continue\n }\n }\n\n return {query: qs.get('query') || '', params, options}\n}\n","export function prefixApiVersion(version: string): string {\n if (version[0] !== 'v' && version !== 'other') {\n return `v${version}`\n }\n\n return version\n}\n","export function validateApiVersion(apiVersion: string): boolean {\n const parseableApiVersion = apiVersion.replace(/^v/, '').trim().toUpperCase()\n\n const isValidApiVersion =\n parseableApiVersion.length > 0 &&\n (parseableApiVersion === 'X' ||\n parseableApiVersion === '1' ||\n (/^\\d{4}-\\d{2}-\\d{2}$/.test(parseableApiVersion) && !isNaN(Date.parse(parseableApiVersion))))\n\n return isValidApiVersion\n}\n","import JSON5 from 'json5'\nimport {type TFunction} from 'sanity'\n\nexport function tryParseParams(\n val: string,\n t: TFunction<'vision', undefined>,\n): Record<string, unknown> | Error {\n try {\n const parsed = val ? JSON5.parse(val) : {}\n return typeof parsed === 'object' && parsed && !Array.isArray(parsed) ? parsed : {}\n } catch (err) {\n // JSON5 always prefixes the error message with JSON5:, so we remove it\n // to clean up the error tooltip\n err.message = `${t('params.error.params-invalid-json')}:\\n\\n${err.message.replace(\n 'JSON5:',\n '',\n )}`\n return err\n }\n}\n","import {Box, Card, Flex, Label, rem, Text} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const Root = styled(Flex)`\n .sidebarPanes .Pane {\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n & .Resizer {\n background: var(--card-border-color);\n opacity: 1;\n z-index: 1;\n box-sizing: border-box;\n background-clip: padding-box;\n border: solid transparent;\n }\n\n & .Resizer:hover {\n border-color: var(--card-shadow-ambient-color);\n }\n\n & .Resizer.horizontal {\n height: 11px;\n margin: -5px 0;\n border-width: 5px 0;\n cursor: row-resize;\n width: 100%;\n z-index: 4;\n }\n\n & .Resizer.vertical {\n width: 11px;\n margin: 0 -5px;\n border-width: 0 5px;\n cursor: col-resize;\n z-index: 2; /* To prevent the resizer from being hidden behind CodeMirror scroll area */\n }\n\n .Resizer.disabled {\n cursor: not-allowed;\n }\n\n .Resizer.disabled:hover {\n border-color: transparent;\n }\n`\n\nRoot.displayName = 'Root'\n\nexport const Header = styled(Card)`\n border-bottom: 1px solid var(--card-border-color);\n`\n\nexport const StyledLabel = styled(Label)`\n flex: 1;\n`\n\nexport const SplitpaneContainer = styled(Box)`\n position: relative;\n`\n\nexport const QueryCopyLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n\nexport const InputBackgroundContainer = styled(Box)`\n position: absolute;\n top: 1rem;\n left: 0;\n padding: 0;\n margin: 0;\n z-index: 10;\n right: 0;\n\n ${StyledLabel} {\n user-select: none;\n }\n`\n\nexport const InputBackgroundContainerLeft = styled(InputBackgroundContainer)`\n // This is so its aligned with the gutters of CodeMirror\n left: 33px;\n`\n\nexport const InputContainer = styled(Card)`\n width: 100%;\n height: 100%;\n position: relative;\n flex-direction: column;\n`\n\nexport const ResultOuterContainer = styled(Flex)`\n height: 100%;\n`\n\nexport const ResultInnerContainer = styled(Box)`\n position: relative;\n`\n\nexport const ResultContainer = styled(Card)<{$isInvalid: boolean}>`\n height: 100%;\n width: 100%;\n position: absolute;\n max-width: 100%;\n\n ${({$isInvalid}) =>\n $isInvalid &&\n css`\n &:after {\n background-color: var(--card-bg-color);\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n }\n `}\n`\n\nexport const Result = styled(Box)`\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 20;\n`\n\nexport const ResultFooter = styled(Flex)`\n border-top: 1px solid var(--card-border-color);\n`\n\nexport const TimingsCard = styled(Card)`\n position: relative;\n`\n\nexport const TimingsContainer = styled(Box)`\n width: 100%;\n height: 100%;\n`\n\nexport const TimingsTextContainer = styled(Flex)`\n height: 100%;\n min-height: ${({theme}) =>\n rem(\n theme.sanity.space[3] * 2 +\n theme.sanity.fonts.text.sizes[2].lineHeight -\n theme.sanity.fonts.text.sizes[2].ascenderHeight -\n theme.sanity.fonts.text.sizes[2].descenderHeight,\n )};\n`\n\nexport const DownloadsCard = styled(Card)`\n position: relative;\n`\n\nexport const SaveResultLabel = styled(Text)`\n transform: initial;\n &:before,\n &:after {\n content: none;\n }\n > span {\n display: flex !important;\n gap: ${({theme}) => rem(theme.sanity.space[3])};\n align-items: center;\n }\n`\n\nexport const ControlsContainer = styled(Box)`\n border-top: 1px solid var(--card-border-color);\n`\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text, Tooltip} from '@sanity/ui'\nimport {debounce} from 'lodash'\nimport {type RefObject, useCallback, useMemo} from 'react'\nimport {type TFunction, useTranslation} from 'sanity'\n\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {tryParseParams} from '../util/tryParseParams'\nimport {type Params} from './VisionGui'\nimport {InputBackgroundContainerLeft, StyledLabel} from './VisionGui.styled'\n\nconst defaultValue = `{\\n \\n}`\n\nexport interface ParamsEditorProps {\n value: string\n onChange: (changeEvt: string) => void\n paramsError: string | undefined\n hasValidParams: boolean\n editorRef: RefObject<VisionCodeMirrorHandle | null>\n}\n\nexport interface ParamsEditorChange {\n valid: boolean\n}\n\nexport function ParamsEditor(props: ParamsEditorProps) {\n const {onChange, paramsError, hasValidParams, editorRef} = props\n const {t} = useTranslation(visionLocaleNamespace)\n\n const handleChangeRaw = useCallback(\n (newValue: string) => {\n onChange(newValue)\n },\n [onChange],\n )\n\n const handleChange = useMemo(() => debounce(handleChangeRaw, 333), [handleChangeRaw])\n return (\n <Card flex={1} tone={hasValidParams ? 'default' : 'critical'} data-testid=\"params-editor\">\n <InputBackgroundContainerLeft>\n <Flex>\n <StyledLabel muted>{t('params.label')}</StyledLabel>\n {paramsError && (\n <Tooltip animate placement=\"top\" portal content={<Text size={1}>{paramsError}</Text>}>\n <Box padding={1} marginX={2}>\n <Text>\n <ErrorOutlineIcon />\n </Text>\n </Box>\n </Tooltip>\n )}\n </Flex>\n </InputBackgroundContainerLeft>\n <VisionCodeMirror\n ref={editorRef}\n initialValue={props.value || defaultValue}\n onChange={handleChange}\n />\n </Card>\n )\n}\n\nexport function parseParams(\n value: string,\n t: TFunction<typeof visionLocaleNamespace, undefined>,\n): Params {\n const parsedParams = tryParseParams(value, t)\n const params = parsedParams instanceof Error ? {} : parsedParams\n const validationError = parsedParams instanceof Error ? parsedParams.message : undefined\n const isValid = !validationError\n\n return {\n parsed: params,\n raw: value,\n valid: isValid,\n error: validationError,\n }\n}\n","import {uuid} from '@sanity/uuid' // Import the UUID library\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {map, startWith} from 'rxjs/operators'\nimport {type KeyValueStoreValue, useKeyValueStore} from 'sanity'\n\nconst STORED_QUERIES_NAMESPACE = 'studio.vision-tool.saved-queries'\n\nexport interface QueryConfig {\n _key: string\n url: string\n savedAt: string\n title?: string\n shared?: boolean\n}\n\nexport interface StoredQueries {\n queries: QueryConfig[]\n}\n\nconst defaultValue = {\n queries: [],\n}\nconst keyValueStoreKey = STORED_QUERIES_NAMESPACE\n\nexport function useSavedQueries(): {\n queries: QueryConfig[]\n saveQuery: (query: Omit<QueryConfig, '_key'>) => void\n updateQuery: (query: QueryConfig) => void\n deleteQuery: (key: string) => void\n saving: boolean\n deleting: string[]\n saveQueryError: Error | undefined\n deleteQueryError: Error | undefined\n error: Error | undefined\n} {\n const keyValueStore = useKeyValueStore()\n\n const [value, setValue] = useState<StoredQueries>(defaultValue)\n const [saving, setSaving] = useState(false)\n const [deleting, setDeleting] = useState<string[]>([])\n const [saveQueryError, setSaveQueryError] = useState<Error | undefined>()\n const [deleteQueryError, setDeleteQueryError] = useState<Error | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const queries = useMemo(() => {\n return keyValueStore.getKey(keyValueStoreKey)\n }, [keyValueStore])\n\n useEffect(() => {\n const sub = queries\n .pipe(\n startWith(defaultValue as any),\n map((data: StoredQueries) => {\n if (!data) {\n return defaultValue\n }\n return data\n }),\n )\n .subscribe({\n next: setValue,\n error: (err) => setError(err as Error),\n })\n\n return () => sub?.unsubscribe()\n }, [queries, keyValueStore])\n\n const saveQuery = useCallback(\n (query: Omit<QueryConfig, '_key'>) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const newQuery = {...query, _key: uuid()} // Add a unique _key to the query\n const newQueries = [newQuery, ...value.queries]\n setValue({queries: newQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: newQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n } finally {\n setSaving(false)\n }\n },\n [keyValueStore, value.queries],\n )\n\n const updateQuery = useCallback(\n (query: QueryConfig) => {\n setSaving(true)\n setSaveQueryError(undefined)\n try {\n const updatedQueries = value.queries.map((q) =>\n q._key === query._key ? {...q, ...query} : q,\n )\n setValue({queries: updatedQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: updatedQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setSaveQueryError(err as Error)\n } finally {\n setSaving(false)\n }\n },\n [keyValueStore, value.queries],\n )\n\n const deleteQuery = useCallback(\n (key: string) => {\n setDeleting((prev) => [...prev, key])\n setDeleteQueryError(undefined)\n try {\n const filteredQueries = value.queries.filter((q) => q._key !== key)\n setValue({queries: filteredQueries})\n keyValueStore.setKey(keyValueStoreKey, {\n queries: filteredQueries,\n } as unknown as KeyValueStoreValue)\n } catch (err) {\n setDeleteQueryError(err as Error)\n } finally {\n setDeleting((prev) => prev.filter((k) => k !== key))\n }\n },\n [keyValueStore, value.queries],\n )\n\n return {\n queries: value.queries,\n saveQuery,\n updateQuery,\n deleteQuery,\n saving,\n deleting,\n saveQueryError,\n deleteQueryError,\n error,\n }\n}\n","import {Box, Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const FixedHeader = styled(Stack)`\n position: sticky;\n top: 0;\n background: ${({theme}) => theme.sanity.color.base.bg};\n z-index: 1;\n`\n\nexport const ScrollContainer = styled(Box)`\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${({theme}) => theme.sanity.color.base.border};\n border-radius: 4px;\n }\n`\n","import {AddIcon, SearchIcon, TrashIcon} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Code,\n Flex,\n Menu,\n MenuButton,\n MenuItem,\n Stack,\n Text,\n TextInput,\n useToast,\n} from '@sanity/ui'\nimport {isEqual} from 'lodash'\nimport {type ReactElement, useCallback, useState} from 'react'\nimport {ContextMenuButton, useDateTimeFormat, useTranslation} from 'sanity'\n\nimport {type QueryConfig, useSavedQueries} from '../hooks/useSavedQueries'\nimport {visionLocaleNamespace} from '../i18n'\nimport {FixedHeader, ScrollContainer} from './QueryRecall.styled'\nimport {type ParsedUrlState} from './VisionGui'\n\nexport function QueryRecall({\n url,\n getStateFromUrl,\n setStateFromParsedUrl,\n currentQuery,\n currentParams,\n generateUrl,\n}: {\n url?: string\n getStateFromUrl: (data: string) => ParsedUrlState | null\n setStateFromParsedUrl: (parsedUrlObj: ParsedUrlState) => void\n currentQuery: string\n currentParams: Record<string, unknown>\n generateUrl: (query: string, params: Record<string, unknown>) => string\n}): ReactElement {\n const toast = useToast()\n const {saveQuery, updateQuery, queries, deleteQuery, saving, deleting, saveQueryError} =\n useSavedQueries()\n const {t} = useTranslation(visionLocaleNamespace)\n const formatDate = useDateTimeFormat({\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n const [editingKey, setEditingKey] = useState<string | null>(null)\n const [editingTitle, setEditingTitle] = useState('')\n const [optimisticTitles, setOptimisticTitles] = useState<Record<string, string>>({})\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedUrl, setSelectedUrl] = useState<string | undefined>(url)\n\n const handleSave = useCallback(async () => {\n // Generate the correct URL first\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(new Date(duplicateQuery?.savedAt || ''))}`,\n })\n return\n }\n\n if (newUrl) {\n await saveQuery({\n url: newUrl,\n savedAt: new Date().toISOString(),\n title: 'Untitled',\n })\n // Set the selected URL to the newly saved query's URL\n setSelectedUrl(newUrl)\n }\n if (saveQueryError) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: saveQueryError.message,\n })\n } else {\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n }\n }, [\n queries,\n saveQueryError,\n toast,\n t,\n currentQuery,\n currentParams,\n getStateFromUrl,\n generateUrl,\n formatDate,\n saveQuery,\n ])\n\n const handleTitleSave = useCallback(\n async (query: QueryConfig, newTitle: string) => {\n setEditingKey(null)\n setOptimisticTitles((prev) => ({...prev, [query._key]: newTitle}))\n\n try {\n await updateQuery({\n ...query,\n title: newTitle,\n })\n // Clear optimistic title on success\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n } catch (err) {\n // Clear optimistic title on error\n setOptimisticTitles((prev) => {\n const next = {...prev}\n delete next[query._key]\n return next\n })\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [updateQuery, toast, t],\n )\n\n const handleUpdate = useCallback(\n async (query: QueryConfig) => {\n const newUrl = generateUrl(currentQuery, currentParams)\n\n // Check for duplicates by comparing query content and params\n const isDuplicate = queries?.some((q) => {\n // Skip the current query when checking for duplicates\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n\n if (isDuplicate) {\n const duplicateQuery = queries?.find((q) => {\n if (q._key === query._key) return false\n const savedQueryObj = getStateFromUrl(q.url)\n return (\n savedQueryObj &&\n savedQueryObj.query === currentQuery &&\n isEqual(savedQueryObj.params, currentParams)\n )\n })\n toast.push({\n closable: true,\n status: 'warning',\n title: t('save-query.already-saved'),\n description: `${duplicateQuery?.title} - ${formatDate.format(\n new Date(duplicateQuery?.savedAt || ''),\n )}`,\n })\n return\n }\n\n try {\n await updateQuery({\n ...query,\n url: newUrl,\n savedAt: new Date().toISOString(),\n })\n setSelectedUrl(newUrl)\n toast.push({\n closable: true,\n status: 'success',\n title: t('save-query.success'),\n })\n } catch (err) {\n toast.push({\n closable: true,\n status: 'error',\n title: t('save-query.error'),\n description: err.message,\n })\n }\n },\n [\n currentQuery,\n currentParams,\n formatDate,\n generateUrl,\n updateQuery,\n toast,\n t,\n queries,\n getStateFromUrl,\n ],\n )\n\n const filteredQueries = queries?.filter((q) => {\n return q?.title?.toLowerCase().includes(searchQuery.toLowerCase())\n })\n\n return (\n <ScrollContainer>\n <FixedHeader space={3}>\n <Flex padding={3} paddingTop={4} paddingBottom={0} justify=\"space-between\" align=\"center\">\n <Text weight=\"semibold\" style={{textTransform: 'capitalize'}} size={4}>\n {t('label.saved-queries')}\n </Text>\n <Button\n label={t('action.save-query')}\n icon={AddIcon}\n disabled={saving}\n onClick={handleSave}\n mode=\"bleed\"\n />\n </Flex>\n <Box padding={3} paddingTop={0}>\n <TextInput\n placeholder={t('label.search-queries')}\n icon={SearchIcon}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.currentTarget.value)}\n />\n </Box>\n </FixedHeader>\n <Stack paddingY={3}>\n {filteredQueries?.map((q) => {\n const queryObj = getStateFromUrl(q.url)\n const isSelected = selectedUrl === q.url\n\n // Compare against current live state\n const areQueriesEqual =\n queryObj && currentQuery === queryObj.query && isEqual(currentParams, queryObj.params)\n\n const isEdited = isSelected && !areQueriesEqual\n return (\n <Card\n key={q._key}\n width={'fill'}\n padding={4}\n border\n tone={isSelected ? 'positive' : 'default'}\n onClick={() => {\n setSelectedUrl(q.url) // Update the selected query immediately\n const parsedUrl = getStateFromUrl(q.url)\n if (parsedUrl) {\n setStateFromParsedUrl(parsedUrl)\n }\n }}\n style={{position: 'relative'}}\n >\n <Stack space={3}>\n <Flex justify=\"space-between\" align={'center'}>\n <Flex align=\"center\" gap={2} paddingRight={1}>\n {editingKey === q._key ? (\n <TextInput\n value={editingTitle}\n onChange={(event) => setEditingTitle(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n handleTitleSave(q, editingTitle)\n } else if (event.key === 'Escape') {\n setEditingKey(null)\n }\n }}\n onBlur={() => handleTitleSave(q, editingTitle)}\n autoFocus\n style={{maxWidth: '170px', height: '24px'}}\n />\n ) : (\n <Text\n weight=\"bold\"\n size={3}\n textOverflow=\"ellipsis\"\n style={{maxWidth: '170px', cursor: 'pointer', padding: '4px 0'}}\n title={\n optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)\n }\n onClick={() => {\n setEditingKey(q._key)\n setEditingTitle(q.title || q._key.slice(0, 5))\n }}\n >\n {optimisticTitles[q._key] ||\n q.title ||\n q._key.slice(q._key.length - 5, q._key.length)}\n </Text>\n )}\n {isEdited && (\n <Box\n style={{\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: 'var(--card-focus-ring-color)',\n }}\n />\n )}\n </Flex>\n <MenuButton\n button={<ContextMenuButton />}\n id={`${q._key}-menu`}\n menu={\n <Menu\n // style={{background: 'white', backgroundColor: 'white', borderRadius: '11%'}}\n >\n <MenuItem\n tone=\"critical\"\n padding={3}\n icon={TrashIcon}\n text={t('action.delete')}\n onClick={(event) => {\n event.stopPropagation()\n deleteQuery(q._key)\n }}\n />\n </Menu>\n }\n popover={{portal: true, placement: 'bottom-end', tone: 'default'}}\n />\n </Flex>\n\n <Code muted>{queryObj?.query.split('{')[0]}</Code>\n\n <Flex align=\"center\" gap={1}>\n <Text size={1} muted>\n {formatDate.format(new Date(q.savedAt || ''))}\n </Text>\n </Flex>\n\n {isEdited && (\n <Button\n mode=\"ghost\"\n tone=\"default\"\n size={1}\n padding={2}\n style={{\n height: '24px',\n position: 'absolute',\n right: '16px',\n bottom: '16px',\n fontSize: '12px',\n }}\n text={t('action.update')}\n onClick={(e) => {\n e.stopPropagation()\n handleUpdate(q)\n }}\n />\n )}\n </Stack>\n </Card>\n )\n })}\n </Stack>\n </ScrollContainer>\n )\n}\n","import {useEffect, useState} from 'react'\n\ninterface PaneSizeOptions {\n defaultSize: number\n size?: number\n allowResize: boolean\n minSize: number\n maxSize: number\n}\nfunction narrowBreakpoint(): boolean {\n return typeof window !== 'undefined' && window.innerWidth > 600\n}\n\nfunction calculatePaneSizeOptions(height: number | undefined): PaneSizeOptions {\n let rootHeight = height\n\n if (!rootHeight) {\n // Initial root height without header\n rootHeight =\n typeof window !== 'undefined' && typeof document !== 'undefined'\n ? document.body.getBoundingClientRect().height - 60\n : 0\n }\n return {\n defaultSize: rootHeight / (narrowBreakpoint() ? 2 : 1),\n size: rootHeight > 550 ? undefined : rootHeight * 0.4,\n allowResize: rootHeight > 550,\n minSize: Math.min(170, Math.max(170, rootHeight / 2)),\n maxSize: rootHeight > 650 ? rootHeight * 0.7 : rootHeight * 0.6,\n }\n}\n\nexport function usePaneSize({\n visionRootRef,\n}: {\n visionRootRef: React.RefObject<HTMLDivElement | null>\n}) {\n const [isNarrowBreakpoint, setIsNarrowBreakpoint] = useState(() => narrowBreakpoint())\n const [paneSizeOptions, setPaneSizeOptions] = useState<PaneSizeOptions>(() =>\n calculatePaneSizeOptions(undefined),\n )\n\n useEffect(() => {\n if (!visionRootRef.current) {\n return undefined\n }\n const handleResize = (entries: ResizeObserverEntry[]) => {\n setIsNarrowBreakpoint(narrowBreakpoint())\n const entry = entries?.[0]\n if (entry) {\n setPaneSizeOptions(calculatePaneSizeOptions(entry.contentRect.height))\n }\n }\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(visionRootRef.current)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [visionRootRef])\n\n return {paneSizeOptions, isNarrowBreakpoint}\n}\n","import {PlayIcon, StopIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Hotkeys, Text, Tooltip} from '@sanity/ui'\nimport {useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {ControlsContainer} from './VisionGui.styled'\n\nexport interface VisionGuiControlsProps {\n hasValidParams: boolean\n queryInProgress: boolean\n listenInProgress: boolean\n onQueryExecution: () => void\n onListenExecution: () => void\n}\n\n/**\n * Vision GUI controls\n * To handle query and listen execution.\n */\nexport function VisionGuiControls({\n hasValidParams,\n listenInProgress,\n queryInProgress,\n onQueryExecution,\n onListenExecution,\n}: VisionGuiControlsProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n\n return (\n <ControlsContainer>\n <Card padding={3} paddingX={3}>\n <Tooltip\n content={\n <Card radius={4}>\n <Text size={1} muted>\n {t('params.error.params-invalid-json')}\n </Text>\n </Card>\n }\n placement=\"top\"\n disabled={hasValidParams}\n portal\n >\n <Flex justify=\"space-evenly\">\n <Box flex={1}>\n <Tooltip\n content={\n <Card radius={4}>\n <Hotkeys keys={['Ctrl', 'Enter']} />\n </Card>\n }\n placement=\"top\"\n portal\n >\n <Button\n width=\"fill\"\n onClick={onQueryExecution}\n type=\"button\"\n icon={queryInProgress ? StopIcon : PlayIcon}\n disabled={listenInProgress || !hasValidParams}\n tone={queryInProgress ? 'positive' : 'primary'}\n text={queryInProgress ? t('action.query-cancel') : t('action.query-execute')}\n />\n </Tooltip>\n </Box>\n <Box flex={1} marginLeft={3}>\n <Button\n width=\"fill\"\n onClick={onListenExecution}\n type=\"button\"\n icon={listenInProgress ? StopIcon : PlayIcon}\n text={listenInProgress ? t('action.listen-cancel') : t('action.listen-execute')}\n mode=\"ghost\"\n disabled={!hasValidParams}\n tone={listenInProgress ? 'positive' : 'default'}\n />\n </Box>\n </Flex>\n </Tooltip>\n </Card>\n </ControlsContainer>\n )\n}\n","import {Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const PerspectivePopoverContent = styled(Box)`\n /* This limits the width of the popover content */\n max-width: 240px;\n`\n\nexport const PerspectivePopoverLink = styled.a`\n cursor: pointer;\n margin-right: auto;\n`\n","import {HelpCircleIcon} from '@sanity/icons'\nimport {\n Badge,\n Box,\n Button,\n Card,\n type CardTone,\n Inline,\n Popover,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\nimport {Translate, useTranslation} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {PerspectivePopoverContent, PerspectivePopoverLink} from './PerspectivePopover.styled'\n\nconst Dot = styled.div<{$tone: CardTone}>`\n width: 4px;\n height: 4px;\n border-radius: 3px;\n box-shadow: 0 0 0 1px var(--card-bg-color);\n background-color: ${({$tone}) => `var(--card-badge-${$tone}-dot-color)`};\n`\n\nconst SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION = false\n\nexport function PerspectivePopover() {\n const [open, setOpen] = useState(false)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n\n const {t} = useTranslation(visionLocaleNamespace)\n\n useClickOutsideEvent(\n () => setOpen(false),\n () => [buttonRef.current, popoverRef.current],\n )\n\n return (\n <Popover\n content={\n <PerspectivePopoverContent>\n <Stack space={4}>\n <Inline space={2}>\n <Text weight=\"medium\">{t('settings.perspectives.title')}</Text>\n </Inline>\n\n <Card>\n <Text muted>{t('settings.perspectives.description')}</Text>\n </Card>\n <Card>\n <Stack space={2}>\n <Box>\n <Badge tone=\"primary\">{t('label.new')}</Badge>\n </Box>\n <Text muted>\n <Translate\n t={t}\n i18nKey=\"settings.perspective.preview-drafts-renamed-to-drafts.description\"\n />\n </Text>\n </Stack>\n </Card>\n {SHOW_DEFAULT_PERSPECTIVE_NOTIFICATION ? (\n <Card>\n <Badge tone=\"caution\">{t('label.new')}</Badge>\n <Card>\n <Text muted>\n <Translate t={t} i18nKey=\"settings.perspectives.new-default.description\" />\n </Text>\n </Card>\n </Card>\n ) : null}\n\n <Card>\n <Text>\n <PerspectivePopoverLink\n href=\"https://www.sanity.io/docs/perspectives\"\n target=\"_blank\"\n >\n {t('settings.perspectives.action.docs-link')} &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 isScheduledDraftsEnabled: boolean\n}\n\nexport function VisionGuiHeader({\n onChangeDataset,\n dataset,\n customApiVersion,\n apiVersion,\n onChangeApiVersion,\n datasets,\n customApiVersionElementRef,\n onCustomApiVersionChange,\n isValidApiVersion,\n onChangePerspective,\n url,\n perspective,\n isScheduledDraftsEnabled,\n}: VisionGuiHeaderProps) {\n const pinnedPerspective = usePerspective()\n const {t} = useTranslation(visionLocaleNamespace)\n const operationUrlElement = useRef<HTMLInputElement | null>(null)\n const handleCopyUrl = useCallback(() => {\n const el = operationUrlElement.current\n if (!el) return\n\n try {\n el.select()\n document.execCommand('copy')\n } catch (err) {\n console.error('Unable to copy to clipboard :(')\n }\n }, [])\n\n return (\n <Header paddingX={3} paddingY={2}>\n <Grid columns={[1, 4, 8, 12]}>\n {/* Dataset selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>{t('settings.dataset-label')}</StyledLabel>\n </Card>\n <Select value={dataset} onChange={onChangeDataset}>\n {datasets.map((ds: string) => (\n <option key={ds}>{ds}</option>\n ))}\n </Select>\n </Stack>\n </Box>\n\n {/* API version selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>{t('settings.api-version-label')}</StyledLabel>\n </Card>\n <Select\n data-testid=\"api-version-selector\"\n value={customApiVersion === false ? apiVersion : 'other'}\n onChange={onChangeApiVersion}\n >\n {API_VERSIONS.map((version) => (\n <option key={version}>{version}</option>\n ))}\n <option key=\"other\" value=\"other\">\n {t('settings.other-api-version-label')}\n </option>\n </Select>\n </Stack>\n </Box>\n\n {/* Custom API version input */}\n {customApiVersion !== false && (\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel textOverflow=\"ellipsis\">\n {t('settings.custom-api-version-label')}\n </StyledLabel>\n </Card>\n\n <TextInput\n ref={customApiVersionElementRef}\n value={customApiVersion}\n onChange={onCustomApiVersionChange}\n customValidity={\n isValidApiVersion ? undefined : t('settings.error.invalid-api-version')\n }\n maxLength={11}\n />\n </Stack>\n </Box>\n )}\n\n {/* Perspective selector */}\n <Box padding={1} column={2}>\n <Stack>\n <Card paddingBottom={1}>\n <Inline space={1}>\n <Box>\n <StyledLabel>{t('settings.perspective-label')}</StyledLabel>\n </Box>\n\n <Box>\n <PerspectivePopover />\n </Box>\n </Inline>\n </Card>\n <Select value={perspective || 'default'} onChange={onChangePerspective}>\n {SUPPORTED_PERSPECTIVES.map((perspectiveName) => {\n if (perspectiveName === 'pinnedRelease') {\n return (\n <Fragment key=\"pinnedRelease\">\n <PinnedReleasePerspectiveOption pinnedPerspective={pinnedPerspective} t={t} />\n <option key=\"default\" value=\"default\">\n {t('settings.perspectives.default')}\n </option>\n <hr />\n </Fragment>\n )\n }\n if (perspectiveName === 'scheduledDrafts') {\n if (!isScheduledDraftsEnabled) return null\n return (\n <option key=\"scheduledDrafts\" value=\"scheduledDrafts\">\n {t('settings.perspectives.scheduled-drafts')}\n </option>\n )\n }\n return <option key={perspectiveName}>{perspectiveName}</option>\n })}\n </Select>\n </Stack>\n </Box>\n\n {/* Query URL (for copying) */}\n {typeof url === 'string' ? (\n <Box padding={1} flex={1} column={customApiVersion === false ? 6 : 4}>\n <Stack>\n <Card paddingTop={2} paddingBottom={3}>\n <StyledLabel>\n {t('query.url')}&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","import {type MutationEvent} from '@sanity/client'\nimport {Box, Text} from '@sanity/ui'\nimport {Translate, useTranslation} from 'sanity'\n\nimport {visionLocaleNamespace} from '../i18n'\nimport {getCsvBlobUrl, getJsonBlobUrl} from '../util/getBlobUrl'\nimport {DelayedSpinner} from './DelayedSpinner'\nimport {QueryErrorDialog} from './QueryErrorDialog'\nimport {ResultView} from './ResultView'\nimport {SaveCsvButton, SaveJsonButton} from './SaveResultButtons'\nimport {\n DownloadsCard,\n InputBackgroundContainer,\n Result,\n ResultContainer,\n ResultFooter,\n ResultInnerContainer,\n ResultOuterContainer,\n SaveResultLabel,\n StyledLabel,\n TimingsCard,\n TimingsTextContainer,\n} from './VisionGui.styled'\n\ninterface VisionGuiResultProps {\n error?: Error | undefined\n queryInProgress: boolean\n queryResult?: unknown | undefined\n listenInProgress: boolean\n listenMutations: MutationEvent[]\n dataset: string\n queryTime: number | undefined\n e2eTime: number | undefined\n}\n\nexport function VisionGuiResult({\n error,\n queryInProgress,\n queryResult,\n listenInProgress,\n listenMutations,\n dataset,\n queryTime,\n e2eTime,\n}: VisionGuiResultProps) {\n const {t} = useTranslation(visionLocaleNamespace)\n const hasResult = !error && !queryInProgress && typeof queryResult !== 'undefined'\n\n const jsonUrl = hasResult ? getJsonBlobUrl(queryResult) : ''\n const csvUrl = hasResult ? getCsvBlobUrl(queryResult) : ''\n\n return (\n <ResultOuterContainer direction=\"column\" data-testid=\"vision-result\">\n <ResultInnerContainer flex={1}>\n <ResultContainer\n flex={1}\n overflow=\"hidden\"\n tone={error ? 'critical' : 'default'}\n $isInvalid={Boolean(error)}\n >\n <Result overflow=\"auto\">\n <InputBackgroundContainer>\n <Box marginLeft={3}>\n <StyledLabel muted>{t('result.label')}</StyledLabel>\n </Box>\n </InputBackgroundContainer>\n <Box padding={3} paddingTop={5}>\n {(queryInProgress || (listenInProgress && listenMutations.length === 0)) && (\n <Box marginTop={3}>\n <DelayedSpinner />\n </Box>\n )}\n {error && <QueryErrorDialog error={error} />}\n {hasResult && <ResultView data={queryResult} datasetName={dataset} />}\n {listenInProgress && listenMutations.length > 0 && (\n <ResultView data={listenMutations} datasetName={dataset} />\n )}\n </Box>\n </Result>\n </ResultContainer>\n </ResultInnerContainer>\n {/* Execution time */}\n <ResultFooter justify=\"space-between\" direction={['column', 'column', 'row']}>\n <TimingsCard paddingX={4} paddingY={3} sizing=\"border\">\n <TimingsTextContainer align=\"center\">\n <Box>\n <Text muted>\n {t('result.execution-time-label')}:{' '}\n {typeof queryTime === 'number'\n ? `${queryTime}ms`\n : t('result.timing-not-applicable')}\n </Text>\n </Box>\n <Box marginLeft={4}>\n <Text muted>\n {t('result.end-to-end-time-label')}:{' '}\n {typeof e2eTime === 'number' ? `${e2eTime}ms` : t('result.timing-not-applicable')}\n </Text>\n </Box>\n </TimingsTextContainer>\n </TimingsCard>\n\n {hasResult && (\n <DownloadsCard paddingX={4} paddingY={3} sizing=\"border\">\n <SaveResultLabel muted>\n <Translate\n components={{\n SaveResultButtons: () => (\n <>\n <SaveJsonButton blobUrl={jsonUrl} />\n <SaveCsvButton blobUrl={csvUrl} />\n </>\n ),\n }}\n i18nKey=\"result.save-result-as-format\"\n t={t}\n />\n </SaveResultLabel>\n </DownloadsCard>\n )}\n </ResultFooter>\n </ResultOuterContainer>\n )\n}\n","/* eslint-disable max-statements */\nimport {SplitPane} from '@rexxars/react-split-pane'\nimport {\n type ClientPerspective,\n type ListenEvent,\n type MutationEvent,\n type ReleaseDocument,\n type StackablePerspective,\n} from '@sanity/client'\nimport {ChevronLeftIcon, ChevronRightIcon} from '@sanity/icons'\nimport {Box, Button, Flex, useToast} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {type ChangeEvent, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {\n getReleaseIdFromReleaseDocumentId,\n isCardinalityOneRelease,\n type PerspectiveStack,\n sortReleases,\n useActiveReleases,\n useClient,\n usePerspective,\n useScheduledDraftsEnabled,\n useTranslation,\n useWorkspace,\n} from 'sanity'\nimport {useEffectEvent} from 'use-effect-event'\n\nimport {API_VERSIONS, DEFAULT_API_VERSION} from '../apiVersions'\nimport {VisionCodeMirror, type VisionCodeMirrorHandle} from '../codemirror/VisionCodeMirror'\nimport {visionLocaleNamespace} from '../i18n'\nimport {\n getActivePerspective,\n isSupportedPerspective,\n isVirtualPerspective,\n type SupportedPerspective,\n} from '../perspectives'\nimport {type VisionProps} from '../types'\nimport {encodeQueryString} from '../util/encodeQueryString'\nimport {getLocalStorage} from '../util/localStorage'\nimport {parseApiQueryString, type ParsedApiQueryString} from '../util/parseApiQueryString'\nimport {prefixApiVersion} from '../util/prefixApiVersion'\nimport {validateApiVersion} from '../util/validateApiVersion'\nimport {ParamsEditor, parseParams} from './ParamsEditor'\nimport {QueryRecall} from './QueryRecall'\nimport {usePaneSize} from './usePaneSize'\nimport {\n InputBackgroundContainerLeft,\n InputContainer,\n Root,\n SplitpaneContainer,\n StyledLabel,\n} from './VisionGui.styled'\nimport {VisionGuiControls} from './VisionGuiControls'\nimport {VisionGuiHeader} from './VisionGuiHeader'\nimport {VisionGuiResult} from './VisionGuiResult'\n\nfunction nodeContains(node: Node, other: EventTarget | Node | null): boolean {\n if (!node || !other) {\n return false\n }\n\n // eslint-disable-next-line no-bitwise\n return node === other || !!(node.compareDocumentPosition(other as Node) & 16)\n}\n\nconst sanityUrl =\n /\\.(?:api|apicdn)\\.sanity\\.(?:io|work)\\/(vX|v1|v\\d{4}-\\d\\d-\\d\\d)\\/.*?(?:query|listen)\\/(.*?)\\?(.*)/\n\nconst isRunHotkey = (event: KeyboardEvent) =>\n isHotkey('ctrl+enter', event) || isHotkey('mod+enter', event)\n\ninterface Subscription {\n unsubscribe: () => void\n}\nexport interface Params {\n raw: string\n parsed: Record<string, unknown> | undefined\n valid: boolean\n error: string | undefined\n}\n\ninterface QueryExecutionOptions {\n apiVersion?: string\n dataset?: string\n perspective?: SupportedPerspective | undefined\n query?: string\n params?: Record<string, unknown>\n}\n\ninterface VisionGuiProps extends VisionProps {\n datasets: string[]\n projectId: string | undefined\n defaultDataset: string\n}\n\nexport interface ParsedUrlState {\n query: string\n params: Record<string, unknown>\n rawParams: string\n dataset: string\n apiVersion: string\n customApiVersion: string | false | undefined\n perspective: SupportedPerspective | undefined\n url: string\n}\n\nexport function VisionGui(props: VisionGuiProps) {\n const {datasets, config, projectId, defaultDataset} = props\n const toast = useToast()\n const {t} = useTranslation(visionLocaleNamespace)\n const {perspectiveStack} = usePerspective()\n const isScheduledDraftsEnabled = useScheduledDraftsEnabled()\n const {data: releases = []} = useActiveReleases()\n const workspace = useWorkspace()\n const isDraftModelEnabled = workspace.document.drafts.enabled\n\n const editorQueryRef = useRef<VisionCodeMirrorHandle>(null)\n const editorParamsRef = useRef<VisionCodeMirrorHandle>(null)\n const visionRootRef = useRef<HTMLDivElement | null>(null)\n const customApiVersionElementRef = useRef<HTMLInputElement | null>(null)\n const querySubscriptionRef = useRef<Subscription | undefined>(undefined)\n const listenSubscriptionRef = useRef<Subscription | undefined>(undefined)\n\n const [localStorage] = useState(() => getLocalStorage(projectId || 'default'))\n\n const storedDataset = localStorage.get('dataset', defaultDataset)\n const storedApiVersion = localStorage.get(\n 'apiVersion',\n prefixApiVersion(`${config.defaultApiVersion}`),\n )\n const storedQuery = localStorage.get('query', '')\n const storedParams = localStorage.get('params', '{\\n \\n}')\n const storedPerspective = localStorage.get<SupportedPerspective | undefined>(\n 'perspective',\n undefined,\n )\n\n const [dataset, setDataset] = useState<string>(() => {\n if (datasets.includes(storedDataset)) {\n return storedDataset\n }\n if (datasets.includes(defaultDataset)) {\n return defaultDataset\n }\n return datasets[0]\n })\n const [apiVersion, setApiVersion] = useState<string>(() =>\n API_VERSIONS.includes(storedApiVersion) ? storedApiVersion : DEFAULT_API_VERSION,\n )\n const [customApiVersion, setCustomApiVersion] = useState<string | false>(() =>\n API_VERSIONS.includes(storedApiVersion) ? false : storedApiVersion,\n )\n const [perspective, setPerspectiveState] = useState<SupportedPerspective | undefined>(\n storedPerspective || 'raw',\n )\n const isValidApiVersion = customApiVersion ? validateApiVersion(customApiVersion) : true\n\n const [url, setUrl] = useState<string | undefined>(undefined)\n const [query, setQuery] = useState<string>(() =>\n typeof storedQuery === 'string' ? storedQuery : '',\n )\n const [rawParams, setRawParams] = useState<string>(storedParams)\n const params = useMemo(() => parseParams(rawParams, t), [rawParams, t])\n const [queryResult, setQueryResult] = useState<unknown | undefined>(undefined)\n const [listenMutations, setListenMutations] = useState<MutationEvent[]>([])\n const [error, setError] = useState<Error | undefined>(undefined)\n const [queryTime, setQueryTime] = useState<number | undefined>(undefined)\n const [e2eTime, setE2eTime] = useState<number | undefined>(undefined)\n const [queryInProgress, setQueryInProgress] = useState<boolean>(false)\n const [listenInProgress, setListenInProgress] = useState<boolean>(false)\n const [isQueryRecallCollapsed, setIsQueryRecallCollapsed] = useState(false)\n\n const {paneSizeOptions, isNarrowBreakpoint} = usePaneSize({visionRootRef})\n\n // Compute scheduled drafts perspective stack\n const scheduledDraftsStack = useMemo((): PerspectiveStack | undefined => {\n if (!isScheduledDraftsEnabled) return undefined\n\n const scheduledDraftReleases = releases.filter(\n (release: ReleaseDocument) =>\n isCardinalityOneRelease(release) && release.state === 'scheduled',\n )\n const sorted = sortReleases(scheduledDraftReleases)\n const releaseIds = sorted.map((release: ReleaseDocument) =>\n getReleaseIdFromReleaseDocumentId(release._id),\n )\n const defaultPerspective = isDraftModelEnabled ? ['drafts'] : ['published']\n return [...releaseIds, ...defaultPerspective] as PerspectiveStack\n }, [releases, isDraftModelEnabled, isScheduledDraftsEnabled])\n\n // Client with memoized initial value\n const _client = useClient({\n apiVersion: isValidApiVersion && customApiVersion ? customApiVersion : apiVersion,\n })\n const client = useMemo(() => {\n return _client.withConfig({\n apiVersion: isValidApiVersion && customApiVersion ? customApiVersion : apiVersion,\n perspective: getActivePerspective({\n visionPerspective: perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }),\n dataset,\n allowReconfigure: true,\n })\n }, [\n perspectiveStack,\n scheduledDraftsStack,\n perspective,\n customApiVersion,\n apiVersion,\n dataset,\n _client,\n isValidApiVersion,\n ])\n\n const cancelQuerySubscription = useCallback(() => {\n if (!querySubscriptionRef.current) {\n return\n }\n querySubscriptionRef.current.unsubscribe()\n querySubscriptionRef.current = undefined\n }, [])\n\n const cancelListenerSubscription = useCallback(() => {\n if (!listenSubscriptionRef.current) {\n return\n }\n listenSubscriptionRef.current.unsubscribe()\n listenSubscriptionRef.current = undefined\n }, [])\n\n const handleQueryExecution = useCallback(\n (options?: QueryExecutionOptions) => {\n if (queryInProgress) {\n cancelQuerySubscription()\n cancelListenerSubscription()\n setQueryInProgress(false)\n return\n }\n\n const context: Required<Omit<QueryExecutionOptions, 'params' | 'perspective'>> & {\n params: Params\n perspective: ClientPerspective | undefined\n } = {\n query: options?.query || query,\n dataset: options?.dataset || dataset,\n params: parseParams(JSON.stringify(options?.params || params.parsed, null, 2), t),\n perspective: getActivePerspective({\n visionPerspective:\n options && 'perspective' in options ? options.perspective : perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }),\n apiVersion:\n options?.apiVersion ||\n (customApiVersion && isValidApiVersion ? customApiVersion : apiVersion),\n }\n\n localStorage.set('query', context.query)\n localStorage.set('params', context.params.raw)\n\n cancelListenerSubscription()\n\n setQueryInProgress(!context.params.error && Boolean(context.query))\n setListenInProgress(false)\n setListenMutations([])\n setError(context.params.error ? new Error(context.params.error) : undefined)\n setQueryResult(undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (context.params.error) {\n return\n }\n\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective: context.perspective ?? [],\n }\n\n const ctxClient = client.withConfig({\n apiVersion: context.apiVersion,\n dataset: context.dataset,\n perspective: context.perspective,\n })\n\n const newUrl = ctxClient.getUrl(\n ctxClient.getDataUrl(\n 'query',\n encodeQueryString(context.query, context.params.parsed, urlQueryOpts),\n ),\n )\n setUrl(newUrl)\n\n const queryStart = Date.now()\n\n querySubscriptionRef.current = ctxClient.observable\n .fetch(context.query, context.params.parsed, {filterResponse: false, tag: 'vision'})\n .subscribe({\n next: (res) => {\n setQueryTime(res.ms)\n setE2eTime(Date.now() - queryStart)\n setQueryResult(res.result)\n setQueryInProgress(false)\n setError(undefined)\n },\n error: (err) => {\n setError(err)\n setQueryInProgress(false)\n },\n })\n },\n [\n queryInProgress,\n query,\n dataset,\n params.parsed,\n t,\n perspective,\n perspectiveStack,\n scheduledDraftsStack,\n customApiVersion,\n isValidApiVersion,\n apiVersion,\n localStorage,\n cancelListenerSubscription,\n client,\n cancelQuerySubscription,\n ],\n )\n\n const setPerspective = useCallback(\n (newPerspective: string | undefined): void => {\n if (newPerspective !== undefined && !isSupportedPerspective(newPerspective)) {\n return\n }\n\n setPerspectiveState(newPerspective as SupportedPerspective | undefined)\n localStorage.set('perspective', newPerspective)\n\n handleQueryExecution({perspective: newPerspective})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeDataset = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newDataset = evt.target.value\n localStorage.set('dataset', newDataset)\n setDataset(newDataset)\n handleQueryExecution({dataset: newDataset})\n },\n [localStorage, handleQueryExecution],\n )\n\n const handleChangeApiVersion = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newApiVersion = evt.target.value\n if (newApiVersion?.toLowerCase() === 'other') {\n setCustomApiVersion('v')\n customApiVersionElementRef.current?.focus()\n return\n }\n\n setApiVersion(newApiVersion)\n setCustomApiVersion(false)\n localStorage.set('apiVersion', newApiVersion)\n handleQueryExecution({apiVersion: newApiVersion})\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle custom API version change\n const handleCustomApiVersionChange = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const newCustomApiVersion = evt.target.value || ''\n setCustomApiVersion(newCustomApiVersion || 'v')\n\n if (validateApiVersion(newCustomApiVersion)) {\n setApiVersion(newCustomApiVersion)\n localStorage.set('apiVersion', newCustomApiVersion)\n handleQueryExecution({apiVersion: newCustomApiVersion})\n }\n },\n [localStorage, handleQueryExecution],\n )\n\n // Handle perspective change\n const handleChangePerspective = useCallback(\n (evt: ChangeEvent<HTMLSelectElement>) => {\n const newPerspective = evt.target.value\n setPerspective(newPerspective === 'default' ? undefined : newPerspective)\n },\n [setPerspective],\n )\n\n const handleListenerEvent = useCallback((evt: ListenEvent<any>) => {\n if (evt.type !== 'mutation') {\n return\n }\n\n setListenMutations((prevMutations) =>\n prevMutations.length === 50 ? [evt, ...prevMutations.slice(0, 49)] : [evt, ...prevMutations],\n )\n }, [])\n const handleListenExecution = useCallback(() => {\n if (listenInProgress) {\n cancelListenerSubscription()\n setListenInProgress(false)\n return\n }\n\n const newUrl = client.getDataUrl('listen', encodeQueryString(query, params.parsed, {}))\n\n const shouldExecute = !params.error && query.trim().length > 0\n\n localStorage.set('query', query)\n localStorage.set('params', params.raw)\n\n cancelQuerySubscription()\n\n setUrl(newUrl)\n setListenMutations([])\n setQueryInProgress(false)\n setQueryResult(undefined)\n setListenInProgress(shouldExecute)\n setError(params.error ? new Error(params.error) : undefined)\n setQueryTime(undefined)\n setE2eTime(undefined)\n\n if (!shouldExecute) {\n return\n }\n\n listenSubscriptionRef.current = client\n .listen(query, params.parsed, {events: ['mutation', 'welcome'], includeAllVersions: true})\n .subscribe({\n next: handleListenerEvent,\n error: (err) => {\n setError(err)\n setListenInProgress(false)\n },\n })\n }, [\n listenInProgress,\n params,\n query,\n localStorage,\n cancelQuerySubscription,\n handleListenerEvent,\n cancelListenerSubscription,\n client,\n ])\n\n const handleParamsChange = useCallback(\n (value: string) => {\n setRawParams(value)\n localStorage.set('params', value)\n },\n [localStorage],\n )\n\n // Get object of state values from provided URL\n const getStateFromUrl = useCallback(\n (data: string): ParsedUrlState | null => {\n const match = data.match(sanityUrl)\n if (!match) {\n return null\n }\n\n const [, usedApiVersion, usedDataset, urlQuery] = match\n\n const qs = new URLSearchParams(urlQuery)\n const parts: ParsedApiQueryString = parseApiQueryString(qs)\n if (!parts) return null\n let newApiVersion: string | undefined\n let newCustomApiVersion: string | false | undefined\n\n if (validateApiVersion(usedApiVersion)) {\n if (API_VERSIONS.includes(usedApiVersion)) {\n newApiVersion = usedApiVersion\n newCustomApiVersion = false\n } else {\n newCustomApiVersion = usedApiVersion\n }\n }\n\n const newPerspective =\n isSupportedPerspective(parts.options.perspective) &&\n !isVirtualPerspective(parts.options.perspective)\n ? parts.options.perspective\n : undefined\n\n if (\n newPerspective &&\n (!isSupportedPerspective(parts.options.perspective) ||\n isVirtualPerspective(parts.options.perspective))\n ) {\n toast.push({\n closable: true,\n id: 'vision-paste-unsupported-perspective',\n status: 'warning',\n title: 'Perspective in pasted url is currently not supported. Falling back to \"raw\"',\n })\n }\n\n return {\n query: parts.query,\n params: parts.params,\n rawParams: JSON.stringify(parts.params, null, 2),\n dataset: datasets.includes(usedDataset) ? usedDataset : dataset,\n apiVersion: newApiVersion || apiVersion,\n customApiVersion: newCustomApiVersion,\n perspective: newPerspective || perspective,\n url: data,\n }\n },\n [datasets, dataset, apiVersion, perspective, toast],\n )\n\n // Use state object from parsed URL to update state\n const setStateFromParsedUrl = useCallback(\n (parsedUrlObj: ParsedUrlState) => {\n // Update state with pasted values\n setDataset(parsedUrlObj.dataset)\n setQuery(parsedUrlObj.query)\n setRawParams(parsedUrlObj.rawParams)\n setApiVersion(parsedUrlObj.apiVersion)\n if (parsedUrlObj.customApiVersion) {\n setCustomApiVersion(parsedUrlObj.customApiVersion)\n }\n setPerspectiveState(parsedUrlObj.perspective)\n setUrl(parsedUrlObj.url)\n // Update the codemirror editor content\n editorQueryRef.current?.resetEditorContent(parsedUrlObj.query)\n editorParamsRef.current?.resetEditorContent(parsedUrlObj.rawParams)\n\n // Update localStorage and client config\n localStorage.merge({\n query: parsedUrlObj.query,\n params: parsedUrlObj.rawParams,\n dataset: parsedUrlObj.dataset,\n apiVersion: parsedUrlObj.customApiVersion || parsedUrlObj.apiVersion,\n perspective: parsedUrlObj.perspective,\n })\n\n // Execute query with new values\n handleQueryExecution(parsedUrlObj)\n },\n [localStorage, handleQueryExecution],\n )\n\n const handlePaste = useCallback(\n (evt: ClipboardEvent) => {\n if (!evt.clipboardData) {\n return\n }\n\n const data = evt.clipboardData.getData('text/plain')\n evt.preventDefault()\n const urlState = getStateFromUrl(data)\n if (urlState) {\n setStateFromParsedUrl(urlState)\n toast.push({\n closable: true,\n id: 'vision-paste',\n status: 'info',\n title: 'Parsed URL to query',\n })\n }\n },\n [getStateFromUrl, setStateFromParsedUrl, toast],\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const isWithinRoot =\n visionRootRef.current && nodeContains(visionRootRef.current, event.target)\n if (isRunHotkey(event) && isWithinRoot && params.valid) {\n handleQueryExecution()\n event.preventDefault()\n event.stopPropagation()\n }\n },\n [params.valid, handleQueryExecution],\n )\n\n useEffect(() => {\n window.document.addEventListener('paste', handlePaste)\n window.document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n window.document.removeEventListener('paste', handlePaste)\n window.document.removeEventListener('keydown', handleKeyDown)\n }\n }, [handleKeyDown, handlePaste])\n\n useEffect(() => {\n return () => {\n cancelQuerySubscription()\n cancelListenerSubscription()\n }\n }, [cancelQuerySubscription, cancelListenerSubscription])\n\n const handleStudioPerspectiveChange = useEffectEvent((stack: StackablePerspective[]) => {\n if (stack.length > 0) {\n setPerspective('pinnedRelease')\n }\n })\n // Handle pinned perspective changes\n useEffect(() => {\n handleStudioPerspectiveChange(perspectiveStack)\n }, [perspectiveStack])\n\n const generateUrl = useCallback(\n (queryString: string, queryParams: Record<string, unknown>) => {\n const urlQueryOpts: Record<string, string | string[]> = {\n perspective:\n getActivePerspective({\n visionPerspective: perspective,\n perspectiveStack,\n scheduledDraftsStack,\n }) ?? [],\n }\n return client.getUrl(\n client.getDataUrl('query', encodeQueryString(queryString, queryParams, urlQueryOpts)),\n )\n },\n [client, perspective, perspectiveStack, scheduledDraftsStack],\n )\n\n return (\n <Root\n direction=\"column\"\n height=\"fill\"\n ref={visionRootRef}\n sizing=\"border\"\n overflow=\"hidden\"\n data-testid=\"vision-root\"\n >\n <VisionGuiHeader\n apiVersion={apiVersion}\n customApiVersion={customApiVersion}\n dataset={dataset}\n datasets={datasets}\n onChangeDataset={handleChangeDataset}\n onChangeApiVersion={handleChangeApiVersion}\n customApiVersionElementRef={customApiVersionElementRef}\n onCustomApiVersionChange={handleCustomApiVersionChange}\n isValidApiVersion={isValidApiVersion}\n onChangePerspective={handleChangePerspective}\n url={url}\n perspective={perspective}\n isScheduledDraftsEnabled={isScheduledDraftsEnabled}\n />\n\n <SplitpaneContainer flex=\"auto\">\n <SplitPane\n minSize={800}\n defaultSize={window.innerWidth - 275}\n size={isQueryRecallCollapsed ? window.innerWidth : window.innerWidth - 275}\n maxSize={-225}\n primary=\"first\"\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n // eslint-disable-next-line @sanity/i18n/no-attribute-string-literals\n split={isNarrowBreakpoint ? 'vertical' : 'horizontal'}\n minSize={300}\n >\n <Box height=\"stretch\" flex={1}>\n <SplitPane\n className=\"sidebarPanes\"\n split=\"horizontal\"\n defaultSize={\n isNarrowBreakpoint ? paneSizeOptions.defaultSize : paneSizeOptions.minSize\n }\n size={paneSizeOptions.size}\n allowResize={paneSizeOptions.allowResize}\n minSize={isNarrowBreakpoint ? paneSizeOptions.minSize : 100}\n maxSize={paneSizeOptions.maxSize}\n primary=\"first\"\n >\n <InputContainer display=\"flex\" data-testid=\"vision-query-editor\">\n <Box flex={1}>\n <InputBackgroundContainerLeft>\n <Flex>\n <StyledLabel muted>{t('query.label')}</StyledLabel>\n </Flex>\n </InputBackgroundContainerLeft>\n <VisionCodeMirror\n initialValue={query}\n onChange={setQuery}\n ref={editorQueryRef}\n />\n </Box>\n </InputContainer>\n <InputContainer display=\"flex\">\n <ParamsEditor\n value={params.raw}\n onChange={handleParamsChange}\n paramsError={params.error}\n hasValidParams={params.valid}\n editorRef={editorParamsRef}\n />\n\n <VisionGuiControls\n hasValidParams={params.valid}\n queryInProgress={queryInProgress}\n listenInProgress={listenInProgress}\n onQueryExecution={handleQueryExecution}\n onListenExecution={handleListenExecution}\n />\n </InputContainer>\n </SplitPane>\n </Box>\n <VisionGuiResult\n error={error}\n queryInProgress={queryInProgress}\n queryResult={queryResult}\n listenInProgress={listenInProgress}\n listenMutations={listenMutations}\n dataset={dataset}\n queryTime={queryTime}\n e2eTime={e2eTime}\n />\n </SplitPane>\n </Box>\n <Box style={{position: 'relative', height: '100%'}}>\n <Button\n mode=\"ghost\"\n padding={2}\n style={{\n position: 'absolute',\n left: -32,\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 100,\n pointerEvents: 'auto',\n }}\n onClick={() => setIsQueryRecallCollapsed(!isQueryRecallCollapsed)}\n >\n <div style={{display: 'flex', alignItems: 'center', height: '100%'}}>\n {isQueryRecallCollapsed ? <ChevronLeftIcon /> : <ChevronRightIcon />}\n </div>\n </Button>\n <QueryRecall\n url={url}\n getStateFromUrl={getStateFromUrl}\n setStateFromParsedUrl={setStateFromParsedUrl}\n currentQuery={query}\n currentParams={params.parsed || {}}\n generateUrl={generateUrl}\n />\n </Box>\n </SplitPane>\n </SplitpaneContainer>\n </Root>\n )\n}\n","import {type SanityClient} from '@sanity/client'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, map, type Observable, of} from 'rxjs'\n\nimport {type VisionConfig} from '../types'\n\nexport function useDatasets({\n client,\n datasets: configDatasets,\n}: {\n client: SanityClient\n datasets: VisionConfig['datasets']\n}): string[] | Error | null {\n const datasets$: Observable<string[] | Error> = useMemo(() => {\n if (Array.isArray(configDatasets)) {\n return of(configDatasets)\n }\n return client.observable.datasets.list().pipe(\n map((result) => {\n if (typeof configDatasets == 'function') {\n return configDatasets(result).map((d) => d.name)\n }\n return result.map((ds) => ds.name)\n }),\n catchError((err) => of(err)),\n )\n }, [client, configDatasets])\n const datasets = useObservable(datasets$, null)\n\n return datasets\n}\n","import {Flex} from '@sanity/ui'\nimport {useClient} from 'sanity'\n\nimport {DelayedSpinner} from '../components/DelayedSpinner'\nimport {VisionGui} from '../components/VisionGui'\nimport {useDatasets} from '../hooks/useDatasets'\nimport {type VisionProps} from '../types'\n\nexport function VisionContainer(props: VisionProps) {\n const datasetsClient = useClient({apiVersion: 'v2025-06-27'})\n const loadedDatasets = useDatasets({client: datasetsClient, datasets: props.config.datasets})\n\n if (!loadedDatasets) {\n return (\n <Flex align=\"center\" height=\"fill\" justify=\"center\">\n <DelayedSpinner />\n </Flex>\n )\n }\n\n const datasets =\n loadedDatasets instanceof Error\n ? // On error, use the clients configured dataset\n [props.client.config().dataset || 'production']\n : // Otherwise use the loaded list, obviously\n loadedDatasets\n\n const projectId = props.client.config().projectId\n const defaultDataset = props.config.defaultDataset || props.client.config().dataset || datasets[0]\n\n return (\n <VisionGui\n key={projectId}\n {...props}\n datasets={datasets}\n projectId={projectId}\n defaultDataset={defaultDataset}\n />\n )\n}\n","/* eslint-disable @sanity/i18n/no-attribute-string-literals */\n/* eslint-disable i18next/no-literal-string */\nimport {Button, Card, Code, Container, Heading, Stack} from '@sanity/ui'\nimport {Component, type PropsWithChildren} from 'react'\n\nimport {clearLocalStorage} from '../util/localStorage'\n\n/**\n * @internal\n */\nexport type VisionErrorBoundaryProps = PropsWithChildren\n\n/**\n * @internal\n */\ninterface VisionErrorBoundaryState {\n error: string | null\n numRetries: number\n}\n\n/**\n * @internal\n */\nexport class VisionErrorBoundary extends Component<\n VisionErrorBoundaryProps,\n VisionErrorBoundaryState\n> {\n constructor(props: VisionErrorBoundaryProps) {\n super(props)\n this.state = {error: null, numRetries: 0}\n }\n\n static getDerivedStateFromError(error: unknown) {\n return {error: error instanceof Error ? error.message : `${error}`}\n }\n\n handleRetryRender = () =>\n this.setState((prev) => ({error: null, numRetries: prev.numRetries + 1}))\n\n handleRetryWithCacheClear = () => {\n clearLocalStorage()\n this.handleRetryRender()\n }\n\n render() {\n if (!this.state.error) {\n return this.props.children\n }\n\n const message = this.state.error\n const withCacheClear = this.state.numRetries > 0\n\n return (\n <Card\n height=\"fill\"\n overflow=\"auto\"\n paddingY={[4, 5, 6, 7]}\n paddingX={4}\n sizing=\"border\"\n tone=\"critical\"\n >\n <Container width={3}>\n <Stack space={4}>\n <div>\n <Button\n onClick={withCacheClear ? this.handleRetryWithCacheClear : this.handleRetryRender}\n text={withCacheClear ? 'Clear cache and retry' : 'Retry'}\n tone=\"default\"\n />\n </div>\n\n <Heading>An error occurred</Heading>\n\n <Card border radius={2} overflow=\"auto\" padding={4} tone=\"inherit\">\n <Stack space={4}>\n {message && (\n <Code size={1}>\n <strong>Error: {message}</strong>\n </Code>\n )}\n </Stack>\n </Card>\n </Stack>\n </Container>\n </Card>\n )\n }\n}\n","import {type Tool, useClient} from 'sanity'\n\nimport {DEFAULT_API_VERSION} from './apiVersions'\nimport {VisionContainer} from './containers/VisionContainer'\nimport {VisionErrorBoundary} from './containers/VisionErrorBoundary'\nimport {type VisionConfig} from './types'\n\ninterface SanityVisionProps {\n tool: Tool<VisionConfig>\n}\n\nfunction SanityVision(props: SanityVisionProps) {\n const client = useClient({apiVersion: '1'})\n const config: VisionConfig = {\n defaultApiVersion: DEFAULT_API_VERSION,\n ...props.tool.options,\n }\n\n return (\n <VisionErrorBoundary>\n <VisionContainer client={client} config={config} />\n </VisionErrorBoundary>\n )\n}\n\nexport default SanityVision\n"],"names":["API_VERSIONS","Date","toISOString","split","DEFAULT_API_VERSION","slice","DelayedSpinner","props","$","_c","show","setShow","useState","t0","t1","delay","timer","setTimeout","clearTimeout","useEffect","t2","jsx","Spinner","codemirrorExtensions","javascriptLanguage","lineNumbers","highlightActiveLine","highlightActiveLineGutter","highlightSelectionMatches","highlightSpecialChars","indentOnInput","bracketMatching","closeBrackets","history","drawSelection","syntaxHighlighting","defaultHighlightStyle","fallback","keymap","of","key","run","defaultKeymap","historyKeymap","flat","filter","Boolean","useCodemirrorTheme","theme","createTheme","cmTheme","createHighlight","cmHighlight","color","fonts","sanity","card","enabled","cursor","hues","blue","dark","hex","selection","gray","EditorView","fg","backgroundColor","bg","caretColor","fontFamily","code","family","fontSize","rem","sizes","lineHeight","borderLeftColor","borderBottom","border","borderTop","c","base","s","syntax","HighlightStyle","define","tag","t","keyword","propertyName","name","deleted","character","macroName","property","function","variableName","labelName","constant","standard","variable","definition","separator","typeName","className","number","changed","annotation","modifier","self","namespace","operator","operatorKeyword","url","escape","regexp","link","special","string","meta","comment","strong","fontWeight","emphasis","fontStyle","strikethrough","textDecoration","heading","atom","bool","boolean","processingInstruction","inserted","invalid","EditorRoot","styled","div","space","VisionCodeMirror","forwardRef","ref","initialValue","sanityTheme","useTheme","codeMirrorRef","useRef","Symbol","for","newContent","editorView","current","view","currentDoc","state","doc","toString","dispatch","changes","from","to","length","insert","EditorSelection","resetEditorContent","useImperativeHandle","t3","onChange","CodeMirror","displayName","SUPPORTED_PERSPECTIVES","VIRTUAL_PERSPECTIVES","isSupportedPerspective","p","includes","isVirtualPerspective","maybeVirtualPerspective","hasPinnedPerspective","selectedPerspectiveName","getActivePerspective","visionPerspective","perspectiveStack","scheduledDraftsStack","encodeQueryString","query","params","options","searchParams","URLSearchParams","set","value","Object","entries","JSON","stringify","isPlainObject","obj","prototype","call","hasLocalStorage","supportsLocalStorage","keyPrefix","clearLocalStorage","i","localStorage","startsWith","removeItem","getLocalStorage","storageKey","loadedState","get","merge","defaultVal","ensureState","setItem","loadState","stored","parse","getItem","mod","parseApiQueryString","qs","prefixApiVersion","version","validateApiVersion","apiVersion","parseableApiVersion","replace","trim","toUpperCase","test","isNaN","tryParseParams","val","parsed","JSON5","Array","isArray","err","message","Root","Flex","Header","Card","StyledLabel","Label","SplitpaneContainer","Box","QueryCopyLink","a","InputBackgroundContainer","InputBackgroundContainerLeft","InputContainer","ResultOuterContainer","ResultInnerContainer","ResultContainer","$isInvalid","css","Result","ResultFooter","TimingsCard","TimingsTextContainer","text","ascenderHeight","descenderHeight","DownloadsCard","SaveResultLabel","Text","ControlsContainer","defaultValue","ParamsEditor","paramsError","hasValidParams","editorRef","useTranslation","visionLocaleNamespace","newValue","handleChangeRaw","debounce","handleChange","t4","t5","Tooltip","ErrorOutlineIcon","t6","jsxs","t7","t8","t9","parseParams","parsedParams","Error","validationError","undefined","raw","valid","error","STORED_QUERIES_NAMESPACE","queries","keyValueStoreKey","useSavedQueries","keyValueStore","useKeyValueStore","setValue","saving","setSaving","deleting","setDeleting","saveQueryError","setSaveQueryError","deleteQueryError","setDeleteQueryError","setError","useMemo","getKey","sub","pipe","startWith","map","data","subscribe","next","unsubscribe","saveQuery","useCallback","newQueries","_key","uuid","setKey","updateQuery","updatedQueries","q","deleteQuery","prev","filteredQueries","k","FixedHeader","Stack","ScrollContainer","QueryRecall","getStateFromUrl","setStateFromParsedUrl","currentQuery","currentParams","generateUrl","toast","useToast","month","day","year","hour","minute","hour12","formatDate","useDateTimeFormat","editingKey","setEditingKey","editingTitle","setEditingTitle","optimisticTitles","setOptimisticTitles","searchQuery","setSearchQuery","selectedUrl","setSelectedUrl","newUrl","some","savedQueryObj","isEqual","duplicateQuery","find","q_0","savedQueryObj_0","push","closable","status","title","description","format","savedAt","handleSave","newTitle","prev_1","next_0","prev_0","handleTitleSave","query_0","newUrl_0","q_1","savedQueryObj_1","duplicateQuery_0","q_2","savedQueryObj_2","handleUpdate","T0","T1","q_3","toLowerCase","textTransform","t10","t11","t12","t13","Button","AddIcon","t14","t15","t16","event","currentTarget","t17","TextInput","SearchIcon","q_4","queryObj","isSelected","areQueriesEqual","isEdited","parsedUrl","position","event_0","event_1","maxWidth","height","padding","width","borderRadius","MenuButton","ContextMenuButton","Menu","MenuItem","TrashIcon","event_2","stopPropagation","portal","placement","tone","Code","right","bottom","e","narrowBreakpoint","window","innerWidth","calculatePaneSizeOptions","rootHeight","document","body","getBoundingClientRect","defaultSize","size","allowResize","minSize","Math","min","max","maxSize","usePaneSize","visionRootRef","isNarrowBreakpoint","setIsNarrowBreakpoint","_temp","paneSizeOptions","setPaneSizeOptions","_temp2","handleResize","entry","contentRect","resizeObserver","ResizeObserver","observe","disconnect","VisionGuiControls","listenInProgress","queryInProgress","onQueryExecution","onListenExecution","Hotkeys","StopIcon","PlayIcon","PerspectivePopoverContent","PerspectivePopoverLink","Dot","$tone","PerspectivePopover","open","setOpen","buttonRef","popoverRef","handleClick","useClickOutsideEvent","Inline","Badge","Translate","HelpCircleIcon","Popover","o","PinnedReleasePerspectiveOption","pinnedPerspective","selectedPerspective","metadata","label","join","VisionGuiHeader","onChangeDataset","dataset","customApiVersion","onChangeApiVersion","datasets","customApiVersionElementRef","onCustomApiVersionChange","isValidApiVersion","onChangePerspective","perspective","isScheduledDraftsEnabled","usePerspective","operationUrlElement","el","select","execCommand","console","handleCopyUrl","Select","_temp3","t18","t19","t20","t21","t22","perspectiveName","Fragment","t23","t24","t25","CopyIcon","t26","Grid","ds","getBlobUrl","content","mimeType","URL","createObjectURL","Blob","type","getMemoizedBlobUrlResolver","stringEncoder","prevResult","prevContent","input","revokeObjectURL","getJsonBlobUrl","getCsvBlobUrl","json2csv","ErrorCode","muted","critical","QueryErrorDetails","details","mapToLegacyDetails","line","dashLine","column","columnEnd","lineNumber","start","end","lineStart","lastIndexOf","match","indexOf","repeat","hats","QueryErrorDialog","ResultViewWrapper","lru","LRU","ResultView","datasetName","workspaceDataset","useDataset","isRecord","DocumentEditLabel","JsonInspector","isExpanded","toggleExpanded","isKey","keypath","endsWith","id","LinkIcon","IntentLink","keyPath","cached","segments","depthLimit","isArrayKeyOverLimit","path","numeric","segment","limit","parseInt","preventSave","evt","preventDefault","SaveCsvButton","blobUrl","isDisabled","DocumentSheetIcon","button","SaveJsonButton","VisionGuiResult","queryResult","listenMutations","queryTime","e2eTime","hasResult","jsonUrl","csvUrl","SaveResultButtons","nodeContains","node","other","compareDocumentPosition","sanityUrl","isRunHotkey","isHotkey","VisionGui","config","projectId","defaultDataset","useScheduledDraftsEnabled","releases","useActiveReleases","isDraftModelEnabled","useWorkspace","drafts","editorQueryRef","editorParamsRef","querySubscriptionRef","listenSubscriptionRef","storedDataset","storedApiVersion","defaultApiVersion","storedQuery","storedParams","storedPerspective","setDataset","setApiVersion","setCustomApiVersion","setPerspectiveState","setUrl","setQuery","rawParams","setRawParams","setQueryResult","setListenMutations","setQueryTime","setE2eTime","setQueryInProgress","setListenInProgress","isQueryRecallCollapsed","setIsQueryRecallCollapsed","scheduledDraftReleases","release","isCardinalityOneRelease","releaseIds","sortReleases","getReleaseIdFromReleaseDocumentId","_id","defaultPerspective","_client","useClient","client","withConfig","allowReconfigure","cancelQuerySubscription","cancelListenerSubscription","handleQueryExecution","context","urlQueryOpts","ctxClient","getUrl","getDataUrl","queryStart","now","observable","fetch","filterResponse","res","ms","result","setPerspective","newPerspective","handleChangeDataset","newDataset","target","handleChangeApiVersion","newApiVersion","focus","handleCustomApiVersionChange","newCustomApiVersion","handleChangePerspective","handleListenerEvent","prevMutations","handleListenExecution","shouldExecute","listen","events","includeAllVersions","handleParamsChange","usedApiVersion","usedDataset","urlQuery","parts","parsedUrlObj","handlePaste","clipboardData","getData","urlState","handleKeyDown","isWithinRoot","addEventListener","removeEventListener","handleStudioPerspectiveChange","useEffectEvent","stack","queryString","queryParams","SplitPane","left","top","transform","zIndex","pointerEvents","display","alignItems","ChevronLeftIcon","ChevronRightIcon","useDatasets","configDatasets","bb0","list","catchError","useObservable","d","VisionContainer","datasetsClient","loadedDatasets","VisionErrorBoundary","Component","constructor","numRetries","getDerivedStateFromError","handleRetryRender","setState","handleRetryWithCacheClear","render","children","withCacheClear","Container","Heading","SanityVision","tool"],"mappings":"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"}