{"version":3,"file":"Switch.cjs","names":[],"sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["/*\nCopyright 2026 Element Creations Ltd.\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport React, { type ChangeEvent, useCallback } from \"react\";\nimport { Tooltip } from \"../../index\";\nimport classNames from \"classnames\";\n\nimport styles from \"./Switch.module.css\";\nimport type { Size } from \"../../utils/size\";\n\ntype Icon = React.ForwardRefExoticComponent<\n  Omit<React.SVGProps<SVGSVGElement>, \"ref\" | \"children\"> &\n    React.RefAttributes<SVGSVGElement>\n>;\n\ninterface SwitchProps<LeftValue extends string, RightValue extends string> {\n  name: string;\n  leftIcon: Icon;\n  leftLabel: string;\n  leftValue: LeftValue;\n  rightIcon: Icon;\n  rightLabel: string;\n  rightValue: RightValue;\n  value: LeftValue | RightValue;\n  onChange: (value: LeftValue | RightValue) => void;\n  size?: Size & (\"lg\" | \"md\");\n}\n\nexport const Switch = <\n  LeftValue extends string = string,\n  RightValue extends string = string,\n>({\n  name,\n  leftIcon: LeftIcon,\n  leftLabel,\n  leftValue,\n  rightIcon: RightIcon,\n  rightLabel,\n  rightValue,\n  value,\n  className,\n  onChange,\n  size = \"lg\",\n  ...fieldSetProps\n}: SwitchProps<LeftValue, RightValue> &\n  Omit<\n    React.HTMLAttributes<HTMLFieldSetElement>,\n    \"onChange\"\n  >): React.ReactElement => {\n  const onInputChange = useCallback(\n    (e: ChangeEvent<HTMLInputElement>) =>\n      onChange(e.target.value as LeftValue | RightValue),\n    [onChange],\n  );\n\n  return (\n    <fieldset\n      data-size={size}\n      className={classNames(styles.toggle, className)}\n      {...fieldSetProps}\n    >\n      <Tooltip label={leftLabel}>\n        <input\n          type=\"radio\"\n          name={name}\n          value={leftValue}\n          checked={value === leftValue}\n          onChange={onInputChange}\n        />\n      </Tooltip>\n      <LeftIcon aria-hidden />\n      <Tooltip label={rightLabel}>\n        <input\n          type=\"radio\"\n          name={name}\n          value={rightValue}\n          checked={value === rightValue}\n          onChange={onInputChange}\n        />\n      </Tooltip>\n      <RightIcon aria-hidden />\n    </fieldset>\n  );\n};\n"],"mappings":";;;;;;;;;AAiCA,IAAa,UAGX,EACA,MACA,UAAU,UACV,WACA,WACA,WAAW,WACX,YACA,YACA,OACA,WACA,UACA,OAAO,MACP,GAAG,oBAKuB;CAC1B,MAAM,iBAAA,GAAA,MAAA,cACH,MACC,SAAS,EAAE,OAAO,MAAgC,EACpD,CAAC,SAAS,CACX;CAED,OACE,iBAAA,GAAA,kBAAA,MAAC,YAAD;EACE,aAAW;EACX,YAAA,GAAA,WAAA,SAAsB,sBAAA,QAAO,QAAQ,UAAU;EAC/C,GAAI;YAHN;GAKE,iBAAA,GAAA,kBAAA,KAAC,gBAAA,SAAD;IAAS,OAAO;cACd,iBAAA,GAAA,kBAAA,KAAC,SAAD;KACE,MAAK;KACC;KACN,OAAO;KACP,SAAS,UAAU;KACnB,UAAU;KACV,CAAA;IACM,CAAA;GACV,iBAAA,GAAA,kBAAA,KAAC,UAAD,EAAU,eAAA,MAAc,CAAA;GACxB,iBAAA,GAAA,kBAAA,KAAC,gBAAA,SAAD;IAAS,OAAO;cACd,iBAAA,GAAA,kBAAA,KAAC,SAAD;KACE,MAAK;KACC;KACN,OAAO;KACP,SAAS,UAAU;KACnB,UAAU;KACV,CAAA;IACM,CAAA;GACV,iBAAA,GAAA,kBAAA,KAAC,WAAD,EAAW,eAAA,MAAc,CAAA;GAChB"}