{"version":3,"file":"Button.mjs","sources":["../../../../src/components/AlphaButton/Button.tsx"],"sourcesContent":["'use client'\n\nimport { forwardRef } from 'react'\n\nimport { isBezierIcon } from '@channel.io/bezier-icons'\nimport classNames from 'classnames'\n\nimport {\n  type ButtonProps,\n  type ButtonSize,\n} from '~/src/components/AlphaButton/Button.types'\nimport { AlphaLoader } from '~/src/components/AlphaLoader'\nimport { BaseButton } from '~/src/components/BaseButton'\nimport { Icon, type IconSize } from '~/src/components/Icon'\nimport { Text } from '~/src/components/Text'\n\nimport styles from './Button.module.scss'\n\nfunction SideContent({\n  size,\n  content,\n}: {\n  size: IconSize\n  content?: ButtonProps['prefixContent']\n}) {\n  return isBezierIcon(content) ? (\n    <Icon\n      source={content}\n      size={size}\n      className={styles.ButtonIcon}\n    />\n  ) : (\n    content\n  )\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 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\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n  function Button(\n    {\n      as = BaseButton,\n      text,\n      prefixContent,\n      suffixContent,\n      color = 'blue',\n      variant = 'primary',\n      size = 'm',\n      active,\n      className,\n      loading,\n      disabled: disabledProp,\n      ...rest\n    },\n    forwardedRef\n  ) {\n    const Comp = as as typeof BaseButton\n\n    const disabled = loading || disabledProp\n\n    return (\n      <Comp\n        ref={forwardedRef}\n        className={classNames(\n          styles.Button,\n          styles[`size-${size}`],\n          styles[`variant-${variant}`],\n          styles[`color-${color}`],\n          active && styles.active,\n          className\n        )}\n        disabled={disabled}\n        {...rest}\n      >\n        <div\n          className={classNames(\n            styles.ButtonContent,\n            loading && styles.loading\n          )}\n        >\n          <SideContent\n            size={getIconSize(size)}\n            content={prefixContent}\n          />\n\n          {/* TODO: use AlphaText later, add typo */}\n          <Text\n            className={styles.ButtonText}\n            typo={getTypography(size)}\n            bold\n          >\n            {text}\n          </Text>\n\n          <SideContent\n            size={getIconSize(size)}\n            content={suffixContent}\n          />\n        </div>\n\n        {loading && (\n          <div\n            className={classNames(\n              styles.ButtonLoader,\n              // NOTE: Loader size is the same as icon size\n              styles[`size-${getIconSize(size)}`]\n            )}\n          >\n            <AlphaLoader\n              size=\"s\"\n              className={styles.Loader}\n              variant={variant === 'primary' ? 'on-overlay' : 'secondary'}\n            />\n          </div>\n        )}\n      </Comp>\n    )\n  }\n)\n"],"names":["SideContent","size","content","isBezierIcon","_jsx","Icon","source","className","styles","ButtonIcon","getIconSize","xs","s","m","l","xl","getTypography","Button","forwardRef","as","BaseButton","text","prefixContent","suffixContent","color","variant","active","loading","disabled","disabledProp","rest","forwardedRef","Comp","_jsxs","ref","classNames","children","ButtonContent","Text","ButtonText","typo","bold","ButtonLoader","AlphaLoader","Loader"],"mappings":"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"}