{"version":3,"sources":["../src/coloring/shading.ts","../src/coloring/types.ts","../src/components/Avatar.tsx","../src/components/AvatarGroup.tsx","../src/components/BreadCrumb.tsx","../src/components/Button.tsx","../src/components/ChipList.tsx","../src/components/Circle.tsx","../src/components/ErrorComponent.tsx","../src/hooks/useLanguage.tsx","../src/hooks/useLocalStorage.tsx","../src/util/storage.ts","../src/hooks/useTranslation.ts","../src/components/Expandable.tsx","../src/components/HelpwaveBadge.tsx","../src/components/icons/Helpwave.tsx","../src/components/layout/Tile.tsx","../src/components/HideableContentSection.tsx","../src/components/InputGroup.tsx","../src/util/noop.ts","../src/components/LoadingAndErrorComponent.tsx","../src/components/LoadingAnimation.tsx","../src/components/LoadingButton.tsx","../src/components/MarkdownInterpreter.tsx","../src/components/Pagination.tsx","../src/components/Profile.tsx","../src/components/ProgressIndicator.tsx","../src/components/Ring.tsx","../src/components/SearchableList.tsx","../src/util/simpleSearch.ts","../src/components/user-input/Input.tsx","../src/hooks/useSaveDelay.ts","../src/components/user-input/Label.tsx","../src/components/SortButton.tsx","../src/components/StepperBar.tsx","../src/util/array.ts","../src/components/Table.tsx","../src/components/user-input/Checkbox.tsx","../src/components/TechRadar.tsx","../src/components/TextImage.tsx","../src/components/TimeDisplay.tsx","../src/hooks/useHoverState.ts","../src/components/Tooltip.tsx","../src/components/VerticalDivider.tsx","../src/components/date/DatePicker.tsx","../src/util/date.ts","../src/components/date/YearMonthPicker.tsx","../src/components/date/DayPicker.tsx","../src/components/date/TimePicker.tsx","../src/components/icons/Tag.tsx","../src/components/layout/Carousel.tsx","../src/util/math.ts","../src/util/easeFunctions.ts","../src/util/loopingArray.ts","../src/components/layout/DividerInserter.tsx","../src/components/layout/FAQSection.tsx","../src/components/modals/Modal.tsx","../src/components/modals/ModalRegister.tsx","../src/components/modals/ConfirmDialog.tsx","../src/components/modals/DiscardChangesDialog.tsx","../src/components/modals/InputModal.tsx","../src/components/user-input/Select.tsx","../src/components/modals/LanguageModal.tsx","../src/components/properties/CheckboxProperty.tsx","../src/components/properties/PropertyBase.tsx","../src/components/properties/DateProperty.tsx","../src/components/properties/MultiSelectProperty.tsx","../src/components/user-input/MultiSelect.tsx","../src/components/user-input/Menu.tsx","../src/hooks/useOutsideClick.ts","../src/components/properties/NumberProperty.tsx","../src/components/properties/SelectProperty.tsx","../src/components/user-input/SearchableSelect.tsx","../src/components/properties/TextProperty.tsx","../src/components/user-input/Textarea.tsx","../src/components/user-input/DateAndTimePicker.tsx","../src/components/user-input/ScrollPicker.tsx","../src/components/user-input/ToggleableInput.tsx","../src/hooks/useTheme.tsx","../src/util/builder.ts","../src/util/emailValidation.ts","../src/util/news.ts"],"sourcesContent":["import tinycolor from 'tinycolor2'\nimport type { ShadedColors } from './types'\nimport { shadingColorValues } from './types'\n\n// Function to generate a full shading of several colors\nexport const generateShadingColors = (partialShading: Omit<Partial<ShadedColors>, '0' | '1000'>): ShadedColors => {\n  const shading: ShadedColors = {\n    0: '#FFFFFF',\n    1000: '#000000'\n  } as ShadedColors\n\n  let index = 1\n  while (index < shadingColorValues.length - 1) {\n    const previous = shadingColorValues[index - 1]!\n    const current = shadingColorValues[index]!\n\n    if (partialShading[current] !== undefined) {\n      shading[current] = partialShading[current]\n      index++\n      continue\n    }\n\n    let j: number = index + 1\n    while (j < shadingColorValues.length) {\n      if (partialShading[shadingColorValues[j]!] !== undefined) {\n        break\n      }\n      j++\n    }\n    if (j === shadingColorValues.length) {\n      j = shadingColorValues.length - 1\n    }\n\n    const nextFound = shadingColorValues[j]!\n    const interval = nextFound - previous\n    for (let k = index; k < j; k++) {\n      const current = shadingColorValues[k]!\n      const previousValue = partialShading[previous] ?? shading[previous]\n      const nextValue = partialShading[nextFound] ?? shading[nextFound]\n      shading[current] = tinycolor.mix(tinycolor(previousValue), tinycolor(nextValue), (current - previous) / interval * 100).toHexString()\n    }\n    index = j\n  }\n\n  return shading\n}\n","export const shadingColorValues = [0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000] as const\nexport type ColorShadingValue = typeof shadingColorValues[number]\nexport type ShadedColors = Record<ColorShadingValue, string>\n\nexport type ColoringStyle = 'background' | 'tonal' | 'tonal-opaque' | 'text' | 'text-border'\nexport type ColorMode = 'light' | 'dark'\n\nexport type Coloring = {\n  color: '',\n  style?: ColoringStyle,\n  mode?: ColorMode,\n  hover?: boolean,\n}\n","import Image from 'next/image'\nimport clsx from 'clsx'\n\nexport const avtarSizeList = ['tiny', 'small', 'medium', 'large'] as const\nexport type AvatarSize = typeof avtarSizeList[number]\nexport const avatarSizeMapping: Record<AvatarSize, number> = {\n  tiny: 24,\n  small: 32,\n  medium: 48,\n  large: 64\n}\n\nexport type AvatarProps = {\n  avatarUrl: string,\n  alt: string,\n  size?: AvatarSize,\n  className?: string,\n}\n\n/**\n * A component for showing a profile picture\n */\nconst Avatar = ({ avatarUrl, alt, size = 'medium', className = '' }: AvatarProps) => {\n  // TODO remove later\n  avatarUrl = 'https://cdn.helpwave.de/boringavatar.svg'\n\n  const avtarSize = {\n    tiny: 24,\n    small: 32,\n    medium: 48,\n    large: 64,\n  }[size]\n\n  const style = {\n    width: avtarSize + 'px',\n    height: avtarSize + 'px',\n    maxWidth: avtarSize + 'px',\n    maxHeight: avtarSize + 'px',\n    minWidth: avtarSize + 'px',\n    minHeight: avtarSize + 'px',\n  }\n\n  return (\n    // TODO transparent or white background later\n    <div className={clsx(`rounded-full bg-primary`, className)} style={style}>\n      <Image\n        className=\"rounded-full border border-gray-200\"\n        style={style}\n        src={avatarUrl}\n        alt={alt}\n        width={avtarSize}\n        height={avtarSize}\n      />\n    </div>\n  )\n}\n\nexport { Avatar }\n","import type { AvatarProps, AvatarSize } from './Avatar'\nimport { Avatar, avatarSizeMapping } from './Avatar'\n\nexport type AvatarGroupProps = {\n  avatars: Omit<AvatarProps, 'size'>[],\n  maxShownProfiles?: number,\n  size?: AvatarSize,\n}\n\n/**\n * A component for showing a group of Avatar's\n */\nexport const AvatarGroup = ({\n                              avatars,\n                              maxShownProfiles = 5,\n                              size = 'tiny'\n                            }: AvatarGroupProps) => {\n  const displayedProfiles = avatars.length < maxShownProfiles ? avatars : avatars.slice(0, maxShownProfiles)\n  const diameter = avatarSizeMapping[size]\n  const stackingOverlap = 0.5 // given as a percentage\n  const notDisplayedProfiles = avatars.length - maxShownProfiles\n  const avatarGroupWidth = diameter * (stackingOverlap * (displayedProfiles.length - 1) + 1)\n  return (\n    <div className=\"row relative\" style={{ height: diameter + 'px' }}>\n      <div style={{ width: avatarGroupWidth + 'px' }}>\n        {displayedProfiles.map((avatar, index) => (\n          <div\n            key={index}\n            className=\"absolute\"\n            style={{ left: (index * diameter * stackingOverlap) + 'px', zIndex: maxShownProfiles - index }}\n          >\n            <Avatar avatarUrl={avatar.avatarUrl} alt={avatar.alt} size={size}/>\n          </div>\n        ))}\n      </div>\n      {\n        notDisplayedProfiles > 0 && (\n          <div\n            className=\"truncate row items-center\"\n            style={{ fontSize: (diameter / 2) + 'px', marginLeft: (1 + diameter / 16) + 'px' }}\n          >\n            <span>+ {notDisplayedProfiles}</span>\n          </div>\n        )\n      }\n    </div>\n  )\n}\n","import Link from 'next/link'\nimport clsx from 'clsx'\n\nexport type Crumb = {\n  display: string,\n  link: string,\n}\n\ntype BreadCrumbProps = {\n  crumbs: Crumb[],\n  linkClassName?: string,\n  containerClassName?: string,\n}\n\n/**\n * A component for showing a hierarchical link structure with an independent link on each element\n *\n * e.g. Organizations/Ward/<id>\n */\nexport const BreadCrumb = ({ crumbs, linkClassName, containerClassName }: BreadCrumbProps) => {\n  const color = 'text-description'\n\n  return (\n    <div className={clsx('row', containerClassName)}>\n      {crumbs.map((crumb, index) => (\n        <div key={index}>\n          <Link href={crumb.link} className={clsx(linkClassName, { [`${color} hover:brightness-60`]: index !== crumbs.length - 1 })}>\n            {crumb.display}\n          </Link>\n          {index !== crumbs.length - 1 && <span className={clsx(`px-1`, color)}>/</span>}\n        </div>\n      ))}\n    </div>\n  )\n}\n","import type { PropsWithChildren, ButtonHTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nexport type SolidButtonColor = 'primary' | 'secondary' | 'tertiary' | 'positive' | 'warning'| 'negative'\nexport type OutlineButtonColor = 'primary'\nexport type TextButtonColor = 'negative' | 'neutral'\n\ntype ButtonSizes = 'small' | 'medium' | 'large'\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = PropsWithChildren<{\n  /**\n   * @default 'medium'\n   */\n  size?: ButtonSizes,\n}> & ButtonHTMLAttributes<Element>\n\nexport const ButtonSizePaddings: Record<ButtonSizes, string> = {\n  small: 'btn-sm',\n  medium: 'btn-md',\n  large: 'btn-lg'\n}\n\ntype ButtonWithIconsProps = ButtonProps & {\n  startIcon?: ReactNode,\n  endIcon?: ReactNode,\n}\n\nexport type SolidButtonProps = ButtonWithIconsProps & {\n  color?: SolidButtonColor,\n}\n\nexport type OutlineButtonProps = ButtonWithIconsProps & {\n  color?: OutlineButtonColor,\n}\n\nexport type TextButtonProps = ButtonWithIconsProps & {\n  color?: TextButtonColor,\n}\n\n/**\n * A button with a solid background and different sizes\n */\nconst SolidButton = ({\n                       children,\n                       disabled = false,\n                       color = 'primary',\n                       size = 'medium',\n                       startIcon,\n                       endIcon,\n                       onClick,\n                       className,\n                       ...restProps\n                     }: SolidButtonProps) => {\n  const colorClasses = {\n    primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n    secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n    tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n    positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n    warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n    negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n  }[color]\n\n  const iconColorClasses = {\n    primary: 'text-button-solid-primary-icon',\n    secondary: 'text-button-solid-secondary-icon',\n    tertiary: 'text-button-solid-tertiary-icon',\n    positive: 'text-button-solid-positive-icon',\n    warning: 'text-button-solid-warning-icon',\n    negative: 'text-button-solid-negative-icon',\n  }[color]\n\n  return (\n    <button\n      onClick={disabled ? undefined : onClick}\n      disabled={disabled || onClick === undefined}\n      className={clsx(\n        className,\n        {\n          'text-disabled-text bg-disabled-background': disabled,\n          [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n        },\n        ButtonSizePaddings[size]\n      )}\n      {...restProps}\n    >\n      {startIcon && (\n        <span\n          className={clsx({\n            [iconColorClasses]: !disabled,\n            [`text-disabled-icon`]: disabled\n          })}\n        >\n        {startIcon}\n      </span>\n      )}\n      {children}\n      {endIcon && (\n        <span\n          className={clsx({\n            [iconColorClasses]: !disabled,\n            [`text-disabled-icon`]: disabled\n          })}\n        >\n        {endIcon}\n      </span>\n      )}\n    </button>\n  )\n}\n\n/**\n * A button with an outline border and different sizes\n */\nconst OutlineButton = ({\n                         children,\n                         disabled = false,\n                         color = 'primary',\n                         size = 'medium',\n                         startIcon,\n                         endIcon,\n                         onClick,\n                         className,\n                         ...restProps\n                       }: OutlineButtonProps) => {\n  const colorClasses = {\n    primary: 'bg-transparent border-2 border-button-outline-primary-text text-button-outline-primary-text',\n  }[color]\n\n  const iconColorClasses = {\n    primary: 'text-button-outline-primary-icon',\n  }[color]\n  return (\n    <button\n      onClick={disabled ? undefined : onClick}\n      disabled={disabled || onClick === undefined}\n      className={clsx(\n        className, {\n          'text-disabled-text border-disabled-outline)': disabled,\n          [clsx(colorClasses, 'hover:brightness-80')]: !disabled,\n        },\n        ButtonSizePaddings[size]\n      )}\n      {...restProps}\n    >\n      {startIcon && (\n        <span\n          className={clsx({\n            [iconColorClasses]: !disabled,\n            [`text-disabled-icon`]: disabled\n          })}\n        >\n        {startIcon}\n      </span>\n      )}\n      {children}\n      {endIcon && (\n        <span\n          className={clsx({\n            [iconColorClasses]: !disabled,\n            [`text-disabled-icon`]: disabled\n          })}\n        >\n        {endIcon}\n      </span>\n      )}\n    </button>\n  )\n}\n\n/**\n * A text that is a button that can have different sizes\n */\nconst TextButton = ({\n                      children,\n                      disabled = false,\n                      color = 'neutral',\n                      size = 'medium',\n                      startIcon,\n                      endIcon,\n                      onClick,\n                      className,\n                      ...restProps\n                    }: TextButtonProps) => {\n  const colorClasses = {\n    negative: 'bg-transparent text-button-text-negative-text',\n    neutral: 'bg-transparent text-button-text-neutral-text',\n  }[color]\n\n  const iconColorClasses = {\n    negative: 'text-button-text-negative-icon',\n    neutral: 'text-button-text-neutral-icon',\n  }[color]\n  return (\n    <button\n      onClick={disabled ? undefined : onClick}\n      disabled={disabled || onClick === undefined}\n      className={clsx(\n        className, {\n          'text-disabled-text': disabled,\n          [clsx(colorClasses, 'hover:bg-button-text-hover-background rounded-full')]: !disabled,\n        },\n        ButtonSizePaddings[size]\n      )}\n      {...restProps}\n    >\n      {startIcon && (\n        <span\n          className={clsx({\n            [iconColorClasses]: !disabled,\n            [`text-disabled-icon`]: disabled\n          })}\n        >\n        {startIcon}\n      </span>\n      )}\n      {children}\n      {endIcon && (\n        <span\n          className={clsx({\n            [iconColorClasses]: !disabled,\n            [`text-disabled-icon`]: disabled\n          })}\n        >\n        {endIcon}\n      </span>\n      )}\n    </button>\n  )\n}\n\n// TODO Icon button\n\nexport { SolidButton, OutlineButton, TextButton }\n","import type { HTMLProps, PropsWithChildren, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nexport type ChipColor = 'default' | 'dark'| 'red' | 'yellow' | 'green' | 'blue' | 'pink'\ntype ChipVariant = 'normal' | 'fullyRounded'\n\nexport type ChipProps = HTMLProps<HTMLDivElement> & PropsWithChildren<{\n  color?: ChipColor,\n  variant?: ChipVariant,\n  trailingIcon?: ReactNode,\n}>\n\n/**\n * A component for displaying a single chip\n */\nexport const Chip = ({\n                       children,\n                       trailingIcon,\n                       color = 'default',\n                       variant = 'normal',\n                       className = '',\n                       ...restProps\n                     }: ChipProps) => {\n  const colorMapping: string = {\n    default: 'text-tag-default-text bg-tag-default-background',\n    dark: 'text-tag-dark-text bg-tag-dark-background',\n    red: 'text-tag-red-text bg-tag-red-background',\n    yellow: 'text-tag-yellow-text bg-tag-yellow-background',\n    green: 'text-tag-green-text bg-tag-green-background',\n    blue: 'text-tag-blue-text bg-tag-blue-background',\n    pink: 'text-tag-pink-text bg-tag-pink-background',\n  }[color]\n\n  const colorMappingIcon: string = {\n    default: 'text-tag-default-icon',\n    dark: 'text-tag-dark-icon',\n    red: 'text-tag-red-icon',\n    yellow: 'text-tag-yellow-icon',\n    green: 'text-tag-green-icon',\n    blue: 'text-tag-blue-icon',\n    pink: 'text-tag-pink-icon',\n  }[color]\n\n  return (\n    <div\n      {...restProps}\n      className={clsx(\n        `row w-fit px-2 py-1`,\n        colorMapping,\n        {\n          'rounded-md': variant === 'normal',\n          'rounded-full': variant === 'fullyRounded',\n        },\n        className\n      )}\n    >\n      {children}\n      {trailingIcon && (<span className={colorMappingIcon}>{trailingIcon}</span>)}\n    </div>\n  )\n}\n\nexport type ChipListProps = {\n  list: ChipProps[],\n  className?: string,\n}\n\n/**\n * A component for displaying a list of chips\n */\nexport const ChipList = ({\n                           list,\n                           className = ''\n                         }: ChipListProps) => {\n  return (\n    <div className={clsx('flex flex-wrap gap-x-4 gap-y-2', className)}>\n      {list.map((value, index) => (\n        <Chip\n          key={index}\n          {...value}\n          color={value.color ?? 'dark'}\n          variant={value.variant ?? 'normal'}\n        >\n          {value.children}\n        </Chip>\n      ))}\n    </div>\n  )\n}\n","import type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type CircleProps = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'color'> & {\n  radius: number,\n  className?: string,\n}\n\nexport const Circle = ({\n  radius = 20,\n  className = 'bg-primary',\n  style,\n  ...restProps\n}: CircleProps) => {\n  const size = radius * 2\n  return (\n    <div\n      className={clsx(`rounded-full`, className)}\n      style={{\n        width: `${size}px`,\n        height: `${size}px`,\n        ...style,\n      }}\n      {...restProps}\n    />\n  )\n}\n","import { AlertOctagon } from 'lucide-react'\nimport type { Languages } from '../hooks/useLanguage'\nimport type { PropsForTranslation } from '../hooks/useTranslation'\nimport { useTranslation } from '../hooks/useTranslation'\nimport clsx from 'clsx'\n\ntype ErrorComponentTranslation = {\n  errorOccurred: string,\n}\n\nconst defaultErrorComponentTranslation: Record<Languages, ErrorComponentTranslation> = {\n  en: {\n    errorOccurred: 'An error occurred'\n  },\n  de: {\n    errorOccurred: 'Ein Fehler ist aufgetreten'\n  }\n}\n\nexport type ErrorComponentProps = {\n  errorText?: string,\n  classname?: string,\n}\n\n/**\n * The Component to show when an error occurred\n */\nexport const ErrorComponent = ({\n  overwriteTranslation,\n  errorText,\n  classname\n}: PropsForTranslation<ErrorComponentTranslation, ErrorComponentProps>) => {\n  const translation = useTranslation(defaultErrorComponentTranslation, overwriteTranslation)\n  return (\n    <div className={clsx('col items-center justify-center gap-y-4 w-full h-24', classname)}>\n      <AlertOctagon size={64} className=\"text-warning\"/>\n      {errorText ?? `${translation.errorOccurred} :(`}\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}","class StorageService {\n  // this seems to be a bug in eslint as 'paramter-properties' is a special syntax of typescript\n\n  constructor(private storage: Storage) {}\n\n  public get<T>(key: string): T | null {\n    const value = this.storage.getItem(key)\n    if (value === null) {\n      return null\n    }\n    return JSON.parse(value)\n  }\n\n  public set<T>(key: string, value: T) {\n    this.storage.setItem(key, JSON.stringify(value))\n  }\n\n  public delete(key: string) {\n    this.storage.removeItem(key)\n  }\n\n  public deleteAll() {\n    this.storage.clear()\n  }\n}\n\nexport class LocalStorageService extends StorageService {\n  constructor() {\n    super(window.localStorage)\n  }\n}\n\nexport class SessionStorageService extends StorageService {\n  constructor() {\n    super(window.sessionStorage)\n  }\n}\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","import type { PropsWithChildren, ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport clsx from 'clsx'\n\ntype IconBuilder = (expanded: boolean) => ReactNode\n\nexport type ExpandableProps = PropsWithChildren<{\n  label: ReactNode,\n  icon?: IconBuilder,\n  initialExpansion?: boolean,\n  /**\n   * Whether the expansion should only happen when the header is clicked or on the entire component\n   */\n  clickOnlyOnHeader?: boolean,\n  className?: string,\n  headerClassName?: string,\n}>\n\nconst DefaultIcon: IconBuilder = (expanded) => expanded ?\n  (<ChevronUp size={16} className=\"min-w-[16px]\"/>)\n  : (<ChevronDown size={16} className=\"min-w-[16px]\"/>)\n\n/**\n * A Component for showing and hiding content\n */\nexport const Expandable = forwardRef<HTMLDivElement, ExpandableProps>(({\n                                                                         children,\n                                                                         label,\n                                                                         icon,\n                                                                         initialExpansion = false,\n                                                                         clickOnlyOnHeader = true,\n                                                                         className = '',\n                                                                         headerClassName = ''\n                                                                       }, ref) => {\n  const [isExpanded, setIsExpanded] = useState(initialExpansion)\n  icon ??= DefaultIcon\n\n  return (\n    <div\n      ref={ref}\n      className={clsx('col bg-surface text-on-surface group rounded-lg shadow-sm', { 'cursor-pointer': !clickOnlyOnHeader }, className)}\n      onClick={() => !clickOnlyOnHeader && setIsExpanded(!isExpanded)}\n    >\n      <button\n        className={clsx('btn-md rounded-lg justify-between items-center bg-surface text-on-surface', { 'group-hover:brightness-95': !isExpanded }, headerClassName)}\n        onClick={() => clickOnlyOnHeader && setIsExpanded(!isExpanded)}\n      >\n        {label}\n        {icon(isExpanded)}\n      </button>\n      {isExpanded && (\n        <div className=\"col\">\n          {children}\n        </div>\n      )}\n    </div>\n  )\n})\n\nExpandable.displayName = 'Expandable'\n","import clsx from 'clsx'\nimport { Helpwave } from './icons/Helpwave'\nimport { Tile } from './layout/Tile'\n\ntype Size = 'small' | 'large'\n\nexport type HelpwaveBadgeProps = {\n  size?: Size,\n  title?: string,\n  className?: string,\n}\n\n/**\n * A Badge with the helpwave logo and the helpwave name\n */\nexport const HelpwaveBadge = ({\n  size = 'small',\n  title = 'helpwave',\n  className = ''\n}: HelpwaveBadgeProps) => {\n  const iconSize: number = size === 'small' ? 24 : 64\n\n  return (\n    <Tile\n      prefix={(<Helpwave size={iconSize} />)}\n      title={{ value: title, className: size === 'small' ? 'textstyle-title-lg text-base' : 'textstyle-title-xl' }}\n      className={clsx(\n        {\n          'px-2 py-1 rounded-md': size === 'small',\n          'px-4 py-1 rounded-md': size === 'large',\n        }, className\n)}\n    />\n  )\n}\n","import type { SVGProps } from 'react'\nimport { clsx } from 'clsx'\n\nexport type HelpwaveProps = SVGProps<SVGSVGElement> & {\n  color?: string,\n  animate?: 'none' | 'loading' | 'pulse' | 'bounce',\n  size?: number,\n}\n\n/**\n * The helpwave loading spinner based on the svg logo.\n */\nexport const Helpwave = ({\n  color = 'currentColor',\n  animate = 'none',\n  size = 64,\n  ...props\n}: HelpwaveProps) => {\n  const isLoadingAnimation = animate === 'loading'\n  let svgAnimationKey = ''\n\n  if (animate === 'pulse') {\n    svgAnimationKey = 'animate-pulse'\n  } else if (animate === 'bounce') {\n    svgAnimationKey = 'animate-bounce'\n  }\n\n  if (size < 0) {\n    console.error('size cannot be less than 0')\n    size = 64\n  }\n\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 888 888\"\n      fill=\"none\"\n      strokeLinecap=\"round\"\n      strokeWidth={48}\n      {...props}\n    >\n      <g className={clsx(svgAnimationKey)}>\n        <path className={clsx({ 'animate-wave-big-left-up': isLoadingAnimation })} d=\"M144 543.235C144 423.259 232.164 326 340.92 326\" stroke={color} strokeDasharray=\"1000\" />\n        <path className={clsx({ 'animate-wave-big-right-down': isLoadingAnimation })} d=\"M537.84 544.104C429.084 544.104 340.92 446.844 340.92 326.869\" stroke={color} strokeDasharray=\"1000\" />\n        <path className={clsx({ 'animate-wave-small-left-up': isLoadingAnimation })} d=\"M462.223 518.035C462.223 432.133 525.348 362.495 603.217 362.495\" stroke={color} strokeDasharray=\"1000\" />\n        <path className={clsx({ 'animate-wave-small-right-down': isLoadingAnimation })} d=\"M745.001 519.773C666.696 519.773 603.218 450.136 603.218 364.233\" stroke={color} strokeDasharray=\"1000\" />\n      </g>\n    </svg>\n  )\n}\n","import type { ReactNode } from 'react'\nimport Image from 'next/image'\nimport clsx from 'clsx'\n\nexport type TileProps = {\n  title: { value: string, className?: string },\n  description?: { value: string, className?: string },\n  prefix?: ReactNode,\n  suffix?: ReactNode,\n  className?: string,\n}\n\n/**\n * A component for creating a tile similar to the flutter ListTile\n */\nexport const Tile = ({\n  title,\n  description,\n  prefix,\n  suffix,\n  className\n}: TileProps) => {\n  return (\n    <div className={clsx('row gap-x-4 w-full items-center', className)}>\n      {prefix}\n      <div className=\"col w-full\">\n        <span className={clsx(title.className)}>{title.value}</span>\n        {!!description &&\n          <span className={clsx(description.className ?? 'textstyle-description')}>{description.value}</span>}\n      </div>\n      {suffix}\n    </div>\n  )\n}\n\ntype ImageLocation = 'prefix' | 'suffix'\ntype ImageSize = {\n  width: number,\n  height: number,\n}\n\nexport type TileWithImageProps = Omit<TileProps, 'suffix' | 'prefix'> & {\n  url: string,\n  imageLocation?: ImageLocation,\n  imageSize?: ImageSize,\n  imageClassName?: string,\n}\n\n/**\n * A Tile with an image as prefix or suffix\n */\nexport const TileWithImage = ({\n  url,\n  imageLocation = 'prefix',\n  imageSize = { width: 24, height: 24 },\n  imageClassName = '',\n  ...tileProps\n}: TileWithImageProps) => {\n  const image = <Image src={url} alt=\"\" {...imageSize} className={clsx(imageClassName)}/>\n  return (\n    <Tile\n      {...tileProps}\n      prefix={imageLocation === 'prefix' ? image : undefined}\n      suffix={imageLocation === 'suffix' ? image : undefined}\n    />\n  )\n}\n","import { useState, type PropsWithChildren, type ReactNode } from 'react'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport clsx from 'clsx'\n\nexport type HideableContentSectionProps = PropsWithChildren & {\n  initiallyOpen?: boolean,\n  disabled: boolean,\n  header: ReactNode,\n}\n\n/**\n * A Component to hide and show\n */\nexport const HideableContentSection = ({\n  initiallyOpen = true,\n  disabled,\n  children,\n  header\n}: HideableContentSectionProps) => {\n  const [open, setOpen] = useState(initiallyOpen)\n  return (\n    <div className=\"col\">\n      <div\n        className={clsx('row justify-between items-center', { 'cursor-pointer': !disabled })}\n        onClick={() => {\n          if (!disabled) {\n            setOpen(!open)\n          }\n        }}\n      >\n        <div>\n          {header}\n        </div>\n        {!disabled && (open ? <ChevronUp/> : <ChevronDown/>)}\n      </div>\n      {open && (\n        <div>\n          {children}\n        </div>\n      )}\n    </div>\n  )\n}\n","import type { PropsWithChildren } from 'react'\nimport { useEffect, useState } from 'react'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport clsx from 'clsx'\nimport { noop } from '../util/noop'\n\nexport type InputGroupProps = PropsWithChildren<{\n  title: string,\n  expanded?: boolean,\n  isExpandable?: boolean,\n  disabled?: boolean,\n  onChange?: (value: boolean) => void,\n  className?: string,\n}>\n\n/**\n * A Component for layouting inputs in an expandable group\n */\nexport const InputGroup = ({\n  children,\n  title,\n  expanded = true,\n  isExpandable = true,\n  disabled = false,\n  onChange = noop,\n  className = '',\n}: InputGroupProps) => {\n  const [isExpanded, setIsExpanded] = useState<boolean>(expanded)\n\n  useEffect(() => {\n    setIsExpanded(expanded)\n  }, [expanded])\n\n  return (\n    <div className={clsx('col gap-y-4 p-4 bg-white rounded-xl', className)}>\n      <div\n        className={clsx('row justify-between items-center', {\n          'cursor-pointer': isExpandable && !disabled,\n          'cursor-not-allowed': disabled,\n        },\n        {\n          'text-primary': !disabled,\n          'text-primary/40': disabled\n        })}\n        onClick={() => {\n          if (!isExpandable) {\n            return\n          }\n          const updatedIsExpanded = !isExpanded\n          onChange(updatedIsExpanded)\n          setIsExpanded(updatedIsExpanded)\n        }}\n      >\n        <span className=\"textstyle-title-md\">{title}</span>\n        <div className={clsx('rounded-full text-white w-6 h-6', {\n          'bg-primary': (isExpandable && !disabled) || expanded,\n          'bg-primary/40': disabled,\n        })}>\n          {isExpanded\n            ? <ChevronUp className=\"-translate-y-[1px]\" size={24}/>\n            : <ChevronDown className=\"translate-y-[1px]\" size={24}/>\n          }\n        </div>\n      </div>\n      {isExpanded && (\n        <div className=\"col gap-y-2 h-full\">\n          {children}\n        </div>\n      )}\n    </div>\n  )\n}\n","export const noop = () => undefined\n","import type { PropsWithChildren } from 'react'\nimport { useState } from 'react'\nimport type { LoadingAnimationProps } from './LoadingAnimation'\nimport type { ErrorComponentProps } from './ErrorComponent'\nimport { LoadingAnimation } from './LoadingAnimation'\nimport { ErrorComponent } from './ErrorComponent'\n\nexport type LoadingAndErrorComponentProps = PropsWithChildren<{\n  isLoading?: boolean,\n  hasError?: boolean,\n  loadingProps?: LoadingAnimationProps,\n  errorProps?: ErrorComponentProps,\n  /**\n   * in milliseconds\n   */\n  minimumLoadingDuration?: number,\n}>\n\n/**\n * A Component that shows the Error and Loading animation, when appropriate and the children otherwise\n */\nexport const LoadingAndErrorComponent = ({\n  children,\n  isLoading = false,\n  hasError = false,\n  errorProps,\n  loadingProps,\n  minimumLoadingDuration\n}: LoadingAndErrorComponentProps) => {\n  const [isInMinimumLoading, setIsInMinimumLoading] = useState(false)\n  const [hasUsedMinimumLoading, setHasUsedMinimumLoading] = useState(false)\n  if (minimumLoadingDuration && !isInMinimumLoading && !hasUsedMinimumLoading) {\n    setIsInMinimumLoading(true)\n    setTimeout(() => {\n      setIsInMinimumLoading(false)\n      setHasUsedMinimumLoading(true)\n    }, minimumLoadingDuration)\n  }\n\n  if (isLoading || (minimumLoadingDuration && isInMinimumLoading)) {\n    return <LoadingAnimation {...loadingProps}/>\n  }\n  if (hasError) {\n    return <ErrorComponent {...errorProps}/>\n  }\n  return children\n}\n","import type { Languages } from '../hooks/useLanguage'\nimport type { PropsForTranslation } from '../hooks/useTranslation'\nimport { useTranslation } from '../hooks/useTranslation'\nimport { Helpwave } from './icons/Helpwave'\nimport clsx from 'clsx'\n\ntype LoadingAnimationTranslation = {\n  loading: string,\n}\n\nconst defaultLoadingAnimationTranslation: Record<Languages, LoadingAnimationTranslation> = {\n  en: {\n    loading: 'Loading data'\n  },\n  de: {\n    loading: 'Lade Daten'\n  }\n}\n\nexport type LoadingAnimationProps = {\n  loadingText?: string,\n  classname?: string,\n}\n\n/**\n * A Component to show when loading data\n */\nexport const LoadingAnimation = ({\n  overwriteTranslation,\n  loadingText,\n  classname\n}: PropsForTranslation<LoadingAnimationTranslation, LoadingAnimationProps>) => {\n  const translation = useTranslation(defaultLoadingAnimationTranslation, overwriteTranslation)\n  return (\n    <div className={clsx('col items-center justify-center w-full h-24', classname)}>\n      <Helpwave animate=\"loading\" />\n      {loadingText ?? `${translation.loading}...`}\n    </div>\n  )\n}\n","import clsx from 'clsx'\nimport { Helpwave } from './icons/Helpwave'\nimport type { SolidButtonProps } from './Button'\nimport { ButtonSizePaddings } from './Button'\nimport { SolidButton } from './Button'\nimport { noop } from '../util/noop'\n\ntype LoadingButtonProps = {\n  isLoading?: boolean,\n} & SolidButtonProps\n\nexport const LoadingButton = ({ isLoading = false, size = 'medium', onClick, ...rest }: LoadingButtonProps) => {\n  const paddingClass = ButtonSizePaddings[size]\n\n  return (\n    <div className=\"inline-block relative\">\n      {\n        isLoading && (\n          <div className={clsx('absolute inset-0 row items-center justify-center bg-white/40', paddingClass)}>\n            <Helpwave animate=\"loading\" className=\"text-white\"/>\n          </div>\n        )\n      }\n      <SolidButton {...rest} disabled={rest.disabled} onClick={isLoading ? noop: onClick}/>\n    </div>\n  )\n}\n","type ASTNodeModifierType =\n  'none'\n  | 'italic'\n  | 'bold'\n  | 'underline'\n  | 'font-space'\n  | 'primary'\n  | 'secondary'\n  | 'warn'\n  | 'positive'\n  | 'negative'\n\nconst astNodeInserterType = ['helpwave', 'newline'] as const\ntype ASTNodeInserterType = typeof astNodeInserterType[number]\ntype ASTNodeDefaultType = 'text'\n\ntype ASTNode = {\n  type: ASTNodeModifierType,\n  children: ASTNode[],\n} | {\n  type: ASTNodeInserterType,\n} | {\n  type: ASTNodeDefaultType,\n  text: string,\n}\n\nexport type ASTNodeInterpreterProps = {\n  node: ASTNode,\n  isRoot?: boolean,\n  className?: string,\n}\nexport const ASTNodeInterpreter = ({\n                                     node,\n                                     isRoot = false,\n                                     className = '',\n                                   }: ASTNodeInterpreterProps) => {\n  switch (node.type) {\n    case 'newline':\n      return <br/>\n    case 'text':\n      return isRoot ? <span className={className}>{node.text}</span> : node.text\n    case 'helpwave':\n      return (<span className=\"font-bold font-space no-underline\">helpwave</span>)\n    case 'none':\n      return isRoot ? (\n<span className={className}>{node.children.map((value, index) => (\n<ASTNodeInterpreter key={index}\n                                                                                                           node={value}/>\n))}</span>\n) :\n        <>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</>\n    case 'bold':\n      return <b>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</b>\n    case 'italic':\n      return <i>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</i>\n    case 'underline':\n      return (<u>{node.children.map((value, index) => (<ASTNodeInterpreter key={index} node={value}/>))}</u>)\n    case 'font-space':\n      return (\n        <span className=\"font-space\">{node.children.map((value, index) => (\n          <ASTNodeInterpreter key={index}\n                              node={value}/>\n        ))}</span>\n      )\n    case 'primary':\n      return (\n        <span className=\"text-primary\">{node.children.map((value, index) => (\n          <ASTNodeInterpreter\n            key={index} node={value}/>\n        ))}</span>\n      )\n    case 'secondary':\n      return (\n        <span className=\"text-secondary\">{node.children.map((value, index) => (\n          <ASTNodeInterpreter\n            key={index} node={value}/>\n        ))}</span>\n      )\n    case 'warn':\n      return (\n        <span className=\"text-warning\">{node.children.map((value, index) => (\n          <ASTNodeInterpreter\n            key={index} node={value}/>\n        ))}</span>\n      )\n    case 'positive':\n      return (\n        <span className=\"text-positive\">{node.children.map((value, index) => (\n          <ASTNodeInterpreter\n            key={index} node={value}/>\n        ))}</span>\n      )\n    case 'negative':\n      return (\n        <span className=\"text-negative\">{node.children.map((value, index) => (\n          <ASTNodeInterpreter\n            key={index} node={value}/>\n        ))}</span>\n      )\n    default:\n      return null\n  }\n}\n\nconst modifierIdentifierMapping = [\n  { id: 'i', name: 'italic' },\n  { id: 'b', name: 'bold' },\n  { id: 'u', name: 'underline' },\n  { id: 'space', name: 'font-space' },\n  { id: 'primary', name: 'primary' },\n  { id: 'secondary', name: 'secondary' },\n  { id: 'warn', name: 'warn' },\n  { id: 'positive', name: 'positive' },\n  { id: 'negative', name: 'negative' },\n] as const\n\nconst inserterIdentifierMapping = [\n  { id: 'helpwave', name: 'helpwave' },\n  { id: 'newline', name: 'newline' }\n] as const\nconst parseMarkdown = (\n  text: string,\n  commandStart: string = '\\\\',\n  open: string = '{',\n  close: string = '}'\n): ASTNode => {\n  let start = text.indexOf(commandStart)\n  const children: ASTNode[] = []\n\n  // parse the text step by step\n  while (text !== '') {\n    if (start === -1) {\n      children.push({\n        type: 'text',\n        text\n      })\n      break\n    }\n    children.push(parseMarkdown(text.substring(0, start)))\n    text = text.substring(start)\n    if (text.length <= 1) {\n      children.push({\n        type: 'text',\n        text\n      })\n      text = ''\n      continue\n    }\n    const simpleReplace = [commandStart, open, close]\n    if (simpleReplace.some(value => text[1] === value)) {\n      children.push({\n        type: 'text',\n        text: simpleReplace.find(value => text[1] === value)!\n      })\n      text = text.substring(2)\n      start = text.indexOf(commandStart)\n      continue\n    }\n    const inserter = inserterIdentifierMapping.find(value => text.substring(1).startsWith(value.id))\n    if (inserter) {\n      children.push({\n        type: inserter.name,\n      })\n      text = text.substring(inserter.id.length + 1)\n      start = text.indexOf(commandStart)\n      continue\n    }\n    const modifier = modifierIdentifierMapping.find(value => text.substring(1).startsWith(value.id))\n    if (modifier) {\n      // check brackets\n      if (text[modifier.id.length + 1] !== open) {\n        children.push({\n          type: 'text',\n          text: text.substring(0, modifier.id.length + 1)\n        })\n        text = text.substring(modifier.id.length + 2)\n        start = text.indexOf(commandStart)\n        continue\n      }\n      let closing = -1\n      let index = modifier.id.length + 2\n      let counter = 1\n      let escaping = false\n      while (index < text.length) {\n        if (text[index] === open && !escaping) {\n          counter++\n        }\n        if (text[index] === close && !escaping) {\n          counter--\n          if (counter === 0) {\n            closing = index\n            break\n          }\n        }\n        escaping = text[index] === commandStart\n        index++\n      }\n\n      if (closing !== -1) {\n        children.push({\n          type: modifier.name,\n          children: [parseMarkdown(text.substring(modifier.id.length + 2, closing))]\n        })\n        text = text.substring(closing + 1)\n        start = text.indexOf(commandStart)\n        continue\n      }\n    }\n    // nothing could be applied to command start\n    children.push({\n      type: 'text',\n      text: text[0]!\n    })\n    text = text.substring(1)\n    start = text.indexOf(commandStart)\n  }\n\n  return {\n    type: 'none',\n    children\n  }\n}\n\nconst optimizeTree = (node: ASTNode) => {\n  if (node.type === 'text') {\n    return !node.text ? undefined : node\n  }\n  if (astNodeInserterType.some(value => value === node.type)) {\n    return node\n  }\n\n  const currentNode = node as\n    { type: ASTNodeModifierType, children: ASTNode[] }\n\n  if (currentNode.children.length === 0) {\n    return undefined\n  }\n\n  let children: ASTNode[] = []\n  for (let i = 0; i < currentNode.children.length; i++) {\n    const child = optimizeTree(currentNode.children[i]!)\n    if (!child) {\n      continue\n    }\n    if (child.type === 'none') {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  currentNode.children = children\n  children = []\n\n  for (let i = 0; i < currentNode.children.length; i++) {\n    const child = currentNode.children[i]!\n    if (child) {\n      if (child.type === 'text' && children[children.length - 1]?.type === 'text') {\n        (children[children.length - 1]! as { type: ASTNodeDefaultType, text: string }).text += child.text\n      } else {\n        children.push(child)\n      }\n    }\n  }\n  currentNode.children = children\n  return currentNode\n}\n\nexport type MarkdownInterpreterProps = {\n  text: string,\n  className?: string,\n}\n\nexport const MarkdownInterpreter = ({ text, className }: MarkdownInterpreterProps) => {\n  const tree = parseMarkdown(text)\n  const optimizedTree = optimizeTree(tree)!\n  return <ASTNodeInterpreter node={optimizedTree} isRoot={true} className={className}/>\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 { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport Image from 'next/image'\nimport Link from 'next/link'\nimport { Github, Globe, Linkedin, Mail } from 'lucide-react'\nimport { Helpwave } from './icons/Helpwave'\nimport { Chip } from './ChipList'\n\ntype SocialType = 'mail' | 'github' | 'linkedin' | 'website' | 'medium'\n\nexport type SocialIconProps = {\n  type: SocialType,\n  url: string,\n  size?: number,\n}\n\n/**\n * A Component for showing a lin\n */\nconst SocialIcon = ({ type, url, size = 24 }: SocialIconProps) => {\n  let icon: ReactNode\n  switch (type) {\n    case 'mail':\n      icon = <Mail size={size}/>\n      break\n    case 'linkedin':\n      // TODO find an alternative icon\n      icon = <Linkedin size={size}/>\n      break\n    case 'github':\n      // TODO find an alternative icon\n      icon = <Github size={size}/>\n      break\n    case 'website':\n      icon = <Globe size={size}/>\n      break\n    case 'medium':\n      icon = <Globe size={size}/> // TODO find an appropriate medium svg\n      break\n    default:\n      icon = <Helpwave size={24}/>\n  }\n  return (\n    <Link href={url} target=\"_blank\">\n      <Chip color=\"dark\" className=\"!p-2\">\n        {icon}\n      </Chip>\n    </Link>\n  )\n}\n\nexport type ProfileProps = HTMLAttributes<HTMLDivElement> & {\n  name: string,\n  imageUrl: string,\n  badge?: ReactNode,\n  prefix?: string,\n  suffix?: string,\n  roleBadge?: string,\n  role?: string,\n  /**\n   * The list of tags for the\n   */\n  tags?: string[],\n  info?: string,\n  socials?: SocialIconProps[],\n  imageClassName?: string,\n}\n\n\n// TODO add colors for dark-mode\n/**\n * A Component for showing a Profile\n */\nexport const Profile = ({\n  name,\n  imageUrl,\n  badge,\n  prefix,\n  suffix,\n  roleBadge,\n  role,\n  tags,\n  info,\n  socials,\n  className,\n  imageClassName,\n  ...divProps\n}: ProfileProps) => {\n  return (\n    <div\n      {...divProps}\n      className={clsx(`col items-center text-center rounded-3xl p-3 pb-4 bg-white text-gray-900 w-min shadow-around-lg`, className)}\n    >\n      <div className=\"relative mb-6\">\n        <div className={clsx('relative rounded-xl row items-center justify-center overflow-hidden', imageClassName)}>\n          <Image src={imageUrl} alt=\"\" className={clsx('z-[2] object-cover', imageClassName)} width={0} height={0} style={{ width: 'auto', height: 'auto' }}/>\n        </div>\n        <div className=\"absolute top-[6px] left-[6px] z-[3]\">{badge}</div>\n        {roleBadge && (\n          <div className=\"absolute bottom-0 left-1/2 -translate-x-1/2 translate-y-2/3 z-[4] rounded-md\">\n            <Chip color=\"dark\" className=\"font-bold px-3\">{roleBadge}</Chip>\n          </div>\n        )}\n      </div>\n      {prefix && <span className=\"font-semibold\">{prefix}</span>}\n      <h2 id={name} className=\"textstyle-title-md\">{name}</h2>\n      {suffix && <span className=\"text-sm mb-1\">{suffix}</span>}\n      {role && <span className=\"font-space font-bold text-sm\">{role}</span>}\n      {tags && (\n        <div className=\"flex flex-wrap mx-4 mt-2 gap-x-2 justify-center\">\n          {tags.map((tag, index) => <span key={index} className=\"textstyle-description text-sm\">{`#${tag}`}</span>)}\n        </div>\n      )}\n      {info && <span className=\"mt-2 text-sm\">{info}</span>}\n      {socials && (\n        <div className=\"flex flex-wrap grow items-end justify-center gap-x-4 gap-y-2 mt-4\">\n          {socials.map((socialIconProps, index) => (\n            <SocialIcon key={index} {...socialIconProps} size={socialIconProps.size ?? 20}/>\n          ))}\n        </div>\n      )}\n    </div>\n  )\n}\n","export type ProgressIndicatorProps = {\n  /*\n    The amount of progress that has been made\n    Value form 0 to 1\n   */\n  progress: number,\n  strokeWidth?: number,\n  size?: keyof typeof sizeMapping,\n  direction?: 'clockwise' | 'counterclockwise',\n  /*\n    Rotation of the starting point of the indicator\n    default start at 3 o'clock\n    Given in degree\n   */\n  rotation?: number,\n}\n\nconst sizeMapping = { small: 16, medium: 24, big: 48 }\n\n/**\n * A progress indicator\n *\n * Start rotation is 3 o'clock and fills counterclockwise\n *\n * Progress is given from 0 to 1\n */\nexport const ProgressIndicator = ({\n                                    progress,\n                                    strokeWidth = 5,\n                                    size = 'medium',\n                                    direction = 'counterclockwise',\n                                    rotation = 0\n                                  }: ProgressIndicatorProps) => {\n  const currentSize = sizeMapping[size]\n  const center = currentSize / 2\n  const radius = center - strokeWidth / 2\n  const arcLength = 2 * Math.PI * radius\n  const arcOffset = arcLength * progress\n  if (direction === 'clockwise') {\n    rotation += 360 * progress\n  }\n  return (\n    <svg\n      style={{\n        height: `${currentSize}px`,\n        width: `${currentSize}px`,\n        transform: `rotate(${rotation}deg)`\n      }}\n    >\n      <circle cx={center} cy={center} r={radius} fill=\"transparent\" strokeWidth={strokeWidth}\n              className=\"stroke-primary\"\n      />\n      <circle cx={center} cy={center} r={radius} fill=\"transparent\" strokeWidth={strokeWidth}\n              strokeDasharray={arcLength} strokeDashoffset={arcOffset} className=\"stroke-gray-300\"\n      />\n    </svg>\n  )\n}\n","import type { CSSProperties } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { noop } from '../util/noop'\nimport { Circle } from './Circle'\nimport clsx from 'clsx'\n\nexport type RingProps = {\n  innerSize: number, // the size of the entire circle including the circleWidth\n  width: number,\n  className?: string,\n};\n\nexport const Ring = ({\n                       innerSize = 20,\n                       width = 7,\n                       className = 'outline-primary',\n                     }: RingProps) => {\n  return (\n    <div\n      className={clsx(`bg-transparent rounded-full outline`, className)}\n      style={{\n        width: `${innerSize}px`,\n        height: `${innerSize}px`,\n        outlineWidth: `${width}px`,\n      }}\n    />\n  )\n}\n\nexport type AnimatedRingProps = RingProps & {\n  fillAnimationDuration?: number, // in seconds, 0 means no animation\n  repeating?: boolean,\n  onAnimationFinished?: () => void,\n  style?: CSSProperties,\n};\n\nexport const AnimatedRing = ({\n                               innerSize,\n                               width,\n                               className,\n                               fillAnimationDuration = 3,\n                               repeating = false,\n                               onAnimationFinished = noop,\n                               style,\n                             }: AnimatedRingProps) => {\n  const [currentWidth, setCurrentWidth] = useState(0)\n  const milliseconds = 1000 * fillAnimationDuration\n\n  const animate = useCallback((timestamp: number, startTime: number) => {\n    const progress = Math.min((timestamp - startTime) / milliseconds, 1)\n    const newWidth = Math.min(width * progress, width)\n\n    setCurrentWidth(newWidth)\n\n    if (progress < 1) {\n      requestAnimationFrame((newTimestamp) => animate(newTimestamp, startTime))\n    } else {\n      onAnimationFinished()\n      if (repeating) {\n        setCurrentWidth(0)\n        requestAnimationFrame((newTimestamp) => animate(newTimestamp, newTimestamp))\n      }\n    }\n  }, [milliseconds, onAnimationFinished, repeating, width])\n\n  useEffect(() => {\n    if (currentWidth < width) {\n      requestAnimationFrame((timestamp) => animate(timestamp, timestamp))\n    }\n  }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n  return (\n    <div\n      className=\"row items-center justify-center\"\n      style={{\n        width: `${innerSize + 2 * width}px`,\n        height: `${innerSize + 2 * width}px`,\n        ...style,\n      }}\n    >\n      <Ring\n        innerSize={innerSize}\n        width={currentWidth}\n        className={className}\n      />\n    </div>\n  )\n}\n\nexport type RingWaveProps = Omit<AnimatedRingProps, 'innerSize'> & {\n  startInnerSize: number,\n  endInnerSize: number,\n  style?: CSSProperties,\n};\n\nexport const RingWave = ({\n                           startInnerSize = 20,\n                           endInnerSize = 30,\n                           width,\n                           className,\n                           fillAnimationDuration = 3,\n                           repeating = false,\n                           onAnimationFinished = noop,\n                           style\n                         }: RingWaveProps) => {\n  const [currentInnerSize, setCurrentInnerSize] = useState(startInnerSize)\n  const distance = endInnerSize - startInnerSize\n  const milliseconds = 1000 * fillAnimationDuration\n\n  const animate = useCallback((timestamp: number, startTime: number) => {\n    const progress = Math.min((timestamp - startTime) / milliseconds, 1)\n    const newInnerSize = Math.min(\n      startInnerSize + distance * progress,\n      endInnerSize\n    )\n\n    setCurrentInnerSize(newInnerSize)\n\n    if (progress < 1) {\n      requestAnimationFrame((newTimestamp) => animate(newTimestamp, startTime))\n    } else {\n      onAnimationFinished()\n      if (repeating) {\n        setCurrentInnerSize(startInnerSize)\n        requestAnimationFrame((newTimestamp) => animate(newTimestamp, newTimestamp))\n      }\n    }\n  }, [distance, endInnerSize, milliseconds, onAnimationFinished, repeating, startInnerSize])\n\n  useEffect(() => {\n    if (currentInnerSize < endInnerSize) {\n      requestAnimationFrame((timestamp) => animate(timestamp, timestamp))\n    }\n  }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n  return (\n    <div\n      className=\"row items-center justify-center\"\n      style={{\n        width: `${endInnerSize + 2 * width}px`,\n        height: `${endInnerSize + 2 * width}px`,\n        ...style\n      }}\n    >\n      <Ring\n        innerSize={currentInnerSize}\n        width={width}\n        className={className}\n      />\n    </div>\n  )\n}\n\nexport type RadialRingsProps = {\n  circle1ClassName?: string,\n  circle2ClassName?: string,\n  circle3ClassName?: string,\n  waveWidth?: number,\n  waveBaseColor?: string,\n  sizeCircle1?: number,\n  sizeCircle2?: number,\n  sizeCircle3?: number,\n};\n\n// TODO use fixed colors here to avoid artifacts\nexport const RadialRings = ({\n                              circle1ClassName = 'bg-primary/90 outline-primary/90',\n                              circle2ClassName = 'bg-primary/60 outline-primary/60',\n                              circle3ClassName = 'bg-primary/40 outline-primary/40',\n                              waveWidth = 10,\n                              waveBaseColor = 'outline-white/20',\n                              sizeCircle1 = 100,\n                              sizeCircle2 = 200,\n                              sizeCircle3 = 300\n                            }: RadialRingsProps) => {\n  const [currentRing, setCurrentRing] = useState(0)\n  const size = sizeCircle3\n\n  return (\n    <div\n      className=\"relative\"\n      style={{\n        width: `${sizeCircle3}px`,\n        height: `${sizeCircle3}px`,\n      }}\n    >\n      <Circle\n        radius={sizeCircle1 / 2}\n        className={clsx(circle1ClassName, `absolute z-[10] -translate-y-1/2 -translate-x-1/2`)}\n        style={{\n          left: `${size / 2}px`,\n          top: `${size / 2}px`\n        }}\n      />\n      {currentRing === 0 ? (\n        <AnimatedRing\n          innerSize={sizeCircle1}\n          width={(sizeCircle2 - sizeCircle1) / 2}\n          onAnimationFinished={() =>\n            currentRing === 0 ? setCurrentRing(1) : null\n          }\n          repeating={true}\n          className={clsx(circle2ClassName,\n            { 'opacity-5': currentRing !== 0 })}\n          style={{\n            left: `${size / 2}px`,\n            top: `${size / 2}px`,\n            position: 'absolute',\n            translate: `-50% -50%`,\n            zIndex: 9\n          }}\n        />\n      ) : null}\n      {currentRing === 2 ? (\n        <RingWave\n          startInnerSize={sizeCircle1 - waveWidth}\n          endInnerSize={sizeCircle2}\n          width={waveWidth}\n          repeating={true}\n          className={clsx(waveBaseColor, `opacity-5`)}\n          style={{\n            left: `${size / 2}px`,\n            top: `${size / 2}px`,\n            position: 'absolute',\n            translate: `-50% -50%`,\n            zIndex: 9,\n          }}\n        />\n      ) : null}\n      <Circle\n        radius={sizeCircle2 / 2}\n        className={clsx(circle2ClassName,\n          { 'opacity-20': currentRing < 1 },\n          `absolute z-[8] -translate-y-1/2 -translate-x-1/2`)}\n        style={{\n          left: `${size / 2}px`,\n          top: `${size / 2}px`\n        }}\n      />\n      {currentRing === 1 ? (\n        <AnimatedRing\n          innerSize={sizeCircle2 - 1} // potentially harmful\n          width={(sizeCircle3 - sizeCircle2) / 2}\n          onAnimationFinished={() =>\n            currentRing === 1 ? setCurrentRing(2) : null\n          }\n          repeating={true}\n          className={clsx(circle3ClassName)}\n          style={{\n            left: `${size / 2}px`,\n            top: `${size / 2}px`,\n            position: 'absolute',\n            translate: `-50% -50%`,\n            zIndex: 7,\n          }}\n        />\n      ) : null}\n      {currentRing === 2 ? (\n        <RingWave\n          startInnerSize={sizeCircle2}\n          endInnerSize={sizeCircle3 - waveWidth}\n          width={waveWidth}\n          repeating={true}\n          className={clsx(waveBaseColor, `opacity-5`)}\n          style={{\n            left: `${size / 2}px`,\n            top: `${size / 2}px`,\n            position: 'absolute',\n            translate: `-50% -50%`,\n            zIndex: 7,\n          }}\n        />\n      ) : null}\n      <Circle\n        radius={sizeCircle3 / 2}\n        className={clsx(circle3ClassName,\n          { 'opacity-20': currentRing < 2 },\n          `absolute z-[6] -translate-y-1/2 -translate-x-1/2`)}\n        style={{\n          left: `${size / 2}px`,\n          top: `${size / 2}px`\n        }}\n      />\n    </div>\n  )\n}\n","import type { ReactNode } from 'react'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Search } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Languages } from '../hooks/useLanguage'\nimport { useTranslation } from '../hooks/useTranslation'\nimport type { PropsForTranslation } from '../hooks/useTranslation'\nimport { MultiSearchWithMapping } from '../util/simpleSearch'\nimport { Input } from './user-input/Input'\n\ntype SearchableListTranslation = {\n  search: string,\n  nothingFound: string,\n}\n\nconst defaultSearchableListTranslation: Record<Languages, SearchableListTranslation> = {\n  en: {\n    search: 'Search',\n    nothingFound: 'Nothing found'\n  },\n  de: {\n    search: 'Suche',\n    nothingFound: 'Nichts gefunden'\n  }\n}\n\nexport type SearchableListProps<T> = {\n  list: T[],\n  initialSearch?: string,\n  searchMapping: (value: T) => string[],\n  itemMapper: (value: T) => ReactNode,\n  className?: string,\n}\n\n/**\n * A component for searching a list\n */\nexport const SearchableList = <T, >({\n  overwriteTranslation,\n  list,\n  initialSearch = '',\n  searchMapping,\n  itemMapper,\n  className\n}: PropsForTranslation<SearchableListTranslation, SearchableListProps<T>>) => {\n  const translation = useTranslation(defaultSearchableListTranslation, overwriteTranslation)\n  const [search, setSearch] = useState<string>(initialSearch)\n\n  useEffect(() => setSearch(initialSearch), [initialSearch])\n\n  const filteredEntries = useMemo(() => MultiSearchWithMapping(search, list, searchMapping), [search, list, searchMapping])\n\n  return (\n    <div className={clsx('col gap-y-2', className)}>\n      <div className=\"row justify-between gap-x-2 items-center\">\n        <div className=\"flex-1\">\n          <Input value={search} onChange={setSearch} placeholder={translation.search}/>\n        </div>\n        <Search size={20}/>\n      </div>\n      {filteredEntries.length > 0 && (\n        <div className=\"col gap-y-1\">\n          {filteredEntries.map(itemMapper)}\n        </div>\n      )}\n      {!filteredEntries.length && <div className=\"row justify-center\">{translation.nothingFound}</div>}\n    </div>\n  )\n}\n","/**\n *  Finds all values matching the search values by first mapping the values to a string array and then checking each entry for matches.\n *  Returns the list of all matches.\n *\n *  @param search The list of search strings e.g. `[name, type]`\n *\n *  @param objects The list of objects to be searched in\n *\n *  @param mapping The mapping of objects to the string properties they fulfil\n *\n *  @return The list of objects that match all search strings\n */\nexport const MultiSubjectSearchWithMapping = <T>(search: string[], objects: T[], mapping: (value:T) => (string| undefined)[]) => {\n  return objects.filter(object => {\n    const mappedSearchKeywords = mapping(object).map(value => value ? value.toLowerCase().trim() : undefined)\n    return search.every(searchValue => !!mappedSearchKeywords.find(value => !!value && value.includes(searchValue.toLowerCase().trim())))\n  })\n}\n\n/**\n *  Finds all values matching the search value by first mapping the values to a string array and then checking each entry for matches.\n *  Returns the list of all matches.\n *\n *  @param search The search string e.g `name`\n *\n *  @param objects The list of objects to be searched in\n *\n *  @param mapping The mapping of objects to the string properties they fulfil\n *\n *  @return The list of objects that match the search string\n */\nexport const MultiSearchWithMapping = <T>(search: string, objects: T[], mapping: (value:T) => string[]) => {\n  return objects.filter(object => {\n    const mappedSearchKeywords = mapping(object).map(value => value.toLowerCase().trim())\n    return !!mappedSearchKeywords.find(value => value.includes(search.toLowerCase().trim()))\n  })\n}\n\n/**\n *  Finds all values matching the search value by first mapping the values to a string and returns the list of all matches.\n *\n *  @param search The search string e.g `name`\n *\n *  @param objects The list of objects to be searched in\n *\n *  @param mapping The mapping of objects to a string that is compared to the search\n *\n *  @return The list of objects that match the search string\n */\nexport const SimpleSearchWithMapping = <T>(search: string, objects: T[], mapping: (value:T) => string) => {\n  return MultiSearchWithMapping(search, objects, value => [mapping(value)])\n}\n\n/**\n *  Finds all values matching the search value and returns the list of all matches.\n *\n *  @param search The search string e.g `name`\n *\n *  @param objects The list of objects to be searched in\n *\n *  @return The list of objects that match the search string\n */\nexport const SimpleSearch = (search: string, objects: string[]) => {\n  return SimpleSearchWithMapping(search, objects, value => value)\n}\n","import React, {\n  useEffect,\n  useRef,\n  useState,\n  type ChangeEvent,\n  type HTMLInputTypeAttribute,\n  type InputHTMLAttributes, forwardRef\n} from 'react'\nimport clsx from 'clsx'\nimport { useSaveDelay } from '../../hooks/useSaveDelay'\nimport { noop } from '../../util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\nexport type InputProps = {\n  /**\n   * used for the label's `for` attribute\n   */\n  id?: string,\n  value: string,\n  label?: Omit<LabelProps, 'id'>,\n  /**\n   * @default 'text'\n   */\n  type?: HTMLInputTypeAttribute,\n  /**\n   * Callback for when the input's value changes\n   * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n   * That could be enforced through a union type but that seems a bit overkill\n   * @default noop\n   */\n  onChange?: (text: string, event: ChangeEvent<HTMLInputElement>) => void,\n  onChangeEvent?: (event: ChangeEvent<HTMLInputElement>) => void,\n  className?: string,\n  onEditCompleted?: (text: string, event: ChangeEvent<HTMLInputElement>) => void,\n  expanded?: boolean,\n  containerClassName?: string,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'value' | 'label' | 'type' | 'onChange' | 'crossOrigin'>\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nconst ControlledInput = ({\n                           id,\n                           type = 'text',\n                           value,\n                           label,\n                           onChange = noop,\n                           onChangeEvent = noop,\n                           className = '',\n                           onEditCompleted,\n                           expanded = true,\n                           onBlur,\n                           containerClassName,\n                           ...restProps\n                         }: InputProps) => {\n  const {\n    restartTimer,\n    clearUpdateTimer\n  } = useSaveDelay(() => undefined, 3000)\n  const ref = useRef<HTMLInputElement>(null)\n\n  useEffect(() => {\n    if (restProps.autoFocus) {\n      ref.current?.focus()\n    }\n  }, [restProps.autoFocus])\n  return (\n    <div className={clsx({ 'w-full': expanded }, containerClassName)}>\n      {label && <Label {...label} htmlFor={id} className={clsx('mb-1', label.className)}/>}\n      <input\n        ref={ref}\n        value={value}\n        id={id}\n        type={type}\n        className={clsx('block bg-surface text-on-surface px-3 py-2 rounded-md w-full border-2 border-gray-200 hover:border-primary focus:outline-none focus:border-primary focus:ring-primary', className)}\n        onBlur={event => {\n          if (onBlur) {\n            onBlur(event)\n          }\n          if (onEditCompleted) {\n            onEditCompleted(event.target.value, event)\n            clearUpdateTimer()\n          }\n        }}\n        onChange={e => {\n          const value = e.target.value\n          if (onEditCompleted) {\n            restartTimer(() => {\n              onEditCompleted(value, e)\n              clearUpdateTimer()\n            })\n          }\n          onChange(value, e)\n          onChangeEvent(e)\n        }}\n        {...restProps}\n      />\n    </div>\n  )\n}\n\ntype UncontrolledInputProps = Omit<InputProps, 'value'> & {\n  /**\n   * @default ''\n   */\n  defaultValue?: string,\n}\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed by the component itself\n */\nconst UncontrolledInput = ({\n                             defaultValue = '',\n                             onChange = noop,\n                             ...props\n                           }: UncontrolledInputProps) => {\n  const [value, setValue] = useState(defaultValue)\n\n  const handleChange = (text: string, event: ChangeEvent<HTMLInputElement>) => {\n    setValue(text)\n    onChange(text, event)\n  }\n\n  return (\n    <ControlledInput\n      {...props}\n      value={value}\n      onChange={handleChange}\n    />\n  )\n}\n\nexport type FormInputProps = InputHTMLAttributes<HTMLInputElement> & {\n  id: string,\n  labelText?: string,\n  errorText?: string,\n  labelClassName?: string,\n  errorClassName?: string,\n  containerClassName?: string,\n}\n\nconst FormInput = forwardRef<HTMLInputElement, FormInputProps>(function FormInput({\n                                                                                    id,\n                                                                                    labelText,\n                                                                                    errorText,\n                                                                                    className,\n                                                                                    labelClassName,\n                                                                                    errorClassName,\n                                                                                    containerClassName,\n                                                                                    required,\n                                                                                    ...restProps\n                                                                                  }, ref) {\n  const input = (\n    <input\n      ref={ref}\n      id={id}\n      {...restProps}\n      className={clsx(\n        'block bg-surface text-on-surface px-3 py-2 rounded-md w-full border-2 border-gray-200 hover:border-primary focus:outline-none focus:border-primary focus:ring-primary',\n        {\n          'focus:border-primary focus:ring-primary': !errorText,\n          'focus:border-negative focus:ring-negative text-negative': !!errorText,\n        },\n        className\n        )}\n    />\n  )\n\n  return (\n    <div className={clsx('flex flex-col gap-y-1', containerClassName)}>\n      {labelText && (\n        <label htmlFor={id} className={clsx('textstyle-label-md', labelClassName)}>\n          {labelText}\n          {required && <span className=\"text-primary font-bold\">*</span>}\n        </label>\n      )}\n      {input}\n      {errorText && <label htmlFor={id} className={clsx('text-negative', errorClassName)}>{errorText}</label>}\n    </div>\n  )\n})\n\nexport {\n  UncontrolledInput,\n  ControlledInput as Input,\n  FormInput\n}\n","import { useEffect, useState } from 'react'\n\nexport function useSaveDelay(setNotificationStatus: (isShowing: boolean) => void, delay: number) {\n  const [updateTimer, setUpdateTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n  const [notificationTimer, setNotificationTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n\n  const restartTimer = (onSave: () => void) => {\n    clearTimeout(updateTimer)\n    setUpdateTimer(setTimeout(() => {\n      onSave()\n      setNotificationStatus(true)\n      // Show Saved Notification for fade animation duration\n      clearTimeout(notificationTimer)\n      setNotificationTimer(setTimeout(() => {\n        setNotificationStatus(false)\n        clearTimeout(notificationTimer)\n      }, delay))\n      clearTimeout(updateTimer)\n    }, delay))\n  }\n\n  const clearUpdateTimer = (hasSaved = true) => {\n    clearTimeout(updateTimer)\n    if (hasSaved) {\n      setNotificationStatus(true)\n      clearTimeout(notificationTimer)\n      setNotificationTimer(setTimeout(() => {\n        setNotificationStatus(false)\n        clearTimeout(notificationTimer)\n      }, delay))\n    } else {\n      setNotificationStatus(false)\n    }\n  }\n\n  useEffect(() => {\n    return () => {\n      clearTimeout(updateTimer)\n      clearTimeout(notificationTimer)\n    }\n  }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n  return { restartTimer, clearUpdateTimer }\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 { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react'\nimport type { TextButtonProps } from './Button'\nimport { TextButton } from './Button'\nimport type { TableSortingType } from './Table'\n\nexport type SortButtonProps = Omit<TextButtonProps, 'onClick'> & {\n  ascending?: TableSortingType,\n  onClick: (newTableSorting:TableSortingType) => void,\n}\n\n/**\n * A Extension of the normal button that displays the sorting state right of the content\n */\nexport const SortButton = ({\n  children,\n  ascending,\n  color,\n  onClick,\n  ...buttonProps\n}: SortButtonProps) => {\n  return (\n    <TextButton\n      color={color}\n      onClick={() => onClick(ascending === 'descending' ? 'ascending' : 'descending')}\n      {...buttonProps}\n    >\n      <div className=\"row gap-x-2\">\n        {children}\n        {ascending === 'ascending' ? <ChevronUp/> : (!ascending ? <ChevronsUpDown/> : <ChevronDown/>)}\n      </div>\n    </TextButton>\n  )\n}\n","import { Check, ChevronLeft, ChevronRight } from 'lucide-react'\nimport type { Languages } from '../hooks/useLanguage'\nimport type { PropsForTranslation } from '../hooks/useTranslation'\nimport { useTranslation } from '../hooks/useTranslation'\nimport { range } from '../util/array'\nimport { SolidButton } from './Button'\nimport clsx from 'clsx'\n\ntype StepperBarTranslation = {\n  back: string,\n  next: string,\n  confirm: string,\n}\n\nconst defaultStepperBarTranslation: Record<Languages, StepperBarTranslation> = {\n  en: {\n    back: 'Back',\n    next: 'Next Step',\n    confirm: 'Create'\n  },\n  de: {\n    back: 'Zurück',\n    next: 'Nächster Schritt',\n    confirm: 'Erstellen'\n  }\n}\n\nexport type StepperInformation = {\n  step: number,\n  lastStep: number,\n  seenSteps: Set<number>,\n}\n\nexport type StepperBarProps = {\n  stepper: StepperInformation,\n  onChange: (step: StepperInformation) => void,\n  onFinish: () => void,\n  showDots?: boolean,\n  className?: string,\n}\n\n/**\n * A Component for stepping\n */\nexport const StepperBar = ({\n  overwriteTranslation,\n  stepper,\n  onChange,\n  onFinish,\n  showDots = true,\n  className = '',\n}: PropsForTranslation<StepperBarTranslation, StepperBarProps>) => {\n  const translation = useTranslation(defaultStepperBarTranslation, overwriteTranslation)\n  const dots = range(0, stepper.lastStep)\n  const { step, seenSteps, lastStep } = stepper\n\n  const update = (newStep: number) => {\n    seenSteps.add(newStep)\n    onChange({ step: newStep, seenSteps, lastStep })\n  }\n\n  return (\n    <div\n      className={clsx('sticky row p-2 border-2 justify-between rounded-lg shadow-lg', className)}\n    >\n      <div className=\"flex-[2] justify-start\">\n        <SolidButton\n          disabled={step === 0}\n          onClick={() => {\n            update(step - 1)\n          }}\n          className=\"row gap-x-1 items-center justify-center\"\n        >\n          <ChevronLeft size={14}/>\n          {translation.back}\n        </SolidButton>\n      </div>\n      <div className=\"row flex-[5] gap-x-2 justify-center items-center\">\n        {showDots && dots.map((value, index) => {\n          const seen = seenSteps.has(index)\n          return (\n            <div\n              key={index}\n              onClick={() => seen && update(index)}\n              className={clsx('rounded-full w-4 h-4', {\n                'bg-primary hover:brightness-75': index === step && seen,\n                'bg-primary/40 hover:bg-primary': index !== step && seen,\n                'bg-gray-200 outline-transparent': !seen,\n              },\n              {\n                'cursor-pointer': seen,\n                'cursor-not-allowed': !seen,\n              })}\n            />\n          )\n        })}\n      </div>\n      {step !== lastStep && (\n        <div className=\"flex-[2] justify-end\">\n          <SolidButton\n            onClick={() => update(step + 1)}\n            className=\"row gap-x-1 items-center justify-center\"\n          >\n            {translation.next}\n            <ChevronRight size={14}/>\n          </SolidButton>\n        </div>\n      )}\n      {step === lastStep && (\n        <div className=\"flex-[2] justify-end\">\n          <SolidButton\n            // TODO check form validity\n            disabled={false}\n            onClick={onFinish}\n            className=\"row gap-x-1 items-center justify-center\"\n          >\n            <Check size={14}/>\n            {translation.confirm}\n          </SolidButton>\n        </div>\n      )}\n    </div>\n  )\n}\n","export const equalSizeGroups = <T >(array: T[], groupSize: number): T[][] => {\n  if (groupSize <= 0) {\n    console.warn(`group size should be greater than 0: groupSize = ${groupSize}`)\n    return [[...array]]\n  }\n\n  const groups = []\n  for (let i = 0; i < array.length; i += groupSize) {\n    groups.push(array.slice(i, Math.min(i + groupSize, array.length)))\n  }\n  return groups\n}\n\n/**\n * @param start\n * @param end inclusive\n * @param allowEmptyRange Whether the range can be defined empty via end < start\n */\nexport const range = (start: number, end: number, allowEmptyRange: boolean = false): number[] => {\n  if (end < start) {\n    if (!allowEmptyRange) {\n      console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set allowEmptyRange to true`)\n    }\n    return []\n  }\n  return Array.from({ length: end - start + 1 }, (_, index) => index + start)\n}\n\n/** Finds the closest match\n * @param list The list of all possible matches\n * @param firstCloser Return whether item1 is closer than item2\n */\nexport const closestMatch = <T >(list: T[], firstCloser: (item1: T, item2: T) => boolean) => {\n  return list.reduce((item1, item2) => {\n    return firstCloser(item1, item2) ? item1 : item2\n  })\n}\n\n/**\n * returns the item in middle of a list and its neighbours before and after\n * e.g. [1,2,3,4,5,6] for item = 1 would return [5,6,1,2,3]\n */\nexport const getNeighbours = <T >(list: T[], item: T, neighbourDistance: number = 2) => {\n  const index = list.indexOf(item)\n  const totalItems = neighbourDistance * 2 + 1\n  if (list.length < totalItems) {\n    console.warn('List is to short')\n    return list\n  }\n\n  if (index === -1) {\n    console.error('item not found in list')\n    return list.splice(0, totalItems)\n  }\n\n  let start = index - neighbourDistance\n  if (start < 0) {\n    start += list.length\n  }\n  const end = (index + neighbourDistance + 1) % list.length\n\n  const result: T[] = []\n  let ignoreOnce = list.length === totalItems\n  for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {\n    result.push(list[i]!)\n    if (end === i && ignoreOnce) {\n      ignoreOnce = false\n    }\n  }\n  return result\n}\n\nexport const createLoopingListWithIndex = <T >(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n  if (length < 0) {\n    console.warn(`createLoopingList: length must be >= 0, given ${length}`)\n  } else if (length === 0) {\n    length = list.length\n  }\n\n  const returnList: [number, T][] = []\n\n  if (forwards) {\n    for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {\n      returnList.push([i, list[i]!])\n    }\n  } else {\n    for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {\n      returnList.push([i, list[i]!])\n    }\n  }\n\n  return returnList\n}\n\nexport const createLoopingList = <T >(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n  return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item)\n}\n\nexport const ArrayUtil = {\n  unique: <T>(list: T[]): T[] => {\n    const seen = new Set<T>()\n    return list.filter((item) => {\n      if (seen.has(item)) {\n        return false\n      }\n      seen.add(item)\n      return true\n    })\n  },\n\n  difference: <T>(list: T[], removeList: T[]): T[] => {\n    const remove = new Set<T>(removeList)\n    return list.filter((item) => !remove.has(item))\n  }\n}\n","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","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 { useEffect, useState } from 'react'\nimport Script from 'next/script'\n\ntype Config = {\n  colors: {\n    background: string, // hex\n    grid: string, // hex\n    inactive: string, // hex\n  },\n  title: string,\n  quadrants: {\n    name: string,\n  }[],\n  rings: {\n    name: string,\n    color: string, // hex\n  }[],\n  print_layout: boolean,\n  links_in_new_tabs: boolean,\n  zoomed_quadrant?: 0 | 1 | 2 | 3,\n}\n\ntype Entry = {\n  label: string,\n  link?: string,\n  active: boolean,\n  quadrant: 0 | 1 | 2 | 3, // Clockwise, starts from bottom right\n  ring: 0 | 1 | 2 | 3, // Starts from the inside\n  moved: -1 | 0 | 1, // -1: moved out, 0: not moved, 1: moved in\n}\n\nconst helpwaveTechRadar = {\n  date: new Date('1/28/2024'),\n  config: {\n    colors: {\n      background: '#fff',\n      grid: '#dddde0',\n      inactive: '#ddd'\n    },\n    title: 'helpwave Tech-Radar',\n    quadrants: [\n      { name: 'Languages' },\n      { name: 'Language dependencies' },\n      { name: 'Infrastructure' },\n      { name: 'Datastores' },\n    ],\n    rings: [\n      { name: 'ADOPT', color: '#5ba300' },\n      { name: 'TRIAL', color: '#009eb0' },\n      { name: 'ASSESS', color: '#c7ba00' },\n      { name: 'HOLD', color: '#e09b96' }\n    ],\n    print_layout: true,\n    links_in_new_tabs: true,\n  } satisfies Config,\n  entries: [\n    // Languages\n    {\n      label: 'Golang',\n      active: true,\n      quadrant: 0,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'Python',\n      active: true,\n      quadrant: 0,\n      ring: 2,\n      moved: 0,\n    },\n    {\n      label: 'TypeScript',\n      active: true,\n      quadrant: 0,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'Dart',\n      active: true,\n      quadrant: 0,\n      ring: 0,\n      moved: 0,\n    },\n    // Language dependencies\n    {\n      label: 'Dapr',\n      link: 'https://dapr.io/',\n      active: true,\n      quadrant: 1,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'GORM',\n      active: true,\n      quadrant: 1,\n      ring: 3,\n      moved: -1,\n    },\n    {\n      label: 'SQLc',\n      active: true,\n      quadrant: 1,\n      ring: 0,\n      moved: 1,\n    },\n\n    {\n      label: 'Flutter',\n      active: true,\n      quadrant: 1,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'Next.js',\n      active: true,\n      quadrant: 1,\n      ring: 0,\n      moved: 0,\n    },\n    // Infrastructure\n    {\n      label: 'Docker',\n      active: true,\n      quadrant: 2,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'Kubernetes',\n      active: true,\n      quadrant: 2,\n      ring: 2,\n      moved: 1,\n    },\n    {\n      label: 'gRPC',\n      active: true,\n      quadrant: 2,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'APISIX',\n      active: true,\n      quadrant: 2,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'GitHub Actions',\n      active: true,\n      quadrant: 2,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'devenv',\n      active: true,\n      quadrant: 2,\n      ring: 1,\n      moved: 0,\n    },\n    // Datastores\n    {\n      label: 'PostgreSQL',\n      active: true,\n      quadrant: 3,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'Redis',\n      active: true,\n      quadrant: 3,\n      ring: 0,\n      moved: 0,\n    },\n    {\n      label: 'EventStoreDB',\n      active: true,\n      quadrant: 3,\n      ring: 1,\n      moved: 0,\n    },\n  ] satisfies Entry[]\n}\n\ntype TechRadarProps = {\n  date?: Date,\n  config?: Config,\n  entries?: Entry[],\n}\n\n/**\n * This component wraps https://github.com/zalando/tech-radar\n */\nexport const TechRadar = ({\n  date = helpwaveTechRadar.date,\n  config = helpwaveTechRadar.config,\n  entries = helpwaveTechRadar.entries,\n}: TechRadarProps) => {\n  const [isD3Loaded, setIsD3Loaded] = useState(false)\n  const [isRadarLoaded, setIsRadarLoaded] = useState(false)\n\n  const dateString = date.toLocaleDateString('en-US', { year: 'numeric', month: 'numeric', day: 'numeric' })\n\n  useEffect(() => {\n    if (!isD3Loaded || !isRadarLoaded) return\n\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-expect-error\n    d3.select('svg#radar').select('*').remove()\n\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-expect-error\n    radar_visualization({\n      svg_id: 'radar',\n      width: 1500,\n      height: 1000,\n      date: dateString,\n      entries,\n      ...config,\n    })\n  }, [isD3Loaded, isRadarLoaded, config, entries]) // eslint-disable-line react-hooks/exhaustive-deps\n\n  return (\n    <>\n      <Script\n        src=\"https://cdn.helpwave.de/js/d3.v4.min.js\"\n        onLoad={() => {\n          setIsD3Loaded(true)\n        }}\n      />\n      <Script\n        src=\"https://cdn.helpwave.de/js/radar-0.8.js\"\n        onLoad={() => {\n          setIsRadarLoaded(true)\n        }}\n      />\n      <svg id=\"radar\"></svg>\n    </>\n  )\n}\n","import type { Languages } from '../hooks/useLanguage'\nimport type { PropsForTranslation } from '../hooks/useTranslation'\nimport { useTranslation } from '../hooks/useTranslation'\nimport clsx from 'clsx'\n\ntype TextImageColor = 'primary' | 'secondary' | 'dark'\n\ntype TextImageTranslation = {\n  showMore: string,\n}\n\nconst defaultTextImageTranslation: Record<Languages, TextImageTranslation> = {\n  de: {\n    showMore: 'Mehr anzeigen'\n  },\n  en: {\n    showMore: 'Show more'\n  }\n}\n\nexport type TextImageProps = {\n  title: string,\n  description: string,\n  imageUrl: string,\n  onShowMoreClicked?: () => void,\n  color?: TextImageColor,\n  badge?: string,\n  contentClassName?: string,\n  className?: string,\n}\n\n/**\n * A Component for layering a Text upon a Image\n */\nexport const TextImage = ({\n                            overwriteTranslation,\n                            title,\n                            description,\n                            imageUrl,\n                            onShowMoreClicked,\n                            color = 'primary',\n                            badge,\n                            contentClassName = '',\n                            className = '',\n                          }: PropsForTranslation<TextImageTranslation, TextImageProps>) => {\n  const translation = useTranslation(defaultTextImageTranslation, overwriteTranslation)\n\n  const chipColorMapping: Record<TextImageColor, string> = {\n    primary: 'text-text-image-primary-background bg-text-text-image-primary-text',\n    secondary: 'text-text-image-secondary-background bg-text-text-image-secondary-text',\n    dark: 'text-text-image-dark-background bg-text-text-image-dark-text',\n  }\n\n  const colorMapping: Record<TextImageColor, string> = {\n    primary: 'text-text-image-primary-text bg-linear-to-r from-30% from-text-image-primary-background to-text-image-primary-background/55',\n    secondary: 'text-text-image-secondary-text bg-linear-to-r from-30% from-text-image-secondary-background to-text-image-secondary-background/55',\n    dark: 'text-text-image-dark-text bg-linear-to-r from-30% from-text-image-dark-background to-text-image-dark-background/55',\n  }\n\n  return (\n    <div\n      className={clsx('rounded-2xl w-full', className)}\n      style={{\n        backgroundImage: `url(${imageUrl})`,\n        backgroundSize: 'cover',\n      }}>\n      <div\n        className={clsx(`col px-6 py-12 rounded-2xl h-full`, colorMapping[color], contentClassName)}>\n        {badge && (\n          <div className={clsx(`chip-full bg-white mb-2 py-2 px-4 w-fit`, chipColorMapping[color])}>\n            <span className=\"text-lg font-bold\">{badge}</span>\n          </div>\n        )}\n        <div className=\"col gap-y-1 text-white overflow-hidden\">\n          <span className=\"textstyle-title-xl\">{title}</span>\n          <span className=\"text-ellipsis overflow-hidden\">{description}</span>\n        </div>\n        {onShowMoreClicked && (\n          <div className=\"row mt-2 text-white underline\">\n            <button onClick={onShowMoreClicked}>{translation.showMore}</button>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n","import type { Languages } from '../hooks/useLanguage'\nimport type { PropsForTranslation } from '../hooks/useTranslation'\nimport { useTranslation } from '../hooks/useTranslation'\n\ntype TimeDisplayTranslation = {\n  today: string,\n  yesterday: string,\n  tomorrow: string,\n  inDays: (days: number) => string,\n  agoDays: (days: number) => string,\n  january: string,\n  february: string,\n  march: string,\n  april: string,\n  may: string,\n  june: string,\n  july: string,\n  august: string,\n  september: string,\n  october: string,\n  november: string,\n  december: string,\n}\n\nconst defaultTimeDisplayTranslations: Record<Languages, TimeDisplayTranslation> = {\n  en: {\n    today: 'today',\n    yesterday: 'yesterday',\n    tomorrow: 'tomorrow',\n    inDays: (days: number) => `in ${days} days`,\n    agoDays: (days: number) => `${days} days ago`,\n    january: 'January',\n    february: 'February',\n    march: 'March',\n    april: 'April',\n    may: 'May',\n    june: 'June',\n    july: 'July',\n    august: 'August',\n    september: 'September',\n    october: 'October',\n    november: 'November',\n    december: 'December'\n  },\n  de: {\n    today: 'heute',\n    yesterday: 'gestern',\n    tomorrow: 'morgen',\n    inDays: (days: number) => `in ${days} Tagen`,\n    agoDays: (days: number) => `vor ${days} Tagen`,\n    january: 'Januar',\n    february: 'Februar',\n    march: 'März',\n    april: 'April',\n    may: 'Mai',\n    june: 'Juni',\n    july: 'Juli',\n    august: 'August',\n    september: 'September',\n    october: 'October',\n    november: 'November',\n    december: 'December'\n  }\n}\n\ntype TimeDisplayMode = 'daysFromToday' | 'date'\n\ntype TimeDisplayProps = {\n  date: Date,\n  mode?: TimeDisplayMode,\n}\n\n/**\n * A Component for displaying time and dates in a unified fashion\n */\nexport const TimeDisplay = ({\n  overwriteTranslation,\n  date,\n  mode = 'daysFromToday'\n}: PropsForTranslation<TimeDisplayTranslation, TimeDisplayProps>) => {\n  const translation = useTranslation(defaultTimeDisplayTranslations, overwriteTranslation)\n  const difference = new Date().setHours(0, 0, 0, 0).valueOf() - new Date(date).setHours(0, 0, 0, 0).valueOf()\n  const isBefore = difference > 0\n  const differenceInDays = Math.floor(Math.abs(difference) / (1000 * 3600 * 24))\n\n  let displayString\n  if (differenceInDays === 0) {\n    displayString = translation.today\n  } else if (differenceInDays === 1) {\n    displayString = isBefore ? translation.yesterday : translation.tomorrow\n  } else {\n    displayString = isBefore ? translation.agoDays(differenceInDays) : translation.inDays(differenceInDays)\n  }\n  const monthToTranslation: { [key: number]: string } = {\n    0: translation.january,\n    1: translation.february,\n    2: translation.march,\n    3: translation.april,\n    4: translation.may,\n    5: translation.june,\n    6: translation.july,\n    7: translation.august,\n    8: translation.september,\n    9: translation.october,\n    10: translation.november,\n    11: translation.december\n  } as const\n\n  let fullString\n  if (mode === 'daysFromToday') {\n    fullString = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')} - ${displayString}`\n  } else {\n    fullString = `${date.getDate()}. ${monthToTranslation[date.getMonth()]} ${date.getFullYear()}`\n  }\n\n  return (\n    <span>\n      {fullString}\n    </span>\n  )\n}\n","import type { Dispatch, SetStateAction } from 'react'\nimport { useEffect, useState } from 'react'\n\ntype UseHoverStateProps = {\n  /**\n   * The delay after which the menu is closed in milliseconds\n   *\n   * default: 200ms\n   */\n  closingDelay: number,\n  /**\n   * Whether the hover state management should be disabled\n   *\n   * default: false\n   */\n  isDisabled: boolean,\n}\n\ntype UseHoverStateReturnType = {\n  /**\n   * Whether the element is hovered\n   */\n  isHovered: boolean,\n  /**\n   * Function to change the current hover status\n   */\n  setIsHovered: Dispatch<SetStateAction<boolean>>,\n  /**\n   * Handlers to pass on to the component that should be hovered\n   */\n  handlers: {\n    onMouseEnter: () => void,\n    onMouseLeave: () => void,\n  },\n}\n\nconst defaultUseHoverStateProps: UseHoverStateProps = {\n  closingDelay: 200,\n  isDisabled: false,\n}\n\n/**\n * @param props See UseHoverStateProps\n *\n * A react hook for managing the hover state of a component. The handlers provided should be\n * forwarded to the component which should be hovered over\n */\nexport const useHoverState = (props: Partial<UseHoverStateProps> | undefined = undefined): UseHoverStateReturnType => {\n  const { closingDelay, isDisabled } = { ...defaultUseHoverStateProps, ...props }\n\n  const [isHovered, setIsHovered] = useState(false)\n  const [timer, setTimer] = useState<NodeJS.Timeout>()\n\n  const onMouseEnter = () => {\n    if (isDisabled) {\n      return\n    }\n    clearTimeout(timer)\n    setIsHovered(true)\n  }\n\n  const onMouseLeave = () => {\n    if (isDisabled) {\n      return\n    }\n    setTimer(setTimeout(() => {\n      setIsHovered(false)\n    }, closingDelay))\n  }\n\n  useEffect(() => {\n    if (timer) {\n      return () => {\n        clearTimeout(timer)\n      }\n    }\n  })\n\n  useEffect(() => {\n    if (timer) {\n      clearTimeout(timer)\n    }\n  }, [isDisabled]) // eslint-disable-line react-hooks/exhaustive-deps\n\n  return {\n    isHovered, setIsHovered, handlers: { onMouseEnter, onMouseLeave }\n  }\n}\n","import type { CSSProperties, PropsWithChildren, ReactNode } from 'react'\nimport { useHoverState } from '../hooks/useHoverState'\nimport { clsx } from 'clsx'\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\nexport type TooltipProps = PropsWithChildren<{\n  tooltip: string | ReactNode,\n  /**\n   * Number of milliseconds until the tooltip appears\n   *\n   * defaults to 1000ms\n   */\n  animationDelay?: number,\n  /**\n   * Class names of additional styling properties for the tooltip\n   */\n  tooltipClassName?: string,\n  /**\n   * Class names of additional styling properties for the container from which the tooltip will be created\n   */\n  containerClassName?: string,\n  position?: Position,\n  zIndex?: number,\n}>\n\n/**\n * A Component for showing a tooltip when hovering over Content\n * @param tooltip The tooltip to show can be a text or any ReactNode\n * @param children The Content for which the tooltip should be created\n * @param animationDelay The delay before the tooltip appears\n * @param tooltipClassName Additional ClassNames for the Container of the tooltip\n * @param containerClassName Additional ClassNames for the Container holding the content\n * @param position The direction of the tooltip relative to the Container\n * @param zIndex The z Index of the tooltip (you may require this when stacking modals)\n * @constructor\n */\nexport const Tooltip = ({\n                          tooltip,\n                          children,\n                          animationDelay = 650,\n                          tooltipClassName = '',\n                          containerClassName = '',\n                          position = 'bottom',\n                          zIndex = 10,\n                        }: TooltipProps) => {\n  const { isHovered, handlers } = useHoverState()\n\n  const positionClasses = {\n    top: `bottom-full left-1/2 -translate-x-1/2 mb-[6px]`,\n    bottom: `top-full left-1/2 -translate-x-1/2 mt-[6px]`,\n    left: `right-full top-1/2 -translate-y-1/2 mr-[6px]`,\n    right: `left-full top-1/2 -translate-y-1/2 ml-[6px]`\n  }\n\n  const triangleSize = 6\n  const triangleClasses = {\n    top: `top-full left-1/2 -translate-x-1/2 border-t-gray-600 border-l-transparent border-r-transparent`,\n    bottom: `bottom-full left-1/2 -translate-x-1/2 border-b-gray-600 border-l-transparent border-r-transparent`,\n    left: `left-full top-1/2 -translate-y-1/2 border-l-gray-600 border-t-transparent border-b-transparent`,\n    right: `right-full top-1/2 -translate-y-1/2 border-r-gray-600 border-t-transparent border-b-transparent`\n  }\n\n  const triangleStyle: Record<Position, CSSProperties> = {\n    top: { borderWidth: `${triangleSize}px ${triangleSize}px 0 ${triangleSize}px` },\n    bottom: { borderWidth: `0 ${triangleSize}px ${triangleSize}px ${triangleSize}px` },\n    left: { borderWidth: `${triangleSize}px 0 ${triangleSize}px ${triangleSize}px` },\n    right: { borderWidth: `${triangleSize}px ${triangleSize}px ${triangleSize}px 0` }\n  }\n\n  return (\n    <div\n      className={clsx('relative inline-block', containerClassName)}\n      {...handlers}\n    >\n      {children}\n      {isHovered && (\n        <div\n          className={clsx(`opacity-0 absolute text-black text-xs font-semibold text-gray-600 px-2 py-1 rounded whitespace-nowrap border-2 border-gray-600\n           animate-tooltip-fade-in shadow-lg bg-gray-100`, positionClasses[position], tooltipClassName)}\n          style={{ zIndex, animationDelay: animationDelay + 'ms' }}\n        >\n          {tooltip}\n          <div\n            className={clsx(`absolute w-0 h-0`, triangleClasses[position])}\n            style={{ ...triangleStyle[position], zIndex }}\n           />\n        </div>\n      )}\n    </div>\n  )\n}\n","export type VerticalDividerProps = {\n  width?: number,\n  height?: number,\n  strokeWidth?: number,\n  dashGap?: number,\n  dashLength?: number,\n}\n\n/**\n * A Component for creating a vertical Divider\n */\nexport const VerticalDivider = ({\n                                  width = 1,\n                                  height = 100,\n                                  strokeWidth = 4,\n                                  dashGap = 4,\n                                  dashLength = 4,\n                                }: VerticalDividerProps) => {\n  return (\n    <div style={{ width: width + 'px', height: height + 'px' }}>\n      <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} fill=\"none\"\n           xmlns=\"http://www.w3.org/2000/svg\">\n        <line\n          opacity=\"0.5\"\n          x1={width / 2}\n          y1={height}\n          x2={width / 2}\n          y2=\"0\"\n          stroke=\"url(#paint_linear)\"\n          strokeWidth={strokeWidth}\n          strokeDasharray={`${dashLength} ${dashLength + dashGap}`}\n          strokeLinecap=\"round\"\n        />\n        <defs>\n          <linearGradient\n            id=\"paint_linear\"\n            x1={width / 2}\n            y1=\"0\"\n            x2={width / 2}\n            y2={height}\n            gradientUnits=\"userSpaceOnUse\"\n          >\n            <stop stopOpacity=\"0\" stopColor=\"currentColor\"/>\n            <stop offset=\"0.5\" stopColor=\"currentColor\"/>\n            <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity=\"0\"/>\n          </linearGradient>\n        </defs>\n      </svg>\n    </div>\n  )\n}\n","import { useEffect, useState } from 'react'\nimport { ArrowDown, ArrowUp, ChevronDown } from 'lucide-react'\nimport type { Languages } from '../../hooks/useLanguage'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { noop } from '../../util/noop'\nimport { addDuration, isInTimeSpan, subtractDuration } from '../../util/date'\nimport clsx from 'clsx'\nimport { SolidButton, TextButton } from '../Button'\nimport { useLocale } from '../../hooks/useLanguage'\nimport type { YearMonthPickerProps } from './YearMonthPicker'\nimport { YearMonthPicker } from './YearMonthPicker'\nimport type { DayPickerProps } from './DayPicker'\nimport { DayPicker } from './DayPicker'\n\ntype DatePickerTranslation = {\n  today: string,\n}\n\nconst defaultDatePickerTranslation: Record<Languages, DatePickerTranslation> = {\n  en: {\n    today: 'Today',\n  },\n  de: {\n    today: 'Heute',\n  }\n}\n\ntype DisplayMode = 'yearMonth' | 'day'\n\nexport type DatePickerProps = {\n  value?: Date,\n  start?: Date,\n  end?: Date,\n  initialDisplay?: DisplayMode,\n  onChange?: (date: Date) => void,\n  dayPickerProps?: Omit<DayPickerProps, 'displayedMonth' | 'onChange' | 'selected'>,\n  yearMonthPickerProps?: Omit<YearMonthPickerProps, 'displayedYearMonth' | 'onChange' | 'start' | 'end'>,\n  className?: string,\n}\n\n/**\n * A Component for picking a date\n */\nexport const DatePicker = ({\n                             overwriteTranslation,\n                             value = new Date(),\n                             start = subtractDuration(new Date(), { years: 50 }),\n                             end = addDuration(new Date(), { years: 50 }),\n                             initialDisplay = 'day',\n                             onChange = noop,\n                             yearMonthPickerProps,\n                             dayPickerProps,\n                             className = ''\n                           }: PropsForTranslation<DatePickerTranslation, DatePickerProps>) => {\n  const locale = useLocale()\n  const translation = useTranslation(defaultDatePickerTranslation, overwriteTranslation)\n  const [displayedMonth, setDisplayedMonth] = useState<Date>(value)\n  const [displayMode, setDisplayMode] = useState<DisplayMode>(initialDisplay)\n\n  useEffect(() => {\n    setDisplayedMonth(value)\n  }, [value])\n\n  return (\n    <div className={clsx('col gap-y-4', className)}>\n      <div className=\"row items-center justify-between h-7\">\n        <TextButton\n          className={clsx('row gap-x-1 items-center cursor-pointer select-none', {\n            'text-disabled-text': displayMode !== 'day',\n          })}\n          onClick={() => setDisplayMode(displayMode === 'day' ? 'yearMonth' : 'day')}\n        >\n          {`${new Intl.DateTimeFormat(locale, { month: 'long' }).format(displayedMonth)} ${displayedMonth.getFullYear()}`}\n          <ChevronDown size={16}/>\n        </TextButton>\n        {displayMode === 'day' && (\n          <div className=\"row justify-end\">\n            <SolidButton\n              size=\"small\"\n              color=\"primary\"\n              disabled={!isInTimeSpan(subtractDuration(displayedMonth, { months: 1 }), start, end)}\n              onClick={() => {\n                setDisplayedMonth(subtractDuration(displayedMonth, { months: 1 }))\n              }}\n            >\n              <ArrowUp size={20}/>\n            </SolidButton>\n            <SolidButton\n              size=\"small\"\n              color=\"primary\"\n              disabled={!isInTimeSpan(addDuration(displayedMonth, { months: 1 }), start, end)}\n              onClick={() => {\n                setDisplayedMonth(addDuration(displayedMonth, { months: 1 }))\n              }}\n            >\n              <ArrowDown size={20}/>\n            </SolidButton>\n          </div>\n        )}\n      </div>\n      {displayMode === 'yearMonth' ? (\n        <YearMonthPicker\n          {...yearMonthPickerProps}\n          displayedYearMonth={value}\n          start={start}\n          end={end}\n          onChange={newDate => {\n            setDisplayedMonth(newDate)\n            setDisplayMode('day')\n          }}\n        />\n      ) : (\n        <div>\n          <DayPicker\n            {...dayPickerProps}\n            displayedMonth={displayedMonth}\n            start={start}\n            end={end}\n            selected={value}\n            onChange={date => {\n              onChange(date)\n            }}\n          />\n          <div className=\"mt-2\">\n            <TextButton\n              onClick={() => {\n                const newDate = new Date()\n                newDate.setHours(value.getHours(), value.getMinutes())\n                onChange(newDate)\n              }}\n            >\n              {translation.today}\n            </TextButton>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\n/**\n * Example for the Date Picker\n */\nexport const ControlledDatePicker = ({\n                                    value = new Date(),\n                                    onChange = noop,\n                                    ...props\n                                  }: DatePickerProps) => {\n  const [date, setDate] = useState<Date>(value)\n\n  useEffect(() => setDate(value), [value])\n\n  return (\n    <DatePicker\n      {...props}\n      value={date}\n      onChange={date1 => {\n        setDate(date1)\n        onChange(date1)\n      }}\n    />\n  )\n}\n","import { equalSizeGroups } from './array'\n\nexport const monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const\nexport type Month = typeof monthsList[number]\n\nexport const weekDayList = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const\nexport type WeekDay = typeof weekDayList[number]\n\nexport const formatDate = (date: Date) => {\n  const year = date.getFullYear().toString().padStart(4, '0')\n  const month = (date.getMonth() + 1).toString().padStart(2, '0')\n  const day = (date.getDate()).toString().padStart(2, '0')\n  return `${year}-${month}-${day}`\n}\n\nexport const formatDateTime = (date: Date) => {\n  const dateString = formatDate(date)\n  const hours = date.getHours().toString().padStart(2, '0')\n  const minutes = date.getMinutes().toString().padStart(2, '0')\n  return `${dateString}T${hours}:${minutes}`\n}\n\nexport const getDaysInMonth = (year: number, month: number): number => {\n  const lastDayOfMonth = new Date(year, month + 1, 0)\n  return lastDayOfMonth.getDate()\n}\n\nexport type Duration = {\n  years?: number,\n  months?: number,\n  days?: number,\n  hours?: number,\n  minutes?: number,\n  seconds?: number,\n  milliseconds?: number,\n}\n\nexport const changeDuration = (date: Date, duration: Duration, isAdding?: boolean): Date => {\n  const {\n    years = 0,\n    months = 0,\n    days = 0,\n    hours = 0,\n    minutes = 0,\n    seconds = 0,\n    milliseconds = 0,\n  } = duration\n\n  // Check ranges\n  if (years < 0) {\n    console.error(`Range error years must be greater than 0: received ${years}`)\n    return new Date(date)\n  }\n  if (months < 0 || months > 11) {\n    console.error(`Range error month must be 0 <= month <= 11: received ${months}`)\n    return new Date(date)\n  }\n  if (days < 0) {\n    console.error(`Range error days must be greater than 0: received ${days}`)\n    return new Date(date)\n  }\n  if (hours < 0 || hours > 23) {\n    console.error(`Range error hours must be 0 <= hours <= 23: received ${hours}`)\n    return new Date(date)\n  }\n  if (minutes < 0 || minutes > 59) {\n    console.error(`Range error minutes must be 0 <= minutes <= 59: received ${minutes}`)\n    return new Date(date)\n  }\n  if (seconds < 0 || seconds > 59) {\n    console.error(`Range error seconds must be 0 <= seconds <= 59: received ${seconds}`)\n    return new Date(date)\n  }\n  if (milliseconds < 0) {\n    console.error(`Range error seconds must be greater than 0: received ${milliseconds}`)\n    return new Date(date)\n  }\n\n  const multiplier = isAdding ? 1 : -1\n\n  const newDate = new Date(date)\n\n  newDate.setFullYear(newDate.getFullYear() + multiplier * years)\n\n  newDate.setMonth(newDate.getMonth() + multiplier * months)\n\n  newDate.setDate(newDate.getDate() + multiplier * days)\n\n  newDate.setHours(newDate.getHours() + multiplier * hours)\n\n  newDate.setMinutes(newDate.getMinutes() + multiplier * minutes)\n\n  newDate.setSeconds(newDate.getSeconds() + multiplier * seconds)\n\n  newDate.setMilliseconds(newDate.getMilliseconds() + multiplier * milliseconds)\n\n  return newDate\n}\n\nexport const addDuration = (date: Date, duration: Duration): Date => {\n  return changeDuration(date, duration, true)\n}\n\nexport const subtractDuration = (date: Date, duration: Duration): Date => {\n  return changeDuration(date, duration, false)\n}\n\nexport const getBetweenDuration = (startDate: Date, endDate: Date): Duration => {\n  const durationInMilliseconds = endDate.getTime() - startDate.getTime()\n\n  const millisecondsInSecond = 1000\n  const millisecondsInMinute = 60 * millisecondsInSecond\n  const millisecondsInHour = 60 * millisecondsInMinute\n  const millisecondsInDay = 24 * millisecondsInHour\n  const millisecondsInMonth = 30 * millisecondsInDay // Rough estimation, can be adjusted\n\n  const years = Math.floor(durationInMilliseconds / (365.25 * millisecondsInDay))\n  const months = Math.floor(durationInMilliseconds / millisecondsInMonth)\n  const days = Math.floor(durationInMilliseconds / millisecondsInDay)\n  const hours = Math.floor((durationInMilliseconds % millisecondsInDay) / millisecondsInHour)\n  const seconds = Math.floor((durationInMilliseconds % millisecondsInHour) / millisecondsInSecond)\n  const milliseconds = durationInMilliseconds % millisecondsInSecond\n\n  return {\n    years,\n    months,\n    days,\n    hours,\n    seconds,\n    milliseconds,\n  }\n}\n\n/** Checks if a given date is in the range of two dates\n *\n * An undefined value for startDate or endDate means no bound for the start or end respectively\n */\nexport const isInTimeSpan = (value: Date, startDate?: Date, endDate?: Date): boolean => {\n  if(startDate && endDate) {\n    console.assert(startDate <= endDate)\n    return startDate <= value && value <= endDate\n  } else if (startDate) {\n    return startDate <= value\n  } else if(endDate) {\n    return endDate >= value\n  } else {\n    return true\n  }\n}\n\n/** Compare two dates on the year, month, day */\nexport const equalDate = (date1: Date, date2: Date) => {\n  return date1.getFullYear() === date2.getFullYear()\n    && date1.getMonth() === date2.getMonth()\n    && date1.getDate() === date2.getDate()\n}\n\nexport const getWeeksForCalenderMonth = (date: Date, weekStart: WeekDay, weeks: number = 6) => {\n  const month = date.getMonth()\n  const year = date.getFullYear()\n\n  const dayList: Date[] = []\n  let currentDate = new Date(year, month, 1) // Start of month\n  const weekStartIndex = weekDayList.indexOf(weekStart)\n\n  // Move the current day to the week before\n  while (currentDate.getDay() !== weekStartIndex) {\n    currentDate = subtractDuration(currentDate, { days: 1 })\n  }\n\n  while (dayList.length < 7 * weeks) {\n    const date = new Date(currentDate)\n    date.setHours(date.getHours(), date.getMinutes()) // To make sure we are not overwriting the time\n    dayList.push(date)\n    currentDate = addDuration(currentDate, { days: 1 })\n  }\n\n  // weeks\n  return equalSizeGroups(dayList, 7)\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { noop } from '../../util/noop'\nimport { equalSizeGroups, range } from '../../util/array'\nimport clsx from 'clsx'\nimport { Expandable } from '../Expandable'\nimport { addDuration, monthsList, subtractDuration } from '../../util/date'\nimport { useLocale } from '../../hooks/useLanguage'\n\nexport type YearMonthPickerProps = {\n  displayedYearMonth?: Date,\n  start?: Date,\n  end?: Date,\n  onChange?: (date: Date) => void,\n  className?: string,\n  maxHeight?: number,\n  showValueOpen?: boolean,\n}\n\n// TODO use a dynamically loading infinite list here\nexport const YearMonthPicker = ({\n                                  displayedYearMonth = new Date(),\n                                  start = subtractDuration(new Date(), { years: 50 }),\n                                  end = addDuration(new Date(), { years: 50 }),\n                                  onChange = noop,\n                                  className = '',\n                                  maxHeight = 300,\n                                  showValueOpen = true\n                                }: YearMonthPickerProps) => {\n  const locale = useLocale()\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    const scrollToItem = () => {\n      if (ref.current) {\n        ref.current.scrollIntoView({\n          behavior: 'instant',\n          block: 'center',\n        })\n      }\n    }\n\n    scrollToItem()\n  }, [ref])\n\n  if (end < start) {\n    console.error(`startYear: (${start}) less than endYear: (${end})`)\n    return null\n  }\n\n  const years = range(start.getFullYear(), end.getFullYear())\n\n  return (\n    <div className={clsx('col select-none', className)}>\n      <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n        <div className=\"col gap-y-1 mr-3\">\n          {years.map(year => {\n            const selectedYear = displayedYearMonth.getFullYear() === year\n            return (\n              <Expandable\n                key={year}\n                ref={(displayedYearMonth.getFullYear() ?? new Date().getFullYear()) === year ? ref : undefined}\n                label={<span className={clsx({ 'text-primary font-bold': selectedYear })}>{year}</span>}\n                initialExpansion={showValueOpen && selectedYear}\n              >\n                <div className=\"col gap-y-1 px-2 pb-2\">\n                  {equalSizeGroups([...monthsList], 3).map((monthList, index) => (\n                    <div key={index} className=\"row\">\n                      {monthList.map(month => {\n                        const monthIndex = monthsList.indexOf(month)\n                        const newDate = new Date(year, monthIndex)\n\n                        const selectedMonth = selectedYear && monthIndex === displayedYearMonth.getMonth()\n                        const firstOfMonth = new Date(year, monthIndex, 1)\n                        const lastOfMonth = new Date(year, monthIndex, 1)\n                        const isAfterStart = start === undefined || start <= addDuration(subtractDuration(lastOfMonth, { days: 1 }), { months: 1 })\n                        const isBeforeEnd = end === undefined || firstOfMonth <= end\n                        const isValid = isAfterStart && isBeforeEnd\n                        return (\n                          <button\n                            key={month}\n                            disabled={!isValid}\n                            className={clsx(\n                              'chip hover:brightness-95 flex-1',\n                              {\n                                'bg-gray-50 text-black': !selectedMonth && isValid,\n                                'bg-primary text-on-primary': selectedMonth && isValid,\n                                'bg-disabled-background text-disabled-text': !isValid\n                              }\n                            )}\n                            onClick={() => {\n                              onChange(newDate)\n                            }}\n                          >\n                            {new Intl.DateTimeFormat(locale, { month: 'short' }).format(newDate)}\n                          </button>\n                        )\n                      })}\n                    </div>\n                  ))}\n                </div>\n              </Expandable>\n            )\n          })}\n        </div>\n      </Scrollbars>\n    </div>\n  )\n}\n\nexport const ControlledYearMonthPicker = ({\n                                         displayedYearMonth = new Date(),\n                                         onChange = noop,\n                                         ...props\n                                       }: YearMonthPickerProps) => {\n  const [yearMonth, setYearMonth] = useState<Date>(displayedYearMonth)\n\n  useEffect(() => setYearMonth(displayedYearMonth), [displayedYearMonth])\n\n  return (\n    <YearMonthPicker\n      displayedYearMonth={yearMonth}\n      onChange={date => {\n        setYearMonth(date)\n        onChange(date)\n      }}\n      {...props}\n    />\n  )\n}\n","import type { WeekDay } from '../../util/date'\nimport { isInTimeSpan } from '../../util/date'\nimport { equalDate, getWeeksForCalenderMonth } from '../../util/date'\nimport { noop } from '../../util/noop'\nimport clsx from 'clsx'\nimport { useLocale } from '../../hooks/useLanguage'\nimport { useEffect, useState } from 'react'\n\nexport type DayPickerProps = {\n  displayedMonth: Date,\n  selected?: Date,\n  start?: Date,\n  end?: Date,\n  onChange?: (date: Date) => void,\n  weekStart?: WeekDay,\n  markToday?: boolean,\n  className?: string,\n}\n\n/**\n * A component for selecting a day of a month\n */\nexport const DayPicker = ({\n  displayedMonth,\n                            selected,\n                            start,\n                            end,\n                            onChange = noop,\n                            weekStart = 'monday',\n                            markToday = true,\n                            className = ''\n                          }: DayPickerProps) => {\n  const locale = useLocale()\n  const month = displayedMonth.getMonth()\n  const weeks = getWeeksForCalenderMonth(displayedMonth, weekStart)\n\n  return (\n    <div className={clsx('col gap-y-1 min-w-[220px] select-none', className)}>\n      <div className=\"row text-center\">\n        {weeks[0]!.map((weekDay, index) => (\n          <div key={index} className=\"flex-1 font-semibold\">\n            {new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(weekDay).substring(0, 2)}\n          </div>\n        ))}\n      </div>\n      {weeks.map((week, index) => (\n        <div key={index} className=\"row text-center\">\n          {week.map((date) => {\n            const isSelected = !!selected && equalDate(selected, date)\n            const isToday = equalDate(new Date(), date)\n            const isSameMonth = date.getMonth() === month\n            const isDayValid = isInTimeSpan(date, start, end)\n            return (\n              <button\n                disabled={!isDayValid}\n                key={date.getDate()}\n                className={clsx(\n                  'flex-1 rounded-full border-2 border-transparent shadow-sm',\n                  {\n                    'text-gray-700 bg-gray-100': !isSameMonth && isDayValid,\n                    'text-black bg-white': !isSelected && isSameMonth && isDayValid,\n                    'text-on-primary bg-primary': isSelected,\n                    'border-black': isToday && markToday,\n                    'hover:brightness-90 hover:bg-primary hover:text-on-primary': isDayValid,\n                    'text-disabled-text bg-disabled-background': !isDayValid\n                  }\n                )}\n                onClick={() => onChange(date)}\n              >\n                {date.getDate()}\n              </button>\n            )\n          })}\n        </div>\n      ))}\n    </div>\n  )\n}\n\nexport const DayPickerControlled = ({ displayedMonth, onChange = noop, ...restProps }: DayPickerProps) => {\n  const [date, setDate] = useState(displayedMonth)\n\n  useEffect(() => setDate(displayedMonth), [displayedMonth])\n\n  return (\n    <DayPicker\n      displayedMonth={date}\n      onChange={newDate => {\n        setDate(newDate)\n        onChange(newDate)\n      }}\n      {...restProps}\n    />\n  )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { noop } from '../../util/noop'\nimport { closestMatch, range } from '../../util/array'\nimport clsx from 'clsx'\n\ntype MinuteIncrement = '1min' | '5min' | '10min' | '15min' | '30min'\n\nexport type TimePickerProps = {\n  time?: Date,\n  onChange?: (time: Date) => void,\n  is24HourFormat?: boolean,\n  minuteIncrement?: MinuteIncrement,\n  maxHeight?: number,\n  className?: string,\n}\n\nexport const TimePicker = ({\n  time = new Date(),\n  onChange = noop,\n  is24HourFormat = true,\n  minuteIncrement = '5min',\n  maxHeight = 300,\n  className = ''\n}: TimePickerProps) => {\n  const minuteRef = useRef<HTMLButtonElement>(null)\n  const hourRef = useRef<HTMLButtonElement>(null)\n\n  const isPM = time.getHours() >= 11\n  const hours = is24HourFormat ? range(0, 23) : range(1, 12)\n  let minutes = range(0, 59)\n\n  useEffect(() => {\n    const scrollToItem = () => {\n      if (minuteRef.current) {\n        const container = minuteRef.current.parentElement!\n\n        const hasOverflow = container.scrollHeight > maxHeight\n        if (hasOverflow) {\n          minuteRef.current.scrollIntoView({\n            behavior: 'instant',\n            block: 'nearest',\n          })\n        }\n      }\n    }\n    scrollToItem()\n  }, [minuteRef, minuteRef.current]) // eslint-disable-line\n\n  useEffect(() => {\n    const scrollToItem = () => {\n      if (hourRef.current) {\n        const container = hourRef.current.parentElement!\n\n        const hasOverflow = container.scrollHeight > maxHeight\n        if (hasOverflow) {\n          hourRef.current.scrollIntoView({\n            behavior: 'instant',\n            block: 'nearest',\n          })\n        }\n      }\n    }\n    scrollToItem()\n  }, [hourRef, hourRef.current]) // eslint-disable-line\n\n  switch (minuteIncrement) {\n    case '5min':\n      minutes = minutes.filter(value => value % 5 === 0)\n      break\n    case '10min':\n      minutes = minutes.filter(value => value % 10 === 0)\n      break\n    case '15min':\n      minutes = minutes.filter(value => value % 15 === 0)\n      break\n    case '30min':\n      minutes = minutes.filter(value => value % 30 === 0)\n      break\n  }\n\n  const closestMinute = closestMatch(minutes, (item1, item2) => Math.abs(item1 - time.getMinutes()) < Math.abs(item2 - time.getMinutes()))\n\n  const style = (selected: boolean) => clsx('chip-full hover:brightness-90 hover:bg-primary hover:text-on-primary rounded-md mr-3',\n    { 'bg-primary text-on-primary': selected, 'bg-white text-black': !selected })\n\n  const onChangeWrapper = (transformer: (newDate: Date) => void) => {\n    const newDate = new Date(time)\n    transformer(newDate)\n    onChange(newDate)\n  }\n\n  return (\n    <div className={clsx('row gap-x-2 w-fit min-w-[150px] select-none', className)}>\n      <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n        <div className=\"col gap-y-1 h-full\">\n          {hours.map(hour => {\n            const currentHour = hour === time.getHours() - (!is24HourFormat && isPM ? 12 : 0)\n            return (\n              <button\n                key={hour}\n                ref={currentHour ? hourRef : undefined}\n                className={style(currentHour)}\n                onClick={() => onChangeWrapper(newDate => newDate.setHours(hour + (!is24HourFormat && isPM ? 12 : 0)))}\n              >\n                {hour.toString().padStart(2, '0')}\n              </button>\n            )\n          })}\n        </div>\n      </Scrollbars>\n      <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n        <div className=\"col gap-y-1 h-full\">\n          {minutes.map(minute => {\n            const currentMinute = minute === closestMinute\n            return (\n              <button\n                key={minute + minuteIncrement} // minute increment so that scroll works\n                ref={currentMinute ? minuteRef : undefined}\n                className={style(currentMinute)}\n                onClick={() => onChangeWrapper(newDate => newDate.setMinutes(minute))}\n              >\n                {minute.toString().padStart(2, '0')}\n              </button>\n            )\n          })}\n        </div>\n      </Scrollbars>\n      {!is24HourFormat && (\n        <div className=\"col gap-y-1\">\n          <button\n            className={style(!isPM)}\n            onClick={() => onChangeWrapper(newDate => isPM && newDate.setHours(newDate.getHours() - 12))}\n          >\n            AM\n          </button>\n          <button\n            className={style(isPM)}\n            onClick={() => onChangeWrapper(newDate => !isPM && newDate.setHours(newDate.getHours() + 12))}\n          >\n            PM\n          </button>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport const ControlledTimePicker = ({\n                                    time,\n                                    onChange = noop,\n                                    ...props\n                                  }: TimePickerProps) => {\n  const [value, setValue] = useState(time)\n  useEffect(() => setValue(time), [time])\n\n  return (\n    <TimePicker\n      {...props}\n      time={value}\n      onChange={time1 => {\n        setValue(time1)\n        onChange(time1)\n      }}\n    />\n  )\n}\n","import type { ImageProps } from 'next/image'\nimport Image from 'next/image'\n\nexport type TagProps = Omit<ImageProps, 'src'|'alt'>\n\n/**\n * Tag icon from flaticon\n *\n * https://www.flaticon.com/free-icon/price-tag_721550?term=label&page=1&position=8&origin=tag&related_id=721550\n *\n * When using it make attribution\n */\nexport const TagIcon = ({\n  className,\n  width = 16,\n  height = 16,\n  ...props\n}: TagProps) => {\n  return (\n    <Image\n      {...props}\n      width={width}\n      height={height}\n      alt=\"\"\n      src=\"https://cdn.helpwave.de/icons/label.png\"\n      className={className}\n    />\n  )\n}\n","import type { ReactNode } from 'react'\nimport React from 'react'\nimport clsx from 'clsx'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { createLoopingListWithIndex, range } from '../../util/array'\nimport { clamp } from '../../util/math'\nimport { EaseFunctions } from '../../util/easeFunctions'\nimport type { Direction } from '../../util/loopingArray'\nimport { LoopingArrayCalculator } from '../../util/loopingArray'\n\n\ntype CarouselProps = {\n  children: ReactNode[],\n  animationTime?: number,\n  isLooping?: boolean,\n  isAutoLooping?: boolean,\n  autoLoopingTimeOut?: number,\n  autoLoopAnimationTime?: number,\n  hintNext?: boolean,\n  arrows?: boolean,\n  dots?: boolean,\n  /**\n   * Percentage that is allowed to be scrolled further\n   */\n  overScrollThreshold?: number,\n  blurColor?: string,\n  className?: string,\n  heightClassName?: string,\n  widthClassName?: string,\n}\n\ntype ItemType = {\n  item: ReactNode,\n  index: number,\n}\n\ntype CarouselAnimationState = {\n  targetPosition: number,\n  /**\n   * Value of either 1 or -1, 1 is forwards -1 is backwards\n   */\n  direction: Direction,\n  startPosition: number,\n  startTime?: number,\n  lastUpdateTime?: number,\n  isAutoLooping: boolean,\n}\n\ntype DragState = {\n  startX: number,\n  startTime: number,\n  lastX: number,\n  startIndex: number,\n}\n\ntype CarouselInformation = {\n  currentPosition: number,\n  dragState?: DragState,\n  animationState?: CarouselAnimationState,\n}\n\nexport const Carousel = ({\n  children,\n  animationTime = 200,\n  isLooping = false,\n  isAutoLooping = false,\n  autoLoopingTimeOut = 5000,\n  autoLoopAnimationTime = 500,\n  hintNext = false,\n  arrows = false,\n  dots = true,\n  overScrollThreshold = 0.1,\n  blurColor = 'from-white',\n  className = '',\n  heightClassName = 'h-[24rem]',\n  widthClassName = 'w-[70%] desktop:w-1/2',\n}: CarouselProps) => {\n  if (isAutoLooping && !isLooping) {\n    console.error('When isAutoLooping is true, isLooping should also be true')\n    isLooping = true\n  }\n\n  const [{\n    currentPosition,\n    dragState,\n    animationState,\n  }, setCarouselInformation] = useState<CarouselInformation>({\n    currentPosition: 0,\n  })\n  const animationId = useRef<number | undefined>(undefined)\n  const timeOut = useRef<NodeJS.Timeout | undefined>(undefined)\n  autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut)\n\n  const length = children.length\n  const paddingItemCount = 3 // The number of items to append left and right of the list to allow for clean transition when looping\n\n  const util = useMemo(() => new LoopingArrayCalculator(length, isLooping, overScrollThreshold), [length, isLooping, overScrollThreshold])\n  const currentIndex = util.getCorrectedPosition(LoopingArrayCalculator.withoutOffset(currentPosition))\n  animationTime = Math.max(200, animationTime) // in ms, must be > 0\n  autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime)\n\n  const getStyleOffset = (index: number) => {\n    const baseOffset = -50 + (index - currentPosition) * 100\n    return `${baseOffset}%`\n  }\n\n  const animation = useCallback((time: number) => {\n    let keepAnimating: boolean = true\n\n    // Other calculation in the setState call to avoid updating the useCallback to often\n    setCarouselInformation((state) => {\n      const {\n        animationState,\n        dragState\n      } = state\n      if (animationState === undefined || dragState !== undefined) {\n        keepAnimating = false\n        return state\n      }\n      if (!animationState.startTime || !animationState.lastUpdateTime) {\n        return {\n          ...state,\n          animationState: {\n            ...animationState,\n            startTime: time,\n            lastUpdateTime: time\n          }\n        }\n      }\n      const useAnimationTime = animationState.isAutoLooping ? autoLoopAnimationTime : animationTime\n      const progress = clamp((time - animationState.startTime) / useAnimationTime) // progress\n      const easedProgress = EaseFunctions.easeInEaseOut(progress)\n      const distance = util.getDistanceDirectional(animationState.startPosition, animationState.targetPosition, animationState.direction)\n      const newPosition = util.getCorrectedPosition(easedProgress * distance * animationState.direction + animationState.startPosition)\n\n      if (animationState.targetPosition === newPosition || progress === 1) {\n        keepAnimating = false\n        return ({\n          currentPosition: LoopingArrayCalculator.withoutOffset(newPosition),\n          animationState: undefined\n        })\n      }\n      return ({\n        currentPosition: newPosition,\n        animationState: {\n          ...animationState!,\n          lastUpdateTime: time\n        }\n      })\n    })\n    if (keepAnimating) {\n      animationId.current = requestAnimationFrame(time1 => animation(time1))\n    }\n  }, [animationTime, autoLoopAnimationTime, util])\n\n  useEffect(() => {\n    if (animationState) {\n      animationId.current = requestAnimationFrame(animation)\n    }\n    return () => {\n      if (animationId.current) {\n        cancelAnimationFrame(animationId.current)\n        animationId.current = 0\n      }\n    }\n  }, [animationState]) // eslint-disable-line react-hooks/exhaustive-deps\n\n  const startAutoLoop = () => setCarouselInformation(prevState => ({\n    ...prevState,\n    dragState: prevState.dragState,\n    animationState: prevState.animationState || prevState.dragState ? prevState.animationState : {\n      startPosition: currentPosition,\n      targetPosition: (currentPosition + 1) % length,\n      direction: 1, // always move forward\n      isAutoLooping: true\n    }\n  }))\n\n  useEffect(() => {\n    if (!animationId.current && !animationState && !dragState && !timeOut.current) {\n      if (autoLoopingTimeOut > 0) {\n        timeOut.current = setTimeout(() => {\n          startAutoLoop()\n          timeOut.current = undefined\n        }, autoLoopingTimeOut)\n      } else {\n        startAutoLoop()\n      }\n    }\n  }, [animationState, dragState, animationId.current, timeOut.current]) // eslint-disable-line react-hooks/exhaustive-deps\n\n  const startAnimation = (targetPosition?: number) => {\n    if (targetPosition === undefined) {\n      targetPosition = LoopingArrayCalculator.withoutOffset(currentPosition)\n    }\n    if (targetPosition === currentPosition) {\n      return // we are exactly where we want to be\n    }\n\n    // find target index and fastest path to it\n    const direction = util.getBestDirection(currentPosition, targetPosition)\n    clearTimeout(timeOut.current)\n    timeOut.current = undefined\n    if (animationId.current) {\n      cancelAnimationFrame(animationId.current)\n      animationId.current = undefined\n    }\n\n    setCarouselInformation(prevState => ({\n      ...prevState,\n      dragState: undefined,\n      animationState: {\n        targetPosition: targetPosition!,\n        direction,\n        startPosition: currentPosition,\n        isAutoLooping: false\n      },\n      timeOut: undefined\n    }))\n  }\n\n  const canGoLeft = () => {\n    return isLooping || currentPosition !== 0\n  }\n\n  const canGoRight = () => {\n    return isLooping || currentPosition !== length - 1\n  }\n\n  const left = () => {\n    if (canGoLeft()) {\n      startAnimation(currentPosition === 0 ? length - 1 : LoopingArrayCalculator.withoutOffset(currentPosition - 1))\n    }\n  }\n\n  const right = () => {\n    if (canGoRight()) {\n      startAnimation(LoopingArrayCalculator.withoutOffset((currentPosition + 1) % length))\n    }\n  }\n\n  let items: ItemType[] = children.map((item, index) => ({\n    index,\n    item\n  }))\n\n  if (isLooping) {\n    const before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({\n      index,\n      item\n    }))\n    const after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({\n      index,\n      item\n    }))\n    items = [\n      ...before,\n      ...items,\n      ...after\n    ]\n  }\n\n  const onDragStart = (x: number) => setCarouselInformation(prevState => ({\n    ...prevState,\n    dragState: {\n      lastX: x,\n      startX: x,\n      startTime: Date.now(),\n      startIndex: currentPosition,\n    },\n    animationState: undefined // cancel animation\n  }))\n\n  const onDrag = (x: number, width: number) => {\n    // For some weird reason the clientX is 0 on the last dragUpdate before drag end causing issues\n    if (!dragState || x === 0) {\n      return\n    }\n    const offsetUpdate = (dragState.lastX - x) / width\n    const newPosition = util.getCorrectedPosition(currentPosition + offsetUpdate)\n\n    setCarouselInformation(prevState => ({\n      ...prevState,\n      currentPosition: newPosition,\n      dragState: {\n        ...dragState,\n        lastX: x\n      },\n    }))\n  }\n\n  const onDragEnd = (x: number, width: number) => {\n    if (!dragState) {\n      return\n    }\n    const distance = dragState.startX - x\n    const relativeDistance = distance / width\n    const duration = (Date.now() - dragState.startTime) // in milliseconds\n    const velocity = distance / (Date.now() - dragState.startTime)\n\n    const isSlide = Math.abs(velocity) > 2 || (duration < 200 && (Math.abs(relativeDistance) > 0.2 || Math.abs(distance) > 50))\n    if (isSlide) {\n      if (distance > 0 && canGoRight()) {\n        right()\n        return\n      } else if (distance < 0 && canGoLeft()) {\n        left()\n        return\n      }\n    }\n    startAnimation()\n  }\n\n  const dragHandlers = {\n    draggable: true,\n    onDragStart: (event: React.DragEvent<HTMLDivElement>) => {\n      onDragStart(event.clientX)\n      event.dataTransfer.setDragImage(document.createElement('div'), 0, 0)\n    },\n    onDrag: (event: React.DragEvent<HTMLDivElement>) => onDrag(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n    onDragEnd: (event: React.DragEvent<HTMLDivElement>) => onDragEnd(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n    onTouchStart: (event: React.TouchEvent<HTMLDivElement>) => onDragStart(event.touches[0]!.clientX),\n    onTouchMove: (event: React.TouchEvent<HTMLDivElement>) => onDrag(event.touches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n    onTouchEnd: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n    onTouchCancel: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n  }\n\n  return (\n    <div className=\"col items-center w-full gap-y-2\">\n      <div className={clsx(`relative w-full overflow-hidden`, heightClassName, className)}>\n        {arrows && (\n          <>\n            <div\n              className={clsx('absolute z-10 left-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2', { hidden: !canGoLeft() })}\n              onClick={() => left()}\n            >\n              <ChevronLeft size={32}/>\n            </div>\n            <div\n              className={clsx('absolute z-10 right-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2', { hidden: !canGoRight() })}\n              onClick={() => right()}\n            >\n              <ChevronRight size={32}/>\n            </div>\n          </>\n        )}\n        {hintNext ? (\n          <div className={clsx(`relative row h-full`, heightClassName)}>\n            <div className=\"relative row h-full w-full px-2 overflow-hidden\">\n              {items.map(({\n                            item,\n                            index\n                          }, listIndex) => (\n                <div\n                  key={listIndex}\n                  className={clsx(`absolute left-[50%] h-full overflow-hidden`, widthClassName, { '!cursor-grabbing': !!dragState })}\n                  style={{ translate: getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0)) }}\n                  {...dragHandlers}\n                  onClick={() => startAnimation(index)}\n                >\n                  {item}\n                </div>\n              ))}\n            </div>\n            <div\n              className={clsx(`hidden pointer-events-none desktop:block absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)}\n            />\n            <div\n              className={clsx(`hidden pointer-events-none desktop:block absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)}\n            />\n          </div>\n        ) : (\n          <div className={clsx('px-16 h-full', { '!cursor-grabbing': !!dragState })} {...dragHandlers}>\n            {children[currentIndex]}\n          </div>\n        )}\n      </div>\n      {dots && (\n        <div\n          className=\"row items-center justify-center w-full my-2\">\n          {range(0, length - 1).map(index => (\n            <button\n              key={index}\n              className={clsx('w-[2rem] min-w-[2rem] h-[0.75rem] min-h-[0.75rem] hover:bg-primary hover:brightness-90 first:rounded-l-md last:rounded-r-md', {\n                'bg-gray-200': currentIndex !== index,\n                'bg-primary': currentIndex === index\n              })}\n              onClick={() => startAnimation(index)}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  )\n}\n","export const clamp = (value: number, min: number = 0, max: number = 1): number => {\n  return Math.min(Math.max(value, min), max)\n}\n","import { clamp } from './math'\n\nexport type EaseFunction = (t: number) => number\n\nexport class EaseFunctions {\n  static cubicBezierGeneric(x1: number, y1: number, x2: number, y2: number): { x: EaseFunction, y: EaseFunction } {\n    // Calculate the x and y coordinates using the cubic Bézier formula\n    const cx = 3 * x1\n    const bx = 3 * (x2 - x1) - cx\n    const ax = 1 - cx - bx\n\n    const cy = 3 * y1\n    const by = 3 * (y2 - y1) - cy\n    const ay = 1 - cy - by\n\n    // Compute x and y values at parameter t\n    const x = (t: number) => ((ax * t + bx) * t + cx) * t\n    const y = (t: number) => ((ay * t + by) * t + cy) * t\n\n    return {\n      x,\n      y\n    }\n  }\n\n  static cubicBezier(x1: number, y1: number, x2: number, y2: number): EaseFunction {\n    const { y } = EaseFunctions.cubicBezierGeneric(x1, y1, x2, y2)\n    return (t: number) => {\n      t = clamp(t)\n      return y(t) // <= equal to x(t) * 0 + y(t) * 1\n    }\n  }\n\n  static easeInEaseOut(t: number): number {\n    return EaseFunctions.cubicBezier(0.65, 0, 0.35, 1)(t)\n  };\n}\n","/**\n *  1 is forwards\n *\n * -1 is backwards\n */\nexport type Direction = 1 | -1\n\nexport class LoopingArrayCalculator {\n  length: number\n  isLooping: boolean\n  allowedOverScroll: number\n\n  constructor(length: number, isLooping: boolean = true, allowedOverScroll: number = 0.1) {\n    if (allowedOverScroll < 0 || length < 1) {\n      throw new Error('Invalid parameters: allowedOverScroll >= 0 and length >= 1 must be true')\n    }\n\n    this.length = length\n    this.isLooping = isLooping\n    this.allowedOverScroll = allowedOverScroll\n  }\n\n  getCorrectedPosition(position: number): number {\n    if (!this.isLooping) {\n      return Math.max(-this.allowedOverScroll, Math.min(this.allowedOverScroll + this.length - 1, position))\n    }\n    if (position >= this.length) {\n      return position % this.length\n    }\n    if (position < 0) {\n      return this.length - (Math.abs(position) % this.length)\n    }\n    return position\n  }\n\n  static withoutOffset(position: number): number {\n    return position + LoopingArrayCalculator.getOffset(position)\n  }\n\n  static getOffset(position: number): number {\n    return Math.round(position) - position // For example: 45.5 => 46 - 45.5 = 0.5\n  }\n\n  /**\n   * @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)\n   */\n  getDistanceDirectional(position: number, target: number, direction: Direction): number {\n    if (!this.isLooping && (position < -this.allowedOverScroll || position > this.allowedOverScroll + this.length - 1)) {\n      throw new Error('Invalid parameters: position is out of bounds.')\n    }\n\n    const isForwardInvalid = (direction === 1 && position > target)\n    const isBackwardInvalid = (direction === -1 && target < position)\n\n    if (!this.isLooping && (isForwardInvalid || isBackwardInvalid)) {\n      return Infinity\n    }\n\n    if (direction === -1) {\n      return this.getDistanceDirectional(target, position, 1)\n    }\n\n    position = this.getCorrectedPosition(position)\n    target = this.getCorrectedPosition(target)\n\n    let distance = (target - position) * direction\n    if (distance < 0) {\n      distance = this.length - (Math.abs(position) % this.length) + target\n    }\n\n    return distance\n  }\n\n  getDistanceForward(position: number, target: number): number {\n    return this.getDistanceDirectional(position, target, 1)\n  }\n\n  getDistanceBackward(position: number, target: number): number {\n    return this.getDistanceDirectional(position, target, -1)\n  }\n\n  getDistance(position: number, target: number): number {\n    const forwardDistance = this.getDistanceForward(position, target)\n    const backwardDistance = this.getDistanceBackward(position, target)\n\n    return Math.min(forwardDistance, backwardDistance)\n  }\n\n  getBestDirection(position: number, target: number): Direction {\n    const forwardDistance = this.getDistanceForward(position, target)\n    const backwardDistance = this.getDistanceBackward(position, target)\n    return forwardDistance < backwardDistance ? 1 : -1\n  }\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nexport type DividerInserterProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n  children: ReactNode[],\n  divider: (index: number) => ReactNode,\n}\n\n/**\n * A Component for inserting a divider in the middle of each child element\n *\n *  undefined elements are removed\n */\nexport const DividerInserter = ({\n  children,\n  divider,\n  className,\n  ...restProps\n}: DividerInserterProps) => {\n  const nodes: ReactNode[] = []\n\n  for (let index = 0; index < children.length; index++) {\n    const element = children[index]\n    if (element !== undefined) {\n      nodes.push(element)\n      if (index < children.length - 1) {\n        nodes.push(divider(index))\n      }\n    }\n  }\n\n  return (\n    <div className={clsx(className)} {...restProps}>\n      {nodes}\n    </div>\n  )\n}\n","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport type { ExpandableProps } from '../Expandable'\nimport { Expandable } from '../Expandable'\nimport { MarkdownInterpreter } from '../MarkdownInterpreter'\n\ntype ContentType = {\n  type: 'markdown',\n  value: string,\n} | {\n  type: 'custom',\n  value: ReactNode,\n}\n\nexport type FAQItem = Pick<ExpandableProps, 'initialExpansion'| 'className'> & {\n  id: string,\n  title: string,\n  content: ContentType,\n}\n\nexport type FAQSectionProps = {\n  entries: FAQItem[],\n  expandableClassName?: string,\n}\n\n/**\n * Description\n */\nexport const FAQSection = ({\n  entries,\n  expandableClassName\n}: FAQSectionProps) => {\n  const chevronSize = 28\n  return (\n    <div className=\"col gap-y-4\">\n      {entries.map(({ id, title, content, ...restProps }) => (\n        <Expandable\n          key={id}\n          {...restProps}\n          label={(<h3 id={id} className=\"textstyle-title-md\">{title}</h3>)}\n          clickOnlyOnHeader={false}\n          icon={(expanded) => expanded ?\n              (<ChevronUp size={chevronSize} className=\"text-primary\" style={{ minWidth: `${chevronSize}px` }}/>) :\n              (<ChevronDown size={chevronSize} className=\"text-primary\"/>)\n          }\n          className={clsx('rounded-xl', expandableClassName)}\n          headerClassName=\"px-6 py-4\"\n        >\n          <div className=\"mt-2 px-6 pb-4\">\n            {content.type === 'markdown' ? (<MarkdownInterpreter text={content.value}/>) : content.value}\n          </div>\n        </Expandable>\n      ))}\n    </div>\n  )\n}\n","import { useContext, useEffect, type MouseEventHandler, type PropsWithChildren, type ReactNode } from 'react'\nimport ReactDOM from 'react-dom'\nimport { X } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Languages } from '../../hooks/useLanguage'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { Tooltip } from '../Tooltip'\nimport { ModalContext } from './ModalRegister'\n\ntype ModalHeaderTranslation = {\n    close: string,\n}\n\nconst defaultModalHeaderTranslation: Record<Languages, ModalHeaderTranslation> = {\n    en: {\n        close: 'Close'\n    },\n    de: {\n        close: 'Schließen'\n    }\n}\n\nexport type ModalHeaderProps = {\n    onCloseClick?: () => void,\n    /** The title of the Modal. If you want to only set the text use `titleText` instead */\n    title?: ReactNode,\n    /** The title text of the Modal. If you want to set a custom title use `title` instead */\n    titleText?: string,\n    /** The description of the Modal. If you want to only set the text use `descriptionText` instead */\n    description?: ReactNode,\n    /** The description text of the Modal. If you want to set a custom description use `description` instead */\n    descriptionText?: string,\n}\n\n/**\n * A default Header to be used by modals to have a uniform design\n */\nexport const ModalHeader = ({\n                                overwriteTranslation,\n                                onCloseClick,\n                                title,\n                                titleText = '',\n                                description,\n                                descriptionText = ''\n                            }: PropsForTranslation<ModalHeaderTranslation, ModalHeaderProps>) => {\n    const translation = useTranslation(defaultModalHeaderTranslation, overwriteTranslation)\n    const hasTitleRow = !!title || !!titleText || !!onCloseClick\n    const titleRow = (\n        <div className=\"row justify-between items-start gap-x-8\">\n            {title ?? (\n                <span className={clsx('textstyle-title-lg', {\n                    'mb-1': description || descriptionText,\n                })}>\n                        {titleText}\n                    </span>\n            )}\n            {!!onCloseClick && (\n                <Tooltip tooltip={translation.close}>\n                    <button className=\"row bg-gray-200 hover:bg-gray-300 rounded-md p-1\" onClick={onCloseClick}>\n                        <X/>\n                    </button>\n                </Tooltip>\n            )}\n        </div>\n    )\n\n    return (\n        <div className=\"col\">\n            {hasTitleRow && (titleRow)}\n            {description ?? (descriptionText && (<span className=\"textstyle-description\">{descriptionText}</span>))}\n        </div>\n    )\n}\n\nexport const modalRootName = 'modal-root'\n\nexport type ModalProps = {\n    id: string,\n    isOpen: boolean,\n    onBackgroundClick?: MouseEventHandler<HTMLDivElement>,\n    backgroundClassName?: string,\n    modalClassName?: string,\n    containerClassName?: string,\n} & ModalHeaderProps\n\n/**\n * A Generic Modal Window\n *\n * The state needs to be managed by the parent of this component\n *\n * DO NOT Conditionally render this always use the isOpen to ensure that the ModalRegister is working properly\n */\nexport const Modal = ({\n                          children,\n                          id,\n                          isOpen,\n                          onBackgroundClick,\n                          backgroundClassName = '',\n                          modalClassName = '',\n                          containerClassName = '',\n                          ...modalHeaderProps\n                      }: PropsWithChildren<ModalProps>) => {\n    const modalRoot = typeof window !== 'undefined' ? document.getElementById(modalRootName) : null\n    const {\n        register,\n        addToRegister,\n        removeFromRegister\n    } = useContext(ModalContext)\n\n    if (!id) {\n        console.error('the id cannot be empty')\n    }\n\n    useEffect(() => {\n        if (isOpen) {\n            addToRegister(id)\n        } else {\n            removeFromRegister(id)\n        }\n    }, [addToRegister, id, removeFromRegister, isOpen])\n\n    if (modalRoot === null || !isOpen) return null\n\n    const isLast = register.length < 1 || register[register.length - 1] === id\n    const isSecondLast = register.length < 2 || register[register.length - 2] === id\n\n    return ReactDOM.createPortal(\n        <div className={clsx('fixed inset-0 overflow-y-auto z-[99]', containerClassName)} id={id}>\n            {isLast && (\n                <div\n                    className={clsx('fixed inset-0 h-screen w-screen', backgroundClassName, {\n                        'bg-black/70': isLast && register.length === 1,\n                    })}\n                    onClick={onBackgroundClick}\n                />\n            )}\n            <div\n                className={clsx('fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 col p-4 bg-white text-black rounded-xl shadow-xl', modalClassName)}>\n                <ModalHeader {...modalHeaderProps} />\n                {children}\n            </div>\n            {!isLast && (\n                <div\n                    className={clsx('fixed inset-0 h-screen w-screen', backgroundClassName, {\n                        'bg-black/70': isSecondLast && register.length > 1,\n                    })}\n                />\n            )}\n        </div>,\n        modalRoot,\n        id\n    )\n}\n","import type { PropsWithChildren } from 'react'\nimport { createContext, useState } from 'react'\nimport { noop } from '../../util/noop'\n\nexport type ModalContextType = {\n  register: string[],\n  addToRegister: (id: string) => void,\n  removeFromRegister: (id: string) => void,\n}\nexport const ModalContext = createContext<ModalContextType>({\n  register: [],\n  addToRegister: noop,\n  removeFromRegister: noop,\n})\n\n/**\n * A Simple Wrapper for the context\n */\nexport const ModalRegister = ({\n  children\n}: PropsWithChildren) => {\n  const [register, setRegister] = useState<string[]>([])\n\n  const inRegister = (id: string) => {\n    return !!register.find(value => value === id)\n  }\n\n  const addToRegister = (id: string) => {\n    if (!inRegister(id)) {\n      setRegister([...register, id])\n    }\n  }\n\n  const removeFromRegister = (id: string) => {\n    if (inRegister(id)) {\n      setRegister(register.filter(value => value !== id))\n    }\n  }\n\n  return (\n    <ModalContext.Provider value={{ register, addToRegister, removeFromRegister }}>\n      {children}\n    </ModalContext.Provider>\n  )\n}\n","import type { PropsWithChildren } from 'react'\nimport type { SolidButtonColor } from '../Button'\nimport { SolidButton } from '../Button'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { Modal, type ModalProps } from './Modal'\n\ntype ConfirmDialogTranslation = {\n  confirm: string,\n  cancel: string,\n  decline: string,\n}\n\nexport type ConfirmDialogType = 'positive' | 'negative' | 'neutral'\n\nconst defaultConfirmDialogTranslation = {\n  en: {\n    confirm: 'Confirm',\n    cancel: 'Cancel',\n    decline: 'Decline'\n  },\n  de: {\n    confirm: 'Bestätigen',\n    cancel: 'Abbrechen',\n    decline: 'Ablehnen'\n  }\n}\n\nexport type ButtonOverwriteType = {\n  text?: string,\n  color?: SolidButtonColor,\n  disabled?: boolean,\n}\n\nexport type ConfirmDialogProps = ModalProps & {\n  isShowingDecline?: boolean,\n  requireAnswer?: boolean,\n  onCancel?: () => void,\n  onConfirm: () => void,\n  onDecline?: () => void,\n  confirmType?: ConfirmDialogType,\n  /**\n   * Order: Cancel, Decline, Confirm\n   */\n  buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Dialog for asking the user for Confirmation\n *\n * To require an answer omit the onBackgroundClick\n */\nexport const ConfirmDialog = ({\n  overwriteTranslation,\n  children,\n  onCancel,\n  onConfirm,\n  onDecline,\n  confirmType = 'positive',\n  buttonOverwrites,\n  ...restProps\n}: PropsForTranslation<ConfirmDialogTranslation, PropsWithChildren<ConfirmDialogProps>>) => {\n  const translation = useTranslation(defaultConfirmDialogTranslation, overwriteTranslation)\n\n  const mapping: Record<ConfirmDialogType, SolidButtonColor> = {\n    neutral: 'primary',\n    negative: 'negative',\n    positive: 'positive'\n  }\n\n  return (\n    <Modal {...restProps}>\n      {children}\n      <div className=\"row mt-3 gap-x-4 justify-end\">\n        {onCancel && (\n          <SolidButton\n            color={buttonOverwrites?.[0].color ?? 'primary'}\n            onClick={onCancel}\n            disabled={buttonOverwrites?.[0].disabled ?? false}\n          >\n            {buttonOverwrites?.[0].text ?? translation.cancel}\n          </SolidButton>\n        )}\n        {onDecline && (\n          <SolidButton\n            color={buttonOverwrites?.[1].color ?? 'negative'}\n            onClick={onDecline}\n\n            disabled={buttonOverwrites?.[1].disabled ?? false}\n          >\n            {buttonOverwrites?.[1].text ?? translation.decline}\n          </SolidButton>\n        )}\n        <SolidButton\n          autoFocus\n          color={buttonOverwrites?.[2].color ?? mapping[confirmType]}\n          onClick={onConfirm}\n          disabled={buttonOverwrites?.[2].disabled ?? false}\n        >\n          {buttonOverwrites?.[2].text ?? translation.confirm}\n        </SolidButton>\n      </div>\n    </Modal>\n  )\n}\n","import type { PropsWithChildren } from 'react'\nimport { SolidButton } from '../Button'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { Modal, type ModalProps } from './Modal'\n\ntype DiscardChangesDialogTranslation = {\n  save: string,\n  cancel: string,\n  dontSave: string,\n  title: string,\n  description: string,\n}\n\nconst defaultDiscardChangesDialogTranslation = {\n  en: {\n    save: 'Save',\n    cancel: 'Cancel',\n    dontSave: 'Don\\'t save',\n    title: 'Unsaved Changes',\n    description: 'Do you want to save your changes?'\n  },\n  de: {\n    save: 'Speichern',\n    cancel: 'Abbrechen',\n    dontSave: 'Nicht Speichern',\n    title: 'Ungespeicherte Änderungen',\n    description: 'Möchtest du die Änderungen speichern?'\n  }\n}\n\ntype DiscardChangesDialogProps = ModalProps & {\n  isShowingDecline?: boolean,\n  requireAnswer?: boolean,\n  onCancel: () => void,\n  onSave: () => void,\n  onDontSave: () => void,\n}\n\nexport const DiscardChangesDialog = ({\n  overwriteTranslation,\n  children,\n  title,\n  description,\n  onCancel,\n  onSave,\n  onDontSave,\n  ...modalProps\n}: PropsForTranslation<DiscardChangesDialogTranslation, PropsWithChildren<DiscardChangesDialogProps>>) => {\n  const translation = useTranslation(defaultDiscardChangesDialogTranslation, overwriteTranslation)\n  return (\n    <Modal\n      title={title ?? translation.title}\n      description={description ?? translation.description}\n      {...modalProps}\n    >\n      {children}\n      <div className=\"row mt-3 gap-x-4 justify-end\">\n        <SolidButton color=\"positive\" onClick={onSave}>\n          {translation.save}\n        </SolidButton>\n        <SolidButton color=\"negative\" onClick={onDontSave}>\n          {translation.dontSave}\n        </SolidButton>\n        <SolidButton autoFocus color=\"primary\" onClick={onCancel}>\n          {translation.cancel}\n        </SolidButton>\n      </div>\n    </Modal>\n  )\n}\n","import { Input } from '../user-input/Input'\nimport type { InputProps } from '../user-input/Input'\nimport type { ConfirmDialogProps } from './ConfirmDialog'\nimport { ConfirmDialog } from './ConfirmDialog'\n\nexport type InputModalProps = ConfirmDialogProps & {\n  inputs: InputProps[],\n}\n\n/**\n * A modal for receiving multiple inputs\n */\nexport const InputModal = ({\n  inputs,\n  buttonOverwrites,\n  ...restProps\n}: InputModalProps) => {\n  return (\n    <ConfirmDialog\n      buttonOverwrites={buttonOverwrites}\n      {...restProps}\n    >\n      {inputs.map((inputProps, index) => <Input key={`input ${index}`} {...inputProps}/>)}\n    </ConfirmDialog>\n  )\n}\n","import { Menu } from '@headlessui/react'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\nexport type SelectOption<T> = {\n  label: ReactNode,\n  value: T,\n  disabled?: boolean,\n  className?: string,\n}\n\nexport type SelectProps<T> = {\n  value?: T,\n  label?: LabelProps,\n  options: SelectOption<T>[],\n  onChange: (value: T) => void,\n  isHidingCurrentValue?: boolean,\n  hintText?: string,\n  showDisabledOptions?: boolean,\n  className?: string,\n  isDisabled?: boolean,\n  textColor?: string,\n  hoverColor?: string,\n  /**\n   * The items will be at the start of the select and aren't selectable\n   */\n  additionalItems?: ReactNode[],\n  selectedDisplayOverwrite?: ReactNode,\n};\n\n/**\n * A Select Component for selecting form a list of options\n *\n * The State is managed by the parent\n */\nexport const Select = <T, >({\n                              value,\n                              label,\n                              options,\n                              onChange,\n                              isHidingCurrentValue = true,\n                              hintText = '',\n                              showDisabledOptions = true,\n                              isDisabled,\n                              className,\n                              textColor = 'text-menu-text',\n                              hoverColor = 'hover:brightness-90',\n                              additionalItems,\n                              selectedDisplayOverwrite,\n                            }: SelectProps<T>) => {\n  // Notice: for more complex types this check here might need an additional compare method\n  let filteredOptions = isHidingCurrentValue ? options.filter(option => option.value !== value) : options\n  if (!showDisabledOptions) {\n    filteredOptions = filteredOptions.filter(value => !value.disabled)\n  }\n  const selectedOption = options.find(option => option.value === value)\n  if (value !== undefined && selectedOption === undefined && selectedDisplayOverwrite === undefined) {\n    console.warn('The selected value is not found in the options list. This might be an error on your part or' +\n      ' default behavior if it is complex data type on which === does not work. In case of the latter' +\n      ' use selectedDisplayOverwrite to set your selected text or component')\n  }\n\n  const borderColor = 'border-menu-border'\n\n  return (\n    <div className={clsx(className)}>\n      {label && (\n        <Label {...label} labelType={label.labelType ?? 'labelBig'} className={clsx('mb-1', label.className)}/>\n      )}\n      <Menu as=\"div\" className=\"relative text-menu-text\">\n        {({ open }) => (\n          <>\n            <Menu.Button\n              className={clsx(\n                'inline-flex w-full justify-between items-center rounded-t-lg border-2 px-4 py-2 font-medium bg-menu-background text-menu-text',\n                textColor, borderColor,\n                {\n                  'rounded-b-lg': !open,\n                  [hoverColor]: !isDisabled,\n                  'bg-disabled-background cursor-not-allowed text-disabled': isDisabled\n                }\n              )}\n              disabled={isDisabled}\n            >\n              <span>{selectedDisplayOverwrite ?? selectedOption?.label ?? hintText}</span>\n              {open ? <ChevronUp/> : <ChevronDown/>}\n            </Menu.Button>\n            <Menu.Items\n              className=\"absolute w-full z-10 rounded-b-lg bg-menu-background text-menu-text shadow-lg max-h-[500px] overflow-y-auto\"\n            >\n              {(additionalItems ?? []).map((item, index) => (\n                <div key={`additionalItems${index}`}\n                     className={clsx(borderColor, 'px-4 py-2 overflow-hidden whitespace-nowrap text-ellipsis border-2 border-t-0', {\n                       'border-b-0 rounded-b-lg': filteredOptions.length === 0 && index === (additionalItems?.length ?? 1) - 1,\n                     })}\n                >\n                  {item}\n                </div>\n              ))}\n              {filteredOptions.map((option, index) => (\n                <Menu.Item key={`item${index}`}>\n                  {\n                    <div\n                      className={clsx('px-4 py-2 overflow-hidden whitespace-nowrap text-ellipsis border-2 border-t-0 cursor-pointer',\n                        option.className, borderColor, {\n                          'brightness-90': option.value === value,\n                          'brightness-95': index % 2 === 1,\n                          'text-disabled bg-disabled-background cursor-not-allowed': !!option.disabled,\n                          'bg-menu-background text-menu-text hover:brightness-90 cursor-pointer': !option.disabled,\n                          'rounded-b-lg': index === filteredOptions.length - 1,\n                        })}\n                      onClick={() => {\n                        if (!option.disabled) {\n                          onChange(option.value)\n                        }\n                      }}\n                    >\n                      {option.label}\n                    </div>\n                  }\n                </Menu.Item>\n              ))}\n            </Menu.Items>\n          </>\n        )}\n      </Menu>\n    </div>\n  )\n}\n","import { type PropsWithChildren } from 'react'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { Select } from '../user-input/Select'\nimport type { Languages } from '../../hooks/useLanguage'\nimport { useLanguage } from '../../hooks/useLanguage'\nimport { SolidButton } from '../Button'\nimport { Modal, type ModalProps } from './Modal'\n\nconst languageDetails = {\n  en: 'English',\n  de: 'Deutsch'\n}\n\ntype LanguageModalTranslation = {\n  message: string,\n  done: string,\n}\n\nconst defaultConfirmDialogTranslation = {\n  en: {\n    message: 'Choose your language',\n    done: 'Done',\n  },\n  de: {\n    message: 'Wählen Sie Ihre Sprache',\n    done: 'Fertig',\n  }\n}\n\ntype LanguageModalProps = ModalProps & {\n    onDone: () => void,\n}\n\n/**\n * A Modal for selecting the Language\n *\n * The State of open needs to be managed by the parent\n */\nexport const LanguageModal = ({\n  overwriteTranslation,\n  onDone,\n  onBackgroundClick,\n  ...modalProps\n}: PropsForTranslation<LanguageModalTranslation, PropsWithChildren<LanguageModalProps>>) => {\n  const { language, setLanguage } = useLanguage()\n  const translation = useTranslation(defaultConfirmDialogTranslation, overwriteTranslation)\n\n  return (\n    <Modal\n      titleText={translation.message}\n      onBackgroundClick={(eventData) => {\n        onDone()\n\n        if (onBackgroundClick) {\n          onBackgroundClick(eventData)\n        }\n      }}\n      {...modalProps}\n    >\n      <div className=\"w-[320px]\">\n        <Select\n            className=\"mt-2\"\n            value={language}\n            options={Object.entries(languageDetails).map(([tag, name]) => ({ label: name, value: tag }))}\n            onChange={(language: string) => setLanguage(language as Languages)}\n          />\n          <div className=\"row mt-3 gap-x-4 justify-end\">\n            <SolidButton autoFocus color=\"positive\" onClick={onDone}>\n              {translation.done}\n            </SolidButton>\n          </div>\n      </div>\n    </Modal>\n  )\n}\n","import { Check } from 'lucide-react'\nimport { noop } from '../../util/noop'\nimport { Checkbox } from '../user-input/Checkbox'\nimport type { Languages } from '../../hooks/useLanguage'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype CheckboxPropertyTranslation = {\n  yes: string,\n  no: string,\n}\n\nconst defaultCheckboxPropertyTranslation: Record<Languages, CheckboxPropertyTranslation> = {\n  en: {\n    yes: 'Yes',\n    no: 'No'\n  },\n  de: {\n    yes: 'Ja',\n    no: 'Nein'\n  }\n}\n\nexport type CheckboxPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue' | 'onRemove'> & {\n  value?: boolean,\n  onChange?: (value: boolean) => void,\n}\n\n/**\n * An Input for a boolen properties\n */\nexport const CheckboxProperty = ({\n                                   overwriteTranslation,\n                                   value,\n                                   onChange = noop,\n                                   readOnly,\n                                   ...baseProps\n                                 }: PropsForTranslation<CheckboxPropertyTranslation, CheckboxPropertyProps>) => {\n  const translation = useTranslation(defaultCheckboxPropertyTranslation, overwriteTranslation)\n\n  return (\n    <PropertyBase\n      {...baseProps}\n      hasValue={true}\n      readOnly={readOnly}\n      icon={<Check size={16}/>}\n      input={() => (\n        <div className=\"row py-2 px-4 items-center\">\n          <Checkbox\n            // TODO make bigger as in #904\n            checked={value ?? true}\n            disabled={readOnly}\n            onChange={onChange}\n            label={{ name: `${translation.yes}/${translation.no}`, labelType: 'labelMedium' }}\n          />\n        </div>\n      )}\n    />\n  )\n}\n","import type { ReactNode } from 'react'\nimport { AlertTriangle } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Languages } from '../../hooks/useLanguage'\nimport { TextButton } from '../Button'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\n\ntype PropertyBaseTranslation = {\n  remove: string,\n}\n\nconst defaultPropertyBaseTranslation: Record<Languages, PropertyBaseTranslation> = {\n  en: {\n    remove: 'Remove'\n  },\n  de: {\n    remove: 'Entfernen'\n  }\n}\n\nexport type PropertyBaseProps = {\n  name: string,\n  input: (props: { softRequired: boolean, hasValue: boolean }) => ReactNode,\n  onRemove?: () => void,\n  hasValue: boolean,\n  softRequired?: boolean,\n  readOnly?: boolean,\n  icon?: ReactNode,\n  className?: string,\n}\n\n/**\n * A component for showing a properties with uniform styling\n */\nexport const PropertyBase = ({\n  overwriteTranslation,\n  name,\n  input,\n  softRequired = false,\n  hasValue,\n  icon,\n  readOnly,\n  onRemove,\n  className = '',\n}: PropsForTranslation<PropertyBaseTranslation, PropertyBaseProps>) => {\n  const translation = useTranslation(defaultPropertyBaseTranslation, overwriteTranslation)\n  const requiredAndNoValue = softRequired && !hasValue\n  return (\n    <div className={clsx('row gap-x-0 group', className)}>\n      <div\n        className={\n          clsx('row gap-x-2 !w-[200px] px-4 py-2 items-center rounded-l-xl border-2 border-r-0', {\n            'bg-gray-100 text-black group-hover:border-primary border-gray-400': !requiredAndNoValue,\n            'bg-warning text-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n          }, className)}\n      >\n        {icon}\n        {name}\n      </div>\n      <div className={\n        clsx('row grow justify-between items-center rounded-r-xl border-2 border-l-0', {\n          'bg-white group-hover:border-primary border-gray-400': !requiredAndNoValue,\n          'bg-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n        }, className)}\n      >\n        {input({ softRequired, hasValue })}\n        {requiredAndNoValue && (\n          <div className=\"text-warning pr-4\"><AlertTriangle size={24}/></div>\n        )}\n        {onRemove && (\n          <TextButton\n            onClick={onRemove}\n            color=\"negative\"\n            className={clsx('pr-4 items-center', { '!text-transparent': !hasValue || readOnly })}\n            disabled={!hasValue || readOnly}\n          >\n            {translation.remove}\n          </TextButton>\n        )}\n      </div>\n    </div>\n  )\n}\n","import { CalendarDays } from 'lucide-react'\nimport clsx from 'clsx'\nimport { formatDate, formatDateTime } from '../../util/date'\nimport { noop } from '../../util/noop'\nimport { Input } from '../user-input/Input'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\nexport type DatePropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n  value?: Date,\n  onChange?: (date: Date) => void,\n  onEditComplete?: (value: Date) => void,\n  type?: 'dateTime' | 'date',\n}\n\n/**\n * An Input for date properties\n */\nexport const DateProperty = ({\n  value,\n  onChange = noop,\n  onEditComplete = noop,\n  readOnly,\n  type = 'dateTime',\n  ...baseProps\n}: DatePropertyProps) => {\n  const hasValue = !!value\n\n  const dateText = value ? (type === 'dateTime' ? formatDateTime(value) : formatDate(value)) : ''\n  return (\n    <PropertyBase\n      {...baseProps}\n      hasValue={hasValue}\n      icon={<CalendarDays size={16}/>}\n      input={({ softRequired }) => (\n        <div\n          className={clsx('row grow py-2 px-4 cursor-pointer', { 'text-warning': softRequired && !hasValue })}\n        >\n          <Input\n            className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !shadow-none !w-fit !rounded-none', { 'bg-surface-warning': softRequired && !hasValue })}\n            value={dateText}\n            type={type === 'dateTime' ? 'datetime-local' : 'date'}\n            readOnly={readOnly}\n            onChange={(value, event) => {\n              if (!event.target.value) {\n                event.preventDefault()\n                return\n              }\n              const dueDate = new Date(value)\n              onChange(dueDate)\n            }}\n            onEditCompleted={(value) => onEditComplete(new Date(value))}\n          />\n        </div>\n      )}\n    />\n  )\n}\n","import { List } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Languages } from '../../hooks/useLanguage'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { MultiSelectProps } from '../user-input/MultiSelect'\nimport { MultiSelect } from '../user-input/MultiSelect'\nimport { ChipList } from '../ChipList'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype MultiSelectPropertyTranslation = {\n  select: string,\n}\n\nconst defaultMultiSelectPropertyTranslation: Record<Languages, MultiSelectPropertyTranslation> = {\n  en: {\n    select: 'Select'\n  },\n  de: {\n    select: 'Auswählen'\n  }\n}\n\nexport type MultiSelectPropertyProps<T> =\n  Omit<PropertyBaseProps & MultiSelectProps<T>, 'icon' | 'input' | 'hasValue' | 'className' | 'disabled' | 'label' | 'triggerClassName'>\n\n/**\n * An Input for MultiSelect properties\n */\nexport const MultiSelectProperty = <T, >({\n  overwriteTranslation,\n  options,\n  name,\n  readOnly = false,\n  softRequired,\n  onRemove,\n  ...multiSelectProps\n}: PropsForTranslation<MultiSelectPropertyTranslation, MultiSelectPropertyProps<T>>) => {\n  const translation = useTranslation(defaultMultiSelectPropertyTranslation, overwriteTranslation)\n  const hasValue = options.some(value => value.selected)\n  let triggerClassName: string\n  if (softRequired && !hasValue) {\n    triggerClassName = 'border-warning hover:brightness-90'\n  }\n\n  return (\n    <PropertyBase\n      name={name}\n      onRemove={onRemove}\n      readOnly={readOnly}\n      softRequired={softRequired}\n      hasValue={hasValue}\n      icon={<List size={16}/>}\n      input={({ softRequired }) => (\n        <div\n          className={clsx('row grow py-2 px-4 cursor-pointer', { 'text-warning': softRequired && !hasValue })}\n        >\n          <MultiSelect\n            {...multiSelectProps}\n            className={clsx('w-full', { 'bg-surface-warning': softRequired && !hasValue })}\n            triggerClassName={triggerClassName}\n            selectedDisplay={({ items }) => {\n              const selected = items.filter(value => value.selected)\n              if (selected.length === 0) {\n                return (<span>Select</span>)\n              }\n              return (\n                <ChipList\n                  list={selected.map(value => ({ children: value.label }))}\n                />\n              )\n            }}\n            options={options}\n            disabled={readOnly}\n            hintText={`${translation.select}...`}\n          />\n        </div>\n      )}\n    />\n  )\n}\n","import type { ReactNode } from 'react'\nimport { useState } from 'react'\nimport { Search } from 'lucide-react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport type { Languages } from '../../hooks/useLanguage'\nimport { MultiSearchWithMapping } from '../../util/simpleSearch'\nimport clsx from 'clsx'\nimport { Menu, MenuItem } from './Menu'\nimport { Input } from './Input'\nimport { Checkbox } from './Checkbox'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\ntype MultiSelectTranslation = {\n  select: string,\n  search: string,\n  selected: string,\n}\n\nconst defaultMultiSelectTranslation: Record<Languages, MultiSelectTranslation> = {\n  en: {\n    select: 'Select',\n    search: 'Search',\n    selected: 'selected'\n  },\n  de: {\n    select: 'Auswählen',\n    search: 'Suche',\n    selected: 'ausgewählt'\n  }\n}\n\n// TODO maybe add custom item builder here\nexport type MultiSelectOption<T> = {\n  label: string,\n  value: T,\n  selected: boolean,\n  disabled?: boolean,\n  className?: string,\n}\n\nexport type SearchProps<T> = {\n  initialSearch?: string,\n  searchMapping: (value: MultiSelectOption<T>) => string[],\n}\n\nexport type MultiSelectProps<T> = {\n  options: MultiSelectOption<T>[],\n  onChange: (options: MultiSelectOption<T>[]) => void,\n  search?: SearchProps<T>,\n  disabled?: boolean,\n  selectedDisplay?: (props: {\n    items: MultiSelectOption<T>[],\n    disabled: boolean,\n  }) => ReactNode,\n  label?: LabelProps,\n  hintText?: string,\n  showDisabledOptions?: boolean,\n  className?: string,\n  triggerClassName?: string,\n}\n\n/**\n * A Component for multi selection\n */\nexport const MultiSelect = <T, >({\n                                   overwriteTranslation,\n                                   options,\n                                   onChange,\n                                   search,\n                                   disabled = false,\n                                   selectedDisplay,\n                                   label,\n                                   hintText,\n                                   showDisabledOptions = true,\n                                   className = '',\n                                   triggerClassName = '',\n                                 }: PropsForTranslation<MultiSelectTranslation, MultiSelectProps<T>>) => {\n  const translation = useTranslation(defaultMultiSelectTranslation, overwriteTranslation)\n  const [searchText, setSearchText] = useState<string>(search?.initialSearch ?? '')\n  let filteredOptions: MultiSelectOption<T>[] = options\n  const enableSearch = !!search\n  if (enableSearch && !!searchText) {\n    filteredOptions = MultiSearchWithMapping<MultiSelectOption<T>>(\n      searchText,\n      filteredOptions,\n      value => search.searchMapping(value)\n    )\n  }\n  if (!showDisabledOptions) {\n    filteredOptions = filteredOptions.filter(value => !value.disabled)\n  }\n\n  const selectedItems = options.filter(value => value.selected)\n  const menuButtonText = selectedItems.length === 0 ?\n    hintText ?? translation.select\n    : <span>{`${selectedItems.length} ${translation.selected}`}</span>\n\n  const borderColor = 'border-menu-border'\n\n  return (\n    <div className={clsx(className)}>\n      {label && (\n        <Label {...label} htmlFor={label.name} className={clsx(' mb-1', label.className)}\n               labelType={label.labelType ?? 'labelBig'}/>\n      )}\n      <Menu<HTMLDivElement>\n        alignment=\"t_\"\n        trigger={(onClick, ref) => (\n          <div ref={ref} onClick={disabled ? undefined : onClick}\n               className={clsx(borderColor, 'bg-menu-background text-menu-text inline-w-full justify-between items-center rounded-lg border-2 px-4 py-2 font-medium',\n                 {\n                   'hover:brightness-90 hover:border-primary cursor-pointer': !disabled,\n                   'bg-disabled-background text-disabled cursor-not-allowed': disabled\n                 },\n                 triggerClassName)}\n          >\n            {selectedDisplay ? selectedDisplay({ items: options, disabled }) : menuButtonText}\n          </div>\n        )}\n        menuClassName={clsx(\n          '!rounded-lg !shadow-lg !max-h-[500px] !min-w-[400px] !max-w-[70vh] !overflow-y-auto !border !border-2', borderColor,\n          { '!py-0': !enableSearch, '!pb-0': enableSearch }\n        )}\n      >\n        {enableSearch && (\n          <div key=\"selectSearch\" className=\"row gap-x-2 items-center px-2 py-2\">\n            <Input autoFocus={true} value={searchText} onChange={setSearchText}/>\n            <Search/>\n          </div>\n        )}\n        {filteredOptions.map((option, index) => (\n          <MenuItem key={`item${index}`} className={clsx({\n            'cursor-not-allowed !bg-disabled-background !text-disabled-text hover:brightness-100': !!option.disabled,\n            'cursor-pointer': !option.disabled,\n          })}\n          >\n            <div\n              className={clsx('overflow-hidden whitespace-nowrap text-ellipsis row items-center gap-x-2', option.className)}\n              onClick={() => {\n                if (!option.disabled) {\n                  onChange(options.map(value => value.value === option.value ? ({\n                    ...option,\n                    selected: !value.selected\n                  }) : value))\n                }\n              }}\n            >\n              <Checkbox checked={option.selected} disabled={option.disabled} size=\"small\"/>\n              {option.label}\n            </div>\n          </MenuItem>\n        ))}\n      </Menu>\n    </div>\n  )\n}\n","import { useRef, type PropsWithChildren, type ReactNode, type RefObject } from 'react'\nimport clsx from 'clsx'\nimport { useOutsideClick } from '../../hooks/useOutsideClick'\nimport { useHoverState } from '../../hooks/useHoverState'\n\ntype MenuProps<T> = PropsWithChildren<{\n  trigger: (onClick: () => void, ref: RefObject<T>) => ReactNode,\n  /**\n   * @default 'tl'\n   */\n  alignment?: 'tl' | 'tr' | 'bl' | 'br' | '_l' | '_r' | 't_' | 'b_',\n  showOnHover?: boolean,\n  menuClassName?: string,\n}>\n\nexport type MenuItemProps = {\n  onClick?: () => void,\n  alignment?: 'left' | 'right',\n  className?: string,\n}\nconst MenuItem = ({\n  children,\n  onClick,\n  alignment = 'left',\n  className\n}: PropsWithChildren<MenuItemProps>) => (\n  <div\n    className={clsx('block px-3 py-1 bg-menu-background text-menu-text hover:brightness-90', {\n      'text-right': alignment === 'right',\n      'text-left': alignment === 'left',\n    }, className)}\n    onClick={onClick}\n  >\n    {children}\n  </div>\n)\n\n// TODO: it is quite annoying that the type for the ref has to be specified manually, is there some solution around this?\n/**\n * A Menu Component to allow the user to see different functions\n */\nconst Menu = <T extends HTMLElement>({\n  trigger,\n  children,\n  alignment = 'tl',\n  showOnHover = false,\n  menuClassName = '',\n}: MenuProps<T>) => {\n  const { isHovered: isOpen, setIsHovered: setIsOpen, handlers } = useHoverState({ isDisabled: !showOnHover })\n  const triggerRef = useRef<T>(null)\n  const menuRef = useRef<HTMLDivElement>(null)\n  useOutsideClick([triggerRef, menuRef], () => setIsOpen(false))\n\n  return (\n    <div\n      className=\"relative\"\n      {...handlers}\n    >\n      {trigger(() => setIsOpen(!isOpen), triggerRef)}\n      {isOpen ? (\n        <div ref={menuRef} onClick={e => e.stopPropagation()}\n             className={clsx('absolute top-full mt-1 py-2 w-60 rounded-lg bg-menu-background text-menu-text ring-1 ring-slate-900/5 text-sm leading-6 font-semibold shadow-md z-[1]', {\n               '    top-[8px]': alignment[0] === 't',\n               ' bottom-[8px]': alignment[0] === 'b',\n               '  left-[-8px]': alignment[1] === 'l',\n               ' right-[-8px]': alignment[1] === 'r',\n             }, menuClassName)}>\n          {children}\n        </div>\n      ) : null}\n    </div>\n  )\n}\n\nexport { Menu, MenuItem }\n","import { useEffect } from 'react'\nimport type { RefObject } from 'react'\n\nexport const useOutsideClick = <Ts extends RefObject<HTMLElement>[]>(refs: Ts, handler: () => void) => {\n  useEffect(() => {\n    const listener = (event: MouseEvent | TouchEvent) => {\n      // returning means not \"not clicking outside\"\n\n      // if no target exists, return\n      if (event.target === null) return\n      // if the target is a ref's element or descendent thereof, return\n      if (refs.some((ref) => !ref.current || ref.current.contains(event.target as Node))) {\n        return\n      }\n\n      handler()\n    }\n    document.addEventListener('mousedown', listener)\n    document.addEventListener('touchstart', listener)\n    return () => {\n      document.removeEventListener('mousedown', listener)\n      document.removeEventListener('touchstart', listener)\n    }\n  }, [refs, handler])\n}\n","import { Binary } from 'lucide-react'\nimport clsx from 'clsx'\nimport { noop } from '../../util/noop'\nimport { Input } from '../user-input/Input'\nimport type { Languages } from '../../hooks/useLanguage'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype NumberPropertyTranslation = {\n  value: string,\n}\n\nconst defaultNumberPropertyTranslation: Record<Languages, NumberPropertyTranslation> = {\n  en: {\n    value: 'Value'\n  },\n  de: {\n    value: 'Wert'\n  }\n}\n\nexport type NumberPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n  value?: number,\n  suffix?: string,\n  onChange?: (value: number) => void,\n  onEditComplete?: (value: number) => void,\n}\n\n/**\n * An Input for number properties\n */\nexport const NumberProperty = ({\n  overwriteTranslation,\n  value,\n  onChange = noop,\n  onRemove = noop,\n  onEditComplete = noop,\n  readOnly,\n  suffix,\n  ...baseProps\n}: PropsForTranslation<NumberPropertyTranslation, NumberPropertyProps>) => {\n  const translation = useTranslation(defaultNumberPropertyTranslation, overwriteTranslation)\n  const hasValue = value !== undefined\n\n  return (\n    <PropertyBase\n      {...baseProps}\n      onRemove={onRemove}\n      hasValue={hasValue}\n      icon={<Binary size={16}/>}\n      input={({ softRequired }) => (\n        <div\n          className={clsx('row grow py-2 px-4 cursor-pointer', { 'text-warning': softRequired && !hasValue })}\n        >\n          <Input\n            expanded={false}\n            className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !w-fit !shadow-none !rounded-none', { 'bg-surface-warning placeholder-warning': softRequired && !hasValue })}\n            value={value?.toString() ?? ''}\n            type=\"number\"\n            readOnly={readOnly}\n            placeholder={`${translation.value}...`}\n            onChange={(value) => {\n              const numberValue = parseFloat(value)\n              if (isNaN(numberValue)) {\n                onRemove()\n              } else {\n                onChange(numberValue)\n              }\n            }}\n            onEditCompleted={(value) => {\n              const numberValue = parseFloat(value)\n              if (isNaN(numberValue)) {\n                onRemove()\n              } else {\n                onEditComplete(numberValue)\n              }\n            }}\n          />\n          {suffix && <span className={clsx('ml-1', { 'bg-surface-warning': softRequired && !hasValue })}>{suffix}</span>}\n        </div>\n      )}\n    />\n  )\n}\n","import { List } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Languages } from '../../hooks/useLanguage'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { SearchableSelectProps } from '../user-input/SearchableSelect'\nimport { SearchableSelect } from '../user-input/SearchableSelect'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype SingleSelectPropertyTranslation = {\n  select: string,\n}\n\nconst defaultSingleSelectPropertyTranslation: Record<Languages, SingleSelectPropertyTranslation> = {\n  en: {\n    select: 'Select'\n  },\n  de: {\n    select: 'Auswählen'\n  }\n}\n\nexport type SingleSelectPropertyProps<T> =\n  Omit<PropertyBaseProps & SearchableSelectProps<T>, 'icon' | 'input' | 'hasValue' | 'className' | 'disabled' | 'label' | 'labelClassName' | 'additionalItems'>\n\n/**\n * An Input for SingleSelect properties\n */\nexport const SingleSelectProperty = <T, >({\n  overwriteTranslation,\n  value,\n  options,\n  name,\n  readOnly = false,\n  softRequired,\n  onRemove,\n  ...multiSelectProps\n}: PropsForTranslation<SingleSelectPropertyTranslation, SingleSelectPropertyProps<T>>) => {\n  const translation = useTranslation(defaultSingleSelectPropertyTranslation, overwriteTranslation)\n  const hasValue = value !== undefined\n\n  return (\n    <PropertyBase\n      name={name}\n      onRemove={onRemove}\n      readOnly={readOnly}\n      softRequired={softRequired}\n      hasValue={hasValue}\n      icon={<List size={16}/>}\n      input={({ softRequired }) => (\n        <div\n          className={clsx('row grow py-2 px-4 cursor-pointer', { 'text-warning': softRequired && !hasValue })}\n        >\n          <SearchableSelect\n            {...multiSelectProps}\n            value={value}\n            options={options}\n            isDisabled={readOnly}\n            className={clsx('w-full', { 'bg-surface-warning': softRequired && !hasValue })}\n            hintText={`${translation.select}...`}\n          />\n        </div>\n      )}\n    />\n  )\n}\n","import { useState } from 'react'\nimport { Search } from 'lucide-react'\nimport { MultiSearchWithMapping } from '../../util/simpleSearch'\nimport type { SelectOption, SelectProps } from './Select'\nimport { Select } from './Select'\nimport { Input } from './Input'\n\nexport type SearchableSelectProps<T> = SelectProps<T> & {\n  searchMapping: (value: SelectOption<T>) => string[],\n}\n\n/**\n * A Select where items can be searched\n */\nexport const SearchableSelect = <T, >({\n  value,\n  options,\n  searchMapping,\n  ...selectProps\n}: SearchableSelectProps<T>) => {\n  const [search, setSearch] = useState<string>('')\n  const filteredOptions = MultiSearchWithMapping(search, options, searchMapping)\n  return (\n    <Select\n      value={value}\n      options={filteredOptions}\n      additionalItems={[(\n        <div key=\"selectSearch\" className=\"row gap-x-2 items-center\">\n          <Input autoFocus={true} value={search} onChange={setSearch} />\n          <Search/>\n        </div>\n      )]}\n      {...selectProps}\n    />\n  )\n}\n","import { Text } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Languages } from '../../hooks/useLanguage'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { Textarea } from '../user-input/Textarea'\nimport { noop } from '../../util/noop'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype TextPropertyTranslation = {\n  value: string,\n}\n\nconst defaultTextPropertyTranslation: Record<Languages, TextPropertyTranslation> = {\n  en: {\n    value: 'Text'\n  },\n  de: {\n    value: 'Text'\n  }\n}\n\nexport type TextPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n  value?: string,\n  onChange?: (value: string) => void,\n  onEditComplete?: (value: string) => void,\n}\n\n/**\n * An Input for Text properties\n */\nexport const TextProperty = ({\n  overwriteTranslation,\n  value,\n  readOnly,\n  onChange = noop,\n  onRemove = noop,\n  onEditComplete = noop,\n  ...baseProps\n}: PropsForTranslation<TextPropertyTranslation, TextPropertyProps>) => {\n  const translation = useTranslation(defaultTextPropertyTranslation, overwriteTranslation)\n  const hasValue = value !== undefined\n\n  return (\n    <PropertyBase\n      {...baseProps}\n      onRemove={onRemove}\n      hasValue={hasValue}\n      icon={<Text size={16} />}\n      input={({ softRequired }) => (\n        <div\n          className={clsx('row grow pt-2 pb-1 px-4 cursor-pointer', { 'text-warning': softRequired && !hasValue })}\n        >\n          <Textarea\n            className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !shadow-none !rounded-none', { 'bg-surface-warning placeholder-warning': softRequired && !hasValue })}\n            rows={5}\n            defaultStyle={false}\n            value={value ?? ''}\n            readOnly={readOnly}\n            placeholder={`${translation.value}...`}\n            onChange={(value) => {\n              if (!value) {\n                onRemove()\n              } else {\n                onChange(value)\n              }\n            }}\n            onEditCompleted={(value) => {\n              if (!value) {\n                onRemove()\n              } else {\n                onEditComplete(value)\n              }\n            }}\n          />\n        </div>\n      )}\n    />\n  )\n}\n","import type { TextareaHTMLAttributes } from 'react'\nimport { useState } from 'react'\nimport clsx from 'clsx'\nimport { useSaveDelay } from '../../hooks/useSaveDelay'\nimport { noop } from '../../util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\nexport type TextareaProps = {\n  /** Outside the area */\n  label?: Omit<LabelProps, 'id'>,\n  /** Inside the area */\n  headline?: string,\n  id?: string,\n  resizable?: boolean,\n  onChange?: (text: string) => void,\n  disclaimer?: string,\n  onEditCompleted?: (text: string) => void,\n  defaultStyle?: boolean,\n} & Omit<TextareaHTMLAttributes<Element>, 'id' | 'onChange'>\n\n/**\n * A Textarea component for inputting longer texts\n *\n * The State is managed by the parent\n */\nexport const Textarea = ({\n  label,\n  headline,\n  id,\n  resizable = false,\n  onChange = noop,\n  disclaimer,\n  onBlur = noop,\n  onEditCompleted = noop,\n  defaultStyle = true,\n  className,\n  ...props\n}: TextareaProps) => {\n  const [hasFocus, setHasFocus] = useState(false)\n  const { restartTimer, clearUpdateTimer } = useSaveDelay(() => undefined, 3000)\n\n  const onEditCompletedWrapper = (text: string) => {\n    onEditCompleted(text)\n    clearUpdateTimer()\n  }\n\n  return (\n    <div className=\"w-full\">\n      {label && (<Label {...label} htmlFor={id} className={clsx('mb-1', label.className)} labelType={label.labelType ?? 'labelSmall'}/>)}\n      <div className={`${clsx(' bg-surface text-on-surface focus-within:border-primary relative', { 'shadow border-2 border-gray-300 hover:border-primary rounded-lg': defaultStyle })}`}>\n        {headline && (\n          <span className=\"mx-3 mt-3 block text-gray-700 font-bold\">\n            {headline}\n          </span>\n        )}\n        <textarea\n          id={id}\n          className={clsx('pt-0 px-3 border-transparent focus:border-transparent focus:ring-0 appearance-none border w-full leading-tight focus:outline-none', { 'resize-none': !resizable, 'h-32': defaultStyle, 'mt-3': !headline }, className)}\n          onChange={(event) => {\n            const value = event.target.value\n            restartTimer(() => {\n              onEditCompletedWrapper(value)\n            })\n            onChange(value)\n          }}\n          onFocus={() => {\n            setHasFocus(true)\n          }}\n          onBlur={(event) => {\n            onBlur(event)\n            onEditCompletedWrapper(event.target.value)\n            setHasFocus(false)\n          }}\n          {...props}\n        >\n      </textarea>\n      </div>\n      {(hasFocus && disclaimer) && (\n        <label className=\"text-negative\">\n          {disclaimer}\n        </label>\n      )}\n    </div>\n  )\n}\n","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { Languages } from '../../hooks/useLanguage'\nimport type { PropsForTranslation } from '../../hooks/useTranslation'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { noop } from '../../util/noop'\nimport { addDuration, subtractDuration } from '../../util/date'\nimport { SolidButton } from '../Button'\nimport type { TimePickerProps } from '../date/TimePicker'\nimport { TimePicker } from '../date/TimePicker'\nimport type { DatePickerProps } from '../date/DatePicker'\nimport { DatePicker } from '../date/DatePicker'\n\ntype TimeTranslation = {\n  clear: string,\n  change: string,\n  year: string,\n  month: string,\n  day: string,\n  january: string,\n  february: string,\n  march: string,\n  april: string,\n  may: string,\n  june: string,\n  july: string,\n  august: string,\n  september: string,\n  october: string,\n  november: string,\n  december: string,\n}\n\nconst defaultTimeTranslation: Record<Languages, TimeTranslation> = {\n  en: {\n    clear: 'Clear',\n    change: 'Change',\n    year: 'Year',\n    month: 'Month',\n    day: 'Day',\n    january: 'January',\n    february: 'Febuary',\n    march: 'March',\n    april: 'April',\n    may: 'May',\n    june: 'June',\n    july: 'July',\n    august: 'August',\n    september: 'September',\n    october: 'October',\n    november: 'November',\n    december: 'December',\n  },\n  de: {\n    clear: 'Entfernen',\n    change: 'Ändern',\n    year: 'Jahr',\n    month: 'Monat',\n    day: 'Tag',\n    january: 'Januar',\n    february: 'Febuar',\n    march: 'März',\n    april: 'April',\n    may: 'Mai',\n    june: 'Juni',\n    july: 'Juli',\n    august: 'August',\n    september: 'September',\n    october: 'October',\n    november: 'November',\n    december: 'December',\n  }\n}\n\nexport type DateTimePickerMode = 'date' | 'time' | 'dateTime'\n\nexport type DateTimePickerProps = {\n  mode?: DateTimePickerMode,\n  value?: Date,\n  start?: Date,\n  end?: Date,\n  onChange?: (date: Date) => void,\n  onFinish?: (date: Date) => void,\n  onRemove?: () => void,\n  datePickerProps?: Omit<DatePickerProps, 'onChange' | 'value' | 'start' | 'end'>,\n  timePickerProps?: Omit<TimePickerProps, 'onChange' | 'time' | 'maxHeight'>,\n}\n\n/**\n * A Component for picking a Date and Time\n */\nexport const DateTimePicker = ({\n  overwriteTranslation,\n  value = new Date(),\n  start = subtractDuration(new Date(), { years: 50 }),\n  end = addDuration(new Date(), { years: 50 }),\n  mode = 'dateTime',\n  onFinish = noop,\n  onChange = noop,\n  onRemove = noop,\n  timePickerProps,\n  datePickerProps,\n}: PropsForTranslation<TimeTranslation, DateTimePickerProps>) => {\n  const translation = useTranslation(defaultTimeTranslation, overwriteTranslation)\n\n  const useDate = mode === 'dateTime' || mode === 'date'\n  const useTime = mode === 'dateTime' || mode === 'time'\n\n  let dateDisplay: ReactNode\n  let timeDisplay: ReactNode\n\n  if (useDate) {\n    dateDisplay = (\n      <DatePicker\n        {...datePickerProps}\n        className=\"min-w-[320px] min-h-[250px]\"\n        yearMonthPickerProps={{ maxHeight: 218 }}\n        value={value}\n        start={start}\n        end={end}\n        onChange={onChange}\n      />\n    )\n  }\n  if (useTime) {\n    timeDisplay = (\n      <TimePicker\n        {...timePickerProps}\n        className={clsx('h-full', { 'justify-between w-full': mode === 'time' })}\n        maxHeight={250}\n        time={value}\n        onChange={onChange}\n      />\n    )\n  }\n\n  return (\n    <div className=\"col w-fit\">\n      <div className=\"row gap-x-4\">\n        {dateDisplay}\n        {timeDisplay}\n      </div>\n      <div className=\"row justify-end\">\n        <div className=\"row gap-x-2 mt-1\">\n          <SolidButton size=\"medium\" color=\"negative\" onClick={onRemove}>{translation.clear}</SolidButton>\n          <SolidButton\n            size=\"medium\"\n            onClick={() => onFinish(value)}\n          >\n            {translation.change}\n          </SolidButton>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { noop } from '../../util/noop'\nimport { getNeighbours, range } from '../../util/array'\nimport { clamp } from '../../util/math'\n\nexport type ScrollPickerProps<T> = {\n  options: T[],\n  mapping: (value: T) => string,\n  selected?: T,\n  onChange?: (value: T) => void,\n  disabled?: boolean,\n}\n\ntype AnimationData<T> = {\n  /** The index we scroll to */\n  targetIndex: number,\n  /** The index we are currently showing centered */\n  currentIndex: number,\n  items: T[],\n  /** From -0.5 to 0.5 */\n  transition: number,\n  velocity: number,\n  animationVelocity: number,\n  lastTimeStamp?: number,\n  lastScrollTimeStamp?: number,\n}\n\nconst up = 1\nconst down = -1\ntype Direction = 1 | -1\n\n/**\n * A component for picking an option by scrolling\n */\nexport const ScrollPicker = <T, >({\n                                    options,\n                                    mapping,\n                                    selected,\n                                    onChange = noop,\n                                    disabled = false,\n                                  }: ScrollPickerProps<T>) => {\n  let selectedIndex = 0\n  if (selected && options.indexOf(selected) !== -1) {\n    selectedIndex = options.indexOf(selected)\n  }\n  const [{\n    currentIndex,\n    transition,\n    items,\n    lastTimeStamp\n  }, setAnimation] = useState<AnimationData<T>>({\n    targetIndex: selectedIndex,\n    currentIndex: disabled ? selectedIndex : 0,\n    velocity: 0,\n    animationVelocity: Math.floor(options.length / 2),\n    transition: 0,\n    items: options,\n  })\n\n  const itemsShownCount = 5\n  const shownItems = getNeighbours(range(0, items.length - 1), currentIndex).map(index => ({\n    name: mapping(items[index]!), index\n  }))\n\n  const itemHeight = 40\n  const distance = 8\n\n  const containerHeight = itemHeight * (itemsShownCount - 2) + distance * (itemsShownCount - 2 + 1)\n\n  const getDirection = useCallback((targetIndex: number, currentIndex: number, transition: number, length: number): Direction => {\n    if (targetIndex === currentIndex) {\n      return transition > 0 ? up : down\n    }\n    let distanceForward = targetIndex - currentIndex\n    if (distanceForward < 0) {\n      distanceForward += length\n    }\n    return distanceForward >= length / 2 ? down : up\n  }, [])\n\n  const animate = useCallback((timestamp: number, startTime: number | undefined) => {\n    setAnimation((prevState) => {\n      const {\n        targetIndex,\n        currentIndex,\n        transition,\n        animationVelocity,\n        velocity,\n        items,\n        lastScrollTimeStamp\n      } = prevState\n      if (disabled) {\n        return { ...prevState, currentIndex: targetIndex, velocity: 0, lastTimeStamp: timestamp }\n      }\n      if ((targetIndex === currentIndex && velocity === 0 && transition === 0) || !startTime) {\n        return { ...prevState, lastTimeStamp: timestamp }\n      }\n      const progress = (timestamp - startTime) / 1000 // to seconds\n      const direction = getDirection(targetIndex, currentIndex, transition, items.length)\n\n      let newVelocity = velocity\n      let usedVelocity\n      let newCurrentIndex = currentIndex\n      const isAutoScrolling = velocity === 0 && (!lastScrollTimeStamp || timestamp - lastScrollTimeStamp > 300)\n\n      const newLastScrollTimeStamp = velocity !== 0 ? timestamp : lastScrollTimeStamp\n\n      // manual scrolling\n      if (isAutoScrolling) {\n        usedVelocity = direction * animationVelocity\n      } else {\n        usedVelocity = velocity\n        newVelocity = velocity * 0.5 // drag loss\n        if (Math.abs(newVelocity) <= 0.05) {\n          newVelocity = 0\n        }\n      }\n\n      let newTransition = transition + usedVelocity * progress\n      const changeThreshold = 0.5\n\n      while (newTransition >= changeThreshold) {\n        if (newCurrentIndex === targetIndex && newTransition >= changeThreshold && isAutoScrolling) {\n          newTransition = 0\n          break\n        }\n        newCurrentIndex = (currentIndex + 1) % items.length\n        newTransition -= 1\n      }\n      if (newTransition >= changeThreshold) {\n        newTransition = 0\n      }\n      while (newTransition <= -changeThreshold) {\n        if (newCurrentIndex === targetIndex && newTransition <= -changeThreshold && isAutoScrolling) {\n          newTransition = 0\n          break\n        }\n        newCurrentIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1\n        newTransition += 1\n      }\n      let newTargetIndex = targetIndex\n      if (!isAutoScrolling) {\n        newTargetIndex = newCurrentIndex\n      }\n\n      if ((currentIndex !== newTargetIndex || newTargetIndex !== targetIndex) && newTargetIndex === newCurrentIndex) {\n        onChange(items[newCurrentIndex]!)\n      }\n      return {\n        targetIndex: newTargetIndex,\n        currentIndex: newCurrentIndex,\n        animationVelocity,\n        transition: newTransition,\n        velocity: newVelocity,\n        items,\n        lastTimeStamp: timestamp,\n        lastScrollTimeStamp: newLastScrollTimeStamp\n      }\n    })\n  }, [disabled, getDirection, onChange])\n\n  useEffect(() => {\n    // constant update\n    requestAnimationFrame((timestamp) => animate(timestamp, lastTimeStamp))\n  })\n\n  const opacity = (transition: number, index: number, itemsCount: number) => {\n    const max = 100\n    const min = 0\n    const distance = max - min\n\n    let opacityValue = min\n    const unitTransition = clamp((transition) / 0.5)\n    if (index === 1 || index === itemsCount - 2) {\n      if (index === 1 && transition > 0) {\n        opacityValue += Math.floor(unitTransition * distance)\n      }\n      if (index === itemsCount - 2 && transition < 0) {\n        opacityValue += Math.floor(unitTransition * distance)\n      }\n    } else {\n      opacityValue = max\n    }\n\n    // TODO this is not the right value for the bottom entry\n    return clamp(1- (opacityValue / max))\n  }\n\n  return (\n    <div\n      className=\"relative overflow-hidden\"\n      style={{ height: containerHeight }}\n      onWheel={event => {\n        if (event.deltaY !== 0) {\n          // TODO slower increase\n          setAnimation(({ velocity, ...animationData }) =>\n            ({ ...animationData, velocity: velocity + event.deltaY }))\n        }\n      }}\n    >\n      <div className=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 left-1/2\">\n        <div\n          className=\"absolute z-[1] top-1/2 -translate-y-1/2 -translate-x-1/2 left-1/2 w-full min-w-[40px] border border-y-2 border-x-0 border-[#00000033]\"\n          style={{ height: `${itemHeight}px` }}\n        />\n        <div\n          className=\"col select-none\"\n          style={{\n            transform: `translateY(${-transition * (distance + itemHeight)}px)`,\n            columnGap: `${distance}px`,\n          }}\n        >\n          {shownItems.map(({ name, index }, arrayIndex) => (\n            <div\n              key={index}\n              className={clsx(\n                `col items-center justify-center rounded-md`,\n                {\n                  'text-primary font-bold': currentIndex === index,\n                  'text-on-background': currentIndex === index,\n                  'cursor-pointer': !disabled,\n                  'cursor-not-allowed': disabled,\n                }\n              )}\n              style={{\n                opacity: currentIndex !== index ? opacity(transition, arrayIndex, shownItems.length) : undefined,\n                height: `${itemHeight}px`,\n                maxHeight: `${itemHeight}px`,\n              }}\n              onClick={() => !disabled && setAnimation(prevState => ({ ...prevState, targetIndex: index }))}\n            >\n              {name}\n            </div>\n          ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n","import type { HTMLInputTypeAttribute, InputHTMLAttributes } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { Pencil } from 'lucide-react'\nimport clsx from 'clsx'\nimport { useSaveDelay } from '../../hooks/useSaveDelay'\nimport { noop } from '../../util/noop'\n\ntype InputProps = {\n    /**\n     * The value\n     */\n    value: string,\n    /**\n     * @default 'text'\n     */\n    type?: HTMLInputTypeAttribute,\n    /**\n     * Callback for when the input's value changes\n     * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n     * That could be enforced through a union type but that seems a bit overkill\n     * @default noop\n     */\n    onChangeText?: (text: string) => void,\n    onEditCompleted?: (text: string) => void,\n    labelClassName?: string,\n    initialState?: 'editing' | 'display',\n    size?: number,\n    disclaimer?: string,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'label' | 'type' | 'crossOrigin'>\n\n/**\n * A Text input component for inputting text. It changes appearance upon entering the edit mode and switches\n * back to display mode on loss of focus or on enter\n *\n * The State is managed by the parent\n */\nexport const ToggleableInput = ({\n                                    type = 'text',\n                                    value,\n                                    onChange = noop,\n                                    onChangeText = noop,\n                                    onEditCompleted = noop,\n                                    labelClassName = '',\n                                    initialState = 'display',\n                                    size = 20,\n                                    disclaimer,\n                                    onBlur,\n                                    ...restProps\n                                }: InputProps) => {\n    const [isEditing, setIsEditing] = useState(initialState !== 'display')\n    const { restartTimer, clearUpdateTimer } = useSaveDelay(() => undefined, 3000)\n    const ref = useRef<HTMLInputElement>(null)\n\n    const onEditCompletedWrapper = (text: string) => {\n        onEditCompleted(text)\n        clearUpdateTimer()\n    }\n\n    useEffect(() => {\n        if (isEditing) {\n            ref.current?.focus()\n        }\n    }, [isEditing])\n\n    return (\n        <div>\n            <div\n                className=\"row items-center w-full gap-x-2 overflow-hidden\"\n                onClick={() => !isEditing ? setIsEditing(!isEditing) : undefined}\n            >\n                <div className={clsx('row overflow-hidden', { 'flex-1': isEditing })}>\n                    {isEditing ? (\n                        <input\n                            ref={ref}\n                            {...restProps}\n                            value={value}\n                            type={type}\n                            onChange={event => {\n                                const value = event.target.value\n                                restartTimer(() => {\n                                    onEditCompletedWrapper(value)\n                                })\n                                onChangeText(value)\n                                onChange(event)\n                            }}\n                            onBlur={(event) => {\n                                if (onBlur) {\n                                    onBlur(event)\n                                }\n                                onEditCompletedWrapper(value)\n                                setIsEditing(false)\n                            }}\n                            onKeyDown={event => {\n                                if (event.key === 'Enter') {\n                                    setIsEditing(false)\n                                    onEditCompletedWrapper(value)\n                                }\n                            }}\n                            className={clsx(labelClassName, `w-full border-none rounded-none ring-0 outline-0 shadow-transparent decoration-primary p-0 underline-offset-4`, {\n                                underline: isEditing\n                            })}\n                            onFocus={event => event.target.select()}\n                        />\n                    ) : (\n                        <span\n                            className={clsx(labelClassName, 'max-w-xs break-words overflow-hidden')}\n                        >\n                            {value}\n                        </span>\n                    )}\n                </div>\n                <Pencil\n                    className={clsx(`cursor-pointer`, { 'text-transparent': isEditing })}\n                    size={size}\n                    style={{ minWidth: `${size}px` }}\n                />\n            </div>\n            {(isEditing && disclaimer) && (\n                <label className=\"text-negative\">\n                    {disclaimer}\n                </label>\n            )}\n        </div>\n    )\n}\n\nexport const ToggleableInputUncontrolled = ({\n                                                value: initialValue,\n                                                onChangeText = noop,\n                                                ...restProps\n                                            }: InputProps) => {\n    const [value, setValue] = useState(initialValue)\n\n    useEffect(() => {\n        setValue(initialValue)\n    }, [initialValue])\n\n    return (\n        <ToggleableInput\n            value={value}\n            onChangeText={text => {\n                setValue(text)\n                onChangeText(text)\n            }}\n            {...restProps}\n        />\n    )\n}\n","import { useContext } from 'react'\nimport type { Dispatch, SetStateAction, PropsWithChildren } from 'react'\nimport { createContext, useState, useEffect } from 'react'\nimport type { Translation } from './useTranslation'\n\nexport type ThemeType = 'light' | 'dark'\n\nexport type ThemeTypeTranslation = Record<ThemeType, string>\nexport const defaultThemeTypeTranslation: Translation<ThemeTypeTranslation> = {\n  en: {\n    dark: 'Dark',\n    light: 'Light'\n  },\n  de: {\n    dark: 'Dunkel',\n    light: 'Hell'\n  }\n}\n\ntype ThemeContextType = {\n  theme: ThemeType,\n  setTheme: Dispatch<SetStateAction<ThemeType>>,\n}\n\nexport const ThemeContext = createContext<ThemeContextType>({\n  theme: 'light',\n  setTheme: (_: SetStateAction<ThemeType>) => {\n  },\n})\n\ntype ThemeProviderProps = {\n  initialTheme?: ThemeType,\n}\n\nexport const ThemeProvider = ({ children, initialTheme = 'light' }: PropsWithChildren<ThemeProviderProps>) => {\n  const [theme, setTheme] = useState<ThemeType>(initialTheme)\n\n  useEffect(() => {\n    if (theme !== initialTheme) {\n      console.warn('ThemeProvider initial state changed: Prefer using useTheme\\'s setTheme instead')\n      setTheme(initialTheme)\n    }\n  }, [initialTheme]) // eslint-disable-line react-hooks/exhaustive-deps\n\n  useEffect(() => {\n    document.documentElement.setAttribute('data-theme', theme)\n  }, [theme])\n\n  return (\n    <ThemeContext.Provider value={{ theme, setTheme }}>\n      {children}\n    </ThemeContext.Provider>\n  )\n}\n\n\nexport const useTheme = () => useContext(ThemeContext)\n","/**\n * A simple function that implements the builder pattern\n * @param value The value to update which gets return with the same reference\n * @param update The updates to apply on the object\n */\nexport const builder = <T>(value: T, update: (value: T) => void): T => {\n  update(value)\n  return value\n}\n","export const validateEmail = (email: string): boolean => {\n  return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(email)\n}\n","import { z } from 'zod'\nimport type { Languages } from '../hooks/useLanguage'\nimport { languages } from '../hooks/useLanguage'\n\nexport type News = {\n  title: string,\n  date: Date,\n  description: (string | URL)[],\n  externalResource?: URL,\n  keys: string[],\n}\n\nexport type LocalizedNews = Record<Languages, News[]>\n\nexport const newsSchema = z.object({\n  title: z.string(),\n  description: z.string(),\n  date: z.string(),\n  image: z.string().url().optional(),\n  externalResource: z.string().url().optional(),\n  keys: z.array(z.string())\n}).transform<News>((obj) => {\n  let description: (string | URL)[] = [obj.description]\n  if (obj.image) {\n    description = [new URL(obj.image), ...description]\n  }\n\n  return {\n    title: obj.title,\n    date: new Date(obj.date),\n    description,\n    externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,\n    keys: obj.keys\n  }\n})\n\nexport const newsListSchema = z.array(newsSchema)\n\nexport const localizedNewsSchema = z.record(z.enum(languages), newsListSchema)\n\nexport const filterNews = (localizedNews: News[], requiredKeys: string[]) => {\n  return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)))\n}\n"],"mappings":"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","names":["current","jsx","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","jsx","useEffect","useState","jsx","useState","useEffect","language","clsx","jsx","jsxs","useState","clsx","jsx","jsxs","clsx","clsx","jsx","jsxs","Image","clsx","jsx","jsxs","jsx","clsx","useState","ChevronDown","ChevronUp","clsx","jsx","jsxs","useEffect","useState","ChevronDown","ChevronUp","clsx","jsx","jsxs","useState","useEffect","clsx","ChevronUp","ChevronDown","useState","clsx","jsx","jsxs","jsx","useState","clsx","jsx","jsxs","clsx","jsx","clsx","jsx","jsxs","page","clsx","clsx","Image","Link","jsx","jsxs","Link","clsx","Image","jsx","jsxs","useCallback","useEffect","useState","clsx","jsx","jsxs","useState","useCallback","useEffect","useEffect","useState","clsx","useEffect","useState","forwardRef","clsx","useEffect","useState","jsx","jsx","jsxs","useEffect","clsx","value","useState","forwardRef","FormInput","jsx","jsxs","useState","useEffect","clsx","ChevronDown","ChevronUp","jsx","jsxs","ChevronUp","ChevronDown","ChevronLeft","ChevronRight","clsx","jsx","jsxs","ChevronLeft","ChevronRight","useEffect","useRef","useState","useState","Check","clsx","jsx","jsxs","checked","clsx","Check","useState","clsx","jsx","jsxs","useState","useRef","useEffect","useEffect","useState","Fragment","jsx","jsxs","clsx","jsx","jsxs","jsx","useEffect","useState","clsx","jsx","jsxs","jsx","jsxs","useEffect","useState","ChevronDown","date","clsx","useEffect","useRef","useState","Scrollbars","clsx","jsx","useRef","useEffect","clsx","Scrollbars","useState","clsx","useEffect","useState","jsx","jsxs","clsx","jsx","jsxs","useState","useEffect","clsx","ChevronDown","useEffect","useRef","useState","Scrollbars","clsx","jsx","jsxs","useRef","useEffect","Scrollbars","useState","Image","jsx","clsx","useCallback","useEffect","useMemo","useRef","useState","ChevronLeft","ChevronRight","Fragment","jsx","jsxs","useState","useRef","useMemo","useCallback","animationState","dragState","useEffect","clsx","ChevronLeft","ChevronRight","clsx","jsx","clsx","ChevronDown","ChevronUp","jsx","ChevronUp","ChevronDown","clsx","useContext","useEffect","clsx","createContext","useState","jsx","createContext","useState","jsx","jsxs","clsx","useContext","useEffect","jsx","jsxs","jsx","jsxs","jsx","ChevronDown","ChevronUp","clsx","Fragment","jsx","jsxs","value","clsx","ChevronUp","ChevronDown","jsx","jsxs","defaultConfirmDialogTranslation","language","Check","clsx","jsx","jsxs","clsx","jsx","Check","clsx","jsx","clsx","value","clsx","useState","Search","clsx","useRef","clsx","useEffect","jsx","jsxs","clsx","Menu","useRef","jsx","jsxs","useState","clsx","Menu","Search","jsx","softRequired","clsx","clsx","jsx","jsxs","clsx","value","List","clsx","useState","Search","jsx","jsxs","useState","Search","jsx","List","softRequired","clsx","clsx","useState","clsx","jsx","jsxs","useState","clsx","jsx","clsx","value","clsx","jsx","jsxs","clsx","useCallback","useEffect","useState","clsx","jsx","jsxs","useState","useCallback","currentIndex","transition","items","useEffect","distance","clsx","useEffect","useRef","useState","clsx","jsx","jsxs","useState","useRef","useEffect","clsx","value","useContext","createContext","useState","useEffect","jsx"]}