{"version":3,"sources":["../src/Button/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { clsx } from 'clsx';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'destructive' | 'destructive-secondary' | 'ghost';\nexport type ButtonSize = 'small' | 'medium';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  /**\n   * The visual style variant of the button\n   * @default 'primary'\n   */\n  variant?: ButtonVariant;\n  /**\n   * The size of the button\n   * @default 'medium'\n   */\n  size?: ButtonSize;\n  /**\n   * If true, the component will be rendered as a child element\n   * and merge its props with the child\n   */\n  asChild?: boolean;\n  /**\n   * The content of the button\n   */\n  children: React.ReactNode;\n}\n\n// Arbor Design System button styles\nconst buttonStyles = {\n  base: {\n    display: 'inline-flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    gap: '8px', // Consistent spacing between icon and text\n    fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n    fontWeight: '500',\n    borderRadius: '99px', // Pill shape\n    border: 'none',\n    cursor: 'pointer',\n    transition: 'all 0.2s ease-in-out',\n    outline: 'none',\n  },\n  variants: {\n    primary: {\n      backgroundColor: '#0e8a0e', // brand-600\n      color: '#ffffff',\n      ':hover': {\n        backgroundColor: '#005700', // brand-800\n      },\n      ':active': {\n        backgroundColor: '#024002', // brand-900\n      },\n      ':focus-visible': {\n        outline: '3px solid #3cad51', // brand-500\n        outlineOffset: '0px',\n      },\n      ':disabled': {\n        backgroundColor: '#b3b3b3', // grey-400\n        cursor: 'not-allowed',\n      },\n    },\n    secondary: {\n      backgroundColor: '#ffffff',\n      color: '#2f2f2f', // grey-900\n      border: '1px solid #d1d1d1', // grey-300\n      ':hover': {\n        backgroundColor: '#f8f8f8', // grey-050\n      },\n      ':active': {\n        backgroundColor: '#efefef', // grey-100\n      },\n      ':focus-visible': {\n        outline: '3px solid #3cad51', // brand-500\n        outlineOffset: '0px',\n      },\n      ':disabled': {\n        backgroundColor: '#f8f8f8',\n        color: '#b3b3b3',\n        cursor: 'not-allowed',\n      },\n    },\n    tertiary: {\n      backgroundColor: '#efefef', // grey-100\n      color: '#2f2f2f', // grey-900\n      ':hover': {\n        backgroundColor: '#dfdfdf', // grey-200\n      },\n      ':active': {\n        backgroundColor: '#d1d1d1', // grey-300\n      },\n      ':focus-visible': {\n        outline: '3px solid #3cad51', // brand-500\n        outlineOffset: '0px',\n      },\n      ':disabled': {\n        backgroundColor: '#f8f8f8', // grey-050\n        color: '#b3b3b3', // grey-400\n        cursor: 'not-allowed',\n      },\n    },\n    destructive: {\n      backgroundColor: '#c93232', // destructive-500\n      color: '#ffffff',\n      ':hover': {\n        backgroundColor: '#920a0a', // destructive-700\n      },\n      ':active': {\n        backgroundColor: '#610202', // destructive-800\n      },\n      ':focus-visible': {\n        outline: '3px solid #e86565', // destructive-300\n        outlineOffset: '0px',\n      },\n      ':disabled': {\n        backgroundColor: '#b3b3b3',\n        cursor: 'not-allowed',\n      },\n    },\n    'destructive-secondary': {\n      backgroundColor: '#ffffff',\n      color: '#a62323', // destructive-600\n      border: '1px solid #c93232', // destructive-500\n      ':hover': {\n        backgroundColor: '#a62323', // destructive-600\n        color: '#ffffff',\n        border: '1px solid #a62323',\n      },\n      ':active': {\n        backgroundColor: '#920a0a', // destructive-700\n        color: '#ffffff',\n        border: '1px solid #920a0a',\n      },\n      ':focus-visible': {\n        outline: '3px solid #3cad51', // brand-500 (green focus ring)\n        outlineOffset: '0px',\n      },\n      ':disabled': {\n        backgroundColor: '#ffffff',\n        color: '#b3b3b3',\n        border: '1px solid #d1d1d1',\n        cursor: 'not-allowed',\n      },\n    },\n    ghost: {\n      backgroundColor: 'transparent',\n      color: '#0b800b', // brand-700 for link style\n      textDecoration: 'underline',\n      ':hover': {\n        color: '#005700', // brand-800\n      },\n      ':active': {\n        color: '#024002', // brand-900\n      },\n      ':focus-visible': {\n        outline: '3px solid #3cad51',\n        outlineOffset: '2px',\n      },\n      ':disabled': {\n        color: '#b3b3b3',\n        cursor: 'not-allowed',\n      },\n    },\n  },\n  sizes: {\n    small: {\n      height: '32px',\n      fontSize: '13px',\n      padding: '8px 16px',\n    },\n    medium: {\n      height: '36px',\n      fontSize: '13px',\n      padding: '8px 16px',\n    },\n  },\n};\n\n/**\n * Button component - Arbor Design System\n *\n * A flexible button component with pill-shaped design following Arbor's design system.\n * Supports primary (green), secondary (outlined), destructive (red), and ghost (link-style) variants.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" size=\"medium\">\n *   Save Changes\n * </Button>\n * ```\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    {\n      variant = 'primary',\n      size = 'medium',\n      asChild = false,\n      className,\n      disabled,\n      style,\n      children,\n      onMouseEnter,\n      onMouseLeave,\n      onFocus,\n      onBlur,\n      ...props\n    },\n    ref\n  ) => {\n    const Comp = asChild ? Slot : 'button';\n    const [isHovered, setIsHovered] = React.useState(false);\n    const [isFocused, setIsFocused] = React.useState(false);\n\n    const variantStyles = buttonStyles.variants[variant];\n    const sizeStyles = buttonStyles.sizes[size];\n\n    const combinedStyle: React.CSSProperties = {\n      ...buttonStyles.base,\n      ...variantStyles,\n      ...sizeStyles,\n      ...(isHovered && !disabled && variantStyles[':hover']),\n      ...(isFocused && !disabled && variantStyles[':focus-visible']),\n      ...(disabled && variantStyles[':disabled']),\n      ...style,\n    };\n\n    const handleMouseEnter = (e: React.MouseEvent<HTMLButtonElement>) => {\n      setIsHovered(true);\n      onMouseEnter?.(e);\n    };\n\n    const handleMouseLeave = (e: React.MouseEvent<HTMLButtonElement>) => {\n      setIsHovered(false);\n      onMouseLeave?.(e);\n    };\n\n    const handleFocus = (e: React.FocusEvent<HTMLButtonElement>) => {\n      setIsFocused(true);\n      onFocus?.(e);\n    };\n\n    const handleBlur = (e: React.FocusEvent<HTMLButtonElement>) => {\n      setIsFocused(false);\n      onBlur?.(e);\n    };\n\n    return (\n      <Comp\n        ref={ref}\n        className={clsx('arbor-button', className)}\n        style={combinedStyle}\n        disabled={disabled}\n        onMouseEnter={handleMouseEnter}\n        onMouseLeave={handleMouseLeave}\n        onFocus={handleFocus}\n        onBlur={handleBlur}\n        {...props}\n      >\n        {children}\n      </Comp>\n    );\n  }\n);\n\nButton.displayName = 'Button';\n"],"mappings":"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","names":[]}