@sanity/embeddings-index-ui

4.0.164.0.17
dist/index.js.map
~dist/index.js.mapModified
+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["SanityClient","NamedIndex","indexName","dataset","project","projection","filter","IndexState","status","startDocumentCount","remainingDocumentCount","failedDocumentCount","QueryResult","score","value","documentId","type","QueryConfig","query","maxResults","queryIndex","queryConfig","client","Promise","projectId","config","queryString","trim","request","method","url","body","getIndexes","deleteIndex","useMemo","SanityClient","useClient","useApiClient","$","_c","t0","Symbol","for","apiVersion","client","t1","bb0","customHost","localStorage","getItem","withConfig","apiHost","useProjectHostname","withCredentials","Card","Text","createContext","PropsWithChildren","useContext","useEffect","useState","useProjectId","useApiClient","FeatureStatus","FeatureEnabledContext","useIsFeatureEnabled","$","_c","client","status","setStatus","t0","t1","request","method","url","then","response","enabled","catch","err","console","error","FeatureEnabledProvider","props","children","useIsFeatureEnabledContext","FeatureDisabledNotice","projectId","urlSuffix","FeatureError","Symbol","for","SchemaType","isType","schemaType","typeName","name","type","useMemo","ObjectSchemaType","Schema","isType","defaultProjection","useDefaultIndex","schema","dataset","$","_c","t0","getTypeNames","map","n","get","filter","_temp","_temp2","_temp3","join","defaultFilter","t1","projection","documentType_0","documentType","name","startsWith","schemaType","Boolean","Box","Label","Stack","Text","TextArea","TextInput","Dispatch","ChangeEvent","SetStateAction","useCallback","useId","NamedIndex","IndexFormInputProps","index","Partial","prop","label","description","onChange","readOnly","placeholder","type","IndexFormInput","props","$","_c","t0","propValue","current","handleChange","t1","t2","FormInputProps","value","FormInput","undefined","id","e","currentTarget","t3","t4","resize","t5","AddIcon","Box","Button","Card","Dialog","Spinner","Stack","Text","SubmitEvent","useCallback","useEffect","useId","useRef","useState","useSchema","IndexState","NamedIndex","useApiClient","useDefaultIndex","IndexFormInput","EditIndexDialog","props","$","_c","open","onClose","onSubmit","id","ref","t0","t1","setTimeout","current","querySelector","focus","t2","index","handleSubmit","t3","IndexEditor","readOnly","selectedIndex","client","schema","config","dataset","defaultIndex","errors","setErrors","loading","setLoading","setIndex","t4","e","preventDefault","validationErrors","indexName","push","match","filter","projection","length","projectId","request","method","url","body","then","response","catch","err","console","error","message","finally","t5","marginLeft","map","_temp","t6","t7","t8","t9","t10","marginTop","t11","t12","i","ErrorOutlineIcon","Box","Button","ButtonProps","Card","CSSProperties","useMemo","useObservable","DefaultPreview","getPreviewStateObservable","getPreviewValueWithFallback","SanityDefaultPreview","SanityDocument","SchemaType","useDocumentPreviewStore","useSchema","useIntentLink","ResultPreviewProps","documentId","schemaTypeName","button","style","DocumentPreview","t0","$","_c","buttonProps","schema","t1","get","undefined","schemaType","t2","Symbol","for","minHeight","t3","t4","t5","DocumentPreviewInner","documentPreviewStore","previewStateObservable","snapshot","isLoading","original","previewIsLoading","name","_id","_type","sanityDocument","t6","intent","params","id","type","onClick","onIntentClick","href","t7","fallback","t8","t9","icon","t10","preview","t11","width","t12","Box","Button","Flex","Text","Autocomplete","AutocompleteOpenButtonProps","FocusEventHandler","Ref","useCallback","useEffect","useId","useMemo","useRef","useState","typed","queryIndex","QueryResult","useApiClient","DocumentPreview","EmbeddingsIndexConfig","SemanticSearchAutocompleteProps","indexConfig","getEmptySearchValue","typeFilter","filterResult","hit","onSelect","value","onFocus","HTMLInputElement","onBlur","readOnly","Option","result","NO_RESULTS_VALUE","const","NoResultOption","NO_OPTIONS","NO_FILTER","SemanticSearchAutocomplete","props","$","_c","ref","id","query","setQuery","queryRef","debouncedQuery","useDebouncedValue","prevDebouncedQuery","searching","setSearching","options","setOptions","client","t0","indexName","maxResults","queryString","Error","trim","length","filter","type","then","current","resultOptions","map","_temp","catch","e","console","error","runIndexQuery","t1","t2","t3","onClick","openButtonConfig","t4","Symbol","for","newValue","newQuery","handleQueryChange","t5","option","_temp2","find","r_1","r","documentId","handleChange","t6","AutocompleteOption","r_0","width","Math","floor","score","ms","debouncedValue","setDebouncedValue","timeoutId","setTimeout","clearTimeout","useCallback","useMemo","useRouter","QueryResult","SemanticSearchAutocomplete","EmbeddingsIndexConfig","QueryIndex","props","$","_c","indexName","getEmpty","_temp","t0","maxResults","indexConfig","resolveIntentLink","navigateUrl","t1","hit","path","id","value","documentId","type","onSelect","t2","EllipsisVerticalIcon","TrashIcon","Box","Button","Flex","Heading","Label","Stack","Text","Menu","MenuButton","MenuItem","useCallback","IndexState","IndexEditor","QueryIndex","IndexInfoProps","selectedIndex","onDeleteIndex","index","IndexInfo","t0","$","_c","t1","handleDelete","t2","indexName","t3","t4","Symbol","for","t5","t6","t7","placement","t8","t9","t10","maxWidth","t11","t12","t13","t14","t15","IndexStatus","status","startDocumentCount","remainingDocumentCount","failedDocumentCount","Box","Button","Card","Flex","Label","Stack","Text","useCallback","IndexState","IndexListProps","loading","selectedIndex","indexes","onIndexSelected","index","IndexList","props","$","_c","t0","t1","opacity","t2","Symbol","for","t3","t4","t5","t6","length","maxHeight","overflow","map","indexName","t7","IndexRow","onSelect","dataset","status","startDocumentCount","Math","floor","remainingDocumentCount","t8","t9","AddIcon","UndoIcon","Box","Button","Card","Flex","Heading","Spinner","Stack","useCallback","useEffect","useState","deleteIndex","getIndexes","IndexState","NamedIndex","useApiClient","FeatureDisabledNotice","FeatureError","useIsFeatureEnabled","EditIndexDialog","IndexInfo","IndexList","EmbeddingsIndexTool","$","_c","featureState","t0","t1","t2","t3","maxWidth","t4","NO_INDEXES","Indexes","client","indexes","setIndexes","loading","setLoading","error","setError","createIndexOpen","setCreateIndexOpen","selectedIndex","setSelectedIndex","undefined","Symbol","for","onCreateIndexClose","indexName","find","i","then","response","catch","e","console","finally","updateIndexes","index","confirm","dataset","setTimeout","e_0","deleteNamedIndex","t5","index_0","onSelectIndex","t6","t7","t8","openCreate","t9","index_1","current","onSubmit","t10","height","t11","t12","justifySelf","t13","t14","t15","t16","t17","t18","t19","EarthGlobeIcon","definePlugin","Tool","EmbeddingsIndexTool","embeddingsIndexTool","name","title","icon","component","embeddingsIndexDashboard","tools","EarthGlobeIcon","LinkIcon","Box","Button","Flex","Spinner","useCallback","useEffect","useMemo","useRef","useState","ObjectInputProps","ReferenceBaseOptions","ReferenceSchemaType","set","setIfMissing","unset","useDocumentPane","QueryResult","FeatureDisabledNotice","FeatureError","useIsFeatureEnabledContext","EmbeddingsIndexConfig","publicId","SemanticSearchAutocomplete","useEmeddingsConfig","embeddingsIndexConfig","defaultConfig","$","_c","t0","bb0","indexName","Error","t1","finalConfig","SemanticSearchReferenceInput","props","schemaType","options","embeddingsIndex","config","defaultEnabled","searchMode","featureState","semantic","setSemantic","Symbol","for","_temp","toggleSemantic","width","t2","t3","t4","t5","maxHeight","overflow","t6","renderDefault","t7","t8","t9","t10","t11","current","SemanticSearchInput","indexConfig","onPathFocus","onChange","readOnly","value","currentDocument","docRef","autocompleteRef","_ref","focus","handleFocus","handleBlur","name","result","patches","documentId","handleChange","r","currentId","_id","filterResult","JSON","stringify","getEmptySearchValue","to","map","_temp2","typeFilter","refType","definePlugin","isObjectInputProps","ObjectInputProps","ReferenceSchemaType","FeatureEnabledProvider","EmbeddingsIndexConfig","isType","SemanticSearchReferenceInput","embeddingsIndexReferenceInput","defaultConfig","config","undefined","name","studio","components","layout","props","renderDefault","form","input","embeddingsIndexConfig","schemaType","options","embeddingsIndex","indexName"],"sources":["../src/api/embeddingsApi.ts","../src/api/embeddingsApiHooks.ts","../src/api/isEnabled.tsx","../src/utils/types.ts","../src/embeddingsIndexDashboard/hooks.ts","../src/embeddingsIndexDashboard/IndexFormInput.tsx","../src/embeddingsIndexDashboard/IndexEditor.tsx","../src/preview/DocumentPreview.tsx","../src/referenceInput/SemanticSearchAutocomplete.tsx","../src/embeddingsIndexDashboard/QueryIndex.tsx","../src/embeddingsIndexDashboard/IndexInfo.tsx","../src/embeddingsIndexDashboard/IndexList.tsx","../src/embeddingsIndexDashboard/EmbeddingsIndexTool.tsx","../src/embeddingsIndexDashboard/dashboardPlugin.ts","../src/utils/id.ts","../src/referenceInput/SemanticSearchReferenceInput.tsx","../src/referenceInput/referencePlugin.tsx"],"sourcesContent":["import {type SanityClient} from 'sanity'\n\nexport interface NamedIndex {\n  indexName: string\n  dataset: string\n  project: string\n  projection: string\n  filter: string\n}\n\nexport interface IndexState extends NamedIndex {\n  status: string\n  startDocumentCount: number\n  remainingDocumentCount: number\n  failedDocumentCount: number\n}\n\nexport interface QueryResult {\n  score: number\n  value: {\n    documentId: string\n    type: string\n  }\n}\n\nexport interface QueryConfig {\n  query: string\n  indexName: string\n  maxResults?: number\n  filter?: {\n    type?: string | string[]\n  }\n}\n\nexport function queryIndex(queryConfig: QueryConfig, client: SanityClient): Promise<QueryResult[]> {\n  const {query, indexName, maxResults, filter} = queryConfig\n  const projectId = client.config().projectId\n  const dataset = client.config().dataset\n  const queryString = query?.trim()\n\n  return client.request<QueryResult[]>({\n    method: 'POST',\n    url: `/embeddings-index/query/${dataset}/${indexName}?projectId=${projectId}`,\n    body: {\n      query: queryString,\n      maxResults,\n      filter,\n    },\n  })\n}\n\nexport function getIndexes(client: SanityClient): Promise<IndexState[]> {\n  const projectId = client.config().projectId\n  const dataset = client.config().dataset\n  return client.request<IndexState[]>({\n    method: 'GET',\n    url: `/embeddings-index/${dataset}?projectId=${projectId}`,\n  })\n}\n\nexport function deleteIndex(indexName: string, client: SanityClient): Promise<IndexState> {\n  const projectId = client.config().projectId\n  const dataset = client.config().dataset\n  return client.request<IndexState>({\n    method: 'DELETE',\n    url: `/embeddings-index/${dataset}/${indexName}?projectId=${projectId}`,\n  })\n}\n","import {useMemo} from 'react'\nimport {type SanityClient, useClient} from 'sanity'\n\nexport function useApiClient(): SanityClient {\n  const client = useClient({apiVersion: 'vX'})\n  return useMemo(() => {\n    const customHost = localStorage.getItem('embeddings-index-host')\n    if (customHost) {\n      return client.withConfig({\n        apiHost: customHost,\n        // Required so the override host is used as-is (not `{projectId}.{apiHost}`).\n        // There is no non-deprecated replacement for this client flag.\n        // oxlint-disable-next-line no-deprecated -- custom embeddings-index-host must not be project-prefixed\n        useProjectHostname: false,\n        withCredentials: false,\n      })\n    }\n    return client\n  }, [client])\n}\n","import {Card, Text} from '@sanity/ui'\nimport {createContext, type PropsWithChildren, useContext, useEffect, useState} from 'react'\nimport {useProjectId} from 'sanity'\n\nimport {useApiClient} from './embeddingsApiHooks'\n\nexport type FeatureStatus = 'enabled' | 'disabled' | 'loading' | 'error'\nconst FeatureEnabledContext = createContext<FeatureStatus>('loading')\n\nexport function useIsFeatureEnabled() {\n  const client = useApiClient()\n  const [status, setStatus] = useState<FeatureStatus>('loading')\n\n  useEffect(() => {\n    client\n      .request<{enabled: boolean}>({\n        method: 'GET',\n        url: `/embeddings-index/status`,\n      })\n      .then((response) => {\n        setStatus(response.enabled ? 'enabled' : 'disabled')\n      })\n      .catch((err) => {\n        console.error(err)\n        setStatus('error')\n      })\n  }, [client])\n\n  return status\n}\n\nexport function FeatureEnabledProvider(props: PropsWithChildren) {\n  const status = useIsFeatureEnabled()\n  return (\n    <FeatureEnabledContext.Provider value={status}>{props.children}</FeatureEnabledContext.Provider>\n  )\n}\n\nexport function useIsFeatureEnabledContext(): FeatureStatus {\n  return useContext(FeatureEnabledContext)\n}\n\nexport function FeatureDisabledNotice(props: {urlSuffix?: string}) {\n  const projectId = useProjectId()\n\n  return (\n    <Card tone=\"primary\" border padding={4}>\n      <Text size={1}>\n        💎 Unlock semantic search with the Embeddings Index API — available on Team, Business, and\n        Enterprise plans.{' '}\n        <a href={`https://www.sanity.io/manage/project/${projectId}/plan${props.urlSuffix ?? ''}`}>\n          Upgrade now →\n        </a>\n      </Text>\n    </Card>\n  )\n}\n\nexport function FeatureError() {\n  return (\n    <Card padding={4} border tone=\"critical\">\n      An error occurred. See console for details.\n    </Card>\n  )\n}\n","import type {SchemaType} from 'sanity'\n\nexport function isType(schemaType: SchemaType, typeName: string): boolean {\n  if (schemaType.name === typeName) {\n    return true\n  }\n  if (!schemaType.type) {\n    return false\n  }\n  return isType(schemaType.type, typeName)\n}\n","import {useMemo} from 'react'\nimport type {ObjectSchemaType, Schema} from 'sanity'\n\nimport {isType} from '../utils/types'\n\nconst defaultProjection = '{...}'\n\nexport function useDefaultIndex(schema: Schema, dataset: string) {\n  const defaultFilter = useMemo(\n    () =>\n      `_type in [${schema\n        .getTypeNames()\n        .map((n) => schema.get(n))\n        .filter((schemaType): schemaType is ObjectSchemaType =>\n          Boolean(schemaType && isType(schemaType, 'document')),\n        )\n        .filter(\n          (documentType) =>\n            !documentType.name.startsWith('sanity.') &&\n            !documentType.name.startsWith('assist.') &&\n            documentType.name !== 'document',\n        )\n        .map((documentType) => `\"${documentType.name}\"`)\n        .join(',\\n')}]`,\n    [schema],\n  )\n\n  return useMemo(\n    () => ({\n      dataset,\n      projection: defaultProjection,\n      filter: defaultFilter,\n    }),\n    [defaultFilter, dataset],\n  )\n}\n","import {Box, Label, Stack, Text, TextArea, TextInput} from '@sanity/ui'\nimport {type Dispatch, type ChangeEvent, type SetStateAction, useCallback, useId} from 'react'\n\nimport {type NamedIndex} from '../api/embeddingsApi'\n\nexport interface IndexFormInputProps {\n  index: Partial<NamedIndex>\n  prop: keyof NamedIndex\n  label: string\n  description?: string\n  onChange: Dispatch<SetStateAction<Partial<NamedIndex>>>\n  readOnly: boolean\n  placeholder?: string\n  type?: 'text' | 'textarea'\n}\n\nexport function IndexFormInput(props: IndexFormInputProps) {\n  const {label, description, index, prop, onChange, readOnly, placeholder, type} = props\n  const handleChange = useCallback(\n    (propValue: string) => onChange((current) => ({...current, [prop]: propValue})),\n    [onChange, prop],\n  )\n  return (\n    <FormInput\n      label={label}\n      description={description}\n      onChange={handleChange}\n      value={index[prop] ?? ''}\n      readOnly={readOnly}\n      placeholder={placeholder}\n      type={type}\n    />\n  )\n}\n\ninterface FormInputProps {\n  label: string\n  description?: string\n  onChange: (value: string) => void\n  value: string\n  readOnly: boolean\n  placeholder?: string\n  type?: 'text' | 'textarea'\n}\n\nfunction FormInput(props: FormInputProps) {\n  const {label, description, onChange, value, readOnly, placeholder, type = 'text'} = props\n  const id = useId()\n  const handleChange = useCallback(\n    (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange(e.currentTarget.value),\n    [onChange],\n  )\n  return (\n    <Stack gap={3}>\n      <Label as=\"label\" muted htmlFor={id}>\n        {label}\n      </Label>\n      {description && (\n        <Box>\n          <Text size={1} muted>\n            {description}\n          </Text>\n        </Box>\n      )}\n      {type === 'text' ? (\n        <TextInput\n          id={id}\n          value={value}\n          onChange={handleChange}\n          readOnly={readOnly}\n          placeholder={placeholder}\n        />\n      ) : (\n        <TextArea\n          id={id}\n          value={value}\n          rows={3}\n          onChange={handleChange}\n          readOnly={readOnly}\n          placeholder={placeholder}\n          style={{resize: 'vertical'}}\n        />\n      )}\n    </Stack>\n  )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Box, Button, Card, Dialog, Spinner, Stack, Text} from '@sanity/ui'\nimport {type SubmitEvent, useCallback, useEffect, useId, useRef, useState} from 'react'\nimport {useSchema} from 'sanity'\n\nimport {type IndexState, type NamedIndex} from '../api/embeddingsApi'\nimport {useApiClient} from '../api/embeddingsApiHooks'\nimport {useDefaultIndex} from './hooks'\nimport {IndexFormInput} from './IndexFormInput'\n\nexport function EditIndexDialog(props: {\n  open: boolean\n  onClose: () => void\n  onSubmit: (index: IndexState) => void\n}) {\n  const {open, onClose, onSubmit} = props\n  const id = useId()\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (!open) {\n      return\n    }\n    setTimeout(() => ref.current?.querySelector('input')?.focus())\n  }, [ref, open])\n\n  const handleSubmit = useCallback(\n    (index: IndexState) => {\n      onSubmit(index)\n      onClose()\n    },\n    [onSubmit, onClose],\n  )\n\n  return open ? (\n    <Dialog id={id} width={1} ref={ref} onClose={onClose} header=\"Create embeddings index\">\n      <Stack padding={4} gap={5}>\n        <IndexEditor readOnly={false} onSubmit={handleSubmit} />\n      </Stack>\n    </Dialog>\n  ) : null\n}\n\nexport function IndexEditor(props: {\n  index?: Partial<NamedIndex>\n  readOnly: boolean\n  onSubmit?: (index: IndexState) => void\n}) {\n  const {readOnly, index: selectedIndex, onSubmit} = props\n  const client = useApiClient()\n  const schema = useSchema()\n  const defaultIndex = useDefaultIndex(schema, client.config().dataset ?? '')\n  const [errors, setErrors] = useState<string[] | undefined>()\n  const [loading, setLoading] = useState<boolean>()\n  const [index, setIndex] = useState<Partial<NamedIndex>>(() => ({\n    ...defaultIndex,\n    ...selectedIndex,\n  }))\n\n  // oxlint-disable-next-line react/set-state-in-effect\n  useEffect(() => setIndex(selectedIndex ?? {...defaultIndex}), [selectedIndex, defaultIndex])\n\n  const handleSubmit = useCallback(\n    (e: SubmitEvent<HTMLFormElement>) => {\n      e.preventDefault()\n      if (readOnly) {\n        return\n      }\n\n      const validationErrors: string[] = []\n\n      if (!index.indexName) {\n        validationErrors.push('Index name is required')\n      } else if (!index.indexName.match(/^[a-zA-Z0-9-_]+$/g)) {\n        validationErrors.push('Index name can only contain the letters a-z, numbers - and _')\n      }\n\n      if (!index.dataset) {\n        validationErrors.push('Dataset is required')\n      }\n\n      if (!index.filter) {\n        validationErrors.push('Filter is required')\n      }\n\n      if (!index.projection) {\n        validationErrors.push('Projection is required')\n      }\n\n      if (validationErrors.length) {\n        setErrors(validationErrors)\n        return\n      }\n\n      const {projectId} = client.config()\n      setLoading(true)\n      client\n        .request({\n          method: 'POST',\n          url: `/embeddings-index/${index.dataset}?projectId=${projectId}`,\n          body: {\n            indexName: index.indexName,\n            projection: index.projection,\n            filter: index.filter,\n          },\n        })\n        .then((response: {index: IndexState}) => {\n          if (onSubmit) {\n            onSubmit(response.index)\n          }\n        })\n        .catch((err: any) => {\n          console.error(err)\n          setErrors([err.message])\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    },\n    [index, readOnly, onSubmit, client],\n  )\n\n  return (\n    <form onSubmit={handleSubmit}>\n      <Stack gap={4}>\n        {errors?.length ? (\n          <Card tone=\"critical\" border padding={2}>\n            <Text>\n              <ul style={{marginLeft: -10}}>\n                {errors?.map((error, i) => (\n                  <li\n                    // oxlint-disable-next-line react/no-array-index-key\n                    key={`${error}-${i}`}\n                  >\n                    {error}\n                  </li>\n                ))}\n              </ul>\n            </Text>\n          </Card>\n        ) : null}\n        <IndexFormInput\n          label=\"Index name\"\n          placeholder={'Name of index without spaces...'}\n          index={index}\n          prop=\"indexName\"\n          onChange={setIndex}\n          readOnly={readOnly}\n        />\n        <IndexFormInput label=\"Dataset\" index={index} prop=\"dataset\" onChange={setIndex} readOnly />\n        <IndexFormInput\n          label=\"Filter\"\n          description=\"Must be a valid GROQ filter\"\n          placeholder={defaultIndex.filter}\n          index={index}\n          prop=\"filter\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />\n        <IndexFormInput\n          label=\"Projection\"\n          description=\"Must be a valid GROQ projection, starting { and ending with }\"\n          placeholder={defaultIndex.projection}\n          index={index}\n          prop=\"projection\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />\n        {onSubmit && (\n          <Button\n            type=\"submit\"\n            text=\"Create index\"\n            icon={\n              loading ? (\n                <Box style={{marginTop: 5}}>\n                  <Spinner />\n                </Box>\n              ) : (\n                AddIcon\n              )\n            }\n            disabled={readOnly || loading}\n            tone=\"primary\"\n          />\n        )}\n      </Stack>\n    </form>\n  )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Button, type ButtonProps, Card} from '@sanity/ui'\nimport {type CSSProperties, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {\n  DefaultPreview,\n  getPreviewStateObservable,\n  getPreviewValueWithFallback,\n  SanityDefaultPreview,\n  type SanityDocument,\n  type SchemaType,\n  useDocumentPreviewStore,\n  useSchema,\n} from 'sanity'\nimport {useIntentLink} from 'sanity/router'\n\ninterface ResultPreviewProps {\n  documentId: string\n  schemaTypeName: string\n  button?: boolean\n  style?: CSSProperties\n}\n\nexport function DocumentPreview({\n  documentId,\n  style,\n  schemaTypeName,\n  ...buttonProps\n}: ResultPreviewProps & ButtonProps) {\n  const schema = useSchema()\n  const schemaType = schemaTypeName ? schema.get(schemaTypeName) : undefined\n\n  if (!schemaTypeName) {\n    return (\n      <Card style={{minHeight: '36px'}}>\n        <DefaultPreview\n          withShadow={false}\n          withBorder={false}\n          title={'Loading...'}\n          schemaType={schemaType}\n          isPlaceholder\n        />\n      </Card>\n    )\n  }\n\n  if (!schemaType) {\n    return (\n      <Card>\n        <DefaultPreview\n          withShadow={false}\n          withBorder={false}\n          media={<ErrorOutlineIcon />}\n          title={\n            <>\n              Unknown type <code>{schemaTypeName ?? 'N/A'}</code> for {documentId}\n            </>\n          }\n        />\n      </Card>\n    )\n  }\n\n  return (\n    <DocumentPreviewInner\n      documentId={documentId}\n      schemaTypeName={schemaTypeName}\n      schemaType={schemaType}\n      style={style}\n      {...buttonProps}\n    />\n  )\n}\n\nfunction DocumentPreviewInner({\n  documentId,\n  schemaType,\n  style,\n  button,\n}: ResultPreviewProps & {schemaType: SchemaType} & ButtonProps) {\n  const documentPreviewStore = useDocumentPreviewStore()\n\n  const previewStateObservable = useMemo(\n    () => getPreviewStateObservable(documentPreviewStore, schemaType, documentId),\n    [documentId, documentPreviewStore, schemaType],\n  )\n\n  const {\n    snapshot,\n    original,\n    isLoading: previewIsLoading,\n  } = useObservable(previewStateObservable, {\n    snapshot: null,\n    isLoading: true,\n    original: null,\n  })\n\n  const sanityDocument = useMemo(() => {\n    return {\n      _id: documentId,\n      _type: schemaType?.name,\n    } as SanityDocument\n  }, [documentId, schemaType?.name])\n\n  const {onClick: onIntentClick, href} = useIntentLink({\n    intent: 'edit',\n    params: {\n      id: documentId,\n      type: schemaType?.name,\n    },\n  })\n\n  const preview = (\n    <SanityDefaultPreview\n      {...getPreviewValueWithFallback({\n        snapshot,\n        original,\n        fallback: sanityDocument,\n      })}\n      isPlaceholder={previewIsLoading ?? true}\n      layout=\"default\"\n      icon={schemaType?.icon}\n    />\n  )\n  if (button) {\n    return (\n      <Button\n        as={'a'}\n        href={href}\n        onClick={onIntentClick}\n        mode=\"ghost\"\n        style={{width: '100%', ...style}}\n      >\n        {preview}\n      </Button>\n    )\n  }\n  return <Box style={{width: '100%'}}>{preview}</Box>\n}\n","import {Box, Button, Flex, Text} from '@sanity/ui'\nimport {Autocomplete, type AutocompleteOpenButtonProps} from '@sanity/ui/autocomplete'\nimport {\n  type FocusEventHandler,\n  type Ref,\n  useCallback,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {typed} from 'sanity'\n\nimport {queryIndex, type QueryResult} from '../api/embeddingsApi'\nimport {useApiClient} from '../api/embeddingsApiHooks'\nimport {DocumentPreview} from '../preview/DocumentPreview'\nimport {type EmbeddingsIndexConfig} from '../schemas/typeDefExtensions'\n\nexport interface SemanticSearchAutocompleteProps {\n  indexConfig: EmbeddingsIndexConfig\n  getEmptySearchValue: () => string\n  typeFilter?: string[]\n  filterResult?: (hit: QueryResult) => boolean\n  onSelect?: (value: QueryResult) => void\n  onFocus?: FocusEventHandler<HTMLInputElement>\n  onBlur?: FocusEventHandler<HTMLInputElement>\n  readOnly?: boolean\n}\n\ninterface Option {\n  result: QueryResult\n  value: string\n}\n\nconst NO_RESULTS_VALUE = '' as const\n\ninterface NoResultOption {\n  value: string\n}\n\nconst NO_OPTIONS: NoResultOption[] = []\nconst NO_FILTER = () => true\n\nexport function SemanticSearchAutocomplete(\n  props: SemanticSearchAutocompleteProps & {ref?: Ref<HTMLInputElement>},\n) {\n  const {\n    indexConfig,\n    filterResult,\n    getEmptySearchValue,\n    readOnly,\n    onFocus,\n    onBlur,\n    onSelect,\n    typeFilter,\n    ref,\n  } = props\n  const id = useId()\n  const [query, setQuery] = useState('')\n  const queryRef = useRef(query)\n  const debouncedQuery = useDebouncedValue(query, 300)\n  const prevDebouncedQuery = useRef(debouncedQuery)\n\n  const [searching, setSearching] = useState(false)\n  const [options, setOptions] = useState<Option[] | NoResultOption[]>(NO_OPTIONS)\n\n  const client = useApiClient()\n\n  const runIndexQuery = useCallback(\n    (queryString: string) => {\n      setSearching(true)\n      const indexName = indexConfig?.indexName\n      const maxResults = indexConfig?.maxResults\n\n      if (!indexName) {\n        throw new Error(`Reference option embeddingsIndex.indexName is required, but was missing`)\n      }\n\n      queryIndex(\n        {\n          query: queryString.trim().length ? queryString : (getEmptySearchValue() ?? ''),\n          indexName,\n          maxResults,\n          filter: {\n            type: typeFilter,\n          },\n        },\n        client,\n      )\n        .then((result: QueryResult[]) => {\n          if (queryRef.current === queryString) {\n            setSearching(false)\n            setOptions([])\n            const resultOptions = result\n              .filter((hit) => (filterResult ? filterResult(hit) : true))\n              .map((r) => typed<Option>({result: r, value: r.value.documentId}))\n            if (resultOptions.length) {\n              setOptions(resultOptions)\n            } else {\n              setOptions([{value: NO_RESULTS_VALUE}])\n            }\n          }\n        })\n        .catch((e) => {\n          console.error(e)\n          if (queryRef.current === queryString) {\n            setSearching(false)\n            setOptions([{value: NO_RESULTS_VALUE}])\n          }\n        })\n    },\n    [client, indexConfig, getEmptySearchValue, filterResult, typeFilter],\n  )\n\n  useEffect(() => {\n    if (prevDebouncedQuery.current !== debouncedQuery) {\n      runIndexQuery(debouncedQuery)\n    }\n    prevDebouncedQuery.current = debouncedQuery\n  }, [debouncedQuery, runIndexQuery])\n\n  const openButtonConfig: AutocompleteOpenButtonProps = useMemo(\n    () => ({onClick: () => runIndexQuery(queryRef.current)}),\n    [runIndexQuery, queryRef],\n  )\n\n  const handleQueryChange = useCallback(\n    (newValue: string | null) => {\n      const newQuery = newValue ?? ''\n      queryRef.current = newQuery\n      setQuery(newQuery)\n    },\n    [setQuery],\n  )\n\n  const handleChange = useCallback(\n    (value: string) => {\n      if (value === NO_RESULTS_VALUE) {\n        setOptions(NO_OPTIONS)\n        return\n      }\n      const option = (options as Option[])\n        .filter((r): r is Option => 'result' in r)\n        .find((r) => r.result.value.documentId === value)\n      if (option && onSelect) {\n        onSelect(option.result)\n      }\n    },\n    [onSelect, options],\n  )\n\n  return (\n    <Autocomplete\n      id={id}\n      ref={ref}\n      data-testid=\"semantic-autocomplete\"\n      placeholder=\"Type to search...\"\n      openButton={openButtonConfig}\n      onFocus={onFocus}\n      onChange={handleChange}\n      loading={searching}\n      onBlur={onBlur}\n      readOnly={readOnly}\n      filterOption={NO_FILTER}\n      onQueryChange={handleQueryChange}\n      options={options}\n      renderOption={AutocompleteOption}\n    />\n  )\n}\n\nfunction AutocompleteOption(props: Option | NoResultOption) {\n  if ('result' in props) {\n    const value = props.result.value\n    return (\n      <Button mode=\"bleed\" padding={1} style={{width: '100%'}}>\n        <Flex gap={2} align=\"center\">\n          <Box flex={1}>\n            <DocumentPreview documentId={value.documentId} schemaTypeName={value.type} />\n          </Box>\n          <Box padding={2}>\n            <Text size={1} muted title={'Relevance'}>\n              {Math.floor(props.result.score * 100)}%\n            </Text>\n          </Box>\n        </Flex>\n      </Button>\n    )\n  }\n\n  return (\n    <Button mode=\"bleed\" padding={1} style={{width: '100%'}} disabled>\n      <Flex gap={2} align=\"center\">\n        No results.\n      </Flex>\n    </Button>\n  )\n}\n\nfunction useDebouncedValue<T>(value: T, ms: number) {\n  const [debouncedValue, setDebouncedValue] = useState(value)\n\n  useEffect(() => {\n    const timeoutId = setTimeout(() => {\n      setDebouncedValue(value)\n    }, ms)\n    return () => clearTimeout(timeoutId)\n  }, [value, ms])\n\n  return debouncedValue\n}\n","import {useCallback, useMemo} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {type QueryResult} from '../api/embeddingsApi'\nimport {SemanticSearchAutocomplete} from '../referenceInput/SemanticSearchAutocomplete'\nimport {type EmbeddingsIndexConfig} from '../schemas/typeDefExtensions'\n\nexport function QueryIndex(props: {indexName: string}) {\n  const {indexName} = props\n  const getEmpty = useCallback(() => 'anything', [])\n  const indexConfig: EmbeddingsIndexConfig = useMemo(\n    () => ({indexName, maxResults: 8}),\n    [indexName],\n  )\n\n  const {resolveIntentLink, navigateUrl} = useRouter()\n  const onSelect = useCallback(\n    (hit: QueryResult) => {\n      navigateUrl({\n        path: resolveIntentLink('edit', {id: hit.value.documentId, type: hit.value.type}),\n      })\n    },\n    [resolveIntentLink, navigateUrl],\n  )\n  return (\n    <SemanticSearchAutocomplete\n      getEmptySearchValue={getEmpty}\n      indexConfig={indexConfig}\n      onSelect={onSelect}\n    />\n  )\n}\n","import {EllipsisVerticalIcon} from '@sanity/icons/EllipsisVertical'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Flex, Heading, Label, Stack, Text} from '@sanity/ui'\nimport {Menu, MenuButton, MenuItem} from '@sanity/ui/menu'\nimport {useCallback} from 'react'\n\nimport {type IndexState} from '../api/embeddingsApi'\nimport {IndexEditor} from './IndexEditor'\nimport {QueryIndex} from './QueryIndex'\n\nexport interface IndexInfoProps {\n  selectedIndex: IndexState\n  onDeleteIndex: (index: IndexState) => void\n}\n\nexport function IndexInfo({selectedIndex, onDeleteIndex}: IndexInfoProps) {\n  const handleDelete = useCallback(\n    () => onDeleteIndex(selectedIndex),\n    [selectedIndex, onDeleteIndex],\n  )\n  return (\n    <Stack gap={4} flex={1}>\n      <Flex align=\"center\" flex={1} gap={2}>\n        <Box flex={1}>\n          <Heading>Index: {selectedIndex?.indexName ?? 'Untitled'}</Heading>\n        </Box>\n        <Box>\n          <MenuButton\n            button={\n              <Button\n                title=\"Open index actions\"\n                icon={EllipsisVerticalIcon}\n                padding={2}\n                mode=\"ghost\"\n              />\n            }\n            id={`button-${selectedIndex.indexName}`}\n            menu={\n              <Menu>\n                <MenuItem\n                  text=\"Delete index\"\n                  icon={TrashIcon}\n                  tone=\"critical\"\n                  onClick={handleDelete}\n                />\n              </Menu>\n            }\n            popover={{placement: 'right'}}\n          />\n        </Box>\n      </Flex>\n\n      <Flex gap={6}>\n        <Stack gap={4} flex={1} style={{maxWidth: 600}}>\n          <Box>\n            <IndexEditor index={selectedIndex} readOnly />\n          </Box>\n          <IndexStatus selectedIndex={selectedIndex} />\n        </Stack>\n\n        <Stack gap={3} flex={1}>\n          <Label muted>Query index</Label>\n          <QueryIndex indexName={selectedIndex.indexName} key={selectedIndex.indexName} />\n        </Stack>\n      </Flex>\n    </Stack>\n  )\n}\n\nfunction IndexStatus({selectedIndex}: {selectedIndex: IndexState}) {\n  return (\n    <Stack gap={4} flex={1}>\n      <Flex gap={2} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Status\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>{selectedIndex.status}</Text>\n        </Stack>\n      </Flex>\n      <Flex gap={5} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Indexing progress\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>\n            {selectedIndex.startDocumentCount - selectedIndex.remainingDocumentCount} /{' '}\n            {selectedIndex.startDocumentCount}\n          </Text>\n        </Stack>\n      </Flex>\n      <Flex gap={5} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Failed documents\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>{selectedIndex.failedDocumentCount}</Text>\n        </Stack>\n      </Flex>\n    </Stack>\n  )\n}\n","import {Box, Button, Card, Flex, Label, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {type IndexState} from '../api/embeddingsApi'\n\nexport interface IndexListProps {\n  loading: boolean\n  selectedIndex?: IndexState\n  indexes: IndexState[]\n  onIndexSelected: (index: IndexState) => void\n}\n\nexport function IndexList(props: IndexListProps) {\n  const {loading, selectedIndex, indexes, onIndexSelected} = props\n  return (\n    <Card tone=\"default\" style={{opacity: loading ? 0.5 : 1}}>\n      <Stack gap={2}>\n        <Card borderBottom flex={1} paddingBottom={2} padding={3}>\n          <Flex>\n            <Box flex={1}>\n              <Label muted>Index name</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Dataset</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Status</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Progress</Label>\n            </Box>\n          </Flex>\n        </Card>\n        {indexes.length ? (\n          <Stack gap={2} style={{maxHeight: 200, overflow: 'auto'}}>\n            {indexes.map((index) => (\n              <IndexRow\n                selectedIndex={selectedIndex}\n                index={index}\n                onIndexSelected={onIndexSelected}\n                key={index.indexName}\n              />\n            ))}\n          </Stack>\n        ) : (\n          <Text muted>No indexes found.</Text>\n        )}\n      </Stack>\n    </Card>\n  )\n}\n\nfunction IndexRow(props: {\n  selectedIndex?: IndexState\n  index: IndexState\n  onIndexSelected: (index: IndexState) => void\n}) {\n  const {selectedIndex, index, onIndexSelected} = props\n  const onSelect = useCallback(() => onIndexSelected(index), [onIndexSelected, index])\n  return (\n    <Button\n      tone={selectedIndex?.indexName === index.indexName ? 'primary' : 'default'}\n      mode={selectedIndex?.indexName === index.indexName ? 'default' : 'ghost'}\n      onClick={onSelect}\n      key={index.indexName}\n      padding={3}\n    >\n      <Flex>\n        <Box flex={1}>\n          <strong>{index.indexName}</strong>\n        </Box>\n        <Box flex={1}>{index.dataset}</Box>\n        <Box flex={1}>{index.status}</Box>\n        <Box flex={1}>\n          {index.startDocumentCount\n            ? Math.floor(\n                ((index.startDocumentCount - index.remainingDocumentCount) /\n                  index.startDocumentCount) *\n                  100,\n              )\n            : '?'}\n          %\n        </Box>\n      </Flex>\n    </Button>\n  )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {UndoIcon} from '@sanity/icons/Undo'\nimport {Box, Button, Card, Flex, Heading, Spinner, Stack} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {deleteIndex, getIndexes, type IndexState, type NamedIndex} from '../api/embeddingsApi'\nimport {useApiClient} from '../api/embeddingsApiHooks'\nimport {FeatureDisabledNotice, FeatureError, useIsFeatureEnabled} from '../api/isEnabled'\nimport {EditIndexDialog} from './IndexEditor'\nimport {IndexInfo} from './IndexInfo'\nimport {IndexList} from './IndexList'\n\nexport function EmbeddingsIndexTool() {\n  const featureState = useIsFeatureEnabled()\n  return (\n    <Card flex={1}>\n      <Flex justify=\"center\" flex={1}>\n        {featureState === 'error' ? (\n          <Box padding={4}>\n            <FeatureError />\n          </Box>\n        ) : null}\n\n        {featureState === 'disabled' ? (\n          <Box padding={4}>\n            <FeatureDisabledNotice urlSuffix=\"?ref=embeddings-tab\" />\n          </Box>\n        ) : null}\n\n        {featureState === 'loading' ? (\n          <Box padding={6}>\n            <Spinner size={4} />\n          </Box>\n        ) : null}\n\n        {featureState === 'enabled' ? (\n          <Card flex={1} style={{maxWidth: 1200}} padding={5}>\n            <Indexes />\n          </Card>\n        ) : null}\n      </Flex>\n    </Card>\n  )\n}\n\nconst NO_INDEXES: IndexState[] = []\n\nfunction Indexes() {\n  const client = useApiClient()\n  const [indexes, setIndexes] = useState<IndexState[]>(NO_INDEXES)\n  const [loading, setLoading] = useState(false)\n  const [error, setError] = useState(false)\n  const [createIndexOpen, setCreateIndexOpen] = useState(false)\n  const [selectedIndex, setSelectedIndex] = useState<IndexState | undefined>(undefined)\n\n  const onCreateIndexClose = useCallback(() => setCreateIndexOpen(false), [])\n\n  useEffect(() => {\n    // oxlint-disable-next-line react/set-state-in-effect\n    setSelectedIndex(indexes.find((i) => i.indexName === selectedIndex?.indexName))\n  }, [indexes, selectedIndex])\n\n  const updateIndexes = useCallback(() => {\n    setLoading(true)\n    setError(false)\n    getIndexes(client)\n      .then((response: IndexState[]) => {\n        setLoading(false)\n        setIndexes(response)\n      })\n      .catch((e) => {\n        console.error(e)\n        setError(true)\n      })\n      .finally(() => {\n        setLoading(false)\n      })\n  }, [client])\n\n  const deleteNamedIndex = useCallback(\n    (index: NamedIndex) => {\n      if (\n        !confirm(`Are you sure you want to delete ${index.indexName} for dataset ${index.dataset}?`)\n      ) {\n        return\n      }\n      setLoading(true)\n      setError(false)\n      deleteIndex(index.indexName, client)\n        .then(() => {\n          setTimeout(() => updateIndexes())\n        })\n        .catch((e) => {\n          console.error(e)\n          setError(true)\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    },\n    [client, updateIndexes],\n  )\n\n  const onSelectIndex = useCallback(\n    (index: IndexState) => {\n      setSelectedIndex(index)\n      updateIndexes()\n    },\n    [setSelectedIndex, updateIndexes],\n  )\n\n  useEffect(() => {\n    // oxlint-disable-next-line react/set-state-in-effect\n    updateIndexes()\n  }, [updateIndexes])\n\n  const openCreate = useCallback(() => setCreateIndexOpen(true), [])\n  const onSubmit = useCallback(\n    (index: IndexState) => {\n      setIndexes((current) => [...current, index])\n      setSelectedIndex(index)\n      updateIndexes()\n    },\n    [updateIndexes],\n  )\n  return (\n    <Stack gap={4}>\n      <Flex gap={2} align=\"center\" style={{height: 30}}>\n        <Box flex={1}>\n          <Heading size={1}>Embeddings indexes</Heading>\n        </Box>\n        <Box style={{justifySelf: 'flex-end'}}>\n          <Button\n            icon={AddIcon}\n            text={'New index'}\n            tone=\"default\"\n            mode=\"ghost\"\n            onClick={openCreate}\n          />\n        </Box>\n        <Button\n          icon={loading ? <Spinner /> : UndoIcon}\n          title={'Refresh index list'}\n          tone=\"default\"\n          mode=\"bleed\"\n          onClick={updateIndexes}\n          disabled={loading}\n        />\n      </Flex>\n      {error ? (\n        <Card tone=\"critical\" padding={2} border>\n          An error occurred. See console for details.\n        </Card>\n      ) : null}\n      <IndexList\n        loading={loading}\n        indexes={indexes}\n        selectedIndex={selectedIndex}\n        onIndexSelected={onSelectIndex}\n      />\n      {selectedIndex && (\n        <IndexInfo selectedIndex={selectedIndex} onDeleteIndex={deleteNamedIndex} />\n      )}\n      <EditIndexDialog open={createIndexOpen} onClose={onCreateIndexClose} onSubmit={onSubmit} />\n    </Stack>\n  )\n}\n","import {EarthGlobeIcon} from '@sanity/icons/EarthGlobe'\nimport {definePlugin, type Tool} from 'sanity'\n\nimport {EmbeddingsIndexTool} from './EmbeddingsIndexTool'\n\nconst embeddingsIndexTool: Tool = {\n  name: 'embeddings-index',\n  title: 'Embeddings',\n  icon: EarthGlobeIcon,\n  component: EmbeddingsIndexTool,\n}\n\nexport const embeddingsIndexDashboard = definePlugin({\n  name: '@sanity/embeddings-index-dashboard',\n  tools: [embeddingsIndexTool],\n})\n","export function publicId(id: string): string {\n  return id.replace('drafts.', '')\n}\n","import {EarthGlobeIcon} from '@sanity/icons/EarthGlobe'\nimport {LinkIcon} from '@sanity/icons/Link'\nimport {Box, Button, Flex, Spinner} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {\n  type ObjectInputProps,\n  type ReferenceBaseOptions,\n  type ReferenceSchemaType,\n  set,\n  setIfMissing,\n  unset,\n} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {type QueryResult} from '../api/embeddingsApi'\nimport {FeatureDisabledNotice, FeatureError, useIsFeatureEnabledContext} from '../api/isEnabled'\nimport {type EmbeddingsIndexConfig} from '../schemas/typeDefExtensions'\nimport {publicId} from '../utils/id'\nimport {SemanticSearchAutocomplete} from './SemanticSearchAutocomplete'\n\nfunction useEmeddingsConfig(\n  embeddingsIndexConfig: ReferenceBaseOptions['embeddingsIndex'],\n  defaultConfig: EmbeddingsIndexConfig | undefined,\n) {\n  return useMemo(() => {\n    if (embeddingsIndexConfig === true || !embeddingsIndexConfig) {\n      if (!defaultConfig?.indexName) {\n        throw new Error(\n          'Default embeddingsIndex config is missing. When options.embeddingsIndex: true, embeddingsIndexReferenceInput plugin config is required.',\n        )\n      }\n      return defaultConfig\n    }\n\n    const finalConfig = {\n      ...defaultConfig,\n      ...embeddingsIndexConfig,\n    }\n\n    if (!finalConfig?.indexName) {\n      throw new Error(\n        'indexName is missing. Either set it in options.embeddingsIndex or configure defaults using plugin config.',\n      )\n    }\n\n    return finalConfig\n  }, [defaultConfig, embeddingsIndexConfig])\n}\n\nexport function SemanticSearchReferenceInput(\n  props: ObjectInputProps & {defaultConfig?: EmbeddingsIndexConfig},\n) {\n  const embeddingsIndexConfig = (props.schemaType as ReferenceSchemaType)?.options?.embeddingsIndex\n\n  const config = useEmeddingsConfig(embeddingsIndexConfig, props.defaultConfig)\n\n  const defaultEnabled = config.searchMode === 'embeddings'\n\n  const featureState = useIsFeatureEnabledContext()\n\n  const [semantic, setSemantic] = useState<boolean>(defaultEnabled)\n  const toggleSemantic = useCallback(() => setSemantic((current) => !current), [])\n\n  return (\n    <Flex gap={2} flex={1} style={{width: '100%'}}>\n      {semantic && featureState == 'loading' ? (\n        <Box padding={2}>\n          <Spinner />\n        </Box>\n      ) : null}\n\n      {semantic && featureState == 'disabled' ? (\n        <FeatureDisabledNotice urlSuffix=\"?ref=embeddings-ref\" />\n      ) : null}\n\n      {semantic && featureState === 'error' ? (\n        <Box padding={4}>\n          <FeatureError />\n        </Box>\n      ) : null}\n\n      <Box flex={1} style={{maxHeight: 36, overflow: 'hidden'}}>\n        {semantic && featureState == 'enabled' ? (\n          <SemanticSearchInput {...props} indexConfig={config} />\n        ) : (\n          props.renderDefault(props)\n        )}\n      </Box>\n      <Button\n        icon={semantic ? EarthGlobeIcon : LinkIcon}\n        onClick={toggleSemantic}\n        mode=\"bleed\"\n        title={\n          semantic ? 'Switch to standard reference search' : 'Switch to semantic reference search'\n        }\n      />\n    </Flex>\n  )\n}\n\nfunction SemanticSearchInput(props: ObjectInputProps & {indexConfig: EmbeddingsIndexConfig}) {\n  const {indexConfig, onPathFocus, onChange, readOnly, schemaType, value} = props\n\n  const {value: currentDocument} = useDocumentPane()\n  const docRef = useRef(currentDocument)\n  const autocompleteRef = useRef<HTMLInputElement>(null)\n\n  useEffect(() => {\n    docRef.current = currentDocument\n  }, [currentDocument])\n\n  useEffect(() => {\n    // if this component is rendered, and there is a value, replace was selected\n    if (value?.['_ref']) {\n      autocompleteRef.current?.focus()\n    }\n    // intentional empty deps — focus once on mount when replacing an existing reference\n    // oxlint-disable-next-line react/rule-suppression\n    // oxlint-disable-next-line react/exhaustive-deps\n  }, [])\n\n  const handleFocus = useCallback(() => onPathFocus(['_ref']), [onPathFocus])\n  const handleBlur = useCallback(() => onPathFocus([]), [onPathFocus])\n\n  const handleChange = useCallback(\n    (result: QueryResult) => {\n      if (!result) {\n        onChange(unset())\n        onPathFocus([])\n        return\n      }\n      const patches = [\n        setIfMissing({}),\n        set(schemaType.name, ['_type']),\n        set(publicId(result.value.documentId), ['_ref']),\n        unset(['_weak']),\n        unset(['_strengthenOnPublish']),\n      ]\n\n      onChange(patches)\n      // Move focus away from _ref and one level up\n      onPathFocus([])\n    },\n    [onChange, onPathFocus, schemaType.name],\n  )\n\n  const filterResult = useCallback(\n    (r: QueryResult) => {\n      const currentId = docRef.current?._id\n      return !currentId || r.value.documentId !== publicId(currentId)\n    },\n    [docRef],\n  )\n\n  const getEmptySearchValue = useCallback(() => JSON.stringify(docRef.current), [docRef])\n  const typeFilter = useMemo(\n    () => (schemaType as ReferenceSchemaType).to.map((refType) => refType.name),\n    [schemaType],\n  )\n\n  return (\n    <SemanticSearchAutocomplete\n      ref={autocompleteRef}\n      typeFilter={typeFilter}\n      indexConfig={indexConfig}\n      onSelect={handleChange}\n      onFocus={handleFocus}\n      onBlur={handleBlur}\n      getEmptySearchValue={getEmptySearchValue}\n      filterResult={filterResult}\n      readOnly={readOnly}\n    />\n  )\n}\n","import {\n  definePlugin,\n  isObjectInputProps,\n  type ObjectInputProps,\n  type ReferenceSchemaType,\n} from 'sanity'\n\nimport {FeatureEnabledProvider} from '../api/isEnabled'\nimport {type EmbeddingsIndexConfig} from '../schemas/typeDefExtensions'\nimport {isType} from '../utils/types'\nimport {SemanticSearchReferenceInput} from './SemanticSearchReferenceInput'\n\nexport const embeddingsIndexReferenceInput = definePlugin<EmbeddingsIndexConfig | void>(\n  (defaultConfig) => {\n    const config = typeof defaultConfig === 'object' ? defaultConfig : undefined\n\n    return {\n      name: '@sanity/embeddings-index-reference-input',\n      studio: {\n        components: {\n          layout: (props) => {\n            return <FeatureEnabledProvider>{props.renderDefault(props)}</FeatureEnabledProvider>\n          },\n        },\n      },\n      form: {\n        components: {\n          input: (props) => {\n            const embeddingsIndexConfig = (props.schemaType as ReferenceSchemaType)?.options\n              ?.embeddingsIndex\n            if (\n              isObjectInputProps(props) &&\n              isType(props.schemaType, 'reference') &&\n              (embeddingsIndexConfig === true || embeddingsIndexConfig?.indexName)\n            ) {\n              return (\n                <SemanticSearchReferenceInput\n                  {...(props as ObjectInputProps)}\n                  defaultConfig={config}\n                />\n              )\n            }\n            return props.renderDefault(props)\n          },\n        },\n      },\n    }\n  },\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkCA,SAAgBoB,WAAWC,aAA0BC,QAA8C;CACjG,IAAM,EAACJ,OAAOhB,WAAWiB,YAAYb,WAAUe,aACzCG,YAAYF,OAAOG,OAAO,CAAC,CAACD,WAC5BrB,UAAUmB,OAAOG,OAAO,CAAC,CAACtB,SAC1BuB,cAAcR,OAAOS,KAAK;CAEhC,OAAOL,OAAOM,QAAuB;EACnCC,QAAQ;EACRC,KAAK,2BAA2B3B,QAAO,GAAID,UAAS,aAAcsB;EAClEO,MAAM;GACJb,OAAOQ;GACPP;GACAb;EACF;CACF,CAAC;AACH;AAEA,SAAgB0B,WAAWV,QAA6C;CACtE,IAAME,YAAYF,OAAOG,OAAO,CAAC,CAACD,WAC5BrB,UAAUmB,OAAOG,OAAO,CAAC,CAACtB;CAChC,OAAOmB,OAAOM,QAAsB;EAClCC,QAAQ;EACRC,KAAK,qBAAqB3B,QAAO,aAAcqB;CACjD,CAAC;AACH;AAEA,SAAgBS,YAAY/B,WAAmBoB,QAA2C;CACxF,IAAME,YAAYF,OAAOG,OAAO,CAAC,CAACD,WAC5BrB,UAAUmB,OAAOG,OAAO,CAAC,CAACtB;CAChC,OAAOmB,OAAOM,QAAoB;EAChCC,QAAQ;EACRC,KAAK,qBAAqB3B,QAAO,GAAID,UAAS,aAAcsB;CAC9D,CAAC;AACH;AChEA,SAAOa,eAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KACoBF,KAAA,EAAAG,YAAa,KAAI,GAACL,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CAA3C,IAAAM,SAAeR,UAAUI,EAAkB,GAACK;CAAA,IAAAP,EAAA,OAAAM,QAAA;EAAAE,KAAA;GAE1C,IAAAC,aAAmBC,aAAYC,QAAS,uBAAuB;GAC/D,IAAIF,YAAU;IACZF,KAAOD,OAAMM,WAAY;KAAAC,SACdJ;KAAUK,oBAIC;KAAKC,iBACR;IACnB,CAAC;IAPD,MAAAP;GAOE;GAEJD,KAAOD;EAAM;EAAAN,AAAAA,EAAA,KAAAM,QAAAN,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAZRO;AAaK;ACXd,MAAMmB,wBAAwBR,cAA6B,SAAS;AAEpE,SAAOS,sBAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACLC,SAAeN,aAAa,GAC5B,CAAAO,QAAAC,aAA4BV,SAAwB,SAAS,GAACW,IAAAC;CAelD,OAfkDN,EAAA,OAAAE,UAenDG,KAAAL,EAAA,IAAAM,KAAAN,EAAA,OAbDK,WAAA;EACRH,OAAMK,QACyB;GAAAC,QACnB;GAAKC,KACR;EACP,CAAC,CAAC,CAAAC,MACIC,aAAA;GACJP,UAAUO,SAAQC,UAAR,YAAA,UAAyC;EAAC,CACrD,CAAC,CAAAC,OACKC,QAAA;GAELV,AADAW,QAAOC,MAAOF,GAAG,GACjBV,UAAU,OAAO;EAAC,CACnB;CAAC,GACHE,KAAA,CAACJ,MAAM,GAACF,EAAA,KAAAE,QAAAF,EAAA,KAAAK,IAAAL,EAAA,KAAAM,KAbXb,UAAUY,IAaPC,EAAQ,GAEJH;AAAM;AAGf,SAAOc,uBAAAC,OAAA;CAAA,IAAAlB,IAAAC,EAAA,CAAA,GACLE,SAAeJ,oBAAoB,GAACM;CAE8D,OAF9DL,EAAA,OAAAkB,MAAAC,YAAAnB,EAAA,OAAAG,UAElCE,KAAA,oBAAA,sBAAA,UAAA;EAAuCF,OAAAA;EAASe,UAAAA,MAAKC;CAAU,CAAA,GAAiCnB,EAAA,KAAAkB,MAAAC,UAAAnB,EAAA,KAAAG,QAAAH,EAAA,KAAAK,MAAAA,KAAAL,EAAA,IAAhGK;AAAgG;AAIpG,SAAOe,6BAAA;CAAA,OACE5B,WAAWM,qBAAqB;AAAC;AAG1C,SAAOuB,sBAAAH,OAAA;CAAA,IAAAlB,IAAAC,EAAA,CAAA,GAQUI,KAAA,wCAPGV,aAOqC2B,EAAS,OAAQJ,MAAKK,aAAL,MAAuBjB;CAItF,OAJsFN,EAAA,OAAAK,KAItFC,KAAAN,EAAA,MARPM,KAAA,oBAAC,MAAD;EAAW,MAAA;EAAU,QAAA;EAAgB,SAAA;EACnC,UAAA,qBAAC,MAAD;GAAY,MAAA;GAAZ,UAAA;IAAe;IAEK;IAClB,oBAAA,KAAA;KAAS,MAAAD;KAAkF,UAAA;IAEvF,CAAA;GALD;;CADF,CAAA,GAQEL,EAAA,KAAAK,IAAAL,EAAA,KAAAM,KARPA;AAQO;AAIX,SAAOkB,eAAA;CAAA,IAAAxB,IAAAC,EAAA,CAAA,GAAAI;CAII,OAJJL,EAAA,OAAAyB,OAAAC,IAAA,2BAAA,KAEHrB,KAAA,oBAAC,MAAD;EAAe,SAAA;EAAG,QAAA;EAAY,MAAA;EAAW,UAAA;CAApC,CAAA,GAEEL,EAAA,KAAAK,MAAAA,KAAAL,EAAA,IAFPK;AAEO;AC5DX,SAAgBuB,OAAOC,YAAwBC,UAA2B;CAOxE,OANID,WAAWE,SAASD,WACf,KAEJD,WAAWG,OAGTJ,OAAOC,WAAWG,MAAMF,QAAQ,IAF9B;AAGX;ACHA,SAAOQ,gBAAAC,QAAAC,SAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAF,SAgBaI,KAAAF,EAAA,MAbDE,KAAAJ,OAAMK,aACH,CAAC,CAAAC,KACVC,MAAOP,OAAMQ,IAAKD,CAAC,CAAC,CAAC,CAAAE,OAClBC,OAER,CAAC,CAAAD,OAECE,QAIF,CAAC,CAAAL,IACIM,MAA0C,CAAC,CAAAC,KAC1C,KAAK,GAACX,EAAA,KAAAF,QAAAE,EAAA,KAAAE;CAflB,IAAAU,gBAEI,aAAaV,GAaC,IAEjBW;CAOE,OAPFb,EAAA,OAAAD,WAAAC,EAAA,OAAAY,iBAGQC,KAAA;EAAAd;EAAAe,YAEOlB;EAAiBW,QACrBK;CACV,GAACZ,EAAA,KAAAD,SAAAC,EAAA,KAAAY,eAAAZ,EAAA,KAAAa,MAAAA,KAAAb,EAAA,IAJMa;AAIN;AAzBE,SAAAH,OAAAK,gBAAA;CAAA,OAewB,IAAIC,eAAYC,KAAK;AAAG;AAfhD,SAAAR,SAAAO,cAAA;CAAA,OAWK,CAACA,aAAYC,KAAKC,WAAY,SAAS,KAAvC,CACCF,aAAYC,KAAKC,WAAY,SAAS,KACvCF,aAAYC,SAAU;AAAU;AAbrC,SAAAT,QAAAW,YAAA;CAAA,OAOGC,GAAQD,cAAcxB,OAAOwB,YAAY,UAAU;AAAE;ACE/D,SAAOwB,eAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACL,EAAAT,OAAAC,aAAAJ,OAAAE,MAAAG,UAAAC,UAAAC,aAAAC,SAAiFE,OAAKG;CAAA,AAAAF,EAAA,OAAAN,YAAAM,EAAA,OAAAT,QAEpFW,MAAAC,cAAuBT,UAASU,aAAc;EAAA,GAAIA;GAAUb,OAAOY;CAAS,EAAE,GAACH,EAAA,KAAAN,UAAAM,EAAA,KAAAT,MAAAS,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CADjF,IAAAK,eAAqBH,IASVI,KAAAjB,MAAME,SAAN,IAAiBgB;CAIxB,OAJwBP,EAAA,OAAAP,eAAAO,EAAA,OAAAK,gBAAAL,EAAA,OAAAR,SAAAQ,EAAA,OAAAJ,eAAAI,EAAA,OAAAL,YAAAK,EAAA,OAAAM,MAAAN,EAAA,OAAAH,QAJ1BU,KAAA,oBAAC,WAAD;EACSf;EACMC;EACHY,UAAAA;EACH,OAAAC;EACGX;EACGC;EACPC;CAAI,CAAA,GACVG,EAAA,KAAAP,aAAAO,EAAA,KAAAK,cAAAL,EAAA,KAAAR,OAAAQ,EAAA,KAAAJ,aAAAI,EAAA,KAAAL,UAAAK,EAAA,KAAAM,IAAAN,EAAA,KAAAH,MAAAG,EAAA,MAAAO,MAAAA,KAAAP,EAAA,KARFO;AAQE;AAcN,SAAAG,UAAAX,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACE,EAAAT,OAAAC,aAAAC,UAAAe,OAAAd,UAAAC,aAAAC,MAAAK,OAAoFH,OAAjBF,OAAAK,OAAAS,KAAAA,IAAA,SAAAT,IACnEU,KAAW1B,MAAM,GAACoB;CAAA,AAAAN,EAAA,OAAAN,WAE2EY,KAAAN,EAAA,MAA3FM,MAAAO,MAA4DnB,SAASmB,EAACC,cAAcL,KAAM,GAACT,EAAA,KAAAN,UAAAM,EAAA,KAAAM;CAD7F,IAAAD,eAAqBC,IAGpBC;CAAA,AAAAP,EAAA,OAAAY,MAAAZ,EAAA,OAAAR,SAGGe,KAAA,oBAAC,OAAD;EAAU,IAAA;EAAQ,OAAA;EAAeK,SAAAA;EAC9BpB,UAAAA;CADG,CAAA,GAEEQ,EAAA,KAAAY,IAAAZ,EAAA,KAAAR,OAAAQ,EAAA,KAAAO,MAAAA,KAAAP,EAAA;CAAA,IAAAe;CAAA,AAAAf,EAAA,OAAAP,cAOPsB,KAAAf,EAAA,MANAe,KAAAtB,eACC,oBAAC,KAAD,EAAA,UACE,oBAAC,MAAD;EAAY,MAAA;EAAG,OAAA;EACZA,UAAAA;CADE,CAAA,EADH,CAAA,GAKLO,EAAA,KAAAP,aAAAO,EAAA,KAAAe;CAAA,IAAAC;CAAA,AAAAhB,EAAA,OAAAK,gBAAAL,EAAA,OAAAY,MAAAZ,EAAA,OAAAJ,eAAAI,EAAA,QAAAL,YAAAK,EAAA,QAAAH,QAAAG,EAAA,QAAAS,SACAO,KAAAnB,SAAS,SACR,oBAAC,WAAD;EACMe;EACGH;EACGJ,UAAAA;EACAV;EACGC;CAAW,CAAA,IAG1B,oBAAC,UAAD;EACMgB;EACGH;EACD,MAAA;EACIJ,UAAAA;EACAV;EACGC;EACN,OAAA,EAAAqB,QAAS,WAAU;CAAC,CAAA,GAE9BjB,EAAA,KAAAK,cAAAL,EAAA,KAAAY,IAAAZ,EAAA,KAAAJ,aAAAI,EAAA,MAAAL,UAAAK,EAAA,MAAAH,MAAAG,EAAA,MAAAS,OAAAT,EAAA,MAAAgB,MAAAA,KAAAhB,EAAA;CAAA,IAAAkB;CACK,OADLlB,EAAA,QAAAO,MAAAP,EAAA,QAAAe,MAAAf,EAAA,QAAAgB,MA7BHE,KAAA,qBAAC,OAAD;EAAY,KAAA;EAAZ,UAAA;GACEX;GAGCQ;GAOAC;EAXG;KA8BEhB,EAAA,MAAAO,IAAAP,EAAA,MAAAe,IAAAf,EAAA,MAAAgB,IAAAhB,EAAA,MAAAkB,MAAAA,KAAAlB,EAAA,KA9BRkB;AA8BQ;ACzEZ,SAAOqB,gBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAKL,EAAAC,MAAAC,SAAAC,aAAkCL,OAClCM,KAAWhB,MAAM,GACjBiB,MAAYhB,OAAuB,IAAI,GAACiB,IAAAC;CAExCpB,AAFwCY,EAAA,OAAAE,QAO1BK,KAAAP,EAAA,IAAAQ,KAAAR,EAAA,OALJO,WAAA;EACHL,QAGLO,iBAAiBH,IAAGI,SAAuBC,cAAC,OAAc,CAAC,EAAAC,MAAC,CAAC;CAAC,GAC7DJ,KAAA,CAACF,KAAKJ,IAAI,GAACF,EAAA,KAAAE,MAAAF,EAAA,KAAAO,IAAAP,EAAA,KAAAQ,KALdpB,UAAUmB,IAKPC,EAAW;CAAC,IAAAK;CAAA,AAAAb,EAAA,OAAAG,WAAAH,EAAA,OAAAI,YAGbS,MAAAC,UAAA;EAEEX,AADAC,SAASU,KAAK,GACdX,QAAQ;CAAC,GACVH,EAAA,KAAAG,SAAAH,EAAA,KAAAI,UAAAJ,EAAA,KAAAa,MAAAA,KAAAb,EAAA;CAJH,IAAAe,eAAqBF,IAMpBG;CAQO,OARPhB,EAAA,OAAAe,gBAAAf,EAAA,OAAAK,MAAAL,EAAA,OAAAG,WAAAH,EAAA,OAAAE,QAEMc,KAAAd,OACL,oBAAC,QAAD;EAAYG;EAAW,OAAA;EAAQC;EAAcH;EAAgB,QAAA;EAC3D,UAAA,oBAAC,OAAD;GAAgB,SAAA;GAAQ,KAAA;GACtB,UAAA,oBAAC,aAAD;IAAuB,UAAA;IAAiBY,UAAAA;GAAY,CAAA;EADhD,CAAA;CADD,CAAA,IADF,MAMCf,EAAA,KAAAe,cAAAf,EAAA,KAAAK,IAAAL,EAAA,KAAAG,SAAAH,EAAA,KAAAE,MAAAF,EAAA,MAAAgB,MAAAA,KAAAhB,EAAA,KANDgB;AAMC;AAGV,SAAOC,YAAAlB,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAKL,EAAAiB,UAAAJ,OAAAK,eAAAf,aAAmDL,OACnDqB,SAAezB,aAAa,GAC5B0B,SAAe7B,UAAU,GAACe;CAAA,AAAAP,EAAA,OAAAoB,SACgDb,KAAAP,EAAA,MAA7BO,KAAAa,OAAME,OAAQ,CAAC,CAAAC,WAAf,IAA6BvB,EAAA,KAAAoB,QAAApB,EAAA,KAAAO;CAA1E,IAAAiB,eAAqB5B,gBAAgByB,QAAQd,EAA6B,GAC1E,CAAAkB,QAAAC,aAA4BnC,SAA+B,GAC3D,CAAAoC,SAAAC,cAA8BrC,SAAkB,GAACiB;CAAA,AAAAR,EAAA,OAAAwB,gBAAAxB,EAAA,OAAAmB,iBACOX,YAAO;EAAA,GAC1DgB;EAAY,GACZL;CACL,IAAEnB,EAAA,KAAAwB,cAAAxB,EAAA,KAAAmB,eAAAnB,EAAA,KAAAQ,MAAAA,KAAAR,EAAA;CAHF,IAAA,CAAAc,OAAAe,YAA0BtC,SAA8BiB,EAGtD,GAACK,IAAAG;CAGH5B,AAHGY,EAAA,OAAAwB,gBAAAxB,EAAA,OAAAmB,iBAGON,WAAMgB,SAASV,iBAAA,EAAA,GAAqBK,aAAY,CAAC,GAAGR,KAAA,CAACG,eAAeK,YAAY,GAACxB,EAAA,KAAAwB,cAAAxB,EAAA,KAAAmB,eAAAnB,EAAA,KAAAa,IAAAb,EAAA,KAAAgB,OAAAH,KAAAb,EAAA,IAAAgB,KAAAhB,EAAA,KAA3FZ,UAAUyB,IAAoDG,EAA6B;CAAC,IAAAc;CAAA,AAAA9B,EAAA,OAAAoB,UAAApB,EAAA,QAAAc,SAAAd,EAAA,QAAAI,YAAAJ,EAAA,QAAAkB,YAG1FY,MAAAC,MAAA;EAEE,IADAA,EAACC,eAAgB,GACbd,UAAQ;EAIZ,IAAAe,mBAAmC,CAAA;EAoBnC,IAlBKnB,MAAKoB,YAEEpB,MAAKoB,UAAUE,MAAO,mBAAmB,KACnDH,iBAAgBE,KAAM,8DAA8D,IAFpFF,iBAAgBE,KAAM,wBAAwB,GAK3CrB,MAAKS,WACRU,iBAAgBE,KAAM,qBAAqB,GAGxCrB,MAAKuB,UACRJ,iBAAgBE,KAAM,oBAAoB,GAGvCrB,MAAKwB,cACRL,iBAAgBE,KAAM,wBAAwB,GAG5CF,iBAAgBM,QAAO;GACzBb,UAAUO,gBAAgB;GAAC;EAAA;EAI7B,IAAA,EAAAO,cAAoBpB,OAAME,OAAQ;EAElCF,AADAQ,WAAW,EAAI,GACfR,OAAMqB,QACK;GAAAC,QACC;GAAMC,KACT,qBAAqB7B,MAAKS,QAAQ,aAAciB;GAAWI,MAC1D;IAAAV,WACOpB,MAAKoB;IAAUI,YACdxB,MAAKwB;IAAWD,QACpBvB,MAAKuB;GACf;EACF,CAAC,CAAC,CAAAQ,MACIC,aAAA;GACJ,AAAI1C,YACFA,SAAS0C,SAAQhC,KAAM;EACxB,CACF,CAAC,CAAAiC,OACKC,QAAA;GAELtB,AADAuB,QAAOC,MAAOF,GAAG,GACjBtB,UAAU,CAACsB,IAAGG,OAAQ,CAAC;EAAC,CACzB,CAAC,CAAAC,cACO;GACPxB,WAAW,EAAK;EAAC,CAClB;CAAC,GACL5B,EAAA,KAAAoB,QAAApB,EAAA,MAAAc,OAAAd,EAAA,MAAAI,UAAAJ,EAAA,MAAAkB,UAAAlB,EAAA,MAAA8B,MAAAA,KAAA9B,EAAA;CAxDH,IAAAe,eAAqBe,IA0DpBuB;CAAA,AAAArD,EAAA,QAAAyB,SAoBa4B,KAAArD,EAAA,OAfPqD,KAAA5B,QAAMc,SACL,oBAAC,MAAD;EAAW,MAAA;EAAW,QAAA;EAAgB,SAAA;EACpC,UAAA,oBAAC,MAAD,EAAA,UACE,oBAAA,MAAA;GAAW,OAAA,EAAAe,YAAa,IAAG;GACxB7B,UAAAA,QAAM8B,IAAMC,OAOZ;EACE,CAAA,EAVF,CAAA;CADF,CAAA,IADN,MAeOxD,EAAA,MAAAyB,QAAAzB,EAAA,MAAAqD;CAAA,IAAAI;CAAA,AAAAzD,EAAA,QAAAc,SAAAd,EAAA,QAAAkB,YACRuC,KAAA,oBAAC,gBAAD;EACQ,OAAA;EACO,aAAA;EACN3C;EACF,MAAA;EACKe,UAAAA;EACAX;CAAQ,CAAA,GAClBlB,EAAA,MAAAc,OAAAd,EAAA,MAAAkB,UAAAlB,EAAA,MAAAyD,MAAAA,KAAAzD,EAAA;CAAA,IAAA0D;CAAA,AAAA1D,EAAA,QAAAc,QAC0F4C,KAAA1D,EAAA,OAA5F0D,KAAA,oBAAC,gBAAD;EAAsB,OAAA;EAAiB5C;EAAY,MAAA;EAAoBe,UAAAA;EAAU,UAAA;CAAQ,CAAA,GAAG7B,EAAA,MAAAc,OAAAd,EAAA,MAAA0D;CAAA,IAAAC;CAAA,AAAA3D,EAAA,QAAAwB,aAAAa,UAAArC,EAAA,QAAAc,SAAAd,EAAA,QAAAkB,YAC5FyC,KAAA,oBAAC,gBAAD;EACQ,OAAA;EACM,aAAA;EACC,aAAAnC,aAAYa;EAClBvB;EACF,MAAA;EACKe,UAAAA;EACAX;EACL,MAAA;CAAU,CAAA,GACflB,EAAA,MAAAwB,aAAAa,QAAArC,EAAA,MAAAc,OAAAd,EAAA,MAAAkB,UAAAlB,EAAA,MAAA2D,MAAAA,KAAA3D,EAAA;CAAA,IAAA4D;CAAA,AAAA5D,EAAA,QAAAwB,aAAAc,cAAAtC,EAAA,QAAAc,SAAAd,EAAA,QAAAkB,YACF0C,KAAA,oBAAC,gBAAD;EACQ,OAAA;EACM,aAAA;EACC,aAAApC,aAAYc;EAClBxB;EACF,MAAA;EACKe,UAAAA;EACAX;EACL,MAAA;CAAU,CAAA,GACflB,EAAA,MAAAwB,aAAAc,YAAAtC,EAAA,MAAAc,OAAAd,EAAA,MAAAkB,UAAAlB,EAAA,MAAA4D,MAAAA,KAAA5D,EAAA;CAAA,IAAA6D;CAAA,AAAA7D,EAAA,QAAA2B,WAAA3B,EAAA,QAAAI,YAAAJ,EAAA,QAAAkB,YACD2C,MAAAzD,YACC,oBAAC,QAAD;EACO,MAAA;EACA,MAAA;EAEH,MAAAuB,UACE,oBAAC,KAAD;GAAY,OAAA,EAAAmC,WAAY,EAAC;GACvB,UAAA,oBAAC,SAAD,CAAQ,CAAA;EADN,CAAA,IADNpF;EAQQ,UAAAwC,YAAAS;EACL,MAAA;CAAS,CAAA,GAEjB3B,EAAA,MAAA2B,SAAA3B,EAAA,MAAAI,UAAAJ,EAAA,MAAAkB,UAAAlB,EAAA,MAAA6D,OAAAA,MAAA7D,EAAA;CAAA,IAAA+D;CAAA,AAAA/D,EAAA,QAAA6D,OAAA7D,EAAA,QAAAqD,MAAArD,EAAA,QAAAyD,MAAAzD,EAAA,QAAA0D,MAAA1D,EAAA,QAAA2D,MAAA3D,EAAA,QAAA4D,MA9DHG,MAAA,qBAAC,OAAD;EAAY,KAAA;EAAZ,UAAA;GACGV;GAgBDI;GAQAC;GACAC;GAUAC;GAUCC;EA9CG;KA+DE7D,EAAA,MAAA6D,KAAA7D,EAAA,MAAAqD,IAAArD,EAAA,MAAAyD,IAAAzD,EAAA,MAAA0D,IAAA1D,EAAA,MAAA2D,IAAA3D,EAAA,MAAA4D,IAAA5D,EAAA,MAAA+D,OAAAA,MAAA/D,EAAA;CAAA,IAAAgE;CACH,OADGhE,EAAA,QAAAe,gBAAAf,EAAA,QAAA+D,OAhEVC,MAAA,oBAAA,QAAA;EAAgBjD,UAAAA;EACdgD,UAAAA;CAgEK,CAAA,GAAA/D,EAAA,MAAAe,cAAAf,EAAA,MAAA+D,KAAA/D,EAAA,MAAAgE,OAAAA,MAAAhE,EAAA,KAjEPgE;AAiEO;AAjJJ,SAAAR,QAAAN,OAAAe,GAAA;CAAA,OAuFW,oBAAA,MAAA,EAAA,UAIGf,MACE,GAHE,GAAGA,MAAK,GAAIe,GAGd;AAAA;AChHvB,SAAOuB,gBAAAC,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAAC,aAAAR,YAAAC,gBAAAE;CAAA,AAAAG,EAAA,OAAAD,MAK4BG,cAAAF,EAAA,IAAAN,aAAAM,EAAA,IAAAL,iBAAAK,EAAA,IAAAH,QAAAG,EAAA,OALH,CAAAN,YAAAG,OAAAF,mBAAAO,eAAAH,IAKGC,EAAA,KAAAD,IAAAC,EAAA,KAAAE,aAAAF,EAAA,KAAAN,YAAAM,EAAA,KAAAL,gBAAAK,EAAA,KAAAH;CACjC,IAAAM,SAAeZ,UAAU,GAACa;CAAA,AAAAJ,EAAA,OAAAG,UAAAH,EAAA,OAAAL,kBACPS,KAAAT,iBAAiBQ,OAAME,IAAKV,cAA0B,IAAtDW,KAAAA,GAAuDN,EAAA,KAAAG,QAAAH,EAAA,KAAAL,gBAAAK,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAA1E,IAAAO,aAAmBH;CAEnB,IAAI,CAACT,gBAAc;EAAA,IAAAa;EAAA,AAAAR,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KAEFF,KAAA,EAAAG,WAAY,OAAM,GAACX,EAAA,KAAAQ,MAAAA,KAAAR,EAAA;EAAA,IAAAY;EAQzB,OARyBZ,EAAA,OAAAO,aAQzBK,KAAAZ,EAAA,OARPY,KAAA,oBAAC,MAAD;GAAa,OAAAJ;GACX,UAAA,oBAAC,gBAAD;IACc,YAAA;IACA,YAAA;IACL,OAAA;IACKD;IACZ,eAAA;GAAa,CAAA;EANZ,CAAA,GAQEP,EAAA,KAAAO,YAAAP,EAAA,MAAAY,KARPA;CAQO;CAIX,IAAI,CAACL,YAAU;EAAA,IAAAC;EAAA,AAAAR,EAAA,QAAAS,OAAAC,IAAA,2BAAA,KAMAF,KAAA,oBAAC,kBAAD,CAAiB,CAAA,GAAGR,EAAA,MAAAQ,MAAAA,KAAAR,EAAA;EAGH,IAAAY,KAAAjB,kBAAA,OAAuBkB;EAAA,AAAAb,EAAA,QAAAY,KAAQC,KAAAb,EAAA,OAAtCa,KAAA,oBAAA,QAAA,EAAA,UAAOD,GAA+B,CAAA,GAAAZ,EAAA,MAAAY,IAAAZ,EAAA,MAAAa;EAAA,IAAAC;EAIpD,OAJoDd,EAAA,QAAAN,cAAAM,EAAA,QAAAa,MAP3DC,KAAA,oBAAC,MAAD,EAAA,UACE,oBAAC,gBAAD;GACc,YAAA;GACA,YAAA;GACL,OAAAN;GAEL,OAAA,qBAAA,UAAA,EAAA,UAAA;IAAE;IACaK;IAAsC;IAAMnB;GAAU,EAAA,CAAA;EAClE,CAAA,EARJ,CAAA,GAWEM,EAAA,MAAAN,YAAAM,EAAA,MAAAa,IAAAb,EAAA,MAAAc,MAAAA,KAAAd,EAAA,KAXPc;CAWO;CAEV,IAAAN;CASG,OATHR,EAAA,QAAAE,eAAAF,EAAA,QAAAN,cAAAM,EAAA,QAAAO,cAAAP,EAAA,QAAAL,kBAAAK,EAAA,QAAAH,SAGCW,KAAA,oBAAC,sBAAD;EACcd;EACIC;EACJY;EACLV;EAAK,GACRK;CAAW,CAAA,GACfF,EAAA,MAAAE,aAAAF,EAAA,MAAAN,YAAAM,EAAA,MAAAO,YAAAP,EAAA,MAAAL,gBAAAK,EAAA,MAAAH,OAAAG,EAAA,MAAAQ,MAAAA,KAAAR,EAAA,KANFQ;AAME;AAIN,SAAAO,qBAAAhB,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAA8B,EAAAP,YAAAa,YAAAV,OAAAD,WAAAG,IAM5BiB,uBAA6B1B,wBAAwB,GAACc;CAAA,AAAAJ,EAAA,OAAAN,cAAAM,EAAA,OAAAgB,wBAAAhB,EAAA,OAAAO,cAG9CH,KAAAnB,0BAA0B+B,sBAAsBT,YAAYb,UAAU,GAACM,EAAA,KAAAN,YAAAM,EAAA,KAAAgB,sBAAAhB,EAAA,KAAAO,YAAAP,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAD/E,IAAAiB,yBACQb,IAEPI;CAAA,AAAAR,EAAA,OAAAS,OAAAC,IAAA,2BAAA,KAMyCF,KAAA;EAAAU,UAC9B;EAAIC,WACH;EAAIC,UACL;CACZ,GAACpB,EAAA,KAAAQ,MAAAA,KAAAR,EAAA;CARD,IAAA,EAAAkB,UAAAE,UAAAD,WAAAE,qBAIItC,cAAckC,wBAAwBT,EAIzC,GAACI;CAOcL,AAPdP,EAAA,OAAAN,cAAAM,EAAA,OAAAO,YAAAe,QAE6BV,YACtB;EAAAW,KACA7B;EAAU8B,OACRjB,YAAUe;CACnB,IACDtB,EAAA,KAAAN,YAAAM,EAAA,KAAAO,YAAAe,MAAAtB,EAAA,KAAAY,MAAAA,KAAAZ,EAAA,IAAeO,YAAUe;CAAM,IAAAT;CAAA,AAAAb,EAAA,OAAAY,KAAEC,KAAAb,EAAA,MALXa,KAAQD,GAKE,GAACZ,EAAA,KAAAY,IAAAZ,EAAA,KAAAa;CALlC,IAAAY,iBAAuBZ,IAWbC,KAAAP,YAAUe,MAAMI;CAAA,AAAA1B,EAAA,QAAAN,cAAAM,EAAA,QAAAc,MAJ2BY,KAAA;EAAAC,QAC3C;EAAMC,QACN;GAAAC,IACFnC;GAAUoC,MACRhB;EACR;CACF,GAACd,EAAA,MAAAN,YAAAM,EAAA,MAAAc,IAAAd,EAAA,MAAA0B,MAAAA,KAAA1B,EAAA;CAND,IAAA,EAAA+B,SAAAC,eAAAC,SAAuCzC,cAAckC,EAMpD,GAACQ;CAAA,AAAAlC,EAAA,QAAAoB,YAAApB,EAAA,QAAAyB,kBAAAzB,EAAA,QAAAkB,YAIMgB,KAAAhD,4BAA4B;EAAAgC;EAAAE;EAAAe,UAGpBV;CACZ,CAAC,GAACzB,EAAA,MAAAoB,UAAApB,EAAA,MAAAyB,gBAAAzB,EAAA,MAAAkB,UAAAlB,EAAA,MAAAkC,MAAAA,KAAAlC,EAAA;CACa,IAAAoC,KAAAf,oBAAA,IAETgB,KAAA9B,YAAU+B,MAAMC;CAAA,AAAAvC,EAAA,QAAAkC,MAAAlC,EAAA,QAAAoC,MAAApC,EAAA,QAAAqC,MARxBE,MAAA,oBAAC,sBAAD;EAAqB,GACfL;EAKW,eAAAE;EACR,QAAA;EACD,MAAAC;CAAgB,CAAA,GACtBrC,EAAA,MAAAkC,IAAAlC,EAAA,MAAAoC,IAAApC,EAAA,MAAAqC,IAAArC,EAAA,MAAAuC,OAAAA,MAAAvC,EAAA;CAVJ,IAAAwC,UACED;CAWF,IAAI3C,QAAM;EAAA,IAAA6C;EAAA,AAAAzC,EAAA,QAAAH,QAO4B4C,MAAAzC,EAAA,OAAzByC,MAAA;GAAAC,OAAQ;GAAM,GAAK7C;EAAK,GAACG,EAAA,MAAAH,OAAAG,EAAA,MAAAyC;EAAA,IAAAE;EAGzB,OAHyB3C,EAAA,QAAAiC,QAAAjC,EAAA,QAAAgC,iBAAAhC,EAAA,QAAAwC,WAAAxC,EAAA,QAAAyC,OALlCE,MAAA,oBAAC,QAAD;GACM,IAAA;GACEV;GACGD,SAAAA;GACJ,MAAA;GACE,OAAAS;GAEND,UAAAA;EAPI,CAAA,GAQExC,EAAA,MAAAiC,MAAAjC,EAAA,MAAAgC,eAAAhC,EAAA,MAAAwC,SAAAxC,EAAA,MAAAyC,KAAAzC,EAAA,MAAA2C,OAAAA,MAAA3C,EAAA,KART2C;CAQS;CAEZ,IAAAF;CAAA,AAAAzC,EAAA,QAAAS,OAAAC,IAAA,2BAAA,KACkB+B,MAAA,EAAAC,OAAQ,OAAM,GAAC1C,EAAA,MAAAyC,OAAAA,MAAAzC,EAAA;CAAA,IAAA2C;CAAiB,OAAjB3C,EAAA,QAAAwC,UAAiBG,MAAA3C,EAAA,OAA5C2C,MAAA,oBAAC,KAAD;EAAY,OAAAF;EAAkBD,UAAAA;CAA1B,CAAA,GAAwCxC,EAAA,MAAAwC,SAAAxC,EAAA,MAAA2C,MAA5CA;AAA4C;ACtGrD,MAMMsC,aAA+B,CAAA,GAC/BC,kBAAkB;AAExB,SAAOC,2BAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAGL,EAAArB,aAAAG,cAAAF,qBAAAS,UAAAH,SAAAE,QAAAJ,UAAAH,YAAAoB,QAUIH,OACJI,KAAWlC,MAAM,GACjB,CAAAmC,OAAAC,YAA0BjC,SAAS,EAAE,GACrCkC,WAAiBnC,OAAOiC,KAAK,GAC7BG,iBAAuBC,kBAAkBJ,OAAO,GAAG,GACnDK,qBAA2BtC,OAAOoC,cAAc,GAEhD,CAAAG,WAAAC,gBAAkCvC,SAAS,EAAK,GAChD,CAAAwC,SAAAC,cAA8BzC,SAAsCwB,UAAU,GAE9EkB,SAAetC,aAAa,GAACuC;CAAA,AAAAf,EAAA,OAAAc,UAAAd,EAAA,OAAAjB,gBAAAiB,EAAA,OAAAnB,uBAAAmB,EAAA,OAAApB,aAAAoC,aAAAhB,EAAA,OAAApB,aAAAqC,cAAAjB,EAAA,OAAAlB,cAG3BiC,MAAAG,gBAAA;EACEP,aAAa,EAAI;EACjB,IAAAK,YAAkBpC,aAAWoC,WAC7BC,aAAmBrC,aAAWqC;EAE9B,IAAI,CAACD,WACH,MAAUG,MAAM,yEAAyE;EAG3F7C,WACE;GAAA8B,OACSc,YAAWE,KAAM,CAAC,CAAAC,SAAlBH,cAA2CrC,oBAA0B,KAA1B;GAA4BmC;GAAAC;GAAAK,QAGtE,EAAAC,MACAzC,WACR;EACF,GACAgC,MACF,CAAC,CAAAU,MACOhC,WAAA;GACJ,IAAIc,SAAQmB,YAAaP,aAAW;IAElCL,AADAF,aAAa,EAAK,GAClBE,WAAW,CAAA,CAAE;IACb,IAAAa,gBAAsBlC,OAAM8B,QAClBtC,QAAUD,iBAAeA,aAAaC,GAAU,CAAE,CAAC,CAAA2C,IACtDC,OAA4D;IACnE,AAAIF,cAAaL,SACfR,WAAWa,aAAa,IAExBb,WAAW,CAAC,EAAA3B,OAAQO,GAAgB,CAAC,CAAC;GACvC;EACF,CACF,CAAC,CAAAoC,OACKC,MAAA;GAEL,AADAC,QAAOC,MAAOF,CAAC,GACXxB,SAAQmB,YAAaP,gBACvBP,aAAa,EAAK,GAClBE,WAAW,CAAC,EAAA3B,OAAQO,GAAgB,CAAC,CAAC;EACvC,CACF;CAAC,GACLO,EAAA,KAAAc,QAAAd,EAAA,KAAAjB,cAAAiB,EAAA,KAAAnB,qBAAAmB,EAAA,KAAApB,aAAAoC,WAAAhB,EAAA,KAAApB,aAAAqC,YAAAjB,EAAA,KAAAlB,YAAAkB,EAAA,KAAAe,MAAAA,KAAAf,EAAA;CA1CH,IAAAiC,gBAAsBlB,IA4CrBmB,IAAAC;CAEDnE,AAFCgC,EAAA,OAAAO,kBAAAP,EAAA,OAAAiC,iBAESC,WAAA;EAIRzB,AAHIA,mBAAkBgB,YAAalB,kBACjC0B,cAAc1B,cAAc,GAE9BE,mBAAkBgB,UAAWlB;CAAH,GACzB4B,KAAA,CAAC5B,gBAAgB0B,aAAa,GAACjC,EAAA,KAAAO,gBAAAP,EAAA,KAAAiC,eAAAjC,EAAA,KAAAkC,IAAAlC,EAAA,MAAAmC,OAAAD,KAAAlC,EAAA,IAAAmC,KAAAnC,EAAA,MALlChC,UAAUkE,IAKPC,EAA+B;CAAC,IAAAC;CAAA,AAAApC,EAAA,QAAAiC,gBAGsBG,KAAApC,EAAA,OAAhDoC,KAAA,EAAAC,eAAgBJ,cAAc3B,SAAQmB,OAAQ,EAAC,GAACzB,EAAA,MAAAiC,eAAAjC,EAAA,MAAAoC;CADzD,IAAAE,mBACSF,IAERG;CAAA,AAAAvC,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,KAGCF,MAAAG,aAAA;EACE,IAAAC,WAAiBD,YAAA;EAEjBrC,AADAC,SAAQmB,UAAWkB,UACnBtC,SAASsC,QAAQ;CAAC,GACnB3C,EAAA,MAAAuC,MAAAA,KAAAvC,EAAA;CALH,IAAA4C,oBAA0BL,IAOzBM;CAAA,AAAA7C,EAAA,QAAAf,YAAAe,EAAA,QAAAY,WAGCiC,MAAA3D,UAAA;EACE,IAAIA,UAAUO,IAAgB;GAC5BoB,WAAWjB,UAAU;GAAC;EAAA;EAGxB,IAAAkD,SAAgBlC,QAAmBU,OACzByB,QAAiC,CAAC,CAAAC,MACpCC,QAAOC,IAAC1D,OAAON,MAAMiE,eAAgBjE,KAAK;EAClD,AAAI4D,UAAA7D,YACFA,SAAS6D,OAAMtD,MAAO;CACvB,GACFQ,EAAA,MAAAf,UAAAe,EAAA,MAAAY,SAAAZ,EAAA,MAAA6C,MAAAA,KAAA7C,EAAA;CAZH,IAAAoD,eAAqBP,IAcpBQ;CAkBG,OAlBHrD,EAAA,QAAAoD,gBAAApD,EAAA,QAAAG,MAAAH,EAAA,QAAAX,UAAAW,EAAA,QAAAb,WAAAa,EAAA,QAAAsC,oBAAAtC,EAAA,QAAAY,WAAAZ,EAAA,QAAAV,YAAAU,EAAA,QAAAE,OAAAF,EAAA,QAAAU,aAGC2C,KAAA,oBAAC,cAAD;EACMlD;EACCD;EACO,eAAA;EACA,aAAA;EACAoC,YAAAA;EACHnD;EACCiE,UAAAA;EACD1C,SAAAA;EACDrB;EACEC;EACIO,cAAAA;EACC+C,eAAAA;EACNhC;EACK0C,cAAAA;CAAkB,CAAA,GAChCtD,EAAA,MAAAoD,cAAApD,EAAA,MAAAG,IAAAH,EAAA,MAAAX,QAAAW,EAAA,MAAAb,SAAAa,EAAA,MAAAsC,kBAAAtC,EAAA,MAAAY,SAAAZ,EAAA,MAAAV,UAAAU,EAAA,MAAAE,KAAAF,EAAA,MAAAU,WAAAV,EAAA,MAAAqD,MAAAA,KAAArD,EAAA,KAfFqD;AAeE;AA5HC,SAAAN,SAAAQ,KAAA;CAAA,OAmG6B,YAAYL;AAAC;AAnG1C,SAAAtB,QAAAsB,GAAA;CAAA,OAoDmB7E,MAAc;EAAAmB,QAAS0D;EAAChE,OAASgE,EAAChE,MAAMiE;CAAW,CAAC;AAAC;AA4E/E,SAAAG,mBAAAvD,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA;CACE,IAAI,YAAYF,OAAK;EACnB,IAAAb,QAAca,MAAKP,OAAON,OAAM6B;EAAA,AAAAf,EAAA,OAAAwC,OAAAC,IAAA,2BAAA,KAEU1B,KAAA,EAAAyC,OAAQ,OAAM,GAACxD,EAAA,KAAAe,MAAAA,KAAAf,EAAA;EAAA,IAAAkC;EAAA,AAAAlC,EAAA,OAAAd,MAAAiE,cAAAnD,EAAA,OAAAd,MAAAqC,QAEnDW,KAAA,oBAAC,KAAD;GAAW,MAAA;GACT,UAAA,oBAAC,iBAAD;IAA6B,YAAAhD,MAAKiE;IAA6B,gBAAAjE,MAAKqC;GAAK,CAAA;EADvE,CAAA,GAEEvB,EAAA,KAAAd,MAAAiE,YAAAnD,EAAA,KAAAd,MAAAqC,MAAAvB,EAAA,KAAAkC,MAAAA,KAAAlC,EAAA;EAGD,IAAAmC,KAAAsB,KAAIC,MAAO3D,MAAKP,OAAOmE,QAAS,GAAG,GAACvB;EAAA,AAAApC,EAAA,OAAAmC,KAEnCC,KAAApC,EAAA,MAJNoC,KAAA,oBAAC,KAAD;GAAc,SAAA;GACZ,UAAA,qBAAC,MAAD;IAAY,MAAA;IAAG,OAAA;IAAa,OAAA;IAA5B,UAAA,CACGD,IAAqC,GADnC;;EADH,CAAA,GAIEnC,EAAA,KAAAmC,IAAAnC,EAAA,KAAAoC;EAAA,IAAAG;EAED,OAFCvC,EAAA,OAAAkC,MAAAlC,EAAA,OAAAoC,MATVG,KAAA,oBAAC,QAAD;GAAa,MAAA;GAAiB,SAAA;GAAU,OAAAxB;GACtC,UAAA,qBAAC,MAAD;IAAW,KAAA;IAAS,OAAA;IAApB,UAAA,CACEmB,IAGAE,EAJG;;EADA,CAAA,GAWEpC,EAAA,KAAAkC,IAAAlC,EAAA,KAAAoC,IAAApC,EAAA,KAAAuC,MAAAA,KAAAvC,EAAA,IAXTuC;CAWS;CAEZ,IAAAxB;CAAA,AAAAf,EAAA,OAAAwC,OAAAC,IAAA,2BAAA,KAGyC1B,KAAA,EAAAyC,OAAQ,OAAM,GAACxD,EAAA,KAAAe,MAAAA,KAAAf,EAAA;CAAA,IAAAkC;CAI9C,OAJ8ClC,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,KAAvDP,KAAA,oBAAC,QAAD;EAAa,MAAA;EAAiB,SAAA;EAAU,OAAAnB;EAAiB,UAAA;EACvD,UAAA,oBAAC,MAAD;GAAW,KAAA;GAAS,OAAA;GAAS,UAAA;EAAxB,CAAA;CADA,CAAA,GAIEf,EAAA,MAAAkC,MAAAA,KAAAlC,EAAA,KAJTkC;AAIS;AAIb,SAAA1B,kBAAAtB,OAAA0E,IAAA;CAAA,IAAA5D,IAAAC,EAAA,CAAA,GACE,CAAA4D,gBAAAC,qBAA4C1F,SAASc,KAAK,GAAC6B,IAAAmB;CAO5C,OAP4ClC,EAAA,OAAA4D,MAAA5D,EAAA,OAAAd,SAEjD6B,WAAA;EACR,IAAAgD,YAAkBC,iBAAW;GAC3BF,kBAAkB5E,KAAK;EAAC,GACvB0E,EAAE;EAAC,aACOK,aAAaF,SAAS;CAAC,GACnC7B,KAAA,CAAChD,OAAO0E,EAAE,GAAC5D,EAAA,KAAA4D,IAAA5D,EAAA,KAAAd,OAAAc,EAAA,KAAAe,IAAAf,EAAA,KAAAkC,OAAAnB,KAAAf,EAAA,IAAAkC,KAAAlC,EAAA,KALdhC,UAAU+C,IAKPmB,EAAW,GAEP2B;AAAc;AC3MvB,SAAOW,WAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACL,EAAAC,cAAoBH,OACpBI,WAAiBC,SAAiCC;CAAA,AAAAL,EAAA,OAAAE,YAEfG,KAAAL,EAAA,MAA1BK,KAAA;EAAAH;EAAAI,YAAwB;CAAC,GAACN,EAAA,KAAAE,WAAAF,EAAA,KAAAK;CADnC,IAAAE,cACSF,IAIT,EAAAG,mBAAAC,gBAAyCf,UAAU,GAACgB;CAAA,AAAAV,EAAA,OAAAS,eAAAT,EAAA,OAAAQ,qBAElDE,MAAAC,QAAA;EACEF,YAAY,EAAAG,MACJJ,kBAAkB,QAAQ;GAAAK,IAAKF,IAAGG,MAAMC;GAAWC,MAAQL,IAAGG,MAAME;EAAK,CAAC,EAClF,CAAC;CAAC,GACHhB,EAAA,KAAAS,aAAAT,EAAA,KAAAQ,mBAAAR,EAAA,KAAAU,MAAAA,KAAAV,EAAA;CALH,IAAAiB,WAAiBP,IAOhBQ;CAMG,OANHlB,EAAA,OAAAO,eAAAP,EAAA,OAAAiB,YAECC,KAAA,oBAAC,4BAAD;EACuBf,qBAAAA;EACRI;EACHU;CAAQ,CAAA,GAClBjB,EAAA,KAAAO,aAAAP,EAAA,KAAAiB,UAAAjB,EAAA,KAAAkB,MAAAA,KAAAlB,EAAA,IAJFkB;AAIE;AAtBC,SAAAd,UAAA;CAAA,OAE8B;AAAU;ACM/C,SAAOmC,UAAAC,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAmB,EAAAN,eAAAC,kBAAAG,IAA8CG;CAAA,AAAAF,EAAA,OAAAJ,iBAAAI,EAAA,OAAAL,iBAEpEO,WAAMN,cAAcD,aAAa,GAACK,EAAA,KAAAJ,eAAAI,EAAA,KAAAL,eAAAK,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CADpC,IAAAG,eAAqBD,IAQIE,KAAAT,eAAaU,aAAb,YAAsCC;CAAA,AAAAN,EAAA,OAAAI,KACnDE,KAAAN,EAAA,MAFNM,KAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,qBAAC,SAAD,EAAA,UAAA,CAAS,WAAQF,EAAT,EAAA,CAAA;CADN,CAAA,GAEEJ,EAAA,KAAAI,IAAAJ,EAAA,KAAAM;CAAA,IAAAC;CAAA,AAAAP,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAIAF,KAAA,oBAAC,QAAD;EACQ,OAAA;EACA7B,MAAAA;EACG,SAAA;EACJ,MAAA;CAAO,CAAA,GACZsB,EAAA,KAAAO,MAAAA,KAAAP,EAAA;CAEA,IAAAU,KAAA,UAAUf,cAAaU,aAAYM;CAAA,AAAAX,EAAA,OAAAG,eAS9BQ,KAAAX,EAAA,MAPPW,KAAA,oBAAC,MAAD,EAAA,UACE,oBAAC,UAAD;EACO,MAAA;EACChC,MAAAA;EACD,MAAA;EACIwB,SAAAA;CAAY,CAAA,EALpB,CAAA,GAOEH,EAAA,KAAAG,cAAAH,EAAA,KAAAW;CAAA,IAAAC;CAAA,AAAAZ,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAEAG,KAAA,EAAAC,WAAY,QAAO,GAACb,EAAA,KAAAY,MAAAA,KAAAZ,EAAA;CAAA,IAAAc;CAAA,AAAAd,EAAA,OAAAU,MAAAV,EAAA,QAAAW,MArBjCG,KAAA,oBAAC,KAAD,EAAA,UACE,oBAAC,YAAD;EAEI,QAAAP;EAOE,IAAAG;EAEF,MAAAC;EASO,SAAAC;CAAoB,CAAA,EArB7B,CAAA,GAuBEZ,EAAA,KAAAU,IAAAV,EAAA,MAAAW,IAAAX,EAAA,MAAAc,MAAAA,KAAAd,EAAA;CAAA,IAAAe;CAAA,AAAAf,EAAA,QAAAM,MAAAN,EAAA,QAAAc,MA3BRC,KAAA,qBAAC,MAAD;EAAY,OAAA;EAAe,MAAA;EAAQ,KAAA;EAAnC,UAAA,CACET,IAGAQ,EAJG;KA4BEd,EAAA,MAAAM,IAAAN,EAAA,MAAAc,IAAAd,EAAA,MAAAe,MAAAA,KAAAf,EAAA;CAAA,IAAAgB;CAAA,AAAAhB,EAAA,QAAAQ,OAAAC,IAAA,2BAAA,KAG0BO,MAAA,EAAAC,UAAW,IAAG,GAACjB,EAAA,MAAAgB,OAAAA,MAAAhB,EAAA;CAAA,IAAAkB;CAAA,AAAAlB,EAAA,QAAAL,gBAKtCuB,MAAAlB,EAAA,OALRkB,MAAA,qBAAC,OAAD;EAAY,KAAA;EAAS,MAAA;EAAU,OAAAF;EAA/B,UAAA,CACE,oBAAC,KAAD,EAAA,UACE,oBAAC,aAAD;GAAoBrB,OAAAA;GAAe,UAAA;EAAQ,CAAA,EADzC,CAAA,GAGJ,oBAAC,aAAD,EAA4BA,cAAa,CAAA,CAJrC;KAKEK,EAAA,MAAAL,eAAAK,EAAA,MAAAkB;CAAA,IAAAC;CAAA,AAAAnB,EAAA,QAAAQ,OAAAC,IAAA,2BAAA,KAGNU,MAAA,oBAAC,OAAD;EAAO,OAAA;EAAM,UAAA;CAAP,CAAA,GAA0BnB,EAAA,MAAAmB,OAAAA,MAAAnB,EAAA;CAAA,IAAAoB;CAAA,AAAApB,EAAA,QAAAL,cAAAU,YAE1Be,MAAApB,EAAA,OAHRoB,MAAA,qBAAC,OAAD;EAAY,KAAA;EAAS,MAAA;EAArB,UAAA,CACED,KACA,oBAAC,YAAD,EAAuB,WAAAxB,cAAaU,UAAwC,GAAvBV,cAAaU,SAAU,CAFxE;KAGEL,EAAA,MAAAL,cAAAU,WAAAL,EAAA,MAAAoB;CAAA,IAAAC;CAAA,AAAArB,EAAA,QAAAkB,OAAAlB,EAAA,QAAAoB,OAXVC,MAAA,qBAAC,MAAD;EAAW,KAAA;EAAX,UAAA,CACEH,KAOAE,GARG;KAYEpB,EAAA,MAAAkB,KAAAlB,EAAA,MAAAoB,KAAApB,EAAA,MAAAqB,OAAAA,MAAArB,EAAA;CAAA,IAAAsB;CACD,OADCtB,EAAA,QAAAqB,OAAArB,EAAA,QAAAe,MA3CTO,MAAA,qBAAC,OAAD;EAAY,KAAA;EAAS,MAAA;EAArB,UAAA,CACEP,IA8BAM,GA/BI;KA4CErB,EAAA,MAAAqB,KAAArB,EAAA,MAAAe,IAAAf,EAAA,MAAAsB,OAAAA,MAAAtB,EAAA,KA5CRsB;AA4CQ;AAIZ,SAAAC,YAAAxB,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAqB,EAAAN,kBAAAI,IAA4CG;CAAA,AAAAF,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAIzDP,KAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,oBAAC,OAAD;GAAa,MAAA;GAAG,OAAA;GAAM,UAAA;EAAhB,CAAA;CADJ,CAAA,GAIEF,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CAAA,IAAAI;CAAA,AAAAJ,EAAA,OAAAL,cAAA6B,SAIDpB,KAAAJ,EAAA,MATPI,KAAA,qBAAC,MAAD;EAAW,KAAA;EAAS,OAAA;EAApB,UAAA,CACEF,IAKA,oBAAC,OAAD;GAAY,KAAA;GACV,UAAA,oBAAC,MAAD,EAAA,UAAOP,cAAa6B,OAAf,CAAA;EADD,CAAA,CANH;KASExB,EAAA,KAAAL,cAAA6B,QAAAxB,EAAA,KAAAI;CAAA,IAAAE;CAAA,AAAAN,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAELH,KAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,oBAAC,OAAD;GAAa,MAAA;GAAG,OAAA;GAAM,UAAA;EAAhB,CAAA;CADJ,CAAA,GAIEN,EAAA,KAAAM,MAAAA,KAAAN,EAAA;CAGD,IAAAO,KAAAZ,cAAa8B,qBAAsB9B,cAAa+B,wBAAuBhB;CAAA,AAAAV,EAAA,OAAAL,cAAA8B,sBAAAzB,EAAA,OAAAO,MAR9EG,KAAA,qBAAC,MAAD;EAAW,KAAA;EAAS,OAAA;EAApB,UAAA,CACEJ,IAKA,oBAAC,OAAD;GAAY,KAAA;GACV,UAAA,qBAAC,MAAD,EAAA,UAAA;IACGC;IAAwE;IAAG;IAC3EZ,cAAa8B;GAFX,EAAA,CAAA;EADD,CAAA,CANH;KAYEzB,EAAA,KAAAL,cAAA8B,oBAAAzB,EAAA,KAAAO,IAAAP,EAAA,KAAAU,MAAAA,KAAAV,EAAA;CAAA,IAAAW;CAAA,AAAAX,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAELE,KAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,oBAAC,OAAD;GAAa,MAAA;GAAG,OAAA;GAAM,UAAA;EAAhB,CAAA;CADJ,CAAA,GAIEX,EAAA,KAAAW,MAAAA,KAAAX,EAAA;CAAA,IAAAY;CAAA,AAAAZ,EAAA,OAAAL,cAAAgC,sBAIDf,KAAAZ,EAAA,MATPY,KAAA,qBAAC,MAAD;EAAW,KAAA;EAAS,OAAA;EAApB,UAAA,CACED,IAKA,oBAAC,OAAD;GAAY,KAAA;GACV,UAAA,oBAAC,MAAD,EAAA,UAAOhB,cAAagC,oBAAf,CAAA;EADD,CAAA,CANH;KASE3B,EAAA,KAAAL,cAAAgC,qBAAA3B,EAAA,KAAAY;CAAA,IAAAE;CACD,OADCd,EAAA,QAAAI,MAAAJ,EAAA,QAAAU,MAAAV,EAAA,QAAAY,MAjCTE,KAAA,qBAAC,OAAD;EAAY,KAAA;EAAS,MAAA;EAArB,UAAA;GACEV;GAUAM;GAaAE;EAxBI;KAkCEZ,EAAA,MAAAI,IAAAJ,EAAA,MAAAU,IAAAV,EAAA,MAAAY,IAAAZ,EAAA,MAAAc,MAAAA,KAAAd,EAAA,KAlCRc;AAkCQ;AC7FZ,SAAO6B,UAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACL,EAAAR,SAAAC,eAAAC,SAAAC,oBAA2DG,OAEnBG,KAAAT,UAAA,KAAA,GAAiBU;CAAA,AAAAH,EAAA,OAAAE,KAACC,KAAAH,EAAA,MAA5BG,KAAA,EAAAC,SAAUF,GAAiB,GAACF,EAAA,KAAAE,IAAAF,EAAA,KAAAG;CAAA,IAAAE;CAAA,AAAAL,EAAA,OAAAM,OAAAC,IAAA,2BAAA,KAIhDF,KAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,oBAAC,OAAD;GAAO,OAAA;GAAM,UAAA;EAAP,CAAA;CADJ,CAAA,GAEEL,EAAA,KAAAK,MAAAA,KAAAL,EAAA;CAAA,IAAAQ;CAAA,AAAAR,EAAA,OAAAM,OAAAC,IAAA,2BAAA,KACNC,KAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,oBAAC,OAAD;GAAO,OAAA;GAAM,UAAA;EAAP,CAAA;CADJ,CAAA,GAEER,EAAA,KAAAQ,MAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,AAAAT,EAAA,OAAAM,OAAAC,IAAA,2BAAA,KACNE,KAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,oBAAC,OAAD;GAAO,OAAA;GAAM,UAAA;EAAP,CAAA;CADJ,CAAA,GAEET,EAAA,KAAAS,MAAAA,KAAAT,EAAA;CAAA,IAAAU;CAAA,AAAAV,EAAA,OAAAM,OAAAC,IAAA,2BAAA,KAVVG,KAAA,oBAAC,MAAD;EAAM,cAAA;EAAmB,MAAA;EAAkB,eAAA;EAAY,SAAA;EACrD,UAAA,qBAAC,MAAD,EAAA,UAAA;GACEL;GAGAG;GAGAC;GAGA,oBAAC,KAAD;IAAW,MAAA;IACT,UAAA,oBAAC,OAAD;KAAO,OAAA;KAAM,UAAA;IAAP,CAAA;GADJ,CAAA;EAVD,EAAA,CAAA;CADF,CAAA,GAeET,EAAA,KAAAU,MAAAA,KAAAV,EAAA;CAAA,IAAAW;CAAA,AAAAX,EAAA,OAAAL,WAAAK,EAAA,OAAAJ,mBAAAI,EAAA,OAAAN,iBAhBTiB,KAAA,qBAAC,OAAD;EAAY,KAAA;EAAZ,UAAA,CACED,IAgBCf,QAAOiB,SACN,oBAAC,OAAD;GAAY,KAAA;GAAU,OAAA;IAAAC,WAAY;IAAGC,UAAY;GAAM;GACpDnB,UAAAA,QAAOoB,KAAKlB,UACX,oBAAC,UAAD;IACiBH;IACRG;IACUD;GACG,GAAfC,MAAKmB,SAAU,CAEvB;EARG,CAAA,IAWN,oBAAC,MAAD;GAAM,OAAA;GAAM,UAAA;EAAP,CAAA,CA7BH;KA+BEhB,EAAA,KAAAL,SAAAK,EAAA,KAAAJ,iBAAAI,EAAA,KAAAN,eAAAM,EAAA,KAAAW,MAAAA,KAAAX,EAAA;CAAA,IAAAiB;CACH,OADGjB,EAAA,QAAAG,MAAAH,EAAA,QAAAW,MAhCVM,KAAA,oBAAC,MAAD;EAAW,MAAA;EAAiB,OAAAd;EAC1BQ,UAAAA;CADG,CAAA,GAiCEX,EAAA,MAAAG,IAAAH,EAAA,MAAAW,IAAAX,EAAA,MAAAiB,MAAAA,KAAAjB,EAAA,KAjCPiB;AAiCO;AAIX,SAAAC,SAAAnB,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAKE,EAAAP,eAAAG,OAAAD,oBAAgDG,OAAKG;CAAA,AAAAF,EAAA,OAAAH,SAAAG,EAAA,OAAAJ,mBACxBM,WAAMN,gBAAgBC,KAAK,GAACG,EAAA,KAAAH,OAAAG,EAAA,KAAAJ,iBAAAI,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CAAzD,IAAAmB,WAAiBjB,IAGPC,KAAAT,eAAasB,cAAgBnB,MAAKmB,YAAlC,YAAA,WACAX,KAAAX,eAAasB,cAAgBnB,MAAKmB,YAAlC,YAAA,SAAkER;CAAA,AAAAR,EAAA,OAAAH,MAAAmB,YAQhER,KAAAR,EAAA,MAFNQ,KAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,oBAAA,UAAA,EAAA,UAASX,MAAKmB,UAAoB,CAAA;CADhC,CAAA,GAEEhB,EAAA,KAAAH,MAAAmB,WAAAhB,EAAA,KAAAQ;CAAA,IAAAC;CAAA,AAAAT,EAAA,OAAAH,MAAAuB,UAC6BX,KAAAT,EAAA,MAAnCS,KAAA,oBAAC,KAAD;EAAW,MAAA;EAAIZ,UAAAA,MAAKuB;CAAhB,CAAA,GAA+BpB,EAAA,KAAAH,MAAAuB,SAAApB,EAAA,KAAAS;CAAA,IAAAC;CAAA,AAAAV,EAAA,OAAAH,MAAAwB,SACDX,KAAAV,EAAA,MAAlCU,KAAA,oBAAC,KAAD;EAAW,MAAA;EAAIb,UAAAA,MAAKwB;CAAhB,CAAA,GAA8BrB,EAAA,KAAAH,MAAAwB,QAAArB,EAAA,KAAAU;CAE/B,IAAAC,KAAAd,MAAKyB,qBACFC,KAAIC,OACA3B,MAAKyB,qBAAsBzB,MAAK4B,0BAChC5B,MAAKyB,qBACL,GAEF,IANL,KAMML;CAAA,AAAAjB,EAAA,OAAAW,KAEHM,KAAAjB,EAAA,OATNiB,KAAA,qBAAC,KAAD;EAAW,MAAA;EAAX,UAAA,CACGN,IAMO,GAPN;KASEX,EAAA,KAAAW,IAAAX,EAAA,MAAAiB;CAAA,IAAAS;CAAA,AAAA1B,EAAA,QAAAQ,MAAAR,EAAA,QAAAS,MAAAT,EAAA,QAAAU,MAAAV,EAAA,QAAAiB,MAfRS,KAAA,qBAAC,MAAD,EAAA,UAAA;EACElB;EAGAC;EACAC;EACAO;CANG,EAAA,CAAA,GAgBEjB,EAAA,MAAAQ,IAAAR,EAAA,MAAAS,IAAAT,EAAA,MAAAU,IAAAV,EAAA,MAAAiB,IAAAjB,EAAA,MAAA0B,MAAAA,KAAA1B,EAAA;CAAA,IAAA2B;CACA,OADA3B,EAAA,QAAAH,MAAAmB,aAAAhB,EAAA,QAAAmB,YAAAnB,EAAA,QAAAG,MAAAH,EAAA,QAAAK,MAAAL,EAAA,QAAA0B,MAvBTC,KAAA,oBAAC,QAAD;EACQ,MAAAxB;EACA,MAAAE;EACGc,SAAAA;EAEA,SAAA;EAETO,UAAAA;CAPK,GAIA7B,MAAKmB,SAJL,GAwBEhB,EAAA,MAAAH,MAAAmB,WAAAhB,EAAA,MAAAmB,UAAAnB,EAAA,MAAAG,IAAAH,EAAA,MAAAK,IAAAL,EAAA,MAAA0B,IAAA1B,EAAA,MAAA2B,MAAAA,KAAA3B,EAAA,KAxBT2B;AAwBS;ACxEb,SAAOwB,sBAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACLC,eAAqBP,oBAAoB,GAACQ;CAAA,AAAAH,EAAA,OAAAE,eAQ5BC,KAAAH,EAAA,MAJPG,KAAAD,iBAAiB,UAChB,oBAAC,KAAD;EAAc,SAAA;EACZ,UAAA,oBAAC,cAAD,CAAa,CAAA;CADX,CAAA,IADL,MAIOF,EAAA,KAAAE,cAAAF,EAAA,KAAAG;CAAA,IAAAC;CAAA,AAAAJ,EAAA,OAAAE,eAMAE,KAAAJ,EAAA,MAJPI,KAAAF,iBAAiB,aAChB,oBAAC,KAAD;EAAc,SAAA;EACZ,UAAA,oBAAC,uBAAD,EAAiC,WAAA,sBAAqB,CAAA;CADpD,CAAA,IADL,MAIOF,EAAA,KAAAE,cAAAF,EAAA,KAAAI;CAAA,IAAAC;CAAA,AAAAL,EAAA,OAAAE,eAMAG,KAAAL,EAAA,MAJPK,KAAAH,iBAAiB,YAChB,oBAAC,KAAD;EAAc,SAAA;EACZ,UAAA,oBAAC,SAAD,EAAe,MAAA,EAAC,CAAA;CADd,CAAA,IADL,MAIOF,EAAA,KAAAE,cAAAF,EAAA,KAAAK;CAAA,IAAAC;CAAA,AAAAN,EAAA,OAAAE,eAMAI,KAAAN,EAAA,MAJPM,KAAAJ,iBAAiB,YAChB,oBAAC,MAAD;EAAY,MAAA;EAAU,OAAA,EAAAK,UAAW,KAAI;EAAY,SAAA;EAC/C,UAAA,oBAAC,SAAD,CAAQ,CAAA;CADL,CAAA,IADN,MAIOP,EAAA,KAAAE,cAAAF,EAAA,KAAAM;CAAA,IAAAE;CAEL,OAFKR,EAAA,OAAAG,MAAAH,EAAA,OAAAI,MAAAJ,EAAA,QAAAK,MAAAL,EAAA,QAAAM,MAxBZE,KAAA,oBAAC,MAAD;EAAY,MAAA;EACV,UAAA,qBAAC,MAAD;GAAc,SAAA;GAAe,MAAA;GAA7B,UAAA;IACGL;IAMAC;IAMAC;IAMAC;GAnBE;;CADF,CAAA,GA0BEN,EAAA,KAAAG,IAAAH,EAAA,KAAAI,IAAAJ,EAAA,MAAAK,IAAAL,EAAA,MAAAM,IAAAN,EAAA,MAAAQ,MAAAA,KAAAR,EAAA,KA1BPQ;AA0BO;AAIX,MAAMC,aAA2B,CAAA;AAEjC,SAAAC,UAAA;CAAA,IAAAV,IAAAC,EAAA,EAAA,GACEU,SAAenB,aAAa,GAC5B,CAAAoB,SAAAC,cAA8B1B,SAAuBsB,UAAU,GAC/D,CAAAK,SAAAC,cAA8B5B,SAAS,EAAK,GAC5C,CAAA6B,OAAAC,YAA0B9B,SAAS,EAAK,GACxC,CAAA+B,iBAAAC,sBAA8ChC,SAAS,EAAK,GAC5D,CAAAiC,eAAAC,oBAA0ClC,SAAiCmC,KAAAA,CAAS,GAACnB;CAAA,AAAAH,EAAA,OAAAuB,OAAAC,IAAA,2BAAA,KAE9CrB,WAAMgB,mBAAmB,EAAK,GAACnB,EAAA,KAAAG,MAAAA,KAAAH,EAAA;CAAtE,IAAAyB,qBAA2BtB,IAAgDC;CAAA,AAAAJ,EAAA,OAAAY,WAAAZ,EAAA,OAAAoB,eAAAM,aAEjEtB,WAAA;EAERiB,iBAAiBT,QAAOe,MAAMC,MAAOA,EAACF,cAAeN,eAAaM,SAAW,CAAC;CAAC,GAChF1B,EAAA,KAAAY,SAAAZ,EAAA,KAAAoB,eAAAM,WAAA1B,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAAA,IAAAK;CAHDnB,AAGCc,EAAA,OAAAY,WAAAZ,EAAA,OAAAoB,iBAAEf,KAAA,CAACO,SAASQ,aAAa,GAACpB,EAAA,KAAAY,SAAAZ,EAAA,KAAAoB,eAAApB,EAAA,KAAAK,MAAAA,KAAAL,EAAA,IAH3Bd,UAAUkB,IAGPC,EAAwB;CAAC,IAAAC;CAAA,AAAAN,EAAA,OAAAW,SAiB3BL,KAAAN,EAAA,MAfiCM,WAAA;EAGhCjB,AAFA0B,WAAW,EAAI,GACfE,SAAS,EAAK,GACd5B,WAAWsB,MAAM,CAAC,CAAAkB,MACVC,aAAA;GAEJjB,AADAE,WAAW,EAAK,GAChBF,WAAWiB,QAAQ;EAAC,CACrB,CAAC,CAAAC,OACKC,MAAA;GAELf,AADAgB,QAAOjB,MAAOgB,CAAC,GACff,SAAS,EAAI;EAAC,CACf,CAAC,CAAAiB,cACO;GACPnB,WAAW,EAAK;EAAC,CAClB;CAAC,GACLf,EAAA,KAAAW,QAAAX,EAAA,KAAAM;CAfD,IAAA6B,gBAAsB7B,IAeVE;CAAA,AAAAR,EAAA,OAAAW,UAAAX,EAAA,QAAAmC,iBAGV3B,MAAA4B,UAAA;EAEKC,QAAQ,mCAAmCD,MAAKV,UAAU,eAAgBU,MAAKE,QAAQ,EAAG,MAI7FvB,WAAW,EAAI,GACfE,SAAS,EAAK,GACd7B,YAAYgD,MAAKV,WAAYf,MAAM,CAAC,CAAAkB,WAC5B;GACJU,iBAAiBJ,cAAc,CAAC;EAAC,CAClC,CAAC,CAAAJ,OACKS,QAAA;GAELvB,AADAgB,QAAOjB,MAAOgB,GAAC,GACff,SAAS,EAAI;EAAC,CACf,CAAC,CAAAiB,cACO;GACPnB,WAAW,EAAK;EAAC,CAClB;CAAC,GACLf,EAAA,KAAAW,QAAAX,EAAA,MAAAmC,eAAAnC,EAAA,MAAAQ,MAAAA,KAAAR,EAAA;CApBH,IAAAyC,mBAAyBjC,IAsBxBkC;CAAA,AAAA1C,EAAA,QAAAmC,gBAMEO,KAAA1C,EAAA,OAHD0C,MAAAC,YAAA;EAEER,AADAd,iBAAiBe,OAAK,GACtBD,cAAc;CAAC,GAChBnC,EAAA,MAAAmC,eAAAnC,EAAA,MAAA0C;CAJH,IAAAE,gBAAsBF,IAMrBG,IAAAC;CAED5D,AAFCc,EAAA,QAAAmC,iBAKiBU,KAAA7C,EAAA,KAAA8C,KAAA9C,EAAA,QAHR6C,WAAA;EAERV,cAAc;CAAC,GACdW,KAAA,CAACX,aAAa,GAACnC,EAAA,MAAAmC,eAAAnC,EAAA,MAAA6C,IAAA7C,EAAA,MAAA8C,KAHlB5D,UAAU2D,IAGPC,EAAe;CAAC,IAAAC;CAAA,AAAA/C,EAAA,QAAAuB,OAAAC,IAAA,2BAAA,KAEYuB,WAAM5B,mBAAmB,EAAI,GAACnB,EAAA,MAAA+C,MAAAA,KAAA/C,EAAA;CAA7D,IAAAgD,aAAmBD,IAA+CE;CAAA,AAAAjD,EAAA,QAAAmC,gBAM/Dc,KAAAjD,EAAA,OAJDiD,MAAAC,YAAA;EAGEf,AAFAtB,YAAWsC,YAAa,CAAA,GAAIA,SAASf,OAAK,CAAC,GAC3Cf,iBAAiBe,OAAK,GACtBD,cAAc;CAAC,GAChBnC,EAAA,MAAAmC,eAAAnC,EAAA,MAAAiD;CALH,IAAAG,WAAiBH,IAOhBI;CAAA,AAAArD,EAAA,QAAAuB,OAAAC,IAAA,2BAAA,KAGuC6B,MAAA,EAAAC,QAAS,GAAE,GAACtD,EAAA,MAAAqD,OAAAA,MAAArD,EAAA;CAAA,IAAAuD;CAAA,AAAAvD,EAAA,QAAAuB,OAAAC,IAAA,2BAAA,KAC9C+B,MAAA,oBAAC,KAAD;EAAW,MAAA;EACT,UAAA,oBAAC,SAAD;GAAe,MAAA;GAAG,UAAA;EAAV,CAAA;CADN,CAAA,GAEEvD,EAAA,MAAAuD,OAAAA,MAAAvD,EAAA;CAAA,IAAAwD;CAAA,AAAAxD,EAAA,QAAAuB,OAAAC,IAAA,2BAAA,KACNgC,MAAA,oBAAC,KAAD;EAAY,OAAA,EAAAC,aAAc,WAAU;EAClC,UAAA,oBAAC,QAAD;GACQjF,MAAAA;GACA,MAAA;GACD,MAAA;GACA,MAAA;GACIwE,SAAAA;EAAU,CAAA;CANnB,CAAA,GAQEhD,EAAA,MAAAwD,OAAAA,MAAAxD,EAAA;CAAA,IAAA0D;CAAA,AAAA1D,EAAA,QAAAc,UAEkC4C,MAAA1D,EAAA,OAAhC0D,MAAA5C,UAAU,oBAAC,SAAD,CAAQ,CAAA,IAAlBrC,UAAgCuB,EAAA,MAAAc,SAAAd,EAAA,MAAA0D;CAAA,IAAAC;CAAA,AAAA3D,EAAA,QAAAc,WAAAd,EAAA,QAAA0D,OAAA1D,EAAA,QAAAmC,iBAd1CwB,MAAA,qBAAC,MAAD;EAAW,KAAA;EAAS,OAAA;EAAgB,OAAAN;EAApC,UAAA;GACEE;GAGAC;GASA,oBAAC,QAAD;IACQ,MAAAE;IACC,OAAA;IACF,MAAA;IACA,MAAA;IACIvB,SAAAA;IACCrB,UAAAA;GAAO,CAAA;EAnBhB;KAqBEd,EAAA,MAAAc,SAAAd,EAAA,MAAA0D,KAAA1D,EAAA,MAAAmC,eAAAnC,EAAA,MAAA2D,OAAAA,MAAA3D,EAAA;CAAA,IAAA4D;CAAA,AAAA5D,EAAA,QAAAgB,QAKC4C,MAAA5D,EAAA,OAJP4D,MAAA5C,QACC,oBAAC,MAAD;EAAW,MAAA;EAAoB,SAAA;EAAG,QAAA;EAAO,UAAA;CAApC,CAAA,IADN,MAIOhB,EAAA,MAAAgB,OAAAhB,EAAA,MAAA4D;CAAA,IAAAC;CAAA,AAAA7D,EAAA,QAAAY,WAAAZ,EAAA,QAAAc,WAAAd,EAAA,QAAA4C,iBAAA5C,EAAA,QAAAoB,iBACRyC,MAAA,oBAAC,WAAD;EACW/C;EACAF;EACMQ;EACEwB,iBAAAA;CAAa,CAAA,GAC9B5C,EAAA,MAAAY,SAAAZ,EAAA,MAAAc,SAAAd,EAAA,MAAA4C,eAAA5C,EAAA,MAAAoB,eAAApB,EAAA,MAAA6D,OAAAA,MAAA7D,EAAA;CAAA,IAAA8D;CAAA,AAAA9D,EAAA,QAAAyC,oBAAAzC,EAAA,QAAAoB,iBACD0C,MAAA1C,iBACC,oBAAC,WAAD;EAA0BA;EAA8BqB,eAAAA;CAAgB,CAAA,GACzEzC,EAAA,MAAAyC,kBAAAzC,EAAA,MAAAoB,eAAApB,EAAA,MAAA8D,OAAAA,MAAA9D,EAAA;CAAA,IAAA+D;CAAA,AAAA/D,EAAA,QAAAkB,mBAAAlB,EAAA,QAAAoD,YACDW,MAAA,oBAAC,iBAAD;EAAuB7C,MAAAA;EAA0BO,SAAAA;EAA8B2B;CAAQ,CAAA,GAAIpD,EAAA,MAAAkB,iBAAAlB,EAAA,MAAAoD,UAAApD,EAAA,MAAA+D,OAAAA,MAAA/D,EAAA;CAAA,IAAAgE;CACrF,OADqFhE,EAAA,QAAA2D,OAAA3D,EAAA,QAAA4D,OAAA5D,EAAA,QAAA6D,OAAA7D,EAAA,QAAA8D,OAAA9D,EAAA,QAAA+D,OArC7FC,MAAA,qBAAC,OAAD;EAAY,KAAA;EAAZ,UAAA;GACEL;GAsBCC;GAKDC;GAMCC;GAGDC;EArCI;KAsCE/D,EAAA,MAAA2D,KAAA3D,EAAA,MAAA4D,KAAA5D,EAAA,MAAA6D,KAAA7D,EAAA,MAAA8D,KAAA9D,EAAA,MAAA+D,KAAA/D,EAAA,MAAAgE,OAAAA,MAAAhE,EAAA,KAtCRgE;AAsCQ;ACxJZ,MAAaU,2BAA2BR,aAAa;CACnDI,MAAM;CACNK,OAAO,CAACN;EARRC,MAAM;EACNC,OAAO;EACPC,MAAMP;EACNQ,WAAWL;CAKHC,CAAmB;AAC7B,CAAC;ACfD,SAAgB,SAAS,IAAoB;CAC3C,OAAO,GAAG,QAAQ,WAAW,EAAE;AACjC;ACkBA,SAAAgC,mBAAAC,uBAAAC,eAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAAC,KAAA;EAKI,IAAIL,0BAA0B,MAA1B,CAAmCA,uBAAqB;GAC1D,IAAI,CAACC,eAAaK,WAChB,MAAUC,MACR,yIACF;GAEFH,KAAOH;GAAP,MAAAI;EAAoB;EACrB,IAAAG;EAAA,AAAAN,EAAA,OAAAD,iBAAAC,EAAA,OAAAF,yBAEmBQ,KAAA;GAAA,GACfP;GAAa,GACbD;EACL,GAACE,EAAA,KAAAD,eAAAC,EAAA,KAAAF,uBAAAE,EAAA,KAAAM,MAAAA,KAAAN,EAAA;EAHD,IAAAO,cAAoBD;EAKpB,IAAI,CAACC,aAAWH,WACd,MAAUC,MACR,2GACF;EAGFH,KAAOK;CAAW;CAAA,OArBbL;AAsBmC;AAG5C,SAAOM,6BAAAC,OAAA;CAAA,IAAAT,IAAAC,EAAA,EAAA,GAGLH,wBAA+BW,MAAKC,YAA4CC,SAAiBC,iBAEjGC,SAAehB,mBAAmBC,uBAAuBW,MAAKV,aAAc,GAE5Ee,iBAAuBD,OAAME,eAAgB,cAE7CC,eAAqBvB,2BAA2B,GAEhD,CAAAwB,UAAAC,eAAgCpC,SAAkBgC,cAAc,GAACZ;CAAA,AAAAF,EAAA,OAAAmB,OAAAC,IAAA,2BAAA,KAC9BlB,WAAMgB,YAAYG,KAAqB,GAACrB,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CAA3E,IAAAsB,iBAAuBpB,IAAyDI;CAAA,AAAAN,EAAA,OAAAmB,OAAAC,IAAA,2BAAA,KAGhDd,KAAA,EAAAiB,OAAQ,OAAM,GAACvB,EAAA,KAAAM,MAAAA,KAAAN,EAAA;CAAA,IAAAwB;CAAA,AAAAxB,EAAA,OAAAgB,gBAAAhB,EAAA,OAAAiB,YAC1CO,KAAAP,YAAYD,gBAAgB,YAC3B,oBAAC,KAAD;EAAc,SAAA;EACZ,UAAA,oBAAC,SAAD,CAAQ,CAAA;CADN,CAAA,IADL,MAIOhB,EAAA,KAAAgB,cAAAhB,EAAA,KAAAiB,UAAAjB,EAAA,KAAAwB,MAAAA,KAAAxB,EAAA;CAAA,IAAAyB;CAAA,AAAAzB,EAAA,OAAAgB,gBAAAhB,EAAA,OAAAiB,YAEPQ,KAAAR,YAAYD,gBAAgB,aAC3B,oBAAC,uBAAD,EAAiC,WAAA,sBAAqB,CAAA,IADvD,MAEOhB,EAAA,KAAAgB,cAAAhB,EAAA,KAAAiB,UAAAjB,EAAA,KAAAyB,MAAAA,KAAAzB,EAAA;CAAA,IAAA0B;CAAA,AAAA1B,EAAA,OAAAgB,gBAAAhB,EAAA,OAAAiB,YAEPS,KAAAT,YAAYD,iBAAiB,UAC5B,oBAAC,KAAD;EAAc,SAAA;EACZ,UAAA,oBAAC,cAAD,CAAa,CAAA;CADX,CAAA,IADL,MAIOhB,EAAA,KAAAgB,cAAAhB,EAAA,KAAAiB,UAAAjB,EAAA,MAAA0B,MAAAA,KAAA1B,EAAA;CAAA,IAAA2B;CAAA,AAAA3B,EAAA,QAAAmB,OAAAC,IAAA,2BAAA,KAEaO,KAAA;EAAAC,WAAY;EAAEC,UAAY;CAAQ,GAAC7B,EAAA,MAAA2B,MAAAA,KAAA3B,EAAA;CAAA,IAAA8B;CAAA,AAAA9B,EAAA,QAAAa,UAAAb,EAAA,QAAAgB,gBAAAhB,EAAA,QAAAS,SAAAT,EAAA,QAAAiB,YACrDa,KAAAb,YAAYD,gBAAgB,YAC3B,oBAAC,qBAAD;EAAoB,GAAKP;EAAoBI,aAAAA;CAAM,CAAA,IAEnDJ,MAAKsB,cAAetB,KACtB,GAACT,EAAA,MAAAa,QAAAb,EAAA,MAAAgB,cAAAhB,EAAA,MAAAS,OAAAT,EAAA,MAAAiB,UAAAjB,EAAA,MAAA8B,MAAAA,KAAA9B,EAAA;CAAA,IAAAgC;CAAA,AAAAhC,EAAA,QAAA8B,KACGE,KAAAhC,EAAA,OANNgC,KAAA,oBAAC,KAAD;EAAW,MAAA;EAAU,OAAAL;EAClBG,UAAAA;CADC,CAAA,GAME9B,EAAA,MAAA8B,IAAA9B,EAAA,MAAAgC;CAEE,IAAAC,KAAAhB,WAAA7C,iBAAAC,UAIJ6D,KAAAjB,WAAA,wCAAA,uCAAwFkB;CAAA,AAAAnC,EAAA,QAAAiC,MAAAjC,EAAA,QAAAkC,MAL5FC,MAAA,oBAAC,QAAD;EACQ,MAAAF;EACGX,SAAAA;EACJ,MAAA;EAEH,OAAAY;CAAwF,CAAA,GAE1FlC,EAAA,MAAAiC,IAAAjC,EAAA,MAAAkC,IAAAlC,EAAA,MAAAmC,OAAAA,MAAAnC,EAAA;CAAA,IAAAoC;CACG,OADHpC,EAAA,QAAAmC,OAAAnC,EAAA,QAAAwB,MAAAxB,EAAA,QAAAyB,MAAAzB,EAAA,QAAA0B,MAAA1B,EAAA,QAAAgC,MA/BJI,MAAA,qBAAC,MAAD;EAAW,KAAA;EAAS,MAAA;EAAU,OAAA9B;EAA9B,UAAA;GACGkB;GAMAC;GAIAC;GAMDM;GAOAG;EAxBG;KAgCEnC,EAAA,MAAAmC,KAAAnC,EAAA,MAAAwB,IAAAxB,EAAA,MAAAyB,IAAAzB,EAAA,MAAA0B,IAAA1B,EAAA,MAAAgC,IAAAhC,EAAA,MAAAoC,OAAAA,MAAApC,EAAA,KAhCPoC;AAgCO;AA/CJ,SAAAf,MAAAgB,SAAA;CAAA,OAY6D,CAACA;AAAO;AAuC5E,SAAAC,oBAAA7B,OAAA;CAAA,IAAAT,IAAAC,EAAA,EAAA,GACE,EAAAsC,aAAAC,aAAAC,UAAAC,UAAAhC,YAAAiC,UAA0ElC,OAE1E,EAAAkC,OAAAC,oBAAiCvD,gBAAgB,GACjDwD,SAAehE,OAAO+D,eAAe,GACrCE,kBAAwBjE,OAAyB,IAAI,GAACqB,IAAAI;CAEtD3B,AAFsDqB,EAAA,OAAA4C,mBAIlC1C,KAAAF,EAAA,IAAAM,KAAAN,EAAA,OAFVE,WAAA;EACR2C,OAAMR,UAAWO;CAAH,GACbtC,KAAA,CAACsC,eAAe,GAAC5C,EAAA,KAAA4C,iBAAA5C,EAAA,KAAAE,IAAAF,EAAA,KAAAM,KAFpB3B,UAAUuB,IAEPI,EAAiB;CAAC,IAAAkB;CAAA,AAAAxB,EAAA,OAAA2C,OAAAI,OAUpBvB,KAAAxB,EAAA,MARSwB,WAAA;EAER,AAAImB,OAAKI,QACPD,gBAAeT,SAAeW,MAAC;CAChC,GAIFhD,EAAA,KAAA2C,OAAAI,MAAA/C,EAAA,KAAAwB;CAAA,IAAAC;CARD9C,AAQCqB,EAAA,OAAAmB,OAAAC,IAAA,2BAAA,KAAEK,KAAA,CAAA,GAAEzB,EAAA,KAAAyB,MAAAA,KAAAzB,EAAA,IARLrB,UAAU6C,IAQPC,EAAE;CAAC,IAAAC;CAAA,AAAA1B,EAAA,OAAAwC,cAEqDd,KAAA1B,EAAA,MAA3B0B,WAAMc,YAAY,CAAC,MAAM,CAAC,GAACxC,EAAA,KAAAwC,aAAAxC,EAAA,KAAA0B;CAA3D,IAAAuB,cAAoBvB,IAAuDC;CAAA,AAAA3B,EAAA,OAAAwC,cACvBb,KAAA3B,EAAA,MAArB2B,WAAMa,YAAY,CAAA,CAAE,GAACxC,EAAA,KAAAwC,aAAAxC,EAAA,KAAA2B;CAApD,IAAAuB,aAAmBvB,IAAiDG;CAAA,AAAA9B,EAAA,QAAAyC,YAAAzC,EAAA,QAAAwC,eAAAxC,EAAA,QAAAU,WAAAyC,QAGlErB,MAAAsB,WAAA;EACE,IAAI,CAACA,QAAM;GAETZ,AADAC,SAASrD,MAAM,CAAC,GAChBoD,YAAY,CAAA,CAAE;GAAC;EAAA;EAGjB,IAAAa,UAAgB;GACdlE,aAAa,CAAC,CAAC;GACfD,IAAIwB,WAAUyC,MAAO,CAAC,OAAO,CAAC;GAC9BjE,IAAIS,SAASyD,OAAMT,MAAMW,UAAW,GAAG,CAAC,MAAM,CAAC;GAC/ClE,MAAM,CAAC,OAAO,CAAC;GACfA,MAAM,CAAC,sBAAsB,CAAC;EAAC;EAKjCoD,AAFAC,SAASY,OAAO,GAEhBb,YAAY,CAAA,CAAE;CAAC,GAChBxC,EAAA,MAAAyC,UAAAzC,EAAA,MAAAwC,aAAAxC,EAAA,MAAAU,WAAAyC,MAAAnD,EAAA,MAAA8B,MAAAA,KAAA9B,EAAA;CAlBH,IAAAuD,eAAqBzB,IAoBpBE;CAAA,AAAAhC,EAAA,QAAAmB,OAAAC,IAAA,2BAAA,KAGCY,MAAAwB,MAAA;EACE,IAAAC,YAAkBZ,OAAMR,SAAaqB;EAAA,OAC9B,CAACD,aAAaD,EAACb,MAAMW,eAAgB3D,SAAS8D,SAAS;CAAC,GAChEzD,EAAA,MAAAgC,MAAAA,KAAAhC,EAAA;CAJH,IAAA2D,eAAqB3B,IAMpBC;CAAA,AAAAjC,EAAA,QAAAmB,OAAAC,IAAA,2BAAA,KAEuCa,WAAM2B,KAAIC,UAAWhB,OAAMR,OAAQ,GAACrC,EAAA,MAAAiC,MAAAA,KAAAjC,EAAA;CAA5E,IAAA8D,sBAA4B7B,IAEnBC,KAAAxB,YAAiCyB;CAAA,AAAAnC,EAAA,QAAAkC,GAAA6B,KAAmC5B,MAAAnC,EAAA,OAArEmC,MAACD,GAAiC6B,GAAIC,IAAKC,MAAyB,GAACjE,EAAA,MAAAkC,GAAA6B,IAAA/D,EAAA,MAAAmC;CAD7E,IAAA+B,aACQ/B,KAEPC;CAaG,OAbHpC,EAAA,QAAAkD,cAAAlD,EAAA,QAAAuD,gBAAAvD,EAAA,QAAAiD,eAAAjD,EAAA,QAAAuC,eAAAvC,EAAA,QAAA0C,YAAA1C,EAAA,QAAAkE,cAGC9B,MAAA,oBAAC,4BAAD;EACOU,KAAAA;EACOoB;EACC3B;EACHgB,UAAAA;EACDN,SAAAA;EACDC,QAAAA;EACaY;EACPH;EACJjB;CAAQ,CAAA,GAClB1C,EAAA,MAAAkD,YAAAlD,EAAA,MAAAuD,cAAAvD,EAAA,MAAAiD,aAAAjD,EAAA,MAAAuC,aAAAvC,EAAA,MAAA0C,UAAA1C,EAAA,MAAAkE,YAAAlE,EAAA,MAAAoC,OAAAA,MAAApC,EAAA,KAVFoC;AAUE;AAvEN,SAAA6B,OAAAE,SAAA;CAAA,OAwDkEA,QAAOhB;AAAK;AChJ9E,MAAayB,gCAAgCR,cAC1CS,kBAAkB;CACjB,IAAMC,SAAS,OAAOD,iBAAkB,WAAWA,gBAAgBE,KAAAA;CAEnE,OAAO;EACLC,MAAM;EACNC,QAAQ,EACNC,YAAY,EACVC,SAASC,UACA,oBAAC,wBAAD,EAAA,UAAyBA,MAAMC,cAAcD,KAAK,EAA0B,CAAA,EAEvF,EACF;EACAE,MAAM,EACJJ,YAAY,EACVK,QAAQH,UAAU;GAChB,IAAMI,wBAAyBJ,MAAMK,YAAoCC,SACrEC;GAaJ,OAXEtB,mBAAmBe,KAAK,KACxBV,OAAOU,MAAMK,YAAY,WAAW,MACnCD,0BAA0B,MAAQA,uBAAuBI,aAGxD,oBAAC,8BAAD;IACE,GAAKR;IACL,eAAeN;GAAO,CAAA,IAIrBM,MAAMC,cAAcD,KAAK;EAClC,EACF,EACF;CACF;AACF,CACF"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["{apiVersion: 'vX'}","useMemo(() => {\n    const customHost = localStorage.getItem('embeddings-index-host')\n    if (customHost) {\n      return client.withConfig({\n        apiHost: customHost,\n        // Required so the override host is used as-is (not `{projectId}.{apiHost}`).\n        // There is no non-deprecated replacement for this client flag.\n        // oxlint-disable-next-line no-deprecated -- custom embeddings-index-host must not be project-prefixed\n        useProjectHostname: false,\n        withCredentials: false,\n      })\n    }\n    return client\n  }, [client])","() => {\n    client\n      .request<{enabled: boolean}>({\n        method: 'GET',\n        url: `/embeddings-index/status`,\n      })\n      .then((response) => {\n        setStatus(response.enabled ? 'enabled' : 'disabled')\n      })\n      .catch((err) => {\n        console.error(err)\n        setStatus('error')\n      })\n  }","[client]","<FeatureEnabledContext.Provider value={status}>{props.children}</FeatureEnabledContext.Provider>","children","FeatureEnabledContext.Provider","<Card tone=\"primary\" border padding={4}>\n      <Text size={1}>\n        💎 Unlock semantic search with the Embeddings Index API — available on Team, Business, and\n        Enterprise plans.{' '}\n        <a href={`https://www.sanity.io/manage/project/${projectId}/plan${props.urlSuffix ?? ''}`}>\n          Upgrade now →\n        </a>\n      </Text>\n    </Card>","`https://www.sanity.io/manage/project/${projectId}/plan${props.urlSuffix ?? ''}`","<Card padding={4} border tone=\"critical\">\n      An error occurred. See console for details.\n    </Card>","schema\n        .getTypeNames()\n        .map((n) => schema.get(n))\n        .filter((schemaType): schemaType is ObjectSchemaType =>\n          Boolean(schemaType && isType(schemaType, 'document')),\n        )\n        .filter(\n          (documentType) =>\n            !documentType.name.startsWith('sanity.') &&\n            !documentType.name.startsWith('assist.') &&\n            documentType.name !== 'document',\n        )\n        .map((documentType) => `\"${documentType.name}\"`)\n        .join(',\\n')","(schemaType): schemaType is ObjectSchemaType =>\n          Boolean(schemaType && isType(schemaType, 'document'))","(documentType) =>\n            !documentType.name.startsWith('sanity.') &&\n            !documentType.name.startsWith('assist.') &&\n            documentType.name !== 'document'","(documentType) => `\"${documentType.name}\"`","{\n      dataset,\n      projection: defaultProjection,\n      filter: defaultFilter,\n    }","useMemo(\n    () => ({\n      dataset,\n      projection: defaultProjection,\n      filter: defaultFilter,\n    }),\n    [defaultFilter, dataset],\n  )","documentType","(propValue: string) => onChange((current) => ({...current, [prop]: propValue}))","useCallback(\n    (propValue: string) => onChange((current) => ({...current, [prop]: propValue})),\n    [onChange, prop],\n  )","<FormInput\n      label={label}\n      description={description}\n      onChange={handleChange}\n      value={index[prop] ?? ''}\n      readOnly={readOnly}\n      placeholder={placeholder}\n      type={type}\n    />","index[prop] ?? ''","type = 'text'","(e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange(e.currentTarget.value)","useCallback(\n    (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange(e.currentTarget.value),\n    [onChange],\n  )","<Label as=\"label\" muted htmlFor={id}>\n        {label}\n      </Label>","description && (\n        <Box>\n          <Text size={1} muted>\n            {description}\n          </Text>\n        </Box>\n      )","type === 'text' ? (\n        <TextInput\n          id={id}\n          value={value}\n          onChange={handleChange}\n          readOnly={readOnly}\n          placeholder={placeholder}\n        />\n      ) : (\n        <TextArea\n          id={id}\n          value={value}\n          rows={3}\n          onChange={handleChange}\n          readOnly={readOnly}\n          placeholder={placeholder}\n          style={{resize: 'vertical'}}\n        />\n      )","<Stack gap={3}>\n      <Label as=\"label\" muted htmlFor={id}>\n        {label}\n      </Label>\n      {description && (\n        <Box>\n          <Text size={1} muted>\n            {description}\n          </Text>\n        </Box>\n      )}\n      {type === 'text' ? (\n        <TextInput\n          id={id}\n          value={value}\n          onChange={handleChange}\n          readOnly={readOnly}\n          placeholder={placeholder}\n        />\n      ) : (\n        <TextArea\n          id={id}\n          value={value}\n          rows={3}\n          onChange={handleChange}\n          readOnly={readOnly}\n          placeholder={placeholder}\n          style={{resize: 'vertical'}}\n        />\n      )}\n    </Stack>","() => {\n    if (!open) {\n      return\n    }\n    setTimeout(() => ref.current?.querySelector('input')?.focus())\n  }","[ref, open]","(index: IndexState) => {\n      onSubmit(index)\n      onClose()\n    }","useCallback(\n    (index: IndexState) => {\n      onSubmit(index)\n      onClose()\n    },\n    [onSubmit, onClose],\n  )","open ? (\n    <Dialog id={id} width={1} ref={ref} onClose={onClose} header=\"Create embeddings index\">\n      <Stack padding={4} gap={5}>\n        <IndexEditor readOnly={false} onSubmit={handleSubmit} />\n      </Stack>\n    </Dialog>\n  ) : null","client.config().dataset ?? ''","() => ({\n    ...defaultIndex,\n    ...selectedIndex,\n  })","() => setIndex(selectedIndex ?? {...defaultIndex})","[selectedIndex, defaultIndex]","(e: SubmitEvent<HTMLFormElement>) => {\n      e.preventDefault()\n      if (readOnly) {\n        return\n      }\n\n      const validationErrors: string[] = []\n\n      if (!index.indexName) {\n        validationErrors.push('Index name is required')\n      } else if (!index.indexName.match(/^[a-zA-Z0-9-_]+$/g)) {\n        validationErrors.push('Index name can only contain the letters a-z, numbers - and _')\n      }\n\n      if (!index.dataset) {\n        validationErrors.push('Dataset is required')\n      }\n\n      if (!index.filter) {\n        validationErrors.push('Filter is required')\n      }\n\n      if (!index.projection) {\n        validationErrors.push('Projection is required')\n      }\n\n      if (validationErrors.length) {\n        setErrors(validationErrors)\n        return\n      }\n\n      const {projectId} = client.config()\n      setLoading(true)\n      client\n        .request({\n          method: 'POST',\n          url: `/embeddings-index/${index.dataset}?projectId=${projectId}`,\n          body: {\n            indexName: index.indexName,\n            projection: index.projection,\n            filter: index.filter,\n          },\n        })\n        .then((response: {index: IndexState}) => {\n          if (onSubmit) {\n            onSubmit(response.index)\n          }\n        })\n        .catch((err: any) => {\n          console.error(err)\n          setErrors([err.message])\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    }","index.indexName","useCallback(\n    (e: SubmitEvent<HTMLFormElement>) => {\n      e.preventDefault()\n      if (readOnly) {\n        return\n      }\n\n      const validationErrors: string[] = []\n\n      if (!index.indexName) {\n        validationErrors.push('Index name is required')\n      } else if (!index.indexName.match(/^[a-zA-Z0-9-_]+$/g)) {\n        validationErrors.push('Index name can only contain the letters a-z, numbers - and _')\n      }\n\n      if (!index.dataset) {\n        validationErrors.push('Dataset is required')\n      }\n\n      if (!index.filter) {\n        validationErrors.push('Filter is required')\n      }\n\n      if (!index.projection) {\n        validationErrors.push('Projection is required')\n      }\n\n      if (validationErrors.length) {\n        setErrors(validationErrors)\n        return\n      }\n\n      const {projectId} = client.config()\n      setLoading(true)\n      client\n        .request({\n          method: 'POST',\n          url: `/embeddings-index/${index.dataset}?projectId=${projectId}`,\n          body: {\n            indexName: index.indexName,\n            projection: index.projection,\n            filter: index.filter,\n          },\n        })\n        .then((response: {index: IndexState}) => {\n          if (onSubmit) {\n            onSubmit(response.index)\n          }\n        })\n        .catch((err: any) => {\n          console.error(err)\n          setErrors([err.message])\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    },\n    [index, readOnly, onSubmit, client],\n  )","errors?.length ? (\n          <Card tone=\"critical\" border padding={2}>\n            <Text>\n              <ul style={{marginLeft: -10}}>\n                {errors?.map((error, i) => (\n                  <li\n                    // oxlint-disable-next-line react/no-array-index-key\n                    key={`${error}-${i}`}\n                  >\n                    {error}\n                  </li>\n                ))}\n              </ul>\n            </Text>\n          </Card>\n        ) : null","(error, i) => (\n                  <li\n                    // oxlint-disable-next-line react/no-array-index-key\n                    key={`${error}-${i}`}\n                  >\n                    {error}\n                  </li>\n                )","errors?.length","<IndexFormInput\n          label=\"Index name\"\n          placeholder={'Name of index without spaces...'}\n          index={index}\n          prop=\"indexName\"\n          onChange={setIndex}\n          readOnly={readOnly}\n        />","<IndexFormInput label=\"Dataset\" index={index} prop=\"dataset\" onChange={setIndex} readOnly />","<IndexFormInput\n          label=\"Filter\"\n          description=\"Must be a valid GROQ filter\"\n          placeholder={defaultIndex.filter}\n          index={index}\n          prop=\"filter\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />","filter","<IndexFormInput\n          label=\"Projection\"\n          description=\"Must be a valid GROQ projection, starting { and ending with }\"\n          placeholder={defaultIndex.projection}\n          index={index}\n          prop=\"projection\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />","projection","onSubmit && (\n          <Button\n            type=\"submit\"\n            text=\"Create index\"\n            icon={\n              loading ? (\n                <Box style={{marginTop: 5}}>\n                  <Spinner />\n                </Box>\n              ) : (\n                AddIcon\n              )\n            }\n            disabled={readOnly || loading}\n            tone=\"primary\"\n          />\n        )","<Stack gap={4}>\n        {errors?.length ? (\n          <Card tone=\"critical\" border padding={2}>\n            <Text>\n              <ul style={{marginLeft: -10}}>\n                {errors?.map((error, i) => (\n                  <li\n                    // oxlint-disable-next-line react/no-array-index-key\n                    key={`${error}-${i}`}\n                  >\n                    {error}\n                  </li>\n                ))}\n              </ul>\n            </Text>\n          </Card>\n        ) : null}\n        <IndexFormInput\n          label=\"Index name\"\n          placeholder={'Name of index without spaces...'}\n          index={index}\n          prop=\"indexName\"\n          onChange={setIndex}\n          readOnly={readOnly}\n        />\n        <IndexFormInput label=\"Dataset\" index={index} prop=\"dataset\" onChange={setIndex} readOnly />\n        <IndexFormInput\n          label=\"Filter\"\n          description=\"Must be a valid GROQ filter\"\n          placeholder={defaultIndex.filter}\n          index={index}\n          prop=\"filter\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />\n        <IndexFormInput\n          label=\"Projection\"\n          description=\"Must be a valid GROQ projection, starting { and ending with }\"\n          placeholder={defaultIndex.projection}\n          index={index}\n          prop=\"projection\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />\n        {onSubmit && (\n          <Button\n            type=\"submit\"\n            text=\"Create index\"\n            icon={\n              loading ? (\n                <Box style={{marginTop: 5}}>\n                  <Spinner />\n                </Box>\n              ) : (\n                AddIcon\n              )\n            }\n            disabled={readOnly || loading}\n            tone=\"primary\"\n          />\n        )}\n      </Stack>","<form onSubmit={handleSubmit}>\n      <Stack gap={4}>\n        {errors?.length ? (\n          <Card tone=\"critical\" border padding={2}>\n            <Text>\n              <ul style={{marginLeft: -10}}>\n                {errors?.map((error, i) => (\n                  <li\n                    // oxlint-disable-next-line react/no-array-index-key\n                    key={`${error}-${i}`}\n                  >\n                    {error}\n                  </li>\n                ))}\n              </ul>\n            </Text>\n          </Card>\n        ) : null}\n        <IndexFormInput\n          label=\"Index name\"\n          placeholder={'Name of index without spaces...'}\n          index={index}\n          prop=\"indexName\"\n          onChange={setIndex}\n          readOnly={readOnly}\n        />\n        <IndexFormInput label=\"Dataset\" index={index} prop=\"dataset\" onChange={setIndex} readOnly />\n        <IndexFormInput\n          label=\"Filter\"\n          description=\"Must be a valid GROQ filter\"\n          placeholder={defaultIndex.filter}\n          index={index}\n          prop=\"filter\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />\n        <IndexFormInput\n          label=\"Projection\"\n          description=\"Must be a valid GROQ projection, starting { and ending with }\"\n          placeholder={defaultIndex.projection}\n          index={index}\n          prop=\"projection\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />\n        {onSubmit && (\n          <Button\n            type=\"submit\"\n            text=\"Create index\"\n            icon={\n              loading ? (\n                <Box style={{marginTop: 5}}>\n                  <Spinner />\n                </Box>\n              ) : (\n                AddIcon\n              )\n            }\n            disabled={readOnly || loading}\n            tone=\"primary\"\n          />\n        )}\n      </Stack>\n    </form>","{\n  documentId,\n  style,\n  schemaTypeName,\n  ...buttonProps\n}: ResultPreviewProps & ButtonProps","schemaTypeName ? schema.get(schemaTypeName) : undefined","{minHeight: '36px'}","<Card style={{minHeight: '36px'}}>\n        <DefaultPreview\n          withShadow={false}\n          withBorder={false}\n          title={'Loading...'}\n          schemaType={schemaType}\n          isPlaceholder\n        />\n      </Card>","<ErrorOutlineIcon />","<code>{schemaTypeName ?? 'N/A'}</code>","schemaTypeName ?? 'N/A'","<Card>\n        <DefaultPreview\n          withShadow={false}\n          withBorder={false}\n          media={<ErrorOutlineIcon />}\n          title={\n            <>\n              Unknown type <code>{schemaTypeName ?? 'N/A'}</code> for {documentId}\n            </>\n          }\n        />\n      </Card>","<DocumentPreviewInner\n      documentId={documentId}\n      schemaTypeName={schemaTypeName}\n      schemaType={schemaType}\n      style={style}\n      {...buttonProps}\n    />","{\n  documentId,\n  schemaType,\n  style,\n  button,\n}: ResultPreviewProps & {schemaType: SchemaType} & ButtonProps","getPreviewStateObservable(documentPreviewStore, schemaType, documentId)","useMemo(\n    () => getPreviewStateObservable(documentPreviewStore, schemaType, documentId),\n    [documentId, documentPreviewStore, schemaType],\n  )","{\n    snapshot: null,\n    isLoading: true,\n    original: null,\n  }","() => {\n    return {\n      _id: documentId,\n      _type: schemaType?.name,\n    } as SanityDocument\n  }","name","useMemo(() => {\n    return {\n      _id: documentId,\n      _type: schemaType?.name,\n    } as SanityDocument\n  }, [documentId, schemaType?.name])","{\n    intent: 'edit',\n    params: {\n      id: documentId,\n      type: schemaType?.name,\n    },\n  }","schemaType?.name","getPreviewValueWithFallback({\n        snapshot,\n        original,\n        fallback: sanityDocument,\n      })","<SanityDefaultPreview\n      {...getPreviewValueWithFallback({\n        snapshot,\n        original,\n        fallback: sanityDocument,\n      })}\n      isPlaceholder={previewIsLoading ?? true}\n      layout=\"default\"\n      icon={schemaType?.icon}\n    />","previewIsLoading ?? true","schemaType?.icon","{width: '100%', ...style}","<Button\n        as={'a'}\n        href={href}\n        onClick={onIntentClick}\n        mode=\"ghost\"\n        style={{width: '100%', ...style}}\n      >\n        {preview}\n      </Button>","{width: '100%'}","<Box style={{width: '100%'}}>{preview}</Box>","(queryString: string) => {\n      setSearching(true)\n      const indexName = indexConfig?.indexName\n      const maxResults = indexConfig?.maxResults\n\n      if (!indexName) {\n        throw new Error(`Reference option embeddingsIndex.indexName is required, but was missing`)\n      }\n\n      queryIndex(\n        {\n          query: queryString.trim().length ? queryString : (getEmptySearchValue() ?? ''),\n          indexName,\n          maxResults,\n          filter: {\n            type: typeFilter,\n          },\n        },\n        client,\n      )\n        .then((result: QueryResult[]) => {\n          if (queryRef.current === queryString) {\n            setSearching(false)\n            setOptions([])\n            const resultOptions = result\n              .filter((hit) => (filterResult ? filterResult(hit) : true))\n              .map((r) => typed<Option>({result: r, value: r.value.documentId}))\n            if (resultOptions.length) {\n              setOptions(resultOptions)\n            } else {\n              setOptions([{value: NO_RESULTS_VALUE}])\n            }\n          }\n        })\n        .catch((e) => {\n          console.error(e)\n          if (queryRef.current === queryString) {\n            setSearching(false)\n            setOptions([{value: NO_RESULTS_VALUE}])\n          }\n        })\n    }","indexName","maxResults","(r) => typed<Option>({result: r, value: r.value.documentId})","useCallback(\n    (queryString: string) => {\n      setSearching(true)\n      const indexName = indexConfig?.indexName\n      const maxResults = indexConfig?.maxResults\n\n      if (!indexName) {\n        throw new Error(`Reference option embeddingsIndex.indexName is required, but was missing`)\n      }\n\n      queryIndex(\n        {\n          query: queryString.trim().length ? queryString : (getEmptySearchValue() ?? ''),\n          indexName,\n          maxResults,\n          filter: {\n            type: typeFilter,\n          },\n        },\n        client,\n      )\n        .then((result: QueryResult[]) => {\n          if (queryRef.current === queryString) {\n            setSearching(false)\n            setOptions([])\n            const resultOptions = result\n              .filter((hit) => (filterResult ? filterResult(hit) : true))\n              .map((r) => typed<Option>({result: r, value: r.value.documentId}))\n            if (resultOptions.length) {\n              setOptions(resultOptions)\n            } else {\n              setOptions([{value: NO_RESULTS_VALUE}])\n            }\n          }\n        })\n        .catch((e) => {\n          console.error(e)\n          if (queryRef.current === queryString) {\n            setSearching(false)\n            setOptions([{value: NO_RESULTS_VALUE}])\n          }\n        })\n    },\n    [client, indexConfig, getEmptySearchValue, filterResult, typeFilter],\n  )","() => {\n    if (prevDebouncedQuery.current !== debouncedQuery) {\n      runIndexQuery(debouncedQuery)\n    }\n    prevDebouncedQuery.current = debouncedQuery\n  }","[debouncedQuery, runIndexQuery]","{onClick: () => runIndexQuery(queryRef.current)}","useMemo(\n    () => ({onClick: () => runIndexQuery(queryRef.current)}),\n    [runIndexQuery, queryRef],\n  )","(newValue: string | null) => {\n      const newQuery = newValue ?? ''\n      queryRef.current = newQuery\n      setQuery(newQuery)\n    }","useCallback(\n    (newValue: string | null) => {\n      const newQuery = newValue ?? ''\n      queryRef.current = newQuery\n      setQuery(newQuery)\n    },\n    [setQuery],\n  )","(value: string) => {\n      if (value === NO_RESULTS_VALUE) {\n        setOptions(NO_OPTIONS)\n        return\n      }\n      const option = (options as Option[])\n        .filter((r): r is Option => 'result' in r)\n        .find((r) => r.result.value.documentId === value)\n      if (option && onSelect) {\n        onSelect(option.result)\n      }\n    }","(r): r is Option => 'result' in r","r","useCallback(\n    (value: string) => {\n      if (value === NO_RESULTS_VALUE) {\n        setOptions(NO_OPTIONS)\n        return\n      }\n      const option = (options as Option[])\n        .filter((r): r is Option => 'result' in r)\n        .find((r) => r.result.value.documentId === value)\n      if (option && onSelect) {\n        onSelect(option.result)\n      }\n    },\n    [onSelect, options],\n  )","<Autocomplete\n      id={id}\n      ref={ref}\n      data-testid=\"semantic-autocomplete\"\n      placeholder=\"Type to search...\"\n      openButton={openButtonConfig}\n      onFocus={onFocus}\n      onChange={handleChange}\n      loading={searching}\n      onBlur={onBlur}\n      readOnly={readOnly}\n      filterOption={NO_FILTER}\n      onQueryChange={handleQueryChange}\n      options={options}\n      renderOption={AutocompleteOption}\n    />","{width: '100%'}","<Box flex={1}>\n            <DocumentPreview documentId={value.documentId} schemaTypeName={value.type} />\n          </Box>","documentId","type","<Box padding={2}>\n            <Text size={1} muted title={'Relevance'}>\n              {Math.floor(props.result.score * 100)}%\n            </Text>\n          </Box>","Math.floor(props.result.score * 100)","<Button mode=\"bleed\" padding={1} style={{width: '100%'}}>\n        <Flex gap={2} align=\"center\">\n          <Box flex={1}>\n            <DocumentPreview documentId={value.documentId} schemaTypeName={value.type} />\n          </Box>\n          <Box padding={2}>\n            <Text size={1} muted title={'Relevance'}>\n              {Math.floor(props.result.score * 100)}%\n            </Text>\n          </Box>\n        </Flex>\n      </Button>","<Button mode=\"bleed\" padding={1} style={{width: '100%'}} disabled>\n      <Flex gap={2} align=\"center\">\n        No results.\n      </Flex>\n    </Button>","() => {\n    const timeoutId = setTimeout(() => {\n      setDebouncedValue(value)\n    }, ms)\n    return () => clearTimeout(timeoutId)\n  }","[value, ms]","useCallback(() => 'anything', [])","{indexName, maxResults: 8}","useMemo(\n    () => ({indexName, maxResults: 8}),\n    [indexName],\n  )","(hit: QueryResult) => {\n      navigateUrl({\n        path: resolveIntentLink('edit', {id: hit.value.documentId, type: hit.value.type}),\n      })\n    }","useCallback(\n    (hit: QueryResult) => {\n      navigateUrl({\n        path: resolveIntentLink('edit', {id: hit.value.documentId, type: hit.value.type}),\n      })\n    },\n    [resolveIntentLink, navigateUrl],\n  )","<SemanticSearchAutocomplete\n      getEmptySearchValue={getEmpty}\n      indexConfig={indexConfig}\n      onSelect={onSelect}\n    />","{selectedIndex, onDeleteIndex}: IndexInfoProps","() => onDeleteIndex(selectedIndex)","useCallback(\n    () => onDeleteIndex(selectedIndex),\n    [selectedIndex, onDeleteIndex],\n  )","<Box flex={1}>\n          <Heading>Index: {selectedIndex?.indexName ?? 'Untitled'}</Heading>\n        </Box>","selectedIndex?.indexName ?? 'Untitled'","<Button\n                title=\"Open index actions\"\n                icon={EllipsisVerticalIcon}\n                padding={2}\n                mode=\"ghost\"\n              />","<Menu>\n                <MenuItem\n                  text=\"Delete index\"\n                  icon={TrashIcon}\n                  tone=\"critical\"\n                  onClick={handleDelete}\n                />\n              </Menu>","{placement: 'right'}","<Box>\n          <MenuButton\n            button={\n              <Button\n                title=\"Open index actions\"\n                icon={EllipsisVerticalIcon}\n                padding={2}\n                mode=\"ghost\"\n              />\n            }\n            id={`button-${selectedIndex.indexName}`}\n            menu={\n              <Menu>\n                <MenuItem\n                  text=\"Delete index\"\n                  icon={TrashIcon}\n                  tone=\"critical\"\n                  onClick={handleDelete}\n                />\n              </Menu>\n            }\n            popover={{placement: 'right'}}\n          />\n        </Box>","`button-${selectedIndex.indexName}`","<Flex align=\"center\" flex={1} gap={2}>\n        <Box flex={1}>\n          <Heading>Index: {selectedIndex?.indexName ?? 'Untitled'}</Heading>\n        </Box>\n        <Box>\n          <MenuButton\n            button={\n              <Button\n                title=\"Open index actions\"\n                icon={EllipsisVerticalIcon}\n                padding={2}\n                mode=\"ghost\"\n              />\n            }\n            id={`button-${selectedIndex.indexName}`}\n            menu={\n              <Menu>\n                <MenuItem\n                  text=\"Delete index\"\n                  icon={TrashIcon}\n                  tone=\"critical\"\n                  onClick={handleDelete}\n                />\n              </Menu>\n            }\n            popover={{placement: 'right'}}\n          />\n        </Box>\n      </Flex>","{maxWidth: 600}","<Stack gap={4} flex={1} style={{maxWidth: 600}}>\n          <Box>\n            <IndexEditor index={selectedIndex} readOnly />\n          </Box>\n          <IndexStatus selectedIndex={selectedIndex} />\n        </Stack>","<Label muted>Query index</Label>","<Stack gap={3} flex={1}>\n          <Label muted>Query index</Label>\n          <QueryIndex indexName={selectedIndex.indexName} key={selectedIndex.indexName} />\n        </Stack>","indexName","<Flex gap={6}>\n        <Stack gap={4} flex={1} style={{maxWidth: 600}}>\n          <Box>\n            <IndexEditor index={selectedIndex} readOnly />\n          </Box>\n          <IndexStatus selectedIndex={selectedIndex} />\n        </Stack>\n\n        <Stack gap={3} flex={1}>\n          <Label muted>Query index</Label>\n          <QueryIndex indexName={selectedIndex.indexName} key={selectedIndex.indexName} />\n        </Stack>\n      </Flex>","<Stack gap={4} flex={1}>\n      <Flex align=\"center\" flex={1} gap={2}>\n        <Box flex={1}>\n          <Heading>Index: {selectedIndex?.indexName ?? 'Untitled'}</Heading>\n        </Box>\n        <Box>\n          <MenuButton\n            button={\n              <Button\n                title=\"Open index actions\"\n                icon={EllipsisVerticalIcon}\n                padding={2}\n                mode=\"ghost\"\n              />\n            }\n            id={`button-${selectedIndex.indexName}`}\n            menu={\n              <Menu>\n                <MenuItem\n                  text=\"Delete index\"\n                  icon={TrashIcon}\n                  tone=\"critical\"\n                  onClick={handleDelete}\n                />\n              </Menu>\n            }\n            popover={{placement: 'right'}}\n          />\n        </Box>\n      </Flex>\n\n      <Flex gap={6}>\n        <Stack gap={4} flex={1} style={{maxWidth: 600}}>\n          <Box>\n            <IndexEditor index={selectedIndex} readOnly />\n          </Box>\n          <IndexStatus selectedIndex={selectedIndex} />\n        </Stack>\n\n        <Stack gap={3} flex={1}>\n          <Label muted>Query index</Label>\n          <QueryIndex indexName={selectedIndex.indexName} key={selectedIndex.indexName} />\n        </Stack>\n      </Flex>\n    </Stack>","{selectedIndex}: {selectedIndex: IndexState}","<Box flex={1}>\n          <Label size={1} muted>\n            Status\n          </Label>\n        </Box>","<Flex gap={2} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Status\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>{selectedIndex.status}</Text>\n        </Stack>\n      </Flex>","status","<Box flex={1}>\n          <Label size={1} muted>\n            Indexing progress\n          </Label>\n        </Box>","<Flex gap={5} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Indexing progress\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>\n            {selectedIndex.startDocumentCount - selectedIndex.remainingDocumentCount} /{' '}\n            {selectedIndex.startDocumentCount}\n          </Text>\n        </Stack>\n      </Flex>","startDocumentCount","selectedIndex.startDocumentCount - selectedIndex.remainingDocumentCount","<Box flex={1}>\n          <Label size={1} muted>\n            Failed documents\n          </Label>\n        </Box>","<Flex gap={5} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Failed documents\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>{selectedIndex.failedDocumentCount}</Text>\n        </Stack>\n      </Flex>","failedDocumentCount","<Stack gap={4} flex={1}>\n      <Flex gap={2} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Status\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>{selectedIndex.status}</Text>\n        </Stack>\n      </Flex>\n      <Flex gap={5} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Indexing progress\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>\n            {selectedIndex.startDocumentCount - selectedIndex.remainingDocumentCount} /{' '}\n            {selectedIndex.startDocumentCount}\n          </Text>\n        </Stack>\n      </Flex>\n      <Flex gap={5} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Failed documents\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>{selectedIndex.failedDocumentCount}</Text>\n        </Stack>\n      </Flex>\n    </Stack>","{opacity: loading ? 0.5 : 1}","loading ? 0.5 : 1","<Box flex={1}>\n              <Label muted>Index name</Label>\n            </Box>","<Box flex={1}>\n              <Label muted>Dataset</Label>\n            </Box>","<Box flex={1}>\n              <Label muted>Status</Label>\n            </Box>","<Card borderBottom flex={1} paddingBottom={2} padding={3}>\n          <Flex>\n            <Box flex={1}>\n              <Label muted>Index name</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Dataset</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Status</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Progress</Label>\n            </Box>\n          </Flex>\n        </Card>","<Stack gap={2}>\n        <Card borderBottom flex={1} paddingBottom={2} padding={3}>\n          <Flex>\n            <Box flex={1}>\n              <Label muted>Index name</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Dataset</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Status</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Progress</Label>\n            </Box>\n          </Flex>\n        </Card>\n        {indexes.length ? (\n          <Stack gap={2} style={{maxHeight: 200, overflow: 'auto'}}>\n            {indexes.map((index) => (\n              <IndexRow\n                selectedIndex={selectedIndex}\n                index={index}\n                onIndexSelected={onIndexSelected}\n                key={index.indexName}\n              />\n            ))}\n          </Stack>\n        ) : (\n          <Text muted>No indexes found.</Text>\n        )}\n      </Stack>","indexes.length","<Card tone=\"default\" style={{opacity: loading ? 0.5 : 1}}>\n      <Stack gap={2}>\n        <Card borderBottom flex={1} paddingBottom={2} padding={3}>\n          <Flex>\n            <Box flex={1}>\n              <Label muted>Index name</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Dataset</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Status</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Progress</Label>\n            </Box>\n          </Flex>\n        </Card>\n        {indexes.length ? (\n          <Stack gap={2} style={{maxHeight: 200, overflow: 'auto'}}>\n            {indexes.map((index) => (\n              <IndexRow\n                selectedIndex={selectedIndex}\n                index={index}\n                onIndexSelected={onIndexSelected}\n                key={index.indexName}\n              />\n            ))}\n          </Stack>\n        ) : (\n          <Text muted>No indexes found.</Text>\n        )}\n      </Stack>\n    </Card>","() => onIndexSelected(index)","useCallback(() => onIndexSelected(index), [onIndexSelected, index])","<Box flex={1}>\n          <strong>{index.indexName}</strong>\n        </Box>","indexName","<Box flex={1}>{index.dataset}</Box>","dataset","<Box flex={1}>{index.status}</Box>","status","<Box flex={1}>\n          {index.startDocumentCount\n            ? Math.floor(\n                ((index.startDocumentCount - index.remainingDocumentCount) /\n                  index.startDocumentCount) *\n                  100,\n              )\n            : '?'}\n          %\n        </Box>","index.startDocumentCount\n            ? Math.floor(\n                ((index.startDocumentCount - index.remainingDocumentCount) /\n                  index.startDocumentCount) *\n                  100,\n              )\n            : '?'","<Flex>\n        <Box flex={1}>\n          <strong>{index.indexName}</strong>\n        </Box>\n        <Box flex={1}>{index.dataset}</Box>\n        <Box flex={1}>{index.status}</Box>\n        <Box flex={1}>\n          {index.startDocumentCount\n            ? Math.floor(\n                ((index.startDocumentCount - index.remainingDocumentCount) /\n                  index.startDocumentCount) *\n                  100,\n              )\n            : '?'}\n          %\n        </Box>\n      </Flex>","<Button\n      tone={selectedIndex?.indexName === index.indexName ? 'primary' : 'default'}\n      mode={selectedIndex?.indexName === index.indexName ? 'default' : 'ghost'}\n      onClick={onSelect}\n      key={index.indexName}\n      padding={3}\n    >\n      <Flex>\n        <Box flex={1}>\n          <strong>{index.indexName}</strong>\n        </Box>\n        <Box flex={1}>{index.dataset}</Box>\n        <Box flex={1}>{index.status}</Box>\n        <Box flex={1}>\n          {index.startDocumentCount\n            ? Math.floor(\n                ((index.startDocumentCount - index.remainingDocumentCount) /\n                  index.startDocumentCount) *\n                  100,\n              )\n            : '?'}\n          %\n        </Box>\n      </Flex>\n    </Button>","selectedIndex?.indexName === index.indexName ? 'primary' : 'default'","selectedIndex?.indexName === index.indexName ? 'default' : 'ghost'","featureState === 'error' ? (\n          <Box padding={4}>\n            <FeatureError />\n          </Box>\n        ) : null","featureState === 'disabled' ? (\n          <Box padding={4}>\n            <FeatureDisabledNotice urlSuffix=\"?ref=embeddings-tab\" />\n          </Box>\n        ) : null","featureState === 'loading' ? (\n          <Box padding={6}>\n            <Spinner size={4} />\n          </Box>\n        ) : null","featureState === 'enabled' ? (\n          <Card flex={1} style={{maxWidth: 1200}} padding={5}>\n            <Indexes />\n          </Card>\n        ) : null","<Card flex={1}>\n      <Flex justify=\"center\" flex={1}>\n        {featureState === 'error' ? (\n          <Box padding={4}>\n            <FeatureError />\n          </Box>\n        ) : null}\n\n        {featureState === 'disabled' ? (\n          <Box padding={4}>\n            <FeatureDisabledNotice urlSuffix=\"?ref=embeddings-tab\" />\n          </Box>\n        ) : null}\n\n        {featureState === 'loading' ? (\n          <Box padding={6}>\n            <Spinner size={4} />\n          </Box>\n        ) : null}\n\n        {featureState === 'enabled' ? (\n          <Card flex={1} style={{maxWidth: 1200}} padding={5}>\n            <Indexes />\n          </Card>\n        ) : null}\n      </Flex>\n    </Card>","() => setCreateIndexOpen(false)","useCallback(() => setCreateIndexOpen(false), [])","() => {\n    // oxlint-disable-next-line react/set-state-in-effect\n    setSelectedIndex(indexes.find((i) => i.indexName === selectedIndex?.indexName))\n  }","indexName","[indexes, selectedIndex]","() => {\n    setLoading(true)\n    setError(false)\n    getIndexes(client)\n      .then((response: IndexState[]) => {\n        setLoading(false)\n        setIndexes(response)\n      })\n      .catch((e) => {\n        console.error(e)\n        setError(true)\n      })\n      .finally(() => {\n        setLoading(false)\n      })\n  }","useCallback(() => {\n    setLoading(true)\n    setError(false)\n    getIndexes(client)\n      .then((response: IndexState[]) => {\n        setLoading(false)\n        setIndexes(response)\n      })\n      .catch((e) => {\n        console.error(e)\n        setError(true)\n      })\n      .finally(() => {\n        setLoading(false)\n      })\n  }, [client])","(index: NamedIndex) => {\n      if (\n        !confirm(`Are you sure you want to delete ${index.indexName} for dataset ${index.dataset}?`)\n      ) {\n        return\n      }\n      setLoading(true)\n      setError(false)\n      deleteIndex(index.indexName, client)\n        .then(() => {\n          setTimeout(() => updateIndexes())\n        })\n        .catch((e) => {\n          console.error(e)\n          setError(true)\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    }","e","useCallback(\n    (index: NamedIndex) => {\n      if (\n        !confirm(`Are you sure you want to delete ${index.indexName} for dataset ${index.dataset}?`)\n      ) {\n        return\n      }\n      setLoading(true)\n      setError(false)\n      deleteIndex(index.indexName, client)\n        .then(() => {\n          setTimeout(() => updateIndexes())\n        })\n        .catch((e) => {\n          console.error(e)\n          setError(true)\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    },\n    [client, updateIndexes],\n  )","(index: IndexState) => {\n      setSelectedIndex(index)\n      updateIndexes()\n    }","index","useCallback(\n    (index: IndexState) => {\n      setSelectedIndex(index)\n      updateIndexes()\n    },\n    [setSelectedIndex, updateIndexes],\n  )","() => {\n    // oxlint-disable-next-line react/set-state-in-effect\n    updateIndexes()\n  }","[updateIndexes]","() => setCreateIndexOpen(true)","useCallback(() => setCreateIndexOpen(true), [])","(index: IndexState) => {\n      setIndexes((current) => [...current, index])\n      setSelectedIndex(index)\n      updateIndexes()\n    }","useCallback(\n    (index: IndexState) => {\n      setIndexes((current) => [...current, index])\n      setSelectedIndex(index)\n      updateIndexes()\n    },\n    [updateIndexes],\n  )","{height: 30}","<Box flex={1}>\n          <Heading size={1}>Embeddings indexes</Heading>\n        </Box>","<Box style={{justifySelf: 'flex-end'}}>\n          <Button\n            icon={AddIcon}\n            text={'New index'}\n            tone=\"default\"\n            mode=\"ghost\"\n            onClick={openCreate}\n          />\n        </Box>","loading ? <Spinner /> : UndoIcon","<Flex gap={2} align=\"center\" style={{height: 30}}>\n        <Box flex={1}>\n          <Heading size={1}>Embeddings indexes</Heading>\n        </Box>\n        <Box style={{justifySelf: 'flex-end'}}>\n          <Button\n            icon={AddIcon}\n            text={'New index'}\n            tone=\"default\"\n            mode=\"ghost\"\n            onClick={openCreate}\n          />\n        </Box>\n        <Button\n          icon={loading ? <Spinner /> : UndoIcon}\n          title={'Refresh index list'}\n          tone=\"default\"\n          mode=\"bleed\"\n          onClick={updateIndexes}\n          disabled={loading}\n        />\n      </Flex>","error ? (\n        <Card tone=\"critical\" padding={2} border>\n          An error occurred. See console for details.\n        </Card>\n      ) : null","<IndexList\n        loading={loading}\n        indexes={indexes}\n        selectedIndex={selectedIndex}\n        onIndexSelected={onSelectIndex}\n      />","selectedIndex && (\n        <IndexInfo selectedIndex={selectedIndex} onDeleteIndex={deleteNamedIndex} />\n      )","<EditIndexDialog open={createIndexOpen} onClose={onCreateIndexClose} onSubmit={onSubmit} />","<Stack gap={4}>\n      <Flex gap={2} align=\"center\" style={{height: 30}}>\n        <Box flex={1}>\n          <Heading size={1}>Embeddings indexes</Heading>\n        </Box>\n        <Box style={{justifySelf: 'flex-end'}}>\n          <Button\n            icon={AddIcon}\n            text={'New index'}\n            tone=\"default\"\n            mode=\"ghost\"\n            onClick={openCreate}\n          />\n        </Box>\n        <Button\n          icon={loading ? <Spinner /> : UndoIcon}\n          title={'Refresh index list'}\n          tone=\"default\"\n          mode=\"bleed\"\n          onClick={updateIndexes}\n          disabled={loading}\n        />\n      </Flex>\n      {error ? (\n        <Card tone=\"critical\" padding={2} border>\n          An error occurred. See console for details.\n        </Card>\n      ) : null}\n      <IndexList\n        loading={loading}\n        indexes={indexes}\n        selectedIndex={selectedIndex}\n        onIndexSelected={onSelectIndex}\n      />\n      {selectedIndex && (\n        <IndexInfo selectedIndex={selectedIndex} onDeleteIndex={deleteNamedIndex} />\n      )}\n      <EditIndexDialog open={createIndexOpen} onClose={onCreateIndexClose} onSubmit={onSubmit} />\n    </Stack>","useMemo(() => {\n    if (embeddingsIndexConfig === true || !embeddingsIndexConfig) {\n      if (!defaultConfig?.indexName) {\n        throw new Error(\n          'Default embeddingsIndex config is missing. When options.embeddingsIndex: true, embeddingsIndexReferenceInput plugin config is required.',\n        )\n      }\n      return defaultConfig\n    }\n\n    const finalConfig = {\n      ...defaultConfig,\n      ...embeddingsIndexConfig,\n    }\n\n    if (!finalConfig?.indexName) {\n      throw new Error(\n        'indexName is missing. Either set it in options.embeddingsIndex or configure defaults using plugin config.',\n      )\n    }\n\n    return finalConfig\n  }, [defaultConfig, embeddingsIndexConfig])","{\n      ...defaultConfig,\n      ...embeddingsIndexConfig,\n    }","() => setSemantic((current) => !current)","(current) => !current","useCallback(() => setSemantic((current) => !current), [])","{width: '100%'}","semantic && featureState == 'loading' ? (\n        <Box padding={2}>\n          <Spinner />\n        </Box>\n      ) : null","semantic && featureState == 'disabled' ? (\n        <FeatureDisabledNotice urlSuffix=\"?ref=embeddings-ref\" />\n      ) : null","semantic && featureState === 'error' ? (\n        <Box padding={4}>\n          <FeatureError />\n        </Box>\n      ) : null","{maxHeight: 36, overflow: 'hidden'}","semantic && featureState == 'enabled' ? (\n          <SemanticSearchInput {...props} indexConfig={config} />\n        ) : (\n          props.renderDefault(props)\n        )","<Box flex={1} style={{maxHeight: 36, overflow: 'hidden'}}>\n        {semantic && featureState == 'enabled' ? (\n          <SemanticSearchInput {...props} indexConfig={config} />\n        ) : (\n          props.renderDefault(props)\n        )}\n      </Box>","<Button\n        icon={semantic ? EarthGlobeIcon : LinkIcon}\n        onClick={toggleSemantic}\n        mode=\"bleed\"\n        title={\n          semantic ? 'Switch to standard reference search' : 'Switch to semantic reference search'\n        }\n      />","semantic ? EarthGlobeIcon : LinkIcon","semantic ? 'Switch to standard reference search' : 'Switch to semantic reference search'","<Flex gap={2} flex={1} style={{width: '100%'}}>\n      {semantic && featureState == 'loading' ? (\n        <Box padding={2}>\n          <Spinner />\n        </Box>\n      ) : null}\n\n      {semantic && featureState == 'disabled' ? (\n        <FeatureDisabledNotice urlSuffix=\"?ref=embeddings-ref\" />\n      ) : null}\n\n      {semantic && featureState === 'error' ? (\n        <Box padding={4}>\n          <FeatureError />\n        </Box>\n      ) : null}\n\n      <Box flex={1} style={{maxHeight: 36, overflow: 'hidden'}}>\n        {semantic && featureState == 'enabled' ? (\n          <SemanticSearchInput {...props} indexConfig={config} />\n        ) : (\n          props.renderDefault(props)\n        )}\n      </Box>\n      <Button\n        icon={semantic ? EarthGlobeIcon : LinkIcon}\n        onClick={toggleSemantic}\n        mode=\"bleed\"\n        title={\n          semantic ? 'Switch to standard reference search' : 'Switch to semantic reference search'\n        }\n      />\n    </Flex>","() => {\n    docRef.current = currentDocument\n  }","[currentDocument]","() => {\n    // if this component is rendered, and there is a value, replace was selected\n    if (value?.['_ref']) {\n      autocompleteRef.current?.focus()\n    }\n    // intentional empty deps — focus once on mount when replacing an existing reference\n    // oxlint-disable-next-line react/rule-suppression\n    // oxlint-disable-next-line react/exhaustive-deps\n  }","'_ref'","[]","() => onPathFocus(['_ref'])","useCallback(() => onPathFocus(['_ref']), [onPathFocus])","() => onPathFocus([])","useCallback(() => onPathFocus([]), [onPathFocus])","(result: QueryResult) => {\n      if (!result) {\n        onChange(unset())\n        onPathFocus([])\n        return\n      }\n      const patches = [\n        setIfMissing({}),\n        set(schemaType.name, ['_type']),\n        set(publicId(result.value.documentId), ['_ref']),\n        unset(['_weak']),\n        unset(['_strengthenOnPublish']),\n      ]\n\n      onChange(patches)\n      // Move focus away from _ref and one level up\n      onPathFocus([])\n    }","name","useCallback(\n    (result: QueryResult) => {\n      if (!result) {\n        onChange(unset())\n        onPathFocus([])\n        return\n      }\n      const patches = [\n        setIfMissing({}),\n        set(schemaType.name, ['_type']),\n        set(publicId(result.value.documentId), ['_ref']),\n        unset(['_weak']),\n        unset(['_strengthenOnPublish']),\n      ]\n\n      onChange(patches)\n      // Move focus away from _ref and one level up\n      onPathFocus([])\n    },\n    [onChange, onPathFocus, schemaType.name],\n  )","(r: QueryResult) => {\n      const currentId = docRef.current?._id\n      return !currentId || r.value.documentId !== publicId(currentId)\n    }","useCallback(\n    (r: QueryResult) => {\n      const currentId = docRef.current?._id\n      return !currentId || r.value.documentId !== publicId(currentId)\n    },\n    [docRef],\n  )","() => JSON.stringify(docRef.current)","useCallback(() => JSON.stringify(docRef.current), [docRef])","(schemaType as ReferenceSchemaType).to.map((refType) => refType.name)","to","schemaType as ReferenceSchemaType","(refType) => refType.name","useMemo(\n    () => (schemaType as ReferenceSchemaType).to.map((refType) => refType.name),\n    [schemaType],\n  )","<SemanticSearchAutocomplete\n      ref={autocompleteRef}\n      typeFilter={typeFilter}\n      indexConfig={indexConfig}\n      onSelect={handleChange}\n      onFocus={handleFocus}\n      onBlur={handleBlur}\n      getEmptySearchValue={getEmptySearchValue}\n      filterResult={filterResult}\n      readOnly={readOnly}\n    />"],"sources":["../src/api/embeddingsApi.ts","../src/api/embeddingsApiHooks.ts","../src/api/isEnabled.tsx","../src/utils/types.ts","../src/embeddingsIndexDashboard/hooks.ts","../src/embeddingsIndexDashboard/IndexFormInput.tsx","../src/embeddingsIndexDashboard/IndexEditor.tsx","../src/preview/DocumentPreview.tsx","../src/referenceInput/SemanticSearchAutocomplete.tsx","../src/embeddingsIndexDashboard/QueryIndex.tsx","../src/embeddingsIndexDashboard/IndexInfo.tsx","../src/embeddingsIndexDashboard/IndexList.tsx","../src/embeddingsIndexDashboard/EmbeddingsIndexTool.tsx","../src/embeddingsIndexDashboard/dashboardPlugin.ts","../src/utils/id.ts","../src/referenceInput/SemanticSearchReferenceInput.tsx","../src/referenceInput/referencePlugin.tsx"],"sourcesContent":["import {type SanityClient} from 'sanity'\n\nexport interface NamedIndex {\n  indexName: string\n  dataset: string\n  project: string\n  projection: string\n  filter: string\n}\n\nexport interface IndexState extends NamedIndex {\n  status: string\n  startDocumentCount: number\n  remainingDocumentCount: number\n  failedDocumentCount: number\n}\n\nexport interface QueryResult {\n  score: number\n  value: {\n    documentId: string\n    type: string\n  }\n}\n\nexport interface QueryConfig {\n  query: string\n  indexName: string\n  maxResults?: number\n  filter?: {\n    type?: string | string[]\n  }\n}\n\nexport function queryIndex(queryConfig: QueryConfig, client: SanityClient): Promise<QueryResult[]> {\n  const {query, indexName, maxResults, filter} = queryConfig\n  const projectId = client.config().projectId\n  const dataset = client.config().dataset\n  const queryString = query?.trim()\n\n  return client.request<QueryResult[]>({\n    method: 'POST',\n    url: `/embeddings-index/query/${dataset}/${indexName}?projectId=${projectId}`,\n    body: {\n      query: queryString,\n      maxResults,\n      filter,\n    },\n  })\n}\n\nexport function getIndexes(client: SanityClient): Promise<IndexState[]> {\n  const projectId = client.config().projectId\n  const dataset = client.config().dataset\n  return client.request<IndexState[]>({\n    method: 'GET',\n    url: `/embeddings-index/${dataset}?projectId=${projectId}`,\n  })\n}\n\nexport function deleteIndex(indexName: string, client: SanityClient): Promise<IndexState> {\n  const projectId = client.config().projectId\n  const dataset = client.config().dataset\n  return client.request<IndexState>({\n    method: 'DELETE',\n    url: `/embeddings-index/${dataset}/${indexName}?projectId=${projectId}`,\n  })\n}\n","import {useMemo} from 'react'\nimport {type SanityClient, useClient} from 'sanity'\n\nexport function useApiClient(): SanityClient {\n  const client = useClient({apiVersion: 'vX'})\n  return useMemo(() => {\n    const customHost = localStorage.getItem('embeddings-index-host')\n    if (customHost) {\n      return client.withConfig({\n        apiHost: customHost,\n        // Required so the override host is used as-is (not `{projectId}.{apiHost}`).\n        // There is no non-deprecated replacement for this client flag.\n        // oxlint-disable-next-line no-deprecated -- custom embeddings-index-host must not be project-prefixed\n        useProjectHostname: false,\n        withCredentials: false,\n      })\n    }\n    return client\n  }, [client])\n}\n","import {Card, Text} from '@sanity/ui'\nimport {createContext, type PropsWithChildren, useContext, useEffect, useState} from 'react'\nimport {useProjectId} from 'sanity'\n\nimport {useApiClient} from './embeddingsApiHooks'\n\nexport type FeatureStatus = 'enabled' | 'disabled' | 'loading' | 'error'\nconst FeatureEnabledContext = createContext<FeatureStatus>('loading')\n\nexport function useIsFeatureEnabled() {\n  const client = useApiClient()\n  const [status, setStatus] = useState<FeatureStatus>('loading')\n\n  useEffect(() => {\n    client\n      .request<{enabled: boolean}>({\n        method: 'GET',\n        url: `/embeddings-index/status`,\n      })\n      .then((response) => {\n        setStatus(response.enabled ? 'enabled' : 'disabled')\n      })\n      .catch((err) => {\n        console.error(err)\n        setStatus('error')\n      })\n  }, [client])\n\n  return status\n}\n\nexport function FeatureEnabledProvider(props: PropsWithChildren) {\n  const status = useIsFeatureEnabled()\n  return (\n    <FeatureEnabledContext.Provider value={status}>{props.children}</FeatureEnabledContext.Provider>\n  )\n}\n\nexport function useIsFeatureEnabledContext(): FeatureStatus {\n  return useContext(FeatureEnabledContext)\n}\n\nexport function FeatureDisabledNotice(props: {urlSuffix?: string}) {\n  const projectId = useProjectId()\n\n  return (\n    <Card tone=\"primary\" border padding={4}>\n      <Text size={1}>\n        💎 Unlock semantic search with the Embeddings Index API — available on Team, Business, and\n        Enterprise plans.{' '}\n        <a href={`https://www.sanity.io/manage/project/${projectId}/plan${props.urlSuffix ?? ''}`}>\n          Upgrade now →\n        </a>\n      </Text>\n    </Card>\n  )\n}\n\nexport function FeatureError() {\n  return (\n    <Card padding={4} border tone=\"critical\">\n      An error occurred. See console for details.\n    </Card>\n  )\n}\n","import type {SchemaType} from 'sanity'\n\nexport function isType(schemaType: SchemaType, typeName: string): boolean {\n  if (schemaType.name === typeName) {\n    return true\n  }\n  if (!schemaType.type) {\n    return false\n  }\n  return isType(schemaType.type, typeName)\n}\n","import {useMemo} from 'react'\nimport type {ObjectSchemaType, Schema} from 'sanity'\n\nimport {isType} from '../utils/types'\n\nconst defaultProjection = '{...}'\n\nexport function useDefaultIndex(schema: Schema, dataset: string) {\n  const defaultFilter = useMemo(\n    () =>\n      `_type in [${schema\n        .getTypeNames()\n        .map((n) => schema.get(n))\n        .filter((schemaType): schemaType is ObjectSchemaType =>\n          Boolean(schemaType && isType(schemaType, 'document')),\n        )\n        .filter(\n          (documentType) =>\n            !documentType.name.startsWith('sanity.') &&\n            !documentType.name.startsWith('assist.') &&\n            documentType.name !== 'document',\n        )\n        .map((documentType) => `\"${documentType.name}\"`)\n        .join(',\\n')}]`,\n    [schema],\n  )\n\n  return useMemo(\n    () => ({\n      dataset,\n      projection: defaultProjection,\n      filter: defaultFilter,\n    }),\n    [defaultFilter, dataset],\n  )\n}\n","import {Box, Label, Stack, Text, TextArea, TextInput} from '@sanity/ui'\nimport {type Dispatch, type ChangeEvent, type SetStateAction, useCallback, useId} from 'react'\n\nimport {type NamedIndex} from '../api/embeddingsApi'\n\nexport interface IndexFormInputProps {\n  index: Partial<NamedIndex>\n  prop: keyof NamedIndex\n  label: string\n  description?: string\n  onChange: Dispatch<SetStateAction<Partial<NamedIndex>>>\n  readOnly: boolean\n  placeholder?: string\n  type?: 'text' | 'textarea'\n}\n\nexport function IndexFormInput(props: IndexFormInputProps) {\n  const {label, description, index, prop, onChange, readOnly, placeholder, type} = props\n  const handleChange = useCallback(\n    (propValue: string) => onChange((current) => ({...current, [prop]: propValue})),\n    [onChange, prop],\n  )\n  return (\n    <FormInput\n      label={label}\n      description={description}\n      onChange={handleChange}\n      value={index[prop] ?? ''}\n      readOnly={readOnly}\n      placeholder={placeholder}\n      type={type}\n    />\n  )\n}\n\ninterface FormInputProps {\n  label: string\n  description?: string\n  onChange: (value: string) => void\n  value: string\n  readOnly: boolean\n  placeholder?: string\n  type?: 'text' | 'textarea'\n}\n\nfunction FormInput(props: FormInputProps) {\n  const {label, description, onChange, value, readOnly, placeholder, type = 'text'} = props\n  const id = useId()\n  const handleChange = useCallback(\n    (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange(e.currentTarget.value),\n    [onChange],\n  )\n  return (\n    <Stack gap={3}>\n      <Label as=\"label\" muted htmlFor={id}>\n        {label}\n      </Label>\n      {description && (\n        <Box>\n          <Text size={1} muted>\n            {description}\n          </Text>\n        </Box>\n      )}\n      {type === 'text' ? (\n        <TextInput\n          id={id}\n          value={value}\n          onChange={handleChange}\n          readOnly={readOnly}\n          placeholder={placeholder}\n        />\n      ) : (\n        <TextArea\n          id={id}\n          value={value}\n          rows={3}\n          onChange={handleChange}\n          readOnly={readOnly}\n          placeholder={placeholder}\n          style={{resize: 'vertical'}}\n        />\n      )}\n    </Stack>\n  )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Box, Button, Card, Dialog, Spinner, Stack, Text} from '@sanity/ui'\nimport {type SubmitEvent, useCallback, useEffect, useId, useRef, useState} from 'react'\nimport {useSchema} from 'sanity'\n\nimport {type IndexState, type NamedIndex} from '../api/embeddingsApi'\nimport {useApiClient} from '../api/embeddingsApiHooks'\nimport {useDefaultIndex} from './hooks'\nimport {IndexFormInput} from './IndexFormInput'\n\nexport function EditIndexDialog(props: {\n  open: boolean\n  onClose: () => void\n  onSubmit: (index: IndexState) => void\n}) {\n  const {open, onClose, onSubmit} = props\n  const id = useId()\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (!open) {\n      return\n    }\n    setTimeout(() => ref.current?.querySelector('input')?.focus())\n  }, [ref, open])\n\n  const handleSubmit = useCallback(\n    (index: IndexState) => {\n      onSubmit(index)\n      onClose()\n    },\n    [onSubmit, onClose],\n  )\n\n  return open ? (\n    <Dialog id={id} width={1} ref={ref} onClose={onClose} header=\"Create embeddings index\">\n      <Stack padding={4} gap={5}>\n        <IndexEditor readOnly={false} onSubmit={handleSubmit} />\n      </Stack>\n    </Dialog>\n  ) : null\n}\n\nexport function IndexEditor(props: {\n  index?: Partial<NamedIndex>\n  readOnly: boolean\n  onSubmit?: (index: IndexState) => void\n}) {\n  const {readOnly, index: selectedIndex, onSubmit} = props\n  const client = useApiClient()\n  const schema = useSchema()\n  const defaultIndex = useDefaultIndex(schema, client.config().dataset ?? '')\n  const [errors, setErrors] = useState<string[] | undefined>()\n  const [loading, setLoading] = useState<boolean>()\n  const [index, setIndex] = useState<Partial<NamedIndex>>(() => ({\n    ...defaultIndex,\n    ...selectedIndex,\n  }))\n\n  // oxlint-disable-next-line react/set-state-in-effect\n  useEffect(() => setIndex(selectedIndex ?? {...defaultIndex}), [selectedIndex, defaultIndex])\n\n  const handleSubmit = useCallback(\n    (e: SubmitEvent<HTMLFormElement>) => {\n      e.preventDefault()\n      if (readOnly) {\n        return\n      }\n\n      const validationErrors: string[] = []\n\n      if (!index.indexName) {\n        validationErrors.push('Index name is required')\n      } else if (!index.indexName.match(/^[a-zA-Z0-9-_]+$/g)) {\n        validationErrors.push('Index name can only contain the letters a-z, numbers - and _')\n      }\n\n      if (!index.dataset) {\n        validationErrors.push('Dataset is required')\n      }\n\n      if (!index.filter) {\n        validationErrors.push('Filter is required')\n      }\n\n      if (!index.projection) {\n        validationErrors.push('Projection is required')\n      }\n\n      if (validationErrors.length) {\n        setErrors(validationErrors)\n        return\n      }\n\n      const {projectId} = client.config()\n      setLoading(true)\n      client\n        .request({\n          method: 'POST',\n          url: `/embeddings-index/${index.dataset}?projectId=${projectId}`,\n          body: {\n            indexName: index.indexName,\n            projection: index.projection,\n            filter: index.filter,\n          },\n        })\n        .then((response: {index: IndexState}) => {\n          if (onSubmit) {\n            onSubmit(response.index)\n          }\n        })\n        .catch((err: any) => {\n          console.error(err)\n          setErrors([err.message])\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    },\n    [index, readOnly, onSubmit, client],\n  )\n\n  return (\n    <form onSubmit={handleSubmit}>\n      <Stack gap={4}>\n        {errors?.length ? (\n          <Card tone=\"critical\" border padding={2}>\n            <Text>\n              <ul style={{marginLeft: -10}}>\n                {errors?.map((error, i) => (\n                  <li\n                    // oxlint-disable-next-line react/no-array-index-key\n                    key={`${error}-${i}`}\n                  >\n                    {error}\n                  </li>\n                ))}\n              </ul>\n            </Text>\n          </Card>\n        ) : null}\n        <IndexFormInput\n          label=\"Index name\"\n          placeholder={'Name of index without spaces...'}\n          index={index}\n          prop=\"indexName\"\n          onChange={setIndex}\n          readOnly={readOnly}\n        />\n        <IndexFormInput label=\"Dataset\" index={index} prop=\"dataset\" onChange={setIndex} readOnly />\n        <IndexFormInput\n          label=\"Filter\"\n          description=\"Must be a valid GROQ filter\"\n          placeholder={defaultIndex.filter}\n          index={index}\n          prop=\"filter\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />\n        <IndexFormInput\n          label=\"Projection\"\n          description=\"Must be a valid GROQ projection, starting { and ending with }\"\n          placeholder={defaultIndex.projection}\n          index={index}\n          prop=\"projection\"\n          onChange={setIndex}\n          readOnly={readOnly}\n          type=\"textarea\"\n        />\n        {onSubmit && (\n          <Button\n            type=\"submit\"\n            text=\"Create index\"\n            icon={\n              loading ? (\n                <Box style={{marginTop: 5}}>\n                  <Spinner />\n                </Box>\n              ) : (\n                AddIcon\n              )\n            }\n            disabled={readOnly || loading}\n            tone=\"primary\"\n          />\n        )}\n      </Stack>\n    </form>\n  )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Button, type ButtonProps, Card} from '@sanity/ui'\nimport {type CSSProperties, useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {\n  DefaultPreview,\n  getPreviewStateObservable,\n  getPreviewValueWithFallback,\n  SanityDefaultPreview,\n  type SanityDocument,\n  type SchemaType,\n  useDocumentPreviewStore,\n  useSchema,\n} from 'sanity'\nimport {useIntentLink} from 'sanity/router'\n\ninterface ResultPreviewProps {\n  documentId: string\n  schemaTypeName: string\n  button?: boolean\n  style?: CSSProperties\n}\n\nexport function DocumentPreview({\n  documentId,\n  style,\n  schemaTypeName,\n  ...buttonProps\n}: ResultPreviewProps & ButtonProps) {\n  const schema = useSchema()\n  const schemaType = schemaTypeName ? schema.get(schemaTypeName) : undefined\n\n  if (!schemaTypeName) {\n    return (\n      <Card style={{minHeight: '36px'}}>\n        <DefaultPreview\n          withShadow={false}\n          withBorder={false}\n          title={'Loading...'}\n          schemaType={schemaType}\n          isPlaceholder\n        />\n      </Card>\n    )\n  }\n\n  if (!schemaType) {\n    return (\n      <Card>\n        <DefaultPreview\n          withShadow={false}\n          withBorder={false}\n          media={<ErrorOutlineIcon />}\n          title={\n            <>\n              Unknown type <code>{schemaTypeName ?? 'N/A'}</code> for {documentId}\n            </>\n          }\n        />\n      </Card>\n    )\n  }\n\n  return (\n    <DocumentPreviewInner\n      documentId={documentId}\n      schemaTypeName={schemaTypeName}\n      schemaType={schemaType}\n      style={style}\n      {...buttonProps}\n    />\n  )\n}\n\nfunction DocumentPreviewInner({\n  documentId,\n  schemaType,\n  style,\n  button,\n}: ResultPreviewProps & {schemaType: SchemaType} & ButtonProps) {\n  const documentPreviewStore = useDocumentPreviewStore()\n\n  const previewStateObservable = useMemo(\n    () => getPreviewStateObservable(documentPreviewStore, schemaType, documentId),\n    [documentId, documentPreviewStore, schemaType],\n  )\n\n  const {\n    snapshot,\n    original,\n    isLoading: previewIsLoading,\n  } = useObservable(previewStateObservable, {\n    snapshot: null,\n    isLoading: true,\n    original: null,\n  })\n\n  const sanityDocument = useMemo(() => {\n    return {\n      _id: documentId,\n      _type: schemaType?.name,\n    } as SanityDocument\n  }, [documentId, schemaType?.name])\n\n  const {onClick: onIntentClick, href} = useIntentLink({\n    intent: 'edit',\n    params: {\n      id: documentId,\n      type: schemaType?.name,\n    },\n  })\n\n  const preview = (\n    <SanityDefaultPreview\n      {...getPreviewValueWithFallback({\n        snapshot,\n        original,\n        fallback: sanityDocument,\n      })}\n      isPlaceholder={previewIsLoading ?? true}\n      layout=\"default\"\n      icon={schemaType?.icon}\n    />\n  )\n  if (button) {\n    return (\n      <Button\n        as={'a'}\n        href={href}\n        onClick={onIntentClick}\n        mode=\"ghost\"\n        style={{width: '100%', ...style}}\n      >\n        {preview}\n      </Button>\n    )\n  }\n  return <Box style={{width: '100%'}}>{preview}</Box>\n}\n","import {Box, Button, Flex, Text} from '@sanity/ui'\nimport {Autocomplete, type AutocompleteOpenButtonProps} from '@sanity/ui/autocomplete'\nimport {\n  type FocusEventHandler,\n  type Ref,\n  useCallback,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport {typed} from 'sanity'\n\nimport {queryIndex, type QueryResult} from '../api/embeddingsApi'\nimport {useApiClient} from '../api/embeddingsApiHooks'\nimport {DocumentPreview} from '../preview/DocumentPreview'\nimport {type EmbeddingsIndexConfig} from '../schemas/typeDefExtensions'\n\nexport interface SemanticSearchAutocompleteProps {\n  indexConfig: EmbeddingsIndexConfig\n  getEmptySearchValue: () => string\n  typeFilter?: string[]\n  filterResult?: (hit: QueryResult) => boolean\n  onSelect?: (value: QueryResult) => void\n  onFocus?: FocusEventHandler<HTMLInputElement>\n  onBlur?: FocusEventHandler<HTMLInputElement>\n  readOnly?: boolean\n}\n\ninterface Option {\n  result: QueryResult\n  value: string\n}\n\nconst NO_RESULTS_VALUE = '' as const\n\ninterface NoResultOption {\n  value: string\n}\n\nconst NO_OPTIONS: NoResultOption[] = []\nconst NO_FILTER = () => true\n\nexport function SemanticSearchAutocomplete(\n  props: SemanticSearchAutocompleteProps & {ref?: Ref<HTMLInputElement>},\n) {\n  const {\n    indexConfig,\n    filterResult,\n    getEmptySearchValue,\n    readOnly,\n    onFocus,\n    onBlur,\n    onSelect,\n    typeFilter,\n    ref,\n  } = props\n  const id = useId()\n  const [query, setQuery] = useState('')\n  const queryRef = useRef(query)\n  const debouncedQuery = useDebouncedValue(query, 300)\n  const prevDebouncedQuery = useRef(debouncedQuery)\n\n  const [searching, setSearching] = useState(false)\n  const [options, setOptions] = useState<Option[] | NoResultOption[]>(NO_OPTIONS)\n\n  const client = useApiClient()\n\n  const runIndexQuery = useCallback(\n    (queryString: string) => {\n      setSearching(true)\n      const indexName = indexConfig?.indexName\n      const maxResults = indexConfig?.maxResults\n\n      if (!indexName) {\n        throw new Error(`Reference option embeddingsIndex.indexName is required, but was missing`)\n      }\n\n      queryIndex(\n        {\n          query: queryString.trim().length ? queryString : (getEmptySearchValue() ?? ''),\n          indexName,\n          maxResults,\n          filter: {\n            type: typeFilter,\n          },\n        },\n        client,\n      )\n        .then((result: QueryResult[]) => {\n          if (queryRef.current === queryString) {\n            setSearching(false)\n            setOptions([])\n            const resultOptions = result\n              .filter((hit) => (filterResult ? filterResult(hit) : true))\n              .map((r) => typed<Option>({result: r, value: r.value.documentId}))\n            if (resultOptions.length) {\n              setOptions(resultOptions)\n            } else {\n              setOptions([{value: NO_RESULTS_VALUE}])\n            }\n          }\n        })\n        .catch((e) => {\n          console.error(e)\n          if (queryRef.current === queryString) {\n            setSearching(false)\n            setOptions([{value: NO_RESULTS_VALUE}])\n          }\n        })\n    },\n    [client, indexConfig, getEmptySearchValue, filterResult, typeFilter],\n  )\n\n  useEffect(() => {\n    if (prevDebouncedQuery.current !== debouncedQuery) {\n      runIndexQuery(debouncedQuery)\n    }\n    prevDebouncedQuery.current = debouncedQuery\n  }, [debouncedQuery, runIndexQuery])\n\n  const openButtonConfig: AutocompleteOpenButtonProps = useMemo(\n    () => ({onClick: () => runIndexQuery(queryRef.current)}),\n    [runIndexQuery, queryRef],\n  )\n\n  const handleQueryChange = useCallback(\n    (newValue: string | null) => {\n      const newQuery = newValue ?? ''\n      queryRef.current = newQuery\n      setQuery(newQuery)\n    },\n    [setQuery],\n  )\n\n  const handleChange = useCallback(\n    (value: string) => {\n      if (value === NO_RESULTS_VALUE) {\n        setOptions(NO_OPTIONS)\n        return\n      }\n      const option = (options as Option[])\n        .filter((r): r is Option => 'result' in r)\n        .find((r) => r.result.value.documentId === value)\n      if (option && onSelect) {\n        onSelect(option.result)\n      }\n    },\n    [onSelect, options],\n  )\n\n  return (\n    <Autocomplete\n      id={id}\n      ref={ref}\n      data-testid=\"semantic-autocomplete\"\n      placeholder=\"Type to search...\"\n      openButton={openButtonConfig}\n      onFocus={onFocus}\n      onChange={handleChange}\n      loading={searching}\n      onBlur={onBlur}\n      readOnly={readOnly}\n      filterOption={NO_FILTER}\n      onQueryChange={handleQueryChange}\n      options={options}\n      renderOption={AutocompleteOption}\n    />\n  )\n}\n\nfunction AutocompleteOption(props: Option | NoResultOption) {\n  if ('result' in props) {\n    const value = props.result.value\n    return (\n      <Button mode=\"bleed\" padding={1} style={{width: '100%'}}>\n        <Flex gap={2} align=\"center\">\n          <Box flex={1}>\n            <DocumentPreview documentId={value.documentId} schemaTypeName={value.type} />\n          </Box>\n          <Box padding={2}>\n            <Text size={1} muted title={'Relevance'}>\n              {Math.floor(props.result.score * 100)}%\n            </Text>\n          </Box>\n        </Flex>\n      </Button>\n    )\n  }\n\n  return (\n    <Button mode=\"bleed\" padding={1} style={{width: '100%'}} disabled>\n      <Flex gap={2} align=\"center\">\n        No results.\n      </Flex>\n    </Button>\n  )\n}\n\nfunction useDebouncedValue<T>(value: T, ms: number) {\n  const [debouncedValue, setDebouncedValue] = useState(value)\n\n  useEffect(() => {\n    const timeoutId = setTimeout(() => {\n      setDebouncedValue(value)\n    }, ms)\n    return () => clearTimeout(timeoutId)\n  }, [value, ms])\n\n  return debouncedValue\n}\n","import {useCallback, useMemo} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {type QueryResult} from '../api/embeddingsApi'\nimport {SemanticSearchAutocomplete} from '../referenceInput/SemanticSearchAutocomplete'\nimport {type EmbeddingsIndexConfig} from '../schemas/typeDefExtensions'\n\nexport function QueryIndex(props: {indexName: string}) {\n  const {indexName} = props\n  const getEmpty = useCallback(() => 'anything', [])\n  const indexConfig: EmbeddingsIndexConfig = useMemo(\n    () => ({indexName, maxResults: 8}),\n    [indexName],\n  )\n\n  const {resolveIntentLink, navigateUrl} = useRouter()\n  const onSelect = useCallback(\n    (hit: QueryResult) => {\n      navigateUrl({\n        path: resolveIntentLink('edit', {id: hit.value.documentId, type: hit.value.type}),\n      })\n    },\n    [resolveIntentLink, navigateUrl],\n  )\n  return (\n    <SemanticSearchAutocomplete\n      getEmptySearchValue={getEmpty}\n      indexConfig={indexConfig}\n      onSelect={onSelect}\n    />\n  )\n}\n","import {EllipsisVerticalIcon} from '@sanity/icons/EllipsisVertical'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Flex, Heading, Label, Stack, Text} from '@sanity/ui'\nimport {Menu, MenuButton, MenuItem} from '@sanity/ui/menu'\nimport {useCallback} from 'react'\n\nimport {type IndexState} from '../api/embeddingsApi'\nimport {IndexEditor} from './IndexEditor'\nimport {QueryIndex} from './QueryIndex'\n\nexport interface IndexInfoProps {\n  selectedIndex: IndexState\n  onDeleteIndex: (index: IndexState) => void\n}\n\nexport function IndexInfo({selectedIndex, onDeleteIndex}: IndexInfoProps) {\n  const handleDelete = useCallback(\n    () => onDeleteIndex(selectedIndex),\n    [selectedIndex, onDeleteIndex],\n  )\n  return (\n    <Stack gap={4} flex={1}>\n      <Flex align=\"center\" flex={1} gap={2}>\n        <Box flex={1}>\n          <Heading>Index: {selectedIndex?.indexName ?? 'Untitled'}</Heading>\n        </Box>\n        <Box>\n          <MenuButton\n            button={\n              <Button\n                title=\"Open index actions\"\n                icon={EllipsisVerticalIcon}\n                padding={2}\n                mode=\"ghost\"\n              />\n            }\n            id={`button-${selectedIndex.indexName}`}\n            menu={\n              <Menu>\n                <MenuItem\n                  text=\"Delete index\"\n                  icon={TrashIcon}\n                  tone=\"critical\"\n                  onClick={handleDelete}\n                />\n              </Menu>\n            }\n            popover={{placement: 'right'}}\n          />\n        </Box>\n      </Flex>\n\n      <Flex gap={6}>\n        <Stack gap={4} flex={1} style={{maxWidth: 600}}>\n          <Box>\n            <IndexEditor index={selectedIndex} readOnly />\n          </Box>\n          <IndexStatus selectedIndex={selectedIndex} />\n        </Stack>\n\n        <Stack gap={3} flex={1}>\n          <Label muted>Query index</Label>\n          <QueryIndex indexName={selectedIndex.indexName} key={selectedIndex.indexName} />\n        </Stack>\n      </Flex>\n    </Stack>\n  )\n}\n\nfunction IndexStatus({selectedIndex}: {selectedIndex: IndexState}) {\n  return (\n    <Stack gap={4} flex={1}>\n      <Flex gap={2} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Status\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>{selectedIndex.status}</Text>\n        </Stack>\n      </Flex>\n      <Flex gap={5} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Indexing progress\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>\n            {selectedIndex.startDocumentCount - selectedIndex.remainingDocumentCount} /{' '}\n            {selectedIndex.startDocumentCount}\n          </Text>\n        </Stack>\n      </Flex>\n      <Flex gap={5} align=\"center\">\n        <Box flex={1}>\n          <Label size={1} muted>\n            Failed documents\n          </Label>\n        </Box>\n        <Stack gap={2}>\n          <Text>{selectedIndex.failedDocumentCount}</Text>\n        </Stack>\n      </Flex>\n    </Stack>\n  )\n}\n","import {Box, Button, Card, Flex, Label, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport {type IndexState} from '../api/embeddingsApi'\n\nexport interface IndexListProps {\n  loading: boolean\n  selectedIndex?: IndexState\n  indexes: IndexState[]\n  onIndexSelected: (index: IndexState) => void\n}\n\nexport function IndexList(props: IndexListProps) {\n  const {loading, selectedIndex, indexes, onIndexSelected} = props\n  return (\n    <Card tone=\"default\" style={{opacity: loading ? 0.5 : 1}}>\n      <Stack gap={2}>\n        <Card borderBottom flex={1} paddingBottom={2} padding={3}>\n          <Flex>\n            <Box flex={1}>\n              <Label muted>Index name</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Dataset</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Status</Label>\n            </Box>\n            <Box flex={1}>\n              <Label muted>Progress</Label>\n            </Box>\n          </Flex>\n        </Card>\n        {indexes.length ? (\n          <Stack gap={2} style={{maxHeight: 200, overflow: 'auto'}}>\n            {indexes.map((index) => (\n              <IndexRow\n                selectedIndex={selectedIndex}\n                index={index}\n                onIndexSelected={onIndexSelected}\n                key={index.indexName}\n              />\n            ))}\n          </Stack>\n        ) : (\n          <Text muted>No indexes found.</Text>\n        )}\n      </Stack>\n    </Card>\n  )\n}\n\nfunction IndexRow(props: {\n  selectedIndex?: IndexState\n  index: IndexState\n  onIndexSelected: (index: IndexState) => void\n}) {\n  const {selectedIndex, index, onIndexSelected} = props\n  const onSelect = useCallback(() => onIndexSelected(index), [onIndexSelected, index])\n  return (\n    <Button\n      tone={selectedIndex?.indexName === index.indexName ? 'primary' : 'default'}\n      mode={selectedIndex?.indexName === index.indexName ? 'default' : 'ghost'}\n      onClick={onSelect}\n      key={index.indexName}\n      padding={3}\n    >\n      <Flex>\n        <Box flex={1}>\n          <strong>{index.indexName}</strong>\n        </Box>\n        <Box flex={1}>{index.dataset}</Box>\n        <Box flex={1}>{index.status}</Box>\n        <Box flex={1}>\n          {index.startDocumentCount\n            ? Math.floor(\n                ((index.startDocumentCount - index.remainingDocumentCount) /\n                  index.startDocumentCount) *\n                  100,\n              )\n            : '?'}\n          %\n        </Box>\n      </Flex>\n    </Button>\n  )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {UndoIcon} from '@sanity/icons/Undo'\nimport {Box, Button, Card, Flex, Heading, Spinner, Stack} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {deleteIndex, getIndexes, type IndexState, type NamedIndex} from '../api/embeddingsApi'\nimport {useApiClient} from '../api/embeddingsApiHooks'\nimport {FeatureDisabledNotice, FeatureError, useIsFeatureEnabled} from '../api/isEnabled'\nimport {EditIndexDialog} from './IndexEditor'\nimport {IndexInfo} from './IndexInfo'\nimport {IndexList} from './IndexList'\n\nexport function EmbeddingsIndexTool() {\n  const featureState = useIsFeatureEnabled()\n  return (\n    <Card flex={1}>\n      <Flex justify=\"center\" flex={1}>\n        {featureState === 'error' ? (\n          <Box padding={4}>\n            <FeatureError />\n          </Box>\n        ) : null}\n\n        {featureState === 'disabled' ? (\n          <Box padding={4}>\n            <FeatureDisabledNotice urlSuffix=\"?ref=embeddings-tab\" />\n          </Box>\n        ) : null}\n\n        {featureState === 'loading' ? (\n          <Box padding={6}>\n            <Spinner size={4} />\n          </Box>\n        ) : null}\n\n        {featureState === 'enabled' ? (\n          <Card flex={1} style={{maxWidth: 1200}} padding={5}>\n            <Indexes />\n          </Card>\n        ) : null}\n      </Flex>\n    </Card>\n  )\n}\n\nconst NO_INDEXES: IndexState[] = []\n\nfunction Indexes() {\n  const client = useApiClient()\n  const [indexes, setIndexes] = useState<IndexState[]>(NO_INDEXES)\n  const [loading, setLoading] = useState(false)\n  const [error, setError] = useState(false)\n  const [createIndexOpen, setCreateIndexOpen] = useState(false)\n  const [selectedIndex, setSelectedIndex] = useState<IndexState | undefined>(undefined)\n\n  const onCreateIndexClose = useCallback(() => setCreateIndexOpen(false), [])\n\n  useEffect(() => {\n    // oxlint-disable-next-line react/set-state-in-effect\n    setSelectedIndex(indexes.find((i) => i.indexName === selectedIndex?.indexName))\n  }, [indexes, selectedIndex])\n\n  const updateIndexes = useCallback(() => {\n    setLoading(true)\n    setError(false)\n    getIndexes(client)\n      .then((response: IndexState[]) => {\n        setLoading(false)\n        setIndexes(response)\n      })\n      .catch((e) => {\n        console.error(e)\n        setError(true)\n      })\n      .finally(() => {\n        setLoading(false)\n      })\n  }, [client])\n\n  const deleteNamedIndex = useCallback(\n    (index: NamedIndex) => {\n      if (\n        !confirm(`Are you sure you want to delete ${index.indexName} for dataset ${index.dataset}?`)\n      ) {\n        return\n      }\n      setLoading(true)\n      setError(false)\n      deleteIndex(index.indexName, client)\n        .then(() => {\n          setTimeout(() => updateIndexes())\n        })\n        .catch((e) => {\n          console.error(e)\n          setError(true)\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n    },\n    [client, updateIndexes],\n  )\n\n  const onSelectIndex = useCallback(\n    (index: IndexState) => {\n      setSelectedIndex(index)\n      updateIndexes()\n    },\n    [setSelectedIndex, updateIndexes],\n  )\n\n  useEffect(() => {\n    // oxlint-disable-next-line react/set-state-in-effect\n    updateIndexes()\n  }, [updateIndexes])\n\n  const openCreate = useCallback(() => setCreateIndexOpen(true), [])\n  const onSubmit = useCallback(\n    (index: IndexState) => {\n      setIndexes((current) => [...current, index])\n      setSelectedIndex(index)\n      updateIndexes()\n    },\n    [updateIndexes],\n  )\n  return (\n    <Stack gap={4}>\n      <Flex gap={2} align=\"center\" style={{height: 30}}>\n        <Box flex={1}>\n          <Heading size={1}>Embeddings indexes</Heading>\n        </Box>\n        <Box style={{justifySelf: 'flex-end'}}>\n          <Button\n            icon={AddIcon}\n            text={'New index'}\n            tone=\"default\"\n            mode=\"ghost\"\n            onClick={openCreate}\n          />\n        </Box>\n        <Button\n          icon={loading ? <Spinner /> : UndoIcon}\n          title={'Refresh index list'}\n          tone=\"default\"\n          mode=\"bleed\"\n          onClick={updateIndexes}\n          disabled={loading}\n        />\n      </Flex>\n      {error ? (\n        <Card tone=\"critical\" padding={2} border>\n          An error occurred. See console for details.\n        </Card>\n      ) : null}\n      <IndexList\n        loading={loading}\n        indexes={indexes}\n        selectedIndex={selectedIndex}\n        onIndexSelected={onSelectIndex}\n      />\n      {selectedIndex && (\n        <IndexInfo selectedIndex={selectedIndex} onDeleteIndex={deleteNamedIndex} />\n      )}\n      <EditIndexDialog open={createIndexOpen} onClose={onCreateIndexClose} onSubmit={onSubmit} />\n    </Stack>\n  )\n}\n","import {EarthGlobeIcon} from '@sanity/icons/EarthGlobe'\nimport {definePlugin, type Tool} from 'sanity'\n\nimport {EmbeddingsIndexTool} from './EmbeddingsIndexTool'\n\nconst embeddingsIndexTool: Tool = {\n  name: 'embeddings-index',\n  title: 'Embeddings',\n  icon: EarthGlobeIcon,\n  component: EmbeddingsIndexTool,\n}\n\nexport const embeddingsIndexDashboard = definePlugin({\n  name: '@sanity/embeddings-index-dashboard',\n  tools: [embeddingsIndexTool],\n})\n","export function publicId(id: string): string {\n  return id.replace('drafts.', '')\n}\n","import {EarthGlobeIcon} from '@sanity/icons/EarthGlobe'\nimport {LinkIcon} from '@sanity/icons/Link'\nimport {Box, Button, Flex, Spinner} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {\n  type ObjectInputProps,\n  type ReferenceBaseOptions,\n  type ReferenceSchemaType,\n  set,\n  setIfMissing,\n  unset,\n} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {type QueryResult} from '../api/embeddingsApi'\nimport {FeatureDisabledNotice, FeatureError, useIsFeatureEnabledContext} from '../api/isEnabled'\nimport {type EmbeddingsIndexConfig} from '../schemas/typeDefExtensions'\nimport {publicId} from '../utils/id'\nimport {SemanticSearchAutocomplete} from './SemanticSearchAutocomplete'\n\nfunction useEmeddingsConfig(\n  embeddingsIndexConfig: ReferenceBaseOptions['embeddingsIndex'],\n  defaultConfig: EmbeddingsIndexConfig | undefined,\n) {\n  return useMemo(() => {\n    if (embeddingsIndexConfig === true || !embeddingsIndexConfig) {\n      if (!defaultConfig?.indexName) {\n        throw new Error(\n          'Default embeddingsIndex config is missing. When options.embeddingsIndex: true, embeddingsIndexReferenceInput plugin config is required.',\n        )\n      }\n      return defaultConfig\n    }\n\n    const finalConfig = {\n      ...defaultConfig,\n      ...embeddingsIndexConfig,\n    }\n\n    if (!finalConfig?.indexName) {\n      throw new Error(\n        'indexName is missing. Either set it in options.embeddingsIndex or configure defaults using plugin config.',\n      )\n    }\n\n    return finalConfig\n  }, [defaultConfig, embeddingsIndexConfig])\n}\n\nexport function SemanticSearchReferenceInput(\n  props: ObjectInputProps & {defaultConfig?: EmbeddingsIndexConfig},\n) {\n  const embeddingsIndexConfig = (props.schemaType as ReferenceSchemaType)?.options?.embeddingsIndex\n\n  const config = useEmeddingsConfig(embeddingsIndexConfig, props.defaultConfig)\n\n  const defaultEnabled = config.searchMode === 'embeddings'\n\n  const featureState = useIsFeatureEnabledContext()\n\n  const [semantic, setSemantic] = useState<boolean>(defaultEnabled)\n  const toggleSemantic = useCallback(() => setSemantic((current) => !current), [])\n\n  return (\n    <Flex gap={2} flex={1} style={{width: '100%'}}>\n      {semantic && featureState == 'loading' ? (\n        <Box padding={2}>\n          <Spinner />\n        </Box>\n      ) : null}\n\n      {semantic && featureState == 'disabled' ? (\n        <FeatureDisabledNotice urlSuffix=\"?ref=embeddings-ref\" />\n      ) : null}\n\n      {semantic && featureState === 'error' ? (\n        <Box padding={4}>\n          <FeatureError />\n        </Box>\n      ) : null}\n\n      <Box flex={1} style={{maxHeight: 36, overflow: 'hidden'}}>\n        {semantic && featureState == 'enabled' ? (\n          <SemanticSearchInput {...props} indexConfig={config} />\n        ) : (\n          props.renderDefault(props)\n        )}\n      </Box>\n      <Button\n        icon={semantic ? EarthGlobeIcon : LinkIcon}\n        onClick={toggleSemantic}\n        mode=\"bleed\"\n        title={\n          semantic ? 'Switch to standard reference search' : 'Switch to semantic reference search'\n        }\n      />\n    </Flex>\n  )\n}\n\nfunction SemanticSearchInput(props: ObjectInputProps & {indexConfig: EmbeddingsIndexConfig}) {\n  const {indexConfig, onPathFocus, onChange, readOnly, schemaType, value} = props\n\n  const {value: currentDocument} = useDocumentPane()\n  const docRef = useRef(currentDocument)\n  const autocompleteRef = useRef<HTMLInputElement>(null)\n\n  useEffect(() => {\n    docRef.current = currentDocument\n  }, [currentDocument])\n\n  useEffect(() => {\n    // if this component is rendered, and there is a value, replace was selected\n    if (value?.['_ref']) {\n      autocompleteRef.current?.focus()\n    }\n    // intentional empty deps — focus once on mount when replacing an existing reference\n    // oxlint-disable-next-line react/rule-suppression\n    // oxlint-disable-next-line react/exhaustive-deps\n  }, [])\n\n  const handleFocus = useCallback(() => onPathFocus(['_ref']), [onPathFocus])\n  const handleBlur = useCallback(() => onPathFocus([]), [onPathFocus])\n\n  const handleChange = useCallback(\n    (result: QueryResult) => {\n      if (!result) {\n        onChange(unset())\n        onPathFocus([])\n        return\n      }\n      const patches = [\n        setIfMissing({}),\n        set(schemaType.name, ['_type']),\n        set(publicId(result.value.documentId), ['_ref']),\n        unset(['_weak']),\n        unset(['_strengthenOnPublish']),\n      ]\n\n      onChange(patches)\n      // Move focus away from _ref and one level up\n      onPathFocus([])\n    },\n    [onChange, onPathFocus, schemaType.name],\n  )\n\n  const filterResult = useCallback(\n    (r: QueryResult) => {\n      const currentId = docRef.current?._id\n      return !currentId || r.value.documentId !== publicId(currentId)\n    },\n    [docRef],\n  )\n\n  const getEmptySearchValue = useCallback(() => JSON.stringify(docRef.current), [docRef])\n  const typeFilter = useMemo(\n    () => (schemaType as ReferenceSchemaType).to.map((refType) => refType.name),\n    [schemaType],\n  )\n\n  return (\n    <SemanticSearchAutocomplete\n      ref={autocompleteRef}\n      typeFilter={typeFilter}\n      indexConfig={indexConfig}\n      onSelect={handleChange}\n      onFocus={handleFocus}\n      onBlur={handleBlur}\n      getEmptySearchValue={getEmptySearchValue}\n      filterResult={filterResult}\n      readOnly={readOnly}\n    />\n  )\n}\n","import {\n  definePlugin,\n  isObjectInputProps,\n  type ObjectInputProps,\n  type ReferenceSchemaType,\n} from 'sanity'\n\nimport {FeatureEnabledProvider} from '../api/isEnabled'\nimport {type EmbeddingsIndexConfig} from '../schemas/typeDefExtensions'\nimport {isType} from '../utils/types'\nimport {SemanticSearchReferenceInput} from './SemanticSearchReferenceInput'\n\nexport const embeddingsIndexReferenceInput = definePlugin<EmbeddingsIndexConfig | void>(\n  (defaultConfig) => {\n    const config = typeof defaultConfig === 'object' ? defaultConfig : undefined\n\n    return {\n      name: '@sanity/embeddings-index-reference-input',\n      studio: {\n        components: {\n          layout: (props) => {\n            return <FeatureEnabledProvider>{props.renderDefault(props)}</FeatureEnabledProvider>\n          },\n        },\n      },\n      form: {\n        components: {\n          input: (props) => {\n            const embeddingsIndexConfig = (props.schemaType as ReferenceSchemaType)?.options\n              ?.embeddingsIndex\n            if (\n              isObjectInputProps(props) &&\n              isType(props.schemaType, 'reference') &&\n              (embeddingsIndexConfig === true || embeddingsIndexConfig?.indexName)\n            ) {\n              return (\n                <SemanticSearchReferenceInput\n                  {...(props as ObjectInputProps)}\n                  defaultConfig={config}\n                />\n              )\n            }\n            return props.renderDefault(props)\n          },\n        },\n      },\n    }\n  },\n)\n"],"mappings":"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"}
\ No newline at end of file