@sanity/language-filter

5.0.175.0.18
~

Modified (3 files)

Index: package/dist/index.js
===================================================================
--- package/dist/index.js
+++ package/dist/index.js
@@ -101,21 +101,21 @@
 		value,
 		children: t6
 	}), $[15] = t6, $[16] = value, $[17] = t7) : t7 = $[17], t7;
 }
+function _temp$2() {
+	return of([]);
+}
 /**
 * Retrieves plugin options and the currently selected
 * language IDs from anywhere in the Studio
 */
-function _temp$2() {
-	return of([]);
-}
 function useLanguageFilterStudioContext() {
 	return useContext(LanguageFilterStudioContext);
 }
 const unique = (arr) => Array.from(new Set(arr));
 function usePaneLanguages() {
-	let $ = c(25), { selectedLanguageIds, setSelectedLanguageIds, options } = useLanguageFilterStudioContext(), { defaultLanguages: t0 } = options, t1;
+	let $ = c(27), { selectedLanguageIds, setSelectedLanguageIds, options } = useLanguageFilterStudioContext(), { defaultLanguages: t0 } = options, t1;
 	$[0] === t0 ? t1 = $[1] : (t1 = t0 === void 0 ? [] : t0, $[0] = t0, $[1] = t1);
 	let defaultLanguages = t1, t2;
 	$[2] === options ? t2 = $[3] : (t2 = getSelectableLanguages(options), $[2] = options, $[3] = t2);
 	let selectableLanguages = t2, t3;
@@ -133,17 +133,19 @@
 		let lang = selectedLanguageIds;
 		lang = lang.includes(languageId) ? lang.filter((l_0) => l_0 !== languageId) : unique([...lang, languageId]), updateSelectedIds(lang);
 	}, $[13] = selectedLanguageIds, $[14] = updateSelectedIds, $[15] = t6) : t6 = $[15];
 	let toggleLanguage = t6, t7;
