{"version":3,"sources":["../../../src/localization/LanguageProvider.tsx","../../../src/hooks/useLocalStorage.ts","../../../src/localization/util.ts","../../../src/localization/useTranslation.ts","../../../src/components/user-action/Button.tsx","../../../src/components/modals/ConfirmModal.tsx","../../../src/components/layout-and-navigation/Overlay.tsx","../../../src/hooks/useHoverState.ts","../../../src/components/user-action/Tooltip.tsx","../../../src/localization/defaults/form.ts","../../../src/components/modals/DiscardChangesModal.tsx"],"sourcesContent":["import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n  language: Language,\n  setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n  language: LanguageUtil.DEFAULT_LANGUAGE,\n  setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n  const { language } = useLanguage()\n  const mapping: Record<Language, string> = {\n    en: 'en-US',\n    de: 'de-DE'\n  }\n  return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n  initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n  const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n  const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n  useEffect(() => {\n    if (language !== initialLanguage && initialLanguage) {\n      console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n      setLanguage(initialLanguage)\n    }\n  }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n  useEffect(() => {\n    document.documentElement.setAttribute('lang', language)\n    setStoredLanguage(language)\n  }, [language])  // eslint-disable-line react-hooks/exhaustive-deps\n\n  useEffect(() => {\n    if (storedLanguage !== null) {\n      setLanguage(storedLanguage)\n      return\n    }\n\n    const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n    const matchingBrowserLanguage = window.navigator.languages\n      .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n      .filter(entry => entry !== undefined)\n\n    if (matchingBrowserLanguage.length === 0) return\n\n    const firstMatch = matchingBrowserLanguage[0] as Language\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}","'use client'\n\nimport type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\nimport { resolveSetState } from '../util/resolveSetState'\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(action => {\n    const newValue = resolveSetState(action, storedValue)\n    const storageService = new LocalStorageService()\n    storageService.set(key, newValue)\n\n    setStoredValue(newValue)\n  }, [storedValue, setStoredValue, key])\n\n  return [storedValue, setValue]\n}","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n  en: 'English',\n  de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n  languages,\n  DEFAULT_LANGUAGE,\n  languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\n/**\n * A type describing the pluralization of a word\n */\nexport type TranslationPlural = {\n  zero?: string,\n  one?: string,\n  two?: string,\n  few?: string,\n  many?: string,\n  other: string,\n}\n\n/**\n * The type describing all values of a translation\n */\nexport type TranslationType = Record<string, string | TranslationPlural>\n\n/**\n * The type of translations\n */\nexport type Translation<T extends TranslationType> = Record<Language, T>\n\ntype OverwriteTranslationType<T extends TranslationType> = {\n  language?: Language,\n  translation?: Translation<Partial<T>>,\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 TranslationType,\n  Props = unknown\n> = Props & {\n  overwriteTranslation?: OverwriteTranslationType<Translation>,\n}\n\ntype StringKeys<T> = Extract<keyof T, string>;\n\ntype TranslationFunctionOptions = {\n  replacements?: Record<string, string>,\n  count?: number,\n}\ntype TranslationFunction<T extends TranslationType> = (key: StringKeys<T>, options?: TranslationFunctionOptions) => string\n\nexport const TranslationPluralCount = {\n  zero: 0,\n  one: 1,\n  two: 2,\n  few: 3,\n  many: 11,\n  other: -1,\n}\n\n\nexport const useTranslation = <T extends TranslationType>(\n  translations: Translation<Partial<TranslationType>>[],\n  overwriteTranslation: OverwriteTranslationType<T> = {}\n): TranslationFunction<T> => {\n  const { language: languageProp, translation: overwrite } = overwriteTranslation\n  const { language: inferredLanguage } = useLanguage()\n  const usedLanguage = languageProp ?? inferredLanguage\n  const usedTranslations = [...translations]\n  if (overwrite) {\n    usedTranslations.push(overwrite)\n  }\n\n  return (key: StringKeys<T>, options?: TranslationFunctionOptions): string => {\n    const { count, replacements } = { ...{ count: 0, replacements: {} }, ...options }\n\n    try {\n      for (let i = translations.length - 1; i >= 0; i--) {\n        const translation = translations[i]\n        const localizedTranslation = translation[usedLanguage]\n        if (!localizedTranslation) {\n          continue\n        }\n        const value = localizedTranslation[key]\n        if(!value) {\n          continue\n        }\n\n        let forProcessing: string\n        if (typeof value !== 'string') {\n          if (count === TranslationPluralCount.zero && value?.zero) {\n            forProcessing = value.zero\n          } else if (count === TranslationPluralCount.one && value?.one) {\n            forProcessing = value.one\n          } else if (count === TranslationPluralCount.two && value?.two) {\n            forProcessing = value.two\n          } else if (TranslationPluralCount.few <= count && count < TranslationPluralCount.many && value?.few) {\n            forProcessing = value.few\n          } else if (count > TranslationPluralCount.many && value?.many) {\n            forProcessing = value.many\n          } else {\n            forProcessing = value.other\n          }\n        } else {\n          forProcessing = value\n        }\n        forProcessing = forProcessing.replace(/\\{\\{(\\w+)}}/g, (_, placeholder) => {\n          return replacements[placeholder] ?? `{{key:${placeholder}}}` // fallback if key is missing\n        })\n        return forProcessing\n      }\n    } catch (e) {\n      console.error(e)\n    }\n    return `{{${usedLanguage}:${key}}}`\n  }\n}","import type { ButtonHTMLAttributes, PropsWithChildren, ReactNode } from 'react'\nimport { forwardRef } from 'react'\nimport clsx from 'clsx'\n\n\nexport const ButtonColorUtil = {\n  solid: ['primary', 'secondary', 'tertiary', 'positive', 'warning', 'negative', 'neutral'] as const,\n  text: ['primary', 'negative', 'neutral'] as const,\n  outline: ['primary'] as const,\n}\n\nexport const IconButtonUtil = {\n  icon: [...ButtonColorUtil.solid, 'transparent'] as const,\n}\n\n\n/**\n * The allowed colors for the SolidButton and IconButton\n */\nexport type SolidButtonColor = typeof ButtonColorUtil.solid[number]\n/**\n * The allowed colors for the OutlineButton\n */\nexport type OutlineButtonColor = typeof ButtonColorUtil.outline[number]\n/**\n * The allowed colors for the TextButton\n */\nexport type TextButtonColor = typeof ButtonColorUtil.text[number]\n/**\n * The allowed colors for the IconButton\n */\nexport type IconButtonColor = typeof IconButtonUtil.icon[number]\n\n\n/**\n * The different sizes for a button\n */\ntype ButtonSizes = 'small' | 'medium' | 'large'\n\ntype IconButtonSize = 'tiny' | '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\nconst paddingMapping: Record<ButtonSizes, string> = {\n  small: 'btn-sm',\n  medium: 'btn-md',\n  large: 'btn-lg'\n}\n\nconst iconPaddingMapping: Record<IconButtonSize, string> = {\n  tiny: 'icon-btn-xs',\n  small: 'icon-btn-sm',\n  medium: 'icon-btn-md',\n  large: 'icon-btn-lg'\n}\n\nexport const ButtonUtil = {\n  paddingMapping,\n  iconPaddingMapping\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  coloredHoverBackground?: boolean,\n}\n\n/**\n * The shard properties between all button types\n */\nexport type IconButtonProps = PropsWithChildren<{\n  /**\n   * @default 'medium'\n   */\n  size?: IconButtonSize,\n  color?: IconButtonColor,\n}> & ButtonHTMLAttributes<Element>\n\n/**\n * A button with a solid background and different sizes\n */\nconst SolidButton = forwardRef<HTMLButtonElement, SolidButtonProps>(function SolidButton({\n                                                                                           children,\n                                                                                           color = 'primary',\n                                                                                           size = 'medium',\n                                                                                           startIcon,\n                                                                                           endIcon,\n                                                                                           onClick,\n                                                                                           className,\n                                                                                           ...restProps\n                                                                                         }, ref) {\n  const colorClasses = {\n    primary: 'not-disabled:bg-button-solid-primary-background not-disabled:text-button-solid-primary-text',\n    secondary: 'not-disabled:bg-button-solid-secondary-background not-disabled:text-button-solid-secondary-text',\n    tertiary: 'not-disabled:bg-button-solid-tertiary-background not-disabled:text-button-solid-tertiary-text',\n    positive: 'not-disabled:bg-button-solid-positive-background not-disabled:text-button-solid-positive-text',\n    warning: 'not-disabled:bg-button-solid-warning-background not-disabled:text-button-solid-warning-text',\n    negative: 'not-disabled:bg-button-solid-negative-background not-disabled:text-button-solid-negative-text',\n    neutral: 'not-disabled:bg-button-solid-neutral-background not-disabled:text-button-solid-neutral-text',\n  }[color]\n\n  const iconColorClasses = {\n    primary: 'not-group-disabled:text-button-solid-primary-icon',\n    secondary: 'not-group-disabled:text-button-solid-secondary-icon',\n    tertiary: 'not-group-disabled:text-button-solid-tertiary-icon',\n    positive: 'not-group-disabled:text-button-solid-positive-icon',\n    warning: 'not-group-disabled:text-button-solid-warning-icon',\n    negative: 'not-group-disabled:text-button-solid-negative-icon',\n    neutral: 'not-group-disabled:text-button-solid-neutral-icon',\n  }[color]\n\n  return (\n    <button\n      ref={ref}\n      onClick={onClick}\n      className={clsx(\n        'group font-semibold',\n        colorClasses,\n        'not-disabled:hover:brightness-90',\n        'disabled:text-disabled-text disabled:bg-disabled-background',\n        ButtonUtil.paddingMapping[size],\n        className\n      )}\n      {...restProps}\n    >\n      {startIcon && (\n        <span\n          className={clsx(\n            iconColorClasses,\n            'group-disabled:text-disabled-icon'\n          )}\n        >\n          {startIcon}\n        </span>\n      )}\n      {children}\n      {endIcon && (\n        <span\n          className={clsx(\n            iconColorClasses,\n            'group-disabled:text-disabled-icon'\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                         color = 'primary',\n                         size = 'medium',\n                         startIcon,\n                         endIcon,\n                         onClick,\n                         className,\n                         ...restProps\n                       }: OutlineButtonProps) => {\n  const colorClasses = {\n    primary: 'not-disabled:border-button-outline-primary-text not-disabled:text-button-outline-primary-text',\n  }[color]\n\n  const iconColorClasses = {\n    primary: 'not-group-disabled:text-button-outline-primary-icon',\n  }[color]\n  return (\n    <button\n      onClick={onClick}\n      className={clsx(\n        'group font-semibold bg-transparent border-2 ',\n        'not-disabled:hover:brightness-80',\n        colorClasses,\n        'disabled:text-disabled-text disabled:border-disabled-outline',\n        ButtonUtil.paddingMapping[size],\n        className\n      )}\n      {...restProps}\n    >\n      {startIcon && (\n        <span\n          className={clsx(\n            iconColorClasses,\n            'group-disabled:text-disabled-icon'\n          )}\n        >\n          {startIcon}\n        </span>\n      )}\n      {children}\n      {endIcon && (\n        <span\n          className={clsx(\n            iconColorClasses,\n            'group-disabled:text-disabled-icon'\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                      color = 'neutral',\n                      size = 'medium',\n                      startIcon,\n                      endIcon,\n                      onClick,\n                      coloredHoverBackground = true,\n                      className,\n                      ...restProps\n                    }: TextButtonProps) => {\n  const colorClasses = {\n    primary: 'not-disabled:bg-transparent not-disabled:text-button-text-primary-text',\n    negative: 'not-disabled:bg-transparent not-disabled:text-button-text-negative-text',\n    neutral: 'not-disabled:bg-transparent not-disabled:text-button-text-neutral-text',\n  }[color]\n\n  const backgroundColor = {\n    primary: 'not-disabled:hover:bg-button-text-primary-text/20',\n    negative: 'not-disabled:hover:bg-button-text-negative-text/20',\n    neutral: 'not-disabled:hover:bg-button-text-neutral-text/20',\n  }[color]\n\n  const iconColorClasses = {\n    primary: 'not-group-disabled:text-button-text-primary-icon',\n    negative: 'not-group-disabled:text-button-text-negative-icon',\n    neutral: 'not-group-disabled:text-button-text-neutral-icon',\n  }[color]\n\n  return (\n    <button\n      onClick={onClick}\n      className={clsx(\n        'group font-semibold',\n        'disabled:text-disabled-text',\n        colorClasses,\n        {\n          [backgroundColor]: coloredHoverBackground,\n          'not-disabled:hover:bg-button-text-hover-background': !coloredHoverBackground,\n        },\n        ButtonUtil.paddingMapping[size],\n        className\n      )}\n      {...restProps}\n    >\n      {startIcon && (\n        <span\n          className={clsx(\n            iconColorClasses,\n            'group-disabled:text-disabled-icon'\n          )}\n        >\n          {startIcon}\n        </span>\n      )}\n      {children}\n      {endIcon && (\n        <span\n          className={clsx(\n            iconColorClasses,\n            'group-disabled:text-disabled-icon'\n          )}\n        >\n          {endIcon}\n        </span>\n      )}\n    </button>\n  )\n}\n\n\n/**\n * A button for icons with a solid background and different sizes\n */\nconst IconButton = ({\n                      children,\n                      color = 'primary',\n                      size = 'medium',\n                      className,\n                      ...restProps\n                    }: IconButtonProps) => {\n  const colorClasses = {\n    primary: 'not-disabled:bg-button-solid-primary-background not-disabled:text-button-solid-primary-text',\n    secondary: 'not-disabled:bg-button-solid-secondary-background not-disabled:text-button-solid-secondary-text',\n    tertiary: 'not-disabled:bg-button-solid-tertiary-background not-disabled:text-button-solid-tertiary-text',\n    positive: 'not-disabled:bg-button-solid-positive-background not-disabled:text-button-solid-positive-text',\n    warning: 'not-disabled:bg-button-solid-warning-background not-disabled:text-button-solid-warning-text',\n    negative: 'not-disabled:bg-button-solid-negative-background not-disabled:text-button-solid-negative-text',\n    neutral: 'not-disabled:bg-button-solid-neutral-background not-disabled:text-button-solid-neutral-text',\n    transparent: 'not-disabled:bg-transparent',\n  }[color]\n\n  return (\n    <button\n      className={clsx(\n        colorClasses,\n        'not-disabled:hover:brightness-90',\n        'disabled:text-disabled-text',\n        {\n          'disabled:bg-disabled-background': color !== 'transparent',\n          'disabled:opacity-70': color === 'transparent',\n          'not-disabled:hover:bg-button-text-hover-background': color === 'transparent',\n        },\n        ButtonUtil.iconPaddingMapping[size],\n        className\n      )}\n      {...restProps}\n    >\n      {children}\n    </button>\n  )\n}\n\nexport { SolidButton, OutlineButton, TextButton, IconButton }\n","import type { PropsWithChildren } from 'react'\nimport type { SolidButtonColor } from '../user-action/Button'\nimport { SolidButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { ModalProps } from '../layout-and-navigation/Overlay'\nimport { Modal } from '../layout-and-navigation/Overlay'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype ConfirmModalTranslation = FormTranslationType\n\nexport type ConfirmModalType = 'positive' | 'negative' | 'neutral' | 'primary'\n\ntype ButtonOverwriteType = {\n  text?: string,\n  color?: SolidButtonColor,\n  disabled?: boolean,\n}\n\nexport type ConfirmModalProps = Omit<ModalProps, 'onClose'> & {\n  isShowingDecline?: boolean,\n  requireAnswer?: boolean,\n  onCancel: () => void,\n  onConfirm: () => void,\n  onDecline?: () => void,\n  confirmType?: ConfirmModalType,\n  /**\n   * Order: Cancel, Decline, Confirm\n   */\n  buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Modal for asking the user for confirmation\n */\nexport const ConfirmModal = ({\n                                overwriteTranslation,\n                                children,\n                                onCancel,\n                                onConfirm,\n                                onDecline,\n                                confirmType = 'positive',\n                                buttonOverwrites,\n                                className,\n                                ...restProps\n                              }: PropsForTranslation<ConfirmModalTranslation, PropsWithChildren<ConfirmModalProps>>) => {\n  const translation = useTranslation([formTranslation], overwriteTranslation)\n\n  const mapping: Record<ConfirmModalType, SolidButtonColor> = {\n    neutral: 'neutral',\n    negative: 'negative',\n    positive: 'positive',\n    primary: 'primary',\n  }\n\n  return (\n    <Modal {...restProps} onClose={onCancel} className={clsx('justify-between', className)}>\n      <div className=\"flex-col-2 grow\">\n        {children}\n      </div>\n      <div className=\"flex-row-4 mt-3 justify-end\">\n        {onCancel && (\n          <SolidButton\n            color={buttonOverwrites?.[0].color ?? 'neutral'}\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, ReactNode } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport clsx from 'clsx'\nimport { Tooltip } from '../user-action/Tooltip'\nimport { X } from 'lucide-react'\nimport { IconButton } from '../user-action/Button'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\nexport type OverlayProps = PropsWithChildren<{\n  /**\n   * Whether the overlay should be currently displayed\n   */\n  isOpen: boolean,\n  /**\n   *  Callback when the background is clicked\n   */\n  onBackgroundClick?: () => void,\n  /**\n   *  Styling for the background\n   *\n   *  To remove the darkening, set bg-transparent\n   */\n  backgroundClassName?: string,\n}>\n\n/**\n * A generic overlay window which is managed by its parent\n */\nexport const Overlay = ({\n                          children,\n                          isOpen,\n                          onBackgroundClick,\n                          backgroundClassName,\n                        }: PropsWithChildren<OverlayProps>) => {\n  // The element to which the overlay will be attached to\n  const [root, setRoot] = useState<HTMLElement>()\n\n  useEffect(() => {\n    setRoot(document.body)\n  }, [])\n\n  if (!root || !isOpen) return null\n\n  return ReactDOM.createPortal(\n    <div className={clsx('fixed inset-0 z-[200]')}>\n      <div\n        className={clsx('fixed inset-0 h-screen w-screen bg-overlay-shadow', backgroundClassName)}\n        onClick={onBackgroundClick}\n      />\n      {children}\n    </div>,\n    root\n  )\n}\n\n\nlet overlayStack: HTMLDivElement[] = []\n\n\n// --- Modal ---\n\ntype ModalHeaderTranslation = FormTranslationType\n\nconst defaultModalHeaderTranslation: Translation<FormTranslationType> = {\n  en: {\n    ...formTranslation.en\n  },\n  de: {\n    ...formTranslation.de\n  }\n}\n\nexport type OverlayHeaderProps = {\n  /**\n   * Callback when the close button is clicked. If omitted or undefined, the button is hidden\n   */\n  onClose?: () => 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 header that should be in an Overlay\n */\nexport const OverlayHeader = ({\n                                overwriteTranslation,\n                                onClose,\n                                title,\n                                titleText = '',\n                                description,\n                                descriptionText = ''\n                              }: PropsForTranslation<ModalHeaderTranslation, OverlayHeaderProps>) => {\n  const translation = useTranslation([defaultModalHeaderTranslation], overwriteTranslation)\n  const hasTitleRow = !!title || !!titleText || !!onClose\n  const titleRow = (\n    <div className=\"flex-row-8 justify-between items-start\">\n      {title ?? (\n        <h2\n          className={clsx('textstyle-title-lg', {\n            'mb-1': description || descriptionText,\n          })}\n        >\n          {titleText}\n        </h2>\n      )}\n      {!!onClose && (\n        <Tooltip tooltip={translation('close')}>\n          <IconButton color=\"neutral\" size=\"small\" onClick={onClose}>\n            <X className=\"w-full h-full\"/>\n          </IconButton>\n        </Tooltip>\n      )}\n    </div>\n  )\n\n  return (\n    <div className=\"flex-col-2\">\n      {hasTitleRow && (titleRow)}\n      {description ?? (descriptionText && (<span className=\"textstyle-description\">{descriptionText}</span>))}\n    </div>\n  )\n}\n\nexport type ModalProps = {\n  isOpen: boolean,\n  onClose: () => void,\n  className?: string,\n  backgroundClassName?: string,\n  headerProps?: Omit<OverlayHeaderProps, 'onClose'>,\n}\n\n/**\n * A Generic Modal Window\n */\nexport const Modal = ({\n                        children,\n                        isOpen,\n                        onClose,\n                        className,\n                        backgroundClassName,\n                        headerProps,\n                      }: PropsWithChildren<ModalProps>) => {\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const modal = ref.current\n\n    if (!modal) {\n      console.error('modal open, but no ref found')\n      return\n    }\n\n    overlayStack.push(modal)\n\n    const focusable = modal?.querySelectorAll(\n      'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n    )\n    const first = focusable[0]\n    const last = focusable[focusable.length - 1]\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      const isTopmost = overlayStack[overlayStack.length - 1] === modal\n      if (!isTopmost) return\n\n      if (e.key === 'Escape') {\n        e.stopPropagation()\n        onClose()\n      } else if (e.key === 'Tab') {\n        if (focusable.length === 0) return\n\n        if (e.shiftKey && document.activeElement === first) {\n          e.preventDefault();\n          (last as HTMLElement).focus()\n        } else if (!e.shiftKey && document.activeElement === last) {\n          e.preventDefault();\n          (first as HTMLElement).focus()\n        }\n      }\n    }\n\n    modal.focus()\n    document.addEventListener('keydown', handleKeyDown)\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown)\n      overlayStack = overlayStack.filter(m => m !== modal)\n    }\n  }, [isOpen, onClose])\n\n  return (\n    <Overlay\n      isOpen={isOpen}\n      onBackgroundClick={onClose}\n      backgroundClassName={backgroundClassName}\n    >\n      <div\n        ref={ref}\n        tabIndex={-1}\n        className={clsx(\n          'flex-col-2 fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 p-4 bg-overlay-background text-overlay-text rounded-xl shadow-around-lg shadow-strong animate-pop-in',\n          className\n        )}\n        role=\"dialog\"\n        aria-modal={true}\n      >\n        <OverlayHeader {...headerProps} onClose={onClose}/>\n        {children}\n      </div>\n    </Overlay>\n  )\n}\n\n// --- Dialog ---\n\nexport type DialogProps = Omit<OverlayProps, 'onBackgroundClick'> & {\n  headerProps?: Omit<OverlayHeaderProps, 'onClose'>,\n  className?: string,\n}\n\n/**\n * A Generic Dialog Window\n */\nexport const Dialog = ({\n                         children,\n                         isOpen,\n                         className,\n                         backgroundClassName,\n                         headerProps,\n                       }: PropsWithChildren<DialogProps>) => {\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const dialog = ref.current\n\n    if (!dialog) {\n      console.error('dialog open, but no ref found')\n      return\n    }\n\n    overlayStack.push(dialog)\n\n    const focusable = dialog?.querySelectorAll(\n      'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n    )\n    const first = focusable[0]\n    const last = focusable[focusable.length - 1]\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      const isTopmost = overlayStack[overlayStack.length - 1] === dialog\n      if (!isTopmost) return\n\n      if (e.key === 'Escape') {\n        e.stopPropagation()\n      } else if (e.key === 'Tab') {\n        if (focusable.length === 0) return\n\n        if (e.shiftKey && document.activeElement === first) {\n          e.preventDefault();\n          (last as HTMLElement).focus()\n        } else if (!e.shiftKey && document.activeElement === last) {\n          e.preventDefault();\n          (first as HTMLElement).focus()\n        }\n      }\n    }\n\n    dialog.focus()\n    document.addEventListener('keydown', handleKeyDown)\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown)\n      overlayStack = overlayStack.filter(m => m !== dialog)\n    }\n  }, [isOpen])\n\n  return (\n    <Overlay\n      isOpen={isOpen}\n      backgroundClassName={backgroundClassName}\n    >\n      <div\n        ref={ref}\n        tabIndex={-1}\n        className={clsx(\n          'flex-col-2 fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 p-4 bg-overlay-background text-overlay-text rounded-xl shadow-around-lg shadow-strong animate-pop-in',\n          className\n        )}\n        role=\"dialog\"\n        aria-modal={true}\n      >\n        {!!headerProps && (<OverlayHeader {...headerProps}/>)}\n        {children}\n      </div>\n    </Overlay>\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: 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 modal)\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-tooltip-background border-l-transparent border-r-transparent`,\n    bottom: `bottom-full left-1/2 -translate-x-1/2 border-b-tooltip-background border-l-transparent border-r-transparent`,\n    left: `left-full top-1/2 -translate-y-1/2 border-l-tooltip-background border-t-transparent border-b-transparent`,\n    right: `right-full top-1/2 -translate-y-1/2 border-r-tooltip-background 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(\n            `opacity-0 absolute text-xs font-semibold text-tooltip-text px-2 py-1 rounded whitespace-nowrap\n           animate-tooltip-fade-in shadow-around-md bg-tooltip-background`,\n            positionClasses[position], tooltipClassName\n          )}\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: zIndex + 1 }}\n          />\n        </div>\n      )}\n    </div>\n  )\n}\n","import type { Translation } from '../useTranslation'\n\nexport type FormTranslationType = {\n  add: string,\n  all: string,\n  apply: string,\n  back: string,\n  cancel: string,\n  change: string,\n  clear: string,\n  click: string,\n  clickToCopy: string,\n  close: string,\n  confirm: string,\n  copy: string,\n  copied: string,\n  create: string,\n  decline: string,\n  delete: string,\n  discard: string,\n  discardChanges: string,\n  done: string,\n  edit: string,\n  enterText: string,\n  error: string,\n  exit: string,\n  fieldRequiredError: string,\n  invalidEmailError: string,\n  less: string,\n  loading: string,\n  maxLengthError: string,\n  minLengthError: string,\n  more: string,\n  next: string,\n  no: string,\n  none: string,\n  of: string,\n  optional: string,\n  pleaseWait: string,\n  previous: string,\n  remove: string,\n  required: string,\n  reset: string,\n  save: string,\n  saved: string,\n  search: string,\n  select: string,\n  selectOption: string,\n  show: string,\n  showMore: string,\n  showLess: string,\n  submit: string,\n  success: string,\n  unsavedChanges: string,\n  unsavedChangesSaveQuestion: string,\n  update: string,\n  yes: string,\n}\n\nexport const formTranslation: Translation<FormTranslationType> = {\n  en: {\n    add: 'Add',\n    all: 'All',\n    apply: 'Apply',\n    back: 'Back',\n    cancel: 'Cancel',\n    change: 'Change',\n    clear: 'Clear',\n    click: 'Click',\n    clickToCopy: 'Click to Copy',\n    close: 'Close',\n    confirm: 'Confirm',\n    copy: 'Copy',\n    copied: 'Copied',\n    create: 'Create',\n    decline: 'Decline',\n    delete: 'Delete',\n    discard: 'Discard',\n    discardChanges: 'Discard Changes',\n    done: 'Done',\n    edit: 'Edit',\n    enterText: 'Enter text here',\n    error: 'Error',\n    exit: 'Exit',\n    fieldRequiredError: 'This field is required.',\n    invalidEmailError: 'Please enter a valid email address.',\n    less: 'Less',\n    loading: 'Loading',\n    maxLengthError: 'Maximum length exceeded.',\n    minLengthError: 'Minimum length not met.',\n    more: 'More',\n    next: 'Next',\n    no: 'No',\n    none: 'None',\n    of: 'of',\n    optional: 'Optional',\n    pleaseWait: 'Please wait...',\n    previous: 'Previous',\n    remove: 'Remove',\n    required: 'Required',\n    reset: 'Reset',\n    save: 'Save',\n    saved: 'Saved',\n    search: 'Search',\n    select: 'Select',\n    selectOption: 'Select an option',\n    show: 'Show',\n    showMore: 'Show more',\n    showLess: 'Show less',\n    submit: 'Submit',\n    success: 'Success',\n    update: 'Update',\n    unsavedChanges: 'Unsaved Changes',\n    unsavedChangesSaveQuestion: 'Do you want to save your changes?',\n    yes: 'Yes',\n  },\n  de: {\n    add: 'Hinzufügen',\n    all: 'Alle',\n    apply: 'Anwenden',\n    back: 'Zurück',\n    cancel: 'Abbrechen',\n    change: 'Ändern',\n    clear: 'Löschen',\n    click: 'Klicken',\n    clickToCopy: 'Zum kopieren klicken',\n    close: 'Schließen',\n    confirm: 'Bestätigen',\n    copy: 'Kopieren',\n    copied: 'Kopiert',\n    create: 'Erstellen',\n    decline: 'Ablehnen',\n    delete: 'Löschen',\n    discard: 'Verwerfen',\n    discardChanges: 'Änderungen Verwerfen',\n    done: 'Fertig',\n    edit: 'Bearbeiten',\n    enterText: 'Text hier eingeben',\n    error: 'Fehler',\n    exit: 'Beenden',\n    fieldRequiredError: 'Dieses Feld ist erforderlich.',\n    invalidEmailError: 'Bitte geben Sie eine gültige E-Mail-Adresse ein.',\n    less: 'Weniger',\n    loading: 'Lädt',\n    maxLengthError: 'Maximale Länge überschritten.',\n    minLengthError: 'Mindestlänge nicht erreicht.',\n    more: 'Mehr',\n    next: 'Weiter',\n    no: 'Nein',\n    none: 'Nichts',\n    of: 'von',\n    optional: 'Optional',\n    pleaseWait: 'Bitte warten...',\n    previous: 'Vorherige',\n    remove: 'Entfernen',\n    required: 'Erforderlich',\n    reset: 'Zurücksetzen',\n    save: 'Speichern',\n    saved: 'Gespeichert',\n    search: 'Suche',\n    select: 'Select',\n    selectOption: 'Option auswählen',\n    show: 'Anzeigen',\n    showMore: 'Mehr anzeigen',\n    showLess: 'Weniger anzeigen',\n    submit: 'Abschicken',\n    success: 'Erfolg',\n    update: 'Update',\n    unsavedChanges: 'Ungespeicherte Änderungen',\n    unsavedChangesSaveQuestion: 'Möchtest du die Änderungen speichern?',\n    yes: 'Ja',\n  }\n}\n","import type { PropsWithChildren } from 'react'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { ConfirmModalProps } from './ConfirmModal'\nimport { ConfirmModal } from './ConfirmModal'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\n\ntype DiscardChangesModalTranslation = FormTranslationType\n\ntype DiscardChangesModalProps = Omit<ConfirmModalProps, 'onDecline' | 'onConfirm' | 'buttonOverwrites'> & {\n  isShowingDecline?: boolean,\n  requireAnswer?: boolean,\n  onCancel: () => void,\n  onSave: () => void,\n  onDontSave: () => void,\n}\n\nexport const DiscardChangesModal = ({\n                                       overwriteTranslation,\n                                       children,\n                                       onCancel,\n                                       onSave,\n                                       onDontSave,\n                                       headerProps,\n                                       ...modalProps\n                                     }: PropsForTranslation<DiscardChangesModalTranslation, PropsWithChildren<DiscardChangesModalProps>>) => {\n  const translation = useTranslation([formTranslation], overwriteTranslation)\n  return (\n    <ConfirmModal\n      headerProps={{\n        ...headerProps,\n        titleText: headerProps?.titleText ?? translation('unsavedChanges'),\n        descriptionText: headerProps?.descriptionText ?? translation('unsavedChangesSaveQuestion'),\n      }}\n      onConfirm={onSave}\n      onCancel={onCancel}\n      onDecline={onDontSave}\n      buttonOverwrites={[{ text: translation('cancel') }, { text: translation('discardChanges') }, { text: translation('save') }]}\n      {...modalProps}\n    >\n      {children}\n    </ConfirmModal>\n  )\n}\n"],"mappings":"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","names":["useState","jsx","SolidButton","jsx","clsx","useEffect","useState","clsx","useEffect","useState","clsx","jsx","jsxs","jsx","jsxs","useState","useEffect","clsx","jsx","jsxs","clsx","jsx"]}