{"version":3,"sources":["../../../src/components/table/TableSortButton.tsx","../../../src/components/user-action/Button.tsx"],"sourcesContent":["import { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react'\nimport type { IconButtonProps } from '../user-action/Button'\nimport { IconButton } from '../user-action/Button'\nimport clsx from 'clsx'\nimport type { SortDirection } from '@tanstack/react-table'\n\nexport type TableSortButtonProps = IconButtonProps & {\n  sortDirection: SortDirection | false,\n  invert?: boolean,\n}\n\n/**\n * An Extension of the normal button that displays the sorting state right of the content\n */\nexport const TableSortButton = ({\n                             sortDirection,\n                             invert = false,\n                             color = 'neutral',\n                             className,\n                             ...buttonProps\n                           }: TableSortButtonProps) => {\n  let icon = <ChevronsUpDown className=\"w-full h-full\"/>\n  if (sortDirection) {\n    let usedSortDirection = sortDirection\n    if (invert) {\n      usedSortDirection = usedSortDirection === 'desc' ? 'asc' : 'desc'\n    }\n    icon = usedSortDirection === 'asc' ? (<ChevronUp className=\"w-full h-full\"/>) : (\n      <ChevronDown className=\"w-full h-full\"/>)\n  }\n\n  return (\n    <IconButton\n      size=\"tiny\"\n      color={color}\n      className={clsx(className)}\n      {...buttonProps}\n    >\n      {icon}\n    </IconButton>\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"],"mappings":"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","names":["SolidButton","clsx","jsx"]}