{"version":3,"file":"Button.mjs","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["'use client'\n\nimport { forwardRef, useCallback } from 'react'\n\nimport { isBezierIcon } from '@channel.io/bezier-icons'\nimport classNames from 'classnames'\n\nimport { warn } from '~/src/utils/assert'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport { Icon } from '~/src/components/Icon'\nimport { LegacyIcon, isIconName } from '~/src/components/LegacyIcon'\nimport { Spinner } from '~/src/components/Spinner'\nimport { Text } from '~/src/components/Text'\n\nimport type { ButtonProps, ButtonSize, SideContent } from './Button.types'\n\nimport styles from './Button.module.scss'\n\nexport const BUTTON_TEST_ID = 'bezier-button'\n\nfunction getTypography(size: ButtonSize) {\n  return (\n    {\n      xs: '13',\n      s: '13',\n      m: '14',\n      l: '15',\n      xl: '18',\n    } as const\n  )[size]\n}\n\nfunction getIconSize(size: ButtonSize) {\n  return (\n    {\n      xs: 'xs',\n      s: 'xs',\n      m: 's',\n      l: 's',\n      xl: 'm',\n    } as const\n  )[size]\n}\n\nfunction getSpinnerSize(size: ButtonSize) {\n  return (\n    {\n      xs: 'xs',\n      s: 'xs',\n      m: 's',\n      l: 's',\n      xl: 's',\n    } as const\n  )[size]\n}\n\nfunction ButtonSideContent({\n  size,\n  children,\n}: {\n  size: ButtonSize\n  children: SideContent\n}) {\n  if (isIconName(children)) {\n    warn(\n      'Deprecation: IconName as a value for the leftContent property of a Button has been deprecated. Use the Icon of bezier-icons instead.',\n      'Button.IconName'\n    )\n    return (\n      <LegacyIcon\n        className={styles.ButtonIcon}\n        name={children}\n        size={getIconSize(size)}\n      />\n    )\n  }\n\n  if (isBezierIcon(children)) {\n    return (\n      <Icon\n        className={styles.ButtonIcon}\n        source={children}\n        size={getIconSize(size)}\n      />\n    )\n  }\n\n  return <>{children}</>\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n  function Button(\n    {\n      as = BaseButton,\n      className,\n      text,\n      loading = false,\n      disabled: disabledProp = false,\n      active = false,\n      size = 'm',\n      styleVariant = 'primary',\n      colorVariant = 'blue',\n      leftContent,\n      rightContent,\n      onClick,\n      ...rest\n    },\n    forwardedRef\n  ) {\n    const Comp = as as typeof BaseButton\n\n    const disabled = loading || disabledProp\n\n    const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n      (event) => {\n        if (!disabled) {\n          onClick?.(event)\n        }\n      },\n      [onClick, disabled]\n    )\n\n    return (\n      <Comp\n        ref={forwardedRef}\n        className={classNames(\n          styles.Button,\n          styles[`size-${size}`],\n          styles[`style-${styleVariant}`],\n          styles[`color-${colorVariant}`],\n          active && styles.active,\n          className\n        )}\n        disabled={disabled}\n        onClick={handleClick}\n        data-testid={BUTTON_TEST_ID}\n        data-bezier-component=\"Button\"\n        {...rest}\n      >\n        <div\n          className={classNames(\n            styles.ButtonContent,\n            loading && styles.loading\n          )}\n        >\n          <ButtonSideContent size={size}>{leftContent}</ButtonSideContent>\n\n          {text && (\n            <Text\n              className={styles.ButtonText}\n              typo={getTypography(size)}\n              bold\n            >\n              {text}\n            </Text>\n          )}\n\n          <ButtonSideContent size={size}>{rightContent}</ButtonSideContent>\n        </div>\n\n        {loading && (\n          <div className={styles.ButtonLoader}>\n            <Spinner size={getSpinnerSize(size)} />\n          </div>\n        )}\n      </Comp>\n    )\n  }\n)\n"],"names":["BUTTON_TEST_ID","getTypography","size","xs","s","m","l","xl","getIconSize","getSpinnerSize","ButtonSideContent","children","isIconName","warn","_jsx","LegacyIcon","className","styles","ButtonIcon","name","isBezierIcon","Icon","source","_Fragment","Button","forwardRef","as","BaseButton","text","loading","disabled","disabledProp","active","styleVariant","colorVariant","leftContent","rightContent","onClick","rest","forwardedRef","Comp","handleClick","useCallback","event","_jsxs","ref","classNames","ButtonContent","Text","ButtonText","typo","bold","ButtonLoader","Spinner"],"mappings":"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"}