-	$[16] !== defaultLanguages || $[17] !== selectedLanguageIds ? (t7 = unique([...defaultLanguages ?? [], ...selectedLanguageIds]), $[16] = defaultLanguages, $[17] = selectedLanguageIds, $[18] = t7) : t7 = $[18];
-	let activeLanguages = t7, t8 = selectedLanguageIds.length === selectableLanguages.length + defaultLanguages.length, t9;
-	return $[19] !== activeLanguages || $[20] !== selectAll || $[21] !== selectNone || $[22] !== t8 || $[23] !== toggleLanguage ? (t9 = {
+	$[16] === defaultLanguages ? t7 = $[17] : (t7 = defaultLanguages ?? [], $[16] = defaultLanguages, $[17] = t7);
+	let t8;
+	$[18] !== selectedLanguageIds || $[19] !== t7 ? (t8 = unique([...t7, ...selectedLanguageIds]), $[18] = selectedLanguageIds, $[19] = t7, $[20] = t8) : t8 = $[20];
+	let activeLanguages = t8, t9 = selectedLanguageIds.length === selectableLanguages.length + defaultLanguages.length, t10;
+	return $[21] !== activeLanguages || $[22] !== selectAll || $[23] !== selectNone || $[24] !== t9 || $[25] !== toggleLanguage ? (t10 = {
 		activeLanguages,
-		allSelected: t8,
+		allSelected: t9,
 		selectAll,
 		selectNone,
 		toggleLanguage
-	}, $[19] = activeLanguages, $[20] = selectAll, $[21] = selectNone, $[22] = t8, $[23] = toggleLanguage, $[24] = t9) : t9 = $[24], t9;
+	}, $[21] = activeLanguages, $[22] = selectAll, $[23] = selectNone, $[24] = t9, $[25] = toggleLanguage, $[26] = t10) : t10 = $[26], t10;
 }
 function _temp$1(l) {
 	return l.id;
 }
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sanity/language-filter",
-  "version": "5.0.17",
+  "version": "5.0.18",
   "description": "A Sanity plugin that supports filtering localized fields by language",
   "keywords": [
     "sanity",
     "sanity-plugin"
@@ -39,10 +39,10 @@
     "@testing-library/react": "^16.3.2",
     "@types/node": "^24.13.3",
     "@types/react": "^19.2.18",
     "@types/react-dom": "^19.2.4",
-    "babel-plugin-react-compiler": "^1.0.0",
     "jsdom": "^29.1.1",
+    "oxc-transform-react": "^0.145.0",
     "react": "^19.2.8",
     "react-dom": "^19.2.8",
     "sanity": "^6.10.1",
     "styled-components": "^6.5.3",
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","Stack","Text","TextInput","useClickOutsideEvent","Popover","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  Stack,\n  Text,\n  TextInput,\n  useClickOutsideEvent,\n} from '@sanity/ui'\nimport {Popover} from '@sanity/ui/popover'\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":["{apiVersion: '2023-01-01'}","[]","() => {\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  }","() => of([])","languages","{\n      ...defaultContextValue.options,\n      ...props.options,\n      supportedLanguages: languages,\n    }","options","useMemo<Required<LanguageFilterConfigProcessed>>(() => {\n    return {\n      ...defaultContextValue.options,\n      ...props.options,\n      supportedLanguages: languages,\n    }\n  }, [props.options, languages])","(ids: string[]) => {\n    setSelectedLanguageIds(ids)\n    setPersistedLanguageIds(ids)\n  }","useCallback((ids: string[]) => {\n    setSelectedLanguageIds(ids)\n    setPersistedLanguageIds(ids)\n  }, [])","{options, selectedLanguageIds, setSelectedLanguageIds: onSelectedLanguageIdsChange}","useMemo(\n    () => ({options, selectedLanguageIds, setSelectedLanguageIds: onSelectedLanguageIdsChange}),\n    [options, selectedLanguageIds, onSelectedLanguageIdsChange],\n  )","props.renderDefault(props)","props.renderDefault","<LanguageFilterStudioContext.Provider value={value}>\n      {props.renderDefault(props)}\n    </LanguageFilterStudioContext.Provider>","LanguageFilterStudioContext.Provider","defaultLanguages = []","getSelectableLanguages(options)","useMemo(() => getSelectableLanguages(options), [options])","(ids: string[]) => {\n      setSelectedLanguageIds(unique([...defaultLanguages, ...ids]))\n    }","useCallback(\n    (ids: string[]) => {\n      setSelectedLanguageIds(unique([...defaultLanguages, ...ids]))\n    },\n    [defaultLanguages, setSelectedLanguageIds],\n  )","() => updateSelectedIds(selectableLanguages.map((l) => l.id))","(l) => l.id","useCallback(\n    () => updateSelectedIds(selectableLanguages.map((l) => l.id)),\n    [updateSelectedIds, selectableLanguages],\n  )","() => {\n    updateSelectedIds(defaultLanguages)\n  }","useCallback(() => {\n    updateSelectedIds(defaultLanguages)\n  }, [defaultLanguages, updateSelectedIds])","(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    }","l","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  )","defaultLanguages ?? []","unique([...(defaultLanguages ?? []), ...selectedLanguageIds])","useMemo(\n    () => unique([...(defaultLanguages ?? []), ...selectedLanguageIds]),\n    [defaultLanguages, selectedLanguageIds],\n  )","{\n    activeLanguages,\n    allSelected:\n      selectedLanguageIds.length === selectableLanguages.length + defaultLanguages.length,\n    selectAll,\n    selectNone,\n    toggleLanguage,\n  }","selectedLanguageIds.length === selectableLanguages.length + defaultLanguages.length","(l) =>\n    options.defaultLanguages?.includes(l.id)","defaultLanguages","(l) => !options.defaultLanguages?.includes(l.id)","l","(event) => {\n      const checked = event.currentTarget.value === 'ALL'\n\n      if (checked) {\n        selectAll()\n      } else {\n        selectNone()\n      }\n    }","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  )","() => setOpen((o) => !o)","(o) => !o","useCallback(() => setOpen((o) => !o), [])","() => setOpen(false)","useCallback(() => setOpen(false), [])","() => [button, popover].filter((el): el is HTMLElement => el !== null)","(el): el is HTMLElement => el !== null","useCallback(\n      () => [button, popover].filter((el): el is HTMLElement => el !== null),\n      [button, popover],\n    )","(event: React.ChangeEvent<HTMLInputElement>) => {\n    if (event.currentTarget.value) {\n      setQuery(event.currentTarget.value)\n    } else {\n      setQuery('')\n    }\n  }","event","useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    if (event.currentTarget.value) {\n      setQuery(event.currentTarget.value)\n    } else {\n      setQuery('')\n    }\n  }, [])","{maxHeight: 'calc(100vh - 200px)'}","(l) => (\n              <LanguageFilterOption key={l.id} id={l.id} title={l.title} selected />\n            )","<Text size={2}>\n              {allSelected ? (\n                <TextWithTone tone=\"primary\">\n                  <EyeClosedIcon />\n                </TextWithTone>\n              ) : (\n                <EyeOpenIcon />\n              )}\n            </Text>","<Box flex={1}>\n              <Text>{allSelected ? 'Hide all' : 'Show all'}</Text>\n            </Box>","allSelected ? 'Hide all' : 'Show all'","<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>","<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>","allSelected ? 'NONE' : 'ALL'","!!query","showSearch ? (\n          <TextInput onChange={handleQuery} value={query} placeholder=\"Filter languages\" />\n        ) : (\n          <Card borderTop />\n        )","(language) => {\n            if (query) {\n              return language.title.toLowerCase().includes(query.toLowerCase())\n            }\n            return true\n          }","(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          )","<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>","Stack","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        )","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          ))","1","<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>","Box","\"auto\"","<Button\n        text={buttonText}\n        icon={TranslateIcon}\n        mode=\"bleed\"\n        onClick={handleClick}\n        ref={setButton}\n        selected={open}\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    if (onToggle) {\n      onToggle(id)\n    }\n  }","useCallback(() => {\n    if (onToggle) {\n      onToggle(id)\n    }\n  }, [id, onToggle])","<Text size={2}>\n          {selected ? (\n            <TextWithTone tone={disabled ? 'default' : 'positive'}>\n              <CheckmarkCircleIcon />\n            </TextWithTone>\n          ) : (\n            <CircleIcon />\n          )}\n        </Text>","<Box flex={1}>\n          <Text>{title}</Text>\n        </Box>","<Badge>{id}</Badge>","<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>","<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>","['_type']","isLanguageFilterEnabled(schema.get(documentType), options)","languageFilterEnabled ? <FilteredObjectInput {...props} /> : props.renderDefault(props)","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      })","(member) => {\n        return (\n          (member.kind === 'field' &&\n            filterField(schemaType, member, selectedLanguageIds, parentValue)) ||\n          member.kind === 'fieldSet' ||\n          member.kind === 'error'\n        )\n      }","(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      }","member","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])","<LanguageFilterMenuButton />"],"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  Stack,\n  Text,\n  TextInput,\n  useClickOutsideEvent,\n} from '@sanity/ui'\nimport {Popover} from '@sanity/ui/popover'\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