@tonyarbor/components 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Banner.d.mts +59 -0
- package/dist/Banner.d.ts +59 -0
- package/dist/Banner.js +222 -0
- package/dist/Banner.js.map +1 -0
- package/dist/Banner.mjs +7 -0
- package/dist/Banner.mjs.map +1 -0
- package/dist/Checkbox.d.mts +52 -0
- package/dist/Checkbox.d.ts +52 -0
- package/dist/Checkbox.js +194 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/Checkbox.mjs +7 -0
- package/dist/Checkbox.mjs.map +1 -0
- package/dist/Combobox.d.mts +67 -0
- package/dist/Combobox.d.ts +67 -0
- package/dist/Combobox.js +329 -0
- package/dist/Combobox.js.map +1 -0
- package/dist/Combobox.mjs +7 -0
- package/dist/Combobox.mjs.map +1 -0
- package/dist/DatePicker.d.mts +68 -0
- package/dist/DatePicker.d.ts +68 -0
- package/dist/DatePicker.js +490 -0
- package/dist/DatePicker.js.map +1 -0
- package/dist/DatePicker.mjs +7 -0
- package/dist/DatePicker.mjs.map +1 -0
- package/dist/NumericInput.d.mts +68 -0
- package/dist/NumericInput.d.ts +68 -0
- package/dist/NumericInput.js +319 -0
- package/dist/NumericInput.js.map +1 -0
- package/dist/NumericInput.mjs +7 -0
- package/dist/NumericInput.mjs.map +1 -0
- package/dist/Pagination.d.mts +36 -0
- package/dist/Pagination.d.ts +36 -0
- package/dist/Pagination.js +301 -0
- package/dist/Pagination.js.map +1 -0
- package/dist/Pagination.mjs +7 -0
- package/dist/Pagination.mjs.map +1 -0
- package/dist/Radio.d.mts +48 -0
- package/dist/Radio.d.ts +48 -0
- package/dist/Radio.js +194 -0
- package/dist/Radio.js.map +1 -0
- package/dist/Radio.mjs +7 -0
- package/dist/Radio.mjs.map +1 -0
- package/dist/Table.d.mts +80 -0
- package/dist/Table.d.ts +80 -0
- package/dist/Table.js +347 -0
- package/dist/Table.js.map +1 -0
- package/dist/Table.mjs +8 -0
- package/dist/Table.mjs.map +1 -0
- package/dist/TableControls.d.mts +76 -0
- package/dist/TableControls.d.ts +76 -0
- package/dist/TableControls.js +461 -0
- package/dist/TableControls.js.map +1 -0
- package/dist/TableControls.mjs +7 -0
- package/dist/TableControls.mjs.map +1 -0
- package/dist/TableFooterPagination.d.mts +56 -0
- package/dist/TableFooterPagination.d.ts +56 -0
- package/dist/TableFooterPagination.js +499 -0
- package/dist/TableFooterPagination.js.map +1 -0
- package/dist/TableFooterPagination.mjs +7 -0
- package/dist/TableFooterPagination.mjs.map +1 -0
- package/dist/Tabs.d.mts +50 -0
- package/dist/Tabs.d.ts +50 -0
- package/dist/Tabs.js +187 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tabs.mjs +7 -0
- package/dist/Tabs.mjs.map +1 -0
- package/dist/TextArea.d.mts +64 -0
- package/dist/TextArea.d.ts +64 -0
- package/dist/TextArea.js +171 -0
- package/dist/TextArea.js.map +1 -0
- package/dist/TextArea.mjs +7 -0
- package/dist/TextArea.mjs.map +1 -0
- package/dist/Toast.d.mts +48 -0
- package/dist/Toast.d.ts +48 -0
- package/dist/Toast.js +169 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Toast.mjs +7 -0
- package/dist/Toast.mjs.map +1 -0
- package/dist/Toggle.d.mts +48 -0
- package/dist/Toggle.d.ts +48 -0
- package/dist/Toggle.js +291 -0
- package/dist/Toggle.js.map +1 -0
- package/dist/Toggle.mjs +7 -0
- package/dist/Toggle.mjs.map +1 -0
- package/dist/Tooltip.d.mts +32 -0
- package/dist/Tooltip.d.ts +32 -0
- package/dist/Tooltip.js +109 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/Tooltip.mjs +7 -0
- package/dist/Tooltip.mjs.map +1 -0
- package/dist/chunk-52TG3BFX.mjs +463 -0
- package/dist/chunk-52TG3BFX.mjs.map +1 -0
- package/dist/chunk-5BUXFTPW.mjs +283 -0
- package/dist/chunk-5BUXFTPW.mjs.map +1 -0
- package/dist/chunk-7OWLBYNM.mjs +293 -0
- package/dist/chunk-7OWLBYNM.mjs.map +1 -0
- package/dist/chunk-AI2U34CF.mjs +159 -0
- package/dist/chunk-AI2U34CF.mjs.map +1 -0
- package/dist/chunk-C25FFMRQ.mjs +255 -0
- package/dist/chunk-C25FFMRQ.mjs.map +1 -0
- package/dist/chunk-CUTYEIFE.mjs +158 -0
- package/dist/chunk-CUTYEIFE.mjs.map +1 -0
- package/dist/chunk-DULH2KRW.mjs +133 -0
- package/dist/chunk-DULH2KRW.mjs.map +1 -0
- package/dist/chunk-G5NVKF2G.mjs +434 -0
- package/dist/chunk-G5NVKF2G.mjs.map +1 -0
- package/dist/chunk-M6DVBEEL.mjs +158 -0
- package/dist/chunk-M6DVBEEL.mjs.map +1 -0
- package/dist/chunk-MBUMR2XJ.mjs +135 -0
- package/dist/chunk-MBUMR2XJ.mjs.map +1 -0
- package/dist/chunk-MNH2TGUX.mjs +73 -0
- package/dist/chunk-MNH2TGUX.mjs.map +1 -0
- package/dist/chunk-RRMG2SSZ.mjs +265 -0
- package/dist/chunk-RRMG2SSZ.mjs.map +1 -0
- package/dist/chunk-U4JXKZZG.mjs +186 -0
- package/dist/chunk-U4JXKZZG.mjs.map +1 -0
- package/dist/chunk-W55QJIAN.mjs +467 -0
- package/dist/chunk-W55QJIAN.mjs.map +1 -0
- package/dist/chunk-YV4OXFIM.mjs +151 -0
- package/dist/chunk-YV4OXFIM.mjs.map +1 -0
- package/dist/index.d.mts +22 -1
- package/dist/index.d.ts +22 -1
- package/dist/index.js +3559 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +61 -1
- package/package.json +81 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/Button/Button.tsx","../src/Card/Card.tsx","../src/Input/Input.tsx","../src/Tag/Tag.tsx"],"sourcesContent":["/**\n * Arbor Design System - React Components\n *\n * A collection of accessible, customizable React components\n * built with design tokens from @arbor-ds/tokens\n */\n\nexport { Button } from './Button';\nexport type { ButtonProps } from './Button';\n\nexport { Card } from './Card';\nexport type { CardProps } from './Card';\n\nexport { Input } from './Input';\nexport type { InputProps } from './Input';\n\nexport { Tag } from './Tag';\nexport type { TagProps } from './Tag';\n\nexport type {\n ButtonVariant,\n ButtonSize,\n InputSize,\n ValidationState,\n CardPadding,\n TagVariant,\n} from './types';\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { clsx } from 'clsx';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'destructive' | '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 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 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 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","import * as React from 'react';\nimport { clsx } from 'clsx';\n\ntype PaddingVariant = 'none' | 'small' | 'medium' | 'large';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The padding variant of the card\n * @default 'large'\n */\n padding?: PaddingVariant;\n /**\n * The content of the card\n */\n children: React.ReactNode;\n}\n\n// Arbor Design System card styles\nconst cardStyles = {\n base: {\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n border: '1px solid #efefef', // grey-100 - subtle border\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n },\n padding: {\n none: {\n padding: '0',\n },\n small: {\n padding: '8px', // small spacing\n },\n medium: {\n padding: '16px', // large spacing\n },\n large: {\n padding: '24px', // xlarge spacing\n },\n },\n};\n\n/**\n * Card component - Arbor Design System\n *\n * A container component that provides consistent styling for content cards.\n * Uses subtle borders rather than shadows, following Arbor's minimal design approach.\n *\n * @example\n * ```tsx\n * <Card padding=\"large\">\n * <h2>Card Title</h2>\n * <p>Card content goes here</p>\n * </Card>\n * ```\n */\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ padding = 'large', className, style, children, ...props }, ref) => {\n const paddingStyles = cardStyles.padding[padding];\n\n const combinedStyle: React.CSSProperties = {\n ...cardStyles.base,\n ...paddingStyles,\n ...style,\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-card', className)}\n style={combinedStyle}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCard.displayName = 'Card';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport type InputSize = 'small' | 'medium';\nexport type ValidationState = 'default' | 'error' | 'success';\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /**\n * The size of the input\n * @default 'medium'\n */\n size?: InputSize;\n /**\n * The validation state of the input\n * @default 'default'\n */\n state?: ValidationState;\n /**\n * Optional label for the input\n */\n label?: string;\n /**\n * Optional error message to display\n */\n error?: string;\n /**\n * Optional helper text to display\n */\n helperText?: string;\n}\n\n// Arbor Design System input styles\nconst inputStyles = {\n base: {\n width: '100%',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n transition: 'all 0.2s ease-in-out',\n outline: 'none',\n margin: '0',\n display: 'block',\n },\n sizes: {\n small: {\n height: '32px',\n fontSize: '13px',\n padding: '8px',\n },\n medium: {\n height: '36px',\n fontSize: '13px',\n padding: '8px',\n },\n },\n states: {\n default: {\n border: '1px solid #d1d1d1', // grey-300\n color: '#2f2f2f', // grey-900\n ':focus': {\n borderColor: '#3cad51', // brand-500\n outline: '3px solid rgba(60, 173, 81, 0.2)',\n },\n ':disabled': {\n backgroundColor: '#f8f8f8', // grey-050\n borderColor: '#efefef', // grey-100\n color: '#7e7e7e', // grey-500\n cursor: 'not-allowed',\n },\n },\n error: {\n border: '1px solid #c93232', // destructive-500\n color: '#2f2f2f',\n ':focus': {\n borderColor: '#c93232',\n outline: '3px solid rgba(201, 50, 50, 0.2)',\n },\n },\n success: {\n border: '1px solid #16a33d', // success-500\n color: '#2f2f2f',\n ':focus': {\n borderColor: '#16a33d',\n outline: '3px solid rgba(22, 163, 61, 0.2)',\n },\n },\n },\n};\n\nconst labelStyles: React.CSSProperties = {\n display: 'block',\n fontSize: '13px',\n fontWeight: '600',\n color: '#2f2f2f', // grey-900\n marginBottom: '4px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst helperTextStyles: React.CSSProperties = {\n fontSize: '13px',\n margin: '0',\n marginTop: '2px',\n color: '#595959', // grey-600\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n lineHeight: '1.4',\n};\n\nconst errorTextStyles: React.CSSProperties = {\n ...helperTextStyles,\n color: '#a62323', // destructive-600 (accessible)\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n};\n\n/**\n * Input component - Arbor Design System\n *\n * A text input component following Arbor's design specifications.\n * Supports labels, validation states (error/success), and helper text.\n * Uses 8px border radius and Inter font family.\n *\n * @example\n * ```tsx\n * <Input\n * label=\"Email\"\n * type=\"email\"\n * placeholder=\"you@example.com\"\n * helperText=\"We'll never share your email\"\n * />\n * ```\n */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = 'medium',\n state = 'default',\n label,\n error,\n helperText,\n className,\n style,\n disabled,\n ...props\n },\n ref\n ) => {\n const inputId = React.useId();\n const helperTextId = React.useId();\n const errorId = React.useId();\n const [isFocused, setIsFocused] = React.useState(false);\n\n const sizeStyles = inputStyles.sizes[size];\n const stateStyles = inputStyles.states[error ? 'error' : state];\n\n const inputStyle: React.CSSProperties = {\n ...inputStyles.base,\n ...sizeStyles,\n ...stateStyles,\n ...(isFocused && !disabled && stateStyles[':focus']),\n ...(disabled && inputStyles.states.default[':disabled']),\n };\n\n return (\n <div className={clsx('arbor-input-wrapper', className)} style={style}>\n {label && (\n <label htmlFor={inputId} style={labelStyles}>\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className=\"arbor-input\"\n style={inputStyle}\n disabled={disabled}\n aria-invalid={error ? 'true' : 'false'}\n aria-describedby={\n error ? errorId : helperText ? helperTextId : undefined\n }\n onFocus={(e) => {\n setIsFocused(true);\n props.onFocus?.(e);\n }}\n onBlur={(e) => {\n setIsFocused(false);\n props.onBlur?.(e);\n }}\n {...props}\n />\n {error && (\n <p id={errorId} style={errorTextStyles} role=\"alert\">\n {error}\n </p>\n )}\n {!error && helperText && (\n <p id={helperTextId} style={helperTextStyles}>\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport type TagVariant = 'default' | 'success' | 'error' | 'info' | 'neutral';\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * The visual style variant of the tag\n * @default 'default'\n */\n variant?: TagVariant;\n /**\n * The content of the tag\n */\n children: React.ReactNode;\n}\n\n// Arbor Design System tag styles\nconst tagStyles = {\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 8px',\n borderRadius: '99px', // Pill shape\n fontSize: '11px', // Type 1\n fontWeight: '600',\n gap: '4px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n lineHeight: '1.2',\n },\n variants: {\n default: {\n backgroundColor: '#fff4e5', // caution-100\n color: '#975a00', // caution-700\n },\n success: {\n backgroundColor: '#e5f9eb', // success-100\n color: '#005a19', // success-800\n },\n error: {\n backgroundColor: '#ffeaea', // destructive-100\n color: '#a62323', // destructive-600\n },\n info: {\n backgroundColor: '#e5f4ff', // info-100\n color: '#003d80', // info-800\n },\n neutral: {\n backgroundColor: '#f8f8f8', // grey-050\n color: '#595959', // grey-600\n },\n },\n};\n\n/**\n * Tag component - Arbor Design System\n *\n * A label component for categorization and status indication.\n * Uses pill shape (99px radius) with semantic color variants.\n *\n * @example\n * ```tsx\n * <Tag variant=\"success\">Active</Tag>\n * <Tag variant=\"error\">Overdue</Tag>\n * <Tag variant=\"info\">New</Tag>\n * ```\n */\nexport const Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n ({ variant = 'default', className, style, children, ...props }, ref) => {\n const variantStyles = tagStyles.variants[variant];\n\n const combinedStyle: React.CSSProperties = {\n ...tagStyles.base,\n ...variantStyles,\n ...style,\n };\n\n return (\n <span\n ref={ref}\n className={clsx('arbor-tag', `arbor-tag--${variant}`, className)}\n style={combinedStyle}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nTag.displayName = 'Tag';\n"],"mappings":"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","names":["React","import_clsx","import_jsx_runtime","React","import_clsx","import_jsx_runtime","React","import_clsx","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/Button/Button.tsx","../src/Card/Card.tsx","../src/Input/Input.tsx","../src/Tag/Tag.tsx","../src/Combobox/Combobox.tsx","../src/NumericInput/NumericInput.tsx","../src/Checkbox/Checkbox.tsx","../src/Radio/Radio.tsx","../src/DatePicker/DatePicker.tsx","../src/Toast/Toast.tsx","../src/Tooltip/Tooltip.tsx","../src/Toggle/Toggle.tsx","../src/TextArea/TextArea.tsx","../src/Tabs/Tabs.tsx","../src/Banner/Banner.tsx","../src/Pagination/Pagination.tsx","../src/TableFooterPagination/TableFooterPagination.tsx","../src/TableControls/TableControls.tsx","../src/Table/Table.tsx"],"sourcesContent":["/**\n * Arbor Design System - React Components\n *\n * A collection of accessible, customizable React components\n * built with design tokens from @arbor-ds/tokens\n */\n\nexport { Button } from './Button';\nexport type { ButtonProps } from './Button';\n\nexport { Card } from './Card';\nexport type { CardProps } from './Card';\n\nexport { Input } from './Input';\nexport type { InputProps } from './Input';\n\nexport { Tag } from './Tag';\nexport type { TagProps } from './Tag';\n\nexport { Combobox } from './Combobox';\nexport type { ComboboxProps } from './Combobox';\n\nexport { NumericInput } from './NumericInput';\nexport type { NumericInputProps } from './NumericInput';\n\nexport { Checkbox } from './Checkbox';\nexport type { CheckboxProps } from './Checkbox';\n\nexport { Radio } from './Radio';\nexport type { RadioProps } from './Radio';\n\nexport { DatePicker } from './DatePicker';\nexport type { DatePickerProps } from './DatePicker';\n\nexport { Toast } from './Toast';\nexport type { ToastProps } from './Toast';\n\nexport { Tooltip } from './Tooltip';\nexport type { TooltipProps } from './Tooltip';\n\nexport { Toggle } from './Toggle';\nexport type { ToggleProps } from './Toggle';\n\nexport { TextArea } from './TextArea';\nexport type { TextAreaProps } from './TextArea';\n\nexport { Tabs } from './Tabs';\nexport type { TabsProps, TabItem } from './Tabs';\n\nexport { Banner } from './Banner';\nexport type { BannerProps, BannerVariant } from './Banner';\n\nexport { Pagination } from './Pagination';\nexport type { PaginationProps } from './Pagination';\n\nexport { TableFooterPagination } from './TableFooterPagination';\nexport type { TableFooterPaginationProps } from './TableFooterPagination';\n\nexport { TableControls } from './TableControls';\nexport type { TableControlsProps } from './TableControls';\n\nexport { Table } from './Table';\nexport type { TableProps, TableColumn, TableRow } from './Table';\n\nexport type {\n ButtonVariant,\n ButtonSize,\n InputSize,\n ValidationState,\n CardPadding,\n TagVariant,\n ComboboxState,\n ComboboxOption,\n NumericInputState,\n} from './types';\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { clsx } from 'clsx';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'destructive' | '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 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 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 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","import * as React from 'react';\nimport { clsx } from 'clsx';\n\ntype PaddingVariant = 'none' | 'small' | 'medium' | 'large';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The padding variant of the card\n * @default 'large'\n */\n padding?: PaddingVariant;\n /**\n * The content of the card\n */\n children: React.ReactNode;\n}\n\n// Arbor Design System card styles\nconst cardStyles = {\n base: {\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n border: '1px solid #efefef', // grey-100 - subtle border\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n },\n padding: {\n none: {\n padding: '0',\n },\n small: {\n padding: '8px', // small spacing\n },\n medium: {\n padding: '16px', // large spacing\n },\n large: {\n padding: '24px', // xlarge spacing\n },\n },\n};\n\n/**\n * Card component - Arbor Design System\n *\n * A container component that provides consistent styling for content cards.\n * Uses subtle borders rather than shadows, following Arbor's minimal design approach.\n *\n * @example\n * ```tsx\n * <Card padding=\"large\">\n * <h2>Card Title</h2>\n * <p>Card content goes here</p>\n * </Card>\n * ```\n */\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ padding = 'large', className, style, children, ...props }, ref) => {\n const paddingStyles = cardStyles.padding[padding];\n\n const combinedStyle: React.CSSProperties = {\n ...cardStyles.base,\n ...paddingStyles,\n ...style,\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-card', className)}\n style={combinedStyle}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCard.displayName = 'Card';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport type InputSize = 'small' | 'medium';\nexport type ValidationState = 'default' | 'error' | 'success';\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /**\n * The size of the input\n * @default 'medium'\n */\n size?: InputSize;\n /**\n * The validation state of the input\n * @default 'default'\n */\n state?: ValidationState;\n /**\n * Optional label for the input\n */\n label?: string;\n /**\n * Optional error message to display\n */\n error?: string;\n /**\n * Optional helper text to display\n */\n helperText?: string;\n}\n\n// Arbor Design System input styles\nconst inputStyles = {\n base: {\n width: '100%',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n transition: 'all 0.2s ease-in-out',\n outline: 'none',\n margin: '0',\n display: 'block',\n },\n sizes: {\n small: {\n height: '32px',\n fontSize: '13px',\n padding: '8px',\n },\n medium: {\n height: '36px',\n fontSize: '13px',\n padding: '8px',\n },\n },\n states: {\n default: {\n border: '1px solid #d1d1d1', // grey-300\n color: '#2f2f2f', // grey-900\n ':focus': {\n borderColor: '#3cad51', // brand-500\n outline: '3px solid rgba(60, 173, 81, 0.2)',\n },\n ':disabled': {\n backgroundColor: '#f8f8f8', // grey-050\n borderColor: '#efefef', // grey-100\n color: '#7e7e7e', // grey-500\n cursor: 'not-allowed',\n },\n },\n error: {\n border: '1px solid #c93232', // destructive-500\n color: '#2f2f2f',\n ':focus': {\n borderColor: '#c93232',\n outline: '3px solid rgba(201, 50, 50, 0.2)',\n },\n },\n success: {\n border: '1px solid #16a33d', // success-500\n color: '#2f2f2f',\n ':focus': {\n borderColor: '#16a33d',\n outline: '3px solid rgba(22, 163, 61, 0.2)',\n },\n },\n },\n};\n\nconst labelStyles: React.CSSProperties = {\n display: 'block',\n fontSize: '13px',\n fontWeight: '600',\n color: '#2f2f2f', // grey-900\n marginBottom: '4px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst helperTextStyles: React.CSSProperties = {\n fontSize: '13px',\n margin: '0',\n marginTop: '2px',\n color: '#595959', // grey-600\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n lineHeight: '1.4',\n};\n\nconst errorTextStyles: React.CSSProperties = {\n ...helperTextStyles,\n color: '#a62323', // destructive-600 (accessible)\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n};\n\n/**\n * Input component - Arbor Design System\n *\n * A text input component following Arbor's design specifications.\n * Supports labels, validation states (error/success), and helper text.\n * Uses 8px border radius and Inter font family.\n *\n * @example\n * ```tsx\n * <Input\n * label=\"Email\"\n * type=\"email\"\n * placeholder=\"you@example.com\"\n * helperText=\"We'll never share your email\"\n * />\n * ```\n */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = 'medium',\n state = 'default',\n label,\n error,\n helperText,\n className,\n style,\n disabled,\n ...props\n },\n ref\n ) => {\n const inputId = React.useId();\n const helperTextId = React.useId();\n const errorId = React.useId();\n const [isFocused, setIsFocused] = React.useState(false);\n\n const sizeStyles = inputStyles.sizes[size];\n const stateStyles = inputStyles.states[error ? 'error' : state];\n\n const inputStyle: React.CSSProperties = {\n ...inputStyles.base,\n ...sizeStyles,\n ...stateStyles,\n ...(isFocused && !disabled && stateStyles[':focus']),\n ...(disabled && inputStyles.states.default[':disabled']),\n };\n\n return (\n <div className={clsx('arbor-input-wrapper', className)} style={style}>\n {label && (\n <label htmlFor={inputId} style={labelStyles}>\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className=\"arbor-input\"\n style={inputStyle}\n disabled={disabled}\n aria-invalid={error ? 'true' : 'false'}\n aria-describedby={\n error ? errorId : helperText ? helperTextId : undefined\n }\n onFocus={(e) => {\n setIsFocused(true);\n props.onFocus?.(e);\n }}\n onBlur={(e) => {\n setIsFocused(false);\n props.onBlur?.(e);\n }}\n {...props}\n />\n {error && (\n <p id={errorId} style={errorTextStyles} role=\"alert\">\n {error}\n </p>\n )}\n {!error && helperText && (\n <p id={helperTextId} style={helperTextStyles}>\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport type TagVariant = 'default' | 'success' | 'error' | 'info' | 'neutral';\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * The visual style variant of the tag\n * @default 'default'\n */\n variant?: TagVariant;\n /**\n * The content of the tag\n */\n children: React.ReactNode;\n}\n\n// Arbor Design System tag styles\nconst tagStyles = {\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 8px',\n borderRadius: '99px', // Pill shape\n fontSize: '11px', // Type 1\n fontWeight: '600',\n gap: '4px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n lineHeight: '1.2',\n },\n variants: {\n default: {\n backgroundColor: '#fff4e5', // caution-100\n color: '#975a00', // caution-700\n },\n success: {\n backgroundColor: '#e5f9eb', // success-100\n color: '#005a19', // success-800\n },\n error: {\n backgroundColor: '#ffeaea', // destructive-100\n color: '#a62323', // destructive-600\n },\n info: {\n backgroundColor: '#e5f4ff', // info-100\n color: '#003d80', // info-800\n },\n neutral: {\n backgroundColor: '#f8f8f8', // grey-050\n color: '#595959', // grey-600\n },\n },\n};\n\n/**\n * Tag component - Arbor Design System\n *\n * A label component for categorization and status indication.\n * Uses pill shape (99px radius) with semantic color variants.\n *\n * @example\n * ```tsx\n * <Tag variant=\"success\">Active</Tag>\n * <Tag variant=\"error\">Overdue</Tag>\n * <Tag variant=\"info\">New</Tag>\n * ```\n */\nexport const Tag = React.forwardRef<HTMLSpanElement, TagProps>(\n ({ variant = 'default', className, style, children, ...props }, ref) => {\n const variantStyles = tagStyles.variants[variant];\n\n const combinedStyle: React.CSSProperties = {\n ...tagStyles.base,\n ...variantStyles,\n ...style,\n };\n\n return (\n <span\n ref={ref}\n className={clsx('arbor-tag', `arbor-tag--${variant}`, className)}\n style={combinedStyle}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nTag.displayName = 'Tag';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { X, ChevronDown, Check } from 'lucide-react';\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n};\n\nexport type ComboboxState = 'default' | 'error' | 'success';\n\nexport interface ComboboxProps {\n /**\n * The label for the combobox\n */\n label?: string;\n /**\n * The placeholder text\n */\n placeholder?: string;\n /**\n * The available options\n */\n options: ComboboxOption[];\n /**\n * The selected value\n */\n value?: string;\n /**\n * Callback when value changes\n */\n onChange?: (value: string | undefined) => void;\n /**\n * The validation state\n * @default 'default'\n */\n state?: ComboboxState;\n /**\n * Optional error message\n */\n error?: string;\n /**\n * Optional helper text\n */\n helperText?: string;\n /**\n * Whether the combobox 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\nconst comboboxStyles = {\n base: {\n width: '100%',\n height: '36px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n transition: 'all 0.2s ease-in-out',\n outline: 'none',\n fontSize: '13px',\n padding: '8px',\n paddingRight: '32px',\n margin: '0',\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n position: 'relative' as const,\n },\n states: {\n default: {\n border: '1px solid #d1d1d1', // grey-300\n color: '#2f2f2f', // grey-900\n },\n defaultFocus: {\n borderColor: '#3cad51', // brand-500\n outline: '3px solid rgba(60, 173, 81, 0.2)',\n },\n error: {\n border: '1px solid #c93232', // destructive-500\n color: '#2f2f2f',\n },\n errorFocus: {\n borderColor: '#c93232',\n outline: '3px solid rgba(201, 50, 50, 0.2)',\n },\n success: {\n border: '1px solid #16a33d', // success-500\n color: '#2f2f2f',\n },\n successFocus: {\n borderColor: '#16a33d',\n outline: '3px solid rgba(22, 163, 61, 0.2)',\n },\n disabled: {\n backgroundColor: '#f8f8f8', // grey-050\n borderColor: '#efefef', // grey-100\n color: '#7e7e7e', // grey-500\n cursor: 'not-allowed',\n },\n },\n};\n\nconst labelStyles: React.CSSProperties = {\n display: 'block',\n fontSize: '13px',\n fontWeight: '600',\n color: '#2f2f2f',\n marginBottom: '4px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst helperTextStyles: React.CSSProperties = {\n fontSize: '13px',\n margin: '0',\n marginTop: '2px',\n color: '#595959',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n lineHeight: '1.4',\n};\n\nconst errorTextStyles: React.CSSProperties = {\n ...helperTextStyles,\n color: '#a62323', // destructive-600\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n};\n\nconst dropdownStyles: React.CSSProperties = {\n position: 'absolute',\n top: 'calc(100% + 4px)',\n left: '0',\n right: '0',\n backgroundColor: '#ffffff',\n border: '1px solid #d1d1d1',\n borderRadius: '8px',\n maxHeight: '200px',\n overflowY: 'auto',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n zIndex: 1000,\n};\n\nconst optionStyles: React.CSSProperties = {\n padding: '8px 12px',\n fontSize: '13px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n color: '#2f2f2f', // grey-900\n};\n\n/**\n * Combobox component - Arbor Design System\n *\n * A searchable select/autocomplete component with filtering.\n * Supports labels, validation states, and helper text.\n */\nexport const Combobox = React.forwardRef<HTMLDivElement, ComboboxProps>(\n (\n {\n label,\n placeholder = 'default-text',\n options,\n value,\n onChange,\n state = 'default',\n error,\n helperText,\n disabled = false,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [searchQuery, setSearchQuery] = React.useState('');\n const [isFocused, setIsFocused] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n\n const comboboxId = React.useId();\n const helperTextId = React.useId();\n const errorId = React.useId();\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n return options.filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n );\n }, [options, searchQuery]);\n\n // Close dropdown when clicking outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n wrapperRef.current &&\n !wrapperRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(e.target.value);\n if (!isOpen) setIsOpen(true);\n };\n\n const handleSelectOption = (optionValue: string) => {\n onChange?.(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n inputRef.current?.blur();\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(undefined);\n setSearchQuery('');\n inputRef.current?.focus();\n };\n\n const handleInputFocus = () => {\n setIsFocused(true);\n if (!disabled) setIsOpen(true);\n };\n\n const handleInputBlur = () => {\n setIsFocused(false);\n // Delay to allow click on option\n setTimeout(() => {\n if (!wrapperRef.current?.contains(document.activeElement)) {\n setSearchQuery('');\n }\n }, 200);\n };\n\n const currentState = error ? 'error' : state;\n const stateStyles = comboboxStyles.states[currentState];\n const focusStyles =\n currentState === 'error'\n ? comboboxStyles.states.errorFocus\n : currentState === 'success'\n ? comboboxStyles.states.successFocus\n : comboboxStyles.states.defaultFocus;\n\n const inputWrapperStyle: React.CSSProperties = {\n ...comboboxStyles.base,\n ...stateStyles,\n ...(isFocused && !disabled && focusStyles),\n ...(disabled && comboboxStyles.states.disabled),\n };\n\n const displayValue = selectedOption ? selectedOption.label : '';\n const showPlaceholder = !selectedOption && !searchQuery && !isFocused;\n\n return (\n <div className={clsx('arbor-combobox-wrapper', className)} style={style} ref={wrapperRef} data-testid={dataTestId}>\n {label && (\n <label htmlFor={comboboxId} style={labelStyles}>\n {label}\n </label>\n )}\n\n <div style={{ position: 'relative' }} ref={ref}>\n <div style={inputWrapperStyle}>\n <input\n ref={inputRef}\n id={comboboxId}\n type=\"text\"\n value={searchQuery || displayValue}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n placeholder={showPlaceholder ? placeholder : ''}\n disabled={disabled}\n aria-invalid={error ? 'true' : 'false'}\n aria-describedby={error ? errorId : helperText ? helperTextId : undefined}\n aria-expanded={isOpen}\n aria-autocomplete=\"list\"\n role=\"combobox\"\n style={{\n border: 'none',\n outline: 'none',\n background: 'transparent',\n flex: 1,\n fontSize: '13px',\n padding: 0,\n margin: 0,\n color: showPlaceholder ? '#7e7e7e' : '#2f2f2f',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n }}\n />\n\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px', position: 'absolute', right: '8px' }}>\n {selectedOption && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={{\n border: 'none',\n background: 'transparent',\n padding: '2px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n color: '#7e7e7e',\n }}\n aria-label=\"Clear selection\"\n >\n <X size={16} />\n </button>\n )}\n\n {currentState === 'success' && !isOpen && (\n <Check size={16} color=\"#16a33d\" />\n )}\n\n <ChevronDown\n size={16}\n color=\"#7e7e7e\"\n style={{\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n </div>\n\n {isOpen && !disabled && (\n <div ref={dropdownRef} style={dropdownStyles}>\n {filteredOptions.length === 0 ? (\n <div style={{ ...optionStyles, color: '#7e7e7e', cursor: 'default' }}>\n No options found\n </div>\n ) : (\n filteredOptions.map((option) => (\n <div\n key={option.value}\n onClick={() => handleSelectOption(option.value)}\n onMouseDown={(e) => e.preventDefault()} // Prevent blur\n style={{\n ...optionStyles,\n backgroundColor: option.value === value ? '#f8f8f8' : 'transparent',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f8f8f8';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor =\n option.value === value ? '#f8f8f8' : 'transparent';\n }}\n >\n <span>{option.label}</span>\n {option.value === value && <Check size={16} color=\"#16a33d\" />}\n </div>\n ))\n )}\n </div>\n )}\n </div>\n\n {error && (\n <p id={errorId} style={errorTextStyles} role=\"alert\">\n {error}\n </p>\n )}\n {!error && helperText && (\n <p id={helperTextId} style={helperTextStyles}>\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nCombobox.displayName = 'Combobox';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport type NumericInputState = 'default' | 'error' | 'success';\n\nexport interface NumericInputProps {\n /**\n * The label for the numeric input\n */\n label?: string;\n /**\n * The current value\n */\n value?: number;\n /**\n * Callback when value changes\n */\n onChange?: (value: number | undefined) => void;\n /**\n * Minimum allowed value\n */\n min?: number;\n /**\n * Maximum allowed value\n */\n max?: number;\n /**\n * Step increment/decrement value\n * @default 1\n */\n step?: number;\n /**\n * The validation state\n * @default 'default'\n */\n state?: NumericInputState;\n /**\n * Optional error message\n */\n error?: string;\n /**\n * Optional helper text\n */\n helperText?: string;\n /**\n * Whether the input 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\nconst labelStyles: React.CSSProperties = {\n display: 'block',\n fontSize: '13px',\n fontWeight: '600',\n color: '#2f2f2f',\n marginBottom: '4px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst helperTextStyles: React.CSSProperties = {\n fontSize: '13px',\n margin: '0',\n marginTop: '2px',\n color: '#595959',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n lineHeight: '1.4',\n};\n\nconst errorTextStyles: React.CSSProperties = {\n ...helperTextStyles,\n color: '#a62323', // destructive-600\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n};\n\nconst containerStyles = {\n base: {\n display: 'flex',\n alignItems: 'center',\n height: '46px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n transition: 'all 0.2s ease-in-out',\n overflow: 'hidden',\n },\n states: {\n default: {\n border: '1px solid #d1d1d1', // grey-300\n },\n defaultFocus: {\n borderColor: '#3cad51', // brand-500\n outline: '3px solid rgba(60, 173, 81, 0.2)',\n },\n error: {\n border: '1px solid #c93232', // destructive-500\n },\n errorFocus: {\n borderColor: '#c93232',\n outline: '3px solid rgba(201, 50, 50, 0.2)',\n },\n success: {\n border: '1px solid #16a33d', // success-500\n },\n successFocus: {\n borderColor: '#16a33d',\n outline: '3px solid rgba(22, 163, 61, 0.2)',\n },\n disabled: {\n backgroundColor: '#f8f8f8', // grey-050\n borderColor: '#efefef', // grey-100\n cursor: 'not-allowed',\n },\n },\n};\n\nconst buttonStyles: React.CSSProperties = {\n width: '46px',\n height: '100%',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: '16px',\n color: '#2f2f2f',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 0.2s',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n userSelect: 'none' as const,\n};\n\nconst inputStyles: React.CSSProperties = {\n flex: 1,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n textAlign: 'center',\n fontSize: '13px',\n color: '#2f2f2f',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n padding: '0 8px',\n appearance: 'textfield' as any,\n};\n\n/**\n * NumericInput component - Arbor Design System\n *\n * A number input with increment/decrement buttons.\n * Enforces numeric rules (min, max, step) and prevents non-numeric input.\n */\nexport const NumericInput = React.forwardRef<HTMLDivElement, NumericInputProps>(\n (\n {\n label,\n value,\n onChange,\n min,\n max,\n step = 1,\n state = 'default',\n error,\n helperText,\n disabled = false,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const inputId = React.useId();\n const helperTextId = React.useId();\n const errorId = React.useId();\n\n const clampValue = (val: number): number => {\n let clamped = val;\n if (min !== undefined && clamped < min) clamped = min;\n if (max !== undefined && clamped > max) clamped = max;\n return clamped;\n };\n\n const handleIncrement = () => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = currentValue + step;\n const clampedValue = clampValue(newValue);\n if (clampedValue !== currentValue) {\n onChange?.(clampedValue);\n }\n };\n\n const handleDecrement = () => {\n if (disabled) return;\n const currentValue = value ?? 0;\n const newValue = currentValue - step;\n const clampedValue = clampValue(newValue);\n if (clampedValue !== currentValue) {\n onChange?.(clampedValue);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n\n // Allow empty input\n if (inputValue === '' || inputValue === '-') {\n onChange?.(undefined);\n return;\n }\n\n // Parse as number\n const numValue = parseFloat(inputValue);\n\n // Only update if it's a valid number\n if (!isNaN(numValue)) {\n const clampedValue = clampValue(numValue);\n onChange?.(clampedValue);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Allow: backspace, delete, tab, escape, enter, minus sign, decimal point\n const allowedKeys = ['Backspace', 'Delete', 'Tab', 'Escape', 'Enter', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', '-', '.'];\n\n if (allowedKeys.includes(e.key)) {\n // Handle arrow keys for increment/decrement\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n handleIncrement();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n handleDecrement();\n }\n return;\n }\n\n // Only allow numbers\n if (!/^[0-9]$/.test(e.key)) {\n e.preventDefault();\n }\n };\n\n const currentState = error ? 'error' : state;\n const stateStyles = containerStyles.states[currentState];\n const focusStyles =\n currentState === 'error'\n ? containerStyles.states.errorFocus\n : currentState === 'success'\n ? containerStyles.states.successFocus\n : containerStyles.states.defaultFocus;\n\n const containerStyle: React.CSSProperties = {\n ...containerStyles.base,\n ...stateStyles,\n ...(isFocused && !disabled && focusStyles),\n ...(disabled && containerStyles.states.disabled),\n };\n\n const isDecrementDisabled = disabled || (min !== undefined && value !== undefined && value <= min);\n const isIncrementDisabled = disabled || (max !== undefined && value !== undefined && value >= max);\n\n // Button styles for success state (green outlined circles)\n const getButtonStyle = (isDisabled: boolean) => {\n const baseStyle: React.CSSProperties = {\n ...buttonStyles,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n color: isDisabled ? '#7e7e7e' : '#2f2f2f',\n };\n\n // Add green circle border for success state\n if (currentState === 'success' && !isDisabled) {\n return {\n ...baseStyle,\n color: '#16a33d', // success-500\n border: '2px solid #16a33d',\n borderRadius: '50%',\n width: '32px',\n height: '32px',\n };\n }\n\n return baseStyle;\n };\n\n return (\n <div className={clsx('arbor-numeric-input-wrapper', className)} style={style} ref={ref} data-testid={dataTestId}>\n {label && (\n <label htmlFor={inputId} style={labelStyles}>\n {label}\n </label>\n )}\n\n <div style={containerStyle}>\n <button\n type=\"button\"\n onClick={handleDecrement}\n disabled={isDecrementDisabled}\n style={getButtonStyle(isDecrementDisabled)}\n onMouseEnter={(e) => {\n if (!isDecrementDisabled) {\n e.currentTarget.style.backgroundColor = '#f8f8f8';\n e.currentTarget.style.borderRadius = '99px';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.borderRadius = currentState === 'success' ? '50%' : '0';\n }}\n aria-label=\"Decrement\"\n >\n −\n </button>\n\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n value={value !== undefined ? value : ''}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n disabled={disabled}\n aria-invalid={error ? 'true' : 'false'}\n aria-describedby={error ? errorId : helperText ? helperTextId : undefined}\n style={{\n ...inputStyles,\n color: disabled ? '#7e7e7e' : '#2f2f2f',\n cursor: disabled ? 'not-allowed' : 'text',\n }}\n />\n\n <button\n type=\"button\"\n onClick={handleIncrement}\n disabled={isIncrementDisabled}\n style={getButtonStyle(isIncrementDisabled)}\n onMouseEnter={(e) => {\n if (!isIncrementDisabled) {\n e.currentTarget.style.backgroundColor = '#f8f8f8';\n e.currentTarget.style.borderRadius = '99px';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.borderRadius = currentState === 'success' ? '50%' : '0';\n }}\n aria-label=\"Increment\"\n >\n +\n </button>\n </div>\n\n {error && (\n <p id={errorId} style={errorTextStyles}>\n {error}\n </p>\n )}\n\n {helperText && !error && (\n <p id={helperTextId} style={helperTextStyles}>\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nNumericInput.displayName = 'NumericInput';\n","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","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface RadioProps {\n /**\n * The label for the radio button\n */\n label?: string;\n /**\n * Whether the radio is selected\n */\n checked?: boolean;\n /**\n * Callback when selection changes\n */\n onChange?: (checked: boolean) => void;\n /**\n * Whether the radio 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 (groups radios together)\n */\n name?: string;\n /**\n * Value attribute for form submission\n */\n value?: string;\n}\n\nconst radioStyles: React.CSSProperties = {\n width: '16px',\n height: '16px',\n border: '1px solid #7e7e7e', // grey-500\n borderRadius: '50%',\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 border: '1px solid #0e8a0e', // brand-600\n};\n\nconst checkedHoverStyles: React.CSSProperties = {\n border: '1px solid #005700', // brand-800\n};\n\nconst uncheckedHoverStyles: React.CSSProperties = {\n border: '1px solid #2f2f2f', // grey-900\n};\n\nconst innerDotStyles: React.CSSProperties = {\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n backgroundColor: '#0e8a0e', // brand-600\n transition: 'all 0.2s ease-in-out',\n};\n\nconst innerDotHoverStyles: React.CSSProperties = {\n backgroundColor: '#005700', // brand-800\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 * Radio component - Arbor Design System\n *\n * A radio button input with label support.\n */\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\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 },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const radioId = React.useId();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled) {\n onChange?.(e.target.checked);\n }\n };\n\n const circleStyle: React.CSSProperties = {\n ...radioStyles,\n ...(checked && !disabled && checkedStyles),\n ...(isHovered && !disabled && !checked && uncheckedHoverStyles),\n ...(isHovered && !disabled && checked && checkedHoverStyles),\n ...(disabled && !checked && { backgroundColor: '#efefef', border: '1px solid #7e7e7e' }),\n ...(disabled && checked && { backgroundColor: '#efefef', border: '1px solid #7e7e7e' }),\n ...(isFocused && !disabled && {\n boxShadow: '0px 0px 0px 3px #3cad51',\n }),\n };\n\n const dotStyle: React.CSSProperties = {\n ...innerDotStyles,\n ...(isHovered && !disabled && innerDotHoverStyles),\n ...(disabled && { backgroundColor: '#7e7e7e' }),\n };\n\n return (\n <div\n className={clsx('arbor-radio-wrapper', className)}\n style={{ ...wrapperStyles, ...style }}\n data-testid={dataTestId}\n >\n <input\n ref={ref}\n id={radioId}\n type=\"radio\"\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={checked}\n />\n <label\n htmlFor={radioId}\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={circleStyle}>\n {checked && <div style={dotStyle} />}\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\nRadio.displayName = 'Radio';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Calendar, ChevronLeft, ChevronRight } from 'lucide-react';\nimport {\n format,\n parse,\n isValid,\n startOfMonth,\n endOfMonth,\n eachDayOfInterval,\n isSameDay,\n isToday,\n addMonths,\n subMonths,\n startOfWeek,\n endOfWeek,\n} from 'date-fns';\n\nexport interface DatePickerProps {\n /**\n * The selected date value\n */\n value?: Date;\n /**\n * Callback when date changes\n */\n onChange?: (date: Date | undefined) => void;\n /**\n * Label for the input\n */\n label?: string;\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * Helper text below the input\n */\n helperText?: string;\n /**\n * Error message\n */\n error?: string;\n /**\n * Success state\n */\n state?: 'default' | 'success' | 'error';\n /**\n * Whether the input 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 * Minimum selectable date\n */\n minDate?: Date;\n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n /**\n * Date format string (default: dd/MM/yyyy)\n */\n dateFormat?: string;\n}\n\nconst wrapperStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n};\n\nconst labelStyles: React.CSSProperties = {\n fontSize: '11px',\n fontWeight: 600,\n color: '#2f2f2f',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst inputContainerStyles: React.CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n};\n\nconst inputStyles: React.CSSProperties = {\n width: '100%',\n height: '36px',\n padding: '0 36px 0 12px',\n fontSize: '13px',\n border: '1px solid #d1d1d1',\n borderRadius: '8px',\n outline: 'none',\n transition: 'all 0.2s ease-in-out',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n backgroundColor: '#ffffff',\n color: '#2f2f2f',\n};\n\nconst iconButtonStyles: React.CSSProperties = {\n position: 'absolute',\n right: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px',\n cursor: 'pointer',\n color: '#595959',\n backgroundColor: 'transparent',\n border: 'none',\n};\n\nconst helperTextStyles: React.CSSProperties = {\n fontSize: '11px',\n color: '#595959',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst calendarPopoverStyles: React.CSSProperties = {\n backgroundColor: '#ffffff',\n border: '1px solid #efefef',\n borderRadius: '8px',\n padding: '16px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n minWidth: '320px',\n zIndex: 1000,\n};\n\nconst calendarHeaderStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '16px',\n gap: '8px',\n};\n\nconst monthYearContainerStyles: React.CSSProperties = {\n display: 'flex',\n gap: '8px',\n flex: 1,\n};\n\nconst selectStyles: React.CSSProperties = {\n padding: '6px 8px',\n fontSize: '13px',\n border: '1px solid #d1d1d1',\n borderRadius: '6px',\n backgroundColor: '#ffffff',\n color: '#2f2f2f',\n cursor: 'pointer',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n outline: 'none',\n};\n\nconst navButtonStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n borderRadius: '4px',\n color: '#2f2f2f',\n transition: 'background-color 0.2s',\n};\n\nconst weekDaysStyles: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: '4px',\n marginBottom: '8px',\n};\n\nconst weekDayStyles: React.CSSProperties = {\n fontSize: '11px',\n fontWeight: 600,\n color: '#7e7e7e',\n textAlign: 'center',\n padding: '4px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst daysGridStyles: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: '4px',\n};\n\nconst dayButtonStyles: React.CSSProperties = {\n width: '36px',\n height: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n backgroundColor: 'transparent',\n borderRadius: '50%',\n cursor: 'pointer',\n fontSize: '13px',\n color: '#2f2f2f',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n transition: 'all 0.2s',\n};\n\nconst footerStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: '12px',\n paddingTop: '12px',\n borderTop: '1px solid #efefef',\n};\n\nconst todayButtonStyles: React.CSSProperties = {\n padding: '6px 12px',\n fontSize: '13px',\n fontWeight: 500,\n color: '#16a33d',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n borderRadius: '6px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n transition: 'background-color 0.2s',\n};\n\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nconst WEEKDAYS = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\n/**\n * DatePicker component - Arbor Design System\n *\n * A date picker with calendar popup for selecting dates.\n */\nexport const DatePicker = React.forwardRef<HTMLInputElement, DatePickerProps>(\n (\n {\n value,\n onChange,\n label,\n placeholder = 'DD/MM/YYYY',\n helperText,\n error,\n state = 'default',\n disabled = false,\n className,\n style,\n 'data-testid': dataTestId,\n minDate,\n maxDate,\n dateFormat = 'dd/MM/yyyy',\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState('');\n const [viewDate, setViewDate] = React.useState(value || new Date());\n const inputId = React.useId();\n\n // Sync input value with prop value\n React.useEffect(() => {\n if (value && isValid(value)) {\n setInputValue(format(value, dateFormat));\n } else {\n setInputValue('');\n }\n }, [value, dateFormat]);\n\n // Update view date when value changes\n React.useEffect(() => {\n if (value && isValid(value)) {\n setViewDate(value);\n }\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n\n // Try to parse the input\n const parsedDate = parse(newValue, dateFormat, new Date());\n if (isValid(parsedDate)) {\n onChange?.(parsedDate);\n setViewDate(parsedDate);\n }\n };\n\n const handleInputBlur = () => {\n // If input is invalid, reset to current value\n if (value && isValid(value)) {\n setInputValue(format(value, dateFormat));\n } else if (!inputValue) {\n onChange?.(undefined);\n }\n };\n\n const handleDateSelect = (date: Date) => {\n onChange?.(date);\n setOpen(false);\n };\n\n const handleTodayClick = () => {\n const today = new Date();\n onChange?.(today);\n setViewDate(today);\n setOpen(false);\n };\n\n const handleMonthChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newMonth = parseInt(e.target.value, 10);\n const newDate = new Date(viewDate);\n newDate.setMonth(newMonth);\n setViewDate(newDate);\n };\n\n const handleYearChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newYear = parseInt(e.target.value, 10);\n const newDate = new Date(viewDate);\n newDate.setFullYear(newYear);\n setViewDate(newDate);\n };\n\n const handlePrevMonth = () => {\n setViewDate(subMonths(viewDate, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(addMonths(viewDate, 1));\n };\n\n // Get days to display in calendar\n const monthStart = startOfMonth(viewDate);\n const monthEnd = endOfMonth(viewDate);\n const startDate = startOfWeek(monthStart, { weekStartsOn: 1 }); // Start week on Monday\n const endDate = endOfWeek(monthEnd, { weekStartsOn: 1 });\n const days = eachDayOfInterval({ start: startDate, end: endDate });\n\n // Check if date is selectable\n const isDateDisabled = (date: Date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n };\n\n // Generate year options (current year ± 100 years)\n const currentYear = viewDate.getFullYear();\n const yearOptions = Array.from({ length: 201 }, (_, i) => currentYear - 100 + i);\n\n const currentState = error ? 'error' : state;\n\n const getInputStyles = (): React.CSSProperties => {\n const styles = { ...inputStyles };\n\n if (disabled) {\n styles.backgroundColor = '#f8f8f8';\n styles.borderColor = '#efefef';\n styles.color = '#7e7e7e';\n styles.cursor = 'not-allowed';\n } else if (currentState === 'error') {\n styles.borderColor = '#e02f1d';\n } else if (currentState === 'success') {\n styles.borderColor = '#16a33d';\n }\n\n return styles;\n };\n\n return (\n <div\n className={clsx('arbor-datepicker-wrapper', className)}\n style={{ ...wrapperStyles, ...style }}\n data-testid={dataTestId}\n >\n {label && (\n <label htmlFor={inputId} style={labelStyles}>\n {label}\n </label>\n )}\n <Popover.Root open={open} onOpenChange={setOpen}>\n <div style={inputContainerStyles}>\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n placeholder={placeholder}\n disabled={disabled}\n style={getInputStyles()}\n aria-label={label || 'Date picker'}\n />\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n style={{\n ...iconButtonStyles,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n disabled={disabled}\n aria-label=\"Open calendar\"\n >\n <Calendar size={16} />\n </button>\n </Popover.Trigger>\n </div>\n\n <Popover.Portal>\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n style={calendarPopoverStyles}\n >\n {/* Calendar Header */}\n <div style={calendarHeaderStyles}>\n <button\n type=\"button\"\n onClick={handlePrevMonth}\n style={navButtonStyles}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f8f8f8';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n aria-label=\"Previous month\"\n >\n <ChevronLeft size={16} />\n </button>\n\n <div style={monthYearContainerStyles}>\n <select\n value={viewDate.getMonth()}\n onChange={handleMonthChange}\n style={selectStyles}\n aria-label=\"Select month\"\n >\n {MONTHS.map((month, index) => (\n <option key={month} value={index}>\n {month}\n </option>\n ))}\n </select>\n\n <select\n value={viewDate.getFullYear()}\n onChange={handleYearChange}\n style={selectStyles}\n aria-label=\"Select year\"\n >\n {yearOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n\n <button\n type=\"button\"\n onClick={handleNextMonth}\n style={navButtonStyles}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f8f8f8';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n aria-label=\"Next month\"\n >\n <ChevronRight size={16} />\n </button>\n </div>\n\n {/* Weekday Headers */}\n <div style={weekDaysStyles}>\n {WEEKDAYS.map((day) => (\n <div key={day} style={weekDayStyles}>\n {day}\n </div>\n ))}\n </div>\n\n {/* Days Grid */}\n <div style={daysGridStyles}>\n {days.map((day) => {\n const isCurrentMonth = day.getMonth() === viewDate.getMonth();\n const isSelected = value && isSameDay(day, value);\n const isTodayDate = isToday(day);\n const isDayDisabled = isDateDisabled(day);\n\n const getDayButtonStyles = (): React.CSSProperties => {\n const styles = { ...dayButtonStyles };\n\n if (!isCurrentMonth) {\n styles.color = '#d1d1d1';\n }\n\n if (isDayDisabled) {\n styles.color = '#d1d1d1';\n styles.cursor = 'not-allowed';\n }\n\n if (isSelected) {\n styles.backgroundColor = '#3cad51';\n styles.color = '#ffffff';\n } else if (isTodayDate && !isDayDisabled) {\n styles.fontWeight = 600;\n styles.color = '#16a33d';\n }\n\n return styles;\n };\n\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n onClick={() => !isDayDisabled && handleDateSelect(day)}\n disabled={isDayDisabled}\n style={getDayButtonStyles()}\n onMouseEnter={(e) => {\n if (!isSelected && !isDayDisabled && isCurrentMonth) {\n e.currentTarget.style.backgroundColor = '#f8f8f8';\n }\n }}\n onMouseLeave={(e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n aria-label={format(day, 'MMMM d, yyyy')}\n aria-selected={isSelected}\n >\n {format(day, 'd')}\n </button>\n );\n })}\n </div>\n\n {/* Footer with Today button */}\n <div style={footerStyles}>\n <button\n type=\"button\"\n onClick={handleTodayClick}\n style={todayButtonStyles}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f8f8f8';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n Today\n </button>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {error && (\n <span style={{ ...helperTextStyles, color: '#e02f1d' }}>{error}</span>\n )}\n {!error && helperText && (\n <span style={helperTextStyles}>{helperText}</span>\n )}\n </div>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { Info, AlertCircle, AlertTriangle, CheckCircle, AlertOctagon } from 'lucide-react';\n\nexport interface ToastProps {\n /**\n * The variant of the toast\n */\n variant: 'information' | 'danger' | 'warning' | 'success' | 'caution';\n /**\n * The message to display\n */\n message: string;\n /**\n * Callback when close button is clicked\n */\n onClose?: () => void;\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\nconst baseToastStyles: React.CSSProperties = {\n width: '360px',\n padding: '16px',\n borderRadius: '8px',\n border: '1px solid',\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n boxShadow: '0px 4px 12px 0px rgba(32, 32, 32, 0.08)',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst messageStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 600,\n flex: 1,\n};\n\nconst closeButtonStyles: React.CSSProperties = {\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: 'background-color 0.2s ease-in-out',\n};\n\nconst variantConfig = {\n information: {\n backgroundColor: '#f5fbff',\n borderColor: '#2c8bca',\n textColor: '#053a61',\n icon: Info,\n iconColor: '#2c8bca',\n closeHoverBg: '#e0f3ff',\n },\n danger: {\n backgroundColor: '#fff5f5',\n borderColor: '#c93232',\n textColor: '#610202',\n icon: AlertCircle,\n iconColor: '#c93232',\n closeHoverBg: '#ffe0e0',\n },\n warning: {\n backgroundColor: '#fffaf5',\n borderColor: '#e4720d',\n textColor: '#611f00',\n icon: AlertTriangle,\n iconColor: '#e4720d',\n closeHoverBg: '#ffedd5',\n },\n success: {\n backgroundColor: '#f0faf3',\n borderColor: '#5ec171',\n textColor: '#024002',\n icon: CheckCircle,\n iconColor: '#5ec171',\n closeHoverBg: '#d9f2df',\n },\n caution: {\n backgroundColor: '#fffdf5',\n borderColor: '#edae06',\n textColor: '#613f00',\n icon: AlertOctagon,\n iconColor: '#edae06',\n closeHoverBg: '#fff8d5',\n },\n};\n\n/**\n * Toast component - Arbor Design System\n *\n * A notification toast with different variants for different message types.\n *\n * IMPORTANT: Toasts are designed to overlay content in the top-right corner.\n * Use absolute/fixed positioning to display them above page content.\n *\n * For inline notifications that flow with page content, use the Banner component instead.\n *\n * Example usage with positioning:\n * ```tsx\n * <div style={{ position: 'fixed', top: '24px', right: '24px', zIndex: 1000 }}>\n * <Toast variant=\"success\" message=\"Changes saved!\" onClose={() => {}} />\n * </div>\n * ```\n */\nexport const Toast = React.forwardRef<HTMLDivElement, ToastProps>(\n (\n {\n variant,\n message,\n onClose,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [isCloseHovered, setIsCloseHovered] = React.useState(false);\n const config = variantConfig[variant];\n const IconComponent = config.icon;\n\n const toastStyle: React.CSSProperties = {\n ...baseToastStyles,\n backgroundColor: config.backgroundColor,\n borderColor: config.borderColor,\n ...style,\n };\n\n const closeStyle: React.CSSProperties = {\n ...closeButtonStyles,\n ...(isCloseHovered && { backgroundColor: config.closeHoverBg }),\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-toast', `arbor-toast-${variant}`, className)}\n style={toastStyle}\n data-testid={dataTestId}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <IconComponent size={16} color={config.iconColor} style={{ flexShrink: 0 }} />\n <span style={{ ...messageStyles, color: config.textColor }}>\n {message}\n </span>\n {onClose && (\n <button\n onClick={onClose}\n onMouseEnter={() => setIsCloseHovered(true)}\n onMouseLeave={() => setIsCloseHovered(false)}\n style={closeStyle}\n aria-label=\"Close notification\"\n type=\"button\"\n >\n <span style={{ fontSize: '18px', lineHeight: 1, color: '#595959', fontWeight: 'bold' }}>×</span>\n </button>\n )}\n </div>\n );\n }\n);\n\nToast.displayName = 'Toast';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface TooltipProps {\n /**\n * The content to display in the tooltip\n */\n content: string;\n /**\n * The trigger element that shows the tooltip on hover\n */\n children: React.ReactNode;\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\nconst tooltipStyles: React.CSSProperties = {\n position: 'absolute',\n bottom: 'calc(100% + 8px)',\n left: '50%',\n transform: 'translateX(-50%)',\n backgroundColor: '#2f2f2f',\n color: '#ffffff',\n padding: '12px',\n borderRadius: '8px',\n boxShadow: '0px 4px 12px 0px rgba(32, 32, 32, 0.08)',\n fontSize: '13px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontWeight: 400,\n lineHeight: 1.5,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n zIndex: 1000,\n opacity: 0,\n transition: 'opacity 0.2s ease-in-out',\n};\n\nconst wrapperStyles: React.CSSProperties = {\n position: 'relative',\n display: 'inline-block',\n};\n\n/**\n * Tooltip component - Arbor Design System\n *\n * A tooltip that appears on hover over a trigger element.\n */\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n content,\n children,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [isVisible, setIsVisible] = React.useState(false);\n\n const visibleTooltipStyles: React.CSSProperties = {\n ...tooltipStyles,\n opacity: isVisible ? 1 : 0,\n ...style,\n };\n\n return (\n <div\n ref={ref}\n style={wrapperStyles}\n onMouseEnter={() => setIsVisible(true)}\n onMouseLeave={() => setIsVisible(false)}\n data-testid={dataTestId}\n >\n {children}\n <div\n className={clsx('arbor-tooltip', className)}\n style={visibleTooltipStyles}\n role=\"tooltip\"\n aria-hidden={!isVisible}\n >\n {content}\n </div>\n </div>\n );\n }\n);\n\nTooltip.displayName = 'Tooltip';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface ToggleProps {\n /**\n * The label for the toggle\n */\n label?: string;\n /**\n * Whether the toggle is on\n */\n checked?: boolean;\n /**\n * Callback when toggle state changes\n */\n onChange?: (checked: boolean) => void;\n /**\n * Whether the toggle 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\nconst toggleContainerStyles: React.CSSProperties = {\n width: '40px',\n height: '24px',\n borderRadius: '16px',\n border: '1px solid',\n position: 'relative',\n cursor: 'pointer',\n transition: 'all 0.2s ease-in-out',\n};\n\nconst knobStyles: React.CSSProperties = {\n width: '18px',\n height: '18px',\n borderRadius: '50%',\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n transition: 'all 0.2s ease-in-out',\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 * Toggle component - Arbor Design System\n *\n * A toggle switch input with label support.\n */\nexport const Toggle = React.forwardRef<HTMLInputElement, ToggleProps>(\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 },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const [isActive, setIsActive] = React.useState(false);\n const toggleId = React.useId();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled) {\n onChange?.(e.target.checked);\n }\n };\n\n // Container styles based on state\n const getContainerStyles = (): React.CSSProperties => {\n if (disabled) {\n return {\n ...toggleContainerStyles,\n backgroundColor: checked ? '#d1d1d1' : '#ffffff',\n borderColor: checked ? '#d1d1d1' : '#d1d1d1',\n cursor: 'not-allowed',\n };\n }\n\n if (checked) {\n if (isActive && isFocused) {\n return {\n ...toggleContainerStyles,\n backgroundColor: '#024002',\n borderColor: '#024002',\n boxShadow: '0px 0px 0px 3px #3cad51',\n };\n }\n if (isActive) {\n return {\n ...toggleContainerStyles,\n backgroundColor: '#024002',\n borderColor: '#024002',\n };\n }\n if (isHovered) {\n return {\n ...toggleContainerStyles,\n backgroundColor: '#005700',\n borderColor: '#005700',\n };\n }\n if (isFocused) {\n return {\n ...toggleContainerStyles,\n backgroundColor: '#0b800b',\n borderColor: '#0b800b',\n boxShadow: '0px 0px 0px 3px #3cad51',\n };\n }\n return {\n ...toggleContainerStyles,\n backgroundColor: '#0b800b',\n borderColor: '#0b800b',\n };\n } else {\n if (isActive && isFocused) {\n return {\n ...toggleContainerStyles,\n backgroundColor: '#efefef',\n borderColor: '#2f2f2f',\n boxShadow: '0px 0px 0px 3px #3cad51',\n };\n }\n if (isActive) {\n return {\n ...toggleContainerStyles,\n backgroundColor: '#efefef',\n borderColor: '#2f2f2f',\n };\n }\n if (isHovered) {\n return {\n ...toggleContainerStyles,\n backgroundColor: '#f8f8f8',\n borderColor: '#595959',\n };\n }\n if (isFocused) {\n return {\n ...toggleContainerStyles,\n backgroundColor: '#ffffff',\n borderColor: '#7e7e7e',\n boxShadow: '0px 0px 0px 3px #3cad51',\n };\n }\n return {\n ...toggleContainerStyles,\n backgroundColor: '#ffffff',\n borderColor: '#7e7e7e',\n };\n }\n };\n\n // Knob styles based on state\n const getKnobStyles = (): React.CSSProperties => {\n const baseKnob = {\n ...knobStyles,\n left: checked ? '18px' : '2px',\n };\n\n if (disabled) {\n return {\n ...baseKnob,\n backgroundColor: checked ? '#f8f8f8' : '#d1d1d1',\n };\n }\n\n if (checked) {\n if (isActive) {\n return {\n ...baseKnob,\n backgroundColor: '#efefef',\n };\n }\n if (isHovered) {\n return {\n ...baseKnob,\n backgroundColor: '#f8f8f8',\n };\n }\n return {\n ...baseKnob,\n backgroundColor: '#ffffff',\n };\n } else {\n if (isActive) {\n return {\n ...baseKnob,\n backgroundColor: '#2f2f2f',\n };\n }\n if (isHovered) {\n return {\n ...baseKnob,\n backgroundColor: '#595959',\n };\n }\n return {\n ...baseKnob,\n backgroundColor: '#7e7e7e',\n };\n }\n };\n\n return (\n <div\n className={clsx('arbor-toggle-wrapper', className)}\n style={{ ...wrapperStyles, ...style }}\n data-testid={dataTestId}\n >\n <input\n ref={ref}\n id={toggleId}\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={checked}\n />\n <label\n htmlFor={toggleId}\n onMouseEnter={() => !disabled && setIsHovered(true)}\n onMouseLeave={() => !disabled && setIsHovered(false)}\n onMouseDown={() => !disabled && setIsActive(true)}\n onMouseUp={() => !disabled && setIsActive(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <div style={getContainerStyles()}>\n <div style={getKnobStyles()} />\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\nToggle.displayName = 'Toggle';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface TextAreaProps {\n /**\n * The label for the textarea\n */\n label?: string;\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * Current value\n */\n value?: string;\n /**\n * Change handler\n */\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n /**\n * Validation state - affects border color\n */\n state?: 'default' | 'success' | 'error';\n /**\n * Error message (implies error state)\n */\n error?: string;\n /**\n * Helper text shown below input\n */\n helperText?: string;\n /**\n * Whether the textarea is disabled\n */\n disabled?: boolean;\n /**\n * Number of rows (affects height)\n */\n rows?: number;\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\nconst labelStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 600,\n color: '#2f2f2f',\n marginBottom: '0px',\n display: 'block',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst textareaWrapperStyles: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n};\n\nconst textareaStyles: React.CSSProperties = {\n width: '100%',\n minHeight: '72px',\n padding: '8px',\n fontSize: '13px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n border: '1px solid',\n borderRadius: '8px',\n outline: 'none',\n resize: 'vertical',\n transition: 'all 0.2s ease-in-out',\n lineHeight: '1.5',\n};\n\nconst helperTextStyles: React.CSSProperties = {\n fontSize: '13px',\n marginTop: '4px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\n/**\n * TextArea component - Arbor Design System\n *\n * A multi-line text input with label, helper text, and validation states.\n */\nexport const TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n label,\n placeholder,\n value,\n onChange,\n state = 'default',\n error,\n helperText,\n disabled = false,\n rows = 3,\n className,\n style,\n 'data-testid': dataTestId,\n name,\n },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n const textareaId = React.useId();\n\n // Determine the actual state (error overrides state prop)\n const actualState = error ? 'error' : state;\n\n // Get border color based on state and interactions\n const getBorderColor = (): string => {\n if (disabled) {\n return '#dfdfdf';\n }\n\n if (actualState === 'error') {\n return '#c93232';\n }\n\n if (actualState === 'success') {\n return '#0e8a0e';\n }\n\n if (isFocused) {\n return '#0e8a0e';\n }\n\n if (isHovered) {\n return '#7e7e7e';\n }\n\n return '#dfdfdf';\n };\n\n // Get background color\n const getBackgroundColor = (): string => {\n if (disabled) {\n return '#efefef';\n }\n return '#ffffff';\n };\n\n // Get box shadow (focus ring)\n const getBoxShadow = (): string | undefined => {\n if (isFocused && !disabled) {\n if (actualState === 'error') {\n return '0px 0px 0px 3px rgba(201, 50, 50, 0.2)';\n }\n return '0px 0px 0px 3px #3cad51';\n }\n return undefined;\n };\n\n const textareaStylesCombined: React.CSSProperties = {\n ...textareaStyles,\n borderColor: getBorderColor(),\n backgroundColor: getBackgroundColor(),\n boxShadow: getBoxShadow(),\n color: disabled ? '#7e7e7e' : '#2f2f2f',\n cursor: disabled ? 'not-allowed' : 'text',\n };\n\n const helperColor = error ? '#c93232' : actualState === 'success' ? '#0e8a0e' : '#595959';\n\n return (\n <div\n className={clsx('arbor-textarea-wrapper', className)}\n style={style}\n data-testid={dataTestId}\n >\n {label && (\n <label htmlFor={textareaId} style={labelStyles}>\n {label}\n </label>\n )}\n {label && <div style={{ height: '8px' }} />}\n <div style={textareaWrapperStyles}>\n <textarea\n ref={ref}\n id={textareaId}\n name={name}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n disabled={disabled}\n rows={rows}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={textareaStylesCombined}\n />\n </div>\n {(error || helperText) && (\n <div style={{ ...helperTextStyles, color: helperColor }} role={error ? 'alert' : undefined}>\n {error || helperText}\n </div>\n )}\n </div>\n );\n }\n);\n\nTextArea.displayName = 'TextArea';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\n\nexport interface TabItem {\n /**\n * The label text for the tab\n */\n label: string;\n /**\n * Optional icon component\n */\n icon?: React.ReactNode;\n /**\n * Value to identify this tab\n */\n value: string;\n}\n\nexport interface TabsProps {\n /**\n * Array of tab items to display\n */\n tabs: TabItem[];\n /**\n * Currently active tab value\n */\n activeTab?: string;\n /**\n * Callback when tab is clicked\n */\n onTabChange?: (value: string) => void;\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\nconst tabsContainerStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n borderBottom: '1px solid #f8f8f8',\n paddingBottom: '1px',\n width: '100%',\n};\n\nconst tabItemWrapperStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n position: 'relative',\n};\n\nconst tabItemStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '8px 12px',\n borderRadius: '8px',\n fontSize: '14px',\n lineHeight: '1.5',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n outline: 'none',\n transition: 'all 0.2s ease-in-out',\n userSelect: 'none' as const,\n};\n\nconst underlineStyles: React.CSSProperties = {\n width: '100%',\n height: '2px',\n borderTopLeftRadius: '4px',\n borderTopRightRadius: '4px',\n transition: 'background-color 0.2s ease-in-out',\n};\n\n/**\n * Tabs component - Arbor Design System\n *\n * Horizontal tabs with support for icons and various states.\n */\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n tabs,\n activeTab,\n onTabChange,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [hoveredTab, setHoveredTab] = React.useState<string | null>(null);\n const [focusedTab, setFocusedTab] = React.useState<string | null>(null);\n\n // Determine the active tab (first tab by default)\n const currentActiveTab = activeTab || (tabs.length > 0 ? tabs[0].value : '');\n\n const handleTabClick = (value: string) => {\n onTabChange?.(value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent, value: string) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleTabClick(value);\n }\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-tabs', className)}\n style={{ ...tabsContainerStyles, ...style }}\n data-testid={dataTestId}\n role=\"tablist\"\n >\n {tabs.map((tab) => {\n const isActive = tab.value === currentActiveTab;\n const isHovered = tab.value === hoveredTab;\n const isFocused = tab.value === focusedTab;\n\n // Determine text color\n const getTextColor = (): string => {\n if (isActive) {\n return '#0e8a0e'; // Active green\n }\n if (isHovered) {\n return '#202020'; // Hover darker grey\n }\n return '#2f2f2f'; // Default grey\n };\n\n // Determine font weight\n const getFontWeight = (): number => {\n return isActive ? 600 : 500; // Semibold for active, medium for inactive\n };\n\n // Determine underline color\n const getUnderlineColor = (): string => {\n if (isActive) {\n return '#0e8a0e'; // Active green\n }\n if (isHovered) {\n return '#d1d1d1'; // Hover grey\n }\n return 'transparent'; // Default transparent\n };\n\n // Get box shadow for focus ring\n const getBoxShadow = (): string | undefined => {\n if (isFocused) {\n return '0px 0px 0px 3px #3cad51';\n }\n return undefined;\n };\n\n const tabItemStylesCombined: React.CSSProperties = {\n ...tabItemStyles,\n color: getTextColor(),\n fontWeight: getFontWeight(),\n boxShadow: getBoxShadow(),\n backgroundColor: isFocused ? 'rgba(255, 255, 255, 0.01)' : 'transparent',\n };\n\n const underlineStylesCombined: React.CSSProperties = {\n ...underlineStyles,\n backgroundColor: getUnderlineColor(),\n };\n\n return (\n <div\n key={tab.value}\n style={tabItemWrapperStyles}\n onMouseEnter={() => setHoveredTab(tab.value)}\n onMouseLeave={() => setHoveredTab(null)}\n >\n <div\n role=\"tab\"\n aria-selected={isActive}\n tabIndex={isActive ? 0 : -1}\n onClick={() => handleTabClick(tab.value)}\n onKeyDown={(e) => handleKeyDown(e, tab.value)}\n onFocus={() => setFocusedTab(tab.value)}\n onBlur={() => setFocusedTab(null)}\n style={tabItemStylesCombined}\n >\n {tab.icon && (\n <span style={{ display: 'flex', alignItems: 'center' }}>\n {tab.icon}\n </span>\n )}\n <span>{tab.label}</span>\n </div>\n <div style={underlineStylesCombined} />\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nTabs.displayName = 'Tabs';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { AlertCircle, AlertTriangle, Info, X } from 'lucide-react';\n\nexport type BannerVariant = 'warning' | 'destructive' | 'information' | 'neutral';\n\nexport interface BannerProps {\n /**\n * Banner variant - determines color scheme\n */\n variant?: BannerVariant;\n /**\n * Optional title text\n */\n title?: string;\n /**\n * Main message/description text\n */\n message: string;\n /**\n * Optional icon (pass false to hide default icon, or pass custom ReactNode)\n */\n icon?: React.ReactNode | boolean;\n /**\n * Optional action button label\n */\n actionLabel?: string;\n /**\n * Action button click handler\n */\n onAction?: () => void;\n /**\n * Optional close button\n */\n onClose?: () => void;\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\nconst containerStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n padding: '16px',\n borderRadius: '8px',\n border: '1px solid',\n width: '100%',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst iconContainerStyles: React.CSSProperties = {\n flexShrink: 0,\n width: '24px',\n height: '24px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst contentContainerStyles: React.CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n};\n\nconst titleStyles: React.CSSProperties = {\n fontSize: '18px',\n fontWeight: 600,\n lineHeight: '1.25',\n marginBottom: '8px',\n};\n\nconst messageStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 400,\n lineHeight: '1.5',\n margin: 0,\n};\n\nconst actionContainerStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n alignSelf: 'stretch',\n flexShrink: 0,\n};\n\nconst actionButtonStyles: React.CSSProperties = {\n background: 'none',\n border: 'none',\n padding: 0,\n fontSize: '13px',\n fontWeight: 600,\n lineHeight: '1.5',\n textDecoration: 'underline',\n textUnderlinePosition: 'from-font',\n cursor: 'pointer',\n fontFamily: 'inherit',\n};\n\nconst closeButtonStyles: React.CSSProperties = {\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n marginLeft: '8px',\n};\n\nconst variantConfig = {\n warning: {\n backgroundColor: '#fffaf5',\n borderColor: '#e4720d',\n textColor: '#611f00',\n actionColor: '#a74102',\n icon: AlertTriangle,\n },\n destructive: {\n backgroundColor: '#fff5f5',\n borderColor: '#c93232',\n textColor: '#610202',\n actionColor: '#920a0a',\n icon: AlertCircle,\n },\n information: {\n backgroundColor: '#f5fbff',\n borderColor: '#2c8bca',\n textColor: '#053a61',\n actionColor: '#024f83',\n icon: Info,\n },\n neutral: {\n backgroundColor: 'transparent',\n borderColor: '#b3b3b3',\n textColor: '#2f2f2f',\n actionColor: '#2f2f2f',\n icon: Info,\n },\n};\n\n/**\n * Banner component - Arbor Design System\n *\n * Informational banners with 4 variants (warning, destructive, information, neutral)\n * and optional title, icon, and action button.\n *\n * IMPORTANT: Banners are always displayed inline with page content (not overlays).\n * They flow with the document layout and push other content down.\n *\n * For overlay notifications in the top-right corner, use the Toast component instead.\n */\nexport const Banner = React.forwardRef<HTMLDivElement, BannerProps>(\n (\n {\n variant = 'information',\n title,\n message,\n icon = true,\n actionLabel,\n onAction,\n onClose,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const config = variantConfig[variant];\n const DefaultIcon = config.icon;\n\n // Determine what icon to show\n const showIcon = icon !== false;\n const iconElement =\n icon === true || icon === undefined ? (\n <DefaultIcon size={20} strokeWidth={2} />\n ) : (\n icon\n );\n\n const containerStylesCombined: React.CSSProperties = {\n ...containerStyles,\n backgroundColor: config.backgroundColor,\n borderColor: config.borderColor,\n color: config.textColor,\n gap: showIcon ? '16px' : '0px',\n ...style,\n };\n\n const titleStylesCombined: React.CSSProperties = {\n ...titleStyles,\n color: config.textColor,\n };\n\n const messageStylesCombined: React.CSSProperties = {\n ...messageStyles,\n color: config.textColor,\n };\n\n const actionButtonStylesCombined: React.CSSProperties = {\n ...actionButtonStyles,\n color: config.actionColor,\n };\n\n const closeButtonStylesCombined: React.CSSProperties = {\n ...closeButtonStyles,\n color: config.textColor,\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-banner', `arbor-banner--${variant}`, className)}\n style={containerStylesCombined}\n data-testid={dataTestId}\n role=\"alert\"\n >\n {showIcon && (\n <div style={{ ...iconContainerStyles, color: config.textColor }}>\n {iconElement}\n </div>\n )}\n\n <div style={contentContainerStyles}>\n {title && <div style={titleStylesCombined}>{title}</div>}\n <p style={messageStylesCombined}>{message}</p>\n </div>\n\n {actionLabel && onAction && (\n <div style={actionContainerStyles}>\n <button\n type=\"button\"\n onClick={onAction}\n style={actionButtonStylesCombined}\n >\n {actionLabel}\n </button>\n </div>\n )}\n\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n style={closeButtonStylesCombined}\n aria-label=\"Close banner\"\n >\n <X size={20} />\n </button>\n )}\n </div>\n );\n }\n);\n\nBanner.displayName = 'Banner';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight } from 'lucide-react';\n\nexport interface PaginationProps {\n /**\n * Current page number (1-indexed)\n */\n currentPage: number;\n /**\n * Total number of pages\n */\n totalPages: number;\n /**\n * Callback when page changes\n */\n onPageChange: (page: number) => void;\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\nconst containerStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst buttonStyles: React.CSSProperties = {\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n transition: 'background-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out',\n flexShrink: 0,\n WebkitTapHighlightColor: 'transparent',\n outline: 'none',\n};\n\nconst buttonDisabledStyles: React.CSSProperties = {\n cursor: 'not-allowed',\n opacity: 0.5,\n};\n\nconst labelStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 600,\n lineHeight: '1.5',\n color: '#2f2f2f',\n};\n\nconst inputWrapperStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n};\n\nconst inputStyles: React.CSSProperties = {\n width: '60px',\n paddingTop: '12px',\n paddingBottom: '12px',\n paddingLeft: '16px',\n paddingRight: '16px',\n fontSize: '13px',\n fontWeight: 400,\n lineHeight: '1.5',\n color: '#2f2f2f',\n backgroundColor: 'white',\n border: '1px solid #dfdfdf',\n borderRadius: '8px',\n fontFamily: 'inherit',\n textAlign: 'center',\n outline: 'none',\n};\n\nconst inputFocusStyles: React.CSSProperties = {\n boxShadow: '0px 0px 0px 3px #3cad51',\n};\n\nconst textStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 400,\n lineHeight: '1.5',\n color: '#2f2f2f',\n};\n\n/**\n * Pagination component - Arbor Design System\n *\n * A pagination control with first/previous/next/last buttons and a page input field.\n */\nexport const Pagination = React.forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n currentPage,\n totalPages,\n onPageChange,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [inputValue, setInputValue] = React.useState(currentPage.toString());\n const [focusedButton, setFocusedButton] = React.useState<string | null>(null);\n const [hoveredButton, setHoveredButton] = React.useState<string | null>(null);\n const [activeButton, setActiveButton] = React.useState<string | null>(null);\n const [inputFocused, setInputFocused] = React.useState(false);\n\n React.useEffect(() => {\n setInputValue(currentPage.toString());\n }, [currentPage]);\n\n const handleFirstPage = () => {\n if (currentPage !== 1) {\n onPageChange(1);\n }\n };\n\n const handlePreviousPage = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNextPage = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handleLastPage = () => {\n if (currentPage !== totalPages) {\n onPageChange(totalPages);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n // Allow empty or valid numbers\n if (value === '' || /^\\d+$/.test(value)) {\n setInputValue(value);\n }\n };\n\n const handleInputBlur = () => {\n setInputFocused(false);\n const pageNumber = parseInt(inputValue, 10);\n if (isNaN(pageNumber) || pageNumber < 1) {\n setInputValue(currentPage.toString());\n } else if (pageNumber > totalPages) {\n setInputValue(totalPages.toString());\n onPageChange(totalPages);\n } else if (pageNumber !== currentPage) {\n onPageChange(pageNumber);\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n handleInputBlur();\n (e.target as HTMLInputElement).blur();\n }\n };\n\n const getButtonStyle = (buttonName: string, disabled: boolean): React.CSSProperties => {\n if (disabled) {\n return { ...buttonStyles, ...buttonDisabledStyles };\n }\n\n const isHovered = hoveredButton === buttonName;\n const isFocused = focusedButton === buttonName;\n const isActive = activeButton === buttonName;\n\n const style: React.CSSProperties = {\n ...buttonStyles,\n };\n\n // Apply hover state (light gray background)\n if (isHovered && !isFocused && !isActive) {\n style.backgroundColor = '#efefef';\n }\n\n // Apply active state (same as hover or transparent)\n if (isActive && !isFocused) {\n style.backgroundColor = 'transparent';\n }\n\n // Apply focus state (green ring, transparent background)\n if (isFocused) {\n style.boxShadow = '0px 0px 0px 3px #3cad51';\n style.backgroundColor = 'rgba(255, 255, 255, 0.01)';\n }\n\n return style;\n };\n\n const isFirstDisabled = currentPage === 1;\n const isPreviousDisabled = currentPage === 1;\n const isNextDisabled = currentPage === totalPages;\n const isLastDisabled = currentPage === totalPages;\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-pagination', className)}\n style={{ ...containerStyles, ...style }}\n data-testid={dataTestId}\n >\n {/* First page button */}\n <button\n type=\"button\"\n onClick={handleFirstPage}\n disabled={isFirstDisabled}\n onMouseEnter={() => setHoveredButton('first')}\n onMouseLeave={() => setHoveredButton(null)}\n onMouseDown={() => setActiveButton('first')}\n onMouseUp={() => setActiveButton(null)}\n onFocus={() => setFocusedButton('first')}\n onBlur={() => setFocusedButton(null)}\n style={getButtonStyle('first', isFirstDisabled)}\n aria-label=\"Go to first page\"\n >\n <ChevronsLeft size={16} color=\"#2f2f2f\" />\n </button>\n\n {/* Previous page button */}\n <button\n type=\"button\"\n onClick={handlePreviousPage}\n disabled={isPreviousDisabled}\n onMouseEnter={() => setHoveredButton('previous')}\n onMouseLeave={() => setHoveredButton(null)}\n onMouseDown={() => setActiveButton('previous')}\n onMouseUp={() => setActiveButton(null)}\n onFocus={() => setFocusedButton('previous')}\n onBlur={() => setFocusedButton(null)}\n style={getButtonStyle('previous', isPreviousDisabled)}\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft size={16} color=\"#2f2f2f\" />\n </button>\n\n {/* Page input */}\n <div style={inputWrapperStyles}>\n <span style={labelStyles}>Page</span>\n <input\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onFocus={() => setInputFocused(true)}\n onKeyDown={handleInputKeyDown}\n style={{\n ...inputStyles,\n ...(inputFocused && inputFocusStyles),\n }}\n aria-label={`Page ${currentPage} of ${totalPages}`}\n />\n <span style={textStyles}>of {totalPages}</span>\n </div>\n\n {/* Next page button */}\n <button\n type=\"button\"\n onClick={handleNextPage}\n disabled={isNextDisabled}\n onMouseEnter={() => setHoveredButton('next')}\n onMouseLeave={() => setHoveredButton(null)}\n onMouseDown={() => setActiveButton('next')}\n onMouseUp={() => setActiveButton(null)}\n onFocus={() => setFocusedButton('next')}\n onBlur={() => setFocusedButton(null)}\n style={getButtonStyle('next', isNextDisabled)}\n aria-label=\"Go to next page\"\n >\n <ChevronRight size={16} color=\"#2f2f2f\" />\n </button>\n\n {/* Last page button */}\n <button\n type=\"button\"\n onClick={handleLastPage}\n disabled={isLastDisabled}\n onMouseEnter={() => setHoveredButton('last')}\n onMouseLeave={() => setHoveredButton(null)}\n onMouseDown={() => setActiveButton('last')}\n onMouseUp={() => setActiveButton(null)}\n onFocus={() => setFocusedButton('last')}\n onBlur={() => setFocusedButton(null)}\n style={getButtonStyle('last', isLastDisabled)}\n aria-label=\"Go to last page\"\n >\n <ChevronsRight size={16} color=\"#2f2f2f\" />\n </button>\n </div>\n );\n }\n);\n\nPagination.displayName = 'Pagination';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { ChevronDown } from 'lucide-react';\n\nexport interface TableFooterPaginationProps {\n /**\n * Current page number (1-indexed)\n */\n currentPage: number;\n /**\n * Total number of pages\n */\n totalPages: number;\n /**\n * Callback when page changes\n */\n onPageChange: (page: number) => void;\n /**\n * Total number of results\n */\n totalResults: number;\n /**\n * Number of results currently showing\n */\n currentResults: number;\n /**\n * Items per page\n */\n itemsPerPage: number;\n /**\n * Callback when items per page changes\n */\n onItemsPerPageChange?: (itemsPerPage: number) => void;\n /**\n * Callback when expand table is clicked\n */\n onExpandTable?: () => void;\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\nconst containerStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: 'white',\n paddingTop: '4px',\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst textStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 400,\n lineHeight: '1.5',\n color: '#2f2f2f',\n minWidth: '165px',\n};\n\nconst paginationWrapperStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n minWidth: '165px',\n flexWrap: 'wrap',\n};\n\nconst paginationButtonStyles: React.CSSProperties = {\n width: '32px',\n height: '32px',\n minWidth: '32px',\n minHeight: '32px',\n maxWidth: '32px',\n maxHeight: '32px',\n borderRadius: '99px',\n border: 'none',\n background: 'white',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n transition: 'background-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out',\n flexShrink: 0,\n WebkitTapHighlightColor: 'transparent',\n outline: 'none',\n};\n\nconst paginationButtonDisabledStyles: React.CSSProperties = {\n cursor: 'not-allowed',\n opacity: 0.5,\n};\n\nconst paginationLabelStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 400,\n lineHeight: '1.5',\n color: '#2f2f2f',\n};\n\nconst paginationInputWrapperStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n};\n\nconst paginationInputStyles: React.CSSProperties = {\n width: '60px',\n paddingTop: '12px',\n paddingBottom: '12px',\n paddingLeft: '16px',\n paddingRight: '16px',\n fontSize: '13px',\n fontWeight: 400,\n lineHeight: '1.5',\n color: '#2f2f2f',\n backgroundColor: 'white',\n border: '1px solid #dfdfdf',\n borderRadius: '8px',\n fontFamily: 'inherit',\n textAlign: 'center',\n outline: 'none',\n};\n\nconst paginationInputFocusStyles: React.CSSProperties = {\n boxShadow: '0px 0px 0px 3px #3cad51',\n};\n\nconst rightAlignedStyles: React.CSSProperties = {\n display: 'flex',\n gap: '16px',\n alignItems: 'center',\n justifyContent: 'flex-end',\n minWidth: '165px',\n};\n\nconst perPageButtonStyles: React.CSSProperties = {\n height: '32px',\n backgroundColor: 'white',\n border: '1px solid #d1d1d1',\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n paddingLeft: '12px',\n paddingRight: '8px',\n paddingTop: '8px',\n paddingBottom: '8px',\n cursor: 'pointer',\n transition: 'background-color 0.2s ease-in-out',\n outline: 'none',\n};\n\nconst perPageTextStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 600,\n lineHeight: '1.5',\n color: '#2f2f2f',\n textAlign: 'center',\n};\n\nconst expandButtonStyles: React.CSSProperties = {\n height: '32px',\n minHeight: '32px',\n backgroundColor: '#efefef',\n border: 'none',\n borderRadius: '99px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingLeft: '16px',\n paddingRight: '16px',\n paddingTop: 0,\n paddingBottom: 0,\n gap: 0,\n cursor: 'pointer',\n transition: 'background-color 0.2s ease-in-out',\n outline: 'none',\n};\n\nconst expandButtonTextStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 600,\n lineHeight: '1.5',\n color: '#2f2f2f',\n textAlign: 'center',\n};\n\n/**\n * TableFooterPagination component - Arbor Design System\n *\n * A table footer component with result count, pagination, and table controls.\n */\nexport const TableFooterPagination = React.forwardRef<\n HTMLDivElement,\n TableFooterPaginationProps\n>(\n (\n {\n currentPage,\n totalPages,\n onPageChange,\n totalResults,\n currentResults,\n itemsPerPage,\n onItemsPerPageChange,\n onExpandTable,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [inputValue, setInputValue] = React.useState(currentPage.toString());\n const [focusedButton, setFocusedButton] = React.useState<string | null>(null);\n const [hoveredButton, setHoveredButton] = React.useState<string | null>(null);\n const [activeButton, setActiveButton] = React.useState<string | null>(null);\n const [inputFocused, setInputFocused] = React.useState(false);\n const [perPageHovered, setPerPageHovered] = React.useState(false);\n const [expandHovered, setExpandHovered] = React.useState(false);\n\n React.useEffect(() => {\n setInputValue(currentPage.toString());\n }, [currentPage]);\n\n const handleFirstPage = () => {\n if (currentPage !== 1) {\n onPageChange(1);\n }\n };\n\n const handlePreviousPage = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNextPage = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n const handleLastPage = () => {\n if (currentPage !== totalPages) {\n onPageChange(totalPages);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n if (value === '' || /^\\d+$/.test(value)) {\n setInputValue(value);\n }\n };\n\n const handleInputBlur = () => {\n setInputFocused(false);\n const pageNumber = parseInt(inputValue, 10);\n if (isNaN(pageNumber) || pageNumber < 1) {\n setInputValue(currentPage.toString());\n } else if (pageNumber > totalPages) {\n setInputValue(totalPages.toString());\n onPageChange(totalPages);\n } else if (pageNumber !== currentPage) {\n onPageChange(pageNumber);\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n handleInputBlur();\n (e.target as HTMLInputElement).blur();\n }\n };\n\n const getButtonStyle = (\n buttonName: string,\n disabled: boolean\n ): React.CSSProperties => {\n if (disabled) {\n return { ...paginationButtonStyles, ...paginationButtonDisabledStyles };\n }\n\n const isHovered = hoveredButton === buttonName;\n const isFocused = focusedButton === buttonName;\n const isActive = activeButton === buttonName;\n\n const style: React.CSSProperties = {\n ...paginationButtonStyles,\n };\n\n if (isHovered && !isFocused && !isActive) {\n style.backgroundColor = '#efefef';\n }\n\n if (isActive && !isFocused) {\n style.backgroundColor = 'transparent';\n }\n\n if (isFocused) {\n style.boxShadow = '0px 0px 0px 3px #3cad51';\n style.backgroundColor = 'rgba(255, 255, 255, 0.01)';\n }\n\n return style;\n };\n\n const isFirstDisabled = currentPage === 1;\n const isPreviousDisabled = currentPage === 1;\n const isNextDisabled = currentPage === totalPages;\n const isLastDisabled = currentPage === totalPages;\n\n const resultText =\n currentResults === totalResults\n ? `Showing ${totalResults} results`\n : `Showing ${currentResults} of ${totalResults} results`;\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-table-footer-pagination', className)}\n style={{ ...containerStyles, ...style }}\n data-testid={dataTestId}\n >\n {/* Left section - Results count */}\n <div style={textStyles}>{resultText}</div>\n\n {/* Middle section - Pagination */}\n <div style={paginationWrapperStyles}>\n <button\n type=\"button\"\n onClick={handleFirstPage}\n disabled={isFirstDisabled}\n onMouseEnter={() => setHoveredButton('first')}\n onMouseLeave={() => setHoveredButton(null)}\n onMouseDown={() => setActiveButton('first')}\n onMouseUp={() => setActiveButton(null)}\n onFocus={() => setFocusedButton('first')}\n onBlur={() => setFocusedButton(null)}\n style={getButtonStyle('first', isFirstDisabled)}\n aria-label=\"Go to first page\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 12L3 8L7 4M11 12L7 8L11 4\"\n stroke=\"#2f2f2f\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n <button\n type=\"button\"\n onClick={handlePreviousPage}\n disabled={isPreviousDisabled}\n onMouseEnter={() => setHoveredButton('previous')}\n onMouseLeave={() => setHoveredButton(null)}\n onMouseDown={() => setActiveButton('previous')}\n onMouseUp={() => setActiveButton(null)}\n onFocus={() => setFocusedButton('previous')}\n onBlur={() => setFocusedButton(null)}\n style={getButtonStyle('previous', isPreviousDisabled)}\n aria-label=\"Go to previous page\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 12L6 8L10 4\"\n stroke=\"#2f2f2f\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n <div style={paginationInputWrapperStyles}>\n <span style={paginationLabelStyles}>Page</span>\n <input\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onFocus={() => setInputFocused(true)}\n onKeyDown={handleInputKeyDown}\n style={{\n ...paginationInputStyles,\n ...(inputFocused && paginationInputFocusStyles),\n }}\n aria-label={`Page ${currentPage} of ${totalPages}`}\n />\n <span style={paginationLabelStyles}>of {totalPages}</span>\n </div>\n\n <button\n type=\"button\"\n onClick={handleNextPage}\n disabled={isNextDisabled}\n onMouseEnter={() => setHoveredButton('next')}\n onMouseLeave={() => setHoveredButton(null)}\n onMouseDown={() => setActiveButton('next')}\n onMouseUp={() => setActiveButton(null)}\n onFocus={() => setFocusedButton('next')}\n onBlur={() => setFocusedButton(null)}\n style={getButtonStyle('next', isNextDisabled)}\n aria-label=\"Go to next page\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"#2f2f2f\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n <button\n type=\"button\"\n onClick={handleLastPage}\n disabled={isLastDisabled}\n onMouseEnter={() => setHoveredButton('last')}\n onMouseLeave={() => setHoveredButton(null)}\n onMouseDown={() => setActiveButton('last')}\n onMouseUp={() => setActiveButton(null)}\n onFocus={() => setFocusedButton('last')}\n onBlur={() => setFocusedButton(null)}\n style={getButtonStyle('last', isLastDisabled)}\n aria-label=\"Go to last page\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 4L13 8L9 12M5 4L9 8L5 12\"\n stroke=\"#2f2f2f\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n {/* Right section - Controls */}\n <div style={rightAlignedStyles}>\n {onItemsPerPageChange && (\n <button\n type=\"button\"\n onClick={() => onItemsPerPageChange(itemsPerPage)}\n onMouseEnter={() => setPerPageHovered(true)}\n onMouseLeave={() => setPerPageHovered(false)}\n style={{\n ...perPageButtonStyles,\n backgroundColor: perPageHovered ? '#f5f5f5' : 'white',\n }}\n aria-label=\"Items per page\"\n >\n <span style={perPageTextStyles}>{itemsPerPage} per page</span>\n <ChevronDown size={16} color=\"#2f2f2f\" />\n </button>\n )}\n\n {onExpandTable && (\n <button\n type=\"button\"\n onClick={onExpandTable}\n onMouseEnter={() => setExpandHovered(true)}\n onMouseLeave={() => setExpandHovered(false)}\n style={{\n ...expandButtonStyles,\n backgroundColor: expandHovered ? '#e5e5e5' : '#efefef',\n }}\n aria-label=\"Expand table\"\n >\n <span style={expandButtonTextStyles}>Expand table</span>\n </button>\n )}\n </div>\n </div>\n );\n }\n);\n\nTableFooterPagination.displayName = 'TableFooterPagination';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport * as Popover from '@radix-ui/react-popover';\nimport {\n ChevronDown,\n Undo2,\n Redo2,\n Search,\n Download,\n MessageSquare,\n Settings,\n Expand,\n} from 'lucide-react';\n\nexport interface TableControlsProps {\n /**\n * Number of selected items for the Actions button\n */\n selectedCount?: number;\n /**\n * Callback when Actions dropdown is clicked\n */\n onActionsClick?: () => void;\n /**\n * Callback when Undo is clicked\n */\n onUndoClick?: () => void;\n /**\n * Callback when Redo is clicked\n */\n onRedoClick?: () => void;\n /**\n * Callback when Hide Columns is clicked\n */\n onHideColumnsClick?: () => void;\n /**\n * Callback when Search is clicked\n */\n onSearchClick?: () => void;\n /**\n * Callback when Download is clicked\n */\n onDownloadClick?: () => void;\n /**\n * Callback when Tooltips toggle is clicked\n */\n onTooltipsClick?: () => void;\n /**\n * Whether tooltips are enabled\n */\n tooltipsEnabled?: boolean;\n /**\n * Callback when Settings is clicked\n */\n onSettingsClick?: () => void;\n /**\n * Callback when Expand is clicked\n */\n onExpandClick?: () => void;\n /**\n * Whether undo is disabled\n */\n undoDisabled?: boolean;\n /**\n * Whether redo is disabled\n */\n redoDisabled?: 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\nconst containerStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: '8px',\n paddingBottom: '8px',\n paddingLeft: 0,\n paddingRight: 0,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst actions1Styles: React.CSSProperties = {\n display: 'flex',\n gap: '12px',\n alignItems: 'center',\n};\n\nconst actions2Styles: React.CSSProperties = {\n display: 'flex',\n gap: '12px',\n alignItems: 'center',\n justifyContent: 'flex-end',\n flexGrow: 1,\n paddingRight: '4px',\n};\n\nconst dropdownButtonStyles: React.CSSProperties = {\n height: '32px',\n backgroundColor: 'white',\n border: '1px solid #d1d1d1',\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n paddingLeft: '12px',\n paddingRight: '8px',\n paddingTop: 0,\n paddingBottom: 0,\n cursor: 'pointer',\n transition: 'background-color 0.2s ease-in-out',\n outline: 'none',\n};\n\nconst dropdownTextStyles: React.CSSProperties = {\n fontSize: '13px',\n fontWeight: 600,\n lineHeight: '1.5',\n color: '#2f2f2f',\n textAlign: 'center',\n};\n\nconst iconButtonStyles: React.CSSProperties = {\n width: '32px',\n height: '32px',\n borderRadius: '99px',\n border: 'none',\n backgroundColor: 'white',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n transition: 'background-color 0.2s ease-in-out',\n flexShrink: 0,\n outline: 'none',\n};\n\nconst iconButtonDisabledStyles: React.CSSProperties = {\n cursor: 'not-allowed',\n opacity: 0.5,\n};\n\nconst popoverContentStyles: React.CSSProperties = {\n backgroundColor: 'white',\n border: '1px solid #d1d1d1',\n borderRadius: '8px',\n padding: '8px',\n minWidth: '180px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n zIndex: 1000,\n};\n\nconst menuItemStyles: React.CSSProperties = {\n padding: '8px 12px',\n fontSize: '13px',\n color: '#2f2f2f',\n cursor: 'pointer',\n borderRadius: '4px',\n border: 'none',\n backgroundColor: 'white',\n width: '100%',\n textAlign: 'left',\n transition: 'background-color 0.2s ease-in-out',\n};\n\n/**\n * TableControls component - Arbor Design System\n *\n * A toolbar component with action buttons and controls for tables.\n */\nexport const TableControls = React.forwardRef<HTMLDivElement, TableControlsProps>(\n (\n {\n selectedCount = 0,\n onActionsClick,\n onUndoClick,\n onRedoClick,\n onHideColumnsClick,\n onSearchClick,\n onDownloadClick,\n onTooltipsClick,\n tooltipsEnabled = false,\n onSettingsClick,\n onExpandClick,\n undoDisabled = false,\n redoDisabled = false,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [hoveredButton, setHoveredButton] = React.useState<string | null>(null);\n const [focusedButton, setFocusedButton] = React.useState<string | null>(null);\n const [actionsOpen, setActionsOpen] = React.useState(false);\n const [hideColumnsOpen, setHideColumnsOpen] = React.useState(false);\n\n const getIconButtonStyle = (\n buttonName: string,\n disabled: boolean = false\n ): React.CSSProperties => {\n if (disabled) {\n return { ...iconButtonStyles, ...iconButtonDisabledStyles };\n }\n\n const isHovered = hoveredButton === buttonName;\n const isFocused = focusedButton === buttonName;\n return {\n ...iconButtonStyles,\n backgroundColor: isHovered ? '#f5f5f5' : 'white',\n boxShadow: isFocused ? '0 0 0 3px #3cad51' : 'none',\n };\n };\n\n const getDropdownButtonStyle = (buttonName: string): React.CSSProperties => {\n const isHovered = hoveredButton === buttonName;\n const isFocused = focusedButton === buttonName;\n return {\n ...dropdownButtonStyles,\n backgroundColor: isHovered ? '#f5f5f5' : 'white',\n boxShadow: isFocused ? '0 0 0 3px #3cad51' : 'none',\n };\n };\n\n return (\n <div\n ref={ref}\n className={clsx('arbor-table-controls', className)}\n style={{ ...containerStyles, ...style }}\n data-testid={dataTestId}\n >\n {/* Left section - Actions 1 */}\n <div style={actions1Styles}>\n {onActionsClick && (\n <Popover.Root open={actionsOpen} onOpenChange={setActionsOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n onClick={() => {\n setActionsOpen(!actionsOpen);\n onActionsClick();\n }}\n onMouseEnter={() => setHoveredButton('actions')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('actions')}\n onBlur={() => setFocusedButton(null)}\n style={getDropdownButtonStyle('actions')}\n aria-label=\"Actions\"\n >\n <span style={dropdownTextStyles}>Actions ({selectedCount})</span>\n <ChevronDown size={16} color=\"#2f2f2f\" />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n style={popoverContentStyles}\n sideOffset={4}\n align=\"start\"\n >\n <button\n style={menuItemStyles}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f5f5f5')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'white')}\n onClick={() => {\n console.log('Edit selected items');\n setActionsOpen(false);\n }}\n >\n Edit selected items\n </button>\n <button\n style={menuItemStyles}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f5f5f5')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'white')}\n onClick={() => {\n console.log('Delete selected items');\n setActionsOpen(false);\n }}\n >\n Delete selected items\n </button>\n <button\n style={menuItemStyles}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f5f5f5')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'white')}\n onClick={() => {\n console.log('Export selected items');\n setActionsOpen(false);\n }}\n >\n Export selected items\n </button>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n\n {onUndoClick && (\n <button\n type=\"button\"\n onClick={onUndoClick}\n disabled={undoDisabled}\n onMouseEnter={() => setHoveredButton('undo')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('undo')}\n onBlur={() => setFocusedButton(null)}\n style={getIconButtonStyle('undo', undoDisabled)}\n aria-label=\"Undo\"\n >\n <Undo2 size={16} color=\"#2f2f2f\" />\n </button>\n )}\n\n {onRedoClick && (\n <button\n type=\"button\"\n onClick={onRedoClick}\n disabled={redoDisabled}\n onMouseEnter={() => setHoveredButton('redo')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('redo')}\n onBlur={() => setFocusedButton(null)}\n style={getIconButtonStyle('redo', redoDisabled)}\n aria-label=\"Redo\"\n >\n <Redo2 size={16} color=\"#2f2f2f\" />\n </button>\n )}\n\n {onHideColumnsClick && (\n <Popover.Root open={hideColumnsOpen} onOpenChange={setHideColumnsOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n onClick={() => {\n setHideColumnsOpen(!hideColumnsOpen);\n onHideColumnsClick();\n }}\n onMouseEnter={() => setHoveredButton('hideColumns')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('hideColumns')}\n onBlur={() => setFocusedButton(null)}\n style={getDropdownButtonStyle('hideColumns')}\n aria-label=\"Hide Columns\"\n >\n <span style={dropdownTextStyles}>Hide Columns</span>\n <ChevronDown size={16} color=\"#2f2f2f\" />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n style={popoverContentStyles}\n sideOffset={4}\n align=\"start\"\n >\n <button\n style={menuItemStyles}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f5f5f5')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'white')}\n onClick={() => {\n console.log('Hide Name column');\n setHideColumnsOpen(false);\n }}\n >\n Name\n </button>\n <button\n style={menuItemStyles}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f5f5f5')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'white')}\n onClick={() => {\n console.log('Hide Email column');\n setHideColumnsOpen(false);\n }}\n >\n Email\n </button>\n <button\n style={menuItemStyles}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f5f5f5')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'white')}\n onClick={() => {\n console.log('Hide Status column');\n setHideColumnsOpen(false);\n }}\n >\n Status\n </button>\n <button\n style={menuItemStyles}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f5f5f5')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'white')}\n onClick={() => {\n console.log('Hide Date column');\n setHideColumnsOpen(false);\n }}\n >\n Date\n </button>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n </div>\n\n {/* Right section - Actions 2 */}\n <div style={actions2Styles}>\n {onSearchClick && (\n <button\n type=\"button\"\n onClick={onSearchClick}\n onMouseEnter={() => setHoveredButton('search')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('search')}\n onBlur={() => setFocusedButton(null)}\n style={getIconButtonStyle('search')}\n aria-label=\"Search\"\n >\n <Search size={16} color=\"#2f2f2f\" />\n </button>\n )}\n\n {onDownloadClick && (\n <button\n type=\"button\"\n onClick={onDownloadClick}\n onMouseEnter={() => setHoveredButton('download')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('download')}\n onBlur={() => setFocusedButton(null)}\n style={getIconButtonStyle('download')}\n aria-label=\"Download\"\n >\n <Download size={16} color=\"#2f2f2f\" />\n </button>\n )}\n\n {onTooltipsClick && (\n <button\n type=\"button\"\n onClick={onTooltipsClick}\n onMouseEnter={() => setHoveredButton('tooltips')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('tooltips')}\n onBlur={() => setFocusedButton(null)}\n style={getIconButtonStyle('tooltips')}\n aria-label={tooltipsEnabled ? 'Disable tooltips' : 'Enable tooltips'}\n >\n <MessageSquare\n size={16}\n color=\"#2f2f2f\"\n />\n </button>\n )}\n\n {onSettingsClick && (\n <button\n type=\"button\"\n onClick={onSettingsClick}\n onMouseEnter={() => setHoveredButton('settings')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('settings')}\n onBlur={() => setFocusedButton(null)}\n style={getIconButtonStyle('settings')}\n aria-label=\"Settings\"\n >\n <Settings size={16} color=\"#2f2f2f\" />\n </button>\n )}\n\n {onExpandClick && (\n <button\n type=\"button\"\n onClick={onExpandClick}\n onMouseEnter={() => setHoveredButton('expand')}\n onMouseLeave={() => setHoveredButton(null)}\n onFocus={() => setFocusedButton('expand')}\n onBlur={() => setFocusedButton(null)}\n style={getIconButtonStyle('expand')}\n aria-label=\"Expand\"\n >\n <Expand size={16} color=\"#2f2f2f\" />\n </button>\n )}\n </div>\n </div>\n );\n }\n);\n\nTableControls.displayName = 'TableControls';\n","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { MoreVertical } from 'lucide-react';\nimport { Checkbox } from '../Checkbox';\n\nexport interface TableColumn {\n /**\n * Unique key for the column\n */\n key: string;\n /**\n * Column header label\n */\n label: string;\n /**\n * Whether to show the menu icon in the header\n */\n showMenu?: boolean;\n /**\n * Custom width for the column\n */\n width?: string;\n}\n\nexport interface TableRow {\n /**\n * Unique ID for the row\n */\n id: string;\n /**\n * Cell data keyed by column key\n */\n cells: Record<string, React.ReactNode>;\n /**\n * Whether the row is selected\n */\n selected?: boolean;\n}\n\nexport interface TableProps {\n /**\n * Table columns configuration\n */\n columns: TableColumn[];\n /**\n * Table rows data\n */\n rows: TableRow[];\n /**\n * Callback when row selection changes\n */\n onRowSelectionChange?: (rowId: string, selected: boolean) => void;\n /**\n * Callback when select all is toggled\n */\n onSelectAllChange?: (selected: boolean) => void;\n /**\n * Whether all rows are selected\n */\n allSelected?: boolean;\n /**\n * Whether some rows are selected (indeterminate state)\n */\n someSelected?: 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\nconst tableStyles: React.CSSProperties = {\n width: '100%',\n borderCollapse: 'separate',\n borderSpacing: 0,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n};\n\nconst headerCellStyles: React.CSSProperties = {\n height: '44px',\n paddingLeft: '16px',\n paddingRight: '16px',\n paddingTop: 0,\n paddingBottom: 0,\n backgroundColor: '#f8f8f8',\n borderBottom: '1px solid #efefef',\n fontSize: '13px',\n fontWeight: 600,\n color: '#2f2f2f',\n textAlign: 'left',\n position: 'relative',\n};\n\nconst checkboxCellStyles: React.CSSProperties = {\n width: '48px',\n paddingLeft: '16px',\n paddingRight: '8px',\n};\n\nconst bodyCellStyles: React.CSSProperties = {\n height: '41px',\n paddingLeft: '16px',\n paddingRight: '16px',\n paddingTop: '8px',\n paddingBottom: '8px',\n borderBottom: '1px solid #efefef',\n fontSize: '13px',\n color: '#2f2f2f',\n};\n\nconst menuButtonStyles: React.CSSProperties = {\n width: '24px',\n height: '24px',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n marginLeft: '8px',\n borderRadius: '4px',\n transition: 'background-color 0.2s ease-in-out',\n};\n\nconst rowStyles: React.CSSProperties = {\n transition: 'background-color 0.1s ease-in-out',\n};\n\n/**\n * Table component - Arbor Design System\n *\n * A data table component with selectable rows and column headers.\n */\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(\n (\n {\n columns,\n rows,\n onRowSelectionChange,\n onSelectAllChange,\n allSelected = false,\n someSelected = false,\n className,\n style,\n 'data-testid': dataTestId,\n },\n ref\n ) => {\n const [hoveredRow, setHoveredRow] = React.useState<string | null>(null);\n const [hoveredMenuButton, setHoveredMenuButton] = React.useState<string | null>(null);\n\n return (\n <table\n ref={ref}\n className={clsx('arbor-table', className)}\n style={{ ...tableStyles, ...style }}\n data-testid={dataTestId}\n >\n <thead>\n <tr>\n {/* Checkbox header cell */}\n <th style={{ ...headerCellStyles, ...checkboxCellStyles }}>\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onChange={onSelectAllChange}\n aria-label=\"Select all rows\"\n />\n </th>\n\n {/* Column headers */}\n {columns.map((column) => (\n <th\n key={column.key}\n style={{\n ...headerCellStyles,\n ...(column.width ? { width: column.width } : {}),\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <span>{column.label}</span>\n {column.showMenu !== false && (\n <button\n type=\"button\"\n onMouseEnter={() => setHoveredMenuButton(`header-${column.key}`)}\n onMouseLeave={() => setHoveredMenuButton(null)}\n style={{\n ...menuButtonStyles,\n backgroundColor:\n hoveredMenuButton === `header-${column.key}` ? '#f5f5f5' : 'transparent',\n }}\n aria-label={`${column.label} options`}\n >\n <MoreVertical size={16} color=\"#595959\" />\n </button>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rows.map((row, index) => {\n const isOdd = index % 2 === 0;\n const isHovered = hoveredRow === row.id;\n\n return (\n <tr\n key={row.id}\n onMouseEnter={() => setHoveredRow(row.id)}\n onMouseLeave={() => setHoveredRow(null)}\n style={{\n ...rowStyles,\n backgroundColor: isHovered\n ? '#fafafa'\n : isOdd\n ? 'white'\n : '#f8f8f8',\n }}\n >\n {/* Checkbox cell */}\n <td style={{ ...bodyCellStyles, ...checkboxCellStyles }}>\n <Checkbox\n checked={row.selected || false}\n onChange={(checked) => onRowSelectionChange?.(row.id, checked)}\n aria-label={`Select row ${row.id}`}\n />\n </td>\n\n {/* Data cells */}\n {columns.map((column) => (\n <td key={column.key} style={bodyCellStyles}>\n {row.cells[column.key]}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n }\n);\n\nTable.displayName = 'Table';\n"],"mappings":"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","names":["React","import_clsx","import_jsx_runtime","React","import_clsx","import_jsx_runtime","React","import_clsx","import_jsx_runtime","React","import_clsx","import_jsx_runtime","labelStyles","helperTextStyles","errorTextStyles","React","import_clsx","import_jsx_runtime","labelStyles","helperTextStyles","errorTextStyles","buttonStyles","inputStyles","React","import_clsx","import_lucide_react","import_jsx_runtime","labelStyles","React","import_clsx","import_jsx_runtime","checkedStyles","checkedHoverStyles","uncheckedHoverStyles","labelStyles","wrapperStyles","React","import_clsx","import_lucide_react","import_jsx_runtime","wrapperStyles","labelStyles","inputStyles","helperTextStyles","React","import_clsx","import_lucide_react","import_jsx_runtime","React","import_clsx","import_jsx_runtime","wrapperStyles","React","import_clsx","import_jsx_runtime","labelStyles","wrapperStyles","React","import_clsx","import_jsx_runtime","labelStyles","helperTextStyles","React","import_clsx","import_jsx_runtime","React","import_clsx","import_lucide_react","import_jsx_runtime","containerStyles","messageStyles","closeButtonStyles","variantConfig","React","import_clsx","import_lucide_react","import_jsx_runtime","containerStyles","buttonStyles","labelStyles","inputStyles","style","React","import_clsx","import_lucide_react","import_jsx_runtime","containerStyles","textStyles","style","React","import_clsx","Popover","import_lucide_react","import_jsx_runtime","containerStyles","iconButtonStyles","React","import_clsx","import_lucide_react","import_jsx_runtime"]}
|