{"version":3,"file":"FloatingButton.mjs","sources":["../../../../src/components/AlphaFloatingButton/FloatingButton.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 FloatingButtonProps,\n  type FloatingButtonSize,\n} from '~/src/components/AlphaFloatingButton/FloatingButton.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 './FloatingButton.module.scss'\n\nfunction SideContent({\n  size,\n  content,\n}: {\n  size: IconSize\n  content?: FloatingButtonProps['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: FloatingButtonSize) {\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: FloatingButtonSize) {\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 FloatingButton = forwardRef<\n  HTMLButtonElement,\n  FloatingButtonProps\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 = false,\n    disabled: disabledProp = false,\n    ...rest\n  },\n  forwardedRef\n) {\n  const Comp = as as typeof BaseButton\n  const disabled = loading || disabledProp\n\n  return (\n    <Comp\n      ref={forwardedRef}\n      className={classNames(\n        styles.FloatingButton,\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(styles.ButtonContent, loading && styles.loading)}\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"],"names":["SideContent","size","content","isBezierIcon","_jsx","Icon","source","className","styles","ButtonIcon","getIconSize","xs","s","m","l","xl","getTypography","FloatingButton","forwardRef","Button","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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"}