{"version":3,"sources":["../../../src/components/user-action/Checkbox.tsx","../../../src/components/user-action/Label.tsx"],"sourcesContent":["import { useState } from 'react'\nimport type { CheckedState } from '@radix-ui/react-checkbox'\nimport * as CheckboxPrimitive 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-5',\n  medium: 'size-6',\n  large: 'size-8',\n}\n\nconst checkboxIconSizeMapping: Record<CheckBoxSize, string> = {\n  small: 'size-4',\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 Checkbox = ({\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    if (disabled) {\n      return\n    }\n    const newValue = checked === 'indeterminate' ? false : !checked\n    propagateChange(newValue)\n  }\n\n  return (\n    <div\n      className={clsx('group flex-row-2 items-center', {\n        'cursor-pointer': !disabled,\n        'cursor-not-allowed': disabled,\n      }, containerClassName)}\n      onClick={changeValue}\n    >\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 `, {\n          'text-disabled-text border-disabled-outline bg-disabled-background cursor-not-allowed': disabled,\n          'focus:border-primary group-hover:border-primary ': !disabled,\n          'bg-input-background': !disabled && !checked,\n          'bg-primary/30 border-primary text-primary': !disabled && checked === true || checked === 'indeterminate',\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\n          {...label}\n          className={clsx(\n            label.className,\n            {\n              'cursor-pointer': !disabled,\n              'cursor-not-allowed': disabled,\n            }\n          )}\n          htmlFor={id}\n        />\n      )}\n    </div>\n  )\n}\n\ntype CheckboxUncontrolledProps = 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 CheckboxUncontrolled = ({\n                                onChange,\n                                onChangeTristate,\n                                defaultValue = false,\n                                ...props\n                              }: CheckboxUncontrolledProps) => {\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    <Checkbox\n      {...props}\n      checked={checked}\n      onChangeTristate={handleChange}\n    />\n  )\n}\n\nexport {\n  CheckboxProps,\n  CheckboxUncontrolled,\n  Checkbox,\n}\n","import type { LabelHTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type LabelType = 'labelSmall' | 'labelMedium' | 'labelBig'\n\nconst styleMapping: Record<LabelType, string> = {\n  labelSmall: 'textstyle-label-sm',\n  labelMedium: 'textstyle-label-md',\n  labelBig: 'textstyle-label-lg',\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                        className,\n                        ...props\n                      }: LabelProps) => {\n  return (\n    <label {...props} className={clsx(styleMapping[labelType], className)}>\n      {children ? children : name}\n    </label>\n  )\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AAEzB,YAAY,uBAAuB;AACnC,SAAS,OAAO,aAAa;AAC7B,OAAOA,WAAU;;;ACHjB,OAAO,UAAU;AA4Bb;AAxBJ,IAAM,eAA0C;AAAA,EAC9C,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,UAAU;AACZ;AAYO,IAAM,QAAQ,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAkB;AACtC,SACE,oBAAC,WAAO,GAAG,OAAO,WAAW,KAAK,aAAa,SAAS,GAAG,SAAS,GACjE,qBAAW,WAAW,MACzB;AAEJ;;;AD6DQ,SACuB,OAAAC,MADvB;AApFR,IAAM,sBAAoD;AAAA,EACxD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAM,0BAAwD;AAAA,EAC5D,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAuBA,IAAM,WAAW,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AACF,MAAqB;AACrC,QAAM,gBAAgB,oBAAoB,IAAI;AAC9C,QAAM,gBAAgB,wBAAwB,IAAI;AAElD,QAAM,kBAAkB,CAACC,aAA0B;AACjD,QAAI,kBAAkB;AACpB,uBAAiBA,QAAO;AAAA,IAC1B;AACA,QAAI,UAAU;AACZ,eAASA,aAAY,kBAAkB,QAAQA,QAAO;AAAA,IACxD;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,UAAU;AACZ;AAAA,IACF;AACA,UAAM,WAAW,YAAY,kBAAkB,QAAQ,CAAC;AACxD,oBAAgB,QAAQ;AAAA,EAC1B;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAWC,MAAK,iCAAiC;AAAA,QAC/C,kBAAkB,CAAC;AAAA,QACnB,sBAAsB;AAAA,MACxB,GAAG,kBAAkB;AAAA,MACrB,SAAS;AAAA,MAET;AAAA,wBAAAF;AAAA,UAAmB;AAAA,UAAlB;AAAA,YACC,iBAAiB;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAWE,MAAK,eAAe,+CAA+C;AAAA,cAC5E,wFAAwF;AAAA,cACxF,oDAAoD,CAAC;AAAA,cACrD,uBAAuB,CAAC,YAAY,CAAC;AAAA,cACrC,6CAA6C,CAAC,YAAY,YAAY,QAAQ,YAAY;AAAA,YAC5F,GAAG,SAAS;AAAA,YAEZ,+BAAmB,6BAAlB,EACE;AAAA,0BAAY,QAAQ,gBAAAF,KAAC,SAAM,WAAW,eAAc;AAAA,cACpD,YAAY,mBAAmB,gBAAAA,KAAC,SAAM,WAAW,eAAc;AAAA,eAClE;AAAA;AAAA,QACF;AAAA,QACC,SACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,WAAWE;AAAA,cACT,MAAM;AAAA,cACN;AAAA,gBACE,kBAAkB,CAAC;AAAA,gBACnB,sBAAsB;AAAA,cACxB;AAAA,YACF;AAAA,YACA,SAAS;AAAA;AAAA,QACX;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAcA,IAAM,uBAAuB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,GAAG;AACL,MAAiC;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,YAAY;AAEnD,QAAM,eAAe,CAACD,aAA0B;AAC9C,QAAI,kBAAkB;AACpB,uBAAiBA,QAAO;AAAA,IAC1B;AACA,QAAI,UAAU;AACZ,eAASA,aAAY,kBAAkB,QAAQA,QAAO;AAAA,IACxD;AACA,eAAWA,QAAO;AAAA,EACpB;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,kBAAkB;AAAA;AAAA,EACpB;AAEJ;","names":["clsx","jsx","checked","clsx"]}