@sanity/language-filter

5.0.75.0.8
~

Modified (4 files)

Index: package/dist/index.js
===================================================================
--- package/dist/index.js
+++ package/dist/index.js
@@ -69,12 +69,13 @@
 	let client = useClient(t0), supportedLanguages = props.options.supportedLanguages, defaultLanguages = props.options.defaultLanguages, t1;
 	$[1] === Symbol.for("react.memo_cache_sentinel") ? (t1 = [], $[1] = t1) : t1 = $[1];
 	let [selectedLanguageIds, setSelectedLanguageIds] = useState(t1), t2;
 	$[2] !== client || $[3] !== defaultLanguages || $[4] !== supportedLanguages ? (t2 = () => (Array.isArray(supportedLanguages) ? of(supportedLanguages) : defer(() => from(supportedLanguages(client, {}))).pipe(catchError(_temp$2))).pipe(tap((languages) => {
-		setSelectedLanguageIds(getPersistedLanguageIds({
+		let persistedLanguageIds = getPersistedLanguageIds({
 			supportedLanguages: languages,
 			defaultLanguages
-		}));
+		});
+		setSelectedLanguageIds(persistedLanguageIds);
 	})), $[2] = client, $[3] = defaultLanguages, $[4] = supportedLanguages, $[5] = t2) : t2 = $[5];
 	let [languages$] = useState(t2), languages_0 = useObservable(languages$, INITIAL_VALUE), t3;
 	$[6] !== languages_0 || $[7] !== props.options ? (t3 = {
 		...defaultContextValue.options,
@@ -199,9 +200,9 @@
 		value: query,
 		placeholder: "Filter languages"
 	}) : /* @__PURE__ */ jsx(Card, { borderTop: !0 }), $[26] = query, $[27] = showSearch, $[28] = t19) : t19 = $[28];
 	let t20;
