@dinofront/design_system 0.1.4 → 1.0.0
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/components/Divider/Divider.d.ts +2 -0
- package/dist/components/Divider/Divider.types.d.ts +10 -0
- package/dist/components/Divider/index.d.ts +2 -0
- package/dist/components/Progress/Progress.d.ts +2 -0
- package/dist/components/Progress/Progress.types.d.ts +18 -0
- package/dist/components/Progress/index.d.ts +2 -0
- package/dist/components/Skeleton/Skeleton.d.ts +2 -0
- package/dist/components/Skeleton/Skeleton.types.d.ts +22 -0
- package/dist/components/Skeleton/index.d.ts +2 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +343 -185
- package/dist/index.js.map +1 -1
- package/dist/styles.css +220 -0
- package/package.json +3 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/lib/cn.ts","../src/components/Accordion/Accordion.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/Drawer/Drawer.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/Filter/Filter.tsx","../src/components/IconTile/IconTile.tsx","../src/components/InfoField/InfoField.tsx","../src/components/InlineAlert/InlineAlert.tsx","../src/components/Input/Input.tsx","../src/components/Modal/Modal.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/NotificationBadge/NotificationBadge.tsx","../src/components/Pagination/Pagination.tsx","../src/components/PersonCard/PersonCard.tsx","../src/components/Radio/Radio.tsx","../src/components/Select/Select.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Snackbar/Snackbar.tsx","../src/components/Status/Status.tsx","../src/components/Switch/Switch.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Text/Text.tsx","../src/components/TextArea/TextArea.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Upload/Upload.tsx","../src/tokens/colors.ts","../src/tokens/typography.ts","../src/tokens/spacing.ts","../src/tokens/radius.ts","../src/tokens/shadows.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges class names, resolving conflicting Tailwind utilities in favor of\n * the last one specified (e.g. `cn('px-2', 'px-4')` -> `'px-4'`). This is\n * what lets consumers pass a `className` prop that overrides a component's\n * defaults instead of just appending to them.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { createContext, forwardRef, useContext, useId, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { AccordionItemProps, AccordionProps } from './Accordion.types';\n\ninterface AccordionContextValue {\n openValues: string[];\n toggle: (value: string) => void;\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nfunction useAccordion() {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error('AccordionItem must be used inside <Accordion>');\n return ctx;\n}\n\nfunction normalize(value: string | string[] | undefined): string[] {\n return value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n { type = 'single', defaultValue, value, onValueChange, className, children, dataTestId, ...rest },\n ref,\n) {\n const [internal, setInternal] = useState<string[]>(() => normalize(defaultValue));\n const isControlled = value !== undefined;\n const openValues = isControlled ? normalize(value) : internal;\n\n const toggle = (val: string) => {\n let next: string[];\n if (type === 'single') {\n next = openValues.includes(val) ? [] : [val];\n } else {\n next = openValues.includes(val) ? openValues.filter((v) => v !== val) : [...openValues, val];\n }\n if (!isControlled) setInternal(next);\n onValueChange?.(type === 'single' ? (next[0] ?? '') : next);\n };\n\n return (\n <AccordionContext.Provider value={{ openValues, toggle }}>\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'flex flex-col divide-y divide-border-default border border-border-default rounded-lg overflow-hidden bg-bg-default',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n});\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { value, title, icon, disabled, className, children, dataTestId, ...rest },\n ref,\n) {\n const { openValues, toggle } = useAccordion();\n const isOpen = openValues.includes(value);\n const panelId = useId();\n\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n data-state={isOpen ? 'open' : 'closed'}\n className={cn('group', className)}\n {...rest}\n >\n <h3>\n <button\n type=\"button\"\n onClick={() => toggle(value)}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-controls={panelId}\n className={cn(\n 'flex w-full items-center justify-between gap-3 px-5 py-4 text-left',\n 'text-p-md font-medium text-fg-default',\n 'hover:bg-bg-container transition-colors',\n 'focus-visible:outline-none focus-visible:bg-bg-container',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n )}\n >\n <span className=\"inline-flex items-center gap-3\">\n {icon && <span className=\"inline-flex text-fg-secondary\">{icon}</span>}\n {title}\n </span>\n <ChevronDown\n className={cn(\n 'h-5 w-5 shrink-0 text-fg-secondary transition-transform duration-200',\n isOpen && 'rotate-180',\n )}\n aria-hidden\n />\n </button>\n </h3>\n <div\n id={panelId}\n role=\"region\"\n hidden={!isOpen}\n className=\"px-5 pb-4 text-p-std text-fg-secondary\"\n >\n {children}\n </div>\n </div>\n );\n});\n","import { forwardRef, useState, type ReactNode } from 'react';\nimport { User } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { AvatarGroupProps, AvatarProps, AvatarSize, AvatarStatus } from './Avatar.types';\n\nconst sizeStyles: Record<AvatarSize, string> = {\n xs: 'h-6 w-6 text-p-xs',\n sm: 'h-8 w-8 text-p-sm',\n md: 'h-10 w-10 text-p-std',\n lg: 'h-12 w-12 text-p-md',\n xl: 'h-16 w-16 text-h-xs',\n '2xl': 'h-20 w-20 text-h-xs',\n};\n\nconst statusSize: Record<AvatarSize, string> = {\n xs: 'h-1.5 w-1.5',\n sm: 'h-2 w-2',\n md: 'h-2.5 w-2.5',\n lg: 'h-3 w-3',\n xl: 'h-3.5 w-3.5',\n '2xl': 'h-4 w-4',\n};\n\nconst statusColor: Record<AvatarStatus, string> = {\n online: 'bg-green-500',\n offline: 'bg-gray-400 dark:bg-gray-500',\n away: 'bg-yellow-600',\n busy: 'bg-red-600',\n};\n\nconst overlap: Record<AvatarSize, string> = {\n xs: '-ml-1.5',\n sm: '-ml-2',\n md: '-ml-2.5',\n lg: '-ml-3',\n xl: '-ml-4',\n '2xl': '-ml-5',\n};\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase();\n return (parts[0]![0]! + parts[parts.length - 1]![0]!).toUpperCase();\n}\n\nfunction colorFromName(name: string): string {\n const palette = ['bg-brand-500', 'bg-blue-600', 'bg-purple-500', 'bg-pink-500', 'bg-yellow-600', 'bg-green-500'];\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = (hash << 5) - hash + name.charCodeAt(i);\n hash |= 0;\n }\n return palette[Math.abs(hash) % palette.length]!;\n}\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n { src, alt, name, size = 'md', status, shape = 'circle', fallback, className, dataTestId, ...rest },\n ref,\n) {\n const [errored, setErrored] = useState(false);\n const showImage = !!src && !errored;\n const initials = name ? getInitials(name) : '';\n const bgColor = name ? colorFromName(name) : 'bg-gray-300 dark:bg-gray-600';\n\n return (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn('relative inline-flex shrink-0', className)}\n {...rest}\n >\n <span\n className={cn(\n 'inline-flex items-center justify-center overflow-hidden font-semibold text-white select-none',\n sizeStyles[size],\n shape === 'circle' ? 'rounded-full' : 'rounded-md',\n !showImage && bgColor,\n )}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt ?? name ?? ''}\n onError={() => setErrored(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : name ? (\n initials\n ) : (\n (fallback ?? <User className=\"h-1/2 w-1/2 text-white/90\" />)\n )}\n </span>\n {status && (\n <span\n aria-label={status}\n className={cn(\n 'absolute right-0 bottom-0 rounded-full ring-2 ring-white',\n statusSize[size],\n statusColor[status],\n )}\n />\n )}\n </span>\n );\n});\n\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup(\n { size = 'md', max, children, className, dataTestId, ...rest },\n ref,\n) {\n const items = Array.isArray(children) ? children : ([children] as ReactNode[]);\n const shown = max !== undefined ? items.slice(0, max) : items;\n const extra = max !== undefined ? items.length - max : 0;\n\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn('inline-flex items-center', className)}\n {...rest}\n >\n {shown.map((child, i) => (\n <div\n key={i}\n className={cn('rounded-full ring-2 ring-white', i > 0 && overlap[size])}\n style={{ zIndex: shown.length - i }}\n >\n {child}\n </div>\n ))}\n {extra > 0 && (\n <div className={cn('rounded-full ring-2 ring-white', overlap[size])}>\n <Avatar size={size} name={`+${extra}`} />\n </div>\n )}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { BadgeProps, BadgeSize, BadgeVariant } from './Badge.types';\n\nconst sizeStyles: Record<BadgeSize, string> = {\n lg: 'h-7 px-2.5 text-p-std gap-1.5 rounded-md',\n md: 'h-6 px-2 text-p-sm gap-1 rounded-md',\n sm: 'h-5 px-1.5 text-p-sm gap-1 rounded',\n xs: 'h-4 px-1 text-p-xs gap-0.5 rounded',\n};\n\nconst filledStyles: Record<BadgeVariant, string> = {\n neutral: 'bg-bg-subtle text-fg-default border border-border-default',\n brand: 'bg-brand-20 text-brand-800 border border-brand-100',\n success: 'bg-green-50 text-green-800 border border-green-100',\n warning: 'bg-yellow-50 text-yellow-900 border border-yellow-100',\n danger: 'bg-red-50 text-red-800 border border-red-100',\n info: 'bg-blue-50 text-blue-800 border border-blue-100',\n privacy: 'bg-purple-50 text-purple-800 border border-purple-100',\n};\n\nconst outlineStyles: Record<BadgeVariant, string> = {\n neutral: 'bg-transparent text-fg-default border border-border-strong',\n brand: 'bg-transparent text-brand-700 border border-brand-500',\n success: 'bg-transparent text-green-700 border border-green-500',\n warning: 'bg-transparent text-yellow-800 border border-yellow-600',\n danger: 'bg-transparent text-red-700 border border-red-500',\n info: 'bg-transparent text-blue-700 border border-blue-500',\n privacy: 'bg-transparent text-purple-700 border border-purple-500',\n};\n\nconst accentStyles: Record<BadgeVariant, string> = {\n neutral: 'bg-fg-default text-bg-default',\n brand: 'bg-brand-500 text-white',\n success: 'bg-green-600 text-white',\n warning: 'bg-yellow-600 text-gray-900 dark:text-gray-900',\n danger: 'bg-red-700 text-white',\n info: 'bg-blue-600 text-white',\n privacy: 'bg-purple-500 text-white',\n};\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n variant = 'neutral',\n appearance = 'filled',\n size = 'md',\n leftIcon,\n rightIcon,\n onDismiss,\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const palette =\n appearance === 'filled'\n ? filledStyles[variant]\n : appearance === 'outline'\n ? outlineStyles[variant]\n : accentStyles[variant];\n\n return (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-center font-medium whitespace-nowrap select-none',\n sizeStyles[size],\n palette,\n className,\n )}\n {...rest}\n >\n {leftIcon && <span className=\"inline-flex shrink-0\">{leftIcon}</span>}\n {children}\n {rightIcon && !onDismiss && <span className=\"inline-flex shrink-0\">{rightIcon}</span>}\n {onDismiss && (\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"inline-flex shrink-0 -mr-0.5 rounded-full p-0.5 hover:bg-black/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </span>\n );\n});\n","import { forwardRef } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { ButtonProps, ButtonSize, ButtonVariant } from './Button.types';\n\nconst sizeStyles: Record<ButtonSize, string> = {\n lg: 'h-12 px-5 text-p-md gap-2 rounded-lg',\n md: 'h-10 px-4 text-p-std gap-2 rounded-lg',\n sm: 'h-8 px-3 text-p-sm gap-1.5 rounded-md',\n};\n\nconst iconOnlySize: Record<ButtonSize, string> = {\n lg: 'h-12 w-12 rounded-lg',\n md: 'h-10 w-10 rounded-lg',\n sm: 'h-8 w-8 rounded-md',\n};\n\nconst variantStyles: Record<ButtonVariant, string> = {\n primary: [\n 'bg-brand-500 text-white border border-transparent',\n 'hover:bg-brand-600 active:bg-brand-700',\n 'disabled:bg-bg-subtle disabled:text-fg-disabled disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-2',\n ].join(' '),\n secondary: [\n 'bg-bg-default text-fg-default border border-border-default',\n 'hover:bg-bg-container active:bg-bg-subtle',\n 'disabled:bg-bg-container disabled:text-fg-disabled disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-2',\n ].join(' '),\n tertiary: [\n 'bg-transparent text-fg-default border border-transparent',\n 'hover:bg-bg-subtle active:bg-bg-subtle',\n 'disabled:text-fg-disabled disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-2',\n ].join(' '),\n danger: [\n 'bg-red-700 text-white border border-transparent',\n 'hover:bg-red-800 active:bg-red-900',\n 'disabled:bg-bg-subtle disabled:text-fg-disabled disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-red-300 focus-visible:ring-offset-2',\n ].join(' '),\n};\n\n// Same shade each variant already uses for `active:`, applied persistently\n// while `pressed` is true instead of only during the mousedown instant.\nconst pressedStyles: Record<ButtonVariant, string> = {\n primary: 'bg-brand-700',\n secondary: 'bg-bg-subtle',\n tertiary: 'bg-bg-subtle',\n danger: 'bg-red-900',\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n leftIcon,\n rightIcon,\n loading = false,\n iconOnly = false,\n fullWidth = false,\n pressed = false,\n disabled,\n className,\n children,\n onClick,\n dataTestId,\n ...rest\n },\n ref,\n) {\n return (\n <button\n ref={ref}\n disabled={disabled || loading}\n aria-pressed={pressed}\n data-test-id={dataTestId}\n onClick={(event) => {\n if (pressed || disabled || loading) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n }}\n className={cn(\n 'inline-flex items-center justify-center font-medium transition-colors outline-none',\n iconOnly ? iconOnlySize[size] : sizeStyles[size],\n variantStyles[variant],\n pressed && pressedStyles[variant],\n fullWidth && 'w-full',\n className,\n )}\n {...rest}\n >\n {loading ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" aria-hidden />\n ) : (\n <>\n {leftIcon && <span className=\"inline-flex shrink-0\">{leftIcon}</span>}\n {children}\n {rightIcon && <span className=\"inline-flex shrink-0\">{rightIcon}</span>}\n </>\n )}\n </button>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { ButtonGroupOrientation, ButtonGroupProps } from './ButtonGroup.types';\n\nconst orientationStyles: Record<ButtonGroupOrientation, string> = {\n horizontal:\n 'flex-row [&>*]:rounded-none [&>*:first-child]:rounded-l-lg [&>*:last-child]:rounded-r-lg [&>*:not(:first-child)]:-ml-px',\n vertical:\n 'flex-col [&>*]:rounded-none [&>*:first-child]:rounded-t-lg [&>*:last-child]:rounded-b-lg [&>*:not(:first-child)]:-mt-px',\n};\n\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(function ButtonGroup(\n { orientation = 'horizontal', className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex isolate',\n orientationStyles[orientation],\n '[&>*]:relative [&>*:hover]:z-10 [&>*:focus-visible]:z-10',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { CardProps, CardPadding, CardVariant } from './Card.types';\n\nconst variantStyles: Record<CardVariant, string> = {\n elevated: 'bg-bg-default border border-border-default shadow-z1',\n outlined: 'bg-bg-default border border-border-default',\n filled: 'bg-bg-container border border-transparent',\n};\n\nconst paddingStyles: Record<CardPadding, string> = {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-5',\n lg: 'p-6',\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n variant = 'outlined',\n padding = 'md',\n header,\n footer,\n interactive = false,\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const hasSlots = header || footer;\n\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'rounded-xl overflow-hidden',\n variantStyles[variant],\n interactive && 'transition-all hover:border-brand-500 hover:shadow-z2',\n // If header/footer used, padding is applied per-region, not on the wrapper.\n !hasSlots && paddingStyles[padding],\n className,\n )}\n {...rest}\n >\n {header && (\n <div className={cn('border-b border-border-subtle', paddingStyles[padding])}>\n {header}\n </div>\n )}\n {hasSlots ? <div className={paddingStyles[padding]}>{children}</div> : children}\n {footer && (\n <div className={cn('border-t border-border-subtle', paddingStyles[padding])}>\n {footer}\n </div>\n )}\n </div>\n );\n});\n","import { forwardRef, useId } from 'react';\nimport { Check, Minus } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { CheckboxProps, CheckboxSize } from './Checkbox.types';\n\nconst boxSize: Record<CheckboxSize, string> = {\n md: 'h-5 w-5 rounded-sm',\n sm: 'h-4 w-4 rounded-sm',\n};\n\nconst iconSize: Record<CheckboxSize, string> = {\n md: 'h-3.5 w-3.5',\n sm: 'h-3 w-3',\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n size = 'md',\n label,\n description,\n indeterminate = false,\n error = false,\n id,\n disabled,\n checked,\n defaultChecked,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n\n return (\n <label\n htmlFor={inputId}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-start gap-2.5 group/checkbox',\n disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n className,\n )}\n >\n <span className=\"relative inline-flex shrink-0 items-center justify-center mt-0.5\">\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n className=\"peer sr-only\"\n aria-invalid={error || undefined}\n aria-checked={indeterminate ? 'mixed' : undefined}\n {...rest}\n />\n <span\n className={cn(\n 'flex items-center justify-center border transition-colors',\n boxSize[size],\n // base (not checked, not indeterminate)\n !indeterminate && 'bg-bg-default',\n // border color\n error ? 'border-red-600' : indeterminate ? 'border-brand-500' : 'border-border-strong',\n // hover\n !disabled &&\n !indeterminate &&\n (error ? 'peer-hover:border-red-700' : 'peer-hover:border-fg-tertiary'),\n // focus ring\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-brand-300 peer-focus-visible:ring-offset-1',\n // checked (controlled or uncontrolled via peer)\n !indeterminate && 'peer-checked:bg-brand-500 peer-checked:border-brand-500',\n // indeterminate wins\n indeterminate && 'bg-brand-500',\n // disabled overrides\n disabled &&\n !indeterminate &&\n 'peer-checked:bg-bg-subtle peer-checked:border-border-strong',\n // SVG visibility — toggled via peer-checked on the sibling native input.\n !indeterminate &&\n '[&_svg]:opacity-0 peer-checked:[&_svg]:opacity-100 [&_svg]:transition-opacity',\n )}\n >\n {indeterminate ? (\n <Minus className={cn(iconSize[size], 'text-white')} strokeWidth={3} aria-hidden />\n ) : (\n <Check className={cn(iconSize[size], 'text-white')} strokeWidth={3} aria-hidden />\n )}\n </span>\n </span>\n {(label || description) && (\n <span className=\"flex flex-col gap-0.5\">\n {label && (\n <span className=\"text-p-std font-medium text-fg-default leading-tight\">{label}</span>\n )}\n {description && (\n <span className=\"text-p-sm text-fg-secondary leading-snug\">{description}</span>\n )}\n </span>\n )}\n </label>\n );\n});\n","import { forwardRef, useEffect, useId, useRef, useState } from 'react';\nimport { Calendar, ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { DatePickerProps, DatePickerSize } from './DatePicker.types';\n\n// Heights, text sizes and horizontal padding mirror Input/Select exactly so a\n// DatePicker lines up with the other fields in a form grid.\nconst sizeStyles: Record<DatePickerSize, string> = {\n lg: 'h-12 text-p-md px-3.5',\n md: 'h-10 text-p-std px-3',\n sm: 'h-8 text-p-sm px-2.5',\n};\n\nconst MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst DAY_NAMES = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nfunction sameDay(a: Date | null, b: Date | null) {\n return (\n !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n );\n}\n\nfunction formatShort(date: Date) {\n return `${String(date.getDate()).padStart(2, '0')}.${String(date.getMonth() + 1).padStart(2, '0')}.${date.getFullYear()}`;\n}\n\nfunction buildGrid(view: Date) {\n const first = startOfMonth(view);\n const offset = (first.getDay() + 6) % 7; // Mon-first\n const daysInMonth = new Date(view.getFullYear(), view.getMonth() + 1, 0).getDate();\n const cells: (Date | null)[] = [];\n for (let i = 0; i < offset; i++) cells.push(null);\n for (let i = 1; i <= daysInMonth; i++) cells.push(new Date(view.getFullYear(), view.getMonth(), i));\n while (cells.length % 7 !== 0) cells.push(null);\n return cells;\n}\n\nexport const DatePicker = forwardRef<HTMLButtonElement, DatePickerProps>(function DatePicker(\n {\n value,\n onChange,\n range = false,\n rangeValue,\n onChangeRange,\n size = 'md',\n label,\n placeholder = 'Select date',\n fullWidth = false,\n id,\n className,\n wrapperClassName,\n dataTestId,\n },\n ref,\n) {\n const reactId = useId();\n const triggerId = id ?? reactId;\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<Date>(value ?? rangeValue?.start ?? new Date());\n const [hoverEnd, setHoverEnd] = useState<Date | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onClick);\n return () => document.removeEventListener('mousedown', onClick);\n }, [open]);\n\n const display = range\n ? rangeValue?.start\n ? `${formatShort(rangeValue.start)}${rangeValue.end ? ` – ${formatShort(rangeValue.end)}` : ''}`\n : ''\n : value\n ? formatShort(value)\n : '';\n\n function pick(date: Date) {\n if (!range) {\n onChange?.(date);\n setOpen(false);\n return;\n }\n const current = rangeValue ?? { start: null, end: null };\n if (!current.start || (current.start && current.end)) {\n onChangeRange?.({ start: date, end: null });\n return;\n }\n if (date < current.start) {\n onChangeRange?.({ start: date, end: current.start });\n return;\n }\n onChangeRange?.({ start: current.start, end: date });\n setOpen(false);\n }\n\n const cells = buildGrid(view);\n const currentRange = rangeValue ?? { start: null, end: null };\n const rangeEnd = currentRange.end ?? hoverEnd;\n\n return (\n <div\n ref={containerRef}\n data-test-id={dataTestId}\n className={cn('flex flex-col gap-1.5', fullWidth && 'w-full', wrapperClassName)}\n >\n {label && (\n <label htmlFor={triggerId} className=\"text-p-std font-medium text-fg-default inline-flex\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'inline-flex items-center gap-2 rounded-lg border border-border-default bg-bg-default text-left transition-colors hover:border-border-strong focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:border-brand-500',\n fullWidth ? 'w-full min-w-0' : 'min-w-[260px]',\n sizeStyles[size],\n className,\n )}\n >\n <span className={cn('flex-1 text-left truncate', display ? 'text-fg-default' : 'text-fg-tertiary')}>\n {display || placeholder}\n </span>\n <Calendar className=\"w-4 h-4 text-fg-secondary\" />\n </button>\n\n {open && (\n <div className=\"absolute z-50 mt-1 left-0 rounded-xl border border-border-default bg-bg-default shadow-z3 p-3 w-[300px]\">\n <div className=\"flex items-center justify-between mb-2\">\n <button\n type=\"button\"\n className=\"w-8 h-8 rounded-md hover:bg-bg-container flex items-center justify-center text-fg-secondary\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() - 1, 1))}\n aria-label=\"Previous month\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <div className=\"text-p-md font-semibold text-fg-default\">\n {MONTH_NAMES[view.getMonth()]} {view.getFullYear()}\n </div>\n <button\n type=\"button\"\n className=\"w-8 h-8 rounded-md hover:bg-bg-container flex items-center justify-center text-fg-secondary\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() + 1, 1))}\n aria-label=\"Next month\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"grid grid-cols-7 gap-1 text-center\">\n {DAY_NAMES.map((day) => (\n <div key={day} className=\"text-p-xs text-fg-tertiary py-1\">\n {day}\n </div>\n ))}\n {cells.map((date, index) => {\n if (!date) return <div key={index} />;\n const isSelected = !range && sameDay(date, value ?? null);\n const isStart = range && sameDay(date, currentRange.start);\n const isEnd = range && sameDay(date, rangeEnd);\n const isInRange = range && !!currentRange.start && !!rangeEnd && date > currentRange.start && date < rangeEnd;\n const stateClassName =\n isSelected || isStart || isEnd\n ? 'bg-brand-500 text-white'\n : isInRange\n ? 'bg-bg-brand-lighter text-brand-700'\n : 'text-fg-default hover:bg-bg-container';\n return (\n <button\n key={index}\n type=\"button\"\n onMouseEnter={() => range && currentRange.start && !currentRange.end && setHoverEnd(date)}\n onClick={() => pick(date)}\n className={cn('h-8 rounded-md text-p-sm font-medium', stateClassName)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n});\n","import { forwardRef, useEffect, useRef, type Ref } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { DrawerProps, DrawerSide, DrawerSize } from './Drawer.types';\n\nconst horizontalSize: Record<DrawerSize, string> = {\n sm: 'w-[320px]',\n md: 'w-[420px]',\n lg: 'w-[560px]',\n xl: 'w-[720px]',\n};\n\nconst verticalSize: Record<DrawerSize, string> = {\n sm: 'h-[240px]',\n md: 'h-[360px]',\n lg: 'h-[480px]',\n xl: 'h-[600px]',\n};\n\nconst sideClasses: Record<DrawerSide, string> = {\n right: 'inset-y-0 right-0 border-l',\n left: 'inset-y-0 left-0 border-r',\n top: 'inset-x-0 top-0 border-b',\n bottom: 'inset-x-0 bottom-0 border-t',\n};\n\n// No shared ref-merge helper exists in the library yet; this keeps the\n// forwarded consumer ref and the internal focus-management ref pointing at\n// the same panel node without adding a new dependency.\nfunction mergeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void {\n return (node) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === 'function') {\n ref(node);\n } else {\n (ref as { current: T | null }).current = node;\n }\n }\n };\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n open,\n onClose,\n side = 'right',\n size = 'md',\n title,\n description,\n children,\n footer,\n closeOnOverlayClick = true,\n showClose = true,\n className,\n dataTestId,\n },\n ref,\n) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', onKey);\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = prev;\n };\n }, [open, onClose]);\n\n useEffect(() => {\n if (!open) return;\n const prevFocus = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n return () => prevFocus?.focus?.();\n }, [open]);\n\n if (!open) return null;\n\n const isHorizontal = side === 'left' || side === 'right';\n const sizeCls = isHorizontal ? horizontalSize[size] : verticalSize[size];\n\n const content = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'drawer-title' : undefined}\n aria-describedby={description ? 'drawer-desc' : undefined}\n className=\"fixed inset-0 z-50\"\n data-test-id={dataTestId}\n >\n <div\n className=\"absolute inset-0 bg-black/50\"\n onClick={() => closeOnOverlayClick && onClose()}\n aria-hidden\n />\n <div\n ref={mergeRefs(ref, panelRef)}\n tabIndex={-1}\n className={cn(\n 'absolute bg-bg-default shadow-z5 outline-none flex flex-col',\n sideClasses[side],\n isHorizontal ? `${sizeCls} h-full max-w-full` : `${sizeCls} w-full max-h-full`,\n 'border-border-default',\n className,\n )}\n >\n {(title || showClose) && (\n <div className=\"flex items-start justify-between gap-4 px-6 pt-6 pb-4 border-b border-border-default\">\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h2 id=\"drawer-title\" className=\"text-h-xs font-semibold text-fg-default\">\n {title}\n </h2>\n )}\n {description && (\n <p id=\"drawer-desc\" className=\"mt-1 text-p-std text-fg-secondary\">\n {description}\n </p>\n )}\n </div>\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"-mr-2 -mt-2 p-2 rounded-md text-fg-secondary hover:text-fg-default hover:bg-bg-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n )}\n {children && <div className=\"flex-1 overflow-y-auto px-6 py-4\">{children}</div>}\n {footer && (\n <div className=\"flex items-center justify-end gap-2 px-6 py-4 border-t border-border-default bg-bg-container\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n});\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useRef,\n useState,\n type MouseEvent as ReactMouseEvent,\n type Ref,\n} from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type {\n DropdownContentProps,\n DropdownItemProps,\n DropdownLabelProps,\n DropdownMenuProps,\n DropdownSeparatorProps,\n DropdownTriggerProps,\n} from './DropdownMenu.types';\n\ninterface DropdownCtx {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst DropdownContext = createContext<DropdownCtx | null>(null);\n\nfunction useDropdown() {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error('Dropdown parts must be used inside <DropdownMenu>');\n return ctx;\n}\n\n// No shared ref-merge helper exists in the library yet; this keeps the\n// forwarded consumer ref and the internal outside-click ref pointing at the\n// same panel node without adding a new dependency.\nfunction mergeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void {\n return (node) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === 'function') {\n ref(node);\n } else {\n (ref as { current: T | null }).current = node;\n }\n }\n };\n}\n\nexport const DropdownMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(function DropdownMenu(\n { children, defaultOpen = false, open, onOpenChange, className, dataTestId, ...rest },\n ref,\n) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : internalOpen;\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const setOpen = (value: boolean) => {\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n };\n\n useEffect(() => {\n if (!current) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [current]);\n\n return (\n <DropdownContext.Provider value={{ open: current, setOpen, triggerRef }}>\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn('relative inline-block', className)}\n {...rest}\n >\n {children}\n </div>\n </DropdownContext.Provider>\n );\n});\n\nexport function DropdownTrigger({ children }: DropdownTriggerProps) {\n const { open, setOpen, triggerRef } = useDropdown();\n if (!isValidElement(children)) return children;\n const childProps = (children.props ?? {}) as Record<string, unknown>;\n\n return cloneElement(children, {\n ref: triggerRef,\n onClick: (e: ReactMouseEvent) => {\n const orig = childProps.onClick as ((e: ReactMouseEvent) => void) | undefined;\n orig?.(e);\n if (!e.defaultPrevented) setOpen(!open);\n },\n 'aria-haspopup': 'menu',\n 'aria-expanded': open,\n } as Record<string, unknown>);\n}\n\nexport const DropdownContent = forwardRef<HTMLDivElement, DropdownContentProps>(\n function DropdownContent({ children, align = 'start', className, dataTestId, ...rest }, ref) {\n const { open, setOpen, triggerRef } = useDropdown();\n const contentRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n const target = e.target as Node;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, [open, setOpen, triggerRef]);\n\n if (!open) return null;\n\n return (\n <div\n ref={mergeRefs(ref, contentRef)}\n role=\"menu\"\n data-test-id={dataTestId}\n className={cn(\n 'absolute top-full mt-1 min-w-[200px] rounded-lg border border-border-default bg-bg-default shadow-z4 z-50 py-1',\n align === 'end' ? 'right-0' : 'left-0',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport const DropdownItem = forwardRef<HTMLButtonElement, DropdownItemProps>(function DropdownItem(\n { children, onSelect, disabled, icon, shortcut, destructive, checked, className, dataTestId, onClick, ...rest },\n ref,\n) {\n const { setOpen } = useDropdown();\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n disabled={disabled}\n data-test-id={dataTestId}\n onClick={(event) => {\n onClick?.(event);\n onSelect?.();\n setOpen(false);\n }}\n className={cn(\n 'flex w-full items-center gap-2 px-3 py-2 text-left text-p-std text-fg-default',\n 'hover:bg-bg-subtle focus-visible:outline-none focus-visible:bg-bg-subtle',\n disabled && 'opacity-50 cursor-not-allowed hover:bg-transparent',\n destructive && 'text-red-700 hover:bg-red-50',\n className,\n )}\n {...rest}\n >\n {checked !== undefined && (\n <span className=\"w-4 shrink-0\">{checked && <Check className=\"h-4 w-4 text-brand-500\" />}</span>\n )}\n {icon && <span className=\"inline-flex shrink-0 text-fg-secondary\">{icon}</span>}\n <span className=\"flex-1 truncate\">{children}</span>\n {shortcut && <span className=\"text-p-sm text-fg-tertiary shrink-0 tabular-nums\">{shortcut}</span>}\n </button>\n );\n});\n\nexport const DropdownSeparator = forwardRef<HTMLDivElement, DropdownSeparatorProps>(\n function DropdownSeparator({ className, dataTestId, ...rest }, ref) {\n return (\n <div\n ref={ref}\n role=\"separator\"\n data-test-id={dataTestId}\n className={cn('my-1 h-px bg-border-default', className)}\n {...rest}\n />\n );\n },\n);\n\nexport const DropdownLabel = forwardRef<HTMLDivElement, DropdownLabelProps>(function DropdownLabel(\n { children, className, dataTestId, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'px-3 py-1.5 text-p-xs font-semibold uppercase tracking-wider text-fg-tertiary',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\n","import { forwardRef, useEffect, useRef, useState, type Ref } from 'react';\nimport { ChevronDown, X } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { FilterProps, FilterSize } from './Filter.types';\n\nconst sizeStyles: Record<FilterSize, string> = {\n lg: 'h-10 px-3 text-p-std gap-2',\n md: 'h-9 px-2.5 text-p-std gap-1.5',\n sm: 'h-8 px-2 text-p-sm gap-1.5',\n};\n\n// No shared ref-merge helper exists in the library yet; this keeps the\n// forwarded consumer ref and the internal outside-click ref pointing at the\n// same wrapper node without adding a new dependency.\nfunction mergeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void {\n return (node) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === 'function') {\n ref(node);\n } else {\n (ref as { current: T | null }).current = node;\n }\n }\n };\n}\n\nexport const Filter = forwardRef<HTMLDivElement, FilterProps>(function Filter(\n {\n label,\n value,\n active = false,\n size = 'md',\n disabled,\n onClear,\n children,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (!wrapperRef.current?.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, [open]);\n\n const isActive = active || value !== undefined;\n\n return (\n <div\n ref={mergeRefs(ref, wrapperRef)}\n data-test-id={dataTestId}\n className={cn('relative inline-flex', className)}\n {...rest}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(\n 'inline-flex items-center rounded-full border transition-colors outline-none',\n sizeStyles[size],\n isActive\n ? 'bg-brand-20 text-brand-800 border-brand-500'\n : 'bg-bg-default text-fg-default border-border-default',\n !disabled && 'hover:border-border-strong',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-1',\n disabled && 'bg-bg-container text-fg-disabled cursor-not-allowed',\n )}\n >\n <span className=\"font-medium\">{label}</span>\n {value !== undefined && (\n <>\n <span className=\"mx-0.5 text-fg-tertiary\" aria-hidden>\n •\n </span>\n <span className=\"font-semibold truncate max-w-[140px]\">{value}</span>\n </>\n )}\n {isActive && onClear ? (\n <span\n role=\"button\"\n tabIndex={0}\n aria-label=\"Clear filter\"\n onClick={(e) => {\n e.stopPropagation();\n onClear();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n onClear();\n }\n }}\n className=\"inline-flex items-center justify-center rounded-full p-0.5 hover:bg-black/10\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n ) : (\n <ChevronDown\n className={cn('h-4 w-4 text-fg-secondary transition-transform', open && 'rotate-180')}\n aria-hidden\n />\n )}\n </button>\n {open && children && (\n <div className=\"absolute left-0 top-full mt-1 min-w-[220px] rounded-lg border border-border-default bg-bg-default shadow-z4 z-50 p-3\">\n {children}\n </div>\n )}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { IconTileProps, IconTileSize, IconTileTone } from './IconTile.types';\n\n/* Background + icon-color pairs, legible on both light and dark surfaces.\n * Uses semantic bg-*-lighter aliases where available (they flip in dark\n * mode automatically via theme.css's `.dark` block). Purple and pink have\n * no semantic \"lighter\" alias yet, so they fall back to raw scale shades\n * with explicit `dark:` variants, same as the source design system.\n */\nconst toneStyles: Record<IconTileTone, { bg: string; icon: string }> = {\n brand: { bg: 'bg-bg-brand-lighter', icon: 'text-brand-700' },\n info: { bg: 'bg-bg-info-lighter', icon: 'text-blue-700' },\n gray: { bg: 'bg-bg-subtle', icon: 'text-fg-tertiary' },\n purple: { bg: 'bg-purple-50 dark:bg-purple-900/30', icon: 'text-purple-700 dark:text-purple-300' },\n pink: { bg: 'bg-pink-50 dark:bg-pink-900/30', icon: 'text-pink-700 dark:text-pink-300' },\n yellow: { bg: 'bg-bg-warning-lighter', icon: 'text-yellow-800' },\n success: { bg: 'bg-bg-success-lighter', icon: 'text-green-600' },\n warning: { bg: 'bg-bg-warning-lighter', icon: 'text-yellow-800' },\n danger: { bg: 'bg-bg-danger-lighter', icon: 'text-red-700' },\n};\n\n// Dimensions/icon size per step, plus the radius used for the `rounded`\n// shape. The `circle` shape reuses the same box/icon sizing and just swaps\n// in `rounded-full` instead — see the className below.\nconst sizeStyles: Record<IconTileSize, { box: string; icon: string; radius: string }> = {\n sm: { box: 'h-8 w-8', icon: 'h-4 w-4', radius: 'rounded-md' },\n md: { box: 'h-10 w-10', icon: 'h-5 w-5', radius: 'rounded-lg' },\n lg: { box: 'h-12 w-12', icon: 'h-6 w-6', radius: 'rounded-lg' },\n xl: { box: 'h-14 w-14', icon: 'h-7 w-7', radius: 'rounded-xl' },\n};\n\nexport const IconTile = forwardRef<HTMLDivElement, IconTileProps>(function IconTile(\n {\n icon: Icon,\n tone = 'gray',\n size = 'md',\n shape = 'rounded',\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const t = toneStyles[tone];\n const s = sizeStyles[size];\n\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n aria-hidden={rest['aria-label'] ? undefined : true}\n className={cn(\n 'inline-flex items-center justify-center shrink-0',\n s.box,\n shape === 'circle' ? 'rounded-full' : s.radius,\n t.bg,\n className,\n )}\n {...rest}\n >\n <Icon className={cn(s.icon, t.icon)} />\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport { IconTile } from '../IconTile';\nimport type { InfoFieldProps } from './InfoField.types';\n\n/* Labeled value row with a leading tinted icon, uppercase label, value,\n * and an optional action slot on the right. The General Information block\n * on the Profile page uses this primitive; settings / contact / payroll\n * detail pages reach for the same shape. */\n\nexport const InfoField = forwardRef<HTMLDivElement, InfoFieldProps>(function InfoField(\n { icon, iconTone = 'brand', label, value, action, className, dataTestId, ...rest },\n ref,\n) {\n return (\n <div ref={ref} data-test-id={dataTestId} className={cn('flex items-start gap-3', className)} {...rest}>\n <IconTile icon={icon} tone={iconTone} size=\"md\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-p-xs font-medium uppercase tracking-widest text-fg-tertiary\">{label}</div>\n <div className=\"text-p-std font-semibold text-fg-default mt-1 break-words\">{value}</div>\n </div>\n {action && <div className=\"shrink-0 flex items-center\">{action}</div>}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { CheckCircle2, AlertTriangle, XCircle, Info, Sparkles, X, type LucideIcon } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { InlineAlertProps, InlineAlertVariant } from './InlineAlert.types';\n\nconst variantStyles: Record<\n InlineAlertVariant,\n { container: string; iconColor: string; DefaultIcon: LucideIcon }\n> = {\n success: {\n container: 'bg-green-50 border-green-200',\n iconColor: 'text-green-600',\n DefaultIcon: CheckCircle2,\n },\n warning: {\n container: 'bg-yellow-50 border-yellow-200',\n iconColor: 'text-yellow-800',\n DefaultIcon: AlertTriangle,\n },\n danger: {\n container: 'bg-red-50 border-red-200',\n iconColor: 'text-red-700',\n DefaultIcon: XCircle,\n },\n info: {\n container: 'bg-blue-50 border-blue-200',\n iconColor: 'text-blue-700',\n DefaultIcon: Info,\n },\n discovery: {\n container: 'bg-purple-50 border-purple-200',\n iconColor: 'text-purple-700',\n DefaultIcon: Sparkles,\n },\n};\n\nexport const InlineAlert = forwardRef<HTMLDivElement, InlineAlertProps>(function InlineAlert(\n { variant = 'info', title, description, onDismiss, actions, icon, className, dataTestId, ...rest },\n ref,\n) {\n const { container, iconColor, DefaultIcon } = variantStyles[variant];\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-test-id={dataTestId}\n className={cn('flex gap-3 p-4 border rounded-lg', container, className)}\n {...rest}\n >\n <div className={cn('flex-shrink-0 mt-0.5', iconColor)}>\n {icon ?? <DefaultIcon className=\"h-5 w-5\" aria-hidden />}\n </div>\n <div className=\"flex-1 min-w-0\">\n {title && <div className=\"text-p-std font-semibold text-fg-default mb-0.5\">{title}</div>}\n {description && <div className=\"text-p-std text-fg-secondary\">{description}</div>}\n {actions && <div className=\"mt-3 flex flex-wrap items-center gap-2\">{actions}</div>}\n </div>\n {onDismiss && (\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"flex-shrink-0 -mr-1 -mt-1 p-1 rounded-md text-fg-secondary hover:text-fg-default hover:bg-black/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n});\n","import { forwardRef, useId } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { InputProps, InputSize } from './Input.types';\n\nconst sizeStyles: Record<InputSize, string> = {\n lg: 'h-12 text-p-md',\n md: 'h-10 text-p-std',\n sm: 'h-8 text-p-sm',\n};\n\nconst sidePaddingByIcon: Record<InputSize, string> = {\n lg: 'pl-10',\n md: 'pl-9',\n sm: 'pl-8',\n};\n\nconst sidePaddingByRightIcon: Record<InputSize, string> = {\n lg: 'pr-10',\n md: 'pr-9',\n sm: 'pr-8',\n};\n\nconst iconSlotSize: Record<InputSize, string> = {\n lg: 'w-10',\n md: 'w-9',\n sm: 'w-8',\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n label,\n helperText,\n errorText,\n size = 'md',\n leftIcon,\n rightIcon,\n leftAddon,\n rightAddon,\n error = false,\n id,\n disabled,\n className,\n wrapperClassName,\n required,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n const describedBy = errorText ? `${inputId}-error` : helperText ? `${inputId}-help` : undefined;\n const hasError = error || !!errorText;\n\n return (\n <div className={cn('flex flex-col gap-1.5 w-full', wrapperClassName)} data-test-id={dataTestId}>\n {label && (\n <label htmlFor={inputId} className=\"text-p-std font-medium text-fg-default inline-flex items-center gap-1\">\n {label}\n {required && (\n <span className=\"text-red-600\" aria-hidden>\n *\n </span>\n )}\n </label>\n )}\n <div\n className={cn(\n 'flex items-stretch w-full rounded-lg bg-bg-default transition-colors',\n 'border',\n hasError ? 'border-red-600' : 'border-border-default',\n !disabled && !hasError && 'hover:border-border-strong',\n 'focus-within:ring-2 focus-within:ring-offset-0',\n hasError\n ? 'focus-within:ring-red-300 focus-within:border-red-600'\n : 'focus-within:ring-brand-300 focus-within:border-brand-500',\n disabled && 'bg-bg-container border-border-default cursor-not-allowed',\n sizeStyles[size],\n )}\n >\n {leftAddon && (\n <span className=\"inline-flex items-center px-3 text-fg-secondary bg-bg-container border-r border-border-default rounded-l-lg whitespace-nowrap\">\n {leftAddon}\n </span>\n )}\n <div className=\"relative flex-1 min-w-0\">\n {leftIcon && (\n <span\n aria-hidden\n className={cn(\n 'absolute inset-y-0 left-0 flex items-center justify-center text-fg-secondary pointer-events-none',\n iconSlotSize[size],\n )}\n >\n {leftIcon}\n </span>\n )}\n <input\n ref={ref}\n id={inputId}\n disabled={disabled}\n required={required}\n aria-invalid={hasError || undefined}\n aria-describedby={describedBy}\n className={cn(\n 'w-full h-full bg-transparent outline-none',\n 'placeholder:text-fg-tertiary text-fg-default',\n 'disabled:cursor-not-allowed disabled:text-fg-disabled',\n leftIcon ? sidePaddingByIcon[size] : 'pl-3',\n rightIcon || hasError ? sidePaddingByRightIcon[size] : 'pr-3',\n className,\n )}\n {...rest}\n />\n {(rightIcon || hasError) && (\n <span\n aria-hidden\n className={cn(\n 'absolute inset-y-0 right-0 flex items-center justify-center pointer-events-none',\n iconSlotSize[size],\n hasError ? 'text-red-600' : 'text-fg-secondary',\n )}\n >\n {hasError ? <AlertCircle className=\"h-4 w-4\" /> : rightIcon}\n </span>\n )}\n </div>\n {rightAddon && (\n <span className=\"inline-flex items-center px-3 text-fg-secondary bg-bg-container border-l border-border-default rounded-r-lg whitespace-nowrap\">\n {rightAddon}\n </span>\n )}\n </div>\n {errorText ? (\n <p id={`${inputId}-error`} className=\"text-p-sm text-red-700\">\n {errorText}\n </p>\n ) : helperText ? (\n <p id={`${inputId}-help`} className=\"text-p-sm text-fg-secondary\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, useEffect, useRef, type MutableRefObject, type Ref } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { ModalProps, ModalSize } from './Modal.types';\n\nconst sizeStyles: Record<ModalSize, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-2xl',\n '2xl': 'max-w-4xl',\n};\n\n// No shared ref-merging util exists in `src/lib` yet — the panel needs its\n// own ref for focus management (see below) as well as whatever ref the\n// consumer forwards in, so the two are combined locally here.\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>) {\n return (node: T | null) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\n {\n open,\n onClose,\n title,\n description,\n children,\n footer,\n size = 'md',\n closeOnOverlayClick = true,\n showClose = true,\n className,\n dataTestId,\n },\n ref,\n) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = prevOverflow;\n };\n }, [open, onClose]);\n\n useEffect(() => {\n if (!open) return;\n const prevFocus = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n return () => prevFocus?.focus?.();\n }, [open]);\n\n if (!open) return null;\n\n const content = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n aria-describedby={description ? 'modal-desc' : undefined}\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n >\n <div\n className=\"absolute inset-0 bg-black/50\"\n onClick={() => closeOnOverlayClick && onClose()}\n aria-hidden\n />\n <div\n ref={mergeRefs(panelRef, ref)}\n tabIndex={-1}\n data-test-id={dataTestId}\n className={cn(\n 'relative w-full bg-bg-default rounded-xl shadow-z5 outline-none flex flex-col max-h-[90vh]',\n sizeStyles[size],\n className,\n )}\n >\n {(title || showClose) && (\n <div className=\"flex items-start justify-between gap-4 px-6 pt-6 pb-4\">\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h2 id=\"modal-title\" className=\"text-h-xs font-semibold text-fg-default\">\n {title}\n </h2>\n )}\n {description && (\n <p id=\"modal-desc\" className=\"mt-1 text-p-std text-fg-secondary\">\n {description}\n </p>\n )}\n </div>\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"-mr-2 -mt-2 p-2 rounded-md text-fg-secondary hover:text-fg-default hover:bg-bg-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n )}\n {children && <div className=\"px-6 pb-6 overflow-y-auto\">{children}</div>}\n {footer && (\n <div className=\"flex items-center justify-end gap-2 px-6 py-4 border-t border-border-default bg-bg-container rounded-b-xl\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n});\n","import { forwardRef, useEffect, useId, useMemo, useRef, useState, type KeyboardEvent, type MutableRefObject } from 'react';\nimport { X, Search, Users } from 'lucide-react';\nimport { Avatar } from '../Avatar';\nimport { cn } from '../../lib/cn';\nimport type { MultiSelectOption, MultiSelectProps, MultiSelectSize } from './MultiSelect.types';\n\n/* =============================================================================\n * MultiSelect — a chip/token multi-select combobox.\n *\n * The multi-value cousin of `Select`: chosen options render as removable chips\n * inline with a type-to-filter input; a dropdown lists the remaining options.\n * Options can carry an avatar, a description line and a chip badge, so it covers\n * both a plain tag input and a rich people picker with one API.\n *\n * Fully controlled (`value` + `onChange`). Keyboard: up/down move the active\n * option, Enter selects it, Backspace on an empty field removes the last\n * removable chip, Esc closes. Data-agnostic — feed it any options.\n * =========================================================================== */\n\nconst SIZES: Record<\n MultiSelectSize,\n { box: string; chip: string; chipText: string; input: string; avatar: 'xs' | 'sm' }\n> = {\n sm: { box: 'px-1.5 py-1.5 gap-1', chip: 'h-6 pl-0.5 pr-1.5', chipText: 'text-p-xs', input: 'h-6 text-p-sm min-w-[100px]', avatar: 'xs' },\n md: { box: 'px-2 py-2 gap-1.5', chip: 'h-7 pl-1 pr-2', chipText: 'text-p-sm', input: 'h-7 text-p-std min-w-[120px]', avatar: 'xs' },\n lg: { box: 'px-2.5 py-2.5 gap-2', chip: 'h-8 pl-1 pr-2.5', chipText: 'text-p-std', input: 'h-8 text-p-md min-w-[140px]', avatar: 'sm' },\n};\n\nexport const MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(function MultiSelect(\n {\n options,\n value,\n onChange,\n size = 'md',\n placeholder = 'Select…',\n addMorePlaceholder = 'Add another…',\n disabled = false,\n error = false,\n label,\n helperText,\n errorText,\n required = false,\n lockedValues = [],\n max,\n searchable = true,\n suggestionsLabel = 'Suggestions',\n emptyText = 'No matches. Try a different search.',\n id,\n className,\n wrapperClassName,\n dataTestId,\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n const listId = `${inputId}-listbox`;\n const hasError = error || !!errorText;\n\n const [query, setQuery] = useState('');\n const [open, setOpen] = useState(false);\n const [active, setActive] = useState(0);\n const wrapRef = useRef<HTMLDivElement>(null);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const setInputRef = (node: HTMLInputElement | null) => {\n innerInputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options]);\n const selected = useMemo(\n () => value.map((v) => byValue.get(v)).filter((o): o is MultiSelectOption => !!o),\n [value, byValue],\n );\n\n const matches = useMemo(() => {\n const q = query.trim().toLowerCase();\n return options.filter(\n (o) =>\n !value.includes(o.value) &&\n (q === '' ||\n o.label.toLowerCase().includes(q) ||\n (o.description ?? '').toLowerCase().includes(q)),\n );\n }, [options, value, query]);\n\n const reached = max !== undefined && value.length >= max;\n\n /* Close on outside click + Esc. */\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (wrapRef.current && !wrapRef.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onDown);\n return () => document.removeEventListener('mousedown', onDown);\n }, [open]);\n\n /* Keep the active index in range as the list changes. */\n useEffect(() => {\n setActive((a) => Math.min(a, Math.max(0, matches.length - 1)));\n }, [matches.length]);\n\n const add = (v: string) => {\n const opt = byValue.get(v);\n if (disabled || reached || !opt || opt.disabled) return;\n onChange([...value, v]);\n setQuery('');\n setActive(0);\n innerInputRef.current?.focus();\n };\n\n const remove = (v: string) => {\n if (disabled || lockedValues.includes(v)) return;\n onChange(value.filter((x) => x !== v));\n };\n\n const moveActive = (dir: 1 | -1) => {\n if (!matches.length) return;\n let next = active;\n for (let i = 0; i < matches.length; i++) {\n next = (next + dir + matches.length) % matches.length;\n if (!matches[next]?.disabled) break;\n }\n setActive(next);\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!open) setOpen(true);\n else moveActive(1);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n moveActive(-1);\n } else if (e.key === 'Enter') {\n if (open && matches[active] && !matches[active].disabled) {\n e.preventDefault();\n add(matches[active].value);\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n } else if (e.key === 'Backspace' && query === '' && selected.length > 0) {\n const last = [...selected].reverse().find((o) => !lockedValues.includes(o.value));\n if (last) remove(last.value);\n }\n };\n\n const describedBy = errorText\n ? `${inputId}-error`\n : helperText\n ? `${inputId}-help`\n : undefined;\n\n return (\n <div data-test-id={dataTestId} className={cn('flex flex-col gap-1.5 w-full', wrapperClassName)}>\n {label && (\n <label htmlFor={inputId} className=\"text-p-std font-medium text-fg-default inline-flex items-center gap-1\">\n {label}\n {required && <span className=\"text-red-600\" aria-hidden>*</span>}\n </label>\n )}\n\n <div ref={wrapRef} className=\"relative\">\n {/* Chips + input row */}\n <div\n className={cn(\n 'flex flex-wrap items-center rounded-lg border bg-bg-default transition-colors',\n SIZES[size].box,\n disabled\n ? 'opacity-60 cursor-not-allowed border-border-default'\n : hasError\n ? 'border-red-500 focus-within:ring-2 focus-within:ring-red-300 focus-within:ring-offset-1 cursor-text'\n : 'border-border-default hover:border-border-strong focus-within:border-fg-tertiary focus-within:ring-2 focus-within:ring-brand-300 focus-within:ring-offset-1 cursor-text',\n className,\n )}\n onClick={() => !disabled && innerInputRef.current?.focus()}\n >\n {selected.map((o) => {\n const locked = lockedValues.includes(o.value);\n return (\n <span\n key={o.value}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full text-fg-default bg-bg-subtle',\n SIZES[size].chip,\n SIZES[size].chipText,\n )}\n title={o.description}\n >\n {o.avatarSrc && <Avatar src={o.avatarSrc} name={o.label} size={SIZES[size].avatar} />}\n <span className=\"font-medium\">{o.label}</span>\n {o.badge && (\n <span className=\"text-label-xxs uppercase tracking-wider opacity-70\">{o.badge}</span>\n )}\n {!locked && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n remove(o.value);\n }}\n aria-label={`Remove ${o.label}`}\n className=\"-mr-0.5 ml-0.5 text-fg-tertiary hover:text-fg-default p-0.5 rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </span>\n );\n })}\n\n <input\n ref={setInputRef}\n id={inputId}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={open && matches[active] ? `${listId}-opt-${active}` : undefined}\n aria-invalid={hasError || undefined}\n aria-describedby={describedBy}\n value={query}\n readOnly={!searchable}\n disabled={disabled || reached}\n onChange={(e) => {\n setQuery(e.target.value);\n setOpen(true);\n }}\n onFocus={() => setOpen(true)}\n onKeyDown={onKeyDown}\n placeholder={selected.length === 0 ? placeholder : reached ? `Limit ${max} reached` : addMorePlaceholder}\n className={cn(\n 'flex-1 bg-transparent outline-none text-fg-default placeholder:text-fg-tertiary disabled:cursor-not-allowed',\n !searchable && 'cursor-pointer',\n SIZES[size].input,\n )}\n />\n </div>\n\n {/* Dropdown */}\n {open && !disabled && !reached && (\n <div className=\"absolute top-full left-0 right-0 mt-1 z-20 max-h-80 overflow-y-auto rounded-lg border border-border-default bg-bg-default shadow-z4\">\n <div className=\"px-3 py-2 border-b border-border-subtle flex items-center gap-2 text-p-sm text-fg-tertiary\">\n <Search className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{query ? `Matches for \"${query}\"` : suggestionsLabel}</span>\n </div>\n {matches.length === 0 ? (\n <div className=\"px-3 py-6 text-center\">\n <Users className=\"w-5 h-5 mx-auto text-fg-tertiary mb-2\" />\n <span className=\"text-p-sm text-fg-secondary\">{emptyText}</span>\n </div>\n ) : (\n <ul role=\"listbox\" id={listId} className=\"py-1\">\n {matches.map((o, i) => (\n <li key={o.value} role=\"option\" id={`${listId}-opt-${i}`} aria-selected={i === active} aria-disabled={o.disabled || undefined}>\n <button\n type=\"button\"\n disabled={o.disabled}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => {\n e.preventDefault();\n add(o.value);\n }}\n className={cn(\n 'w-full px-3 py-2 flex items-center gap-3 text-left transition',\n o.disabled\n ? 'opacity-50 cursor-not-allowed'\n : i === active\n ? 'bg-bg-subtle'\n : 'hover:bg-bg-subtle',\n )}\n >\n {o.avatarSrc && <Avatar src={o.avatarSrc} name={o.label} size=\"sm\" />}\n <span className=\"flex-1 min-w-0\">\n <span className=\"block text-p-std font-medium text-fg-default truncate\">{o.label}</span>\n {o.description && (\n <span className=\"block text-p-sm text-fg-secondary truncate\">{o.description}</span>\n )}\n </span>\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n\n {errorText ? (\n <p id={`${inputId}-error`} className=\"text-p-sm text-red-700\">\n {errorText}\n </p>\n ) : helperText ? (\n <p id={`${inputId}-help`} className=\"text-p-sm text-fg-secondary\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type {\n NotificationBadgeProps,\n NotificationBadgeSize,\n NotificationBadgeVariant,\n} from './NotificationBadge.types';\n\nconst variantStyles: Record<NotificationBadgeVariant, string> = {\n brand: 'bg-brand-500 text-white',\n danger: 'bg-red-600 text-white',\n success: 'bg-green-600 text-white',\n warning: 'bg-yellow-600 text-gray-900 dark:text-gray-900',\n info: 'bg-blue-600 text-white',\n};\n\nconst countSize: Record<NotificationBadgeSize, string> = {\n lg: 'min-w-[18px] h-[18px] px-1 text-[11px]',\n sm: 'min-w-[14px] h-[14px] px-0.5 text-[10px]',\n};\n\nconst dotSize: Record<NotificationBadgeSize, string> = {\n lg: 'h-2.5 w-2.5',\n sm: 'h-1.5 w-1.5',\n};\n\nfunction formatCount(count: number, max: number): string {\n if (count > max) return `${max}+`;\n if (count >= 1000) return `${(count / 1000).toFixed(0)}K`;\n return String(count);\n}\n\n// The badge <span> itself carries the ref/data-test-id/className/rest props —\n// it's the component's real root, whether rendered standalone or overlaid on\n// `children`. The wrapper <span> used in the overlay case is internal\n// positioning plumbing only.\nexport const NotificationBadge = forwardRef<HTMLSpanElement, NotificationBadgeProps>(\n function NotificationBadge(\n {\n count = 0,\n max = 99,\n kind = 'count',\n size = 'lg',\n variant = 'danger',\n children,\n showZero = false,\n className,\n dataTestId,\n ...rest\n },\n ref,\n ) {\n const show = kind === 'dot' ? true : count > 0 || showZero;\n const hasChild = children !== undefined && children !== null && children !== false;\n\n const badge = !show ? null : (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-center justify-center rounded-full font-semibold ring-2 ring-white',\n variantStyles[variant],\n kind === 'count' ? countSize[size] : dotSize[size],\n hasChild ? 'absolute -top-1 -right-1' : 'static',\n className,\n )}\n {...rest}\n >\n {kind === 'count' && formatCount(count, max)}\n </span>\n );\n\n if (!hasChild) return badge;\n\n return (\n <span className=\"relative inline-flex\">\n {children}\n {badge}\n </span>\n );\n },\n);\n","import { forwardRef } from 'react';\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { PaginationProps } from './Pagination.types';\n\ntype Item = number | 'ellipsis-left' | 'ellipsis-right';\n\nfunction buildRange(\n page: number,\n pageCount: number,\n siblingCount: number,\n boundaryCount: number,\n): Item[] {\n const totalNumbers = siblingCount * 2 + 3 + boundaryCount * 2;\n if (pageCount <= totalNumbers) {\n return Array.from({ length: pageCount }, (_, i) => i + 1);\n }\n\n const leftSibling = Math.max(page - siblingCount, boundaryCount + 2);\n const rightSibling = Math.min(page + siblingCount, pageCount - boundaryCount - 1);\n\n const showLeftEllipsis = leftSibling > boundaryCount + 2;\n const showRightEllipsis = rightSibling < pageCount - boundaryCount - 1;\n\n const head = Array.from({ length: boundaryCount }, (_, i) => i + 1);\n const tail = Array.from({ length: boundaryCount }, (_, i) => pageCount - boundaryCount + 1 + i);\n\n const middle: Item[] = [];\n if (!showLeftEllipsis) {\n for (let i = boundaryCount + 1; i <= rightSibling; i++) middle.push(i);\n } else {\n middle.push('ellipsis-left');\n for (let i = leftSibling; i <= rightSibling; i++) middle.push(i);\n }\n if (showRightEllipsis) middle.push('ellipsis-right');\n else {\n for (let i = rightSibling + 1; i <= pageCount - boundaryCount; i++) middle.push(i);\n }\n\n return [...head, ...middle, ...tail];\n}\n\nconst itemBase =\n 'inline-flex items-center justify-center min-w-9 h-9 px-2 text-p-std rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300';\n\nconst navButtonStyles =\n 'text-fg-default hover:bg-bg-subtle disabled:text-fg-disabled disabled:hover:bg-transparent disabled:cursor-not-allowed';\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n {\n page,\n pageCount,\n onPageChange,\n siblingCount = 1,\n boundaryCount = 1,\n className,\n dataTestId,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n) {\n const items = buildRange(page, pageCount, siblingCount, boundaryCount);\n const prevDisabled = page <= 1;\n const nextDisabled = page >= pageCount;\n\n return (\n <nav\n ref={ref}\n aria-label={ariaLabel ?? 'Pagination'}\n data-test-id={dataTestId}\n className={cn('inline-flex items-center gap-1', className)}\n {...rest}\n >\n <button\n type=\"button\"\n onClick={() => !prevDisabled && onPageChange(page - 1)}\n disabled={prevDisabled}\n aria-label=\"Previous page\"\n className={cn(itemBase, navButtonStyles)}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n\n {items.map((item, i) => {\n if (item === 'ellipsis-left' || item === 'ellipsis-right') {\n return (\n <span\n key={`${item}-${i}`}\n aria-hidden\n className=\"inline-flex items-center justify-center w-9 h-9 text-fg-tertiary\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </span>\n );\n }\n const isActive = item === page;\n return (\n <button\n key={item}\n type=\"button\"\n onClick={() => onPageChange(item)}\n aria-current={isActive ? 'page' : undefined}\n className={cn(\n itemBase,\n isActive\n ? 'bg-brand-500 text-white font-semibold hover:bg-brand-600'\n : 'text-fg-default hover:bg-bg-subtle',\n )}\n >\n {item}\n </button>\n );\n })}\n\n <button\n type=\"button\"\n onClick={() => !nextDisabled && onPageChange(page + 1)}\n disabled={nextDisabled}\n aria-label=\"Next page\"\n className={cn(itemBase, navButtonStyles)}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </nav>\n );\n});\n","import { forwardRef, type Ref } from 'react';\nimport { Avatar, type AvatarSize } from '../Avatar';\nimport { cn } from '../../lib/cn';\nimport type { PersonCardProps, PersonCardSize, PersonCardVariant } from './PersonCard.types';\n\n/* Compact person tile — avatar + name + role inside a rounded card.\n * Used as nodes in the org chart on Profile, but the shape (small chip\n * with face + identity) shows up everywhere people are listed: directory\n * search, mention picker, team callouts. Centralising avoids the same\n * markup being rewritten in each context. */\n\nconst sizeStyles: Record<PersonCardSize, { padding: string; avatar: AvatarSize; gap: string }> = {\n sm: { padding: 'px-3 py-2', avatar: 'sm', gap: 'gap-2.5' },\n md: { padding: 'px-3.5 py-2.5', avatar: 'md', gap: 'gap-3' },\n};\n\nconst variantStyles: Record<PersonCardVariant, string> = {\n default: 'border-border-default bg-bg-default hover:border-fg-tertiary/40',\n highlight: 'border-brand-500 bg-brand-200/15 dark:bg-brand-500/10 ring-1 ring-brand-500/40',\n warning: 'border-yellow-500 bg-yellow-50 dark:bg-yellow-900/20',\n};\n\nexport const PersonCard = forwardRef<HTMLDivElement, PersonCardProps>(function PersonCard(\n {\n name,\n role,\n avatar,\n variant = 'default',\n size = 'md',\n badge,\n onClick,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const s = sizeStyles[size];\n const v = variantStyles[variant];\n\n const inner = (\n <>\n <Avatar src={avatar} name={name} size={s.avatar} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-p-std font-semibold text-fg-default truncate leading-tight\">{name}</div>\n {role && (\n <div className=\"text-p-sm text-fg-secondary truncate mt-0.5 leading-tight\">{role}</div>\n )}\n </div>\n {badge && <span className=\"shrink-0 self-center\">{badge}</span>}\n </>\n );\n\n const base = cn(\n 'relative inline-flex items-center rounded-xl border transition',\n s.padding,\n s.gap,\n v,\n onClick && 'cursor-pointer hover:shadow-z1',\n className,\n );\n\n if (onClick) {\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={onClick}\n data-test-id={dataTestId}\n className={cn(base, 'text-left')}\n {...(rest as object)}\n >\n {inner}\n </button>\n );\n }\n return (\n <div ref={ref} data-test-id={dataTestId} className={base} {...rest}>\n {inner}\n </div>\n );\n});\n","import { createContext, forwardRef, useContext, useId, type ChangeEvent } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { RadioGroupProps, RadioProps, RadioSize } from './Radio.types';\n\ninterface RadioGroupContextValue {\n name: string;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n size: RadioSize;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(function RadioGroup(\n {\n name,\n value,\n defaultValue,\n onChange,\n disabled,\n size = 'md',\n orientation = 'vertical',\n children,\n className,\n dataTestId,\n },\n ref,\n) {\n const reactName = useId();\n const groupName = name ?? reactName;\n\n return (\n <RadioGroupContext.Provider\n value={{ name: groupName, value, defaultValue, onChange, disabled, size }}\n >\n <div\n ref={ref}\n role=\"radiogroup\"\n data-test-id={dataTestId}\n className={cn(\n 'flex gap-3',\n orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap items-center gap-4',\n className,\n )}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n});\n\nconst outerSize: Record<RadioSize, string> = {\n md: 'h-5 w-5',\n sm: 'h-4 w-4',\n};\n\nconst innerSize: Record<RadioSize, string> = {\n md: 'h-2 w-2',\n sm: 'h-1.5 w-1.5',\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n value,\n size,\n label,\n description,\n error = false,\n id,\n disabled,\n checked,\n defaultChecked,\n onChange,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const group = useContext(RadioGroupContext);\n const reactId = useId();\n const inputId = id ?? reactId;\n const effectiveSize = size ?? group?.size ?? 'md';\n const effectiveDisabled = disabled ?? group?.disabled;\n\n const inGroup = group !== null;\n const groupChecked = inGroup && group.value !== undefined ? group.value === value : undefined;\n const groupDefaultChecked =\n inGroup && group.defaultValue !== undefined ? group.defaultValue === value : undefined;\n\n const isChecked = inGroup ? groupChecked : checked;\n const isDefaultChecked = inGroup ? groupDefaultChecked : defaultChecked;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n group?.onChange?.(value);\n onChange?.(e);\n };\n\n return (\n <label\n htmlFor={inputId}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-start gap-2.5',\n effectiveDisabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n className,\n )}\n >\n <span className=\"relative inline-flex shrink-0 items-center justify-center mt-0.5\">\n <input\n ref={ref}\n id={inputId}\n type=\"radio\"\n name={group?.name}\n value={value}\n checked={isChecked}\n defaultChecked={isDefaultChecked}\n disabled={effectiveDisabled}\n onChange={handleChange}\n className=\"peer sr-only\"\n aria-invalid={error || undefined}\n {...rest}\n />\n <span\n className={cn(\n 'flex items-center justify-center rounded-full border bg-bg-default transition-colors',\n outerSize[effectiveSize],\n error ? 'border-red-600' : 'border-border-strong',\n !effectiveDisabled && !error && 'peer-hover:border-fg-tertiary',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-brand-300 peer-focus-visible:ring-offset-1',\n 'peer-checked:border-brand-500',\n effectiveDisabled && '!bg-bg-subtle !border-border-default',\n '[&>span]:opacity-0 peer-checked:[&>span]:opacity-100',\n )}\n >\n <span\n className={cn(\n 'rounded-full bg-brand-500 transition-opacity',\n innerSize[effectiveSize],\n effectiveDisabled && '!bg-fg-disabled',\n )}\n />\n </span>\n </span>\n {(label || description) && (\n <span className=\"flex flex-col gap-0.5\">\n {label && (\n <span className=\"text-p-std font-medium text-fg-default leading-tight\">{label}</span>\n )}\n {description && (\n <span className=\"text-p-sm text-fg-secondary leading-snug\">{description}</span>\n )}\n </span>\n )}\n </label>\n );\n});\n","import { forwardRef, useEffect, useId, useRef, useState, type KeyboardEvent } from 'react';\nimport { ChevronDown, Check } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { SelectProps, SelectSize } from './Select.types';\n\nconst sizeStyles: Record<SelectSize, string> = {\n lg: 'h-12 text-p-md px-3.5',\n md: 'h-10 text-p-std px-3',\n sm: 'h-8 text-p-sm px-2.5',\n};\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n {\n options,\n value,\n defaultValue,\n onChange,\n placeholder = 'Select…',\n label,\n helperText,\n errorText,\n error = false,\n size = 'md',\n disabled,\n id,\n className,\n wrapperClassName,\n dataTestId,\n },\n ref,\n) {\n const reactId = useId();\n const triggerId = id ?? reactId;\n const [open, setOpen] = useState(false);\n const [internal, setInternal] = useState<string | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const selected = isControlled ? value : internal;\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const hasError = error || !!errorText;\n\n const selectedOption = options.find((o) => o.value === selected);\n\n const pick = (val: string) => {\n if (!isControlled) setInternal(val);\n onChange?.(val);\n setOpen(false);\n };\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, [open]);\n\n useEffect(() => {\n if (open) {\n const idx = options.findIndex((o) => o.value === selected);\n setActiveIndex(idx >= 0 ? idx : 0);\n } else {\n setActiveIndex(-1);\n }\n }, [open, selected, options]);\n\n const onKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!open) {\n setOpen(true);\n return;\n }\n if (e.key === 'Enter' || e.key === ' ') {\n const opt = options[activeIndex];\n if (opt && !opt.disabled) pick(opt.value);\n return;\n }\n const dir = e.key === 'ArrowDown' ? 1 : -1;\n let next = activeIndex;\n for (let i = 0; i < options.length; i++) {\n next = (next + dir + options.length) % options.length;\n if (!options[next]?.disabled) break;\n }\n setActiveIndex(next);\n } else if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n return (\n <div\n ref={containerRef}\n data-test-id={dataTestId}\n className={cn('flex flex-col gap-1.5 w-full relative', wrapperClassName)}\n >\n {label && (\n <label htmlFor={triggerId} className=\"text-p-std font-medium text-fg-default inline-flex\">\n {label}\n </label>\n )}\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={onKeyDown}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-invalid={hasError || undefined}\n className={cn(\n 'inline-flex items-center justify-between w-full rounded-lg border bg-bg-default transition-colors outline-none',\n 'text-left',\n hasError ? 'border-red-600' : 'border-border-default',\n !disabled && !hasError && 'hover:border-border-strong',\n 'focus-visible:ring-2',\n hasError\n ? 'focus-visible:ring-red-300 focus-visible:border-red-600'\n : 'focus-visible:ring-brand-300 focus-visible:border-brand-500',\n disabled && 'bg-bg-container border-border-default cursor-not-allowed text-fg-disabled',\n sizeStyles[size],\n className,\n )}\n >\n <span className={cn('truncate', !selectedOption && 'text-fg-tertiary')}>\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <ChevronDown\n className={cn('h-4 w-4 ml-2 shrink-0 text-fg-secondary transition-transform', open && 'rotate-180')}\n aria-hidden\n />\n </button>\n {open && (\n <ul\n role=\"listbox\"\n className=\"absolute left-0 right-0 top-full mt-1 max-h-60 overflow-y-auto rounded-lg border border-border-default bg-bg-default shadow-z4 z-50 py-1\"\n >\n {options.map((opt, i) => {\n const isSel = opt.value === selected;\n const isActive = i === activeIndex;\n return (\n <li\n key={opt.value}\n role=\"option\"\n aria-selected={isSel}\n aria-disabled={opt.disabled || undefined}\n onMouseEnter={() => !opt.disabled && setActiveIndex(i)}\n onClick={() => !opt.disabled && pick(opt.value)}\n className={cn(\n 'flex items-center justify-between gap-2 px-3 py-2 text-p-std cursor-pointer select-none',\n opt.disabled && 'opacity-50 cursor-not-allowed',\n isActive && !opt.disabled && 'bg-bg-subtle',\n isSel && 'font-medium',\n )}\n >\n <span className=\"truncate\">{opt.label}</span>\n {isSel && <Check className=\"h-4 w-4 text-brand-500 shrink-0\" />}\n </li>\n );\n })}\n </ul>\n )}\n {errorText ? (\n <p className=\"text-p-sm text-red-700\">{errorText}</p>\n ) : helperText ? (\n <p className=\"text-p-sm text-fg-secondary\">{helperText}</p>\n ) : null}\n </div>\n );\n});\n","import { createContext, forwardRef, useContext, useState, type Ref } from 'react';\nimport { ChevronRight, Menu as MenuIcon } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { SidebarItemProps, SidebarProps } from './Sidebar.types';\n\ninterface SidebarContextValue {\n collapsed: boolean;\n toggle: () => void;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nfunction useSidebar(): SidebarContextValue {\n return useContext(SidebarContext) ?? { collapsed: false, toggle: () => {} };\n}\n\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(function Sidebar(\n {\n defaultCollapsed = false,\n collapsed,\n onCollapsedChange,\n children,\n className,\n logo,\n title,\n subtitle,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState(defaultCollapsed);\n const isControlled = collapsed !== undefined;\n const current = isControlled ? collapsed : internal;\n\n const toggle = () => {\n const next = !current;\n if (!isControlled) setInternal(next);\n onCollapsedChange?.(next);\n };\n\n return (\n <SidebarContext.Provider value={{ collapsed: current, toggle }}>\n <aside\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'flex flex-col bg-bg-default border-r border-border-default transition-all duration-200',\n current ? 'w-16' : 'w-64',\n className,\n )}\n {...rest}\n >\n <div\n className={cn(\n 'flex items-center gap-3 px-4 py-4 border-b border-border-default',\n current && 'justify-center px-2',\n )}\n >\n {logo && <div className=\"shrink-0\">{logo}</div>}\n {!current && (\n <div className=\"flex flex-col min-w-0\">\n {title && (\n <div className=\"text-p-md font-semibold text-fg-default truncate\">{title}</div>\n )}\n {subtitle && <div className=\"text-p-sm text-fg-secondary truncate\">{subtitle}</div>}\n </div>\n )}\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={current ? 'Expand sidebar' : 'Collapse sidebar'}\n className={cn(\n 'ml-auto inline-flex items-center justify-center h-8 w-8 rounded-md text-fg-secondary hover:bg-bg-subtle hover:text-fg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300',\n current && 'ml-0',\n )}\n >\n <MenuIcon className=\"h-4 w-4\" />\n </button>\n </div>\n <nav className=\"flex-1 overflow-y-auto p-2 flex flex-col gap-0.5\">{children}</nav>\n </aside>\n </SidebarContext.Provider>\n );\n});\n\nexport const SidebarItem = forwardRef<HTMLAnchorElement | HTMLButtonElement, SidebarItemProps>(\n function SidebarItem(\n { icon, label, active, badge, children, onClick, href, className, dataTestId, ...rest },\n ref,\n ) {\n const { collapsed } = useSidebar();\n const [open, setOpen] = useState(active ?? false);\n const hasChildren = !!children;\n\n const content = (\n <>\n {icon && <span className=\"inline-flex shrink-0\">{icon}</span>}\n {!collapsed && (\n <>\n <span className=\"flex-1 truncate text-left\">{label}</span>\n {badge && <span className=\"shrink-0\">{badge}</span>}\n {hasChildren && (\n <ChevronRight\n className={cn(\n 'h-4 w-4 shrink-0 text-fg-tertiary transition-transform',\n open && 'rotate-90',\n )}\n aria-hidden\n />\n )}\n </>\n )}\n </>\n );\n\n const handleClick = () => {\n if (hasChildren) setOpen((o) => !o);\n onClick?.();\n };\n\n const itemCls = cn(\n 'group relative flex items-center gap-3 rounded-md px-3 py-2 text-p-std font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300',\n collapsed && 'px-2 justify-center',\n active\n ? 'bg-brand-20 text-brand-800 before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:h-5 before:w-0.5 before:rounded-r before:bg-brand-500'\n : 'text-fg-default hover:bg-bg-container',\n className,\n );\n\n return (\n <>\n {href ? (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n onClick={handleClick}\n data-test-id={dataTestId}\n className={itemCls}\n {...rest}\n >\n {content}\n </a>\n ) : (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={handleClick}\n data-test-id={dataTestId}\n className={cn(itemCls, 'w-full')}\n {...rest}\n >\n {content}\n </button>\n )}\n {hasChildren && open && !collapsed && (\n <div className=\"flex flex-col gap-0.5 pl-8\">{children}</div>\n )}\n </>\n );\n },\n);\n","import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { CheckCircle2, AlertTriangle, XCircle, Info, X, type LucideIcon } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type {\n SnackbarContextValue,\n SnackbarItem,\n SnackbarProviderProps,\n SnackbarVariant,\n} from './Snackbar.types';\n\nconst variantStyles: Record<SnackbarVariant, { container: string; icon: LucideIcon }> = {\n success: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: CheckCircle2 },\n warning: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: AlertTriangle },\n danger: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: XCircle },\n info: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: Info },\n neutral: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: Info },\n};\n\nconst iconColor: Record<SnackbarVariant, string> = {\n success: 'text-green-400',\n warning: 'text-yellow-300',\n danger: 'text-red-400',\n info: 'text-blue-400',\n neutral: 'text-white/70',\n};\n\nconst SnackbarContext = createContext<SnackbarContextValue | null>(null);\n\nexport function useSnackbar(): SnackbarContextValue {\n const ctx = useContext(SnackbarContext);\n if (!ctx) throw new Error('useSnackbar must be used inside <SnackbarProvider>');\n return ctx;\n}\n\nexport function SnackbarProvider({ children, dataTestId }: SnackbarProviderProps) {\n const [items, setItems] = useState<SnackbarItem[]>([]);\n const timers = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n\n const dismiss = useCallback((id: string) => {\n setItems((list) => list.filter((i) => i.id !== id));\n const t = timers.current.get(id);\n if (t) {\n clearTimeout(t);\n timers.current.delete(id);\n }\n }, []);\n\n const show = useCallback(\n (s: Omit<SnackbarItem, 'id'> & { id?: string }) => {\n const id = s.id ?? Math.random().toString(36).slice(2);\n const item: SnackbarItem = {\n duration: 5000,\n variant: 'neutral',\n ...s,\n id,\n };\n setItems((list) => [...list, item]);\n if (item.duration && item.duration > 0) {\n const t = setTimeout(() => dismiss(id), item.duration);\n timers.current.set(id, t);\n }\n return id;\n },\n [dismiss],\n );\n\n useEffect(() => {\n const timerMap = timers.current;\n return () => {\n timerMap.forEach(clearTimeout);\n timerMap.clear();\n };\n }, []);\n\n return (\n <SnackbarContext.Provider value={{ show, dismiss }}>\n {children}\n {createPortal(\n <div\n data-test-id={dataTestId}\n className=\"fixed left-1/2 -translate-x-1/2 bottom-6 z-[100] flex flex-col gap-2 w-[min(400px,calc(100vw-2rem))] pointer-events-none\"\n >\n {items.map((i) => {\n const { container, icon: Icon } = variantStyles[i.variant ?? 'neutral'];\n return (\n <div\n key={i.id}\n role=\"status\"\n data-test-id={i.dataTestId}\n className={cn(\n 'pointer-events-auto flex items-center gap-3 px-4 py-3 rounded-lg shadow-z4',\n container,\n )}\n >\n <Icon\n className={cn('h-5 w-5 shrink-0', iconColor[i.variant ?? 'neutral'])}\n aria-hidden\n />\n <p className=\"flex-1 text-p-std\">{i.message}</p>\n {i.action && (\n <button\n type=\"button\"\n onClick={() => {\n i.action?.onClick();\n dismiss(i.id);\n }}\n className=\"text-p-std font-semibold text-brand-400 hover:text-brand-300 px-1\"\n >\n {i.action.label}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => dismiss(i.id)}\n aria-label=\"Close\"\n className=\"shrink-0 p-1 rounded-md text-white/70 hover:text-white hover:bg-white/10\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n );\n })}\n </div>,\n document.body,\n )}\n </SnackbarContext.Provider>\n );\n}\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { StatusProps, StatusSize, StatusVariant } from './Status.types';\n\nconst sizeStyles: Record<StatusSize, string> = {\n lg: 'h-7 px-2.5 text-p-std gap-1.5',\n md: 'h-6 px-2 text-p-sm gap-1.5',\n sm: 'h-5 px-1.5 text-p-sm gap-1',\n};\n\nconst dotDim: Record<StatusSize, string> = {\n lg: 'h-2 w-2',\n md: 'h-1.5 w-1.5',\n sm: 'h-1.5 w-1.5',\n};\n\nconst variantStyles: Record<StatusVariant, { container: string; dot: string }> = {\n general: { container: 'bg-bg-subtle text-fg-default dark:text-fg-default', dot: 'bg-gray-600 dark:bg-gray-400' },\n info: { container: 'bg-bg-info-lighter text-blue-800 dark:text-blue-300', dot: 'bg-blue-600' },\n brand: { container: 'bg-bg-brand-lighter text-brand-800 dark:text-brand-500', dot: 'bg-brand-500' },\n danger: { container: 'bg-bg-danger-lighter text-red-800 dark:text-red-300', dot: 'bg-red-600' },\n warning: { container: 'bg-bg-warning-lighter text-yellow-900 dark:text-yellow-300', dot: 'bg-yellow-600' },\n success: { container: 'bg-bg-success-lighter text-green-800 dark:text-green-300', dot: 'bg-green-600' },\n discovery: {\n container: 'bg-purple-50 dark:bg-purple-900/30 text-purple-800 dark:text-purple-300',\n dot: 'bg-purple-500',\n },\n disabled: { container: 'bg-bg-subtle text-fg-disabled', dot: 'bg-border-strong' },\n};\n\nexport const Status = forwardRef<HTMLSpanElement, StatusProps>(function Status(\n {\n variant = 'general',\n size = 'md',\n leftIcon,\n rightIcon,\n dot = true,\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const { container, dot: dotColor } = variantStyles[variant];\n\n return (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-center rounded-full font-medium whitespace-nowrap select-none',\n sizeStyles[size],\n container,\n className,\n )}\n {...rest}\n >\n {leftIcon ? (\n <span className=\"inline-flex shrink-0\">{leftIcon}</span>\n ) : dot ? (\n <span className={cn('inline-block shrink-0 rounded-full', dotDim[size], dotColor)} aria-hidden />\n ) : null}\n {children}\n {rightIcon && <span className=\"inline-flex shrink-0\">{rightIcon}</span>}\n </span>\n );\n});\n","import { forwardRef, useId } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { SwitchProps, SwitchSize } from './Switch.types';\n\nconst trackSize: Record<SwitchSize, string> = {\n md: 'h-6 w-11',\n sm: 'h-5 w-9',\n};\n\nconst thumbSize: Record<SwitchSize, string> = {\n md: 'h-5 w-5 peer-checked:translate-x-5',\n sm: 'h-4 w-4 peer-checked:translate-x-4',\n};\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n size = 'md',\n label,\n description,\n labelPosition = 'right',\n id,\n disabled,\n checked,\n defaultChecked,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n\n const control = (\n <span className=\"relative inline-flex shrink-0\">\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n className=\"peer sr-only\"\n {...rest}\n />\n <span\n className={cn(\n 'rounded-full bg-gray-300 dark:bg-gray-700 transition-colors',\n trackSize[size],\n 'peer-checked:bg-brand-500 dark:peer-checked:bg-brand-500',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-brand-300 peer-focus-visible:ring-offset-2',\n disabled && '!bg-bg-subtle',\n )}\n />\n <span\n className={cn(\n 'absolute top-0.5 left-0.5 rounded-full bg-white dark:bg-white shadow-z1 transition-transform',\n thumbSize[size],\n )}\n />\n </span>\n );\n\n if (!label && !description) {\n return (\n <label\n htmlFor={inputId}\n data-test-id={dataTestId}\n className={cn('inline-flex', disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer', className)}\n >\n {control}\n </label>\n );\n }\n\n return (\n <label\n htmlFor={inputId}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-start gap-3',\n labelPosition === 'left' && 'flex-row-reverse justify-end',\n disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n className,\n )}\n >\n {control}\n <span className=\"flex flex-col gap-0.5\">\n {label && <span className=\"text-p-std font-medium text-fg-default leading-tight\">{label}</span>}\n {description && <span className=\"text-p-sm text-fg-secondary leading-snug\">{description}</span>}\n </span>\n </label>\n );\n});\n","import { forwardRef } from 'react';\nimport { ArrowUp, ArrowDown, ChevronsUpDown } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type {\n TableProps,\n THeadProps,\n TBodyProps,\n TRProps,\n THProps,\n TDProps,\n TableAlign,\n DataTableProps,\n} from './Table.types';\n\nconst densityStyles: Record<NonNullable<TableProps['density']>, string> = {\n comfortable: '[&_td]:py-3 [&_th]:py-3',\n compact: '[&_td]:py-2 [&_th]:py-2',\n};\n\nconst alignStyles: Record<TableAlign, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n {\n density = 'comfortable',\n striped = false,\n hoverable = true,\n stickyHeader = false,\n wrapperClassName,\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n return (\n <div\n data-test-id={dataTestId}\n className={cn(\n 'w-full overflow-x-auto rounded-lg border border-border-default bg-bg-default',\n wrapperClassName,\n )}\n >\n <table\n ref={ref}\n className={cn(\n 'w-full border-collapse text-p-std text-fg-default',\n densityStyles[density],\n className,\n )}\n data-striped={striped || undefined}\n data-hoverable={hoverable || undefined}\n data-sticky={stickyHeader || undefined}\n {...rest}\n >\n {children}\n </table>\n </div>\n );\n});\n\nexport const THead = forwardRef<HTMLTableSectionElement, THeadProps>(function THead(\n { className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <thead\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'bg-bg-container text-p-sm font-semibold text-fg-secondary uppercase tracking-wider',\n '[[data-sticky]_&]:sticky [[data-sticky]_&]:top-0 [[data-sticky]_&]:z-10',\n className,\n )}\n {...rest}\n >\n {children}\n </thead>\n );\n});\n\nexport const TBody = forwardRef<HTMLTableSectionElement, TBodyProps>(function TBody(\n { className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <tbody\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n '[&>tr]:border-t [&>tr]:border-border-default',\n '[[data-striped]_&>tr:nth-child(even)]:bg-bg-container',\n '[[data-hoverable]_&>tr:hover]:bg-bg-container',\n className,\n )}\n {...rest}\n >\n {children}\n </tbody>\n );\n});\n\nexport const TR = forwardRef<HTMLTableRowElement, TRProps>(function TR(\n { className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <tr ref={ref} data-test-id={dataTestId} className={className} {...rest}>\n {children}\n </tr>\n );\n});\n\nexport const TH = forwardRef<HTMLTableCellElement, THProps>(function TH(\n {\n sortable = false,\n sortDir = null,\n onSortChange,\n align = 'left',\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const content = (\n <>\n {children}\n {sortable && (\n <span className=\"inline-flex ml-1 align-middle text-fg-tertiary\">\n {sortDir === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : sortDir === 'desc' ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronsUpDown className=\"h-3.5 w-3.5\" />\n )}\n </span>\n )}\n </>\n );\n\n return (\n <th\n ref={ref}\n scope=\"col\"\n data-test-id={dataTestId}\n className={cn('px-4 whitespace-nowrap', alignStyles[align], className)}\n aria-sort={sortDir === 'asc' ? 'ascending' : sortDir === 'desc' ? 'descending' : undefined}\n {...rest}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={() => {\n const next = sortDir === 'asc' ? 'desc' : sortDir === 'desc' ? null : 'asc';\n onSortChange?.(next);\n }}\n className=\"inline-flex items-center hover:text-fg-default focus-visible:outline-none\"\n >\n {content}\n </button>\n ) : (\n content\n )}\n </th>\n );\n});\n\nexport const TD = forwardRef<HTMLTableCellElement, TDProps>(function TD(\n { align = 'left', className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <td\n ref={ref}\n data-test-id={dataTestId}\n className={cn('px-4', alignStyles[align], className)}\n {...rest}\n >\n {children}\n </td>\n );\n});\n\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n empty = 'No results',\n density,\n striped,\n hoverable,\n sortKey,\n sortDir = null,\n onSortChange,\n onRowClick,\n className,\n dataTestId,\n}: DataTableProps<T>) {\n return (\n <Table\n density={density}\n striped={striped}\n hoverable={hoverable}\n className={className}\n dataTestId={dataTestId}\n >\n <THead>\n <TR>\n {columns.map((col) => (\n <TH\n key={col.key}\n align={col.align}\n sortable={col.sortable}\n sortDir={sortKey === col.key ? sortDir : null}\n onSortChange={(d) => onSortChange?.(col.key, d)}\n >\n {col.header}\n </TH>\n ))}\n </TR>\n </THead>\n <TBody>\n {rows.length === 0 ? (\n <TR>\n <TD colSpan={columns.length} className=\"text-center text-fg-tertiary py-10\" align=\"center\">\n {empty}\n </TD>\n </TR>\n ) : (\n rows.map((row, i) => (\n <TR\n key={rowKey(row, i)}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? 'cursor-pointer' : undefined}\n >\n {columns.map((col) => (\n <TD key={col.key} align={col.align}>\n {col.render ? col.render(row) : col.accessor ? col.accessor(row) : null}\n </TD>\n ))}\n </TR>\n ))\n )}\n </TBody>\n </Table>\n );\n}\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../lib/cn';\nimport type {\n TabListProps,\n TabPanelProps,\n TabProps,\n TabsProps,\n TabsSize,\n TabsVariant,\n} from './Tabs.types';\n\ninterface TabsContextValue {\n value: string;\n setValue: (v: string) => void;\n variant: TabsVariant;\n size: TabsSize;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabs() {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error('Tab components must be used inside <Tabs>');\n return ctx;\n}\n\n/** Walks `children` for a `<TabList>` and returns its first `<Tab>`'s value, used\n * as the default active tab when `Tabs` is uncontrolled and no `defaultValue` is given. */\nfunction findFirstValue(children: ReactNode): string {\n const items: ReactElement[] = [];\n Children.forEach(children, (child) => {\n if (isValidElement(child)) items.push(child);\n });\n const list = items.find(\n (child) => (child.type as { displayName?: string })?.displayName === 'TabList',\n );\n if (!isValidElement(list)) return '';\n const listChildren = Children.toArray((list.props as { children?: ReactNode }).children);\n for (const child of listChildren) {\n if (isValidElement(child)) {\n const value = (child.props as { value?: string }).value;\n if (value !== undefined) return value;\n }\n }\n return '';\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n {\n defaultValue,\n value,\n onValueChange,\n variant = 'underline',\n size = 'md',\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState<string>(() => defaultValue ?? findFirstValue(children));\n const controlled = value !== undefined;\n const current = controlled ? value : internal;\n\n const setValue = (v: string) => {\n if (!controlled) setInternal(v);\n onValueChange?.(v);\n };\n\n return (\n <TabsContext.Provider value={{ value: current, setValue, variant, size }}>\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn('flex flex-col gap-4', className)}\n {...rest}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n});\n\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(function TabList(\n { children, className, dataTestId, ...rest },\n ref,\n) {\n const { variant } = useTabs();\n return (\n <div\n ref={ref}\n role=\"tablist\"\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex',\n variant === 'underline' && 'border-b border-border-default gap-1 w-full',\n variant === 'pills' && 'gap-1 p-1 rounded-full bg-bg-container',\n variant === 'boxed' &&\n 'gap-0 rounded-lg border border-border-default overflow-hidden bg-bg-container',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\nTabList.displayName = 'TabList';\n\nconst sizeStyles: Record<TabsSize, string> = {\n lg: 'h-11 px-4 text-p-md',\n md: 'h-10 px-3 text-p-std',\n sm: 'h-8 px-2.5 text-p-sm',\n};\n\n/** Count/indicator pill rendered after the label. Recolours with the tab's\n * active state so the active tab's count reads as the primary one. */\nconst badgeStyles: Record<TabsVariant, { on: string; off: string }> = {\n underline: { on: 'bg-brand-500 text-white', off: 'bg-bg-subtle text-fg-secondary' },\n pills: { on: 'bg-brand-500 text-white', off: 'bg-bg-subtle text-fg-secondary' },\n boxed: { on: 'bg-brand-500 text-white', off: 'bg-bg-subtle text-fg-secondary' },\n};\n\nexport const Tab = forwardRef<HTMLButtonElement, TabProps>(function Tab(\n { value, children, disabled, icon, badge, className, dataTestId, onClick, ...rest },\n ref,\n) {\n const { value: current, setValue, variant, size } = useTabs();\n const active = current === value;\n const hasBadge = badge !== undefined && badge !== null && badge !== false;\n\n const base = cn(\n 'group relative inline-flex items-center justify-center gap-2 font-medium outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-1 focus-visible:rounded-md',\n sizeStyles[size],\n disabled && 'opacity-50 cursor-not-allowed',\n );\n\n const variantCls = (() => {\n if (variant === 'underline') {\n return cn(\n 'rounded-t-lg',\n active ? 'text-fg-default' : 'text-fg-secondary hover:text-fg-default hover:bg-bg-subtle/60',\n );\n }\n if (variant === 'pills') {\n return cn(\n 'rounded-full',\n active\n ? 'bg-bg-default text-fg-default shadow-z1'\n : 'bg-transparent text-fg-secondary hover:text-fg-default',\n );\n }\n return cn(\n 'border-r border-border-default last:border-r-0',\n active ? 'bg-bg-default text-fg-default' : 'bg-transparent text-fg-secondary hover:bg-bg-subtle',\n );\n })();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n disabled={disabled}\n data-test-id={dataTestId}\n onClick={(event) => {\n if (disabled) return;\n setValue(value);\n onClick?.(event);\n }}\n className={cn(base, variantCls, className)}\n {...rest}\n >\n {icon && <span className=\"inline-flex shrink-0\">{icon}</span>}\n <span className=\"truncate\">{children}</span>\n {hasBadge && (\n <span\n className={cn(\n 'inline-flex items-center justify-center shrink-0 rounded-full px-1.5 h-5 min-w-[1.25rem]',\n 'text-label-xs font-semibold tabular-nums leading-none transition-colors',\n active ? badgeStyles[variant].on : badgeStyles[variant].off,\n )}\n >\n {badge}\n </span>\n )}\n {variant === 'underline' && (\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-x-0 -bottom-px h-[2px] rounded-full bg-brand-500 transition-opacity duration-150',\n active ? 'opacity-100' : 'opacity-0',\n )}\n />\n )}\n </button>\n );\n});\n\nexport const TabPanel = forwardRef<HTMLDivElement, TabPanelProps>(function TabPanel(\n { value, children, className, dataTestId, ...rest },\n ref,\n) {\n const { value: current } = useTabs();\n if (current !== value) return null;\n return (\n <div ref={ref} role=\"tabpanel\" data-test-id={dataTestId} className={className} {...rest}>\n {children}\n </div>\n );\n});\n","import { createElement, forwardRef, type ElementType } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { TextProps, TextVariant, TextWeight, TextColor } from './Text.types';\n\nconst variantClass: Record<TextVariant, string> = {\n 'h-xl': 'text-h-xl',\n 'h-lg': 'text-h-lg',\n 'h-md': 'text-h-md',\n 'h-std': 'text-h-std',\n 'h-sm': 'text-h-sm',\n 'h-xs': 'text-h-xs',\n 'p-lg': 'text-p-lg',\n 'p-md': 'text-p-md',\n 'p-std': 'text-p-std',\n 'p-sm': 'text-p-sm',\n 'p-xs': 'text-p-xs',\n 'label-lg': 'text-label-lg',\n 'label-md': 'text-label-md',\n 'label-std': 'text-label-std',\n 'label-sm': 'text-label-sm',\n 'label-xs': 'text-label-xs',\n 'label-xxs': 'text-label-xxs',\n};\n\nconst weightClass: Record<TextWeight, string> = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n};\n\nconst colorClass: Record<TextColor, string> = {\n default: 'text-fg-default',\n secondary: 'text-fg-secondary',\n tertiary: 'text-fg-tertiary',\n disabled: 'text-fg-disabled',\n inverse: 'text-fg-inverse',\n brand: 'text-fg-brand',\n info: 'text-fg-info',\n success: 'text-fg-success',\n warning: 'text-fg-warning',\n danger: 'text-fg-danger',\n};\n\n/** Sensible default element for each variant (can be overridden with `as`). */\nconst defaultAs: Record<TextVariant, ElementType> = {\n 'h-xl': 'h1',\n 'h-lg': 'h1',\n 'h-md': 'h2',\n 'h-std': 'h3',\n 'h-sm': 'h4',\n 'h-xs': 'h5',\n 'p-lg': 'p',\n 'p-md': 'p',\n 'p-std': 'p',\n 'p-sm': 'p',\n 'p-xs': 'p',\n 'label-lg': 'span',\n 'label-md': 'span',\n 'label-std': 'span',\n 'label-sm': 'span',\n 'label-xs': 'span',\n 'label-xxs': 'span',\n};\n\nexport const Text = forwardRef<HTMLElement, TextProps>(function Text(\n { variant = 'p-std', weight, color = 'default', as, truncate, className, children, dataTestId, ...rest },\n ref,\n) {\n const Component = as ?? defaultAs[variant];\n return createElement(\n Component,\n {\n ref,\n 'data-test-id': dataTestId,\n className: cn(\n variantClass[variant],\n weight && weightClass[weight],\n colorClass[color],\n truncate && 'truncate',\n className,\n ),\n ...rest,\n },\n children,\n );\n});\n","import { forwardRef, useId } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { TextAreaProps } from './TextArea.types';\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(function TextArea(\n {\n label,\n helperText,\n errorText,\n error = false,\n id,\n disabled,\n required,\n maxLength,\n showCount = false,\n className,\n wrapperClassName,\n value,\n defaultValue,\n rows = 4,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n const hasError = error || !!errorText;\n const describedBy = errorText ? `${inputId}-error` : helperText ? `${inputId}-help` : undefined;\n const currentLength =\n value !== undefined ? String(value).length : defaultValue !== undefined ? String(defaultValue).length : 0;\n\n return (\n <div className={cn('flex flex-col gap-1.5 w-full', wrapperClassName)} data-test-id={dataTestId}>\n {label && (\n <label htmlFor={inputId} className=\"text-p-std font-medium text-fg-default inline-flex items-center gap-1\">\n {label}\n {required && (\n <span className=\"text-red-600\" aria-hidden>\n *\n </span>\n )}\n </label>\n )}\n <textarea\n ref={ref}\n id={inputId}\n disabled={disabled}\n required={required}\n maxLength={maxLength}\n rows={rows}\n value={value}\n defaultValue={defaultValue}\n aria-invalid={hasError || undefined}\n aria-describedby={describedBy}\n className={cn(\n 'w-full px-3 py-2.5 rounded-lg border bg-bg-default text-p-std text-fg-default placeholder:text-fg-tertiary outline-none transition-colors resize-y',\n hasError ? 'border-red-600' : 'border-border-default',\n !disabled && !hasError && 'hover:border-border-strong',\n 'focus:ring-2',\n hasError ? 'focus:ring-red-300 focus:border-red-600' : 'focus:ring-brand-300 focus:border-brand-500',\n disabled && 'bg-bg-container border-border-default cursor-not-allowed',\n className,\n )}\n {...rest}\n />\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n {errorText ? (\n <p id={`${inputId}-error`} className=\"text-p-sm text-red-700\">\n {errorText}\n </p>\n ) : helperText ? (\n <p id={`${inputId}-help`} className=\"text-p-sm text-fg-secondary\">\n {helperText}\n </p>\n ) : null}\n </div>\n {showCount && maxLength && (\n <p className=\"text-p-sm text-fg-tertiary tabular-nums shrink-0\">\n {currentLength}/{maxLength}\n </p>\n )}\n </div>\n </div>\n );\n});\n","import { cloneElement, forwardRef, isValidElement, useId, useRef, useState } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { TooltipProps, TooltipSide, TooltipSize } from './Tooltip.types';\n\nconst sizeStyles: Record<TooltipSize, string> = {\n lg: 'px-3 py-2 text-p-std',\n sm: 'px-2 py-1 text-p-sm',\n};\n\nconst sidePosition: Record<TooltipSide, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n};\n\nconst arrowPosition: Record<TooltipSide, string> = {\n top: 'top-full left-1/2 -translate-x-1/2 border-t-fg-default border-x-transparent border-b-transparent',\n bottom: 'bottom-full left-1/2 -translate-x-1/2 border-b-fg-default border-x-transparent border-t-transparent',\n left: 'left-full top-1/2 -translate-y-1/2 border-l-fg-default border-y-transparent border-r-transparent',\n right: 'right-full top-1/2 -translate-y-1/2 border-r-fg-default border-y-transparent border-l-transparent',\n};\n\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n { content, children, side = 'top', size = 'sm', delay = 150, className, dataTestId },\n ref,\n) {\n const [open, setOpen] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const tooltipId = useId();\n\n const show = () => {\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => setOpen(true), delay);\n };\n const hide = () => {\n if (timer.current) clearTimeout(timer.current);\n setOpen(false);\n };\n\n if (!isValidElement(children)) return children;\n\n const childProps = (children.props ?? {}) as Record<string, unknown>;\n const trigger = cloneElement(children, {\n onMouseEnter: show,\n onMouseLeave: hide,\n onFocus: show,\n onBlur: hide,\n 'aria-describedby': open ? tooltipId : childProps['aria-describedby'],\n } as Record<string, unknown>);\n\n return (\n <span ref={ref} data-test-id={dataTestId} className=\"relative inline-flex\">\n {trigger}\n {open && (\n <span\n role=\"tooltip\"\n id={tooltipId}\n className={cn(\n 'absolute z-50 whitespace-nowrap rounded-md bg-fg-default text-bg-default shadow-z3 pointer-events-none select-none',\n sizeStyles[size],\n sidePosition[side],\n className,\n )}\n >\n {content}\n <span aria-hidden className={cn('absolute h-0 w-0 border-4', arrowPosition[side])} />\n </span>\n )}\n </span>\n );\n});\n","import { forwardRef, useRef, useState, type DragEvent, type KeyboardEvent } from 'react';\nimport { UploadCloud, File as FileIcon, Trash2, X, CheckCircle2, AlertCircle } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { UploadItemProps, UploadItemStatus, UploadProps } from './Upload.types';\n\nexport const Upload = forwardRef<HTMLDivElement, UploadProps>(function Upload(\n { accept, multiple = false, maxSizeMB, hint, onFiles, disabled, className, dataTestId, ...rest },\n ref,\n) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n\n const onDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragOver(false);\n if (disabled) return;\n const files = Array.from(event.dataTransfer.files ?? []);\n if (files.length) onFiles?.(files);\n };\n\n const hintText =\n hint ??\n `${accept ? accept.toUpperCase().replace(/\\./g, '') : 'Any file'}${\n maxSizeMB ? `, up to ${maxSizeMB} MB` : ''\n }`;\n\n return (\n <div\n ref={ref}\n onDragOver={(event) => {\n event.preventDefault();\n if (!disabled) setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={onDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(event: KeyboardEvent<HTMLDivElement>) => {\n if ((event.key === 'Enter' || event.key === ' ') && !disabled) {\n event.preventDefault();\n inputRef.current?.click();\n }\n }}\n aria-disabled={disabled || undefined}\n data-test-id={dataTestId}\n className={cn(\n 'flex flex-col items-center justify-center text-center gap-2 px-6 py-8 rounded-lg border-2 border-dashed cursor-pointer transition-colors outline-none',\n dragOver ? 'border-brand-500 bg-brand-20' : 'border-border-default bg-bg-container hover:bg-bg-subtle',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-1',\n disabled && 'opacity-50 cursor-not-allowed',\n className,\n )}\n {...rest}\n >\n <div className=\"h-10 w-10 rounded-full bg-bg-default flex items-center justify-center text-fg-secondary shadow-z1\">\n <UploadCloud className=\"h-5 w-5\" />\n </div>\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"text-p-std text-fg-default\">\n <span className=\"font-semibold text-brand-700\">Choose a file</span> or drag & drop it here.\n </p>\n <p className=\"text-p-sm text-fg-tertiary\">{hintText}</p>\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event) => {\n const files = Array.from(event.target.files ?? []);\n if (files.length) onFiles?.(files);\n event.target.value = '';\n }}\n className=\"sr-only\"\n />\n </div>\n );\n});\n\nconst statusStyles: Record<UploadItemStatus, string> = {\n processing: 'border-border-default bg-bg-default',\n completed: 'border-border-default bg-bg-default',\n error: 'border-red-300 bg-bg-danger-lighter',\n};\n\nexport const UploadItem = forwardRef<HTMLDivElement, UploadItemProps>(function UploadItem(\n { name, meta, status = 'processing', progress = 0, errorText, onRetry, onRemove, className, dataTestId, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn('flex items-start gap-3 px-3 py-2.5 rounded-lg border', statusStyles[status], className)}\n {...rest}\n >\n <div\n className={cn(\n 'shrink-0 flex items-center justify-center h-9 w-9 rounded-md',\n status === 'error' ? 'bg-red-100 dark:bg-red-900/30 text-red-700' : 'bg-bg-subtle text-fg-secondary',\n )}\n >\n <FileIcon className=\"h-4 w-4\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"truncate text-p-std font-medium text-fg-default\">{name}</p>\n <div className=\"flex items-center gap-1 shrink-0\">\n {status === 'completed' && (\n <CheckCircle2 className=\"h-4 w-4 text-green-600\" aria-label=\"Completed\" />\n )}\n {status === 'error' && <AlertCircle className=\"h-4 w-4 text-red-600\" aria-label=\"Failed\" />}\n </div>\n </div>\n {meta && <p className=\"text-p-sm text-fg-tertiary mt-0.5\">{meta}</p>}\n {status === 'processing' && (\n <div className=\"mt-2 h-1 w-full rounded-full bg-bg-subtle overflow-hidden\">\n <div\n className=\"h-full bg-brand-500 transition-[width] duration-200\"\n style={{ width: `${Math.min(100, Math.max(0, progress))}%` }}\n />\n </div>\n )}\n {status === 'error' && errorText && (\n <p className=\"text-p-sm text-red-700 mt-1\">\n {errorText}\n {onRetry && (\n <button type=\"button\" onClick={onRetry} className=\"ml-2 underline font-medium hover:no-underline\">\n Try again\n </button>\n )}\n </p>\n )}\n </div>\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label=\"Remove\"\n className=\"shrink-0 p-1 rounded-md text-fg-tertiary hover:text-fg-default hover:bg-bg-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n {status === 'completed' ? <Trash2 className=\"h-4 w-4\" /> : <X className=\"h-4 w-4\" />}\n </button>\n )}\n </div>\n );\n});\n","/**\n * Color primitives and semantic theme tokens.\n *\n * Ported from the People Space design system\n * (packages/design-system/src/tokens/colors.css + aliases.css) — this is\n * the source of truth for the design system's color palette. Values are\n * mirrored (by hand) into `src/styles/tokens.css` and `src/styles/theme.css`\n * as CSS custom properties, since the library ships a real Tailwind theme\n * rather than a JS-only token system.\n */\n\nexport const brand = {\n 900: '#31531C',\n 800: '#416E26',\n 700: '#518A2F',\n 600: '#61A539',\n 500: '#72BF44',\n 400: '#80C557',\n 300: '#8ECC69',\n 200: '#9CD27C',\n 100: '#AAD98F',\n 50: '#B8DFA2',\n 40: '#CAE7B9',\n 30: '#DBEFD1',\n 20: '#EDF7E8',\n} as const;\n\nexport const gray = {\n 900: '#0e121b',\n 800: '#222530',\n 700: '#2b303b',\n 600: '#525866',\n 500: '#717784',\n 400: '#99a0ae',\n 300: '#cacfd8',\n 200: '#e1e4ea',\n 100: '#f2f5f8',\n 50: '#f5f7fa',\n 20: '#f7f9fc',\n} as const;\n\nexport const white = '#FEFEFE';\n\nexport const green = {\n 900: '#0b4627',\n 800: '#0f5c33',\n 700: '#3D8B46',\n 600: '#199754',\n 500: '#1fc16b',\n 400: '#5ed495',\n 300: '#83dfae',\n 200: '#aeeacb',\n 100: '#d0f5e1',\n 50: '#e0faec',\n} as const;\n\nexport const blue = {\n 900: '#2443B8',\n 800: '#2E63D6',\n 700: '#3475E8',\n 600: '#3C88F7',\n 500: '#4396F7',\n 400: '#54A6F8',\n 300: '#71B6F9',\n 200: '#9ACAFA',\n 100: '#C1DEFC',\n 50: '#E6F2FE',\n} as const;\n\nexport const purple = {\n 900: '#081FA6',\n 800: '#0E2AB2',\n 700: '#2431B9',\n 600: '#3838C1',\n 500: '#453DC7',\n 400: '#6559D0',\n 300: '#8377D7',\n 200: '#A89DE2',\n 100: '#CBC4ED',\n 50: '#EAE7F7',\n 20: '#F5F3FB',\n} as const;\n\nexport const pink = {\n 900: '#4A0A20',\n 800: '#79012F',\n 700: '#A2023F',\n 600: '#AD0244',\n 500: '#CA024F',\n 400: '#F50260',\n 300: '#FD2779',\n 200: '#FE7DAF',\n 100: '#FEA8C9',\n 50: '#FFD4E4',\n} as const;\n\nexport const red = {\n 900: '#8b1822',\n 800: '#ad1f2b',\n 700: '#d02533',\n 600: '#e93544',\n 500: '#fb3748',\n 400: '#ff6875',\n 300: '#ff97a0',\n 200: '#ffc0c5',\n 100: '#ffd5d8',\n 50: '#ffebec',\n 20: '#fff4f4',\n} as const;\n\nexport const yellow = {\n 900: '#EB7520',\n 800: '#ED912A',\n 700: '#EEA02F',\n 600: '#F0B134',\n 500: '#F1BE39',\n 400: '#F2C74A',\n 300: '#F4D264',\n 200: '#F7DE8E',\n 100: '#FAEBB9',\n 50: '#FDF7E4',\n} as const;\n\nexport const colorPrimitives = { brand, gray, green, blue, purple, pink, red, yellow } as const;\n\nexport type ColorScale = typeof gray;\nexport type ColorPrimitives = typeof colorPrimitives;\n\n/**\n * Semantic aliases — components and consumer apps reference these, never\n * the raw scales above directly. Mirrors src/styles/theme.css.\n */\nexport const lightTheme = {\n bgDefault: white,\n bgContainer: gray[50],\n bgSubtle: gray[100],\n bgBrandLighter: brand[20],\n bgInfoLighter: blue[50],\n bgSuccessLighter: green[50],\n bgWarningLighter: yellow[50],\n bgDangerLighter: red[50],\n\n fgDefault: gray[900],\n fgSecondary: gray[600],\n fgTertiary: gray[500],\n fgDisabled: gray[400],\n fgInverse: white,\n fgBrand: brand[500],\n fgInfo: blue[600],\n fgSuccess: green[600],\n fgWarning: yellow[800],\n fgDanger: red[800],\n\n borderDefault: gray[200],\n borderSubtle: gray[100],\n borderStrong: gray[300],\n borderBrand: brand[500],\n\n iconPrimary: gray[900],\n iconSecondary: gray[600],\n iconInverse: white,\n iconBrand: brand[500],\n iconInfo: blue[600],\n iconDanger: red[800],\n iconWarning: yellow[800],\n} as const;\n\nexport const darkTheme = {\n ...lightTheme,\n bgDefault: '#0B1120',\n bgContainer: '#0F172A',\n bgSubtle: '#121C30',\n bgBrandLighter: 'rgba(114, 191, 68, 0.15)',\n bgInfoLighter: 'rgba(67, 150, 247, 0.15)',\n bgSuccessLighter: 'rgba(31, 193, 107, 0.15)',\n bgWarningLighter: 'rgba(237, 145, 42, 0.15)',\n bgDangerLighter: 'rgba(230, 27, 0, 0.15)',\n\n fgDefault: white,\n fgSecondary: gray[400],\n fgTertiary: gray[500],\n fgDisabled: gray[600],\n\n borderDefault: 'rgba(255, 255, 255, 0.05)',\n borderSubtle: 'rgba(255, 255, 255, 0.03)',\n borderStrong: 'rgba(255, 255, 255, 0.10)',\n\n iconPrimary: white,\n iconSecondary: gray[400],\n} as const;\n\nexport type SemanticTheme = typeof lightTheme;\n","/**\n * Typography tokens, mirrored as `--text-*` / `--font-*` in\n * src/styles/tokens.css. Ported from the People Space design system\n * (packages/design-system/src/tokens/typography.css). Sizes are paired\n * with their line-height; weight is composed separately via Tailwind's\n * default `font-*` utilities.\n */\nexport const fontFamily = {\n ps: ['Noto Sans Armenian', 'Noto Sans', 'ui-sans-serif', 'system-ui', 'sans-serif'],\n sans: ['Noto Sans Armenian', 'Noto Sans', 'ui-sans-serif', 'system-ui', 'sans-serif'],\n} as const;\n\nexport const headline = {\n xl: { fontSize: '64px', lineHeight: '72px' },\n lg: { fontSize: '48px', lineHeight: '56px' },\n md: { fontSize: '40px', lineHeight: '48px' },\n std: { fontSize: '36px', lineHeight: '44px' },\n sm: { fontSize: '32px', lineHeight: '40px' },\n xs: { fontSize: '24px', lineHeight: '32px' },\n} as const;\n\nexport const paragraph = {\n lg: { fontSize: '20px', lineHeight: '28px' },\n md: { fontSize: '16px', lineHeight: '24px' },\n std: { fontSize: '14px', lineHeight: '20px' },\n sm: { fontSize: '12px', lineHeight: '16px' },\n xs: { fontSize: '10px', lineHeight: '14px' },\n} as const;\n\nexport const label = {\n lg: { fontSize: '20px', lineHeight: '28px' },\n md: { fontSize: '16px', lineHeight: '24px' },\n std: { fontSize: '14px', lineHeight: '20px' },\n sm: { fontSize: '12px', lineHeight: '16px' },\n xs: { fontSize: '10px', lineHeight: '14px' },\n xxs: { fontSize: '6px', lineHeight: '6px' },\n} as const;\n\nexport const typography = { headline, paragraph, label } as const;\n","/**\n * Component-level sizing tokens (control heights, icon sizes).\n * General layout spacing intentionally reuses Tailwind's default 4px scale\n * rather than redefining it here — same convention as the People Space\n * design system (packages/design-system/src/tokens/spacing.css), which\n * documents an 8px rhythm (p-2, p-4, p-6, p-8...) on top of that scale\n * without overriding any token.\n */\nexport const controlHeight = {\n sm: '2rem',\n md: '2.5rem',\n lg: '3rem',\n} as const;\n\nexport const iconSize = {\n sm: '0.875rem',\n md: '1rem',\n lg: '1.25rem',\n} as const;\n","/**\n * Border radii, mirrored as `--radius-*` in src/styles/tokens.css. Ported\n * from the People Space design system (packages/design-system/src/tokens/radii.css)\n * as a fixed step scale rather than a single calc()-derived base value.\n */\nexport const radius = {\n xs: '2px',\n sm: '4px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n '2xl': '20px',\n '3xl': '24px',\n full: '9999px',\n} as const;\n","/**\n * Elevation scale, mirrored as `--shadow-z*` in src/styles/tokens.css.\n * Ported from the People Space design system\n * (packages/design-system/src/tokens/shadows.css) — z4 verified from\n * Figma, others interpolated.\n */\nexport const shadows = {\n z1: '0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n z2: '0 1px 3px 0 rgba(0, 0, 0, 0.08), 0 1px 2px 0 rgba(0, 0, 0, 0.04)',\n z3: '0 4px 8px 0 rgba(0, 0, 0, 0.08), 0 2px 4px 0 rgba(0, 0, 0, 0.04)',\n z4: '0 1px 4px 0 rgba(0, 0, 0, 0.12), 0 12px 16px 0 rgba(0, 0, 0, 0.10), 0 3px 5px 0 rgba(0, 0, 0, 0.12)',\n z5: '0 8px 16px 0 rgba(0, 0, 0, 0.12), 0 24px 32px 0 rgba(0, 0, 0, 0.12)',\n} as const;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/lib/cn.ts","../src/components/Accordion/Accordion.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/Divider/Divider.tsx","../src/components/Drawer/Drawer.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/Filter/Filter.tsx","../src/components/IconTile/IconTile.tsx","../src/components/InfoField/InfoField.tsx","../src/components/InlineAlert/InlineAlert.tsx","../src/components/Input/Input.tsx","../src/components/Modal/Modal.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/NotificationBadge/NotificationBadge.tsx","../src/components/Pagination/Pagination.tsx","../src/components/PersonCard/PersonCard.tsx","../src/components/Progress/Progress.tsx","../src/components/Radio/Radio.tsx","../src/components/Select/Select.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Snackbar/Snackbar.tsx","../src/components/Status/Status.tsx","../src/components/Switch/Switch.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Text/Text.tsx","../src/components/TextArea/TextArea.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Upload/Upload.tsx","../src/tokens/colors.ts","../src/tokens/typography.ts","../src/tokens/spacing.ts","../src/tokens/radius.ts","../src/tokens/shadows.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges class names, resolving conflicting Tailwind utilities in favor of\n * the last one specified (e.g. `cn('px-2', 'px-4')` -> `'px-4'`). This is\n * what lets consumers pass a `className` prop that overrides a component's\n * defaults instead of just appending to them.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { createContext, forwardRef, useContext, useId, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { AccordionItemProps, AccordionProps } from './Accordion.types';\n\ninterface AccordionContextValue {\n openValues: string[];\n toggle: (value: string) => void;\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nfunction useAccordion() {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error('AccordionItem must be used inside <Accordion>');\n return ctx;\n}\n\nfunction normalize(value: string | string[] | undefined): string[] {\n return value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n { type = 'single', defaultValue, value, onValueChange, className, children, dataTestId, ...rest },\n ref,\n) {\n const [internal, setInternal] = useState<string[]>(() => normalize(defaultValue));\n const isControlled = value !== undefined;\n const openValues = isControlled ? normalize(value) : internal;\n\n const toggle = (val: string) => {\n let next: string[];\n if (type === 'single') {\n next = openValues.includes(val) ? [] : [val];\n } else {\n next = openValues.includes(val) ? openValues.filter((v) => v !== val) : [...openValues, val];\n }\n if (!isControlled) setInternal(next);\n onValueChange?.(type === 'single' ? (next[0] ?? '') : next);\n };\n\n return (\n <AccordionContext.Provider value={{ openValues, toggle }}>\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'flex flex-col divide-y divide-border-default border border-border-default rounded-lg overflow-hidden bg-bg-default',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n});\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { value, title, icon, disabled, className, children, dataTestId, ...rest },\n ref,\n) {\n const { openValues, toggle } = useAccordion();\n const isOpen = openValues.includes(value);\n const panelId = useId();\n\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n data-state={isOpen ? 'open' : 'closed'}\n className={cn('group', className)}\n {...rest}\n >\n <h3>\n <button\n type=\"button\"\n onClick={() => toggle(value)}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-controls={panelId}\n className={cn(\n 'flex w-full items-center justify-between gap-3 px-5 py-4 text-left',\n 'text-p-md font-medium text-fg-default',\n 'hover:bg-bg-container transition-colors',\n 'focus-visible:outline-none focus-visible:bg-bg-container',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n )}\n >\n <span className=\"inline-flex items-center gap-3\">\n {icon && <span className=\"inline-flex text-fg-secondary\">{icon}</span>}\n {title}\n </span>\n <ChevronDown\n className={cn(\n 'h-5 w-5 shrink-0 text-fg-secondary transition-transform duration-200',\n isOpen && 'rotate-180',\n )}\n aria-hidden\n />\n </button>\n </h3>\n <div\n id={panelId}\n role=\"region\"\n hidden={!isOpen}\n className=\"px-5 pb-4 text-p-std text-fg-secondary\"\n >\n {children}\n </div>\n </div>\n );\n});\n","import { forwardRef, useState, type ReactNode } from 'react';\nimport { User } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { AvatarGroupProps, AvatarProps, AvatarSize, AvatarStatus } from './Avatar.types';\n\nconst sizeStyles: Record<AvatarSize, string> = {\n xs: 'h-6 w-6 text-p-xs',\n sm: 'h-8 w-8 text-p-sm',\n md: 'h-10 w-10 text-p-std',\n lg: 'h-12 w-12 text-p-md',\n xl: 'h-16 w-16 text-h-xs',\n '2xl': 'h-20 w-20 text-h-xs',\n};\n\nconst statusSize: Record<AvatarSize, string> = {\n xs: 'h-1.5 w-1.5',\n sm: 'h-2 w-2',\n md: 'h-2.5 w-2.5',\n lg: 'h-3 w-3',\n xl: 'h-3.5 w-3.5',\n '2xl': 'h-4 w-4',\n};\n\nconst statusColor: Record<AvatarStatus, string> = {\n online: 'bg-green-500',\n offline: 'bg-gray-400 dark:bg-gray-500',\n away: 'bg-yellow-600',\n busy: 'bg-red-600',\n};\n\nconst overlap: Record<AvatarSize, string> = {\n xs: '-ml-1.5',\n sm: '-ml-2',\n md: '-ml-2.5',\n lg: '-ml-3',\n xl: '-ml-4',\n '2xl': '-ml-5',\n};\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase();\n return (parts[0]![0]! + parts[parts.length - 1]![0]!).toUpperCase();\n}\n\nfunction colorFromName(name: string): string {\n const palette = ['bg-brand-500', 'bg-blue-600', 'bg-purple-500', 'bg-pink-500', 'bg-yellow-600', 'bg-green-500'];\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = (hash << 5) - hash + name.charCodeAt(i);\n hash |= 0;\n }\n return palette[Math.abs(hash) % palette.length]!;\n}\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n { src, alt, name, size = 'md', status, shape = 'circle', fallback, className, dataTestId, ...rest },\n ref,\n) {\n const [errored, setErrored] = useState(false);\n const showImage = !!src && !errored;\n const initials = name ? getInitials(name) : '';\n const bgColor = name ? colorFromName(name) : 'bg-gray-300 dark:bg-gray-600';\n\n return (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn('relative inline-flex shrink-0', className)}\n {...rest}\n >\n <span\n className={cn(\n 'inline-flex items-center justify-center overflow-hidden font-semibold text-white select-none',\n sizeStyles[size],\n shape === 'circle' ? 'rounded-full' : 'rounded-md',\n !showImage && bgColor,\n )}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt ?? name ?? ''}\n onError={() => setErrored(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : name ? (\n initials\n ) : (\n (fallback ?? <User className=\"h-1/2 w-1/2 text-white/90\" />)\n )}\n </span>\n {status && (\n <span\n aria-label={status}\n className={cn(\n 'absolute right-0 bottom-0 rounded-full ring-2 ring-white',\n statusSize[size],\n statusColor[status],\n )}\n />\n )}\n </span>\n );\n});\n\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup(\n { size = 'md', max, children, className, dataTestId, ...rest },\n ref,\n) {\n const items = Array.isArray(children) ? children : ([children] as ReactNode[]);\n const shown = max !== undefined ? items.slice(0, max) : items;\n const extra = max !== undefined ? items.length - max : 0;\n\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn('inline-flex items-center', className)}\n {...rest}\n >\n {shown.map((child, i) => (\n <div\n key={i}\n className={cn('rounded-full ring-2 ring-white', i > 0 && overlap[size])}\n style={{ zIndex: shown.length - i }}\n >\n {child}\n </div>\n ))}\n {extra > 0 && (\n <div className={cn('rounded-full ring-2 ring-white', overlap[size])}>\n <Avatar size={size} name={`+${extra}`} />\n </div>\n )}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { BadgeProps, BadgeSize, BadgeVariant } from './Badge.types';\n\nconst sizeStyles: Record<BadgeSize, string> = {\n lg: 'h-7 px-2.5 text-p-std gap-1.5 rounded-md',\n md: 'h-6 px-2 text-p-sm gap-1 rounded-md',\n sm: 'h-5 px-1.5 text-p-sm gap-1 rounded',\n xs: 'h-4 px-1 text-p-xs gap-0.5 rounded',\n};\n\nconst filledStyles: Record<BadgeVariant, string> = {\n neutral: 'bg-bg-subtle text-fg-default border border-border-default',\n brand: 'bg-brand-20 text-brand-800 border border-brand-100',\n success: 'bg-green-50 text-green-800 border border-green-100',\n warning: 'bg-yellow-50 text-yellow-900 border border-yellow-100',\n danger: 'bg-red-50 text-red-800 border border-red-100',\n info: 'bg-blue-50 text-blue-800 border border-blue-100',\n privacy: 'bg-purple-50 text-purple-800 border border-purple-100',\n};\n\nconst outlineStyles: Record<BadgeVariant, string> = {\n neutral: 'bg-transparent text-fg-default border border-border-strong',\n brand: 'bg-transparent text-brand-700 border border-brand-500',\n success: 'bg-transparent text-green-700 border border-green-500',\n warning: 'bg-transparent text-yellow-800 border border-yellow-600',\n danger: 'bg-transparent text-red-700 border border-red-500',\n info: 'bg-transparent text-blue-700 border border-blue-500',\n privacy: 'bg-transparent text-purple-700 border border-purple-500',\n};\n\nconst accentStyles: Record<BadgeVariant, string> = {\n neutral: 'bg-fg-default text-bg-default',\n brand: 'bg-brand-500 text-white',\n success: 'bg-green-600 text-white',\n warning: 'bg-yellow-600 text-gray-900 dark:text-gray-900',\n danger: 'bg-red-700 text-white',\n info: 'bg-blue-600 text-white',\n privacy: 'bg-purple-500 text-white',\n};\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n variant = 'neutral',\n appearance = 'filled',\n size = 'md',\n leftIcon,\n rightIcon,\n onDismiss,\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const palette =\n appearance === 'filled'\n ? filledStyles[variant]\n : appearance === 'outline'\n ? outlineStyles[variant]\n : accentStyles[variant];\n\n return (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-center font-medium whitespace-nowrap select-none',\n sizeStyles[size],\n palette,\n className,\n )}\n {...rest}\n >\n {leftIcon && <span className=\"inline-flex shrink-0\">{leftIcon}</span>}\n {children}\n {rightIcon && !onDismiss && <span className=\"inline-flex shrink-0\">{rightIcon}</span>}\n {onDismiss && (\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"inline-flex shrink-0 -mr-0.5 rounded-full p-0.5 hover:bg-black/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </span>\n );\n});\n","import { forwardRef } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { ButtonProps, ButtonSize, ButtonVariant } from './Button.types';\n\nconst sizeStyles: Record<ButtonSize, string> = {\n lg: 'h-12 px-5 text-p-md gap-2 rounded-lg',\n md: 'h-10 px-4 text-p-std gap-2 rounded-lg',\n sm: 'h-8 px-3 text-p-sm gap-1.5 rounded-md',\n};\n\nconst iconOnlySize: Record<ButtonSize, string> = {\n lg: 'h-12 w-12 rounded-lg',\n md: 'h-10 w-10 rounded-lg',\n sm: 'h-8 w-8 rounded-md',\n};\n\nconst variantStyles: Record<ButtonVariant, string> = {\n primary: [\n 'bg-brand-500 text-white border border-transparent',\n 'hover:bg-brand-600 active:bg-brand-700',\n 'disabled:bg-bg-subtle disabled:text-fg-disabled disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-2',\n ].join(' '),\n secondary: [\n 'bg-bg-default text-fg-default border border-border-default',\n 'hover:bg-bg-container active:bg-bg-subtle',\n 'disabled:bg-bg-container disabled:text-fg-disabled disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-2',\n ].join(' '),\n tertiary: [\n 'bg-transparent text-fg-default border border-transparent',\n 'hover:bg-bg-subtle active:bg-bg-subtle',\n 'disabled:text-fg-disabled disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-2',\n ].join(' '),\n danger: [\n 'bg-red-700 text-white border border-transparent',\n 'hover:bg-red-800 active:bg-red-900',\n 'disabled:bg-bg-subtle disabled:text-fg-disabled disabled:cursor-not-allowed',\n 'focus-visible:ring-2 focus-visible:ring-red-300 focus-visible:ring-offset-2',\n ].join(' '),\n};\n\n// Same shade each variant already uses for `active:`, applied persistently\n// while `pressed` is true instead of only during the mousedown instant.\nconst pressedStyles: Record<ButtonVariant, string> = {\n primary: 'bg-brand-700',\n secondary: 'bg-bg-subtle',\n tertiary: 'bg-bg-subtle',\n danger: 'bg-red-900',\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n leftIcon,\n rightIcon,\n loading = false,\n iconOnly = false,\n fullWidth = false,\n pressed = false,\n disabled,\n className,\n children,\n onClick,\n dataTestId,\n ...rest\n },\n ref,\n) {\n return (\n <button\n ref={ref}\n disabled={disabled || loading}\n aria-pressed={pressed}\n data-test-id={dataTestId}\n onClick={(event) => {\n if (pressed || disabled || loading) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n }}\n className={cn(\n 'inline-flex items-center justify-center font-medium transition-colors outline-none',\n iconOnly ? iconOnlySize[size] : sizeStyles[size],\n variantStyles[variant],\n pressed && pressedStyles[variant],\n fullWidth && 'w-full',\n className,\n )}\n {...rest}\n >\n {loading ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" aria-hidden />\n ) : (\n <>\n {leftIcon && <span className=\"inline-flex shrink-0\">{leftIcon}</span>}\n {children}\n {rightIcon && <span className=\"inline-flex shrink-0\">{rightIcon}</span>}\n </>\n )}\n </button>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { ButtonGroupOrientation, ButtonGroupProps } from './ButtonGroup.types';\n\nconst orientationStyles: Record<ButtonGroupOrientation, string> = {\n horizontal:\n 'flex-row [&>*]:rounded-none [&>*:first-child]:rounded-l-lg [&>*:last-child]:rounded-r-lg [&>*:not(:first-child)]:-ml-px',\n vertical:\n 'flex-col [&>*]:rounded-none [&>*:first-child]:rounded-t-lg [&>*:last-child]:rounded-b-lg [&>*:not(:first-child)]:-mt-px',\n};\n\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(function ButtonGroup(\n { orientation = 'horizontal', className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex isolate',\n orientationStyles[orientation],\n '[&>*]:relative [&>*:hover]:z-10 [&>*:focus-visible]:z-10',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { CardProps, CardPadding, CardVariant } from './Card.types';\n\nconst variantStyles: Record<CardVariant, string> = {\n elevated: 'bg-bg-default border border-border-default shadow-z1',\n outlined: 'bg-bg-default border border-border-default',\n filled: 'bg-bg-container border border-transparent',\n};\n\nconst paddingStyles: Record<CardPadding, string> = {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-5',\n lg: 'p-6',\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n variant = 'outlined',\n padding = 'md',\n header,\n footer,\n interactive = false,\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const hasSlots = header || footer;\n\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'rounded-xl overflow-hidden',\n variantStyles[variant],\n interactive && 'transition-all hover:border-brand-500 hover:shadow-z2',\n // If header/footer used, padding is applied per-region, not on the wrapper.\n !hasSlots && paddingStyles[padding],\n className,\n )}\n {...rest}\n >\n {header && (\n <div className={cn('border-b border-border-subtle', paddingStyles[padding])}>\n {header}\n </div>\n )}\n {hasSlots ? <div className={paddingStyles[padding]}>{children}</div> : children}\n {footer && (\n <div className={cn('border-t border-border-subtle', paddingStyles[padding])}>\n {footer}\n </div>\n )}\n </div>\n );\n});\n","import { forwardRef, useId } from 'react';\nimport { Check, Minus } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { CheckboxProps, CheckboxSize } from './Checkbox.types';\n\nconst boxSize: Record<CheckboxSize, string> = {\n md: 'h-5 w-5 rounded-sm',\n sm: 'h-4 w-4 rounded-sm',\n};\n\nconst iconSize: Record<CheckboxSize, string> = {\n md: 'h-3.5 w-3.5',\n sm: 'h-3 w-3',\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n size = 'md',\n label,\n description,\n indeterminate = false,\n error = false,\n id,\n disabled,\n checked,\n defaultChecked,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n\n return (\n <label\n htmlFor={inputId}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-start gap-2.5 group/checkbox',\n disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n className,\n )}\n >\n <span className=\"relative inline-flex shrink-0 items-center justify-center mt-0.5\">\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n className=\"peer sr-only\"\n aria-invalid={error || undefined}\n aria-checked={indeterminate ? 'mixed' : undefined}\n {...rest}\n />\n <span\n className={cn(\n 'flex items-center justify-center border transition-colors',\n boxSize[size],\n // base (not checked, not indeterminate)\n !indeterminate && 'bg-bg-default',\n // border color\n error ? 'border-red-600' : indeterminate ? 'border-brand-500' : 'border-border-strong',\n // hover\n !disabled &&\n !indeterminate &&\n (error ? 'peer-hover:border-red-700' : 'peer-hover:border-fg-tertiary'),\n // focus ring\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-brand-300 peer-focus-visible:ring-offset-1',\n // checked (controlled or uncontrolled via peer)\n !indeterminate && 'peer-checked:bg-brand-500 peer-checked:border-brand-500',\n // indeterminate wins\n indeterminate && 'bg-brand-500',\n // disabled overrides\n disabled &&\n !indeterminate &&\n 'peer-checked:bg-bg-subtle peer-checked:border-border-strong',\n // SVG visibility — toggled via peer-checked on the sibling native input.\n !indeterminate &&\n '[&_svg]:opacity-0 peer-checked:[&_svg]:opacity-100 [&_svg]:transition-opacity',\n )}\n >\n {indeterminate ? (\n <Minus className={cn(iconSize[size], 'text-white')} strokeWidth={3} aria-hidden />\n ) : (\n <Check className={cn(iconSize[size], 'text-white')} strokeWidth={3} aria-hidden />\n )}\n </span>\n </span>\n {(label || description) && (\n <span className=\"flex flex-col gap-0.5\">\n {label && (\n <span className=\"text-p-std font-medium text-fg-default leading-tight\">{label}</span>\n )}\n {description && (\n <span className=\"text-p-sm text-fg-secondary leading-snug\">{description}</span>\n )}\n </span>\n )}\n </label>\n );\n});\n","import { forwardRef, useEffect, useId, useRef, useState } from 'react';\nimport { Calendar, ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { DatePickerProps, DatePickerSize } from './DatePicker.types';\n\n// Heights, text sizes and horizontal padding mirror Input/Select exactly so a\n// DatePicker lines up with the other fields in a form grid.\nconst sizeStyles: Record<DatePickerSize, string> = {\n lg: 'h-12 text-p-md px-3.5',\n md: 'h-10 text-p-std px-3',\n sm: 'h-8 text-p-sm px-2.5',\n};\n\nconst MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst DAY_NAMES = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nfunction sameDay(a: Date | null, b: Date | null) {\n return (\n !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n );\n}\n\nfunction formatShort(date: Date) {\n return `${String(date.getDate()).padStart(2, '0')}.${String(date.getMonth() + 1).padStart(2, '0')}.${date.getFullYear()}`;\n}\n\nfunction buildGrid(view: Date) {\n const first = startOfMonth(view);\n const offset = (first.getDay() + 6) % 7; // Mon-first\n const daysInMonth = new Date(view.getFullYear(), view.getMonth() + 1, 0).getDate();\n const cells: (Date | null)[] = [];\n for (let i = 0; i < offset; i++) cells.push(null);\n for (let i = 1; i <= daysInMonth; i++) cells.push(new Date(view.getFullYear(), view.getMonth(), i));\n while (cells.length % 7 !== 0) cells.push(null);\n return cells;\n}\n\nexport const DatePicker = forwardRef<HTMLButtonElement, DatePickerProps>(function DatePicker(\n {\n value,\n onChange,\n range = false,\n rangeValue,\n onChangeRange,\n size = 'md',\n label,\n placeholder = 'Select date',\n fullWidth = false,\n id,\n className,\n wrapperClassName,\n dataTestId,\n },\n ref,\n) {\n const reactId = useId();\n const triggerId = id ?? reactId;\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<Date>(value ?? rangeValue?.start ?? new Date());\n const [hoverEnd, setHoverEnd] = useState<Date | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onClick);\n return () => document.removeEventListener('mousedown', onClick);\n }, [open]);\n\n const display = range\n ? rangeValue?.start\n ? `${formatShort(rangeValue.start)}${rangeValue.end ? ` – ${formatShort(rangeValue.end)}` : ''}`\n : ''\n : value\n ? formatShort(value)\n : '';\n\n function pick(date: Date) {\n if (!range) {\n onChange?.(date);\n setOpen(false);\n return;\n }\n const current = rangeValue ?? { start: null, end: null };\n if (!current.start || (current.start && current.end)) {\n onChangeRange?.({ start: date, end: null });\n return;\n }\n if (date < current.start) {\n onChangeRange?.({ start: date, end: current.start });\n return;\n }\n onChangeRange?.({ start: current.start, end: date });\n setOpen(false);\n }\n\n const cells = buildGrid(view);\n const currentRange = rangeValue ?? { start: null, end: null };\n const rangeEnd = currentRange.end ?? hoverEnd;\n\n return (\n <div\n ref={containerRef}\n data-test-id={dataTestId}\n className={cn('flex flex-col gap-1.5', fullWidth && 'w-full', wrapperClassName)}\n >\n {label && (\n <label htmlFor={triggerId} className=\"text-p-std font-medium text-fg-default inline-flex\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'inline-flex items-center gap-2 rounded-lg border border-border-default bg-bg-default text-left transition-colors hover:border-border-strong focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:border-brand-500',\n fullWidth ? 'w-full min-w-0' : 'min-w-[260px]',\n sizeStyles[size],\n className,\n )}\n >\n <span className={cn('flex-1 text-left truncate', display ? 'text-fg-default' : 'text-fg-tertiary')}>\n {display || placeholder}\n </span>\n <Calendar className=\"w-4 h-4 text-fg-secondary\" />\n </button>\n\n {open && (\n <div className=\"absolute z-50 mt-1 left-0 rounded-xl border border-border-default bg-bg-default shadow-z3 p-3 w-[300px]\">\n <div className=\"flex items-center justify-between mb-2\">\n <button\n type=\"button\"\n className=\"w-8 h-8 rounded-md hover:bg-bg-container flex items-center justify-center text-fg-secondary\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() - 1, 1))}\n aria-label=\"Previous month\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <div className=\"text-p-md font-semibold text-fg-default\">\n {MONTH_NAMES[view.getMonth()]} {view.getFullYear()}\n </div>\n <button\n type=\"button\"\n className=\"w-8 h-8 rounded-md hover:bg-bg-container flex items-center justify-center text-fg-secondary\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() + 1, 1))}\n aria-label=\"Next month\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"grid grid-cols-7 gap-1 text-center\">\n {DAY_NAMES.map((day) => (\n <div key={day} className=\"text-p-xs text-fg-tertiary py-1\">\n {day}\n </div>\n ))}\n {cells.map((date, index) => {\n if (!date) return <div key={index} />;\n const isSelected = !range && sameDay(date, value ?? null);\n const isStart = range && sameDay(date, currentRange.start);\n const isEnd = range && sameDay(date, rangeEnd);\n const isInRange = range && !!currentRange.start && !!rangeEnd && date > currentRange.start && date < rangeEnd;\n const stateClassName =\n isSelected || isStart || isEnd\n ? 'bg-brand-500 text-white'\n : isInRange\n ? 'bg-bg-brand-lighter text-brand-700'\n : 'text-fg-default hover:bg-bg-container';\n return (\n <button\n key={index}\n type=\"button\"\n onMouseEnter={() => range && currentRange.start && !currentRange.end && setHoverEnd(date)}\n onClick={() => pick(date)}\n className={cn('h-8 rounded-md text-p-sm font-medium', stateClassName)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type {\n DividerColor,\n DividerOrientation,\n DividerProps,\n DividerVariant,\n} from './Divider.types';\n\nconst orientationStyles: Record<DividerOrientation, string> = {\n horizontal: 'h-0 w-full border-t',\n vertical: 'w-0 h-full self-stretch border-l',\n};\n\nconst variantStyles: Record<DividerVariant, string> = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n};\n\nconst colorStyles: Record<DividerColor, string> = {\n default: 'border-border-default',\n subtle: 'border-border-subtle',\n strong: 'border-border-strong',\n brand: 'border-border-brand',\n};\n\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(function Divider(\n { orientation = 'horizontal', variant = 'solid', color = 'default', className, dataTestId, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n data-test-id={dataTestId}\n className={cn(\n 'shrink-0',\n orientationStyles[orientation],\n variantStyles[variant],\n colorStyles[color],\n className,\n )}\n {...rest}\n />\n );\n});\n","import { forwardRef, useEffect, useRef, type Ref } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { DrawerProps, DrawerSide, DrawerSize } from './Drawer.types';\n\nconst horizontalSize: Record<DrawerSize, string> = {\n sm: 'w-[320px]',\n md: 'w-[420px]',\n lg: 'w-[560px]',\n xl: 'w-[720px]',\n};\n\nconst verticalSize: Record<DrawerSize, string> = {\n sm: 'h-[240px]',\n md: 'h-[360px]',\n lg: 'h-[480px]',\n xl: 'h-[600px]',\n};\n\nconst sideClasses: Record<DrawerSide, string> = {\n right: 'inset-y-0 right-0 border-l',\n left: 'inset-y-0 left-0 border-r',\n top: 'inset-x-0 top-0 border-b',\n bottom: 'inset-x-0 bottom-0 border-t',\n};\n\n// No shared ref-merge helper exists in the library yet; this keeps the\n// forwarded consumer ref and the internal focus-management ref pointing at\n// the same panel node without adding a new dependency.\nfunction mergeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void {\n return (node) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === 'function') {\n ref(node);\n } else {\n (ref as { current: T | null }).current = node;\n }\n }\n };\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n open,\n onClose,\n side = 'right',\n size = 'md',\n title,\n description,\n children,\n footer,\n closeOnOverlayClick = true,\n showClose = true,\n className,\n dataTestId,\n },\n ref,\n) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', onKey);\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = prev;\n };\n }, [open, onClose]);\n\n useEffect(() => {\n if (!open) return;\n const prevFocus = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n return () => prevFocus?.focus?.();\n }, [open]);\n\n if (!open) return null;\n\n const isHorizontal = side === 'left' || side === 'right';\n const sizeCls = isHorizontal ? horizontalSize[size] : verticalSize[size];\n\n const content = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'drawer-title' : undefined}\n aria-describedby={description ? 'drawer-desc' : undefined}\n className=\"fixed inset-0 z-50\"\n data-test-id={dataTestId}\n >\n <div\n className=\"absolute inset-0 bg-black/50\"\n onClick={() => closeOnOverlayClick && onClose()}\n aria-hidden\n />\n <div\n ref={mergeRefs(ref, panelRef)}\n tabIndex={-1}\n className={cn(\n 'absolute bg-bg-default shadow-z5 outline-none flex flex-col',\n sideClasses[side],\n isHorizontal ? `${sizeCls} h-full max-w-full` : `${sizeCls} w-full max-h-full`,\n 'border-border-default',\n className,\n )}\n >\n {(title || showClose) && (\n <div className=\"flex items-start justify-between gap-4 px-6 pt-6 pb-4 border-b border-border-default\">\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h2 id=\"drawer-title\" className=\"text-h-xs font-semibold text-fg-default\">\n {title}\n </h2>\n )}\n {description && (\n <p id=\"drawer-desc\" className=\"mt-1 text-p-std text-fg-secondary\">\n {description}\n </p>\n )}\n </div>\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"-mr-2 -mt-2 p-2 rounded-md text-fg-secondary hover:text-fg-default hover:bg-bg-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n )}\n {children && <div className=\"flex-1 overflow-y-auto px-6 py-4\">{children}</div>}\n {footer && (\n <div className=\"flex items-center justify-end gap-2 px-6 py-4 border-t border-border-default bg-bg-container\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n});\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useRef,\n useState,\n type MouseEvent as ReactMouseEvent,\n type Ref,\n} from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type {\n DropdownContentProps,\n DropdownItemProps,\n DropdownLabelProps,\n DropdownMenuProps,\n DropdownSeparatorProps,\n DropdownTriggerProps,\n} from './DropdownMenu.types';\n\ninterface DropdownCtx {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst DropdownContext = createContext<DropdownCtx | null>(null);\n\nfunction useDropdown() {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error('Dropdown parts must be used inside <DropdownMenu>');\n return ctx;\n}\n\n// No shared ref-merge helper exists in the library yet; this keeps the\n// forwarded consumer ref and the internal outside-click ref pointing at the\n// same panel node without adding a new dependency.\nfunction mergeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void {\n return (node) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === 'function') {\n ref(node);\n } else {\n (ref as { current: T | null }).current = node;\n }\n }\n };\n}\n\nexport const DropdownMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(function DropdownMenu(\n { children, defaultOpen = false, open, onOpenChange, className, dataTestId, ...rest },\n ref,\n) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : internalOpen;\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const setOpen = (value: boolean) => {\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n };\n\n useEffect(() => {\n if (!current) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [current]);\n\n return (\n <DropdownContext.Provider value={{ open: current, setOpen, triggerRef }}>\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn('relative inline-block', className)}\n {...rest}\n >\n {children}\n </div>\n </DropdownContext.Provider>\n );\n});\n\nexport function DropdownTrigger({ children }: DropdownTriggerProps) {\n const { open, setOpen, triggerRef } = useDropdown();\n if (!isValidElement(children)) return children;\n const childProps = (children.props ?? {}) as Record<string, unknown>;\n\n return cloneElement(children, {\n ref: triggerRef,\n onClick: (e: ReactMouseEvent) => {\n const orig = childProps.onClick as ((e: ReactMouseEvent) => void) | undefined;\n orig?.(e);\n if (!e.defaultPrevented) setOpen(!open);\n },\n 'aria-haspopup': 'menu',\n 'aria-expanded': open,\n } as Record<string, unknown>);\n}\n\nexport const DropdownContent = forwardRef<HTMLDivElement, DropdownContentProps>(\n function DropdownContent({ children, align = 'start', className, dataTestId, ...rest }, ref) {\n const { open, setOpen, triggerRef } = useDropdown();\n const contentRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n const target = e.target as Node;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, [open, setOpen, triggerRef]);\n\n if (!open) return null;\n\n return (\n <div\n ref={mergeRefs(ref, contentRef)}\n role=\"menu\"\n data-test-id={dataTestId}\n className={cn(\n 'absolute top-full mt-1 min-w-[200px] rounded-lg border border-border-default bg-bg-default shadow-z4 z-50 py-1',\n align === 'end' ? 'right-0' : 'left-0',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport const DropdownItem = forwardRef<HTMLButtonElement, DropdownItemProps>(function DropdownItem(\n { children, onSelect, disabled, icon, shortcut, destructive, checked, className, dataTestId, onClick, ...rest },\n ref,\n) {\n const { setOpen } = useDropdown();\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n disabled={disabled}\n data-test-id={dataTestId}\n onClick={(event) => {\n onClick?.(event);\n onSelect?.();\n setOpen(false);\n }}\n className={cn(\n 'flex w-full items-center gap-2 px-3 py-2 text-left text-p-std text-fg-default',\n 'hover:bg-bg-subtle focus-visible:outline-none focus-visible:bg-bg-subtle',\n disabled && 'opacity-50 cursor-not-allowed hover:bg-transparent',\n destructive && 'text-red-700 hover:bg-red-50',\n className,\n )}\n {...rest}\n >\n {checked !== undefined && (\n <span className=\"w-4 shrink-0\">{checked && <Check className=\"h-4 w-4 text-brand-500\" />}</span>\n )}\n {icon && <span className=\"inline-flex shrink-0 text-fg-secondary\">{icon}</span>}\n <span className=\"flex-1 truncate\">{children}</span>\n {shortcut && <span className=\"text-p-sm text-fg-tertiary shrink-0 tabular-nums\">{shortcut}</span>}\n </button>\n );\n});\n\nexport const DropdownSeparator = forwardRef<HTMLDivElement, DropdownSeparatorProps>(\n function DropdownSeparator({ className, dataTestId, ...rest }, ref) {\n return (\n <div\n ref={ref}\n role=\"separator\"\n data-test-id={dataTestId}\n className={cn('my-1 h-px bg-border-default', className)}\n {...rest}\n />\n );\n },\n);\n\nexport const DropdownLabel = forwardRef<HTMLDivElement, DropdownLabelProps>(function DropdownLabel(\n { children, className, dataTestId, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'px-3 py-1.5 text-p-xs font-semibold uppercase tracking-wider text-fg-tertiary',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\n","import { forwardRef, useEffect, useRef, useState, type Ref } from 'react';\nimport { ChevronDown, X } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { FilterProps, FilterSize } from './Filter.types';\n\nconst sizeStyles: Record<FilterSize, string> = {\n lg: 'h-10 px-3 text-p-std gap-2',\n md: 'h-9 px-2.5 text-p-std gap-1.5',\n sm: 'h-8 px-2 text-p-sm gap-1.5',\n};\n\n// No shared ref-merge helper exists in the library yet; this keeps the\n// forwarded consumer ref and the internal outside-click ref pointing at the\n// same wrapper node without adding a new dependency.\nfunction mergeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void {\n return (node) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === 'function') {\n ref(node);\n } else {\n (ref as { current: T | null }).current = node;\n }\n }\n };\n}\n\nexport const Filter = forwardRef<HTMLDivElement, FilterProps>(function Filter(\n {\n label,\n value,\n active = false,\n size = 'md',\n disabled,\n onClear,\n children,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (!wrapperRef.current?.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, [open]);\n\n const isActive = active || value !== undefined;\n\n return (\n <div\n ref={mergeRefs(ref, wrapperRef)}\n data-test-id={dataTestId}\n className={cn('relative inline-flex', className)}\n {...rest}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(\n 'inline-flex items-center rounded-full border transition-colors outline-none',\n sizeStyles[size],\n isActive\n ? 'bg-brand-20 text-brand-800 border-brand-500'\n : 'bg-bg-default text-fg-default border-border-default',\n !disabled && 'hover:border-border-strong',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-1',\n disabled && 'bg-bg-container text-fg-disabled cursor-not-allowed',\n )}\n >\n <span className=\"font-medium\">{label}</span>\n {value !== undefined && (\n <>\n <span className=\"mx-0.5 text-fg-tertiary\" aria-hidden>\n •\n </span>\n <span className=\"font-semibold truncate max-w-[140px]\">{value}</span>\n </>\n )}\n {isActive && onClear ? (\n <span\n role=\"button\"\n tabIndex={0}\n aria-label=\"Clear filter\"\n onClick={(e) => {\n e.stopPropagation();\n onClear();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n onClear();\n }\n }}\n className=\"inline-flex items-center justify-center rounded-full p-0.5 hover:bg-black/10\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n ) : (\n <ChevronDown\n className={cn('h-4 w-4 text-fg-secondary transition-transform', open && 'rotate-180')}\n aria-hidden\n />\n )}\n </button>\n {open && children && (\n <div className=\"absolute left-0 top-full mt-1 min-w-[220px] rounded-lg border border-border-default bg-bg-default shadow-z4 z-50 p-3\">\n {children}\n </div>\n )}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { IconTileProps, IconTileSize, IconTileTone } from './IconTile.types';\n\n/* Background + icon-color pairs, legible on both light and dark surfaces.\n * Uses semantic bg-*-lighter aliases where available (they flip in dark\n * mode automatically via theme.css's `.dark` block). Purple and pink have\n * no semantic \"lighter\" alias yet, so they fall back to raw scale shades\n * with explicit `dark:` variants, same as the source design system.\n */\nconst toneStyles: Record<IconTileTone, { bg: string; icon: string }> = {\n brand: { bg: 'bg-bg-brand-lighter', icon: 'text-brand-700' },\n info: { bg: 'bg-bg-info-lighter', icon: 'text-blue-700' },\n gray: { bg: 'bg-bg-subtle', icon: 'text-fg-tertiary' },\n purple: { bg: 'bg-purple-50 dark:bg-purple-900/30', icon: 'text-purple-700 dark:text-purple-300' },\n pink: { bg: 'bg-pink-50 dark:bg-pink-900/30', icon: 'text-pink-700 dark:text-pink-300' },\n yellow: { bg: 'bg-bg-warning-lighter', icon: 'text-yellow-800' },\n success: { bg: 'bg-bg-success-lighter', icon: 'text-green-600' },\n warning: { bg: 'bg-bg-warning-lighter', icon: 'text-yellow-800' },\n danger: { bg: 'bg-bg-danger-lighter', icon: 'text-red-700' },\n};\n\n// Dimensions/icon size per step, plus the radius used for the `rounded`\n// shape. The `circle` shape reuses the same box/icon sizing and just swaps\n// in `rounded-full` instead — see the className below.\nconst sizeStyles: Record<IconTileSize, { box: string; icon: string; radius: string }> = {\n sm: { box: 'h-8 w-8', icon: 'h-4 w-4', radius: 'rounded-md' },\n md: { box: 'h-10 w-10', icon: 'h-5 w-5', radius: 'rounded-lg' },\n lg: { box: 'h-12 w-12', icon: 'h-6 w-6', radius: 'rounded-lg' },\n xl: { box: 'h-14 w-14', icon: 'h-7 w-7', radius: 'rounded-xl' },\n};\n\nexport const IconTile = forwardRef<HTMLDivElement, IconTileProps>(function IconTile(\n {\n icon: Icon,\n tone = 'gray',\n size = 'md',\n shape = 'rounded',\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const t = toneStyles[tone];\n const s = sizeStyles[size];\n\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n aria-hidden={rest['aria-label'] ? undefined : true}\n className={cn(\n 'inline-flex items-center justify-center shrink-0',\n s.box,\n shape === 'circle' ? 'rounded-full' : s.radius,\n t.bg,\n className,\n )}\n {...rest}\n >\n <Icon className={cn(s.icon, t.icon)} />\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport { IconTile } from '../IconTile';\nimport type { InfoFieldProps } from './InfoField.types';\n\n/* Labeled value row with a leading tinted icon, uppercase label, value,\n * and an optional action slot on the right. The General Information block\n * on the Profile page uses this primitive; settings / contact / payroll\n * detail pages reach for the same shape. */\n\nexport const InfoField = forwardRef<HTMLDivElement, InfoFieldProps>(function InfoField(\n { icon, iconTone = 'brand', label, value, action, className, dataTestId, ...rest },\n ref,\n) {\n return (\n <div ref={ref} data-test-id={dataTestId} className={cn('flex items-start gap-3', className)} {...rest}>\n <IconTile icon={icon} tone={iconTone} size=\"md\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-p-xs font-medium uppercase tracking-widest text-fg-tertiary\">{label}</div>\n <div className=\"text-p-std font-semibold text-fg-default mt-1 break-words\">{value}</div>\n </div>\n {action && <div className=\"shrink-0 flex items-center\">{action}</div>}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { CheckCircle2, AlertTriangle, XCircle, Info, Sparkles, X, type LucideIcon } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { InlineAlertProps, InlineAlertVariant } from './InlineAlert.types';\n\nconst variantStyles: Record<\n InlineAlertVariant,\n { container: string; iconColor: string; DefaultIcon: LucideIcon }\n> = {\n success: {\n container: 'bg-green-50 border-green-200',\n iconColor: 'text-green-600',\n DefaultIcon: CheckCircle2,\n },\n warning: {\n container: 'bg-yellow-50 border-yellow-200',\n iconColor: 'text-yellow-800',\n DefaultIcon: AlertTriangle,\n },\n danger: {\n container: 'bg-red-50 border-red-200',\n iconColor: 'text-red-700',\n DefaultIcon: XCircle,\n },\n info: {\n container: 'bg-blue-50 border-blue-200',\n iconColor: 'text-blue-700',\n DefaultIcon: Info,\n },\n discovery: {\n container: 'bg-purple-50 border-purple-200',\n iconColor: 'text-purple-700',\n DefaultIcon: Sparkles,\n },\n};\n\nexport const InlineAlert = forwardRef<HTMLDivElement, InlineAlertProps>(function InlineAlert(\n { variant = 'info', title, description, onDismiss, actions, icon, className, dataTestId, ...rest },\n ref,\n) {\n const { container, iconColor, DefaultIcon } = variantStyles[variant];\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-test-id={dataTestId}\n className={cn('flex gap-3 p-4 border rounded-lg', container, className)}\n {...rest}\n >\n <div className={cn('flex-shrink-0 mt-0.5', iconColor)}>\n {icon ?? <DefaultIcon className=\"h-5 w-5\" aria-hidden />}\n </div>\n <div className=\"flex-1 min-w-0\">\n {title && <div className=\"text-p-std font-semibold text-fg-default mb-0.5\">{title}</div>}\n {description && <div className=\"text-p-std text-fg-secondary\">{description}</div>}\n {actions && <div className=\"mt-3 flex flex-wrap items-center gap-2\">{actions}</div>}\n </div>\n {onDismiss && (\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"flex-shrink-0 -mr-1 -mt-1 p-1 rounded-md text-fg-secondary hover:text-fg-default hover:bg-black/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n});\n","import { forwardRef, useId } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { InputProps, InputSize } from './Input.types';\n\nconst sizeStyles: Record<InputSize, string> = {\n lg: 'h-12 text-p-md',\n md: 'h-10 text-p-std',\n sm: 'h-8 text-p-sm',\n};\n\nconst sidePaddingByIcon: Record<InputSize, string> = {\n lg: 'pl-10',\n md: 'pl-9',\n sm: 'pl-8',\n};\n\nconst sidePaddingByRightIcon: Record<InputSize, string> = {\n lg: 'pr-10',\n md: 'pr-9',\n sm: 'pr-8',\n};\n\nconst iconSlotSize: Record<InputSize, string> = {\n lg: 'w-10',\n md: 'w-9',\n sm: 'w-8',\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n label,\n helperText,\n errorText,\n size = 'md',\n leftIcon,\n rightIcon,\n leftAddon,\n rightAddon,\n error = false,\n id,\n disabled,\n className,\n wrapperClassName,\n required,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n const describedBy = errorText ? `${inputId}-error` : helperText ? `${inputId}-help` : undefined;\n const hasError = error || !!errorText;\n\n return (\n <div className={cn('flex flex-col gap-1.5 w-full', wrapperClassName)} data-test-id={dataTestId}>\n {label && (\n <label htmlFor={inputId} className=\"text-p-std font-medium text-fg-default inline-flex items-center gap-1\">\n {label}\n {required && (\n <span className=\"text-red-600\" aria-hidden>\n *\n </span>\n )}\n </label>\n )}\n <div\n className={cn(\n 'flex items-stretch w-full rounded-lg bg-bg-default transition-colors',\n 'border',\n hasError ? 'border-red-600' : 'border-border-default',\n !disabled && !hasError && 'hover:border-border-strong',\n 'focus-within:ring-2 focus-within:ring-offset-0',\n hasError\n ? 'focus-within:ring-red-300 focus-within:border-red-600'\n : 'focus-within:ring-brand-300 focus-within:border-brand-500',\n disabled && 'bg-bg-container border-border-default cursor-not-allowed',\n sizeStyles[size],\n )}\n >\n {leftAddon && (\n <span className=\"inline-flex items-center px-3 text-fg-secondary bg-bg-container border-r border-border-default rounded-l-lg whitespace-nowrap\">\n {leftAddon}\n </span>\n )}\n <div className=\"relative flex-1 min-w-0\">\n {leftIcon && (\n <span\n aria-hidden\n className={cn(\n 'absolute inset-y-0 left-0 flex items-center justify-center text-fg-secondary pointer-events-none',\n iconSlotSize[size],\n )}\n >\n {leftIcon}\n </span>\n )}\n <input\n ref={ref}\n id={inputId}\n disabled={disabled}\n required={required}\n aria-invalid={hasError || undefined}\n aria-describedby={describedBy}\n className={cn(\n 'w-full h-full bg-transparent outline-none',\n 'placeholder:text-fg-tertiary text-fg-default',\n 'disabled:cursor-not-allowed disabled:text-fg-disabled',\n leftIcon ? sidePaddingByIcon[size] : 'pl-3',\n rightIcon || hasError ? sidePaddingByRightIcon[size] : 'pr-3',\n className,\n )}\n {...rest}\n />\n {(rightIcon || hasError) && (\n <span\n aria-hidden\n className={cn(\n 'absolute inset-y-0 right-0 flex items-center justify-center pointer-events-none',\n iconSlotSize[size],\n hasError ? 'text-red-600' : 'text-fg-secondary',\n )}\n >\n {hasError ? <AlertCircle className=\"h-4 w-4\" /> : rightIcon}\n </span>\n )}\n </div>\n {rightAddon && (\n <span className=\"inline-flex items-center px-3 text-fg-secondary bg-bg-container border-l border-border-default rounded-r-lg whitespace-nowrap\">\n {rightAddon}\n </span>\n )}\n </div>\n {errorText ? (\n <p id={`${inputId}-error`} className=\"text-p-sm text-red-700\">\n {errorText}\n </p>\n ) : helperText ? (\n <p id={`${inputId}-help`} className=\"text-p-sm text-fg-secondary\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, useEffect, useRef, type MutableRefObject, type Ref } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { ModalProps, ModalSize } from './Modal.types';\n\nconst sizeStyles: Record<ModalSize, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-2xl',\n '2xl': 'max-w-4xl',\n};\n\n// No shared ref-merging util exists in `src/lib` yet — the panel needs its\n// own ref for focus management (see below) as well as whatever ref the\n// consumer forwards in, so the two are combined locally here.\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>) {\n return (node: T | null) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\n {\n open,\n onClose,\n title,\n description,\n children,\n footer,\n size = 'md',\n closeOnOverlayClick = true,\n showClose = true,\n className,\n dataTestId,\n },\n ref,\n) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = prevOverflow;\n };\n }, [open, onClose]);\n\n useEffect(() => {\n if (!open) return;\n const prevFocus = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n return () => prevFocus?.focus?.();\n }, [open]);\n\n if (!open) return null;\n\n const content = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n aria-describedby={description ? 'modal-desc' : undefined}\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n >\n <div\n className=\"absolute inset-0 bg-black/50\"\n onClick={() => closeOnOverlayClick && onClose()}\n aria-hidden\n />\n <div\n ref={mergeRefs(panelRef, ref)}\n tabIndex={-1}\n data-test-id={dataTestId}\n className={cn(\n 'relative w-full bg-bg-default rounded-xl shadow-z5 outline-none flex flex-col max-h-[90vh]',\n sizeStyles[size],\n className,\n )}\n >\n {(title || showClose) && (\n <div className=\"flex items-start justify-between gap-4 px-6 pt-6 pb-4\">\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h2 id=\"modal-title\" className=\"text-h-xs font-semibold text-fg-default\">\n {title}\n </h2>\n )}\n {description && (\n <p id=\"modal-desc\" className=\"mt-1 text-p-std text-fg-secondary\">\n {description}\n </p>\n )}\n </div>\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"-mr-2 -mt-2 p-2 rounded-md text-fg-secondary hover:text-fg-default hover:bg-bg-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n )}\n {children && <div className=\"px-6 pb-6 overflow-y-auto\">{children}</div>}\n {footer && (\n <div className=\"flex items-center justify-end gap-2 px-6 py-4 border-t border-border-default bg-bg-container rounded-b-xl\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n});\n","import { forwardRef, useEffect, useId, useMemo, useRef, useState, type KeyboardEvent, type MutableRefObject } from 'react';\nimport { X, Search, Users } from 'lucide-react';\nimport { Avatar } from '../Avatar';\nimport { cn } from '../../lib/cn';\nimport type { MultiSelectOption, MultiSelectProps, MultiSelectSize } from './MultiSelect.types';\n\n/* =============================================================================\n * MultiSelect — a chip/token multi-select combobox.\n *\n * The multi-value cousin of `Select`: chosen options render as removable chips\n * inline with a type-to-filter input; a dropdown lists the remaining options.\n * Options can carry an avatar, a description line and a chip badge, so it covers\n * both a plain tag input and a rich people picker with one API.\n *\n * Fully controlled (`value` + `onChange`). Keyboard: up/down move the active\n * option, Enter selects it, Backspace on an empty field removes the last\n * removable chip, Esc closes. Data-agnostic — feed it any options.\n * =========================================================================== */\n\nconst SIZES: Record<\n MultiSelectSize,\n { box: string; chip: string; chipText: string; input: string; avatar: 'xs' | 'sm' }\n> = {\n sm: { box: 'px-1.5 py-1.5 gap-1', chip: 'h-6 pl-0.5 pr-1.5', chipText: 'text-p-xs', input: 'h-6 text-p-sm min-w-[100px]', avatar: 'xs' },\n md: { box: 'px-2 py-2 gap-1.5', chip: 'h-7 pl-1 pr-2', chipText: 'text-p-sm', input: 'h-7 text-p-std min-w-[120px]', avatar: 'xs' },\n lg: { box: 'px-2.5 py-2.5 gap-2', chip: 'h-8 pl-1 pr-2.5', chipText: 'text-p-std', input: 'h-8 text-p-md min-w-[140px]', avatar: 'sm' },\n};\n\nexport const MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(function MultiSelect(\n {\n options,\n value,\n onChange,\n size = 'md',\n placeholder = 'Select…',\n addMorePlaceholder = 'Add another…',\n disabled = false,\n error = false,\n label,\n helperText,\n errorText,\n required = false,\n lockedValues = [],\n max,\n searchable = true,\n suggestionsLabel = 'Suggestions',\n emptyText = 'No matches. Try a different search.',\n id,\n className,\n wrapperClassName,\n dataTestId,\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n const listId = `${inputId}-listbox`;\n const hasError = error || !!errorText;\n\n const [query, setQuery] = useState('');\n const [open, setOpen] = useState(false);\n const [active, setActive] = useState(0);\n const wrapRef = useRef<HTMLDivElement>(null);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const setInputRef = (node: HTMLInputElement | null) => {\n innerInputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options]);\n const selected = useMemo(\n () => value.map((v) => byValue.get(v)).filter((o): o is MultiSelectOption => !!o),\n [value, byValue],\n );\n\n const matches = useMemo(() => {\n const q = query.trim().toLowerCase();\n return options.filter(\n (o) =>\n !value.includes(o.value) &&\n (q === '' ||\n o.label.toLowerCase().includes(q) ||\n (o.description ?? '').toLowerCase().includes(q)),\n );\n }, [options, value, query]);\n\n const reached = max !== undefined && value.length >= max;\n\n /* Close on outside click + Esc. */\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (wrapRef.current && !wrapRef.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onDown);\n return () => document.removeEventListener('mousedown', onDown);\n }, [open]);\n\n /* Keep the active index in range as the list changes. */\n useEffect(() => {\n setActive((a) => Math.min(a, Math.max(0, matches.length - 1)));\n }, [matches.length]);\n\n const add = (v: string) => {\n const opt = byValue.get(v);\n if (disabled || reached || !opt || opt.disabled) return;\n onChange([...value, v]);\n setQuery('');\n setActive(0);\n innerInputRef.current?.focus();\n };\n\n const remove = (v: string) => {\n if (disabled || lockedValues.includes(v)) return;\n onChange(value.filter((x) => x !== v));\n };\n\n const moveActive = (dir: 1 | -1) => {\n if (!matches.length) return;\n let next = active;\n for (let i = 0; i < matches.length; i++) {\n next = (next + dir + matches.length) % matches.length;\n if (!matches[next]?.disabled) break;\n }\n setActive(next);\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!open) setOpen(true);\n else moveActive(1);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n moveActive(-1);\n } else if (e.key === 'Enter') {\n if (open && matches[active] && !matches[active].disabled) {\n e.preventDefault();\n add(matches[active].value);\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n } else if (e.key === 'Backspace' && query === '' && selected.length > 0) {\n const last = [...selected].reverse().find((o) => !lockedValues.includes(o.value));\n if (last) remove(last.value);\n }\n };\n\n const describedBy = errorText\n ? `${inputId}-error`\n : helperText\n ? `${inputId}-help`\n : undefined;\n\n return (\n <div data-test-id={dataTestId} className={cn('flex flex-col gap-1.5 w-full', wrapperClassName)}>\n {label && (\n <label htmlFor={inputId} className=\"text-p-std font-medium text-fg-default inline-flex items-center gap-1\">\n {label}\n {required && <span className=\"text-red-600\" aria-hidden>*</span>}\n </label>\n )}\n\n <div ref={wrapRef} className=\"relative\">\n {/* Chips + input row */}\n <div\n className={cn(\n 'flex flex-wrap items-center rounded-lg border bg-bg-default transition-colors',\n SIZES[size].box,\n disabled\n ? 'opacity-60 cursor-not-allowed border-border-default'\n : hasError\n ? 'border-red-500 focus-within:ring-2 focus-within:ring-red-300 focus-within:ring-offset-1 cursor-text'\n : 'border-border-default hover:border-border-strong focus-within:border-fg-tertiary focus-within:ring-2 focus-within:ring-brand-300 focus-within:ring-offset-1 cursor-text',\n className,\n )}\n onClick={() => !disabled && innerInputRef.current?.focus()}\n >\n {selected.map((o) => {\n const locked = lockedValues.includes(o.value);\n return (\n <span\n key={o.value}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full text-fg-default bg-bg-subtle',\n SIZES[size].chip,\n SIZES[size].chipText,\n )}\n title={o.description}\n >\n {o.avatarSrc && <Avatar src={o.avatarSrc} name={o.label} size={SIZES[size].avatar} />}\n <span className=\"font-medium\">{o.label}</span>\n {o.badge && (\n <span className=\"text-label-xxs uppercase tracking-wider opacity-70\">{o.badge}</span>\n )}\n {!locked && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n remove(o.value);\n }}\n aria-label={`Remove ${o.label}`}\n className=\"-mr-0.5 ml-0.5 text-fg-tertiary hover:text-fg-default p-0.5 rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </span>\n );\n })}\n\n <input\n ref={setInputRef}\n id={inputId}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={open && matches[active] ? `${listId}-opt-${active}` : undefined}\n aria-invalid={hasError || undefined}\n aria-describedby={describedBy}\n value={query}\n readOnly={!searchable}\n disabled={disabled || reached}\n onChange={(e) => {\n setQuery(e.target.value);\n setOpen(true);\n }}\n onFocus={() => setOpen(true)}\n onKeyDown={onKeyDown}\n placeholder={selected.length === 0 ? placeholder : reached ? `Limit ${max} reached` : addMorePlaceholder}\n className={cn(\n 'flex-1 bg-transparent outline-none text-fg-default placeholder:text-fg-tertiary disabled:cursor-not-allowed',\n !searchable && 'cursor-pointer',\n SIZES[size].input,\n )}\n />\n </div>\n\n {/* Dropdown */}\n {open && !disabled && !reached && (\n <div className=\"absolute top-full left-0 right-0 mt-1 z-20 max-h-80 overflow-y-auto rounded-lg border border-border-default bg-bg-default shadow-z4\">\n <div className=\"px-3 py-2 border-b border-border-subtle flex items-center gap-2 text-p-sm text-fg-tertiary\">\n <Search className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{query ? `Matches for \"${query}\"` : suggestionsLabel}</span>\n </div>\n {matches.length === 0 ? (\n <div className=\"px-3 py-6 text-center\">\n <Users className=\"w-5 h-5 mx-auto text-fg-tertiary mb-2\" />\n <span className=\"text-p-sm text-fg-secondary\">{emptyText}</span>\n </div>\n ) : (\n <ul role=\"listbox\" id={listId} className=\"py-1\">\n {matches.map((o, i) => (\n <li key={o.value} role=\"option\" id={`${listId}-opt-${i}`} aria-selected={i === active} aria-disabled={o.disabled || undefined}>\n <button\n type=\"button\"\n disabled={o.disabled}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => {\n e.preventDefault();\n add(o.value);\n }}\n className={cn(\n 'w-full px-3 py-2 flex items-center gap-3 text-left transition',\n o.disabled\n ? 'opacity-50 cursor-not-allowed'\n : i === active\n ? 'bg-bg-subtle'\n : 'hover:bg-bg-subtle',\n )}\n >\n {o.avatarSrc && <Avatar src={o.avatarSrc} name={o.label} size=\"sm\" />}\n <span className=\"flex-1 min-w-0\">\n <span className=\"block text-p-std font-medium text-fg-default truncate\">{o.label}</span>\n {o.description && (\n <span className=\"block text-p-sm text-fg-secondary truncate\">{o.description}</span>\n )}\n </span>\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n\n {errorText ? (\n <p id={`${inputId}-error`} className=\"text-p-sm text-red-700\">\n {errorText}\n </p>\n ) : helperText ? (\n <p id={`${inputId}-help`} className=\"text-p-sm text-fg-secondary\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type {\n NotificationBadgeProps,\n NotificationBadgeSize,\n NotificationBadgeVariant,\n} from './NotificationBadge.types';\n\nconst variantStyles: Record<NotificationBadgeVariant, string> = {\n brand: 'bg-brand-500 text-white',\n danger: 'bg-red-600 text-white',\n success: 'bg-green-600 text-white',\n warning: 'bg-yellow-600 text-gray-900 dark:text-gray-900',\n info: 'bg-blue-600 text-white',\n};\n\nconst countSize: Record<NotificationBadgeSize, string> = {\n lg: 'min-w-[18px] h-[18px] px-1 text-[11px]',\n sm: 'min-w-[14px] h-[14px] px-0.5 text-[10px]',\n};\n\nconst dotSize: Record<NotificationBadgeSize, string> = {\n lg: 'h-2.5 w-2.5',\n sm: 'h-1.5 w-1.5',\n};\n\nfunction formatCount(count: number, max: number): string {\n if (count > max) return `${max}+`;\n if (count >= 1000) return `${(count / 1000).toFixed(0)}K`;\n return String(count);\n}\n\n// The badge <span> itself carries the ref/data-test-id/className/rest props —\n// it's the component's real root, whether rendered standalone or overlaid on\n// `children`. The wrapper <span> used in the overlay case is internal\n// positioning plumbing only.\nexport const NotificationBadge = forwardRef<HTMLSpanElement, NotificationBadgeProps>(\n function NotificationBadge(\n {\n count = 0,\n max = 99,\n kind = 'count',\n size = 'lg',\n variant = 'danger',\n children,\n showZero = false,\n className,\n dataTestId,\n ...rest\n },\n ref,\n ) {\n const show = kind === 'dot' ? true : count > 0 || showZero;\n const hasChild = children !== undefined && children !== null && children !== false;\n\n const badge = !show ? null : (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-center justify-center rounded-full font-semibold ring-2 ring-white',\n variantStyles[variant],\n kind === 'count' ? countSize[size] : dotSize[size],\n hasChild ? 'absolute -top-1 -right-1' : 'static',\n className,\n )}\n {...rest}\n >\n {kind === 'count' && formatCount(count, max)}\n </span>\n );\n\n if (!hasChild) return badge;\n\n return (\n <span className=\"relative inline-flex\">\n {children}\n {badge}\n </span>\n );\n },\n);\n","import { forwardRef } from 'react';\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { PaginationProps } from './Pagination.types';\n\ntype Item = number | 'ellipsis-left' | 'ellipsis-right';\n\nfunction buildRange(\n page: number,\n pageCount: number,\n siblingCount: number,\n boundaryCount: number,\n): Item[] {\n const totalNumbers = siblingCount * 2 + 3 + boundaryCount * 2;\n if (pageCount <= totalNumbers) {\n return Array.from({ length: pageCount }, (_, i) => i + 1);\n }\n\n const leftSibling = Math.max(page - siblingCount, boundaryCount + 2);\n const rightSibling = Math.min(page + siblingCount, pageCount - boundaryCount - 1);\n\n const showLeftEllipsis = leftSibling > boundaryCount + 2;\n const showRightEllipsis = rightSibling < pageCount - boundaryCount - 1;\n\n const head = Array.from({ length: boundaryCount }, (_, i) => i + 1);\n const tail = Array.from({ length: boundaryCount }, (_, i) => pageCount - boundaryCount + 1 + i);\n\n const middle: Item[] = [];\n if (!showLeftEllipsis) {\n for (let i = boundaryCount + 1; i <= rightSibling; i++) middle.push(i);\n } else {\n middle.push('ellipsis-left');\n for (let i = leftSibling; i <= rightSibling; i++) middle.push(i);\n }\n if (showRightEllipsis) middle.push('ellipsis-right');\n else {\n for (let i = rightSibling + 1; i <= pageCount - boundaryCount; i++) middle.push(i);\n }\n\n return [...head, ...middle, ...tail];\n}\n\nconst itemBase =\n 'inline-flex items-center justify-center min-w-9 h-9 px-2 text-p-std rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300';\n\nconst navButtonStyles =\n 'text-fg-default hover:bg-bg-subtle disabled:text-fg-disabled disabled:hover:bg-transparent disabled:cursor-not-allowed';\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n {\n page,\n pageCount,\n onPageChange,\n siblingCount = 1,\n boundaryCount = 1,\n className,\n dataTestId,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n) {\n const items = buildRange(page, pageCount, siblingCount, boundaryCount);\n const prevDisabled = page <= 1;\n const nextDisabled = page >= pageCount;\n\n return (\n <nav\n ref={ref}\n aria-label={ariaLabel ?? 'Pagination'}\n data-test-id={dataTestId}\n className={cn('inline-flex items-center gap-1', className)}\n {...rest}\n >\n <button\n type=\"button\"\n onClick={() => !prevDisabled && onPageChange(page - 1)}\n disabled={prevDisabled}\n aria-label=\"Previous page\"\n className={cn(itemBase, navButtonStyles)}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n\n {items.map((item, i) => {\n if (item === 'ellipsis-left' || item === 'ellipsis-right') {\n return (\n <span\n key={`${item}-${i}`}\n aria-hidden\n className=\"inline-flex items-center justify-center w-9 h-9 text-fg-tertiary\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </span>\n );\n }\n const isActive = item === page;\n return (\n <button\n key={item}\n type=\"button\"\n onClick={() => onPageChange(item)}\n aria-current={isActive ? 'page' : undefined}\n className={cn(\n itemBase,\n isActive\n ? 'bg-brand-500 text-white font-semibold hover:bg-brand-600'\n : 'text-fg-default hover:bg-bg-subtle',\n )}\n >\n {item}\n </button>\n );\n })}\n\n <button\n type=\"button\"\n onClick={() => !nextDisabled && onPageChange(page + 1)}\n disabled={nextDisabled}\n aria-label=\"Next page\"\n className={cn(itemBase, navButtonStyles)}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </nav>\n );\n});\n","import { forwardRef, type Ref } from 'react';\nimport { Avatar, type AvatarSize } from '../Avatar';\nimport { cn } from '../../lib/cn';\nimport type { PersonCardProps, PersonCardSize, PersonCardVariant } from './PersonCard.types';\n\n/* Compact person tile — avatar + name + role inside a rounded card.\n * Used as nodes in the org chart on Profile, but the shape (small chip\n * with face + identity) shows up everywhere people are listed: directory\n * search, mention picker, team callouts. Centralising avoids the same\n * markup being rewritten in each context. */\n\nconst sizeStyles: Record<PersonCardSize, { padding: string; avatar: AvatarSize; gap: string }> = {\n sm: { padding: 'px-3 py-2', avatar: 'sm', gap: 'gap-2.5' },\n md: { padding: 'px-3.5 py-2.5', avatar: 'md', gap: 'gap-3' },\n};\n\nconst variantStyles: Record<PersonCardVariant, string> = {\n default: 'border-border-default bg-bg-default hover:border-fg-tertiary/40',\n highlight: 'border-brand-500 bg-brand-200/15 dark:bg-brand-500/10 ring-1 ring-brand-500/40',\n warning: 'border-yellow-500 bg-yellow-50 dark:bg-yellow-900/20',\n};\n\nexport const PersonCard = forwardRef<HTMLDivElement, PersonCardProps>(function PersonCard(\n {\n name,\n role,\n avatar,\n variant = 'default',\n size = 'md',\n badge,\n onClick,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const s = sizeStyles[size];\n const v = variantStyles[variant];\n\n const inner = (\n <>\n <Avatar src={avatar} name={name} size={s.avatar} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-p-std font-semibold text-fg-default truncate leading-tight\">{name}</div>\n {role && (\n <div className=\"text-p-sm text-fg-secondary truncate mt-0.5 leading-tight\">{role}</div>\n )}\n </div>\n {badge && <span className=\"shrink-0 self-center\">{badge}</span>}\n </>\n );\n\n const base = cn(\n 'relative inline-flex items-center rounded-xl border transition',\n s.padding,\n s.gap,\n v,\n onClick && 'cursor-pointer hover:shadow-z1',\n className,\n );\n\n if (onClick) {\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={onClick}\n data-test-id={dataTestId}\n className={cn(base, 'text-left')}\n {...(rest as object)}\n >\n {inner}\n </button>\n );\n }\n return (\n <div ref={ref} data-test-id={dataTestId} className={base} {...rest}>\n {inner}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { ProgressProps, ProgressSize } from './Progress.types';\n\nconst circleDimension: Record<ProgressSize, number> = {\n sm: 29,\n lg: 45,\n};\n\nconst circleStrokeWidth: Record<ProgressSize, number> = {\n sm: 2,\n lg: 4,\n};\n\nconst linearTrackHeight: Record<ProgressSize, string> = {\n sm: 'h-1',\n lg: 'h-2',\n};\n\nconst labelTextSize: Record<ProgressSize, string> = {\n sm: 'text-p-xs',\n lg: 'text-p-sm',\n};\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n variant = 'linear',\n size = 'lg',\n percent = 0,\n stepCount,\n currentStep,\n hideLabel = false,\n dimension,\n loop = false,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const rawPercent = stepCount && currentStep ? (currentStep / stepCount) * 100 : percent;\n const clampedPercent = Math.min(100, Math.max(0, rawPercent));\n const label = stepCount ? `${currentStep}/${stepCount}` : `${Math.round(clampedPercent)}%`;\n\n if (variant === 'circular') {\n const dim = dimension ?? circleDimension[size];\n const r = dim - 5;\n const circumference = 2 * r * Math.PI;\n const strokeWidth = circleStrokeWidth[size];\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={loop ? undefined : clampedPercent}\n aria-valuetext={loop ? undefined : label}\n data-test-id={dataTestId}\n className={cn('relative inline-flex items-center justify-center', className)}\n style={{ width: dim * 2, height: dim * 2 }}\n {...rest}\n >\n <svg\n width={dim * 2}\n height={dim * 2}\n viewBox={`0 0 ${dim * 2} ${dim * 2}`}\n className={cn('-rotate-90', loop && 'animate-spin')}\n >\n <circle cx={dim} cy={dim} r={r} strokeWidth={strokeWidth} className=\"fill-none stroke-bg-subtle\" />\n <circle\n cx={dim}\n cy={dim}\n r={r}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n className=\"fill-none stroke-brand-500 transition-[stroke-dashoffset] duration-300 ease-linear\"\n style={{\n strokeDasharray: `${circumference}px`,\n strokeDashoffset: loop\n ? `${circumference * 0.75}px`\n : `${circumference - (circumference * clampedPercent) / 100}px`,\n }}\n />\n </svg>\n {!hideLabel && !loop && (\n <span\n className={cn('absolute text-fg-secondary', labelTextSize[size])}\n data-test-id={dataTestId ? `${dataTestId}-text` : undefined}\n >\n {label}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={clampedPercent}\n aria-valuetext={label}\n data-test-id={dataTestId}\n className={cn('flex w-full items-center gap-2', className)}\n {...rest}\n >\n <div className={cn('w-full overflow-hidden rounded-full bg-bg-subtle', linearTrackHeight[size])}>\n <div\n className=\"h-full rounded-full bg-brand-500 transition-all duration-300 ease-linear\"\n style={{ width: `${clampedPercent}%` }}\n />\n </div>\n {!hideLabel && (\n <span\n className={cn('shrink-0 text-fg-secondary', labelTextSize[size])}\n data-test-id={dataTestId ? `${dataTestId}-text` : undefined}\n >\n {label}\n </span>\n )}\n </div>\n );\n});\n","import { createContext, forwardRef, useContext, useId, type ChangeEvent } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { RadioGroupProps, RadioProps, RadioSize } from './Radio.types';\n\ninterface RadioGroupContextValue {\n name: string;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n size: RadioSize;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(function RadioGroup(\n {\n name,\n value,\n defaultValue,\n onChange,\n disabled,\n size = 'md',\n orientation = 'vertical',\n children,\n className,\n dataTestId,\n },\n ref,\n) {\n const reactName = useId();\n const groupName = name ?? reactName;\n\n return (\n <RadioGroupContext.Provider\n value={{ name: groupName, value, defaultValue, onChange, disabled, size }}\n >\n <div\n ref={ref}\n role=\"radiogroup\"\n data-test-id={dataTestId}\n className={cn(\n 'flex gap-3',\n orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap items-center gap-4',\n className,\n )}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n});\n\nconst outerSize: Record<RadioSize, string> = {\n md: 'h-5 w-5',\n sm: 'h-4 w-4',\n};\n\nconst innerSize: Record<RadioSize, string> = {\n md: 'h-2 w-2',\n sm: 'h-1.5 w-1.5',\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n value,\n size,\n label,\n description,\n error = false,\n id,\n disabled,\n checked,\n defaultChecked,\n onChange,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const group = useContext(RadioGroupContext);\n const reactId = useId();\n const inputId = id ?? reactId;\n const effectiveSize = size ?? group?.size ?? 'md';\n const effectiveDisabled = disabled ?? group?.disabled;\n\n const inGroup = group !== null;\n const groupChecked = inGroup && group.value !== undefined ? group.value === value : undefined;\n const groupDefaultChecked =\n inGroup && group.defaultValue !== undefined ? group.defaultValue === value : undefined;\n\n const isChecked = inGroup ? groupChecked : checked;\n const isDefaultChecked = inGroup ? groupDefaultChecked : defaultChecked;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n group?.onChange?.(value);\n onChange?.(e);\n };\n\n return (\n <label\n htmlFor={inputId}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-start gap-2.5',\n effectiveDisabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n className,\n )}\n >\n <span className=\"relative inline-flex shrink-0 items-center justify-center mt-0.5\">\n <input\n ref={ref}\n id={inputId}\n type=\"radio\"\n name={group?.name}\n value={value}\n checked={isChecked}\n defaultChecked={isDefaultChecked}\n disabled={effectiveDisabled}\n onChange={handleChange}\n className=\"peer sr-only\"\n aria-invalid={error || undefined}\n {...rest}\n />\n <span\n className={cn(\n 'flex items-center justify-center rounded-full border bg-bg-default transition-colors',\n outerSize[effectiveSize],\n error ? 'border-red-600' : 'border-border-strong',\n !effectiveDisabled && !error && 'peer-hover:border-fg-tertiary',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-brand-300 peer-focus-visible:ring-offset-1',\n 'peer-checked:border-brand-500',\n effectiveDisabled && '!bg-bg-subtle !border-border-default',\n '[&>span]:opacity-0 peer-checked:[&>span]:opacity-100',\n )}\n >\n <span\n className={cn(\n 'rounded-full bg-brand-500 transition-opacity',\n innerSize[effectiveSize],\n effectiveDisabled && '!bg-fg-disabled',\n )}\n />\n </span>\n </span>\n {(label || description) && (\n <span className=\"flex flex-col gap-0.5\">\n {label && (\n <span className=\"text-p-std font-medium text-fg-default leading-tight\">{label}</span>\n )}\n {description && (\n <span className=\"text-p-sm text-fg-secondary leading-snug\">{description}</span>\n )}\n </span>\n )}\n </label>\n );\n});\n","import { forwardRef, useEffect, useId, useRef, useState, type KeyboardEvent } from 'react';\nimport { ChevronDown, Check } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { SelectProps, SelectSize } from './Select.types';\n\nconst sizeStyles: Record<SelectSize, string> = {\n lg: 'h-12 text-p-md px-3.5',\n md: 'h-10 text-p-std px-3',\n sm: 'h-8 text-p-sm px-2.5',\n};\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n {\n options,\n value,\n defaultValue,\n onChange,\n placeholder = 'Select…',\n label,\n helperText,\n errorText,\n error = false,\n size = 'md',\n disabled,\n id,\n className,\n wrapperClassName,\n dataTestId,\n },\n ref,\n) {\n const reactId = useId();\n const triggerId = id ?? reactId;\n const [open, setOpen] = useState(false);\n const [internal, setInternal] = useState<string | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const selected = isControlled ? value : internal;\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const hasError = error || !!errorText;\n\n const selectedOption = options.find((o) => o.value === selected);\n\n const pick = (val: string) => {\n if (!isControlled) setInternal(val);\n onChange?.(val);\n setOpen(false);\n };\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onDoc);\n return () => document.removeEventListener('mousedown', onDoc);\n }, [open]);\n\n useEffect(() => {\n if (open) {\n const idx = options.findIndex((o) => o.value === selected);\n setActiveIndex(idx >= 0 ? idx : 0);\n } else {\n setActiveIndex(-1);\n }\n }, [open, selected, options]);\n\n const onKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!open) {\n setOpen(true);\n return;\n }\n if (e.key === 'Enter' || e.key === ' ') {\n const opt = options[activeIndex];\n if (opt && !opt.disabled) pick(opt.value);\n return;\n }\n const dir = e.key === 'ArrowDown' ? 1 : -1;\n let next = activeIndex;\n for (let i = 0; i < options.length; i++) {\n next = (next + dir + options.length) % options.length;\n if (!options[next]?.disabled) break;\n }\n setActiveIndex(next);\n } else if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n return (\n <div\n ref={containerRef}\n data-test-id={dataTestId}\n className={cn('flex flex-col gap-1.5 w-full relative', wrapperClassName)}\n >\n {label && (\n <label htmlFor={triggerId} className=\"text-p-std font-medium text-fg-default inline-flex\">\n {label}\n </label>\n )}\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={onKeyDown}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-invalid={hasError || undefined}\n className={cn(\n 'inline-flex items-center justify-between w-full rounded-lg border bg-bg-default transition-colors outline-none',\n 'text-left',\n hasError ? 'border-red-600' : 'border-border-default',\n !disabled && !hasError && 'hover:border-border-strong',\n 'focus-visible:ring-2',\n hasError\n ? 'focus-visible:ring-red-300 focus-visible:border-red-600'\n : 'focus-visible:ring-brand-300 focus-visible:border-brand-500',\n disabled && 'bg-bg-container border-border-default cursor-not-allowed text-fg-disabled',\n sizeStyles[size],\n className,\n )}\n >\n <span className={cn('truncate', !selectedOption && 'text-fg-tertiary')}>\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <ChevronDown\n className={cn('h-4 w-4 ml-2 shrink-0 text-fg-secondary transition-transform', open && 'rotate-180')}\n aria-hidden\n />\n </button>\n {open && (\n <ul\n role=\"listbox\"\n className=\"absolute left-0 right-0 top-full mt-1 max-h-60 overflow-y-auto rounded-lg border border-border-default bg-bg-default shadow-z4 z-50 py-1\"\n >\n {options.map((opt, i) => {\n const isSel = opt.value === selected;\n const isActive = i === activeIndex;\n return (\n <li\n key={opt.value}\n role=\"option\"\n aria-selected={isSel}\n aria-disabled={opt.disabled || undefined}\n onMouseEnter={() => !opt.disabled && setActiveIndex(i)}\n onClick={() => !opt.disabled && pick(opt.value)}\n className={cn(\n 'flex items-center justify-between gap-2 px-3 py-2 text-p-std cursor-pointer select-none',\n opt.disabled && 'opacity-50 cursor-not-allowed',\n isActive && !opt.disabled && 'bg-bg-subtle',\n isSel && 'font-medium',\n )}\n >\n <span className=\"truncate\">{opt.label}</span>\n {isSel && <Check className=\"h-4 w-4 text-brand-500 shrink-0\" />}\n </li>\n );\n })}\n </ul>\n )}\n {errorText ? (\n <p className=\"text-p-sm text-red-700\">{errorText}</p>\n ) : helperText ? (\n <p className=\"text-p-sm text-fg-secondary\">{helperText}</p>\n ) : null}\n </div>\n );\n});\n","import { createContext, forwardRef, useContext, useState, type Ref } from 'react';\nimport { ChevronRight, Menu as MenuIcon } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { SidebarItemProps, SidebarProps } from './Sidebar.types';\n\ninterface SidebarContextValue {\n collapsed: boolean;\n toggle: () => void;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nfunction useSidebar(): SidebarContextValue {\n return useContext(SidebarContext) ?? { collapsed: false, toggle: () => {} };\n}\n\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(function Sidebar(\n {\n defaultCollapsed = false,\n collapsed,\n onCollapsedChange,\n children,\n className,\n logo,\n title,\n subtitle,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState(defaultCollapsed);\n const isControlled = collapsed !== undefined;\n const current = isControlled ? collapsed : internal;\n\n const toggle = () => {\n const next = !current;\n if (!isControlled) setInternal(next);\n onCollapsedChange?.(next);\n };\n\n return (\n <SidebarContext.Provider value={{ collapsed: current, toggle }}>\n <aside\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'flex flex-col bg-bg-default border-r border-border-default transition-all duration-200',\n current ? 'w-16' : 'w-64',\n className,\n )}\n {...rest}\n >\n <div\n className={cn(\n 'flex items-center gap-3 px-4 py-4 border-b border-border-default',\n current && 'justify-center px-2',\n )}\n >\n {logo && <div className=\"shrink-0\">{logo}</div>}\n {!current && (\n <div className=\"flex flex-col min-w-0\">\n {title && (\n <div className=\"text-p-md font-semibold text-fg-default truncate\">{title}</div>\n )}\n {subtitle && <div className=\"text-p-sm text-fg-secondary truncate\">{subtitle}</div>}\n </div>\n )}\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={current ? 'Expand sidebar' : 'Collapse sidebar'}\n className={cn(\n 'ml-auto inline-flex items-center justify-center h-8 w-8 rounded-md text-fg-secondary hover:bg-bg-subtle hover:text-fg-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300',\n current && 'ml-0',\n )}\n >\n <MenuIcon className=\"h-4 w-4\" />\n </button>\n </div>\n <nav className=\"flex-1 overflow-y-auto p-2 flex flex-col gap-0.5\">{children}</nav>\n </aside>\n </SidebarContext.Provider>\n );\n});\n\nexport const SidebarItem = forwardRef<HTMLAnchorElement | HTMLButtonElement, SidebarItemProps>(\n function SidebarItem(\n { icon, label, active, badge, children, onClick, href, className, dataTestId, ...rest },\n ref,\n ) {\n const { collapsed } = useSidebar();\n const [open, setOpen] = useState(active ?? false);\n const hasChildren = !!children;\n\n const content = (\n <>\n {icon && <span className=\"inline-flex shrink-0\">{icon}</span>}\n {!collapsed && (\n <>\n <span className=\"flex-1 truncate text-left\">{label}</span>\n {badge && <span className=\"shrink-0\">{badge}</span>}\n {hasChildren && (\n <ChevronRight\n className={cn(\n 'h-4 w-4 shrink-0 text-fg-tertiary transition-transform',\n open && 'rotate-90',\n )}\n aria-hidden\n />\n )}\n </>\n )}\n </>\n );\n\n const handleClick = () => {\n if (hasChildren) setOpen((o) => !o);\n onClick?.();\n };\n\n const itemCls = cn(\n 'group relative flex items-center gap-3 rounded-md px-3 py-2 text-p-std font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300',\n collapsed && 'px-2 justify-center',\n active\n ? 'bg-brand-20 text-brand-800 before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:h-5 before:w-0.5 before:rounded-r before:bg-brand-500'\n : 'text-fg-default hover:bg-bg-container',\n className,\n );\n\n return (\n <>\n {href ? (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n onClick={handleClick}\n data-test-id={dataTestId}\n className={itemCls}\n {...rest}\n >\n {content}\n </a>\n ) : (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={handleClick}\n data-test-id={dataTestId}\n className={cn(itemCls, 'w-full')}\n {...rest}\n >\n {content}\n </button>\n )}\n {hasChildren && open && !collapsed && (\n <div className=\"flex flex-col gap-0.5 pl-8\">{children}</div>\n )}\n </>\n );\n },\n);\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { SkeletonAnimation, SkeletonProps, SkeletonVariant } from './Skeleton.types';\n\nconst variantStyles: Record<SkeletonVariant, string> = {\n text: 'h-[1em] mb-[0.4em] origin-[0%_55%] scale-y-[0.6] rounded-sm',\n circular: 'size-10 rounded-full',\n rectangular: 'h-4 w-full',\n rounded: 'h-4 w-full rounded-md',\n};\n\nconst animationStyles: Record<SkeletonAnimation, string> = {\n pulse: 'animate-pulse',\n wave: [\n 'relative overflow-hidden',\n \"after:absolute after:inset-0 after:content-[''] after:-translate-x-full\",\n 'after:bg-gradient-to-r after:from-transparent after:via-white/60 after:to-transparent',\n 'after:animate-skeleton-wave dark:after:via-white/10',\n ].join(' '),\n none: '',\n};\n\nfunction toCssSize(value?: number | string): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport const Skeleton = forwardRef<HTMLSpanElement, SkeletonProps>(function Skeleton(\n {\n variant = 'text',\n animation = 'pulse',\n width,\n height,\n count = 1,\n children,\n style,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const hasChildren = children != null;\n const safeCount = Math.max(1, count);\n\n const inlineStyle = {\n ...(width !== undefined ? { width: toCssSize(width) } : null),\n ...(height !== undefined ? { height: toCssSize(height) } : null),\n ...style,\n };\n\n const itemClassName = cn('block bg-bg-subtle leading-none', variantStyles[variant], animationStyles[animation]);\n\n if (hasChildren) {\n return (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn(itemClassName, 'inline-block h-auto w-auto scale-100', className)}\n style={inlineStyle}\n {...rest}\n >\n <span className=\"invisible inline-block\" aria-hidden>\n {children}\n </span>\n </span>\n );\n }\n\n if (safeCount === 1) {\n return (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn(itemClassName, className)}\n style={inlineStyle}\n role=\"status\"\n aria-label=\"Loading\"\n {...rest}\n />\n );\n }\n\n return (\n <span ref={ref} data-test-id={dataTestId} className={cn('block', className)} {...rest}>\n {Array.from({ length: safeCount }, (_, index) => (\n <span\n key={index}\n className={itemClassName}\n style={inlineStyle}\n aria-hidden={index === 0 ? undefined : true}\n role={index === 0 ? 'status' : undefined}\n aria-label={index === 0 ? 'Loading' : undefined}\n />\n ))}\n </span>\n );\n});\n","import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { CheckCircle2, AlertTriangle, XCircle, Info, X, type LucideIcon } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type {\n SnackbarContextValue,\n SnackbarItem,\n SnackbarProviderProps,\n SnackbarVariant,\n} from './Snackbar.types';\n\nconst variantStyles: Record<SnackbarVariant, { container: string; icon: LucideIcon }> = {\n success: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: CheckCircle2 },\n warning: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: AlertTriangle },\n danger: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: XCircle },\n info: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: Info },\n neutral: { container: 'bg-gray-900 dark:bg-gray-700 text-white', icon: Info },\n};\n\nconst iconColor: Record<SnackbarVariant, string> = {\n success: 'text-green-400',\n warning: 'text-yellow-300',\n danger: 'text-red-400',\n info: 'text-blue-400',\n neutral: 'text-white/70',\n};\n\nconst SnackbarContext = createContext<SnackbarContextValue | null>(null);\n\nexport function useSnackbar(): SnackbarContextValue {\n const ctx = useContext(SnackbarContext);\n if (!ctx) throw new Error('useSnackbar must be used inside <SnackbarProvider>');\n return ctx;\n}\n\nexport function SnackbarProvider({ children, dataTestId }: SnackbarProviderProps) {\n const [items, setItems] = useState<SnackbarItem[]>([]);\n const timers = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n\n const dismiss = useCallback((id: string) => {\n setItems((list) => list.filter((i) => i.id !== id));\n const t = timers.current.get(id);\n if (t) {\n clearTimeout(t);\n timers.current.delete(id);\n }\n }, []);\n\n const show = useCallback(\n (s: Omit<SnackbarItem, 'id'> & { id?: string }) => {\n const id = s.id ?? Math.random().toString(36).slice(2);\n const item: SnackbarItem = {\n duration: 5000,\n variant: 'neutral',\n ...s,\n id,\n };\n setItems((list) => [...list, item]);\n if (item.duration && item.duration > 0) {\n const t = setTimeout(() => dismiss(id), item.duration);\n timers.current.set(id, t);\n }\n return id;\n },\n [dismiss],\n );\n\n useEffect(() => {\n const timerMap = timers.current;\n return () => {\n timerMap.forEach(clearTimeout);\n timerMap.clear();\n };\n }, []);\n\n return (\n <SnackbarContext.Provider value={{ show, dismiss }}>\n {children}\n {createPortal(\n <div\n data-test-id={dataTestId}\n className=\"fixed left-1/2 -translate-x-1/2 bottom-6 z-[100] flex flex-col gap-2 w-[min(400px,calc(100vw-2rem))] pointer-events-none\"\n >\n {items.map((i) => {\n const { container, icon: Icon } = variantStyles[i.variant ?? 'neutral'];\n return (\n <div\n key={i.id}\n role=\"status\"\n data-test-id={i.dataTestId}\n className={cn(\n 'pointer-events-auto flex items-center gap-3 px-4 py-3 rounded-lg shadow-z4',\n container,\n )}\n >\n <Icon\n className={cn('h-5 w-5 shrink-0', iconColor[i.variant ?? 'neutral'])}\n aria-hidden\n />\n <p className=\"flex-1 text-p-std\">{i.message}</p>\n {i.action && (\n <button\n type=\"button\"\n onClick={() => {\n i.action?.onClick();\n dismiss(i.id);\n }}\n className=\"text-p-std font-semibold text-brand-400 hover:text-brand-300 px-1\"\n >\n {i.action.label}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => dismiss(i.id)}\n aria-label=\"Close\"\n className=\"shrink-0 p-1 rounded-md text-white/70 hover:text-white hover:bg-white/10\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n );\n })}\n </div>,\n document.body,\n )}\n </SnackbarContext.Provider>\n );\n}\n","import { forwardRef } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { StatusProps, StatusSize, StatusVariant } from './Status.types';\n\nconst sizeStyles: Record<StatusSize, string> = {\n lg: 'h-7 px-2.5 text-p-std gap-1.5',\n md: 'h-6 px-2 text-p-sm gap-1.5',\n sm: 'h-5 px-1.5 text-p-sm gap-1',\n};\n\nconst dotDim: Record<StatusSize, string> = {\n lg: 'h-2 w-2',\n md: 'h-1.5 w-1.5',\n sm: 'h-1.5 w-1.5',\n};\n\nconst variantStyles: Record<StatusVariant, { container: string; dot: string }> = {\n general: { container: 'bg-bg-subtle text-fg-default dark:text-fg-default', dot: 'bg-gray-600 dark:bg-gray-400' },\n info: { container: 'bg-bg-info-lighter text-blue-800 dark:text-blue-300', dot: 'bg-blue-600' },\n brand: { container: 'bg-bg-brand-lighter text-brand-800 dark:text-brand-500', dot: 'bg-brand-500' },\n danger: { container: 'bg-bg-danger-lighter text-red-800 dark:text-red-300', dot: 'bg-red-600' },\n warning: { container: 'bg-bg-warning-lighter text-yellow-900 dark:text-yellow-300', dot: 'bg-yellow-600' },\n success: { container: 'bg-bg-success-lighter text-green-800 dark:text-green-300', dot: 'bg-green-600' },\n discovery: {\n container: 'bg-purple-50 dark:bg-purple-900/30 text-purple-800 dark:text-purple-300',\n dot: 'bg-purple-500',\n },\n disabled: { container: 'bg-bg-subtle text-fg-disabled', dot: 'bg-border-strong' },\n};\n\nexport const Status = forwardRef<HTMLSpanElement, StatusProps>(function Status(\n {\n variant = 'general',\n size = 'md',\n leftIcon,\n rightIcon,\n dot = true,\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const { container, dot: dotColor } = variantStyles[variant];\n\n return (\n <span\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-center rounded-full font-medium whitespace-nowrap select-none',\n sizeStyles[size],\n container,\n className,\n )}\n {...rest}\n >\n {leftIcon ? (\n <span className=\"inline-flex shrink-0\">{leftIcon}</span>\n ) : dot ? (\n <span className={cn('inline-block shrink-0 rounded-full', dotDim[size], dotColor)} aria-hidden />\n ) : null}\n {children}\n {rightIcon && <span className=\"inline-flex shrink-0\">{rightIcon}</span>}\n </span>\n );\n});\n","import { forwardRef, useId } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { SwitchProps, SwitchSize } from './Switch.types';\n\nconst trackSize: Record<SwitchSize, string> = {\n md: 'h-6 w-11',\n sm: 'h-5 w-9',\n};\n\nconst thumbSize: Record<SwitchSize, string> = {\n md: 'h-5 w-5 peer-checked:translate-x-5',\n sm: 'h-4 w-4 peer-checked:translate-x-4',\n};\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n size = 'md',\n label,\n description,\n labelPosition = 'right',\n id,\n disabled,\n checked,\n defaultChecked,\n className,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n\n const control = (\n <span className=\"relative inline-flex shrink-0\">\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n className=\"peer sr-only\"\n {...rest}\n />\n <span\n className={cn(\n 'rounded-full bg-gray-300 dark:bg-gray-700 transition-colors',\n trackSize[size],\n 'peer-checked:bg-brand-500 dark:peer-checked:bg-brand-500',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-brand-300 peer-focus-visible:ring-offset-2',\n disabled && '!bg-bg-subtle',\n )}\n />\n <span\n className={cn(\n 'absolute top-0.5 left-0.5 rounded-full bg-white dark:bg-white shadow-z1 transition-transform',\n thumbSize[size],\n )}\n />\n </span>\n );\n\n if (!label && !description) {\n return (\n <label\n htmlFor={inputId}\n data-test-id={dataTestId}\n className={cn('inline-flex', disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer', className)}\n >\n {control}\n </label>\n );\n }\n\n return (\n <label\n htmlFor={inputId}\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex items-start gap-3',\n labelPosition === 'left' && 'flex-row-reverse justify-end',\n disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n className,\n )}\n >\n {control}\n <span className=\"flex flex-col gap-0.5\">\n {label && <span className=\"text-p-std font-medium text-fg-default leading-tight\">{label}</span>}\n {description && <span className=\"text-p-sm text-fg-secondary leading-snug\">{description}</span>}\n </span>\n </label>\n );\n});\n","import { forwardRef } from 'react';\nimport { ArrowUp, ArrowDown, ChevronsUpDown } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type {\n TableProps,\n THeadProps,\n TBodyProps,\n TRProps,\n THProps,\n TDProps,\n TableAlign,\n DataTableProps,\n} from './Table.types';\n\nconst densityStyles: Record<NonNullable<TableProps['density']>, string> = {\n comfortable: '[&_td]:py-3 [&_th]:py-3',\n compact: '[&_td]:py-2 [&_th]:py-2',\n};\n\nconst alignStyles: Record<TableAlign, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n {\n density = 'comfortable',\n striped = false,\n hoverable = true,\n stickyHeader = false,\n wrapperClassName,\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n return (\n <div\n data-test-id={dataTestId}\n className={cn(\n 'w-full overflow-x-auto rounded-lg border border-border-default bg-bg-default',\n wrapperClassName,\n )}\n >\n <table\n ref={ref}\n className={cn(\n 'w-full border-collapse text-p-std text-fg-default',\n densityStyles[density],\n className,\n )}\n data-striped={striped || undefined}\n data-hoverable={hoverable || undefined}\n data-sticky={stickyHeader || undefined}\n {...rest}\n >\n {children}\n </table>\n </div>\n );\n});\n\nexport const THead = forwardRef<HTMLTableSectionElement, THeadProps>(function THead(\n { className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <thead\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n 'bg-bg-container text-p-sm font-semibold text-fg-secondary uppercase tracking-wider',\n '[[data-sticky]_&]:sticky [[data-sticky]_&]:top-0 [[data-sticky]_&]:z-10',\n className,\n )}\n {...rest}\n >\n {children}\n </thead>\n );\n});\n\nexport const TBody = forwardRef<HTMLTableSectionElement, TBodyProps>(function TBody(\n { className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <tbody\n ref={ref}\n data-test-id={dataTestId}\n className={cn(\n '[&>tr]:border-t [&>tr]:border-border-default',\n '[[data-striped]_&>tr:nth-child(even)]:bg-bg-container',\n '[[data-hoverable]_&>tr:hover]:bg-bg-container',\n className,\n )}\n {...rest}\n >\n {children}\n </tbody>\n );\n});\n\nexport const TR = forwardRef<HTMLTableRowElement, TRProps>(function TR(\n { className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <tr ref={ref} data-test-id={dataTestId} className={className} {...rest}>\n {children}\n </tr>\n );\n});\n\nexport const TH = forwardRef<HTMLTableCellElement, THProps>(function TH(\n {\n sortable = false,\n sortDir = null,\n onSortChange,\n align = 'left',\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const content = (\n <>\n {children}\n {sortable && (\n <span className=\"inline-flex ml-1 align-middle text-fg-tertiary\">\n {sortDir === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : sortDir === 'desc' ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronsUpDown className=\"h-3.5 w-3.5\" />\n )}\n </span>\n )}\n </>\n );\n\n return (\n <th\n ref={ref}\n scope=\"col\"\n data-test-id={dataTestId}\n className={cn('px-4 whitespace-nowrap', alignStyles[align], className)}\n aria-sort={sortDir === 'asc' ? 'ascending' : sortDir === 'desc' ? 'descending' : undefined}\n {...rest}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={() => {\n const next = sortDir === 'asc' ? 'desc' : sortDir === 'desc' ? null : 'asc';\n onSortChange?.(next);\n }}\n className=\"inline-flex items-center hover:text-fg-default focus-visible:outline-none\"\n >\n {content}\n </button>\n ) : (\n content\n )}\n </th>\n );\n});\n\nexport const TD = forwardRef<HTMLTableCellElement, TDProps>(function TD(\n { align = 'left', className, children, dataTestId, ...rest },\n ref,\n) {\n return (\n <td\n ref={ref}\n data-test-id={dataTestId}\n className={cn('px-4', alignStyles[align], className)}\n {...rest}\n >\n {children}\n </td>\n );\n});\n\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n empty = 'No results',\n density,\n striped,\n hoverable,\n sortKey,\n sortDir = null,\n onSortChange,\n onRowClick,\n className,\n dataTestId,\n}: DataTableProps<T>) {\n return (\n <Table\n density={density}\n striped={striped}\n hoverable={hoverable}\n className={className}\n dataTestId={dataTestId}\n >\n <THead>\n <TR>\n {columns.map((col) => (\n <TH\n key={col.key}\n align={col.align}\n sortable={col.sortable}\n sortDir={sortKey === col.key ? sortDir : null}\n onSortChange={(d) => onSortChange?.(col.key, d)}\n >\n {col.header}\n </TH>\n ))}\n </TR>\n </THead>\n <TBody>\n {rows.length === 0 ? (\n <TR>\n <TD colSpan={columns.length} className=\"text-center text-fg-tertiary py-10\" align=\"center\">\n {empty}\n </TD>\n </TR>\n ) : (\n rows.map((row, i) => (\n <TR\n key={rowKey(row, i)}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? 'cursor-pointer' : undefined}\n >\n {columns.map((col) => (\n <TD key={col.key} align={col.align}>\n {col.render ? col.render(row) : col.accessor ? col.accessor(row) : null}\n </TD>\n ))}\n </TR>\n ))\n )}\n </TBody>\n </Table>\n );\n}\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../lib/cn';\nimport type {\n TabListProps,\n TabPanelProps,\n TabProps,\n TabsProps,\n TabsSize,\n TabsVariant,\n} from './Tabs.types';\n\ninterface TabsContextValue {\n value: string;\n setValue: (v: string) => void;\n variant: TabsVariant;\n size: TabsSize;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabs() {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error('Tab components must be used inside <Tabs>');\n return ctx;\n}\n\n/** Walks `children` for a `<TabList>` and returns its first `<Tab>`'s value, used\n * as the default active tab when `Tabs` is uncontrolled and no `defaultValue` is given. */\nfunction findFirstValue(children: ReactNode): string {\n const items: ReactElement[] = [];\n Children.forEach(children, (child) => {\n if (isValidElement(child)) items.push(child);\n });\n const list = items.find(\n (child) => (child.type as { displayName?: string })?.displayName === 'TabList',\n );\n if (!isValidElement(list)) return '';\n const listChildren = Children.toArray((list.props as { children?: ReactNode }).children);\n for (const child of listChildren) {\n if (isValidElement(child)) {\n const value = (child.props as { value?: string }).value;\n if (value !== undefined) return value;\n }\n }\n return '';\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n {\n defaultValue,\n value,\n onValueChange,\n variant = 'underline',\n size = 'md',\n className,\n children,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState<string>(() => defaultValue ?? findFirstValue(children));\n const controlled = value !== undefined;\n const current = controlled ? value : internal;\n\n const setValue = (v: string) => {\n if (!controlled) setInternal(v);\n onValueChange?.(v);\n };\n\n return (\n <TabsContext.Provider value={{ value: current, setValue, variant, size }}>\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn('flex flex-col gap-4', className)}\n {...rest}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n});\n\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(function TabList(\n { children, className, dataTestId, ...rest },\n ref,\n) {\n const { variant } = useTabs();\n return (\n <div\n ref={ref}\n role=\"tablist\"\n data-test-id={dataTestId}\n className={cn(\n 'inline-flex',\n variant === 'underline' && 'border-b border-border-default gap-1 w-full',\n variant === 'pills' && 'gap-1 p-1 rounded-full bg-bg-container',\n variant === 'boxed' &&\n 'gap-0 rounded-lg border border-border-default overflow-hidden bg-bg-container',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\nTabList.displayName = 'TabList';\n\nconst sizeStyles: Record<TabsSize, string> = {\n lg: 'h-11 px-4 text-p-md',\n md: 'h-10 px-3 text-p-std',\n sm: 'h-8 px-2.5 text-p-sm',\n};\n\n/** Count/indicator pill rendered after the label. Recolours with the tab's\n * active state so the active tab's count reads as the primary one. */\nconst badgeStyles: Record<TabsVariant, { on: string; off: string }> = {\n underline: { on: 'bg-brand-500 text-white', off: 'bg-bg-subtle text-fg-secondary' },\n pills: { on: 'bg-brand-500 text-white', off: 'bg-bg-subtle text-fg-secondary' },\n boxed: { on: 'bg-brand-500 text-white', off: 'bg-bg-subtle text-fg-secondary' },\n};\n\nexport const Tab = forwardRef<HTMLButtonElement, TabProps>(function Tab(\n { value, children, disabled, icon, badge, className, dataTestId, onClick, ...rest },\n ref,\n) {\n const { value: current, setValue, variant, size } = useTabs();\n const active = current === value;\n const hasBadge = badge !== undefined && badge !== null && badge !== false;\n\n const base = cn(\n 'group relative inline-flex items-center justify-center gap-2 font-medium outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-1 focus-visible:rounded-md',\n sizeStyles[size],\n disabled && 'opacity-50 cursor-not-allowed',\n );\n\n const variantCls = (() => {\n if (variant === 'underline') {\n return cn(\n 'rounded-t-lg',\n active ? 'text-fg-default' : 'text-fg-secondary hover:text-fg-default hover:bg-bg-subtle/60',\n );\n }\n if (variant === 'pills') {\n return cn(\n 'rounded-full',\n active\n ? 'bg-bg-default text-fg-default shadow-z1'\n : 'bg-transparent text-fg-secondary hover:text-fg-default',\n );\n }\n return cn(\n 'border-r border-border-default last:border-r-0',\n active ? 'bg-bg-default text-fg-default' : 'bg-transparent text-fg-secondary hover:bg-bg-subtle',\n );\n })();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n disabled={disabled}\n data-test-id={dataTestId}\n onClick={(event) => {\n if (disabled) return;\n setValue(value);\n onClick?.(event);\n }}\n className={cn(base, variantCls, className)}\n {...rest}\n >\n {icon && <span className=\"inline-flex shrink-0\">{icon}</span>}\n <span className=\"truncate\">{children}</span>\n {hasBadge && (\n <span\n className={cn(\n 'inline-flex items-center justify-center shrink-0 rounded-full px-1.5 h-5 min-w-[1.25rem]',\n 'text-label-xs font-semibold tabular-nums leading-none transition-colors',\n active ? badgeStyles[variant].on : badgeStyles[variant].off,\n )}\n >\n {badge}\n </span>\n )}\n {variant === 'underline' && (\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-x-0 -bottom-px h-[2px] rounded-full bg-brand-500 transition-opacity duration-150',\n active ? 'opacity-100' : 'opacity-0',\n )}\n />\n )}\n </button>\n );\n});\n\nexport const TabPanel = forwardRef<HTMLDivElement, TabPanelProps>(function TabPanel(\n { value, children, className, dataTestId, ...rest },\n ref,\n) {\n const { value: current } = useTabs();\n if (current !== value) return null;\n return (\n <div ref={ref} role=\"tabpanel\" data-test-id={dataTestId} className={className} {...rest}>\n {children}\n </div>\n );\n});\n","import { createElement, forwardRef, type ElementType } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { TextProps, TextVariant, TextWeight, TextColor } from './Text.types';\n\nconst variantClass: Record<TextVariant, string> = {\n 'h-xl': 'text-h-xl',\n 'h-lg': 'text-h-lg',\n 'h-md': 'text-h-md',\n 'h-std': 'text-h-std',\n 'h-sm': 'text-h-sm',\n 'h-xs': 'text-h-xs',\n 'p-lg': 'text-p-lg',\n 'p-md': 'text-p-md',\n 'p-std': 'text-p-std',\n 'p-sm': 'text-p-sm',\n 'p-xs': 'text-p-xs',\n 'label-lg': 'text-label-lg',\n 'label-md': 'text-label-md',\n 'label-std': 'text-label-std',\n 'label-sm': 'text-label-sm',\n 'label-xs': 'text-label-xs',\n 'label-xxs': 'text-label-xxs',\n};\n\nconst weightClass: Record<TextWeight, string> = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n};\n\nconst colorClass: Record<TextColor, string> = {\n default: 'text-fg-default',\n secondary: 'text-fg-secondary',\n tertiary: 'text-fg-tertiary',\n disabled: 'text-fg-disabled',\n inverse: 'text-fg-inverse',\n brand: 'text-fg-brand',\n info: 'text-fg-info',\n success: 'text-fg-success',\n warning: 'text-fg-warning',\n danger: 'text-fg-danger',\n};\n\n/** Sensible default element for each variant (can be overridden with `as`). */\nconst defaultAs: Record<TextVariant, ElementType> = {\n 'h-xl': 'h1',\n 'h-lg': 'h1',\n 'h-md': 'h2',\n 'h-std': 'h3',\n 'h-sm': 'h4',\n 'h-xs': 'h5',\n 'p-lg': 'p',\n 'p-md': 'p',\n 'p-std': 'p',\n 'p-sm': 'p',\n 'p-xs': 'p',\n 'label-lg': 'span',\n 'label-md': 'span',\n 'label-std': 'span',\n 'label-sm': 'span',\n 'label-xs': 'span',\n 'label-xxs': 'span',\n};\n\nexport const Text = forwardRef<HTMLElement, TextProps>(function Text(\n { variant = 'p-std', weight, color = 'default', as, truncate, className, children, dataTestId, ...rest },\n ref,\n) {\n const Component = as ?? defaultAs[variant];\n return createElement(\n Component,\n {\n ref,\n 'data-test-id': dataTestId,\n className: cn(\n variantClass[variant],\n weight && weightClass[weight],\n colorClass[color],\n truncate && 'truncate',\n className,\n ),\n ...rest,\n },\n children,\n );\n});\n","import { forwardRef, useId } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { TextAreaProps } from './TextArea.types';\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(function TextArea(\n {\n label,\n helperText,\n errorText,\n error = false,\n id,\n disabled,\n required,\n maxLength,\n showCount = false,\n className,\n wrapperClassName,\n value,\n defaultValue,\n rows = 4,\n dataTestId,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n const hasError = error || !!errorText;\n const describedBy = errorText ? `${inputId}-error` : helperText ? `${inputId}-help` : undefined;\n const currentLength =\n value !== undefined ? String(value).length : defaultValue !== undefined ? String(defaultValue).length : 0;\n\n return (\n <div className={cn('flex flex-col gap-1.5 w-full', wrapperClassName)} data-test-id={dataTestId}>\n {label && (\n <label htmlFor={inputId} className=\"text-p-std font-medium text-fg-default inline-flex items-center gap-1\">\n {label}\n {required && (\n <span className=\"text-red-600\" aria-hidden>\n *\n </span>\n )}\n </label>\n )}\n <textarea\n ref={ref}\n id={inputId}\n disabled={disabled}\n required={required}\n maxLength={maxLength}\n rows={rows}\n value={value}\n defaultValue={defaultValue}\n aria-invalid={hasError || undefined}\n aria-describedby={describedBy}\n className={cn(\n 'w-full px-3 py-2.5 rounded-lg border bg-bg-default text-p-std text-fg-default placeholder:text-fg-tertiary outline-none transition-colors resize-y',\n hasError ? 'border-red-600' : 'border-border-default',\n !disabled && !hasError && 'hover:border-border-strong',\n 'focus:ring-2',\n hasError ? 'focus:ring-red-300 focus:border-red-600' : 'focus:ring-brand-300 focus:border-brand-500',\n disabled && 'bg-bg-container border-border-default cursor-not-allowed',\n className,\n )}\n {...rest}\n />\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n {errorText ? (\n <p id={`${inputId}-error`} className=\"text-p-sm text-red-700\">\n {errorText}\n </p>\n ) : helperText ? (\n <p id={`${inputId}-help`} className=\"text-p-sm text-fg-secondary\">\n {helperText}\n </p>\n ) : null}\n </div>\n {showCount && maxLength && (\n <p className=\"text-p-sm text-fg-tertiary tabular-nums shrink-0\">\n {currentLength}/{maxLength}\n </p>\n )}\n </div>\n </div>\n );\n});\n","import { cloneElement, forwardRef, isValidElement, useId, useRef, useState } from 'react';\nimport { cn } from '../../lib/cn';\nimport type { TooltipProps, TooltipSide, TooltipSize } from './Tooltip.types';\n\nconst sizeStyles: Record<TooltipSize, string> = {\n lg: 'px-3 py-2 text-p-std',\n sm: 'px-2 py-1 text-p-sm',\n};\n\nconst sidePosition: Record<TooltipSide, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n};\n\nconst arrowPosition: Record<TooltipSide, string> = {\n top: 'top-full left-1/2 -translate-x-1/2 border-t-fg-default border-x-transparent border-b-transparent',\n bottom: 'bottom-full left-1/2 -translate-x-1/2 border-b-fg-default border-x-transparent border-t-transparent',\n left: 'left-full top-1/2 -translate-y-1/2 border-l-fg-default border-y-transparent border-r-transparent',\n right: 'right-full top-1/2 -translate-y-1/2 border-r-fg-default border-y-transparent border-l-transparent',\n};\n\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n { content, children, side = 'top', size = 'sm', delay = 150, className, dataTestId },\n ref,\n) {\n const [open, setOpen] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const tooltipId = useId();\n\n const show = () => {\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => setOpen(true), delay);\n };\n const hide = () => {\n if (timer.current) clearTimeout(timer.current);\n setOpen(false);\n };\n\n if (!isValidElement(children)) return children;\n\n const childProps = (children.props ?? {}) as Record<string, unknown>;\n const trigger = cloneElement(children, {\n onMouseEnter: show,\n onMouseLeave: hide,\n onFocus: show,\n onBlur: hide,\n 'aria-describedby': open ? tooltipId : childProps['aria-describedby'],\n } as Record<string, unknown>);\n\n return (\n <span ref={ref} data-test-id={dataTestId} className=\"relative inline-flex\">\n {trigger}\n {open && (\n <span\n role=\"tooltip\"\n id={tooltipId}\n className={cn(\n 'absolute z-50 whitespace-nowrap rounded-md bg-fg-default text-bg-default shadow-z3 pointer-events-none select-none',\n sizeStyles[size],\n sidePosition[side],\n className,\n )}\n >\n {content}\n <span aria-hidden className={cn('absolute h-0 w-0 border-4', arrowPosition[side])} />\n </span>\n )}\n </span>\n );\n});\n","import { forwardRef, useRef, useState, type DragEvent, type KeyboardEvent } from 'react';\nimport { UploadCloud, File as FileIcon, Trash2, X, CheckCircle2, AlertCircle } from 'lucide-react';\nimport { cn } from '../../lib/cn';\nimport type { UploadItemProps, UploadItemStatus, UploadProps } from './Upload.types';\n\nexport const Upload = forwardRef<HTMLDivElement, UploadProps>(function Upload(\n { accept, multiple = false, maxSizeMB, hint, onFiles, disabled, className, dataTestId, ...rest },\n ref,\n) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n\n const onDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragOver(false);\n if (disabled) return;\n const files = Array.from(event.dataTransfer.files ?? []);\n if (files.length) onFiles?.(files);\n };\n\n const hintText =\n hint ??\n `${accept ? accept.toUpperCase().replace(/\\./g, '') : 'Any file'}${\n maxSizeMB ? `, up to ${maxSizeMB} MB` : ''\n }`;\n\n return (\n <div\n ref={ref}\n onDragOver={(event) => {\n event.preventDefault();\n if (!disabled) setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={onDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(event: KeyboardEvent<HTMLDivElement>) => {\n if ((event.key === 'Enter' || event.key === ' ') && !disabled) {\n event.preventDefault();\n inputRef.current?.click();\n }\n }}\n aria-disabled={disabled || undefined}\n data-test-id={dataTestId}\n className={cn(\n 'flex flex-col items-center justify-center text-center gap-2 px-6 py-8 rounded-lg border-2 border-dashed cursor-pointer transition-colors outline-none',\n dragOver ? 'border-brand-500 bg-brand-20' : 'border-border-default bg-bg-container hover:bg-bg-subtle',\n 'focus-visible:ring-2 focus-visible:ring-brand-300 focus-visible:ring-offset-1',\n disabled && 'opacity-50 cursor-not-allowed',\n className,\n )}\n {...rest}\n >\n <div className=\"h-10 w-10 rounded-full bg-bg-default flex items-center justify-center text-fg-secondary shadow-z1\">\n <UploadCloud className=\"h-5 w-5\" />\n </div>\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"text-p-std text-fg-default\">\n <span className=\"font-semibold text-brand-700\">Choose a file</span> or drag & drop it here.\n </p>\n <p className=\"text-p-sm text-fg-tertiary\">{hintText}</p>\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event) => {\n const files = Array.from(event.target.files ?? []);\n if (files.length) onFiles?.(files);\n event.target.value = '';\n }}\n className=\"sr-only\"\n />\n </div>\n );\n});\n\nconst statusStyles: Record<UploadItemStatus, string> = {\n processing: 'border-border-default bg-bg-default',\n completed: 'border-border-default bg-bg-default',\n error: 'border-red-300 bg-bg-danger-lighter',\n};\n\nexport const UploadItem = forwardRef<HTMLDivElement, UploadItemProps>(function UploadItem(\n { name, meta, status = 'processing', progress = 0, errorText, onRetry, onRemove, className, dataTestId, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-test-id={dataTestId}\n className={cn('flex items-start gap-3 px-3 py-2.5 rounded-lg border', statusStyles[status], className)}\n {...rest}\n >\n <div\n className={cn(\n 'shrink-0 flex items-center justify-center h-9 w-9 rounded-md',\n status === 'error' ? 'bg-red-100 dark:bg-red-900/30 text-red-700' : 'bg-bg-subtle text-fg-secondary',\n )}\n >\n <FileIcon className=\"h-4 w-4\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"truncate text-p-std font-medium text-fg-default\">{name}</p>\n <div className=\"flex items-center gap-1 shrink-0\">\n {status === 'completed' && (\n <CheckCircle2 className=\"h-4 w-4 text-green-600\" aria-label=\"Completed\" />\n )}\n {status === 'error' && <AlertCircle className=\"h-4 w-4 text-red-600\" aria-label=\"Failed\" />}\n </div>\n </div>\n {meta && <p className=\"text-p-sm text-fg-tertiary mt-0.5\">{meta}</p>}\n {status === 'processing' && (\n <div className=\"mt-2 h-1 w-full rounded-full bg-bg-subtle overflow-hidden\">\n <div\n className=\"h-full bg-brand-500 transition-[width] duration-200\"\n style={{ width: `${Math.min(100, Math.max(0, progress))}%` }}\n />\n </div>\n )}\n {status === 'error' && errorText && (\n <p className=\"text-p-sm text-red-700 mt-1\">\n {errorText}\n {onRetry && (\n <button type=\"button\" onClick={onRetry} className=\"ml-2 underline font-medium hover:no-underline\">\n Try again\n </button>\n )}\n </p>\n )}\n </div>\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label=\"Remove\"\n className=\"shrink-0 p-1 rounded-md text-fg-tertiary hover:text-fg-default hover:bg-bg-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-300\"\n >\n {status === 'completed' ? <Trash2 className=\"h-4 w-4\" /> : <X className=\"h-4 w-4\" />}\n </button>\n )}\n </div>\n );\n});\n","/**\n * Color primitives and semantic theme tokens.\n *\n * Ported from the People Space design system\n * (packages/design-system/src/tokens/colors.css + aliases.css) — this is\n * the source of truth for the design system's color palette. Values are\n * mirrored (by hand) into `src/styles/tokens.css` and `src/styles/theme.css`\n * as CSS custom properties, since the library ships a real Tailwind theme\n * rather than a JS-only token system.\n */\n\nexport const brand = {\n 900: '#31531C',\n 800: '#416E26',\n 700: '#518A2F',\n 600: '#61A539',\n 500: '#72BF44',\n 400: '#80C557',\n 300: '#8ECC69',\n 200: '#9CD27C',\n 100: '#AAD98F',\n 50: '#B8DFA2',\n 40: '#CAE7B9',\n 30: '#DBEFD1',\n 20: '#EDF7E8',\n} as const;\n\nexport const gray = {\n 900: '#0e121b',\n 800: '#222530',\n 700: '#2b303b',\n 600: '#525866',\n 500: '#717784',\n 400: '#99a0ae',\n 300: '#cacfd8',\n 200: '#e1e4ea',\n 100: '#f2f5f8',\n 50: '#f5f7fa',\n 20: '#f7f9fc',\n} as const;\n\nexport const white = '#FEFEFE';\n\nexport const green = {\n 900: '#0b4627',\n 800: '#0f5c33',\n 700: '#3D8B46',\n 600: '#199754',\n 500: '#1fc16b',\n 400: '#5ed495',\n 300: '#83dfae',\n 200: '#aeeacb',\n 100: '#d0f5e1',\n 50: '#e0faec',\n} as const;\n\nexport const blue = {\n 900: '#2443B8',\n 800: '#2E63D6',\n 700: '#3475E8',\n 600: '#3C88F7',\n 500: '#4396F7',\n 400: '#54A6F8',\n 300: '#71B6F9',\n 200: '#9ACAFA',\n 100: '#C1DEFC',\n 50: '#E6F2FE',\n} as const;\n\nexport const purple = {\n 900: '#081FA6',\n 800: '#0E2AB2',\n 700: '#2431B9',\n 600: '#3838C1',\n 500: '#453DC7',\n 400: '#6559D0',\n 300: '#8377D7',\n 200: '#A89DE2',\n 100: '#CBC4ED',\n 50: '#EAE7F7',\n 20: '#F5F3FB',\n} as const;\n\nexport const pink = {\n 900: '#4A0A20',\n 800: '#79012F',\n 700: '#A2023F',\n 600: '#AD0244',\n 500: '#CA024F',\n 400: '#F50260',\n 300: '#FD2779',\n 200: '#FE7DAF',\n 100: '#FEA8C9',\n 50: '#FFD4E4',\n} as const;\n\nexport const red = {\n 900: '#8b1822',\n 800: '#ad1f2b',\n 700: '#d02533',\n 600: '#e93544',\n 500: '#fb3748',\n 400: '#ff6875',\n 300: '#ff97a0',\n 200: '#ffc0c5',\n 100: '#ffd5d8',\n 50: '#ffebec',\n 20: '#fff4f4',\n} as const;\n\nexport const yellow = {\n 900: '#EB7520',\n 800: '#ED912A',\n 700: '#EEA02F',\n 600: '#F0B134',\n 500: '#F1BE39',\n 400: '#F2C74A',\n 300: '#F4D264',\n 200: '#F7DE8E',\n 100: '#FAEBB9',\n 50: '#FDF7E4',\n} as const;\n\nexport const colorPrimitives = { brand, gray, green, blue, purple, pink, red, yellow } as const;\n\nexport type ColorScale = typeof gray;\nexport type ColorPrimitives = typeof colorPrimitives;\n\n/**\n * Semantic aliases — components and consumer apps reference these, never\n * the raw scales above directly. Mirrors src/styles/theme.css.\n */\nexport const lightTheme = {\n bgDefault: white,\n bgContainer: gray[50],\n bgSubtle: gray[100],\n bgBrandLighter: brand[20],\n bgInfoLighter: blue[50],\n bgSuccessLighter: green[50],\n bgWarningLighter: yellow[50],\n bgDangerLighter: red[50],\n\n fgDefault: gray[900],\n fgSecondary: gray[600],\n fgTertiary: gray[500],\n fgDisabled: gray[400],\n fgInverse: white,\n fgBrand: brand[500],\n fgInfo: blue[600],\n fgSuccess: green[600],\n fgWarning: yellow[800],\n fgDanger: red[800],\n\n borderDefault: gray[200],\n borderSubtle: gray[100],\n borderStrong: gray[300],\n borderBrand: brand[500],\n\n iconPrimary: gray[900],\n iconSecondary: gray[600],\n iconInverse: white,\n iconBrand: brand[500],\n iconInfo: blue[600],\n iconDanger: red[800],\n iconWarning: yellow[800],\n} as const;\n\nexport const darkTheme = {\n ...lightTheme,\n bgDefault: '#0B1120',\n bgContainer: '#0F172A',\n bgSubtle: '#121C30',\n bgBrandLighter: 'rgba(114, 191, 68, 0.15)',\n bgInfoLighter: 'rgba(67, 150, 247, 0.15)',\n bgSuccessLighter: 'rgba(31, 193, 107, 0.15)',\n bgWarningLighter: 'rgba(237, 145, 42, 0.15)',\n bgDangerLighter: 'rgba(230, 27, 0, 0.15)',\n\n fgDefault: white,\n fgSecondary: gray[400],\n fgTertiary: gray[500],\n fgDisabled: gray[600],\n\n borderDefault: 'rgba(255, 255, 255, 0.05)',\n borderSubtle: 'rgba(255, 255, 255, 0.03)',\n borderStrong: 'rgba(255, 255, 255, 0.10)',\n\n iconPrimary: white,\n iconSecondary: gray[400],\n} as const;\n\nexport type SemanticTheme = typeof lightTheme;\n","/**\n * Typography tokens, mirrored as `--text-*` / `--font-*` in\n * src/styles/tokens.css. Ported from the People Space design system\n * (packages/design-system/src/tokens/typography.css). Sizes are paired\n * with their line-height; weight is composed separately via Tailwind's\n * default `font-*` utilities.\n */\nexport const fontFamily = {\n ps: ['Noto Sans Armenian', 'Noto Sans', 'ui-sans-serif', 'system-ui', 'sans-serif'],\n sans: ['Noto Sans Armenian', 'Noto Sans', 'ui-sans-serif', 'system-ui', 'sans-serif'],\n} as const;\n\nexport const headline = {\n xl: { fontSize: '64px', lineHeight: '72px' },\n lg: { fontSize: '48px', lineHeight: '56px' },\n md: { fontSize: '40px', lineHeight: '48px' },\n std: { fontSize: '36px', lineHeight: '44px' },\n sm: { fontSize: '32px', lineHeight: '40px' },\n xs: { fontSize: '24px', lineHeight: '32px' },\n} as const;\n\nexport const paragraph = {\n lg: { fontSize: '20px', lineHeight: '28px' },\n md: { fontSize: '16px', lineHeight: '24px' },\n std: { fontSize: '14px', lineHeight: '20px' },\n sm: { fontSize: '12px', lineHeight: '16px' },\n xs: { fontSize: '10px', lineHeight: '14px' },\n} as const;\n\nexport const label = {\n lg: { fontSize: '20px', lineHeight: '28px' },\n md: { fontSize: '16px', lineHeight: '24px' },\n std: { fontSize: '14px', lineHeight: '20px' },\n sm: { fontSize: '12px', lineHeight: '16px' },\n xs: { fontSize: '10px', lineHeight: '14px' },\n xxs: { fontSize: '6px', lineHeight: '6px' },\n} as const;\n\nexport const typography = { headline, paragraph, label } as const;\n","/**\n * Component-level sizing tokens (control heights, icon sizes).\n * General layout spacing intentionally reuses Tailwind's default 4px scale\n * rather than redefining it here — same convention as the People Space\n * design system (packages/design-system/src/tokens/spacing.css), which\n * documents an 8px rhythm (p-2, p-4, p-6, p-8...) on top of that scale\n * without overriding any token.\n */\nexport const controlHeight = {\n sm: '2rem',\n md: '2.5rem',\n lg: '3rem',\n} as const;\n\nexport const iconSize = {\n sm: '0.875rem',\n md: '1rem',\n lg: '1.25rem',\n} as const;\n","/**\n * Border radii, mirrored as `--radius-*` in src/styles/tokens.css. Ported\n * from the People Space design system (packages/design-system/src/tokens/radii.css)\n * as a fixed step scale rather than a single calc()-derived base value.\n */\nexport const radius = {\n xs: '2px',\n sm: '4px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n '2xl': '20px',\n '3xl': '24px',\n full: '9999px',\n} as const;\n","/**\n * Elevation scale, mirrored as `--shadow-z*` in src/styles/tokens.css.\n * Ported from the People Space design system\n * (packages/design-system/src/tokens/shadows.css) — z4 verified from\n * Figma, others interpolated.\n */\nexport const shadows = {\n z1: '0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n z2: '0 1px 3px 0 rgba(0, 0, 0, 0.08), 0 1px 2px 0 rgba(0, 0, 0, 0.04)',\n z3: '0 4px 8px 0 rgba(0, 0, 0, 0.08), 0 2px 4px 0 rgba(0, 0, 0, 0.04)',\n z4: '0 1px 4px 0 rgba(0, 0, 0, 0.12), 0 12px 16px 0 rgba(0, 0, 0, 0.10), 0 3px 5px 0 rgba(0, 0, 0, 0.12)',\n z5: '0 8px 16px 0 rgba(0, 0, 0, 0.12), 0 24px 32px 0 rgba(0, 0, 0, 0.12)',\n} as const;\n"],"mappings":"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"}
|