{"version":3,"sources":["../src/Checkbox/Checkbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { Check, Minus } from 'lucide-react';\n\nexport interface CheckboxProps {\n  /**\n   * The label for the checkbox\n   */\n  label?: string;\n  /**\n   * Whether the checkbox is checked\n   */\n  checked?: boolean;\n  /**\n   * Callback when checked state changes\n   */\n  onChange?: (checked: boolean) => void;\n  /**\n   * Whether the checkbox is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Custom style\n   */\n  style?: React.CSSProperties;\n  /**\n   * Test ID for testing\n   */\n  'data-testid'?: string;\n  /**\n   * Name attribute for form submission\n   */\n  name?: string;\n  /**\n   * Value attribute for form submission\n   */\n  value?: string;\n  /**\n   * Indeterminate state (shows minus icon)\n   */\n  indeterminate?: boolean;\n}\n\nconst checkboxStyles: React.CSSProperties = {\n  width: '16px',\n  height: '16px',\n  border: '1px solid #7e7e7e', // grey-500\n  borderRadius: '4px',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  cursor: 'pointer',\n  transition: 'all 0.2s ease-in-out',\n  flexShrink: 0,\n  backgroundColor: '#ffffff',\n};\n\nconst checkedStyles: React.CSSProperties = {\n  backgroundColor: '#0e8a0e', // brand-600\n  border: '1px solid #0e8a0e',\n};\n\nconst checkedHoverStyles: React.CSSProperties = {\n  backgroundColor: '#005700', // brand-800\n  border: '1px solid #005700',\n};\n\nconst uncheckedHoverStyles: React.CSSProperties = {\n  border: '1px solid #474747', // grey-700\n};\n\nconst labelStyles: React.CSSProperties = {\n  fontSize: '13px',\n  color: '#2f2f2f',\n  cursor: 'pointer',\n  userSelect: 'none' as const,\n  fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst wrapperStyles: React.CSSProperties = {\n  display: 'flex',\n  alignItems: 'center',\n  gap: '8px',\n};\n\n/**\n * Checkbox component - Arbor Design System\n *\n * A checkbox input with label support.\n */\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n  (\n    {\n      label,\n      checked = false,\n      onChange,\n      disabled = false,\n      className,\n      style,\n      'data-testid': dataTestId,\n      name,\n      value,\n      indeterminate = false,\n    },\n    ref\n  ) => {\n    const [isFocused, setIsFocused] = React.useState(false);\n    const [isHovered, setIsHovered] = React.useState(false);\n    const checkboxId = React.useId();\n    const innerRef = React.useRef<HTMLInputElement | null>(null);\n\n    // Merge refs\n    React.useEffect(() => {\n      const node = innerRef.current;\n      if (node) {\n        // Set indeterminate property on the native input element\n        node.indeterminate = indeterminate;\n\n        // Forward to external ref if provided\n        if (typeof ref === 'function') {\n          ref(node);\n        } else if (ref) {\n          (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n        }\n      }\n    }, [indeterminate, ref]);\n\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      if (!disabled) {\n        onChange?.(e.target.checked);\n      }\n    };\n\n    const boxStyle: React.CSSProperties = {\n      ...checkboxStyles,\n      ...((checked || indeterminate) && !disabled && checkedStyles),\n      ...(isHovered && !disabled && !(checked || indeterminate) && uncheckedHoverStyles),\n      ...(isHovered && !disabled && (checked || indeterminate) && checkedHoverStyles),\n      ...(disabled && !checked && !indeterminate && { backgroundColor: '#efefef', border: '1px solid #b3b3b3' }),\n      ...(disabled && (checked || indeterminate) && { backgroundColor: '#b3b3b3', border: '1px solid #b3b3b3' }),\n      ...(isFocused && !disabled && {\n        boxShadow: '0px 0px 0px 3px #3cad51',\n      }),\n    };\n\n    const checkmarkColor = '#ffffff';\n\n    return (\n      <div\n        className={clsx('arbor-checkbox-wrapper', className)}\n        style={{ ...wrapperStyles, ...style }}\n        data-testid={dataTestId}\n      >\n        <input\n          ref={innerRef}\n          id={checkboxId}\n          type=\"checkbox\"\n          checked={checked}\n          onChange={handleChange}\n          onFocus={() => setIsFocused(true)}\n          onBlur={() => setIsFocused(false)}\n          disabled={disabled}\n          name={name}\n          value={value}\n          style={{\n            position: 'absolute',\n            opacity: 0,\n            width: 0,\n            height: 0,\n          }}\n          aria-checked={indeterminate ? 'mixed' : checked}\n        />\n        <label\n          htmlFor={checkboxId}\n          onMouseEnter={() => !disabled && setIsHovered(true)}\n          onMouseLeave={() => !disabled && setIsHovered(false)}\n          style={{\n            display: 'flex',\n            alignItems: 'center',\n            gap: '8px',\n            cursor: disabled ? 'not-allowed' : 'pointer',\n          }}\n        >\n          <div style={boxStyle}>\n            {(checked || indeterminate) && (\n              indeterminate ? (\n                <Minus size={12} color={checkmarkColor} strokeWidth={3} />\n              ) : (\n                <Check size={16} color={checkmarkColor} strokeWidth={3} />\n              )\n            )}\n          </div>\n          {label && (\n            <span\n              style={{\n                ...labelStyles,\n                color: disabled ? '#7e7e7e' : '#2f2f2f',\n                cursor: disabled ? 'not-allowed' : 'pointer',\n              }}\n            >\n              {label}\n            </span>\n          )}\n        </label>\n      </div>\n    );\n  }\n);\n\nCheckbox.displayName = 'Checkbox';\n"],"mappings":"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","names":[]}