@sanity/language-filter

5.0.205.0.21
dist/index.js.map
~dist/index.js.mapModified
+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["unique","{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","_c","_temp","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","_c","_temp","(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>","_c","_Fragment","['_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])","_c","<LanguageFilterMenuButton />","_c"],"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":["unique","{apiVersion: '2023-01-01'}","() =>\n    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        )","() => of([])","getPersistedLanguageIds({supportedLanguages: languages, defaultLanguages})","useMemo(\n    () => getPersistedLanguageIds({supportedLanguages: languages, defaultLanguages}),\n    [languages, defaultLanguages],\n  )","{\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    setSessionLanguageIds(ids)\n    setPersistedLanguageIds(ids)\n  }","useCallback((ids: string[]) => {\n    setSessionLanguageIds(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","_c","_temp","persistedLanguageIds","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","_c","_temp","(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>","_c","_Fragment","['_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])","_c","<LanguageFilterMenuButton />","_c"],"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} 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  // Resolved once per provider: the callback form may fetch, and react-rx subscribes on commit\n  // and re-subscribes whenever the observable identity changes.\n  const [languages$] = useState(() =>\n    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\n  const languages = useObservable(languages$, INITIAL_VALUE)\n\n  // The languages picked in this session, or `null` while the persisted selection still applies.\n  const [sessionLanguageIds, setSessionLanguageIds] = useState<string[] | null>(null)\n  // Derived from the resolved languages, so the persisted selection is scoped to them.\n  const persistedLanguageIds = useMemo(\n    () => getPersistedLanguageIds({supportedLanguages: languages, defaultLanguages}),\n    [languages, defaultLanguages],\n  )\n  const selectedLanguageIds = sessionLanguageIds ?? persistedLanguageIds\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    setSessionLanguageIds(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