{"version":3,"sources":["../../src/components/Table.tsx","../../src/util/noop.ts","../../src/components/user-input/Checkbox.tsx","../../src/components/user-input/Label.tsx","../../src/components/Pagination.tsx","../../src/hooks/useLanguage.tsx","../../src/hooks/useLocalStorage.tsx","../../src/hooks/useTranslation.ts"],"sourcesContent":["import type { ReactElement } from 'react'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { useEffect, useRef, useState } from 'react'\nimport { noop } from '../util/noop'\nimport { Checkbox } from './user-input/Checkbox'\nimport { Pagination } from './Pagination'\nimport clsx from 'clsx'\n\nexport type TableStatePagination = {\n  currentPage: number,\n  entriesPerPage: number,\n}\nexport const defaultTableStatePagination = {\n  currentPage: 0,\n  entriesPerPage: 5\n}\n\nexport type TableStateSelection<T> = {\n  currentSelection: T[],\n  hasSelectedAll: boolean,\n  hasSelectedSome: boolean,\n  hasSelectedNone: boolean,\n}\n\nexport const defaultTableStateSelection = {\n  currentSelection: [],\n  hasSelectedAll: false,\n  hasSelectedSome: false,\n  hasSelectedNone: true\n}\n\nexport type TableState = {\n  pagination?: TableStatePagination,\n  selection?: {\n    /**\n     * The mapped ids of the dataType\n     */\n    currentSelection: string[],\n    hasSelectedAll: boolean,\n    hasSelectedSome: boolean,\n    hasSelectedNone: boolean,\n  },\n}\n\ntype IdentifierMapping<T> = (dataObject: T) => string\n\nexport const isDataObjectSelected = <T, >(tableState: TableState, dataObject: T, identifierMapping: IdentifierMapping<T>) => {\n  if (!tableState.selection) {\n    return false\n  }\n\n  return !!tableState.selection.currentSelection.find(value => value.localeCompare(identifierMapping(dataObject)) === 0)\n}\n\nexport const pageForItem = <T, >(data: T[], item: T, entriesPerPage: number, identifierMapping: IdentifierMapping<T>) => {\n  const index = data.findIndex(value => identifierMapping(value) === identifierMapping(item))\n  if (index !== -1) {\n    return Math.floor(index / entriesPerPage)\n  }\n  console.warn(\"item doesn't exist on data\", item, data)\n  return 0\n}\n\nexport const updatePagination = (pagination: TableStatePagination, dataLength: number): TableStatePagination => ({\n  ...pagination,\n  currentPage: Math.min(Math.max(Math.ceil(dataLength / pagination.entriesPerPage) - 1, 0), pagination.currentPage)\n})\n\nexport const addElementToTable = <T, >(tableState: TableState, data: T[], dataObject: T, identifierMapping: IdentifierMapping<T>) => {\n  return {\n    ...tableState,\n    pagination: tableState.pagination ? {\n      ...tableState.pagination,\n      currentPage: pageForItem(data, dataObject, tableState.pagination.entriesPerPage, identifierMapping)\n    } : undefined,\n    selection: tableState.selection ? {\n      ...tableState.selection,\n      hasSelectedAll: false,\n      hasSelectedSome: tableState.selection.hasSelectedAll || tableState.selection.hasSelectedSome\n    } : undefined\n  }\n}\n\n/**\n * data length before delete\n */\nexport const removeFromTableSelection = <T, >(tableState: TableState, deletedObjects: T[], dataLength: number, identifierMapping: IdentifierMapping<T>): TableState => {\n  if (!tableState.selection) {\n    return tableState\n  }\n\n  const deletedObjectIds = deletedObjects.map(identifierMapping)\n  const elementsBefore = tableState.selection.currentSelection.length\n  const currentSelection = tableState.selection.currentSelection.filter((value) => !deletedObjectIds.includes(value))\n  dataLength -= elementsBefore - currentSelection.length\n\n  return {\n    ...tableState,\n    selection: {\n      currentSelection,\n      hasSelectedAll: currentSelection.length === dataLength && dataLength !== 0,\n      hasSelectedSome: currentSelection.length > 0 && currentSelection.length !== dataLength,\n      hasSelectedNone: currentSelection.length === 0,\n    },\n    pagination: tableState.pagination ? updatePagination(tableState.pagination, dataLength) : undefined\n  }\n}\n\nexport const changeTableSelectionSingle = <T, >(tableState: TableState, dataObject: T, dataLength: number, identifierMapping: IdentifierMapping<T>) => {\n  if (!tableState.selection) {\n    return tableState\n  }\n\n  const hasSelectedObject = isDataObjectSelected(tableState, dataObject, identifierMapping)\n  let currentSelection = [...tableState.selection.currentSelection, identifierMapping(dataObject)] // case !hasSelectedObject\n  if (hasSelectedObject) {\n    currentSelection = tableState.selection.currentSelection.filter(value => value.localeCompare(identifierMapping(dataObject)) !== 0)\n  }\n\n  return {\n    ...tableState,\n    selection: {\n      currentSelection,\n      hasSelectedAll: currentSelection.length === dataLength,\n      hasSelectedSome: currentSelection.length > 0 && currentSelection.length !== dataLength,\n      hasSelectedNone: currentSelection.length === 0,\n    }\n  }\n}\n\nconst changeTableSelectionAll = <T, >(tableState: TableState, data: T[], identifierMapping: IdentifierMapping<T>) => {\n  if (!tableState.selection) {\n    return tableState\n  }\n\n  if (data.length === 0) {\n    return {\n      ...tableState,\n      selection: {\n        currentSelection: [],\n        hasSelectedAll: false,\n        hasSelectedSome: false,\n        hasSelectedNone: true\n      }\n    }\n  }\n\n  const hasSelectedAll = !(tableState.selection.hasSelectedSome || tableState.selection.hasSelectedAll)\n  return {\n    ...tableState,\n    selection: {\n      currentSelection: hasSelectedAll ? data.map(identifierMapping) : [],\n      hasSelectedAll,\n      hasSelectedSome: false,\n      hasSelectedNone: !hasSelectedAll\n    }\n  }\n}\n\nexport type TableSortingType = 'ascending' | 'descending'\nexport type TableSortingFunctionType<T> = (t1: T, t2: T) => number\n\nexport type TableProps<T> = {\n  data: T[],\n  /**\n   * When using selection or pagination\n   */\n  stateManagement?: [TableState, (tableState: TableState) => void],\n  identifierMapping: IdentifierMapping<T>,\n  /**\n   * Only the cell itself no boilerplate <tr> or <th> required\n   */\n  header?: ReactElement[],\n  /**\n   * Only the cells of the row no boilerplate <tr> or <td> required\n   */\n  rowMappingToCells: (dataObject: T) => ReactElement[],\n  sorting?: [TableSortingFunctionType<T>, TableSortingType],\n  /**\n   * Always go to the page of this element\n   */\n  focusElement?: T,\n  className?: string,\n}\n\n/*  Possible extension for better customization\n    * Map each element to the displayed row\n    * make sure to wrap it in the <tr> and <td> you require\n    rowMappingToHTMLRow?: (dataObject: T) => ReactElement\n */\n\n/**\n * A Basic stateless reusable table\n * The state must be handled and saved with the updateTableState method\n */\nexport const Table = <T, >({\n                             data,\n                             stateManagement = [{}, noop],\n                             identifierMapping,\n                             header,\n                             rowMappingToCells,\n                             sorting,\n                             focusElement,\n                             className\n                           }: TableProps<T>) => {\n  const sortedData = [...data]\n  if (sorting) {\n    const [sortingFunction, sortingType] = sorting\n    sortedData.sort((a, b) => sortingFunction(a, b) * (sortingType === 'ascending' ? 1 : -1))\n  }\n  let currentPage = 0\n  let pageCount = 1\n  let entriesPerPage = 5\n  const [tableState, updateTableState] = stateManagement\n\n  let shownElements = sortedData\n\n  if (tableState?.pagination) {\n    if (tableState.pagination.entriesPerPage < 1) {\n      console.error('tableState.pagination.entriesPerPage must be >= 1', tableState.pagination.entriesPerPage)\n    }\n    entriesPerPage = Math.max(1, tableState.pagination.entriesPerPage)\n    pageCount = Math.ceil(sortedData.length / entriesPerPage)\n\n    if (tableState.pagination.currentPage < 0 || (tableState.pagination.currentPage >= pageCount && pageCount !== 0)) {\n      console.error('tableState.pagination.currentPage < 0 || (tableState.pagination.currentPage >= pageCount && pageCount !== 0) must be fullfilled',\n        [`pageCount: ${pageCount}`, `tableState.pagination.currentPage: ${tableState.pagination.currentPage}`])\n    } else {\n      currentPage = tableState.pagination.currentPage\n    }\n\n    if (focusElement) {\n      currentPage = pageForItem(sortedData, focusElement, entriesPerPage, identifierMapping)\n    }\n\n    shownElements = sortedData.slice(currentPage * entriesPerPage, Math.min(sortedData.length, (currentPage + 1) * entriesPerPage))\n  } else {\n    currentPage = 0\n  }\n\n  const headerRow = 'border-b-2 border-gray-300'\n  const headerPaddingHead = 'pb-2'\n  const headerPaddingBody = 'pt-2'\n  const cellPadding = 'py-1 px-2'\n\n  const [scrollbarsAutoHeightMin, setScrollbarsAutoHeightMin] = useState(0)\n  const tableRef = useRef<HTMLTableElement>(null)\n\n  const calculateHeight = () => {\n    if (tableRef.current) {\n      const tableHeight = tableRef.current.offsetHeight\n      const offset = 25\n      setScrollbarsAutoHeightMin(tableHeight + offset)\n    }\n  }\n\n  useEffect(() => {\n    calculateHeight()\n\n    // New function to unbind properly\n    const handleResize = () => {\n      calculateHeight()\n    }\n\n    window.addEventListener('resize', handleResize)\n\n    return () => {\n      window.removeEventListener('resize', handleResize)\n    }\n  }, [data, currentPage])\n\n  return (\n    <div className={clsx('col gap-y-4 overflow-hidden', className)}>\n      <div>\n        <Scrollbars autoHeight autoHeightMin={scrollbarsAutoHeightMin}>\n          <table ref={tableRef} className=\"w-full mb-[12px]\">\n            <thead>\n            <tr className={headerRow}>\n              {header && tableState.selection && (\n                <th className={headerPaddingHead}>\n                  <Checkbox\n                    checked={tableState.selection.hasSelectedSome ? 'indeterminate' : tableState.selection.hasSelectedAll}\n                    onChange={() => updateTableState(changeTableSelectionAll(tableState, data, identifierMapping))}\n                  />\n                </th>\n              )}\n              {header && header.map((value, index) => (\n                <th key={`tableHeader${index}`} className={headerPaddingHead}>\n                  <div className=\"row justify-start px-2\">\n                    {value}\n                  </div>\n                </th>\n              ))}\n            </tr>\n            </thead>\n            <tbody>\n            {shownElements.map((value, rowIndex) => (\n              <tr key={identifierMapping(value)}>\n                {tableState.selection && (\n                  <td className={clsx(cellPadding, { [headerPaddingBody]: rowIndex === 0 })}>\n                    <Checkbox\n                      checked={isDataObjectSelected(tableState, value, identifierMapping)}\n                      onChange={() => {\n                        updateTableState(changeTableSelectionSingle(tableState, value, data.length, identifierMapping))\n                      }}\n                    />\n                  </td>\n                )}\n                {rowMappingToCells(value).map((value1, index) => (\n                  <td key={index} className={clsx(cellPadding, { [headerPaddingBody]: rowIndex === 0 })}>\n                    {value1}\n                  </td>\n                ))}\n              </tr>\n            ))}\n            </tbody>\n          </table>\n        </Scrollbars>\n      </div>\n      <div className=\"row justify-center\">\n        {tableState.pagination && (\n          <Pagination page={currentPage} numberOfPages={pageCount} onPageChanged={page => updateTableState({\n            ...tableState,\n            pagination: { entriesPerPage, currentPage: page }\n          })}/>\n        )}\n      </div>\n    </div>\n  )\n}\n","export const noop = () => undefined\n","import { useState } from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport type { CheckedState } from '@radix-ui/react-checkbox'\nimport { Check, Minus } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\ntype CheckBoxSize = 'small' | 'medium' | 'large'\n\nconst checkboxSizeMapping: Record<CheckBoxSize, string> = {\n  small: 'size-4',\n  medium: 'size-6',\n  large: 'size-8',\n}\n\nconst checkboxIconSizeMapping: Record<CheckBoxSize, string> = {\n  small: 'size-3',\n  medium: 'size-5',\n  large: 'size-7',\n}\n\ntype CheckboxProps = {\n  /** used for the label's `for` attribute */\n  id?: string,\n  label?: Omit<LabelProps, 'id'>,\n  /**\n   * @default false\n   */\n  checked: CheckedState,\n  disabled?: boolean,\n  onChange?: (checked: boolean) => void,\n  onChangeTristate?: (checked: CheckedState) => void,\n  size?: CheckBoxSize,\n  className?: string,\n  containerClassName?: string,\n}\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by the parent\n */\nconst ControlledCheckbox = ({\n                              id,\n                              label,\n                              checked,\n                              disabled,\n                              onChange,\n                              onChangeTristate,\n                              size = 'medium',\n                              className = '',\n                              containerClassName\n                            }: CheckboxProps) => {\n  const usedSizeClass = checkboxSizeMapping[size]\n  const innerIconSize = checkboxIconSizeMapping[size]\n\n  const propagateChange = (checked: CheckedState) => {\n    if (onChangeTristate) {\n      onChangeTristate(checked)\n    }\n    if (onChange) {\n      onChange(checked === 'indeterminate' ? false : checked)\n    }\n  }\n\n  const changeValue = () => {\n    const newValue = checked === 'indeterminate' ? false : !checked\n    propagateChange(newValue)\n  }\n\n  return (\n    <div className={clsx('row justify-center items-center', containerClassName)}>\n      <CheckboxPrimitive.Root\n        onCheckedChange={propagateChange}\n        checked={checked}\n        disabled={disabled}\n        id={id}\n        className={clsx(usedSizeClass, `items-center border-2 rounded outline-none focus:border-primary`, {\n          'text-disabled-text border-disabled-text': disabled,\n          'border-on-background': !disabled,\n          'bg-primary/30 border-primary text-primary': checked === true || checked === 'indeterminate',\n          'hover:border-gray-400 focus:hover:border-primary': !checked\n        }, className)}\n      >\n        <CheckboxPrimitive.Indicator>\n          {checked === true && <Check className={innerIconSize}/>}\n          {checked === 'indeterminate' && <Minus className={innerIconSize}/>}\n        </CheckboxPrimitive.Indicator>\n      </CheckboxPrimitive.Root>\n      {label &&\n        <Label {...label} className={clsx('cursor-pointer', label.className)} htmlFor={id} onClick={changeValue}/>}\n    </div>\n  )\n}\n\ntype UncontrolledCheckboxProps = Omit<CheckboxProps, 'value' | 'checked'> & {\n  /**\n   * @default false\n   */\n  defaultValue?: CheckedState,\n}\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by this component\n */\nconst UncontrolledCheckbox = ({\n                                onChange,\n                                onChangeTristate,\n                                defaultValue = false,\n                                ...props\n                              }: UncontrolledCheckboxProps) => {\n  const [checked, setChecked] = useState(defaultValue)\n\n  const handleChange = (checked: CheckedState) => {\n    if (onChangeTristate) {\n      onChangeTristate(checked)\n    }\n    if (onChange) {\n      onChange(checked === 'indeterminate' ? false : checked)\n    }\n    setChecked(checked)\n  }\n\n  return (\n    <ControlledCheckbox\n      {...props}\n      checked={checked}\n      onChangeTristate={handleChange}\n    />\n  )\n}\n\nexport {\n  UncontrolledCheckbox,\n  ControlledCheckbox as Checkbox\n}\n","import type { LabelHTMLAttributes } from 'react'\n\nexport type LabelType = 'labelSmall' | 'labelMedium' | 'labelBig'\nconst styleMapping: Record<LabelType, string> = {\n  labelSmall: 'textstyle-label-sm',\n  labelMedium: 'textstyle-label-md',\n  labelBig: 'textstyle-label-lg',\n}\n\n\nexport type LabelProps = {\n  /** The text for the label */\n  name?: string,\n  /** The styling for the label */\n  labelType?: LabelType,\n} & LabelHTMLAttributes<HTMLLabelElement>\n\n/**\n * A Label component\n */\nexport const Label = ({\n  children,\n  name,\n  labelType = 'labelSmall',\n  ...props\n}: LabelProps) => {\n  return (\n    <label {...props}>\n      {children ? children : (<span className={styleMapping[labelType]}>{name}</span>)}\n    </label>\n  )\n}\n","import { ChevronLast, ChevronLeft, ChevronFirst, ChevronRight } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../hooks/useTranslation'\nimport { useTranslation } from '../hooks/useTranslation'\nimport type { Languages } from '../hooks/useLanguage'\n\ntype PaginationTranslation = {\n  of: string,\n}\nconst defaultPaginationTranslations: Record<Languages, PaginationTranslation> = {\n  en: {\n    of: 'of'\n  },\n  de: {\n    of: 'von'\n  }\n}\n\nexport type PaginationProps = {\n  page: number, // starts with 0\n  numberOfPages: number,\n  onPageChanged: (page: number) => void,\n}\n\n/**\n * A Component showing the pagination allowing first, before, next and last page navigation\n */\nexport const Pagination = ({\n  overwriteTranslation,\n  page,\n  numberOfPages,\n  onPageChanged\n}: PropsForTranslation<PaginationTranslation, PaginationProps>) => {\n  const translation = useTranslation(defaultPaginationTranslations, overwriteTranslation)\n\n  const changePage = (page:number) => {\n    onPageChanged(page)\n  }\n\n  const noPages = numberOfPages === 0\n  const onFirstPage = page === 0 && !noPages\n  const onLastPage = page === numberOfPages - 1\n\n  return (\n    <div className={clsx('row', { 'opacity-30': noPages })}>\n      <button onClick={() => changePage(0)} disabled={onFirstPage}>\n        <ChevronFirst className={clsx({ 'opacity-30': onFirstPage })}/>\n      </button>\n      <button onClick={() => changePage(page - 1)} disabled={onFirstPage}>\n        <ChevronLeft className={clsx({ 'opacity-30': onFirstPage })}/>\n      </button>\n      <div className=\"min-w-[80px] justify-center mx-2\">\n        <span className=\"select-none text-right flex-1\">{noPages ? 0 : page + 1}</span>\n        <span className=\"select-none mx-2\">{translation.of}</span>\n        <span className=\"select-none text-left flex-1\">{numberOfPages}</span>\n      </div>\n      <button onClick={() => changePage(page + 1)} disabled={onLastPage || noPages}>\n        <ChevronRight className={clsx({ 'opacity-30': onLastPage })}/>\n      </button>\n      <button onClick={() => changePage(numberOfPages - 1)} disabled={onLastPage || noPages}>\n        <ChevronLast className={clsx({ 'opacity-30': onLastPage })}/>\n      </button>\n    </div>\n  )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from './useLocalStorage'\n\nexport const languages = ['en', 'de'] as const\nexport type Languages = typeof languages[number]\nexport const languagesLocalNames: Record<Languages, string> = {\n  en: 'English',\n  de: 'Deutsch',\n}\n\nexport const DEFAULT_LANGUAGE = 'en'\n\nexport type LanguageContextValue = {\n  language: Languages,\n  setLanguage: Dispatch<SetStateAction<Languages>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v })\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Languages) => {\n  const { language } = useLanguage()\n  const mapping: Record<Languages, string> = {\n    en: 'en-US',\n    de: 'de-DE'\n  }\n  return mapping[overWriteLanguage ?? language]\n}\n\ntype ProvideLanguageProps = {\n  initialLanguage?: Languages,\n}\n\nexport const ProvideLanguage = ({ initialLanguage, children }: PropsWithChildren<ProvideLanguageProps>) => {\n  const [language, setLanguage] = useState<Languages>(initialLanguage ?? DEFAULT_LANGUAGE)\n  const [storedLanguage, setStoredLanguage] = useLocalStorage<Languages>('language', initialLanguage ?? DEFAULT_LANGUAGE)\n\n  useEffect(() => {\n    if(language !== initialLanguage && initialLanguage){\n      console.warn('LanguageProvider initial state changed: Prefer using useLanguages\\'s setLanguage instead')\n      setLanguage(initialLanguage)\n    }\n  }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n  useEffect(() => {\n    // TODO set locale of html tag here as well\n    setStoredLanguage(language)\n  }, [language, setStoredLanguage])\n\n  useEffect(() => {\n    if (storedLanguage !== null) {\n      setLanguage(storedLanguage)\n      return\n    }\n\n    const languagesToTestAgainst = Object.values(languages)\n\n    const matchingBrowserLanguages = window.navigator.languages\n      .map(language => languagesToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n      .filter(entry => entry !== undefined)\n\n    if (matchingBrowserLanguages.length === 0) return\n\n    const firstMatch = matchingBrowserLanguages[0] as Languages\n    setLanguage(firstMatch)\n  }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n  return (\n    <LanguageContext.Provider value={{\n      language,\n      setLanguage\n    }}>\n      {children}\n    </LanguageContext.Provider>\n  )\n}\n","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T, >(key: string, initValue: T): [T, SetValue<T>] => {\n  const get = useCallback((): T => {\n    if (typeof window === 'undefined') {\n      return initValue\n    }\n    const storageService = new LocalStorageService()\n    const value = storageService.get<T>(key)\n    return value || initValue\n  }, [initValue, key])\n\n  const [storedValue, setStoredValue] = useState<T>(get)\n\n  const setValue: SetValue<T> = useCallback(value => {\n    const newValue = value instanceof Function ? value(storedValue) : value\n    const storageService = new LocalStorageService()\n    storageService.set(key, value)\n\n    setStoredValue(newValue)\n  }, [storedValue, setStoredValue, key])\n\n  useEffect(() => {\n    setStoredValue(get())\n  }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n  return [storedValue, setValue]\n}","import type { Languages } from './useLanguage'\nimport { useLanguage } from './useLanguage'\n\nexport type Translation<T> = Record<Languages, T>\n\ntype OverwriteTranslationType<Translation extends Record<string, unknown>> = {\n  language?: Languages,\n  translation?: Partial<Record<Languages, Partial<Translation>>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n *              if you don't expect any other props other than `language` and get an\n *              error when using your component (because it uses `forwardRef` etc.)\n *              you can try out `Record<string, unknown>`, this might resolve your\n *              problem as `SomeType & never` is still `never` but `SomeType & unknown`\n *              is `SomeType` which means that adding back props (like `ref` etc.)\n *              works properly\n */\nexport type PropsForTranslation<\n  Translation extends Record<string, unknown>,\n  Props = Record<string, never>\n> = Props & {\n  overwriteTranslation?: OverwriteTranslationType<Translation>,\n};\n\nexport const useTranslation = <Translation extends Record<string, unknown>>(\n  defaults: Record<Languages, Translation>,\n  translationOverwrite: OverwriteTranslationType<Translation> = {}\n) : Translation => {\n  const { language: languageProp, translation: overwrite } = translationOverwrite\n  const { language: inferredLanguage } = useLanguage()\n  const usedLanguage = languageProp ?? inferredLanguage\n  let defaultValues: Translation = defaults[usedLanguage]\n  if (overwrite && overwrite[usedLanguage]) {\n    defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }\n  }\n  return defaultValues\n}\n"],"mappings":"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","names":["useEffect","useState","jsx","checked","clsx","useEffect","useState","useState","jsx","jsx","jsxs","page","clsx","clsx","jsx","jsxs","useState","useEffect"]}