@sanity/embeddings-index-ui

4.0.64.0.7
~

Modified (5 files)

Index: package/dist/index.js
===================================================================
--- package/dist/index.js
+++ package/dist/index.js
@@ -459,9 +459,9 @@
 			filter: { type: typeFilter }
 		}, client).then((result) => {
 			if (queryRef.current === queryString) {
 				setSearching(!1), setOptions([]);
-				let resultOptions = result.filter((hit) => filterResult ? filterResult(hit) : !0).map(_temp$2);
+				let resultOptions = result.filter((hit) => !filterResult || filterResult(hit)).map(_temp$2);
 				resultOptions.length ? setOptions(resultOptions) : setOptions([{ value: "" }]);
 			}
 		}).catch((e) => {
 			console.error(e), queryRef.current === queryString && (setSearching(!1), setOptions([{ value: "" }]));
@@ -1110,15 +1110,16 @@
 		if (!result) {
 			onChange(unset()), onPathFocus([]);
 			return;
 		}
-		onChange([
+		let patches = [
 			setIfMissing({}),
 			set(schemaType.name, ["_type"]),
 			set(publicId(result.value.documentId), ["_ref"]),
 			unset(["_weak"]),
 			unset(["_strengthenOnPublish"])
-		]), onPathFocus([]);
+		];
+		onChange(patches), onPathFocus([]);
 	}, [
 		onChange,
 		onPathFocus,
 		schemaType.name
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sanity/embeddings-index-ui",
-  "version": "4.0.6",
+  "version": "4.0.7",
   "description": "Various Sanity Studio plugins for integrating with the embeddings index API",
   "keywords": [
     "sanity",
     "sanity-plugin"
@@ -27,23 +27,23 @@
     "./package.json": "./package.json"
   },
   "dependencies": {
     "@sanity/icons": "^5.0.0",
-    "@sanity/ui": "^3.3.1",
+    "@sanity/ui": "^3.3.5",
     "react-rx": "^4.2.3"
   },
   "devDependencies": {
     "@sanity/tsconfig": "^2.2.0",
-    "@sanity/tsdown-config": "^0.11.0",
-    "@types/node": "^24.13.2",
+    "@sanity/tsdown-config": "^0.13.1",
+    "@types/node": "^24.13.3",
     "@types/react": "^19.2.17",
     "@types/react-dom": "^19.2.3",
     "babel-plugin-react-compiler": "^1.0.0",
     "react": "^19.2.7",
     "react-dom": "^19.2.7",
     "sanity": "^6.3.0",
     "styled-components": "^6.4.3",
-    "tsdown": "^0.22.3"
+    "tsdown": "^0.22.5"
   },
   "peerDependencies": {
     "react": "^19.2",
     "react-dom": "^19.2",
Index: package/dist/index.d.ts.map
===================================================================
--- package/dist/index.d.ts.map
+++ package/dist/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","names":[],"sources":["../src/schemas/typeDefExtensions.ts","../src/embeddingsIndexDashboard/dashboardPlugin.ts","../src/referenceInput/referencePlugin.tsx","../src/api/embeddingsApi.ts"],"mappings":";UAAiB,qBAAA;;AAAjB;;EAIE,SAAA;EACA,UAAA;EADA;;;;AAUU;AACX;;;EADC,UAAA;AAAA;AAAA;EAAA,UAIU,oBAAA;IAOsC;;AAAA;;ACblD;;IDaI,eAAA,UAAyB,qBAAqB;EAAA;AAAA;AAAA,cCbrC,wBAAA,mBAAwB,MAAA;AAAA,cCAxB,6BAAA,mBAA6B,MAAA,QAAA,qBAAA;AAAA,UCVzB,UAAA;EACf,SAAA;EACA,OAAA;EACA,OAAA;EACA,UAAA;EACA,MAAA;AAAA;AAAA,UAGe,UAAA,SAAmB,UAAU;EAC5C,MAAA;EACA,kBAAA;EACA,sBAAA;EACA,mBAAA;AAAA;AAAA,UAGe,WAAA;EACf,KAAA;EACA,KAAA;IACE,UAAA;IACA,IAAA;EAAA;AAAA;AAAA,UAIa,WAAA;EACf,KAAA;EACA,SAAA;EACA,UAAA;EACA,MAAA;IACE,IAAA;EAAA;AAAA;AAAA,iBAIY,UAAA,CAAW,WAAA,EAAa,WAAA,EAAa,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,WAAA;AAAA,iBAiBpE,UAAA,CAAW,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,UAAA;AAAA,iBAS1C,WAAA,CAAY,SAAA,UAAmB,MAAA,EAAQ,YAAA,GAAe,OAAA,CAAQ,UAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../src/schemas/typeDefExtensions.ts","../src/embeddingsIndexDashboard/dashboardPlugin.ts","../src/referenceInput/referencePlugin.tsx","../src/api/embeddingsApi.ts"],"mappings":";UAAiB;;;;EAIf;EACA;;;;;;;;;EASA;;;YAIU;;;;;;;IAOR,yBAAyB;;;cCbhB,2CAAwB;cCAxB,gDAA6B,cAAA;UCVzB;EACf;EACA;EACA;EACA;EACA;;UAGe,mBAAmB;EAClC;EACA;EACA;EACA;;UAGe;EACf;EACA;IACE;IACA;;;UAIa;EACf;EACA;EACA;EACA;IACE;;;iBAIY,WAAW,aAAa,aAAa,QAAQ,eAAe,QAAQ;iBAiBpE,WAAW,QAAQ,eAAe,QAAQ;iBAS1C,YAAY,mBAAmB,QAAQ,eAAe,QAAQ"}
\ No newline at end of file
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","FormEvent","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","FormEvent","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","Autocomplete","AutocompleteOpenButtonProps","Box","Button","Flex","Text","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","Menu","MenuButton","MenuItem","Stack","Text","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","publicId","id","replace","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","HTMLInputElement","focus","handleFocus","handleBlur","handleChange","result","patches","name","documentId","filterResult","r","currentId","_id","getEmptySearchValue","JSON","stringify","typeFilter","to","map","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        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 FormEvent, 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: FormEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange(e.currentTarget.value),\n    [onChange],\n  )\n  return (\n    <Stack space={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 FormEvent, 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} space={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/react-compiler\n  useEffect(() => setIndex(selectedIndex ?? {...defaultIndex}), [selectedIndex, defaultIndex])\n\n  const handleSubmit = useCallback(\n    (e: FormEvent) => {\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 space={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 {Autocomplete, type AutocompleteOpenButtonProps, Box, Button, Flex, Text} from '@sanity/ui'\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 {\n  Box,\n  Button,\n  Flex,\n  Heading,\n  Label,\n  Menu,\n  MenuButton,\n  MenuItem,\n  Stack,\n  Text,\n} from '@sanity/ui'\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 space={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 space={4} flex={1} style={{maxWidth: 600}}>\n          <Box>\n            <IndexEditor index={selectedIndex} readOnly />\n          </Box>\n          <IndexStatus selectedIndex={selectedIndex} />\n        </Stack>\n\n        <Stack space={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 space={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 space={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 space={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 space={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 space={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 space={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/react-compiler\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/react-compiler\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 space={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\n    // eslint-disable-next-line react-hooks/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
+{"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","FormEvent","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","FormEvent","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","Autocomplete","AutocompleteOpenButtonProps","Box","Button","Flex","Text","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","Menu","MenuButton","MenuItem","Stack","Text","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","publicId","id","replace","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","HTMLInputElement","focus","handleFocus","handleBlur","handleChange","result","patches","name","documentId","filterResult","r","currentId","_id","getEmptySearchValue","JSON","stringify","typeFilter","to","map","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        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 FormEvent, 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: FormEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange(e.currentTarget.value),\n    [onChange],\n  )\n  return (\n    <Stack space={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 FormEvent, 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} space={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/react-compiler\n  useEffect(() => setIndex(selectedIndex ?? {...defaultIndex}), [selectedIndex, defaultIndex])\n\n  const handleSubmit = useCallback(\n    (e: FormEvent) => {\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 space={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 {Autocomplete, type AutocompleteOpenButtonProps, Box, Button, Flex, Text} from '@sanity/ui'\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 {\n  Box,\n  Button,\n  Flex,\n  Heading,\n  Label,\n  Menu,\n  MenuButton,\n  MenuItem,\n  Stack,\n  Text,\n} from '@sanity/ui'\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 space={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 space={4} flex={1} style={{maxWidth: 600}}>\n          <Box>\n            <IndexEditor index={selectedIndex} readOnly />\n          </Box>\n          <IndexStatus selectedIndex={selectedIndex} />\n        </Stack>\n\n        <Stack space={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 space={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 space={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 space={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 space={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 space={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 space={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/react-compiler\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/react-compiler\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 space={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\n    // eslint-disable-next-line react-hooks/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
Index: package/dist/index.d.ts
===================================================================
--- package/dist/index.d.ts
+++ package/dist/index.d.ts
@@ -24,9 +24,9 @@
      * If no default configuration is provided, an error will be thrown.
      */
     embeddingsIndex?: true | EmbeddingsIndexConfig;
   }
-} //# sourceMappingURL=typeDefExtensions.d.ts.map
+}
 declare const embeddingsIndexDashboard: import("sanity").Plugin<void>;
 declare const embeddingsIndexReferenceInput: import("sanity").Plugin<void | EmbeddingsIndexConfig>;
 interface NamedIndex {
   indexName: string;