{"version":3,"sources":["../src/ButtonSegmented/ButtonSegmented.tsx"],"sourcesContent":["import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface ButtonSegmentedItem {\n  /**\n   * The label text for the button\n   */\n  label: string;\n  /**\n   * Optional icon to display before the label\n   */\n  icon?: React.ReactNode;\n  /**\n   * Optional value identifier for the button\n   */\n  value?: string;\n}\n\nexport interface ButtonSegmentedProps {\n  /**\n   * Array of button items (minimum 2, maximum 4)\n   */\n  items: ButtonSegmentedItem[];\n  /**\n   * The index of the currently active button\n   * @default 0\n   */\n  activeIndex?: number;\n  /**\n   * Callback when a button is clicked\n   */\n  onChange?: (index: number, item: ButtonSegmentedItem) => void;\n  /**\n   * Additional CSS class name\n   */\n  className?: string;\n  /**\n   * Additional inline styles\n   */\n  style?: React.CSSProperties;\n}\n\n// Arbor Design System segmented button styles\nconst segmentedStyles = {\n  container: {\n    display: 'inline-flex',\n    alignItems: 'center',\n    gap: '8px',\n    padding: '8px',\n    backgroundColor: '#ffffff',\n    border: '1px solid #efefef',\n    borderRadius: '99px',\n    fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n  },\n  button: {\n    base: {\n      display: 'inline-flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      gap: '8px',\n      padding: '8px 16px',\n      borderRadius: '99px',\n      border: 'none',\n      cursor: 'pointer',\n      fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n      fontSize: '13px',\n      fontWeight: '600',\n      lineHeight: '1.5',\n      transition: 'all 0.15s ease-in-out',\n      outline: 'none',\n      whiteSpace: 'nowrap' as const,\n    },\n    default: {\n      backgroundColor: 'transparent',\n      color: '#595959',\n    },\n    hover: {\n      backgroundColor: '#f8f8f8',\n      color: '#2f2f2f',\n    },\n    active: {\n      backgroundColor: '#0e8a0e',\n      color: '#ffffff',\n    },\n    activeHover: {\n      backgroundColor: '#005700',\n      color: '#ffffff',\n    },\n  },\n};\n\n/**\n * ButtonSegmented component - Arbor Design System\n *\n * A segmented button group where one button is always active.\n * Supports 2-4 buttons with optional icons.\n *\n * @example\n * ```tsx\n * <ButtonSegmented\n *   items={[\n *     { label: 'Day' },\n *     { label: 'Week' },\n *     { label: 'Month' },\n *   ]}\n *   activeIndex={0}\n *   onChange={(index, item) => console.log(index, item)}\n * />\n * ```\n */\nexport const ButtonSegmented = React.forwardRef<HTMLDivElement, ButtonSegmentedProps>(\n  ({ items, activeIndex = 0, onChange, className, style, ...props }, ref) => {\n    const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null);\n\n    // Validate items count (2-4)\n    const validItems = items.slice(0, 4);\n    if (validItems.length < 2) {\n      console.warn('ButtonSegmented requires at least 2 items');\n    }\n\n    // Check if any item has an icon - if so, all should have icons\n    const hasIcons = validItems.some((item) => item.icon);\n\n    const handleClick = (index: number) => {\n      if (index !== activeIndex && onChange) {\n        onChange(index, validItems[index]);\n      }\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={clsx('arbor-button-segmented', className)}\n        style={{ ...segmentedStyles.container, ...style }}\n        role=\"group\"\n        aria-label=\"Segmented button group\"\n        {...props}\n      >\n        {validItems.map((item, index) => {\n          const isActive = index === activeIndex;\n          const isHovered = hoveredIndex === index;\n\n          let buttonStyle: React.CSSProperties = {\n            ...segmentedStyles.button.base,\n          };\n\n          if (isActive) {\n            buttonStyle = {\n              ...buttonStyle,\n              ...segmentedStyles.button.active,\n              ...(isHovered && segmentedStyles.button.activeHover),\n            };\n          } else {\n            buttonStyle = {\n              ...buttonStyle,\n              ...segmentedStyles.button.default,\n              ...(isHovered && segmentedStyles.button.hover),\n            };\n          }\n\n          return (\n            <button\n              key={item.value || index}\n              type=\"button\"\n              style={buttonStyle}\n              onClick={() => handleClick(index)}\n              onMouseEnter={() => setHoveredIndex(index)}\n              onMouseLeave={() => setHoveredIndex(null)}\n              aria-pressed={isActive}\n            >\n              {hasIcons && item.icon && (\n                <span\n                  style={{\n                    display: 'flex',\n                    alignItems: 'center',\n                    justifyContent: 'center',\n                    width: '16px',\n                    height: '16px',\n                  }}\n                >\n                  {item.icon}\n                </span>\n              )}\n              {item.label}\n            </button>\n          );\n        })}\n      </div>\n    );\n  }\n);\n\nButtonSegmented.displayName = 'ButtonSegmented';\n"],"mappings":"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","names":[]}