-	$[29] === query ? t20 = $[30] : (t20 = (language) => query ? language.title.toLowerCase().includes(query.toLowerCase()) : !0, $[29] = query, $[30] = t20);
+	$[29] === query ? t20 = $[30] : (t20 = (language) => !query || language.title.toLowerCase().includes(query.toLowerCase()), $[29] = query, $[30] = t20);
 	let t21;
 	$[31] !== activeLanguages || $[32] !== toggleLanguage ? (t21 = (lang) => /* @__PURE__ */ jsx(LanguageFilterOption, {
 		id: lang.id,
 		onToggle: toggleLanguage,
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sanity/language-filter",
-  "version": "5.0.7",
+  "version": "5.0.8",
   "description": "A Sanity plugin that supports filtering localized fields by language",
   "keywords": [
     "sanity",
     "sanity-plugin"
@@ -27,27 +27,27 @@
     "./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",
     "rxjs": "^7.8.2"
   },
   "devDependencies": {
     "@sanity/tsconfig": "^2.2.0",
-    "@sanity/tsdown-config": "^0.11.0",
+    "@sanity/tsdown-config": "^0.13.1",
     "@testing-library/jest-dom": "^6.9.1",
     "@testing-library/react": "^16.3.2",
-    "@types/node": "^24.13.2",
+    "@types/node": "^24.13.3",
     "@types/react": "^19.2.17",
     "@types/react-dom": "^19.2.3",
     "babel-plugin-react-compiler": "^1.0.0",
     "jsdom": "^29.1.1",
     "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/types.ts","../src/filterField.ts","../src/LanguageFilterStudioContext.tsx","../src/plugin.tsx"],"mappings":";UAEiB,qBAAA;EACf,cAAc;AAAA;AAAA,UAGC,oBAAA,SAA6B,gBAAgB;EAC5D,OAAA,GAAU,qBAAA;AAAA;AAAA,KAGA,QAAA;EACV,EAAA,EAAI,IAAA,CAAK,4BAA4B;EACrC,KAAA;AAAA;AAAA,KAGU,gBAAA,IACV,MAAA,EAAQ,YAAA,EACR,aAAA,EAAe,MAAA,sBACZ,OAAA,CAAQ,QAAA;AAAA,KAED,mBAAA,IACV,aAAA,EAAe,gBAAA,EACf,KAAA,EAAO,WAAA,GAAc,aAAA,EACrB,mBAAA,YACA,WAAA,EAAa,MAAA;AAAA,UAGE,oBAAA;EACf,kBAAA,EAAoB,QAAA,KAAa,gBAAA;EACjC,gBAAA;EACA,aAAA;EACA,WAAA,GAAc,mBAAA;;;;;EAKd,UAAA;AAAA;AAAA,UAGe,6BAAA,SAAsC,oBAAoB;EACzE,kBAAA,EAAoB,QAAA;AAAA;AAAA,cCpCT,kBAAA,EAAoB,mBAIwD;AAAA,iBAEzE,uBAAA,CACd,UAAA,EAAY,UAAA,cACZ,OAAA,EAAS,oBAAoB;AAAA,UCCd,oCAAA;EACf,OAAA,EAAS,QAAQ,CAAC,6BAAA;AAAA;AAAA,UAGH,gCAAA,SAAyC,oCAAoC;EAC5F,mBAAA;EACA,sBAAA,GAAyB,GAAA;AAAA;;;;;iBAoFX,8BAAA,IAAkC,gCAAgC;AAAA,cCpDrE,cAAA,EAAgB,UAAA,QAAkB,YAAA,CAAa,oBAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/filterField.ts","../src/LanguageFilterStudioContext.tsx","../src/plugin.tsx"],"mappings":";UAEiB;EACf;;UAGe,6BAA6B;EAC5C,UAAU;;KAGA;EACV,IAAI,KAAK;EACT;;KAGU,oBACV,QAAQ,cACR,eAAe,4BACZ,QAAQ;KAED,uBACV,eAAe,kBACf,OAAO,cAAc,eACrB,+BACA,aAAa;UAGE;EACf,oBAAoB,aAAa;EACjC;EACA;EACA,cAAc;;;;;EAKd;;UAGe,sCAAsC;EACrD,oBAAoB;;cCpCT,oBAAoB;iBAMjB,wBACd,YAAY,wBACZ,SAAS;UCCM;EACf,SAAS,SAAS;;UAGH,yCAAyC;EACxD;EACA,yBAAyB;;;;;;iBAoFX,kCAAkC;cCpDrC,gBAAgB,kBAAkB,aAAa"}
\ 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":["SchemaType","FilterFieldFunction","LanguageFilterConfig","LanguageFilterSchema","defaultFilterField","enclosingType","field","selectedLanguageIds","name","startsWith","includes","isLanguageFilterEnabled","schemaType","options","schemaFilter","isDocument","languageFilter","defaultEnabled","documentTypes","jsonType","getRootType","schema","type","Language","getSelectableLanguages","supportedLanguages","defaultLanguages","filter","lang","includes","id","getSelectableLanguages","Language","storageKey","getPersistedLanguageIds","options","supportedLanguages","defaultLanguages","selectableLangs","map","l","id","selected","persistedValue","window","localStorage","getItem","parsed","JSON","parse","Array","isArray","every","item","intersection","supportedLanguageIds","language","defaultLanguageIds","unique","setPersistedLanguageIds","languageIds","setItem","stringify","array1","array2","filter","value","includes","values","from","Set","createContext","useCallback","useContext","useMemo","useState","useObservable","catchError","defer","from","of","tap","LayoutProps","useClient","defaultFilterField","getPersistedLanguageIds","setPersistedLanguageIds","LanguageFilterConfig","LanguageFilterConfigProcessed","Language","LanguageFilterStudioContextProps","options","Required","LanguageFilterStudioContextProcessed","LanguageFilterStudioContextValue","selectedLanguageIds","setSelectedLanguageIds","ids","defaultContextValue","apiVersion","supportedLanguages","defaultLanguages","documentTypes","filterField","console","error","LanguageFilterStudioContext","INITIAL_VALUE","LanguageFilterStudioProvider","props","$","_c","t0","Symbol","for","client","t1","t2","languagesObservable","Array","isArray","pipe","_temp","languages","persistedLanguageIds","languages$","languages_0","t3","t4","onSelectedLanguageIdsChange","t5","value","t6","renderDefault","t7","useLanguageFilterStudioContext","useCallback","useMemo","getSelectableLanguages","useLanguageFilterStudioContext","unique","arr","Array","from","Set","usePaneLanguages","$","_c","selectedLanguageIds","setSelectedLanguageIds","options","defaultLanguages","t0","t1","undefined","t2","selectableLanguages","t3","ids","updateSelectedIds","t4","map","_temp","selectAll","t5","selectNone","t6","languageId","lang","includes","filter","l_0","l","toggleLanguage","t7","activeLanguages","t8","length","t9","allSelected","id","CheckmarkCircleIcon","CircleIcon","EyeClosedIcon","EyeOpenIcon","TranslateIcon","Badge","Box","Button","Card","Flex","Popover","Stack","Text","TextInput","useClickOutsideEvent","MouseEventHandler","useCallback","useState","TextWithTone","useLanguageFilterStudioContext","usePaneLanguages","LanguageFilterMenuButton","$","_c","options","t0","defaultLanguages","l","includes","id","supportedLanguages","filter","t1","l_0","languageOptions","open","setOpen","activeLanguages","allSelected","selectAll","selectNone","toggleLanguage","button","setButton","popover","setPopover","t2","event","checked","currentTarget","value","handleToggleAll","t3","Symbol","for","_temp","handleClick","t4","handleClickOutside","t5","_temp2","langCount","length","query","setQuery","t6","event_0","handleQuery","showSearch","T0","t7","t8","maxHeight","T1","t9","t10","t11","map","_temp3","t12","t13","t14","t15","t16","t17","t18","t19","t20","language","title","toLowerCase","t21","lang","t22","t23","t24","content","buttonText","t25","t26","l_1","el","o","LanguageFilterOption","props","onToggle","selected","handleChange","disabled","useMemo","ObjectInputProps","ObjectMember","useFormValue","useSchema","isLanguageFilterEnabled","useLanguageFilterStudioContext","FilteredObjectWrapper","props","$","_c","options","t0","Symbol","for","documentType","schema","t1","get","languageFilterEnabled","t2","renderDefault","FilteredObjectInput","members","membersProp","schemaType","restProps","selectedLanguageIds","filterField","parentValue","value","member","kind","member_0","Object","assign","fieldSet","filter","fieldsetMember","map","definePlugin","DocumentLanguageFilterComponent","isObjectSchemaType","ObjectInputProps","isLanguageFilterEnabled","LanguageFilterMenuButton","FilteredObjectWrapper","defaultContextValue","LanguageFilterStudioProvider","LanguageFilterConfig","RenderLanguageFilter","$","_c","t0","Symbol","for","languageFilter","ReturnType","options","pluginOptions","name","studio","components","layout","props","document","unstable_languageFilter","prev","schemaType","schema","get","form","input","id","renderDefault"],"sources":["../src/filterField.ts","../src/getSelectableLanguages.ts","../src/persistedLanguageIds.ts","../src/LanguageFilterStudioContext.tsx","../src/usePaneLanguages.ts","../src/LanguageFilterMenuButton.tsx","../src/LanguageFilterObjectInput.tsx","../src/plugin.tsx"],"sourcesContent":["import type {SchemaType} from 'sanity'\n\nimport type {FilterFieldFunction, LanguageFilterConfig, LanguageFilterSchema} from './types'\n\nexport const defaultFilterField: FilterFieldFunction = (\n  enclosingType,\n  field,\n  selectedLanguageIds,\n) => !enclosingType.name.startsWith('locale') || selectedLanguageIds.includes(field.name)\n\nexport function isLanguageFilterEnabled(\n  schemaType: SchemaType | undefined,\n  options: LanguageFilterConfig,\n): boolean {\n  const schemaFilter =\n    // oxlint-disable-next-line no-unsafe-type-assertion -- Checking if schemaType has options.languageFilter\n    isDocument(schemaType) && (schemaType as LanguageFilterSchema)?.options?.languageFilter\n  const defaultEnabled = !options.documentTypes\n\n  return !!(\n    (defaultEnabled && schemaFilter !== false) ||\n    (!defaultEnabled && schemaFilter) ||\n    (schemaType && options.documentTypes?.includes(schemaType.name))\n  )\n}\n\nfunction isDocument(schemaType?: SchemaType) {\n  return schemaType?.jsonType === 'object' && getRootType(schemaType).name === 'document'\n}\n\nfunction getRootType(schema: SchemaType): SchemaType {\n  if (schema.type) {\n    return getRootType(schema.type)\n  }\n  return schema\n}\n","import type {Language} from './types'\n\nexport function getSelectableLanguages({\n  supportedLanguages,\n  defaultLanguages,\n}: {\n  supportedLanguages: Language[]\n  defaultLanguages?: string[]\n}): Language[] {\n  return supportedLanguages.filter((lang) => !defaultLanguages?.includes(lang.id))\n}\n","import {getSelectableLanguages} from './getSelectableLanguages'\nimport type {Language} from './types'\n\nconst storageKey = '@sanity/plugin/language-filter/selected-languages'\n\nexport function getPersistedLanguageIds(options: {\n  supportedLanguages: Language[]\n  defaultLanguages?: string[]\n}): string[] {\n  const selectableLangs = getSelectableLanguages(options).map((l) => l.id)\n  let selected: string[] = selectableLangs\n  try {\n    const persistedValue = window.localStorage.getItem(storageKey)\n    if (persistedValue) {\n      const parsed = JSON.parse(persistedValue)\n      if (Array.isArray(parsed) && parsed.every((item) => typeof item === 'string')) {\n        selected = parsed\n      }\n    }\n  } catch {}\n\n  // constrain persisted/selected languages to the ones currently supported\n  selected = intersection(selected, selectableLangs)\n\n  const supportedLanguageIds = options.supportedLanguages.map((language) => language.id)\n  const defaultLanguageIds = intersection(options.defaultLanguages ?? [], supportedLanguageIds)\n  return unique([...defaultLanguageIds, ...selected])\n}\n\nexport function setPersistedLanguageIds(languageIds: string[]): void {\n  window.localStorage.setItem(storageKey, JSON.stringify(languageIds))\n}\n\nfunction intersection(array1: string[], array2: string[]) {\n  return array1.filter((value) => array2.includes(value))\n}\n\nfunction unique(values: string[]) {\n  return Array.from(new Set(values))\n}\n","import {createContext, useCallback, useContext, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, defer, from, of, tap} from 'rxjs'\nimport {type LayoutProps, useClient} from 'sanity'\n\nimport {defaultFilterField} from './filterField'\nimport {getPersistedLanguageIds, setPersistedLanguageIds} from './persistedLanguageIds'\nimport type {LanguageFilterConfig, LanguageFilterConfigProcessed, Language} from './types'\n\nexport interface LanguageFilterStudioContextProps {\n  options: Required<LanguageFilterConfig>\n}\n\nexport interface LanguageFilterStudioContextProcessed {\n  options: Required<LanguageFilterConfigProcessed>\n}\n\nexport interface LanguageFilterStudioContextValue extends LanguageFilterStudioContextProcessed {\n  selectedLanguageIds: string[]\n  setSelectedLanguageIds: (ids: string[]) => void\n}\n\nexport const defaultContextValue: LanguageFilterStudioContextValue = {\n  options: {\n    apiVersion: '2022-11-27',\n    supportedLanguages: [],\n    defaultLanguages: [],\n    documentTypes: [],\n    filterField: defaultFilterField,\n  },\n  selectedLanguageIds: [],\n  setSelectedLanguageIds: () => console.error('LanguageFilterStudioContext not initialized'),\n}\n\nconst LanguageFilterStudioContext =\n  createContext<LanguageFilterStudioContextValue>(defaultContextValue)\n\nconst INITIAL_VALUE: Language[] = []\n\n/**\n * This is a separate Provider from the Context that wraps the document pane\n * but it used to listen to changes to the selected language IDs inside it\n * and provide them to a Studio-wide context\n */\nexport function LanguageFilterStudioProvider(\n  props: LayoutProps & LanguageFilterStudioContextProps,\n): React.JSX.Element {\n  const client = useClient({apiVersion: '2023-01-01'})\n  const supportedLanguages = props.options.supportedLanguages\n  const defaultLanguages = props.options.defaultLanguages\n  const [selectedLanguageIds, setSelectedLanguageIds] = useState<string[]>([])\n  const [languages$] = useState(() => {\n    // We first resolve the languages from the callback or the array.\n    const languagesObservable = Array.isArray(supportedLanguages)\n      ? of(supportedLanguages)\n      : defer(() => from(supportedLanguages(client, {}))).pipe(\n          // If language resolution fails, keep the plugin operational with no selectable languages.\n          catchError(() => of([])),\n        )\n\n    // After resolving the languages we can get the persisted languages by checking localStorage.\n    return languagesObservable.pipe(\n      tap((languages) => {\n        const persistedLanguageIds = getPersistedLanguageIds({\n          supportedLanguages: languages,\n          defaultLanguages,\n        })\n        setSelectedLanguageIds(persistedLanguageIds)\n      }),\n    )\n  })\n\n  const languages = useObservable(languages$, INITIAL_VALUE)\n\n  const options = useMemo<Required<LanguageFilterConfigProcessed>>(() => {\n    return {\n      ...defaultContextValue.options,\n      ...props.options,\n      supportedLanguages: languages,\n    }\n  }, [props.options, languages])\n\n  const onSelectedLanguageIdsChange = useCallback((ids: string[]) => {\n    setSelectedLanguageIds(ids)\n    setPersistedLanguageIds(ids)\n  }, [])\n\n  const value = useMemo(\n    () => ({options, selectedLanguageIds, setSelectedLanguageIds: onSelectedLanguageIdsChange}),\n    [options, selectedLanguageIds, onSelectedLanguageIdsChange],\n  )\n\n  return (\n    <LanguageFilterStudioContext.Provider value={value}>\n      {props.renderDefault(props)}\n    </LanguageFilterStudioContext.Provider>\n  )\n}\n\n/**\n * Retrieves plugin options and the currently selected\n * language IDs from anywhere in the Studio\n */\nexport function useLanguageFilterStudioContext(): LanguageFilterStudioContextValue {\n  return useContext(LanguageFilterStudioContext)\n}\n","import {useCallback, useMemo} from 'react'\n\nimport {getSelectableLanguages} from './getSelectableLanguages'\nimport {useLanguageFilterStudioContext} from './LanguageFilterStudioContext'\n\nconst unique = (arr: string[]) => Array.from(new Set(arr))\n\nexport function usePaneLanguages(): {\n  activeLanguages: string[]\n  allSelected: boolean\n  selectAll: () => void\n  selectNone: () => void\n  toggleLanguage: (languageId: string) => void\n} {\n  const {selectedLanguageIds, setSelectedLanguageIds, options} = useLanguageFilterStudioContext()\n  // oxlint-disable-next-line no-useless-default-assignment\n  const {defaultLanguages = []} = options\n\n  const selectableLanguages = useMemo(() => getSelectableLanguages(options), [options])\n\n  const updateSelectedIds = useCallback(\n    (ids: string[]) => {\n      setSelectedLanguageIds(unique([...defaultLanguages, ...ids]))\n    },\n    [defaultLanguages, setSelectedLanguageIds],\n  )\n\n  const selectAll = useCallback(\n    () => updateSelectedIds(selectableLanguages.map((l) => l.id)),\n    [updateSelectedIds, selectableLanguages],\n  )\n\n  const selectNone = useCallback(() => {\n    updateSelectedIds(defaultLanguages)\n  }, [defaultLanguages, updateSelectedIds])\n\n  const toggleLanguage = useCallback(\n    (languageId: string) => {\n      let lang = selectedLanguageIds\n\n      if (lang.includes(languageId)) {\n        lang = lang.filter((l) => l !== languageId)\n      } else {\n        lang = unique([...lang, languageId])\n      }\n\n      updateSelectedIds(lang)\n    },\n    [updateSelectedIds, selectedLanguageIds],\n  )\n\n  const activeLanguages = useMemo(\n    () => unique([...(defaultLanguages ?? []), ...selectedLanguageIds]),\n    [defaultLanguages, selectedLanguageIds],\n  )\n\n  return {\n    activeLanguages,\n    allSelected:\n      selectedLanguageIds.length === selectableLanguages.length + defaultLanguages.length,\n    selectAll,\n    selectNone,\n    toggleLanguage,\n  }\n}\n","import {CheckmarkCircleIcon} from '@sanity/icons/CheckmarkCircle'\nimport {CircleIcon} from '@sanity/icons/Circle'\nimport {EyeClosedIcon} from '@sanity/icons/EyeClosed'\nimport {EyeOpenIcon} from '@sanity/icons/EyeOpen'\nimport {TranslateIcon} from '@sanity/icons/Translate'\nimport {\n  Badge,\n  Box,\n  Button,\n  Card,\n  Flex,\n  Popover,\n  Stack,\n  Text,\n  TextInput,\n  useClickOutsideEvent,\n} from '@sanity/ui'\nimport {type MouseEventHandler, useCallback, useState} from 'react'\nimport {TextWithTone} from 'sanity'\n\nimport {useLanguageFilterStudioContext} from './LanguageFilterStudioContext'\nimport {usePaneLanguages} from './usePaneLanguages'\n\nexport function LanguageFilterMenuButton(): React.JSX.Element {\n  const {options} = useLanguageFilterStudioContext()\n\n  const defaultLanguages = options.supportedLanguages.filter((l) =>\n    options.defaultLanguages?.includes(l.id),\n  )\n\n  const languageOptions = options.supportedLanguages.filter(\n    (l) => !options.defaultLanguages?.includes(l.id),\n  )\n  const [open, setOpen] = useState(false)\n  const {activeLanguages, allSelected, selectAll, selectNone, toggleLanguage} = usePaneLanguages()\n  const [button, setButton] = useState<HTMLElement | null>(null)\n  const [popover, setPopover] = useState<HTMLElement | null>(null)\n\n  const handleToggleAll: MouseEventHandler<HTMLButtonElement> = useCallback(\n    (event) => {\n      const checked = event.currentTarget.value === 'ALL'\n\n      if (checked) {\n        selectAll()\n      } else {\n        selectNone()\n      }\n    },\n    [selectAll, selectNone],\n  )\n\n  const handleClick = useCallback(() => setOpen((o) => !o), [])\n\n  const handleClickOutside = useCallback(() => setOpen(false), [])\n\n  useClickOutsideEvent(\n    handleClickOutside,\n    useCallback(\n      () => [button, popover].filter((el): el is HTMLElement => el !== null),\n      [button, popover],\n    ),\n  )\n\n  const langCount = options.supportedLanguages.length\n\n  // Search filter query\n  const [query, setQuery] = useState('')\n  const handleQuery = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    if (event.currentTarget.value) {\n      setQuery(event.currentTarget.value)\n    } else {\n      setQuery('')\n    }\n  }, [])\n\n  const showSearch = langCount > 4\n\n  const content = (\n    <Box overflow=\"auto\" style={{maxHeight: 'calc(100vh - 200px)'}}>\n      <Stack padding={1} gap={1}>\n        {defaultLanguages.length > 0 && (\n          <>\n            {defaultLanguages.map((l) => (\n              <LanguageFilterOption key={l.id} id={l.id} title={l.title} selected />\n            ))}\n            <Card borderTop />\n          </>\n        )}\n\n        <Button\n          mode=\"bleed\"\n          onClick={handleToggleAll}\n          justify=\"flex-start\"\n          value={allSelected ? 'NONE' : 'ALL'}\n          disabled={!!query}\n        >\n          <Flex gap={3} align=\"center\">\n            <Text size={2}>\n              {allSelected ? (\n                <TextWithTone tone=\"primary\">\n                  <EyeClosedIcon />\n                </TextWithTone>\n              ) : (\n                <EyeOpenIcon />\n              )}\n            </Text>\n            <Box flex={1}>\n              <Text>{allSelected ? 'Hide all' : 'Show all'}</Text>\n            </Box>\n          </Flex>\n        </Button>\n\n        {showSearch ? (\n          <TextInput onChange={handleQuery} value={query} placeholder=\"Filter languages\" />\n        ) : (\n          <Card borderTop />\n        )}\n\n        {languageOptions\n          .filter((language) => {\n            if (query) {\n              return language.title.toLowerCase().includes(query.toLowerCase())\n            }\n            return true\n          })\n          .map((lang) => (\n            <LanguageFilterOption\n              id={lang.id}\n              key={lang.id}\n              onToggle={toggleLanguage}\n              selected={activeLanguages.includes(lang.id)}\n              title={lang.title}\n            />\n          ))}\n      </Stack>\n    </Box>\n  )\n\n  const buttonText =\n    activeLanguages.length === langCount\n      ? 'Showing all'\n      : `Showing ${activeLanguages.length} / ${langCount}`\n  return (\n    <Popover animate content={content} open={open} portal ref={setPopover}>\n      <Button\n        text={buttonText}\n        icon={TranslateIcon}\n        mode=\"bleed\"\n        onClick={handleClick}\n        ref={setButton}\n        selected={open}\n      />\n    </Popover>\n  )\n}\n\nfunction LanguageFilterOption(props: {\n  id: string\n  selected: boolean\n  title: string\n  onToggle?: (id: string) => void\n}) {\n  const {id, onToggle, selected, title} = props\n\n  const handleChange = useCallback(() => {\n    if (onToggle) {\n      onToggle(id)\n    }\n  }, [id, onToggle])\n\n  const disabled = !onToggle\n\n  return (\n    <Button mode=\"bleed\" onClick={handleChange} justify=\"flex-start\" disabled={disabled}>\n      <Flex gap={3} align=\"center\">\n        <Text size={2}>\n          {selected ? (\n            <TextWithTone tone={disabled ? 'default' : 'positive'}>\n              <CheckmarkCircleIcon />\n            </TextWithTone>\n          ) : (\n            <CircleIcon />\n          )}\n        </Text>\n        <Box flex={1}>\n          <Text>{title}</Text>\n        </Box>\n        <Badge>{id}</Badge>\n      </Flex>\n    </Button>\n  )\n}\n","import {useMemo} from 'react'\nimport {type ObjectInputProps, type ObjectMember, useFormValue, useSchema} from 'sanity'\n\nimport {isLanguageFilterEnabled} from './filterField'\nimport {useLanguageFilterStudioContext} from './LanguageFilterStudioContext'\n\n// First check that this Object is in a schema type for which language-filter is enabled\nexport function FilteredObjectWrapper(props: ObjectInputProps) {\n  const {options} = useLanguageFilterStudioContext()\n\n  // oxlint-disable-next-line no-unsafe-type-assertion -- documentType is always a string for Sanity documents\n  const documentType = useFormValue(['_type']) as string\n  const schema = useSchema()\n  const languageFilterEnabled = isLanguageFilterEnabled(schema.get(documentType), options)\n  return languageFilterEnabled ? <FilteredObjectInput {...props} /> : props.renderDefault(props)\n}\n\n// Modify the object members based on selected languages in the filter\nfunction FilteredObjectInput(props: ObjectInputProps) {\n  const {members: membersProp, schemaType, renderDefault, ...restProps} = props\n  const {selectedLanguageIds, options} = useLanguageFilterStudioContext()\n  const {filterField} = options\n  const parentValue = props.value\n\n  const members: ObjectMember[] = useMemo(() => {\n    return membersProp\n      .filter((member) => {\n        return (\n          (member.kind === 'field' &&\n            filterField(schemaType, member, selectedLanguageIds, parentValue)) ||\n          member.kind === 'fieldSet' ||\n          member.kind === 'error'\n        )\n      })\n      .map((member) => {\n        if (member.kind === 'fieldSet') {\n          return Object.assign({}, member, {\n            fieldSet: Object.assign({}, member.fieldSet, {\n              members: member.fieldSet.members.filter((fieldsetMember) => {\n                return (\n                  fieldsetMember.kind === 'field' &&\n                  filterField(schemaType, fieldsetMember, selectedLanguageIds, parentValue)\n                )\n              }),\n            }),\n          })\n        }\n        return member\n      })\n  }, [schemaType, membersProp, filterField, selectedLanguageIds, parentValue])\n\n  return renderDefault({...restProps, members, schemaType, renderDefault})\n}\n","import {\n  definePlugin,\n  type DocumentLanguageFilterComponent,\n  isObjectSchemaType,\n  type ObjectInputProps,\n} from 'sanity'\n\nimport {isLanguageFilterEnabled} from './filterField'\nimport {LanguageFilterMenuButton} from './LanguageFilterMenuButton'\nimport {FilteredObjectWrapper} from './LanguageFilterObjectInput'\nimport {defaultContextValue, LanguageFilterStudioProvider} from './LanguageFilterStudioContext'\nimport type {LanguageFilterConfig} from './types'\n\n/**\n * ## Usage in sanity.config.ts (or .js)\n *\n * ```\n * import {defineConfig} from 'sanity'\n * import {languageFilter} from '@sanity/language-filter'\n *\n * export const defineConfig({\n *     /...\n *     plugins: [\n *         languageFilter({\n *             supportedLanguages: [\n *               {id: 'nb', title: 'Norwegian (Bokmål)'},\n *               {id: 'nn', title: 'Norwegian (Nynorsk)'},\n *               {id: 'en', title: 'English'},\n *               {id: 'es', title: 'Spanish'},\n *               {id: 'arb', title: 'Arabic'},\n *               {id: 'pt', title: 'Portuguese'},\n *               //...\n *             ],\n *             // Select Norwegian (Bokmål) by default\n *             defaultLanguages: ['nb'],\n *             // Only show language filter for document type `page` (schemaType.name)\n *             // Can also enable via document-options: options.languageFilter: true\n *             documentTypes: ['page'],\n *             // default filter function shown\n *             filterField: (enclosingType, field, selectedLanguageIds) =>\n *               !enclosingType.name.startsWith('locale') || selectedLanguageIds.includes(field.name),\n *        })\n *    ]\n * })\n * ```\n */\n\nconst RenderLanguageFilter: DocumentLanguageFilterComponent = () => {\n  return <LanguageFilterMenuButton />\n}\n\nexport const languageFilter: ReturnType<typeof definePlugin<LanguageFilterConfig>> =\n  definePlugin<LanguageFilterConfig>((options) => {\n    const pluginOptions = {\n      ...defaultContextValue.options,\n      ...options,\n    }\n\n    return {\n      name: '@sanity/language-filter',\n      studio: {\n        components: {\n          layout: (props) => LanguageFilterStudioProvider({...props, options: pluginOptions}),\n        },\n      },\n\n      document: {\n        unstable_languageFilter: (prev, {schemaType, schema}) => {\n          if (isLanguageFilterEnabled(schema.get(schemaType), options)) {\n            return [...prev, RenderLanguageFilter]\n          }\n          return prev\n        },\n      },\n\n      form: {\n        components: {\n          input: (props) => {\n            if (props.id !== 'root' && isObjectSchemaType(props.schemaType)) {\n              // oxlint-disable-next-line no-unsafe-type-assertion -- isObjectSchemaType confirms the type\n              return FilteredObjectWrapper(props as ObjectInputProps)\n            }\n\n            return props.renderDefault(props)\n          },\n        },\n      },\n    }\n  })\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["SchemaType","FilterFieldFunction","LanguageFilterConfig","LanguageFilterSchema","defaultFilterField","enclosingType","field","selectedLanguageIds","name","startsWith","includes","isLanguageFilterEnabled","schemaType","options","schemaFilter","isDocument","languageFilter","defaultEnabled","documentTypes","jsonType","getRootType","schema","type","Language","getSelectableLanguages","supportedLanguages","defaultLanguages","filter","lang","includes","id","getSelectableLanguages","Language","storageKey","getPersistedLanguageIds","options","supportedLanguages","defaultLanguages","selectableLangs","map","l","id","selected","persistedValue","window","localStorage","getItem","parsed","JSON","parse","Array","isArray","every","item","intersection","supportedLanguageIds","language","defaultLanguageIds","unique","setPersistedLanguageIds","languageIds","setItem","stringify","array1","array2","filter","value","includes","values","from","Set","createContext","useCallback","useContext","useMemo","useState","useObservable","catchError","defer","from","of","tap","LayoutProps","useClient","defaultFilterField","getPersistedLanguageIds","setPersistedLanguageIds","LanguageFilterConfig","LanguageFilterConfigProcessed","Language","LanguageFilterStudioContextProps","options","Required","LanguageFilterStudioContextProcessed","LanguageFilterStudioContextValue","selectedLanguageIds","setSelectedLanguageIds","ids","defaultContextValue","apiVersion","supportedLanguages","defaultLanguages","documentTypes","filterField","console","error","LanguageFilterStudioContext","INITIAL_VALUE","LanguageFilterStudioProvider","props","$","_c","t0","Symbol","for","client","t1","t2","languagesObservable","Array","isArray","pipe","_temp","languages","persistedLanguageIds","languages$","languages_0","t3","t4","onSelectedLanguageIdsChange","t5","value","t6","renderDefault","t7","useLanguageFilterStudioContext","useCallback","useMemo","getSelectableLanguages","useLanguageFilterStudioContext","unique","arr","Array","from","Set","usePaneLanguages","$","_c","selectedLanguageIds","setSelectedLanguageIds","options","defaultLanguages","t0","t1","undefined","t2","selectableLanguages","t3","ids","updateSelectedIds","t4","map","_temp","selectAll","t5","selectNone","t6","languageId","lang","includes","filter","l_0","l","toggleLanguage","t7","activeLanguages","t8","length","t9","allSelected","id","CheckmarkCircleIcon","CircleIcon","EyeClosedIcon","EyeOpenIcon","TranslateIcon","Badge","Box","Button","Card","Flex","Popover","Stack","Text","TextInput","useClickOutsideEvent","MouseEventHandler","useCallback","useState","TextWithTone","useLanguageFilterStudioContext","usePaneLanguages","LanguageFilterMenuButton","$","_c","options","t0","defaultLanguages","l","includes","id","supportedLanguages","filter","t1","l_0","languageOptions","open","setOpen","activeLanguages","allSelected","selectAll","selectNone","toggleLanguage","button","setButton","popover","setPopover","t2","event","checked","currentTarget","value","handleToggleAll","t3","Symbol","for","_temp","handleClick","t4","handleClickOutside","t5","_temp2","langCount","length","query","setQuery","t6","event_0","handleQuery","showSearch","T0","t7","t8","maxHeight","T1","t9","t10","t11","map","_temp3","t12","t13","t14","t15","t16","t17","t18","t19","t20","language","title","toLowerCase","t21","lang","t22","t23","t24","content","buttonText","t25","t26","l_1","el","o","LanguageFilterOption","props","onToggle","selected","handleChange","disabled","useMemo","ObjectInputProps","ObjectMember","useFormValue","useSchema","isLanguageFilterEnabled","useLanguageFilterStudioContext","FilteredObjectWrapper","props","$","_c","options","t0","Symbol","for","documentType","schema","t1","get","languageFilterEnabled","t2","renderDefault","FilteredObjectInput","members","membersProp","schemaType","restProps","selectedLanguageIds","filterField","parentValue","value","member","kind","member_0","Object","assign","fieldSet","filter","fieldsetMember","map","definePlugin","DocumentLanguageFilterComponent","isObjectSchemaType","ObjectInputProps","isLanguageFilterEnabled","LanguageFilterMenuButton","FilteredObjectWrapper","defaultContextValue","LanguageFilterStudioProvider","LanguageFilterConfig","RenderLanguageFilter","$","_c","t0","Symbol","for","languageFilter","ReturnType","options","pluginOptions","name","studio","components","layout","props","document","unstable_languageFilter","prev","schemaType","schema","get","form","input","id","renderDefault"],"sources":["../src/filterField.ts","../src/getSelectableLanguages.ts","../src/persistedLanguageIds.ts","../src/LanguageFilterStudioContext.tsx","../src/usePaneLanguages.ts","../src/LanguageFilterMenuButton.tsx","../src/LanguageFilterObjectInput.tsx","../src/plugin.tsx"],"sourcesContent":["import type {SchemaType} from 'sanity'\n\nimport type {FilterFieldFunction, LanguageFilterConfig, LanguageFilterSchema} from './types'\n\nexport const defaultFilterField: FilterFieldFunction = (\n  enclosingType,\n  field,\n  selectedLanguageIds,\n) => !enclosingType.name.startsWith('locale') || selectedLanguageIds.includes(field.name)\n\nexport function isLanguageFilterEnabled(\n  schemaType: SchemaType | undefined,\n  options: LanguageFilterConfig,\n): boolean {\n  const schemaFilter =\n    // oxlint-disable-next-line no-unsafe-type-assertion -- Checking if schemaType has options.languageFilter\n    isDocument(schemaType) && (schemaType as LanguageFilterSchema)?.options?.languageFilter\n  const defaultEnabled = !options.documentTypes\n\n  return !!(\n    (defaultEnabled && schemaFilter !== false) ||\n    (!defaultEnabled && schemaFilter) ||\n    (schemaType && options.documentTypes?.includes(schemaType.name))\n  )\n}\n\nfunction isDocument(schemaType?: SchemaType) {\n  return schemaType?.jsonType === 'object' && getRootType(schemaType).name === 'document'\n}\n\nfunction getRootType(schema: SchemaType): SchemaType {\n  if (schema.type) {\n    return getRootType(schema.type)\n  }\n  return schema\n}\n","import type {Language} from './types'\n\nexport function getSelectableLanguages({\n  supportedLanguages,\n  defaultLanguages,\n}: {\n  supportedLanguages: Language[]\n  defaultLanguages?: string[]\n}): Language[] {\n  return supportedLanguages.filter((lang) => !defaultLanguages?.includes(lang.id))\n}\n","import {getSelectableLanguages} from './getSelectableLanguages'\nimport type {Language} from './types'\n\nconst storageKey = '@sanity/plugin/language-filter/selected-languages'\n\nexport function getPersistedLanguageIds(options: {\n  supportedLanguages: Language[]\n  defaultLanguages?: string[]\n}): string[] {\n  const selectableLangs = getSelectableLanguages(options).map((l) => l.id)\n  let selected: string[] = selectableLangs\n  try {\n    const persistedValue = window.localStorage.getItem(storageKey)\n    if (persistedValue) {\n      const parsed = JSON.parse(persistedValue)\n      if (Array.isArray(parsed) && parsed.every((item) => typeof item === 'string')) {\n        selected = parsed\n      }\n    }\n  } catch {}\n\n  // constrain persisted/selected languages to the ones currently supported\n  selected = intersection(selected, selectableLangs)\n\n  const supportedLanguageIds = options.supportedLanguages.map((language) => language.id)\n  const defaultLanguageIds = intersection(options.defaultLanguages ?? [], supportedLanguageIds)\n  return unique([...defaultLanguageIds, ...selected])\n}\n\nexport function setPersistedLanguageIds(languageIds: string[]): void {\n  window.localStorage.setItem(storageKey, JSON.stringify(languageIds))\n}\n\nfunction intersection(array1: string[], array2: string[]) {\n  return array1.filter((value) => array2.includes(value))\n}\n\nfunction unique(values: string[]) {\n  return Array.from(new Set(values))\n}\n","import {createContext, useCallback, useContext, useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, defer, from, of, tap} from 'rxjs'\nimport {type LayoutProps, useClient} from 'sanity'\n\nimport {defaultFilterField} from './filterField'\nimport {getPersistedLanguageIds, setPersistedLanguageIds} from './persistedLanguageIds'\nimport type {LanguageFilterConfig, LanguageFilterConfigProcessed, Language} from './types'\n\nexport interface LanguageFilterStudioContextProps {\n  options: Required<LanguageFilterConfig>\n}\n\nexport interface LanguageFilterStudioContextProcessed {\n  options: Required<LanguageFilterConfigProcessed>\n}\n\nexport interface LanguageFilterStudioContextValue extends LanguageFilterStudioContextProcessed {\n  selectedLanguageIds: string[]\n  setSelectedLanguageIds: (ids: string[]) => void\n}\n\nexport const defaultContextValue: LanguageFilterStudioContextValue = {\n  options: {\n    apiVersion: '2022-11-27',\n    supportedLanguages: [],\n    defaultLanguages: [],\n    documentTypes: [],\n    filterField: defaultFilterField,\n  },\n  selectedLanguageIds: [],\n  setSelectedLanguageIds: () => console.error('LanguageFilterStudioContext not initialized'),\n}\n\nconst LanguageFilterStudioContext =\n  createContext<LanguageFilterStudioContextValue>(defaultContextValue)\n\nconst INITIAL_VALUE: Language[] = []\n\n/**\n * This is a separate Provider from the Context that wraps the document pane\n * but it used to listen to changes to the selected language IDs inside it\n * and provide them to a Studio-wide context\n */\nexport function LanguageFilterStudioProvider(\n  props: LayoutProps & LanguageFilterStudioContextProps,\n): React.JSX.Element {\n  const client = useClient({apiVersion: '2023-01-01'})\n  const supportedLanguages = props.options.supportedLanguages\n  const defaultLanguages = props.options.defaultLanguages\n  const [selectedLanguageIds, setSelectedLanguageIds] = useState<string[]>([])\n  const [languages$] = useState(() => {\n    // We first resolve the languages from the callback or the array.\n    const languagesObservable = Array.isArray(supportedLanguages)\n      ? of(supportedLanguages)\n      : defer(() => from(supportedLanguages(client, {}))).pipe(\n          // If language resolution fails, keep the plugin operational with no selectable languages.\n          catchError(() => of([])),\n        )\n\n    // After resolving the languages we can get the persisted languages by checking localStorage.\n    return languagesObservable.pipe(\n      tap((languages) => {\n        const persistedLanguageIds = getPersistedLanguageIds({\n          supportedLanguages: languages,\n          defaultLanguages,\n        })\n        setSelectedLanguageIds(persistedLanguageIds)\n      }),\n    )\n  })\n\n  const languages = useObservable(languages$, INITIAL_VALUE)\n\n  const options = useMemo<Required<LanguageFilterConfigProcessed>>(() => {\n    return {\n      ...defaultContextValue.options,\n      ...props.options,\n      supportedLanguages: languages,\n    }\n  }, [props.options, languages])\n\n  const onSelectedLanguageIdsChange = useCallback((ids: string[]) => {\n    setSelectedLanguageIds(ids)\n    setPersistedLanguageIds(ids)\n  }, [])\n\n  const value = useMemo(\n    () => ({options, selectedLanguageIds, setSelectedLanguageIds: onSelectedLanguageIdsChange}),\n    [options, selectedLanguageIds, onSelectedLanguageIdsChange],\n  )\n\n  return (\n    <LanguageFilterStudioContext.Provider value={value}>\n      {props.renderDefault(props)}\n    </LanguageFilterStudioContext.Provider>\n  )\n}\n\n/**\n * Retrieves plugin options and the currently selected\n * language IDs from anywhere in the Studio\n */\nexport function useLanguageFilterStudioContext(): LanguageFilterStudioContextValue {\n  return useContext(LanguageFilterStudioContext)\n}\n","import {useCallback, useMemo} from 'react'\n\nimport {getSelectableLanguages} from './getSelectableLanguages'\nimport {useLanguageFilterStudioContext} from './LanguageFilterStudioContext'\n\nconst unique = (arr: string[]) => Array.from(new Set(arr))\n\nexport function usePaneLanguages(): {\n  activeLanguages: string[]\n  allSelected: boolean\n  selectAll: () => void\n  selectNone: () => void\n  toggleLanguage: (languageId: string) => void\n} {\n  const {selectedLanguageIds, setSelectedLanguageIds, options} = useLanguageFilterStudioContext()\n  // oxlint-disable-next-line no-useless-default-assignment\n  const {defaultLanguages = []} = options\n\n  const selectableLanguages = useMemo(() => getSelectableLanguages(options), [options])\n\n  const updateSelectedIds = useCallback(\n    (ids: string[]) => {\n      setSelectedLanguageIds(unique([...defaultLanguages, ...ids]))\n    },\n    [defaultLanguages, setSelectedLanguageIds],\n  )\n\n  const selectAll = useCallback(\n    () => updateSelectedIds(selectableLanguages.map((l) => l.id)),\n    [updateSelectedIds, selectableLanguages],\n  )\n\n  const selectNone = useCallback(() => {\n    updateSelectedIds(defaultLanguages)\n  }, [defaultLanguages, updateSelectedIds])\n\n  const toggleLanguage = useCallback(\n    (languageId: string) => {\n      let lang = selectedLanguageIds\n\n      if (lang.includes(languageId)) {\n        lang = lang.filter((l) => l !== languageId)\n      } else {\n        lang = unique([...lang, languageId])\n      }\n\n      updateSelectedIds(lang)\n    },\n    [updateSelectedIds, selectedLanguageIds],\n  )\n\n  const activeLanguages = useMemo(\n    () => unique([...(defaultLanguages ?? []), ...selectedLanguageIds]),\n    [defaultLanguages, selectedLanguageIds],\n  )\n\n  return {\n    activeLanguages,\n    allSelected:\n      selectedLanguageIds.length === selectableLanguages.length + defaultLanguages.length,\n    selectAll,\n    selectNone,\n    toggleLanguage,\n  }\n}\n","import {CheckmarkCircleIcon} from '@sanity/icons/CheckmarkCircle'\nimport {CircleIcon} from '@sanity/icons/Circle'\nimport {EyeClosedIcon} from '@sanity/icons/EyeClosed'\nimport {EyeOpenIcon} from '@sanity/icons/EyeOpen'\nimport {TranslateIcon} from '@sanity/icons/Translate'\nimport {\n  Badge,\n  Box,\n  Button,\n  Card,\n  Flex,\n  Popover,\n  Stack,\n  Text,\n  TextInput,\n  useClickOutsideEvent,\n} from '@sanity/ui'\nimport {type MouseEventHandler, useCallback, useState} from 'react'\nimport {TextWithTone} from 'sanity'\n\nimport {useLanguageFilterStudioContext} from './LanguageFilterStudioContext'\nimport {usePaneLanguages} from './usePaneLanguages'\n\nexport function LanguageFilterMenuButton(): React.JSX.Element {\n  const {options} = useLanguageFilterStudioContext()\n\n  const defaultLanguages = options.supportedLanguages.filter((l) =>\n    options.defaultLanguages?.includes(l.id),\n  )\n\n  const languageOptions = options.supportedLanguages.filter(\n    (l) => !options.defaultLanguages?.includes(l.id),\n  )\n  const [open, setOpen] = useState(false)\n  const {activeLanguages, allSelected, selectAll, selectNone, toggleLanguage} = usePaneLanguages()\n  const [button, setButton] = useState<HTMLElement | null>(null)\n  const [popover, setPopover] = useState<HTMLElement | null>(null)\n\n  const handleToggleAll: MouseEventHandler<HTMLButtonElement> = useCallback(\n    (event) => {\n      const checked = event.currentTarget.value === 'ALL'\n\n      if (checked) {\n        selectAll()\n      } else {\n        selectNone()\n      }\n    },\n    [selectAll, selectNone],\n  )\n\n  const handleClick = useCallback(() => setOpen((o) => !o), [])\n\n  const handleClickOutside = useCallback(() => setOpen(false), [])\n\n  useClickOutsideEvent(\n    handleClickOutside,\n    useCallback(\n      () => [button, popover].filter((el): el is HTMLElement => el !== null),\n      [button, popover],\n    ),\n  )\n\n  const langCount = options.supportedLanguages.length\n\n  // Search filter query\n  const [query, setQuery] = useState('')\n  const handleQuery = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    if (event.currentTarget.value) {\n      setQuery(event.currentTarget.value)\n    } else {\n      setQuery('')\n    }\n  }, [])\n\n  const showSearch = langCount > 4\n\n  const content = (\n    <Box overflow=\"auto\" style={{maxHeight: 'calc(100vh - 200px)'}}>\n      <Stack padding={1} gap={1}>\n        {defaultLanguages.length > 0 && (\n          <>\n            {defaultLanguages.map((l) => (\n              <LanguageFilterOption key={l.id} id={l.id} title={l.title} selected />\n            ))}\n            <Card borderTop />\n          </>\n        )}\n\n        <Button\n          mode=\"bleed\"\n          onClick={handleToggleAll}\n          justify=\"flex-start\"\n          value={allSelected ? 'NONE' : 'ALL'}\n          disabled={!!query}\n        >\n          <Flex gap={3} align=\"center\">\n            <Text size={2}>\n              {allSelected ? (\n                <TextWithTone tone=\"primary\">\n                  <EyeClosedIcon />\n                </TextWithTone>\n              ) : (\n                <EyeOpenIcon />\n              )}\n            </Text>\n            <Box flex={1}>\n              <Text>{allSelected ? 'Hide all' : 'Show all'}</Text>\n            </Box>\n          </Flex>\n        </Button>\n\n        {showSearch ? (\n          <TextInput onChange={handleQuery} value={query} placeholder=\"Filter languages\" />\n        ) : (\n          <Card borderTop />\n        )}\n\n        {languageOptions\n          .filter((language) => {\n            if (query) {\n              return language.title.toLowerCase().includes(query.toLowerCase())\n            }\n            return true\n          })\n          .map((lang) => (\n            <LanguageFilterOption\n              id={lang.id}\n              key={lang.id}\n              onToggle={toggleLanguage}\n              selected={activeLanguages.includes(lang.id)}\n              title={lang.title}\n            />\n          ))}\n      </Stack>\n    </Box>\n  )\n\n  const buttonText =\n    activeLanguages.length === langCount\n      ? 'Showing all'\n      : `Showing ${activeLanguages.length} / ${langCount}`\n  return (\n    <Popover animate content={content} open={open} portal ref={setPopover}>\n      <Button\n        text={buttonText}\n        icon={TranslateIcon}\n        mode=\"bleed\"\n        onClick={handleClick}\n        ref={setButton}\n        selected={open}\n      />\n    </Popover>\n  )\n}\n\nfunction LanguageFilterOption(props: {\n  id: string\n  selected: boolean\n  title: string\n  onToggle?: (id: string) => void\n}) {\n  const {id, onToggle, selected, title} = props\n\n  const handleChange = useCallback(() => {\n    if (onToggle) {\n      onToggle(id)\n    }\n  }, [id, onToggle])\n\n  const disabled = !onToggle\n\n  return (\n    <Button mode=\"bleed\" onClick={handleChange} justify=\"flex-start\" disabled={disabled}>\n      <Flex gap={3} align=\"center\">\n        <Text size={2}>\n          {selected ? (\n            <TextWithTone tone={disabled ? 'default' : 'positive'}>\n              <CheckmarkCircleIcon />\n            </TextWithTone>\n          ) : (\n            <CircleIcon />\n          )}\n        </Text>\n        <Box flex={1}>\n          <Text>{title}</Text>\n        </Box>\n        <Badge>{id}</Badge>\n      </Flex>\n    </Button>\n  )\n}\n","import {useMemo} from 'react'\nimport {type ObjectInputProps, type ObjectMember, useFormValue, useSchema} from 'sanity'\n\nimport {isLanguageFilterEnabled} from './filterField'\nimport {useLanguageFilterStudioContext} from './LanguageFilterStudioContext'\n\n// First check that this Object is in a schema type for which language-filter is enabled\nexport function FilteredObjectWrapper(props: ObjectInputProps) {\n  const {options} = useLanguageFilterStudioContext()\n\n  // oxlint-disable-next-line no-unsafe-type-assertion -- documentType is always a string for Sanity documents\n  const documentType = useFormValue(['_type']) as string\n  const schema = useSchema()\n  const languageFilterEnabled = isLanguageFilterEnabled(schema.get(documentType), options)\n  return languageFilterEnabled ? <FilteredObjectInput {...props} /> : props.renderDefault(props)\n}\n\n// Modify the object members based on selected languages in the filter\nfunction FilteredObjectInput(props: ObjectInputProps) {\n  const {members: membersProp, schemaType, renderDefault, ...restProps} = props\n  const {selectedLanguageIds, options} = useLanguageFilterStudioContext()\n  const {filterField} = options\n  const parentValue = props.value\n\n  const members: ObjectMember[] = useMemo(() => {\n    return membersProp\n      .filter((member) => {\n        return (\n          (member.kind === 'field' &&\n            filterField(schemaType, member, selectedLanguageIds, parentValue)) ||\n          member.kind === 'fieldSet' ||\n          member.kind === 'error'\n        )\n      })\n      .map((member) => {\n        if (member.kind === 'fieldSet') {\n          return Object.assign({}, member, {\n            fieldSet: Object.assign({}, member.fieldSet, {\n              members: member.fieldSet.members.filter((fieldsetMember) => {\n                return (\n                  fieldsetMember.kind === 'field' &&\n                  filterField(schemaType, fieldsetMember, selectedLanguageIds, parentValue)\n                )\n              }),\n            }),\n          })\n        }\n        return member\n      })\n  }, [schemaType, membersProp, filterField, selectedLanguageIds, parentValue])\n\n  return renderDefault({...restProps, members, schemaType, renderDefault})\n}\n","import {\n  definePlugin,\n  type DocumentLanguageFilterComponent,\n  isObjectSchemaType,\n  type ObjectInputProps,\n} from 'sanity'\n\nimport {isLanguageFilterEnabled} from './filterField'\nimport {LanguageFilterMenuButton} from './LanguageFilterMenuButton'\nimport {FilteredObjectWrapper} from './LanguageFilterObjectInput'\nimport {defaultContextValue, LanguageFilterStudioProvider} from './LanguageFilterStudioContext'\nimport type {LanguageFilterConfig} from './types'\n\n/**\n * ## Usage in sanity.config.ts (or .js)\n *\n * ```\n * import {defineConfig} from 'sanity'\n * import {languageFilter} from '@sanity/language-filter'\n *\n * export const defineConfig({\n *     /...\n *     plugins: [\n *         languageFilter({\n *             supportedLanguages: [\n *               {id: 'nb', title: 'Norwegian (Bokmål)'},\n *               {id: 'nn', title: 'Norwegian (Nynorsk)'},\n *               {id: 'en', title: 'English'},\n *               {id: 'es', title: 'Spanish'},\n *               {id: 'arb', title: 'Arabic'},\n *               {id: 'pt', title: 'Portuguese'},\n *               //...\n *             ],\n *             // Select Norwegian (Bokmål) by default\n *             defaultLanguages: ['nb'],\n *             // Only show language filter for document type `page` (schemaType.name)\n *             // Can also enable via document-options: options.languageFilter: true\n *             documentTypes: ['page'],\n *             // default filter function shown\n *             filterField: (enclosingType, field, selectedLanguageIds) =>\n *               !enclosingType.name.startsWith('locale') || selectedLanguageIds.includes(field.name),\n *        })\n *    ]\n * })\n * ```\n */\n\nconst RenderLanguageFilter: DocumentLanguageFilterComponent = () => {\n  return <LanguageFilterMenuButton />\n}\n\nexport const languageFilter: ReturnType<typeof definePlugin<LanguageFilterConfig>> =\n  definePlugin<LanguageFilterConfig>((options) => {\n    const pluginOptions = {\n      ...defaultContextValue.options,\n      ...options,\n    }\n\n    return {\n      name: '@sanity/language-filter',\n      studio: {\n        components: {\n          layout: (props) => LanguageFilterStudioProvider({...props, options: pluginOptions}),\n        },\n      },\n\n      document: {\n        unstable_languageFilter: (prev, {schemaType, schema}) => {\n          if (isLanguageFilterEnabled(schema.get(schemaType), options)) {\n            return [...prev, RenderLanguageFilter]\n          }\n          return prev\n        },\n      },\n\n      form: {\n        components: {\n          input: (props) => {\n            if (props.id !== 'root' && isObjectSchemaType(props.schemaType)) {\n              // oxlint-disable-next-line no-unsafe-type-assertion -- isObjectSchemaType confirms the type\n              return FilteredObjectWrapper(props as ObjectInputProps)\n            }\n\n            return props.renderDefault(props)\n          },\n        },\n      },\n    }\n  })\n"],"mappings":"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"}
\ No newline at end of file