{"version":3,"file":"Button.cjs","sources":["../../../../src/components/actions/button/Button.tsx"],"sourcesContent":["import { BUTTON_STYLES } from '@components/actions/button/styles/Button.css.ts'\r\nimport { BUTTON_SHARED_STYLES } from '@components/actions/_shared/buttons/styles/buttonShared.css.ts'\r\nimport { getButtonLayoutClassName } from '@components/actions/_shared/buttons/utils/buttonLayout.utils.ts'\r\nimport { Icon } from '@components/foundation/icon'\r\nimport { Typography } from '@components/foundation/typography'\r\nimport type { ButtonProps } from '@components/actions/button/types/Button.props.ts'\r\nimport { cn } from '@utils/cn.ts'\r\nimport type * as React from 'react'\r\nimport { BUTTON_SIZE_TO_FONT_SIZE, buttonSizeToIconSize } from '@components/actions/button/constants'\r\nimport { BUTTON_SIZES } from '@components/actions/_shared/buttons/constants'\r\n\r\n/**\r\n * Text-label action button. Requires a visible `label`. Renders a native\r\n * anchor when `href` is provided. Supports `variant` (contained|outlined|ghost),\r\n * semantic `color`, `size` (sm|md|lg), and optional `startIcon`/`endIcon`\r\n * Iconify identifiers.\r\n */\r\nconst Button: React.FC<ButtonProps> = ({\r\n    variant,\r\n    color,\r\n    size = BUTTON_SIZES.md,\r\n    className,\r\n    label,\r\n    startIcon,\r\n    endIcon,\r\n    active,\r\n    margin,\r\n    marginTop,\r\n    marginRight,\r\n    marginBottom,\r\n    marginLeft,\r\n    width,\r\n    alignSelf,\r\n    style,\r\n    ...elementProps\r\n}) => {\r\n    const iconSize = buttonSizeToIconSize[size]\r\n    const textSize = BUTTON_SIZE_TO_FONT_SIZE[size]\r\n    const buttonClassName = cn(\r\n        BUTTON_STYLES.recipe({ variant, color, size }),\r\n        getButtonLayoutClassName({ margin, marginTop, marginRight, marginBottom, marginLeft, width, alignSelf }),\r\n        className,\r\n    )\r\n    const buttonStyle = { width, alignSelf, ...style }\r\n    const content = (\r\n        <>\r\n            {startIcon && (\r\n                <Icon\r\n                    icon={startIcon}\r\n                    size={iconSize}\r\n                    className={BUTTON_SHARED_STYLES.icon}\r\n                />\r\n            )}\r\n            <Typography\r\n                as={'span'}\r\n                fontSize={textSize}\r\n                fontWeight={'medium'}\r\n            >\r\n                {label}\r\n            </Typography>\r\n            {endIcon && (\r\n                <Icon\r\n                    icon={endIcon}\r\n                    size={iconSize}\r\n                    className={BUTTON_SHARED_STYLES.icon}\r\n                />\r\n            )}\r\n        </>\r\n    )\r\n\r\n    if (elementProps.href !== undefined) {\r\n        const {\r\n            href,\r\n            ref: anchorRef,\r\n            onClick,\r\n            ...anchorProps\r\n        } = elementProps\r\n        const handleClick = onClick\r\n            ? (event: React.MouseEvent<HTMLAnchorElement>) => {\r\n                event.preventDefault()\r\n                onClick(event)\r\n            }\r\n            : undefined\r\n\r\n        return (\r\n            <a\r\n                ref={anchorRef}\r\n                href={href}\r\n                data-active={active ? 'true' : undefined}\r\n                className={buttonClassName}\r\n                style={buttonStyle}\r\n                onClick={handleClick}\r\n                {...anchorProps}\r\n            >\r\n                {content}\r\n            </a>\r\n        )\r\n    }\r\n\r\n    const {\r\n        ref: buttonRef,\r\n        ...buttonProps\r\n    } = elementProps\r\n\r\n    return (\r\n        <button\r\n            ref={buttonRef}\r\n            data-active={active ? 'true' : undefined}\r\n            className={buttonClassName}\r\n            style={buttonStyle}\r\n            {...buttonProps}\r\n        >\r\n            {content}\r\n        </button>\r\n    )\r\n}\r\n\r\nButton.displayName = 'Button'\r\n\r\nexport default Button\r\n"],"names":["Button","variant","color","size","BUTTON_SIZES","className","label","startIcon","endIcon","active","margin","marginTop","marginRight","marginBottom","marginLeft","width","alignSelf","style","elementProps","iconSize","buttonSizeToIconSize","textSize","BUTTON_SIZE_TO_FONT_SIZE","buttonClassName","cn","BUTTON_STYLES","getButtonLayoutClassName","buttonStyle","content","jsxs","Fragment","jsx","Icon","BUTTON_SHARED_STYLES","Typography","href","anchorRef","onClick","anchorProps","handleClick","event","buttonRef","buttonProps"],"mappings":"4nBAiBMA,EAAgC,CAAC,CACnC,QAAAC,EACA,MAAAC,EACA,KAAAC,EAAOC,EAAAA,aAAa,GACpB,UAAAC,EACA,MAAAC,EACA,UAAAC,EACA,QAAAC,EACA,OAAAC,EACA,OAAAC,EACA,UAAAC,EACA,YAAAC,EACA,aAAAC,EACA,WAAAC,EACA,MAAAC,EACA,UAAAC,EACA,MAAAC,EACA,GAAGC,CACP,IAAM,CACF,MAAMC,EAAWC,EAAAA,qBAAqBjB,CAAI,EACpCkB,EAAWC,EAAAA,yBAAyBnB,CAAI,EACxCoB,EAAkBC,EAAAA,GACpBC,EAAAA,cAAc,OAAO,CAAE,QAAAxB,EAAS,MAAAC,EAAO,KAAAC,EAAM,EAC7CuB,EAAAA,yBAAyB,CAAE,OAAAhB,EAAQ,UAAAC,EAAW,YAAAC,EAAa,aAAAC,EAAc,WAAAC,CAA6B,CAAC,EACvGT,CAAA,EAEEsB,EAAc,CAAE,MAAAZ,EAAO,UAAAC,EAAW,GAAGC,CAAA,EACrCW,EACFC,EAAAA,KAAAC,EAAAA,SAAA,CACK,SAAA,CAAAvB,GACGwB,EAAAA,IAACC,EAAA,CACG,KAAMzB,EACN,KAAMY,EACN,UAAWc,EAAAA,qBAAqB,IAAA,CAAA,EAGxCF,EAAAA,IAACG,EAAA,CACG,GAAI,OACJ,SAAUb,EACV,WAAY,SAEX,SAAAf,CAAA,CAAA,EAEJE,GACGuB,EAAAA,IAACC,EAAA,CACG,KAAMxB,EACN,KAAMW,EACN,UAAWc,EAAAA,qBAAqB,IAAA,CAAA,CACpC,EAER,EAGJ,GAAIf,EAAa,OAAS,OAAW,CACjC,KAAM,CACF,KAAAiB,EACA,IAAKC,EACL,QAAAC,EACA,GAAGC,CAAA,EACHpB,EACEqB,EAAcF,EACbG,GAA+C,CAC9CA,EAAM,eAAA,EACNH,EAAQG,CAAK,CACjB,EACE,OAEN,OACIT,EAAAA,IAAC,IAAA,CACG,IAAKK,EACL,KAAAD,EACA,cAAa1B,EAAS,OAAS,OAC/B,UAAWc,EACX,MAAOI,EACP,QAASY,EACR,GAAGD,EAEH,SAAAV,CAAA,CAAA,CAGb,CAEA,KAAM,CACF,IAAKa,EACL,GAAGC,CAAA,EACHxB,EAEJ,OACIa,EAAAA,IAAC,SAAA,CACG,IAAKU,EACL,cAAahC,EAAS,OAAS,OAC/B,UAAWc,EACX,MAAOI,EACN,GAAGe,EAEH,SAAAd,CAAA,CAAA,CAGb,EAEA5B,EAAO,YAAc"}