@terminal-blueprint/react 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/cn.ts","../src/components/Button.tsx","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/Card/Card.tsx","../src/components/Badge.tsx","../src/components/Tag.tsx","../src/components/TitleLine.tsx","../src/components/CornerBrackets.tsx","../src/components/Select/Select.tsx","../src/components/Select/SelectTrigger.tsx","../src/components/Select/SelectContent.tsx","../src/components/Select/SelectItem.tsx","../src/components/Modal/Modal.tsx","../src/utils/SafePortal.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Toast/ToastProvider.tsx","../src/components/Tooltip.tsx","../src/components/NavDropdown.tsx","../src/components/Checkbox.tsx","../src/components/Toggle.tsx","../src/components/Radio.tsx","../src/components/Progress.tsx","../src/components/Battery.tsx","../src/components/BatteryInline.tsx","../src/components/Table.tsx","../src/components/Skeleton.tsx","../src/components/Spinner.tsx","../src/components/Pagination.tsx","../src/components/Breadcrumbs.tsx","../src/components/Toolbar.tsx","../src/components/Sidenav/Sidenav.tsx","../src/components/CodeBlock.tsx","../src/components/ThemeProvider.tsx","../src/hooks/useDisclosure.ts","../src/hooks/useFocusTrap.ts","../src/hooks/useKeyboardNav.ts","../src/hooks/useReducedMotion.ts","../src/hooks/useMergedRef.ts"],"sourcesContent":["import '@terminal-blueprint/core/css'\n\n// Phase 1 — Foundation\nexport { Button } from './components/Button'\nexport type { ButtonProps } from './components/Button'\nexport { Input } from './components/Input'\nexport type { InputProps } from './components/Input'\nexport { Textarea } from './components/Textarea'\nexport type { TextareaProps } from './components/Textarea'\nexport { Card } from './components/Card'\nexport type { CardProps, CardSectionProps } from './components/Card'\nexport { Badge } from './components/Badge'\nexport type { BadgeProps } from './components/Badge'\nexport { Tag } from './components/Tag'\nexport type { TagProps } from './components/Tag'\nexport { TitleLine } from './components/TitleLine'\nexport type { TitleLineProps } from './components/TitleLine'\nexport { CornerBrackets } from './components/CornerBrackets'\nexport type { CornerBracketsProps } from './components/CornerBrackets'\n\n// Phase 2 — Interactive Components\nexport { Select } from './components/Select'\nexport type { SelectProps } from './components/Select'\nexport { SelectTrigger } from './components/Select'\nexport type { SelectTriggerProps } from './components/Select'\nexport { SelectContent } from './components/Select'\nexport type { SelectContentProps } from './components/Select'\nexport { SelectItem } from './components/Select'\nexport type { SelectItemProps } from './components/Select'\n\nexport { Modal } from './components/Modal'\nexport type { ModalProps } from './components/Modal'\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent } from './components/Tabs'\nexport type { TabsProps, TabsListProps, TabsTriggerProps, TabsContentProps } from './components/Tabs'\n\nexport { Toaster, toast } from './components/Toast'\nexport type { ToasterProps, ToastOptions, ToastEntry } from './components/Toast'\n\nexport { Tooltip } from './components/Tooltip'\nexport type { TooltipProps } from './components/Tooltip'\n\nexport { NavDropdown } from './components/NavDropdown'\nexport type { NavDropdownProps, NavDropdownItem } from './components/NavDropdown'\n\n// Phase 3 — Data Display + Form Completion\nexport { Checkbox } from './components/Checkbox'\nexport type { CheckboxProps } from './components/Checkbox'\n\nexport { Toggle } from './components/Toggle'\nexport type { ToggleProps } from './components/Toggle'\n\nexport { RadioGroup, RadioItem } from './components/Radio'\nexport type { RadioGroupProps, RadioItemProps } from './components/Radio'\n\nexport { Progress } from './components/Progress'\nexport type { ProgressProps } from './components/Progress'\n\nexport { Battery } from './components/Battery'\nexport type { BatteryProps } from './components/Battery'\n\nexport { BatteryInline } from './components/BatteryInline'\nexport type { BatteryInlineProps } from './components/BatteryInline'\n\nexport { Table } from './components/Table'\nexport type { TableProps, Column } from './components/Table'\n\nexport { Skeleton } from './components/Skeleton'\nexport type { SkeletonProps } from './components/Skeleton'\n\nexport { Spinner } from './components/Spinner'\nexport type { SpinnerProps } from './components/Spinner'\n\nexport { Pagination } from './components/Pagination'\nexport type { PaginationProps } from './components/Pagination'\n\nexport { Breadcrumbs } from './components/Breadcrumbs'\nexport type { BreadcrumbsProps, BreadcrumbItem } from './components/Breadcrumbs'\n\nexport { Toolbar } from './components/Toolbar'\nexport type { ToolbarProps, ToolbarSelectProps, ToolbarSelectOption } from './components/Toolbar'\n\n// Navigation\nexport { Sidenav } from './components/Sidenav'\nexport type { SidenavProps, SidenavItemProps, SidenavIconProps, SidenavGroupProps } from './components/Sidenav'\n\nexport { CodeBlock } from './components/CodeBlock'\nexport type { CodeBlockProps } from './components/CodeBlock'\n\n// Theme\nexport { ThemeProvider, useTheme } from './components/ThemeProvider'\nexport type { ThemeProviderProps, ThemeContextValue, Theme, Contrast } from './components/ThemeProvider'\n\n// Hooks\nexport { useDisclosure } from './hooks/useDisclosure'\nexport { useFocusTrap } from './hooks/useFocusTrap'\nexport { useKeyboardNav } from './hooks/useKeyboardNav'\nexport { useReducedMotion } from './hooks/useReducedMotion'\nexport { useMergedRef } from './hooks/useMergedRef'\n\n// Utils\nexport { cn } from './utils/cn'\nexport { SafePortal } from './utils/SafePortal'\nexport type { PolymorphicProps } from './utils/polymorphic'\n","import { clsx, type ClassValue } from 'clsx'\n\nexport function cn(...inputs: ClassValue[]) {\n return clsx(inputs)\n}\n","import { type ReactNode, type ElementType, type Ref } from 'react'\nimport { cn } from '../utils/cn'\nimport type { PolymorphicProps } from '../utils/polymorphic'\n\ntype ButtonOwnProps = {\n variant?: 'default' | 'primary' | 'secondary' | 'danger' | 'ghost'\n size?: 'sm' | 'md' | 'lg'\n isLoading?: boolean\n loadingText?: string\n icon?: ReactNode\n iconPosition?: 'left' | 'right'\n}\n\nexport type ButtonProps<E extends ElementType = 'button'> = PolymorphicProps<\n E,\n ButtonOwnProps\n>\n\nexport function Button({\n as,\n variant = 'default',\n size = 'md',\n isLoading = false,\n loadingText,\n icon,\n iconPosition = 'left',\n className,\n disabled,\n children,\n ref,\n ...props\n}: ButtonOwnProps & { as?: ElementType; ref?: Ref<any>; className?: string; disabled?: boolean; children?: ReactNode; [key: string]: any }) {\n const Component = as || 'button'\n const isDisabled = disabled || isLoading\n\n return (\n <Component\n ref={ref}\n className={cn(\n 'tb-btn',\n variant !== 'default' && `tb-btn--${variant}`,\n size !== 'md' && `tb-btn--${size}`,\n isLoading && 'tb-btn--loading',\n isLoading && loadingText && 'tb-btn--loading-text',\n isDisabled && 'tb-btn--disabled',\n className,\n )}\n disabled={Component === 'button' ? isDisabled : undefined}\n aria-disabled={Component !== 'button' && isDisabled ? true : undefined}\n {...props}\n >\n {isLoading && (\n <span className=\"tb-btn__spinner\" aria-hidden=\"true\">\n <span className=\"tb-btn__spinner-square\" />\n <span className=\"tb-btn__spinner-square\" />\n <span className=\"tb-btn__spinner-square\" />\n </span>\n )}\n {icon && iconPosition === 'left' && !isLoading && (\n <span className=\"tb-btn__icon\">{icon}</span>\n )}\n <span style={isLoading && !loadingText ? { visibility: 'hidden' } : undefined}>\n {isLoading && loadingText ? loadingText : children}\n </span>\n {icon && iconPosition === 'right' && !isLoading && (\n <span className=\"tb-btn__icon\">{icon}</span>\n )}\n </Component>\n )\n}\n","'use client'\n\nimport {\n type ReactNode,\n type InputHTMLAttributes,\n type Ref,\n useId,\n} from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: string\n error?: string\n hint?: string\n size?: 'sm' | 'md' | 'lg'\n icon?: ReactNode\n iconPosition?: 'left' | 'right'\n ref?: Ref<HTMLInputElement>\n}\n\nexport function Input({\n label,\n error,\n hint,\n size = 'md',\n icon,\n iconPosition = 'left',\n className,\n id: idProp,\n ref,\n ...props\n}: InputProps) {\n const autoId = useId()\n const id = idProp ?? autoId\n const errorId = error ? `${id}-error` : undefined\n const hintId = hint && !error ? `${id}-hint` : undefined\n\n return (\n <div className=\"tb-form-group\">\n {label && (\n <label htmlFor={id} className=\"tb-label\">\n {label}\n </label>\n )}\n <div\n className={cn(\n 'tb-input-wrapper',\n icon && `tb-input-wrapper--icon-${iconPosition}`,\n )}\n >\n {icon && (\n <span className=\"tb-input__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <input\n ref={ref}\n id={id}\n className={cn(\n 'tb-input',\n size !== 'md' && `tb-input--${size}`,\n error && 'tb-input--error',\n className,\n )}\n aria-invalid={error ? true : undefined}\n aria-describedby={errorId ?? hintId}\n {...props}\n />\n </div>\n {error && (\n <span id={errorId} className=\"tb-input__error\" role=\"alert\">\n {error}\n </span>\n )}\n {hint && !error && (\n <span id={hintId} className=\"tb-input__hint\">\n {hint}\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { type TextareaHTMLAttributes, type Ref, useId } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string\n error?: string\n hint?: string\n ref?: Ref<HTMLTextAreaElement>\n}\n\nexport function Textarea({\n label,\n error,\n hint,\n className,\n id: idProp,\n ref,\n ...props\n}: TextareaProps) {\n const autoId = useId()\n const id = idProp ?? autoId\n const errorId = error ? `${id}-error` : undefined\n const hintId = hint && !error ? `${id}-hint` : undefined\n\n return (\n <div className=\"tb-form-group\">\n {label && (\n <label htmlFor={id} className=\"tb-label\">\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n id={id}\n className={cn(\n 'tb-textarea',\n error && 'tb-textarea--error',\n className,\n )}\n aria-invalid={error ? true : undefined}\n aria-describedby={errorId ?? hintId}\n {...props}\n />\n {error && (\n <span id={errorId} className=\"tb-textarea__error\" role=\"alert\">\n {error}\n </span>\n )}\n {hint && !error && (\n <span id={hintId} className=\"tb-textarea__hint\">\n {hint}\n </span>\n )}\n </div>\n )\n}\n","import { type HTMLAttributes, type ElementType, type Ref } from 'react'\nimport { cn } from '../../utils/cn'\n\n/* ── Root ── */\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n brackets?: boolean\n pulse?: boolean\n hoverable?: boolean\n ref?: Ref<HTMLElement>\n}\n\nfunction CardRoot({\n as,\n brackets = false,\n pulse = false,\n hoverable = false,\n className,\n children,\n ref,\n ...props\n}: CardProps) {\n const Component = as || 'div'\n return (\n <Component\n ref={ref}\n className={cn(\n 'tb-card',\n brackets && 'tb-card--bracketed',\n pulse && 'tb-card--pulse',\n hoverable && 'tb-card--hoverable',\n className,\n )}\n {...props}\n >\n {brackets && (\n <>\n <span className=\"tb-card__bracket tb-card__bracket--tl\" />\n <span className=\"tb-card__bracket tb-card__bracket--tr\" />\n <span className=\"tb-card__bracket tb-card__bracket--bl\" />\n <span className=\"tb-card__bracket tb-card__bracket--br\" />\n </>\n )}\n {children}\n </Component>\n )\n}\n\n/* ── Sub-components ── */\n\nexport interface CardSectionProps extends HTMLAttributes<HTMLDivElement> {\n ref?: Ref<HTMLDivElement>\n}\n\nfunction Header({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__header', className)}\n {...props}\n />\n )\n}\n\nfunction Title({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__title', className)}\n {...props}\n />\n )\n}\n\nfunction Body({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__body', className)}\n {...props}\n />\n )\n}\n\nfunction Tags({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__tags', className)}\n {...props}\n />\n )\n}\n\nfunction Footer({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__footer', className)}\n {...props}\n />\n )\n}\n\n/* ── Compound export ── */\n\nexport const Card = Object.assign(CardRoot, {\n Header,\n Title,\n Body,\n Tags,\n Footer,\n})\n","import { type HTMLAttributes, type ReactNode, type Ref } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'default' | 'success' | 'warning' | 'error'\n dot?: boolean\n pulse?: boolean\n children: ReactNode\n ref?: Ref<HTMLSpanElement>\n}\n\nexport function Badge({\n variant = 'default',\n dot = false,\n pulse = false,\n className,\n children,\n ref,\n ...props\n}: BadgeProps) {\n return (\n <span\n ref={ref}\n className={cn(\n 'tb-badge',\n variant !== 'default' && `tb-badge--${variant}`,\n pulse && 'tb-badge--pulse',\n className,\n )}\n {...props}\n >\n {dot && (\n <span\n className={cn(\n 'tb-badge__dot',\n )}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n )\n}\n","import { type HTMLAttributes, type ReactNode, type Ref } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode\n ref?: Ref<HTMLSpanElement>\n}\n\nexport function Tag({ className, children, ref, ...props }: TagProps) {\n return (\n <span ref={ref} className={cn('tb-tag', className)} {...props}>\n {children}\n </span>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface TitleLineProps {\n label: string\n className?: string\n}\n\nexport function TitleLine({ label, className }: TitleLineProps) {\n return (\n <div className={cn('tb-title-line', className)}>\n <span className=\"tb-title-line__label\">{label}</span>\n </div>\n )\n}\n","import { type HTMLAttributes, type ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface CornerBracketsProps extends HTMLAttributes<HTMLDivElement> {\n pulse?: boolean\n children: ReactNode\n ref?: React.Ref<HTMLDivElement>\n}\n\nexport function CornerBrackets({ pulse, children, className, ref, ...props }: CornerBracketsProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-brackets', pulse && 'tb-brackets--pulse', className)}\n {...props}\n >\n <span className=\"tb-brackets__corner tb-brackets__corner--tl\" />\n <span className=\"tb-brackets__corner tb-brackets__corner--tr\" />\n <span className=\"tb-brackets__corner tb-brackets__corner--bl\" />\n <span className=\"tb-brackets__corner tb-brackets__corner--br\" />\n {children}\n </div>\n )\n}\n","'use client'\n\nimport {\n type ReactNode,\n type Ref,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { cn } from '../../utils/cn'\n\n/* ── Context ── */\n\ninterface SelectContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n value: string\n onSelect: (value: string) => void\n placeholder: string\n disabled: boolean\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n itemValues: string[]\n registerItem: (value: string) => void\n unregisterItem: (value: string) => void\n triggerRef: React.RefObject<HTMLButtonElement | null>\n listRef: React.RefObject<HTMLDivElement | null>\n}\n\nexport const SelectContext = createContext<SelectContextValue | null>(null)\n\nexport function useSelectContext() {\n const ctx = useContext(SelectContext)\n if (!ctx) throw new Error('Select compound components must be used within <Select>')\n return ctx\n}\n\n/* ── Root ── */\n\nexport interface SelectProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n disabled?: boolean\n error?: string\n label?: string\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function Select({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n placeholder = 'Select...',\n disabled = false,\n error,\n label,\n children,\n className,\n ref,\n}: SelectProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [open, setOpen] = useState(false)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [itemValues, setItemValues] = useState<string[]>([])\n\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n\n const triggerRef = useRef<HTMLButtonElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n const rootRef = useRef<HTMLDivElement>(null)\n\n const onSelect = useCallback(\n (val: string) => {\n if (!isControlled) setInternalValue(val)\n onValueChange?.(val)\n setOpen(false)\n triggerRef.current?.focus()\n },\n [isControlled, onValueChange],\n )\n\n const registerItem = useCallback((val: string) => {\n setItemValues((prev) => (prev.includes(val) ? prev : [...prev, val]))\n }, [])\n\n const unregisterItem = useCallback((val: string) => {\n setItemValues((prev) => prev.filter((v) => v !== val))\n }, [])\n\n /* Close on click outside */\n useEffect(() => {\n if (!open) return\n function handleClick(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('pointerdown', handleClick)\n return () => document.removeEventListener('pointerdown', handleClick)\n }, [open])\n\n /* Close on Escape */\n useEffect(() => {\n if (!open) return\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setOpen(false)\n triggerRef.current?.focus()\n }\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [open])\n\n /* Reset focused index when opening */\n useEffect(() => {\n if (open) {\n const idx = itemValues.indexOf(value)\n setFocusedIndex(idx >= 0 ? idx : 0)\n }\n }, [open, itemValues, value])\n\n return (\n <SelectContext.Provider\n value={{\n open,\n setOpen,\n value,\n onSelect,\n placeholder,\n disabled,\n focusedIndex,\n setFocusedIndex,\n itemValues,\n registerItem,\n unregisterItem,\n triggerRef,\n listRef,\n }}\n >\n <div\n ref={(node) => {\n (rootRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n className={cn(\n 'tb-select',\n error && 'tb-select--error',\n disabled && 'tb-select--disabled',\n className,\n )}\n >\n {label && <label className=\"tb-select__label\">{label}</label>}\n {children}\n {error && <span className=\"tb-select__error\">{error}</span>}\n </div>\n </SelectContext.Provider>\n )\n}\n","'use client'\n\nimport { type Ref } from 'react'\nimport { cn } from '../../utils/cn'\nimport { useSelectContext } from './Select'\n\nexport interface SelectTriggerProps {\n className?: string\n ref?: Ref<HTMLButtonElement>\n}\n\nexport function SelectTrigger({ className, ref }: SelectTriggerProps) {\n const { open, setOpen, value, placeholder, disabled, triggerRef, itemValues, focusedIndex, setFocusedIndex, onSelect } =\n useSelectContext()\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (disabled) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n if (!open) {\n setOpen(true)\n } else {\n setFocusedIndex(Math.min(focusedIndex + 1, itemValues.length - 1))\n }\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n if (open) {\n setFocusedIndex(Math.max(focusedIndex - 1, 0))\n }\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n if (open && focusedIndex >= 0 && itemValues[focusedIndex]) {\n onSelect(itemValues[focusedIndex])\n } else {\n setOpen(!open)\n }\n break\n }\n }\n }\n\n return (\n <button\n ref={(node) => {\n (triggerRef as React.MutableRefObject<HTMLButtonElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node\n }}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled}\n className={cn('tb-select__trigger', open && 'tb-select__trigger--open', className)}\n onPointerDown={(e) => {\n e.preventDefault()\n if (!disabled) setOpen(!open)\n }}\n onKeyDown={handleKeyDown}\n >\n <span className={cn('tb-select__value', !value && 'tb-select__placeholder')}>\n {value || placeholder}\n </span>\n <span className=\"tb-select__chevron\" aria-hidden=\"true\" />\n </button>\n )\n}\n","'use client'\n\nimport { type ReactNode, type Ref } from 'react'\nimport { cn } from '../../utils/cn'\nimport { useSelectContext } from './Select'\n\nexport interface SelectContentProps {\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function SelectContent({ children, className, ref }: SelectContentProps) {\n const { open, listRef } = useSelectContext()\n\n return (\n <div\n ref={(node) => {\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n role=\"listbox\"\n className={cn('tb-select__dropdown', open && 'tb-select__dropdown--open', className)}\n >\n {children}\n </div>\n )\n}\n","'use client'\n\nimport { type ReactNode, type Ref, useEffect } from 'react'\nimport { cn } from '../../utils/cn'\nimport { useSelectContext } from './Select'\n\nexport interface SelectItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function SelectItem({\n value: itemValue,\n disabled = false,\n children,\n className,\n ref,\n}: SelectItemProps) {\n const { value, onSelect, focusedIndex, setFocusedIndex, itemValues, registerItem, unregisterItem } =\n useSelectContext()\n\n const index = itemValues.indexOf(itemValue)\n const isSelected = value === itemValue\n const isFocused = focusedIndex === index\n\n useEffect(() => {\n registerItem(itemValue)\n return () => unregisterItem(itemValue)\n }, [itemValue, registerItem, unregisterItem])\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={disabled}\n data-focused={isFocused || undefined}\n className={cn(\n 'tb-select__option',\n isSelected && 'tb-select__option--selected',\n isFocused && 'tb-select__option--focused',\n disabled && 'tb-select__option--disabled',\n className,\n )}\n onClick={() => {\n if (!disabled) onSelect(itemValue)\n }}\n onMouseEnter={() => {\n if (!disabled) setFocusedIndex(index)\n }}\n >\n {children}\n </div>\n )\n}\n","'use client'\n\nimport {\n type ReactNode,\n type HTMLAttributes,\n type Ref,\n createContext,\n useContext,\n useEffect,\n useRef,\n useCallback,\n useId,\n} from 'react'\nimport { cn } from '../../utils/cn'\nimport { SafePortal } from '../../utils/SafePortal'\n\n/* ── Context ── */\n\ninterface ModalContextValue {\n onClose: () => void\n titleId: string\n descId: string\n}\n\nconst ModalContext = createContext<ModalContextValue | null>(null)\n\nfunction useModalContext() {\n const ctx = useContext(ModalContext)\n if (!ctx) throw new Error('Modal sub-components must be used within <Modal>')\n return ctx\n}\n\n/* ── Root ── */\n\nexport interface ModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n closeOnEscape?: boolean\n closeOnBackdrop?: boolean\n hideCloseButton?: boolean\n portalTarget?: Element | null\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nfunction ModalRoot({\n open,\n onOpenChange,\n closeOnEscape = true,\n closeOnBackdrop = true,\n hideCloseButton = false,\n portalTarget,\n children,\n className,\n ref,\n}: ModalProps) {\n const modalRef = useRef<HTMLDivElement>(null)\n const previousFocusRef = useRef<HTMLElement | null>(null)\n const uid = useId()\n const titleId = `tb-modal-title-${uid}`\n const descId = `tb-modal-desc-${uid}`\n\n const onClose = useCallback(() => onOpenChange(false), [onOpenChange])\n\n /* ── Scroll lock ── */\n useEffect(() => {\n if (!open) return\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n const originalOverflow = document.body.style.overflow\n const originalPaddingRight = document.body.style.paddingRight\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${scrollbarWidth}px`\n return () => {\n document.body.style.overflow = originalOverflow\n document.body.style.paddingRight = originalPaddingRight\n }\n }, [open])\n\n /* ── Save and restore focus ── */\n useEffect(() => {\n if (open) {\n previousFocusRef.current = document.activeElement as HTMLElement\n requestAnimationFrame(() => {\n const focusable = modalRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n ;(focusable ?? modalRef.current)?.focus()\n })\n } else {\n previousFocusRef.current?.focus()\n }\n }, [open])\n\n /* ── Escape key ── */\n useEffect(() => {\n if (!open || !closeOnEscape) return\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') onOpenChange(false)\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [open, closeOnEscape, onOpenChange])\n\n /* ── Focus trap ── */\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key !== 'Tab' || !modalRef.current) return\n\n const focusable = modalRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault()\n last.focus()\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n },\n [],\n )\n\n return (\n <SafePortal target={portalTarget}>\n <div\n className={cn('tb-modal-overlay', open && 'tb-modal-overlay--open')}\n onClick={(e) => {\n if (closeOnBackdrop && e.target === e.currentTarget) onClose()\n }}\n >\n <div\n ref={(node) => {\n (modalRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descId}\n className={cn('tb-modal', className)}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n >\n {!hideCloseButton && (\n <button\n type=\"button\"\n className=\"tb-modal__close\"\n aria-label=\"Close\"\n onClick={onClose}\n >\n ×\n </button>\n )}\n\n <ModalContext.Provider value={{ onClose, titleId, descId }}>\n {children}\n </ModalContext.Provider>\n </div>\n </div>\n </SafePortal>\n )\n}\n\n/* ── Sub-components ── */\n\ninterface ModalSectionProps extends HTMLAttributes<HTMLDivElement> {\n ref?: Ref<HTMLDivElement>\n}\n\nfunction Title({ className, ref, ...props }: ModalSectionProps) {\n const { titleId } = useModalContext()\n return (\n <h2\n ref={ref as Ref<HTMLHeadingElement>}\n id={titleId}\n className={cn('tb-modal__title', className)}\n {...props}\n />\n )\n}\n\nfunction Body({ className, ref, ...props }: ModalSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-modal__body', className)}\n {...props}\n />\n )\n}\n\nfunction Footer({ className, ref, ...props }: ModalSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-modal__footer', className)}\n {...props}\n />\n )\n}\n\nfunction Close({\n className,\n children,\n ref,\n ...props\n}: HTMLAttributes<HTMLButtonElement> & { ref?: Ref<HTMLButtonElement> }) {\n const { onClose } = useModalContext()\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn('tb-modal__close', className)}\n aria-label=\"Close\"\n onClick={onClose}\n {...props}\n >\n {children ?? '\\u00d7'}\n </button>\n )\n}\n\n/* ── Compound export ── */\n\nexport const Modal = Object.assign(ModalRoot, {\n Title,\n Body,\n Footer,\n Close,\n})\n","'use client'\n\nimport { type ReactNode, useState, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\n\ninterface SafePortalProps {\n children: ReactNode\n target?: Element | null\n}\n\nexport function SafePortal({ children, target }: SafePortalProps) {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n if (!mounted) return null\n\n return createPortal(children, target ?? document.body)\n}\n","'use client'\n\nimport {\n type ReactNode,\n type Ref,\n createContext,\n useCallback,\n useContext,\n useRef,\n useState,\n} from 'react'\nimport { cn } from '../../utils/cn'\n\n/* ── Context ── */\n\ninterface TabsContextValue {\n value: string\n onValueChange: (value: string) => void\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext() {\n const ctx = useContext(TabsContext)\n if (!ctx) throw new Error('Tabs compound components must be used within <Tabs>')\n return ctx\n}\n\n/* ── Tabs (root) ── */\n\nexport interface TabsProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function Tabs({\n value: controlledValue,\n defaultValue = '',\n onValueChange: onValueChangeProp,\n children,\n className,\n ref,\n}: TabsProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n\n const onValueChange = useCallback(\n (val: string) => {\n if (!isControlled) setInternalValue(val)\n onValueChangeProp?.(val)\n },\n [isControlled, onValueChangeProp],\n )\n\n return (\n <TabsContext.Provider value={{ value, onValueChange }}>\n <div ref={ref} className={cn('tb-tabs', className)}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n}\n\n/* ── TabsList ── */\n\nexport interface TabsListProps {\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function TabsList({ children, className, ref }: TabsListProps) {\n const listRef = useRef<HTMLDivElement>(null)\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight') return\n\n const triggers = Array.from(\n (listRef.current ?? (e.currentTarget as HTMLElement)).querySelectorAll<HTMLButtonElement>(\n '.tb-tabs__trigger:not(:disabled)',\n ),\n )\n if (triggers.length === 0) return\n\n const current = document.activeElement as HTMLElement\n const idx = triggers.indexOf(current as HTMLButtonElement)\n if (idx < 0) return\n\n e.preventDefault()\n let next: number\n if (e.key === 'ArrowRight') {\n next = (idx + 1) % triggers.length\n } else {\n next = (idx - 1 + triggers.length) % triggers.length\n }\n triggers[next].focus()\n }\n\n return (\n <div\n ref={(node) => {\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n role=\"tablist\"\n className={cn('tb-tabs__list', className)}\n onKeyDown={handleKeyDown}\n >\n {children}\n </div>\n )\n}\n\n/* ── TabsTrigger ── */\n\nexport interface TabsTriggerProps {\n value: string\n icon?: ReactNode\n disabled?: boolean\n children: ReactNode\n className?: string\n ref?: Ref<HTMLButtonElement>\n}\n\nexport function TabsTrigger({\n value: triggerValue,\n icon,\n disabled = false,\n children,\n className,\n ref,\n}: TabsTriggerProps) {\n const { value, onValueChange } = useTabsContext()\n const isActive = value === triggerValue\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n className={cn(\n 'tb-tabs__trigger',\n isActive && 'tb-tabs__trigger--active',\n disabled && 'tb-tabs__trigger--disabled',\n className,\n )}\n onClick={() => {\n if (!disabled) onValueChange(triggerValue)\n }}\n >\n {icon && <span className=\"tb-tabs__trigger-icon\">{icon}</span>}\n {children}\n </button>\n )\n}\n\n/* ── TabsContent ── */\n\nexport interface TabsContentProps {\n value: string\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function TabsContent({ value: contentValue, children, className, ref }: TabsContentProps) {\n const { value } = useTabsContext()\n const isActive = value === contentValue\n\n if (!isActive) return null\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n className={cn('tb-tabs__content', isActive && 'tb-tabs__content--active', className)}\n >\n {children}\n </div>\n )\n}\n","'use client'\n\nimport { useSyncExternalStore } from 'react'\nimport { cn } from '../../utils/cn'\nimport { SafePortal } from '../../utils/SafePortal'\n\n/* ── Types ── */\n\nexport interface ToastOptions {\n title: string\n description?: string\n type?: 'success' | 'error' | 'warning' | 'info'\n duration?: number | null\n action?: { label: string; onClick: () => void }\n}\n\nexport interface ToastEntry extends ToastOptions {\n id: string\n type: 'success' | 'error' | 'warning' | 'info'\n}\n\n/* ── Module-level store ── */\n\ntype Listener = () => void\n\nlet toasts: ToastEntry[] = []\nlet nextId = 0\nconst listeners = new Set<Listener>()\nconst timers = new Map<string, ReturnType<typeof setTimeout>>()\n\nfunction emit() {\n for (const fn of listeners) fn()\n}\n\nfunction getSnapshot() {\n return toasts\n}\n\nfunction subscribe(fn: Listener) {\n listeners.add(fn)\n return () => listeners.delete(fn)\n}\n\nfunction addToast(options: ToastOptions, maxCount = 3): string {\n const id = `toast-${++nextId}`\n const entry: ToastEntry = {\n ...options,\n id,\n type: options.type ?? 'info',\n }\n\n toasts = [...toasts, entry]\n while (toasts.length > maxCount) {\n const removed = toasts[0]\n toasts = toasts.slice(1)\n const timer = timers.get(removed.id)\n if (timer) {\n clearTimeout(timer)\n timers.delete(removed.id)\n }\n }\n\n const duration = options.duration === undefined ? 3500 : options.duration\n if (duration !== null) {\n const timer = setTimeout(() => {\n timers.delete(id)\n toasts = toasts.filter((t) => t.id !== id)\n emit()\n }, duration)\n timers.set(id, timer)\n }\n\n emit()\n return id\n}\n\nfunction dismissToast(id: string) {\n const timer = timers.get(id)\n if (timer) {\n clearTimeout(timer)\n timers.delete(id)\n }\n toasts = toasts.filter((t) => t.id !== id)\n emit()\n}\n\nfunction dismissAll() {\n timers.forEach((timer) => clearTimeout(timer))\n timers.clear()\n toasts = []\n emit()\n}\n\n/* ── Public toast() function ── */\n\nfunction createToast(options: ToastOptions) {\n return addToast(options)\n}\n\ncreateToast.success = (title: string, options?: Omit<ToastOptions, 'title' | 'type'>) =>\n addToast({ ...options, title, type: 'success' })\n\ncreateToast.error = (title: string, options?: Omit<ToastOptions, 'title' | 'type'>) =>\n addToast({ ...options, title, type: 'error' })\n\ncreateToast.warning = (title: string, options?: Omit<ToastOptions, 'title' | 'type'>) =>\n addToast({ ...options, title, type: 'warning' })\n\ncreateToast.info = (title: string, options?: Omit<ToastOptions, 'title' | 'type'>) =>\n addToast({ ...options, title, type: 'info' })\n\ncreateToast.dismiss = dismissToast\ncreateToast.dismissAll = dismissAll\n\nexport { createToast as toast }\n\n/* ── Icons ── */\n\nconst ICONS: Record<string, string> = {\n success: '\\u2713',\n error: '\\u2717',\n warning: '\\u26A0',\n info: '\\u2139',\n}\n\n/* ── <Toaster /> ── */\n\nexport interface ToasterProps {\n position?: 'top-right' | 'top-center' | 'bottom-right' | 'bottom-center'\n}\n\nexport function Toaster({ position = 'top-right' }: ToasterProps) {\n const currentToasts = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n if (currentToasts.length === 0) return null\n\n return (\n <SafePortal>\n <div\n className={cn('tb-toast-container', `tb-toast-container--${position}`)}\n aria-live=\"polite\"\n >\n {currentToasts.map((t) => (\n <div\n key={t.id}\n className={cn('tb-toast', `tb-toast--${t.type}`, 'tb-toast--show')}\n role=\"alert\"\n >\n <span className=\"tb-toast__icon\" aria-hidden=\"true\">\n {ICONS[t.type]}\n </span>\n\n <div className=\"tb-toast__content\">\n <span className=\"tb-toast__title\">{t.title}</span>\n {t.description && <span className=\"tb-toast__description\">{t.description}</span>}\n </div>\n\n {t.action && (\n <button\n type=\"button\"\n className=\"tb-toast__action\"\n onClick={() => {\n t.action!.onClick()\n dismissToast(t.id)\n }}\n >\n {t.action.label}\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"tb-toast__dismiss\"\n aria-label=\"Dismiss\"\n onClick={() => dismissToast(t.id)}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n </SafePortal>\n )\n}\n","import { type ReactNode, type Ref } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface TooltipProps {\n content: ReactNode\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function Tooltip({\n content,\n side = 'top',\n align = 'center',\n children,\n className,\n ref,\n}: TooltipProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-tooltip-wrap', className)}\n >\n {children}\n <span\n role=\"tooltip\"\n className={cn(\n 'tb-tooltip',\n `tb-tooltip--${side}`,\n align !== 'center' && `tb-tooltip--align-${align}`,\n )}\n >\n {content}\n </span>\n </div>\n )\n}\n","import { type ReactNode, type Ref, useState, useEffect, useRef } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface NavDropdownItem {\n label: string\n href?: string\n icon?: ReactNode\n onClick?: () => void\n}\n\nexport interface NavDropdownProps {\n trigger: string | ReactNode\n items: NavDropdownItem[]\n align?: 'left' | 'center' | 'right'\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function NavDropdown({ trigger, items, align = 'left', className, ref }: NavDropdownProps) {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n function handlePointer(e: PointerEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('pointerdown', handlePointer)\n return () => document.removeEventListener('pointerdown', handlePointer)\n }, [open])\n\n return (\n <div\n ref={(node) => {\n (rootRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n className={cn('tb-nav-item', open && 'tb-nav-item--open', align !== 'left' && `tb-nav-item--align-${align}`, className)}\n >\n <button\n type=\"button\"\n className=\"tb-nav-item__trigger\"\n onClick={() => setOpen(!open)}\n >\n {typeof trigger === 'string' ? <span>{trigger}</span> : trigger}\n <span className=\"tb-nav-item__chevron\" aria-hidden=\"true\" />\n </button>\n\n <div className={cn('tb-nav-dropdown', open && 'tb-nav-dropdown--open')}>\n {items.map((item, i) => {\n const content = (\n <>\n {item.icon && <span className=\"tb-nav-dropdown__icon\">{item.icon}</span>}\n <span>{item.label}</span>\n </>\n )\n\n if (item.href) {\n return (\n <a\n key={i}\n href={item.href}\n className=\"tb-nav-dropdown__item\"\n onClick={() => { setOpen(false); item.onClick?.() }}\n >\n {content}\n </a>\n )\n }\n\n return (\n <button\n key={i}\n type=\"button\"\n className=\"tb-nav-dropdown__item\"\n onClick={() => { setOpen(false); item.onClick?.() }}\n >\n {content}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { type ReactNode, type Ref, useState } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface CheckboxProps {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n disabled?: boolean\n label?: string | ReactNode\n error?: string\n ref?: Ref<HTMLInputElement>\n className?: string\n}\n\nexport function Checkbox({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n label,\n error,\n ref,\n className,\n}: CheckboxProps) {\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isControlled = controlledChecked !== undefined\n const isChecked = isControlled ? controlledChecked : internalChecked\n\n function handleChange() {\n if (disabled) return\n const next = !isChecked\n if (!isControlled) setInternalChecked(next)\n onCheckedChange?.(next)\n }\n\n return (\n <div>\n <label\n className={cn(\n 'tb-checkbox',\n error && 'tb-checkbox--error',\n className,\n )}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n checked={isChecked}\n disabled={disabled}\n onChange={handleChange}\n />\n {label && <span>{label}</span>}\n </label>\n {error && (\n <span style={{ color: 'var(--tb-error)', fontSize: '0.5rem', letterSpacing: '0.2em', marginTop: 4, display: 'block' }}>\n {error}\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { type Ref, useState } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface ToggleProps {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n disabled?: boolean\n label?: string\n ref?: Ref<HTMLInputElement>\n className?: string\n}\n\nexport function Toggle({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n label,\n ref,\n className,\n}: ToggleProps) {\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isControlled = controlledChecked !== undefined\n const isChecked = isControlled ? controlledChecked : internalChecked\n\n function handleChange() {\n if (disabled) return\n const next = !isChecked\n if (!isControlled) setInternalChecked(next)\n onCheckedChange?.(next)\n }\n\n return (\n <label\n className={cn(\n 'tb-toggle',\n isChecked && 'tb-toggle--checked',\n disabled && 'tb-toggle--disabled',\n className,\n )}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n className=\"tb-toggle__input\"\n checked={isChecked}\n disabled={disabled}\n onChange={handleChange}\n />\n <span className=\"tb-toggle__track\" aria-hidden=\"true\">\n <span className=\"tb-toggle__thumb\" />\n </span>\n {label && <span className=\"tb-toggle__label\">{label}</span>}\n </label>\n )\n}\n","'use client'\n\nimport { type ReactNode, createContext, useContext, useState } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface RadioGroupProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n disabled?: boolean\n label?: string\n orientation?: 'horizontal' | 'vertical'\n children: ReactNode\n className?: string\n}\n\nexport interface RadioItemProps {\n value: string\n label: string\n disabled?: boolean\n className?: string\n}\n\ninterface RadioContextValue {\n value: string\n onChange: (value: string) => void\n disabled: boolean\n name: string\n}\n\nconst RadioContext = createContext<RadioContextValue | null>(null)\n\nlet radioGroupId = 0\n\nexport function RadioGroup({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n disabled = false,\n label,\n orientation = 'vertical',\n children,\n className,\n}: RadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const isControlled = controlledValue !== undefined\n const currentValue = isControlled ? controlledValue : internalValue\n const [name] = useState(() => `tb-radio-group-${++radioGroupId}`)\n\n function handleChange(val: string) {\n if (!isControlled) setInternalValue(val)\n onValueChange?.(val)\n }\n\n return (\n <RadioContext.Provider value={{ value: currentValue, onChange: handleChange, disabled, name }}>\n <fieldset\n className={cn(\n 'tb-radio-group',\n orientation === 'horizontal' && 'tb-radio-group--horizontal',\n disabled && 'tb-radio-group--disabled',\n className,\n )}\n disabled={disabled}\n >\n {label && <legend className=\"tb-radio-group__label\">{label}</legend>}\n {children}\n </fieldset>\n </RadioContext.Provider>\n )\n}\n\nexport function RadioItem({\n value,\n label,\n disabled: itemDisabled = false,\n className,\n}: RadioItemProps) {\n const ctx = useContext(RadioContext)\n if (!ctx) throw new Error('RadioItem must be used within a RadioGroup')\n\n const isDisabled = ctx.disabled || itemDisabled\n const isChecked = ctx.value === value\n\n return (\n <label\n className={cn(\n 'tb-radio',\n isChecked && 'tb-radio--checked',\n isDisabled && 'tb-radio--disabled',\n className,\n )}\n >\n <input\n type=\"radio\"\n name={ctx.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => ctx.onChange(value)}\n />\n {label}\n </label>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface ProgressProps {\n value: number\n variant?: 'default' | 'success' | 'warning' | 'error'\n animated?: boolean\n indeterminate?: boolean\n label?: string\n showValue?: boolean\n className?: string\n}\n\nexport function Progress({\n value,\n variant = 'default',\n animated = false,\n indeterminate = false,\n label,\n showValue = false,\n className,\n}: ProgressProps) {\n const clampedValue = Math.max(0, Math.min(100, value))\n\n return (\n <div\n className={cn(\n 'tb-progress',\n variant !== 'default' && `tb-progress--${variant}`,\n animated && 'tb-progress--animated',\n indeterminate && 'tb-progress--indeterminate',\n className,\n )}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n >\n {label && <span className=\"tb-progress__label\">{label}</span>}\n <div className=\"tb-progress__track\">\n <div\n className=\"tb-progress__fill\"\n style={indeterminate ? undefined : { width: `${clampedValue}%` }}\n />\n </div>\n {showValue && !indeterminate && (\n <span className=\"tb-progress__value\">{clampedValue}%</span>\n )}\n </div>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface BatteryProps {\n value: number\n total?: number\n variant?: 'default' | 'success' | 'warning' | 'error'\n animated?: boolean\n label?: string\n className?: string\n}\n\nexport function Battery({\n value,\n total = 10,\n variant = 'default',\n animated = false,\n label,\n className,\n}: BatteryProps) {\n const clampedValue = Math.max(0, Math.min(total, value))\n\n return (\n <div\n className={cn(\n 'tb-battery',\n variant !== 'default' && `tb-battery--${variant}`,\n animated && 'tb-battery--animated',\n className,\n )}\n role=\"meter\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-label={label}\n >\n {label && <span className=\"tb-battery__label\">{label}</span>}\n <div className=\"tb-battery__body\">\n <div className=\"tb-battery__cap\" />\n <div className=\"tb-battery__segments\">\n {Array.from({ length: total }, (_, i) => (\n <div\n key={i}\n className={cn(\n 'tb-battery__segment',\n i < clampedValue && 'tb-battery__segment--filled',\n )}\n />\n ))}\n </div>\n </div>\n </div>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface BatteryInlineProps {\n value: number\n total?: number\n variant?: 'default' | 'success' | 'warning' | 'error'\n animated?: boolean\n label?: string\n showValue?: boolean\n className?: string\n}\n\nexport function BatteryInline({\n value,\n total = 10,\n variant = 'default',\n animated = false,\n label,\n showValue = false,\n className,\n}: BatteryInlineProps) {\n const clampedValue = Math.max(0, Math.min(total, value))\n const percent = Math.round((clampedValue / total) * 100)\n\n return (\n <div\n className={cn(\n 'tb-battery tb-battery--inline',\n animated && 'tb-battery--animated',\n className,\n )}\n role=\"meter\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-label={label}\n >\n {label && <span className=\"tb-battery__label\">{label}</span>}\n <div className=\"tb-battery__track\">\n {Array.from({ length: total }, (_, i) => (\n <div\n key={i}\n className={cn(\n 'tb-battery__segment',\n i < clampedValue && 'tb-battery__segment--filled',\n i < clampedValue && variant !== 'default' && `tb-battery__segment--${variant}`,\n )}\n />\n ))}\n </div>\n <div className=\"tb-battery__cap\" />\n {showValue && (\n <span className=\"tb-battery__value\">\n {percent}%\n </span>\n )}\n </div>\n )\n}\n","import { type ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface Column<T> {\n id: string\n header: string\n accessor: keyof T | ((row: T) => ReactNode)\n cell?: (value: any, row: T) => ReactNode\n}\n\nexport interface TableProps<T> {\n columns: Column<T>[]\n data: T[]\n onRowClick?: (row: T) => void\n className?: string\n}\n\nfunction getCellValue<T>(row: T, accessor: Column<T>['accessor']): any {\n if (typeof accessor === 'function') return accessor(row)\n return row[accessor]\n}\n\nexport function Table<T>({\n columns,\n data,\n onRowClick,\n className,\n}: TableProps<T>) {\n return (\n <div className={cn('tb-table__wrapper', className)}>\n <table className=\"tb-table\">\n <thead className=\"tb-table__head\">\n <tr className=\"tb-table__row\">\n {columns.map((col) => (\n <th key={col.id} className=\"tb-table__th\">\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"tb-table__body\">\n {data.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className={cn(\n 'tb-table__row',\n onRowClick && 'tb-table__row--clickable',\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => {\n const value = getCellValue(row, col.accessor)\n return (\n <td key={col.id} className=\"tb-table__td\">\n {col.cell ? col.cell(value, row) : value}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface SkeletonProps {\n variant?: 'text' | 'heading' | 'avatar' | 'card'\n width?: string | number\n height?: string | number\n lines?: number\n className?: string\n}\n\nexport function Skeleton({\n variant = 'text',\n width,\n height,\n lines = 1,\n className,\n}: SkeletonProps) {\n const style: React.CSSProperties = {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n }\n\n if (variant === 'text' && lines > 1) {\n return (\n <div className={cn('tb-skeleton__group', className)}>\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={i}\n className={cn(\n 'tb-skeleton',\n 'tb-skeleton--text',\n )}\n style={i === lines - 1 ? { ...style, width: style.width ?? '75%' } : style}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\n 'tb-skeleton',\n `tb-skeleton--${variant}`,\n className,\n )}\n style={style}\n />\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface SpinnerProps {\n variant?: 'bracket' | 'multi-square'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nexport function Spinner({\n variant = 'multi-square',\n size = 'md',\n className,\n}: SpinnerProps) {\n return (\n <span\n className={cn(\n 'tb-spinner',\n `tb-spinner--${variant}`,\n size !== 'md' && `tb-spinner--${size}`,\n className,\n )}\n role=\"status\"\n aria-label=\"Loading\"\n >\n {variant === 'multi-square' && (\n <>\n <span className=\"tb-spinner__square\" />\n <span className=\"tb-spinner__square\" />\n <span className=\"tb-spinner__square\" />\n <span className=\"tb-spinner__square\" />\n <span className=\"tb-spinner__square\" />\n </>\n )}\n </span>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface PaginationProps {\n page: number\n totalPages: number\n onPageChange: (page: number) => void\n siblingCount?: number\n className?: string\n}\n\nfunction getPageRange(page: number, totalPages: number, siblingCount: number): (number | 'ellipsis')[] {\n const totalSlots = siblingCount * 2 + 5 // siblings + first + last + current + 2 ellipsis slots\n\n if (totalPages <= totalSlots) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const leftSibling = Math.max(page - siblingCount, 2)\n const rightSibling = Math.min(page + siblingCount, totalPages - 1)\n\n const showLeftEllipsis = leftSibling > 2\n const showRightEllipsis = rightSibling < totalPages - 1\n\n const pages: (number | 'ellipsis')[] = [1]\n\n if (showLeftEllipsis) {\n pages.push('ellipsis')\n } else {\n for (let i = 2; i < leftSibling; i++) pages.push(i)\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) pages.push(i)\n\n if (showRightEllipsis) {\n pages.push('ellipsis')\n } else {\n for (let i = rightSibling + 1; i < totalPages; i++) pages.push(i)\n }\n\n pages.push(totalPages)\n return pages\n}\n\nexport function Pagination({\n page,\n totalPages,\n onPageChange,\n siblingCount = 1,\n className,\n}: PaginationProps) {\n const pages = getPageRange(page, totalPages, siblingCount)\n\n return (\n <nav className={cn('tb-pagination', className)} aria-label=\"Pagination\">\n <button\n className=\"tb-pagination__btn tb-pagination__btn--prev\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n aria-label=\"Previous page\"\n >\n ‹\n </button>\n\n {pages.map((p, i) =>\n p === 'ellipsis' ? (\n <span key={`ellipsis-${i}`} className=\"tb-pagination__ellipsis\">\n ...\n </span>\n ) : (\n <button\n key={p}\n className={cn(\n 'tb-pagination__btn',\n p === page && 'tb-pagination__btn--active',\n )}\n onClick={() => onPageChange(p)}\n aria-current={p === page ? 'page' : undefined}\n >\n {p}\n </button>\n ),\n )}\n\n <button\n className=\"tb-pagination__btn tb-pagination__btn--next\"\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n aria-label=\"Next page\"\n >\n ›\n </button>\n </nav>\n )\n}\n","import { type ReactNode, type ElementType } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface BreadcrumbItem {\n label: string\n href?: string\n}\n\nexport interface BreadcrumbsProps {\n items: BreadcrumbItem[]\n separator?: ReactNode\n linkComponent?: ElementType\n className?: string\n}\n\nexport function Breadcrumbs({\n items,\n separator = '/',\n linkComponent,\n className,\n}: BreadcrumbsProps) {\n const LinkComponent = linkComponent || 'a'\n\n return (\n <nav className={cn('tb-breadcrumbs', className)} aria-label=\"Breadcrumb\">\n <ol className=\"tb-breadcrumbs__list\">\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n return (\n <li key={i} className=\"tb-breadcrumbs__item\">\n {item.href && !isLast ? (\n <LinkComponent href={item.href} className=\"tb-breadcrumbs__link\">\n {item.label}\n </LinkComponent>\n ) : (\n <span\n className=\"tb-breadcrumbs__current\"\n aria-current={isLast ? 'page' : undefined}\n >\n {item.label}\n </span>\n )}\n {!isLast && (\n <span className=\"tb-breadcrumbs__separator\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","'use client'\n\nimport { useState, useRef, useEffect, type ReactNode, type HTMLAttributes } from 'react'\nimport { cn } from '../utils/cn'\n\n/* ═══════════════════════════════════════\n Toolbar — Floating control bar\n ═══════════════════════════════════════ */\n\nexport interface ToolbarSelectOption {\n label: string\n value: string\n meta?: string\n}\n\nexport interface ToolbarSelectProps {\n options: ToolbarSelectOption[]\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n /** Dropdown opens downward instead of upward */\n dropDown?: boolean\n /** Minimum width of the trigger */\n minWidth?: number\n className?: string\n}\n\nexport interface ToolbarProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed position on the viewport */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n /** If true, uses position: fixed */\n fixed?: boolean\n children?: ReactNode\n ref?: React.Ref<HTMLDivElement>\n}\n\n/* ── Toolbar.Select (dropdown inside toolbar) ── */\nfunction ToolbarSelect({\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n dropDown = false,\n minWidth,\n className,\n}: ToolbarSelectProps) {\n const [internalValue, setInternalValue] = useState(defaultValue ?? options[0]?.value ?? '')\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n const value = controlledValue ?? internalValue\n const activeOption = options.find(o => o.value === value)\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('click', handleClick)\n return () => document.removeEventListener('click', handleClick)\n }, [])\n\n function select(opt: ToolbarSelectOption) {\n if (controlledValue === undefined) setInternalValue(opt.value)\n onChange?.(opt.value)\n setOpen(false)\n }\n\n return (\n <div\n ref={ref}\n className={cn('tb-toolbar__select', open && 'tb-toolbar__select--open', className)}\n >\n <button\n type=\"button\"\n className=\"tb-toolbar__trigger\"\n style={minWidth ? { minWidth } : undefined}\n onClick={(e) => { e.stopPropagation(); setOpen(!open) }}\n >\n <span>{activeOption?.label ?? ''}</span>\n <span className=\"tb-toolbar__chevron\" />\n </button>\n <div className={cn('tb-toolbar__dropdown', dropDown && 'tb-toolbar__dropdown--down')}>\n {options.map((opt) => (\n <div\n key={opt.value}\n className={cn('tb-toolbar__option', opt.value === value && 'tb-toolbar__option--active')}\n style={{ fontFamily: opt.value }}\n onClick={() => select(opt)}\n >\n {opt.label}\n {opt.meta && <span className=\"tb-toolbar__option-meta\">{opt.meta}</span>}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n/* ── Toolbar.Label ── */\nfunction ToolbarLabel({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('tb-toolbar__label', className)} {...props}>{children}</span>\n}\n\n/* ── Toolbar.Divider ── */\nfunction ToolbarDivider({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('tb-toolbar__divider', className)} {...props} />\n}\n\n/* ── Toolbar (root) ── */\nfunction ToolbarRoot({ position, fixed = false, children, className, ref, ...props }: ToolbarProps) {\n return (\n <div\n ref={ref}\n className={cn(\n 'tb-toolbar',\n fixed && 'tb-toolbar--fixed',\n position && `tb-toolbar--${position}`,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n\n/* ── Compound export ── */\nexport const Toolbar = Object.assign(ToolbarRoot, {\n Label: ToolbarLabel,\n Select: ToolbarSelect,\n Divider: ToolbarDivider,\n})\n","'use client'\n\nimport {\n createContext,\n useContext,\n useState,\n type ReactNode,\n type HTMLAttributes,\n type ElementType,\n type Ref,\n} from 'react'\nimport { cn } from '../../utils/cn'\nimport type { PolymorphicProps } from '../../utils/polymorphic'\n\n/* ── Context ── */\n\ninterface SidenavContextValue {\n iconPosition: 'left' | 'right'\n borderSide: 'left' | 'right'\n}\n\nconst SidenavContext = createContext<SidenavContextValue>({\n iconPosition: 'left',\n borderSide: 'left',\n})\n\nexport function useSidenavContext() {\n return useContext(SidenavContext)\n}\n\n/* ── Root ── */\n\nexport interface SidenavProps extends HTMLAttributes<HTMLElement> {\n iconPosition?: 'left' | 'right'\n borderSide?: 'left' | 'right'\n ref?: Ref<HTMLElement>\n}\n\nfunction SidenavRoot({\n iconPosition = 'left',\n borderSide = 'left',\n className,\n children,\n ref,\n ...props\n}: SidenavProps) {\n return (\n <SidenavContext.Provider value={{ iconPosition, borderSide }}>\n <nav\n ref={ref}\n className={cn(\n 'tb-sidenav',\n iconPosition === 'right' && 'tb-sidenav--icon-right',\n borderSide === 'right' && 'tb-sidenav--border-right',\n className,\n )}\n {...props}\n >\n {children}\n </nav>\n </SidenavContext.Provider>\n )\n}\n\n/* ── Item ── */\n\ntype SidenavItemOwnProps = {\n active?: boolean\n}\n\nexport type SidenavItemProps<E extends ElementType = 'a'> = PolymorphicProps<\n E,\n SidenavItemOwnProps\n>\n\nfunction Item({\n as,\n active = false,\n className,\n children,\n ref,\n ...props\n}: SidenavItemProps<ElementType> & { ref?: Ref<any> }) {\n const Component = as || 'a'\n return (\n <Component\n ref={ref}\n className={cn(\n 'tb-sidenav__item',\n active && 'tb-sidenav__item--active',\n className,\n )}\n {...props}\n >\n {children}\n </Component>\n )\n}\n\n/* ── Icon ── */\n\nexport interface SidenavIconProps extends HTMLAttributes<HTMLSpanElement> {\n ref?: Ref<HTMLSpanElement>\n}\n\nfunction Icon({ className, ref, ...props }: SidenavIconProps) {\n return (\n <span\n ref={ref}\n className={cn('tb-sidenav__icon', className)}\n {...props}\n />\n )\n}\n\n/* ── Group ── */\n\nexport interface SidenavGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n label: string\n icon?: ReactNode\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n children: ReactNode\n ref?: Ref<HTMLDivElement>\n}\n\nfunction Group({\n label,\n icon,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n children,\n ref,\n ...props\n}: SidenavGroupProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n function toggle() {\n const next = !isOpen\n if (!isControlled) setInternalOpen(next)\n onOpenChange?.(next)\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'tb-sidenav__group',\n isOpen && 'tb-sidenav__group--open',\n className,\n )}\n {...props}\n >\n <button\n type=\"button\"\n className=\"tb-sidenav__group-trigger\"\n onClick={toggle}\n aria-expanded={isOpen}\n >\n {icon && <span className=\"tb-sidenav__icon\">{icon}</span>}\n {label}\n <span className=\"tb-sidenav__group-chevron material-symbols-outlined\" aria-hidden=\"true\">\n expand_more\n </span>\n </button>\n <div className=\"tb-sidenav__group-content\">\n {children}\n </div>\n </div>\n )\n}\n\n/* ── Compound export ── */\n\nexport const Sidenav = Object.assign(SidenavRoot, {\n Item,\n Icon,\n Group,\n})\n","'use client'\n\nimport { useState, useRef, type ReactNode, type HTMLAttributes, type Ref } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n copyText?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function CodeBlock({ children, copyText, className, ref, ...props }: CodeBlockProps) {\n const [copied, setCopied] = useState(false)\n const contentRef = useRef<HTMLDivElement>(null)\n\n async function handleCopy() {\n const text = copyText ?? contentRef.current?.textContent ?? ''\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <div ref={ref} className={cn('tb-code-block', className)} {...props}>\n <div ref={contentRef}>{children}</div>\n <button\n type=\"button\"\n className={cn('tb-code-block__copy', copied && 'tb-code-block__copy--copied')}\n onClick={handleCopy}\n aria-label={copied ? 'Copied' : 'Copy to clipboard'}\n >\n <span className=\"material-symbols-outlined\" style={{ fontSize: 14 }}>\n {copied ? 'check' : 'content_copy'}\n </span>\n </button>\n </div>\n )\n}\n","'use client'\n\nimport {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n type ReactNode,\n} from 'react'\n\n/* ── Types ── */\n\nexport type Theme = 'dark' | 'light'\nexport type Contrast = 'enhanced' | 'high'\n\nexport interface ThemeContextValue {\n theme: Theme\n setTheme: (theme: Theme) => void\n contrast: Contrast\n setContrast: (contrast: Contrast) => void\n toggleTheme: () => void\n}\n\nexport interface ThemeProviderProps {\n theme?: Theme\n contrast?: Contrast\n defaultTheme?: Theme\n defaultContrast?: Contrast\n onThemeChange?: (theme: Theme) => void\n onContrastChange?: (contrast: Contrast) => void\n children: ReactNode\n}\n\n/* ── Context ── */\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext)\n if (!ctx) throw new Error('useTheme must be used within <ThemeProvider>')\n return ctx\n}\n\n/* ── Provider ── */\n\nexport function ThemeProvider({\n theme: controlledTheme,\n contrast: controlledContrast,\n defaultTheme = 'dark',\n defaultContrast = 'enhanced',\n onThemeChange,\n onContrastChange,\n children,\n}: ThemeProviderProps) {\n const isThemeControlled = controlledTheme !== undefined\n const isContrastControlled = controlledContrast !== undefined\n\n const [internalTheme, setInternalTheme] = useState<Theme>(defaultTheme)\n const [internalContrast, setInternalContrast] = useState<Contrast>(defaultContrast)\n\n const theme = isThemeControlled ? controlledTheme : internalTheme\n const contrast = isContrastControlled ? controlledContrast : internalContrast\n\n const setTheme = useCallback(\n (next: Theme) => {\n if (!isThemeControlled) setInternalTheme(next)\n onThemeChange?.(next)\n },\n [isThemeControlled, onThemeChange],\n )\n\n const setContrast = useCallback(\n (next: Contrast) => {\n if (!isContrastControlled) setInternalContrast(next)\n onContrastChange?.(next)\n },\n [isContrastControlled, onContrastChange],\n )\n\n const toggleTheme = useCallback(\n () => setTheme(theme === 'dark' ? 'light' : 'dark'),\n [theme, setTheme],\n )\n\n /* ── Sync to <html> attributes ── */\n useEffect(() => {\n const root = document.documentElement\n root.setAttribute('data-theme', theme)\n\n if (contrast === 'high') {\n root.setAttribute('data-contrast', 'high')\n } else {\n root.removeAttribute('data-contrast')\n }\n }, [theme, contrast])\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, contrast, setContrast, toggleTheme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n","import { useState, useCallback } from 'react'\n\ninterface UseDisclosureOptions {\n defaultOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n}\n\ninterface UseDisclosureReturn {\n isOpen: boolean\n onOpen: () => void\n onClose: () => void\n onToggle: () => void\n}\n\nexport function useDisclosure(options: UseDisclosureOptions = {}): UseDisclosureReturn {\n const { defaultOpen = false, onOpen: onOpenCallback, onClose: onCloseCallback } = options\n const [isOpen, setIsOpen] = useState(defaultOpen)\n\n const onOpen = useCallback(() => {\n setIsOpen(true)\n onOpenCallback?.()\n }, [onOpenCallback])\n\n const onClose = useCallback(() => {\n setIsOpen(false)\n onCloseCallback?.()\n }, [onCloseCallback])\n\n const onToggle = useCallback(() => {\n if (isOpen) {\n onClose()\n } else {\n onOpen()\n }\n }, [isOpen, onOpen, onClose])\n\n return { isOpen, onOpen, onClose, onToggle }\n}\n","import { useEffect, useRef } from 'react'\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ')\n\nexport function useFocusTrap(ref: React.RefObject<HTMLElement | null>, active: boolean): void {\n const previouslyFocusedRef = useRef<HTMLElement | null>(null)\n\n useEffect(() => {\n if (!active || !ref.current) return\n\n // Store the currently focused element so we can restore it later\n previouslyFocusedRef.current = document.activeElement as HTMLElement | null\n\n const container = ref.current\n const focusableElements = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n\n // Focus the first focusable element when activated\n if (focusableElements.length > 0) {\n focusableElements[0].focus()\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') return\n\n const focusable = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey) {\n // Shift+Tab: if on first element, wrap to last\n if (document.activeElement === first) {\n e.preventDefault()\n last.focus()\n }\n } else {\n // Tab: if on last element, wrap to first\n if (document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n\n // Restore focus to the previously focused element\n if (previouslyFocusedRef.current && typeof previouslyFocusedRef.current.focus === 'function') {\n previouslyFocusedRef.current.focus()\n }\n }\n }, [active, ref])\n}\n","import { useState, useCallback } from 'react'\n\ninterface UseKeyboardNavOptions {\n orientation?: 'horizontal' | 'vertical'\n loop?: boolean\n onSelect?: (index: number) => void\n}\n\ninterface UseKeyboardNavReturn {\n activeIndex: number\n setActiveIndex: (index: number) => void\n onKeyDown: (e: React.KeyboardEvent) => void\n}\n\nexport function useKeyboardNav(\n items: React.RefObject<(HTMLElement | null)[]>,\n options: UseKeyboardNavOptions = {}\n): UseKeyboardNavReturn {\n const { orientation = 'vertical', loop = true, onSelect } = options\n const [activeIndex, setActiveIndex] = useState(0)\n\n const prevKey = orientation === 'vertical' ? 'ArrowUp' : 'ArrowLeft'\n const nextKey = orientation === 'vertical' ? 'ArrowDown' : 'ArrowRight'\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const list = items.current\n if (!list || list.length === 0) return\n\n const count = list.length\n\n if (e.key === nextKey) {\n e.preventDefault()\n setActiveIndex((prev) => {\n const next = prev + 1\n if (next >= count) {\n const wrapped = loop ? 0 : prev\n list[wrapped]?.focus()\n return wrapped\n }\n list[next]?.focus()\n return next\n })\n } else if (e.key === prevKey) {\n e.preventDefault()\n setActiveIndex((prev) => {\n const next = prev - 1\n if (next < 0) {\n const wrapped = loop ? count - 1 : prev\n list[wrapped]?.focus()\n return wrapped\n }\n list[next]?.focus()\n return next\n })\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect?.(activeIndex)\n } else if (e.key === 'Home') {\n e.preventDefault()\n setActiveIndex(0)\n list[0]?.focus()\n } else if (e.key === 'End') {\n e.preventDefault()\n const last = count - 1\n setActiveIndex(last)\n list[last]?.focus()\n }\n },\n [items, activeIndex, prevKey, nextKey, loop, onSelect]\n )\n\n return { activeIndex, setActiveIndex, onKeyDown }\n}\n","'use client'\n\nimport { useState, useEffect } from 'react'\n\nexport function useReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false)\n\n useEffect(() => {\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)')\n setReduced(mq.matches)\n const handler = (e: MediaQueryListEvent) => setReduced(e.matches)\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [])\n\n return reduced\n}\n","import { type Ref, type RefCallback, type MutableRefObject, useCallback } from 'react'\n\nexport function useMergedRef<T>(...refs: (Ref<T> | undefined)[]): RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useCallback((node: T | null) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as MutableRefObject<T | null>).current = node\n })\n }, refs)\n}\n"],"mappings":"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","names":["jsx","jsxs","useId","jsx","jsxs","useId","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","useEffect","jsx","useEffect","createContext","useContext","useEffect","useRef","useCallback","useId","useState","useEffect","jsx","jsxs","createContext","useContext","useRef","useId","useCallback","useEffect","Title","Body","Footer","createContext","useCallback","useContext","useRef","useState","jsx","jsxs","createContext","useContext","useState","useCallback","useRef","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useEffect","useRef","Fragment","jsx","jsxs","useState","useRef","useEffect","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","createContext","useContext","useState","jsx","jsxs","createContext","useState","useContext","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","useState","useRef","useEffect","createContext","useContext","useState","jsx","jsxs","createContext","jsx","useState","jsxs","useState","useRef","jsx","jsxs","useState","useRef","createContext","useContext","useState","useEffect","useCallback","jsx","useState","useCallback","useEffect","useRef","useState","useCallback","useState","useEffect","useCallback"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/cn.ts","../src/components/Button.tsx","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/Card/Card.tsx","../src/components/Badge.tsx","../src/components/Tag.tsx","../src/components/TitleLine.tsx","../src/components/CornerBrackets.tsx","../src/components/Select/Select.tsx","../src/components/Select/SelectTrigger.tsx","../src/components/Select/SelectContent.tsx","../src/components/Select/SelectItem.tsx","../src/components/Modal/Modal.tsx","../src/utils/SafePortal.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Toast/ToastProvider.tsx","../src/components/Tooltip.tsx","../src/components/NavDropdown.tsx","../src/components/Checkbox.tsx","../src/components/Toggle.tsx","../src/components/Radio.tsx","../src/components/Progress.tsx","../src/components/Battery.tsx","../src/components/BatteryInline.tsx","../src/components/Table.tsx","../src/components/Skeleton.tsx","../src/components/Spinner.tsx","../src/components/Pagination.tsx","../src/components/Breadcrumbs.tsx","../src/components/Toolbar.tsx","../src/components/Sidenav/Sidenav.tsx","../src/components/CodeBlock.tsx","../src/components/ThemeProvider.tsx","../src/hooks/useDisclosure.ts","../src/hooks/useFocusTrap.ts","../src/hooks/useKeyboardNav.ts","../src/hooks/useReducedMotion.ts","../src/hooks/useMergedRef.ts"],"sourcesContent":["import '@terminal-blueprint/core/css'\n\n// Phase 1 — Foundation\nexport { Button } from './components/Button'\nexport type { ButtonProps } from './components/Button'\nexport { Input } from './components/Input'\nexport type { InputProps } from './components/Input'\nexport { Textarea } from './components/Textarea'\nexport type { TextareaProps } from './components/Textarea'\nexport { Card } from './components/Card'\nexport type { CardProps, CardSectionProps } from './components/Card'\nexport { Badge } from './components/Badge'\nexport type { BadgeProps } from './components/Badge'\nexport { Tag } from './components/Tag'\nexport type { TagProps } from './components/Tag'\nexport { TitleLine } from './components/TitleLine'\nexport type { TitleLineProps } from './components/TitleLine'\nexport { CornerBrackets } from './components/CornerBrackets'\nexport type { CornerBracketsProps } from './components/CornerBrackets'\n\n// Phase 2 — Interactive Components\nexport { Select } from './components/Select'\nexport type { SelectProps } from './components/Select'\nexport { SelectTrigger } from './components/Select'\nexport type { SelectTriggerProps } from './components/Select'\nexport { SelectContent } from './components/Select'\nexport type { SelectContentProps } from './components/Select'\nexport { SelectItem } from './components/Select'\nexport type { SelectItemProps } from './components/Select'\n\nexport { Modal } from './components/Modal'\nexport type { ModalProps } from './components/Modal'\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent } from './components/Tabs'\nexport type { TabsProps, TabsListProps, TabsTriggerProps, TabsContentProps } from './components/Tabs'\n\nexport { Toaster, toast } from './components/Toast'\nexport type { ToasterProps, ToastOptions, ToastEntry } from './components/Toast'\n\nexport { Tooltip } from './components/Tooltip'\nexport type { TooltipProps } from './components/Tooltip'\n\nexport { NavDropdown } from './components/NavDropdown'\nexport type { NavDropdownProps, NavDropdownItem } from './components/NavDropdown'\n\n// Phase 3 — Data Display + Form Completion\nexport { Checkbox } from './components/Checkbox'\nexport type { CheckboxProps } from './components/Checkbox'\n\nexport { Toggle } from './components/Toggle'\nexport type { ToggleProps } from './components/Toggle'\n\nexport { RadioGroup, RadioItem } from './components/Radio'\nexport type { RadioGroupProps, RadioItemProps } from './components/Radio'\n\nexport { Progress } from './components/Progress'\nexport type { ProgressProps } from './components/Progress'\n\nexport { Battery } from './components/Battery'\nexport type { BatteryProps } from './components/Battery'\n\nexport { BatteryInline } from './components/BatteryInline'\nexport type { BatteryInlineProps } from './components/BatteryInline'\n\nexport { Table } from './components/Table'\nexport type { TableProps, Column } from './components/Table'\n\nexport { Skeleton } from './components/Skeleton'\nexport type { SkeletonProps } from './components/Skeleton'\n\nexport { Spinner } from './components/Spinner'\nexport type { SpinnerProps } from './components/Spinner'\n\nexport { Pagination } from './components/Pagination'\nexport type { PaginationProps } from './components/Pagination'\n\nexport { Breadcrumbs } from './components/Breadcrumbs'\nexport type { BreadcrumbsProps, BreadcrumbItem } from './components/Breadcrumbs'\n\nexport { Toolbar } from './components/Toolbar'\nexport type { ToolbarProps, ToolbarSelectProps, ToolbarSelectOption } from './components/Toolbar'\n\n// Navigation\nexport { Sidenav } from './components/Sidenav'\nexport type { SidenavProps, SidenavItemProps, SidenavIconProps, SidenavGroupProps } from './components/Sidenav'\n\nexport { CodeBlock } from './components/CodeBlock'\nexport type { CodeBlockProps } from './components/CodeBlock'\n\n// Theme\nexport { ThemeProvider, useTheme } from './components/ThemeProvider'\nexport type { ThemeProviderProps, ThemeContextValue, Theme, Contrast } from './components/ThemeProvider'\n\n// Hooks\nexport { useDisclosure } from './hooks/useDisclosure'\nexport { useFocusTrap } from './hooks/useFocusTrap'\nexport { useKeyboardNav } from './hooks/useKeyboardNav'\nexport { useReducedMotion } from './hooks/useReducedMotion'\nexport { useMergedRef } from './hooks/useMergedRef'\n\n// Utils\nexport { cn } from './utils/cn'\nexport { SafePortal } from './utils/SafePortal'\nexport type { PolymorphicProps } from './utils/polymorphic'\n","import { clsx, type ClassValue } from 'clsx'\n\nexport function cn(...inputs: ClassValue[]) {\n return clsx(inputs)\n}\n","import { type ReactNode, type ElementType, type Ref } from 'react'\nimport { cn } from '../utils/cn'\nimport type { PolymorphicProps } from '../utils/polymorphic'\n\ntype ButtonOwnProps = {\n variant?: 'default' | 'primary' | 'secondary' | 'danger' | 'ghost'\n size?: 'sm' | 'md' | 'lg'\n isLoading?: boolean\n loadingText?: string\n icon?: ReactNode\n iconPosition?: 'left' | 'right'\n}\n\nexport type ButtonProps<E extends ElementType = 'button'> = PolymorphicProps<\n E,\n ButtonOwnProps\n>\n\nexport function Button({\n as,\n variant = 'default',\n size = 'md',\n isLoading = false,\n loadingText,\n icon,\n iconPosition = 'left',\n className,\n disabled,\n children,\n ref,\n ...props\n}: ButtonOwnProps & { as?: ElementType; ref?: Ref<any>; className?: string; disabled?: boolean; children?: ReactNode; [key: string]: any }) {\n const Component = as || 'button'\n const isDisabled = disabled || isLoading\n\n return (\n <Component\n ref={ref}\n className={cn(\n 'tb-btn',\n variant !== 'default' && `tb-btn--${variant}`,\n size !== 'md' && `tb-btn--${size}`,\n isLoading && 'tb-btn--loading',\n isLoading && loadingText && 'tb-btn--loading-text',\n isDisabled && 'tb-btn--disabled',\n className,\n )}\n disabled={Component === 'button' ? isDisabled : undefined}\n aria-disabled={Component !== 'button' && isDisabled ? true : undefined}\n {...props}\n >\n {isLoading && (\n <span className=\"tb-btn__spinner\" aria-hidden=\"true\">\n <span className=\"tb-btn__spinner-square\" />\n <span className=\"tb-btn__spinner-square\" />\n <span className=\"tb-btn__spinner-square\" />\n </span>\n )}\n {icon && iconPosition === 'left' && !isLoading && (\n <span className=\"tb-btn__icon\">{icon}</span>\n )}\n <span style={isLoading && !loadingText ? { visibility: 'hidden' } : undefined}>\n {isLoading && loadingText ? loadingText : children}\n </span>\n {icon && iconPosition === 'right' && !isLoading && (\n <span className=\"tb-btn__icon\">{icon}</span>\n )}\n </Component>\n )\n}\n","'use client'\n\nimport {\n type ReactNode,\n type InputHTMLAttributes,\n type Ref,\n useId,\n} from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: string\n error?: string\n hint?: string\n size?: 'sm' | 'md' | 'lg'\n icon?: ReactNode\n iconPosition?: 'left' | 'right'\n ref?: Ref<HTMLInputElement>\n}\n\nexport function Input({\n label,\n error,\n hint,\n size = 'md',\n icon,\n iconPosition = 'left',\n className,\n id: idProp,\n ref,\n ...props\n}: InputProps) {\n const autoId = useId()\n const id = idProp ?? autoId\n const errorId = error ? `${id}-error` : undefined\n const hintId = hint && !error ? `${id}-hint` : undefined\n\n return (\n <div className=\"tb-form-group\">\n {label && (\n <label htmlFor={id} className=\"tb-label\">\n {label}\n </label>\n )}\n <div\n className={cn(\n 'tb-input-wrapper',\n icon && `tb-input-wrapper--icon-${iconPosition}`,\n )}\n >\n {icon && (\n <span className=\"tb-input__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <input\n ref={ref}\n id={id}\n className={cn(\n 'tb-input',\n size !== 'md' && `tb-input--${size}`,\n error && 'tb-input--error',\n className,\n )}\n aria-invalid={error ? true : undefined}\n aria-describedby={errorId ?? hintId}\n {...props}\n />\n </div>\n {error && (\n <span id={errorId} className=\"tb-input__error\" role=\"alert\">\n {error}\n </span>\n )}\n {hint && !error && (\n <span id={hintId} className=\"tb-input__hint\">\n {hint}\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { type TextareaHTMLAttributes, type Ref, useId } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string\n error?: string\n hint?: string\n ref?: Ref<HTMLTextAreaElement>\n}\n\nexport function Textarea({\n label,\n error,\n hint,\n className,\n id: idProp,\n ref,\n ...props\n}: TextareaProps) {\n const autoId = useId()\n const id = idProp ?? autoId\n const errorId = error ? `${id}-error` : undefined\n const hintId = hint && !error ? `${id}-hint` : undefined\n\n return (\n <div className=\"tb-form-group\">\n {label && (\n <label htmlFor={id} className=\"tb-label\">\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n id={id}\n className={cn(\n 'tb-textarea',\n error && 'tb-textarea--error',\n className,\n )}\n aria-invalid={error ? true : undefined}\n aria-describedby={errorId ?? hintId}\n {...props}\n />\n {error && (\n <span id={errorId} className=\"tb-textarea__error\" role=\"alert\">\n {error}\n </span>\n )}\n {hint && !error && (\n <span id={hintId} className=\"tb-textarea__hint\">\n {hint}\n </span>\n )}\n </div>\n )\n}\n","import { type HTMLAttributes, type ElementType, type Ref } from 'react'\nimport { cn } from '../../utils/cn'\n\n/* ── Root ── */\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n brackets?: boolean\n pulse?: boolean\n hoverable?: boolean\n ref?: Ref<HTMLElement>\n}\n\nfunction CardRoot({\n as,\n brackets = false,\n pulse = false,\n hoverable = false,\n className,\n children,\n ref,\n ...props\n}: CardProps) {\n const Component = as || 'div'\n return (\n <Component\n ref={ref}\n className={cn(\n 'tb-card',\n brackets && 'tb-card--bracketed',\n pulse && 'tb-card--pulse',\n hoverable && 'tb-card--hoverable',\n className,\n )}\n {...props}\n >\n {brackets && (\n <>\n <span className=\"tb-card__bracket tb-card__bracket--tl\" />\n <span className=\"tb-card__bracket tb-card__bracket--tr\" />\n <span className=\"tb-card__bracket tb-card__bracket--bl\" />\n <span className=\"tb-card__bracket tb-card__bracket--br\" />\n </>\n )}\n {children}\n </Component>\n )\n}\n\n/* ── Sub-components ── */\n\nexport interface CardSectionProps extends HTMLAttributes<HTMLDivElement> {\n ref?: Ref<HTMLDivElement>\n}\n\nfunction Header({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__header', className)}\n {...props}\n />\n )\n}\n\nfunction Title({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__title', className)}\n {...props}\n />\n )\n}\n\nfunction Body({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__body', className)}\n {...props}\n />\n )\n}\n\nfunction Tags({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__tags', className)}\n {...props}\n />\n )\n}\n\nfunction Footer({ className, ref, ...props }: CardSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-card__footer', className)}\n {...props}\n />\n )\n}\n\n/* ── Compound export ── */\n\nexport const Card = Object.assign(CardRoot, {\n Header,\n Title,\n Body,\n Tags,\n Footer,\n})\n","import { type HTMLAttributes, type ReactNode, type Ref } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'default' | 'success' | 'warning' | 'error'\n dot?: boolean\n pulse?: boolean\n children: ReactNode\n ref?: Ref<HTMLSpanElement>\n}\n\nexport function Badge({\n variant = 'default',\n dot = false,\n pulse = false,\n className,\n children,\n ref,\n ...props\n}: BadgeProps) {\n return (\n <span\n ref={ref}\n className={cn(\n 'tb-badge',\n variant !== 'default' && `tb-badge--${variant}`,\n pulse && 'tb-badge--pulse',\n className,\n )}\n {...props}\n >\n {dot && (\n <span\n className={cn(\n 'tb-badge__dot',\n )}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n )\n}\n","import { type HTMLAttributes, type ReactNode, type Ref } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode\n ref?: Ref<HTMLSpanElement>\n}\n\nexport function Tag({ className, children, ref, ...props }: TagProps) {\n return (\n <span ref={ref} className={cn('tb-tag', className)} {...props}>\n {children}\n </span>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface TitleLineProps {\n label: string\n className?: string\n}\n\nexport function TitleLine({ label, className }: TitleLineProps) {\n return (\n <div className={cn('tb-title-line', className)}>\n <span className=\"tb-title-line__label\">{label}</span>\n </div>\n )\n}\n","import { type HTMLAttributes, type ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface CornerBracketsProps extends HTMLAttributes<HTMLDivElement> {\n pulse?: boolean\n children: ReactNode\n ref?: React.Ref<HTMLDivElement>\n}\n\nexport function CornerBrackets({ pulse, children, className, ref, ...props }: CornerBracketsProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-brackets', pulse && 'tb-brackets--pulse', className)}\n {...props}\n >\n <span className=\"tb-brackets__corner tb-brackets__corner--tl\" />\n <span className=\"tb-brackets__corner tb-brackets__corner--tr\" />\n <span className=\"tb-brackets__corner tb-brackets__corner--bl\" />\n <span className=\"tb-brackets__corner tb-brackets__corner--br\" />\n {children}\n </div>\n )\n}\n","'use client'\n\nimport {\n type ReactNode,\n type Ref,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { cn } from '../../utils/cn'\n\n/* ── Context ── */\n\ninterface SelectContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n value: string\n onSelect: (value: string) => void\n placeholder: string\n disabled: boolean\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n itemValues: string[]\n registerItem: (value: string) => void\n unregisterItem: (value: string) => void\n triggerRef: React.RefObject<HTMLButtonElement | null>\n listRef: React.RefObject<HTMLDivElement | null>\n}\n\nexport const SelectContext = createContext<SelectContextValue | null>(null)\n\nexport function useSelectContext() {\n const ctx = useContext(SelectContext)\n if (!ctx) throw new Error('Select compound components must be used within <Select>')\n return ctx\n}\n\n/* ── Root ── */\n\nexport interface SelectProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n disabled?: boolean\n error?: string\n label?: string\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function Select({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n placeholder = 'Select...',\n disabled = false,\n error,\n label,\n children,\n className,\n ref,\n}: SelectProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [open, setOpen] = useState(false)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [itemValues, setItemValues] = useState<string[]>([])\n\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n\n const triggerRef = useRef<HTMLButtonElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n const rootRef = useRef<HTMLDivElement>(null)\n\n const onSelect = useCallback(\n (val: string) => {\n if (!isControlled) setInternalValue(val)\n onValueChange?.(val)\n setOpen(false)\n triggerRef.current?.focus()\n },\n [isControlled, onValueChange],\n )\n\n const registerItem = useCallback((val: string) => {\n setItemValues((prev) => (prev.includes(val) ? prev : [...prev, val]))\n }, [])\n\n const unregisterItem = useCallback((val: string) => {\n setItemValues((prev) => prev.filter((v) => v !== val))\n }, [])\n\n /* Close on click outside */\n useEffect(() => {\n if (!open) return\n function handleClick(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('pointerdown', handleClick)\n return () => document.removeEventListener('pointerdown', handleClick)\n }, [open])\n\n /* Close on Escape */\n useEffect(() => {\n if (!open) return\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setOpen(false)\n triggerRef.current?.focus()\n }\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [open])\n\n /* Reset focused index when opening */\n useEffect(() => {\n if (open) {\n const idx = itemValues.indexOf(value)\n setFocusedIndex(idx >= 0 ? idx : 0)\n }\n }, [open, itemValues, value])\n\n return (\n <SelectContext.Provider\n value={{\n open,\n setOpen,\n value,\n onSelect,\n placeholder,\n disabled,\n focusedIndex,\n setFocusedIndex,\n itemValues,\n registerItem,\n unregisterItem,\n triggerRef,\n listRef,\n }}\n >\n <div\n ref={(node) => {\n (rootRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n className={cn(\n 'tb-select',\n error && 'tb-select--error',\n disabled && 'tb-select--disabled',\n className,\n )}\n >\n {label && <label className=\"tb-select__label\">{label}</label>}\n {children}\n {error && <span className=\"tb-select__error\">{error}</span>}\n </div>\n </SelectContext.Provider>\n )\n}\n","'use client'\n\nimport { type Ref } from 'react'\nimport { cn } from '../../utils/cn'\nimport { useSelectContext } from './Select'\n\nexport interface SelectTriggerProps {\n className?: string\n ref?: Ref<HTMLButtonElement>\n}\n\nexport function SelectTrigger({ className, ref }: SelectTriggerProps) {\n const { open, setOpen, value, placeholder, disabled, triggerRef, itemValues, focusedIndex, setFocusedIndex, onSelect } =\n useSelectContext()\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (disabled) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n if (!open) {\n setOpen(true)\n } else {\n setFocusedIndex(Math.min(focusedIndex + 1, itemValues.length - 1))\n }\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n if (open) {\n setFocusedIndex(Math.max(focusedIndex - 1, 0))\n }\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n if (open && focusedIndex >= 0 && itemValues[focusedIndex]) {\n onSelect(itemValues[focusedIndex])\n } else {\n setOpen(!open)\n }\n break\n }\n }\n }\n\n return (\n <button\n ref={(node) => {\n (triggerRef as React.MutableRefObject<HTMLButtonElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node\n }}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled}\n className={cn('tb-select__trigger', open && 'tb-select__trigger--open', className)}\n onPointerDown={(e) => {\n e.preventDefault()\n if (!disabled) setOpen(!open)\n }}\n onKeyDown={handleKeyDown}\n >\n <span className={cn('tb-select__value', !value && 'tb-select__placeholder')}>\n {value || placeholder}\n </span>\n <span className=\"tb-select__chevron\" aria-hidden=\"true\" />\n </button>\n )\n}\n","'use client'\n\nimport { type ReactNode, type Ref } from 'react'\nimport { cn } from '../../utils/cn'\nimport { useSelectContext } from './Select'\n\nexport interface SelectContentProps {\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function SelectContent({ children, className, ref }: SelectContentProps) {\n const { open, listRef } = useSelectContext()\n\n return (\n <div\n ref={(node) => {\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n role=\"listbox\"\n className={cn('tb-select__dropdown', open && 'tb-select__dropdown--open', className)}\n >\n {children}\n </div>\n )\n}\n","'use client'\n\nimport { type ReactNode, type Ref, useEffect } from 'react'\nimport { cn } from '../../utils/cn'\nimport { useSelectContext } from './Select'\n\nexport interface SelectItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function SelectItem({\n value: itemValue,\n disabled = false,\n children,\n className,\n ref,\n}: SelectItemProps) {\n const { value, onSelect, focusedIndex, setFocusedIndex, itemValues, registerItem, unregisterItem } =\n useSelectContext()\n\n const index = itemValues.indexOf(itemValue)\n const isSelected = value === itemValue\n const isFocused = focusedIndex === index\n\n useEffect(() => {\n registerItem(itemValue)\n return () => unregisterItem(itemValue)\n }, [itemValue, registerItem, unregisterItem])\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={disabled}\n data-focused={isFocused || undefined}\n className={cn(\n 'tb-select__option',\n isSelected && 'tb-select__option--selected',\n isFocused && 'tb-select__option--focused',\n disabled && 'tb-select__option--disabled',\n className,\n )}\n onClick={() => {\n if (!disabled) onSelect(itemValue)\n }}\n onMouseEnter={() => {\n if (!disabled) setFocusedIndex(index)\n }}\n >\n {children}\n </div>\n )\n}\n","'use client'\n\nimport {\n type ReactNode,\n type HTMLAttributes,\n type Ref,\n createContext,\n useContext,\n useEffect,\n useRef,\n useCallback,\n useId,\n} from 'react'\nimport { cn } from '../../utils/cn'\nimport { SafePortal } from '../../utils/SafePortal'\n\n/* ── Context ── */\n\ninterface ModalContextValue {\n onClose: () => void\n titleId: string\n descId: string\n}\n\nconst ModalContext = createContext<ModalContextValue | null>(null)\n\nfunction useModalContext() {\n const ctx = useContext(ModalContext)\n if (!ctx) throw new Error('Modal sub-components must be used within <Modal>')\n return ctx\n}\n\n/* ── Root ── */\n\nexport interface ModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n closeOnEscape?: boolean\n closeOnBackdrop?: boolean\n hideCloseButton?: boolean\n portalTarget?: Element | null\n variant?: 'warning' | 'error' | 'success'\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nfunction ModalRoot({\n open,\n onOpenChange,\n closeOnEscape = true,\n closeOnBackdrop = true,\n hideCloseButton = false,\n portalTarget,\n variant,\n children,\n className,\n ref,\n}: ModalProps) {\n const modalRef = useRef<HTMLDivElement>(null)\n const previousFocusRef = useRef<HTMLElement | null>(null)\n const uid = useId()\n const titleId = `tb-modal-title-${uid}`\n const descId = `tb-modal-desc-${uid}`\n\n const onClose = useCallback(() => onOpenChange(false), [onOpenChange])\n\n /* ── Scroll lock ── */\n useEffect(() => {\n if (!open) return\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n const originalOverflow = document.body.style.overflow\n const originalPaddingRight = document.body.style.paddingRight\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${scrollbarWidth}px`\n return () => {\n document.body.style.overflow = originalOverflow\n document.body.style.paddingRight = originalPaddingRight\n }\n }, [open])\n\n /* ── Save and restore focus ── */\n useEffect(() => {\n if (open) {\n previousFocusRef.current = document.activeElement as HTMLElement\n requestAnimationFrame(() => {\n const focusable = modalRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n ;(focusable ?? modalRef.current)?.focus()\n })\n } else {\n previousFocusRef.current?.focus()\n }\n }, [open])\n\n /* ── Escape key ── */\n useEffect(() => {\n if (!open || !closeOnEscape) return\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') onOpenChange(false)\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [open, closeOnEscape, onOpenChange])\n\n /* ── Focus trap ── */\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key !== 'Tab' || !modalRef.current) return\n\n const focusable = modalRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault()\n last.focus()\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n },\n [],\n )\n\n return (\n <SafePortal target={portalTarget}>\n <div\n className={cn('tb-modal-overlay', open && 'tb-modal-overlay--open')}\n onClick={(e) => {\n if (closeOnBackdrop && e.target === e.currentTarget) onClose()\n }}\n >\n <div\n ref={(node) => {\n (modalRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descId}\n className={cn('tb-modal', variant && `tb-modal--${variant}`, className)}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n >\n {!hideCloseButton && (\n <button\n type=\"button\"\n className=\"tb-modal__close\"\n aria-label=\"Close\"\n onClick={onClose}\n >\n ×\n </button>\n )}\n\n <ModalContext.Provider value={{ onClose, titleId, descId }}>\n {children}\n </ModalContext.Provider>\n </div>\n </div>\n </SafePortal>\n )\n}\n\n/* ── Sub-components ── */\n\ninterface ModalSectionProps extends HTMLAttributes<HTMLDivElement> {\n ref?: Ref<HTMLDivElement>\n}\n\nfunction Title({ className, ref, ...props }: ModalSectionProps) {\n const { titleId } = useModalContext()\n return (\n <h2\n ref={ref as Ref<HTMLHeadingElement>}\n id={titleId}\n className={cn('tb-modal__title', className)}\n {...props}\n />\n )\n}\n\nfunction Body({ className, ref, ...props }: ModalSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-modal__body', className)}\n {...props}\n />\n )\n}\n\nfunction Footer({ className, ref, ...props }: ModalSectionProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-modal__footer', className)}\n {...props}\n />\n )\n}\n\nfunction Close({\n className,\n children,\n ref,\n ...props\n}: HTMLAttributes<HTMLButtonElement> & { ref?: Ref<HTMLButtonElement> }) {\n const { onClose } = useModalContext()\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn('tb-modal__close', className)}\n aria-label=\"Close\"\n onClick={onClose}\n {...props}\n >\n {children ?? '\\u00d7'}\n </button>\n )\n}\n\n/* ── Compound export ── */\n\nexport const Modal = Object.assign(ModalRoot, {\n Title,\n Body,\n Footer,\n Close,\n})\n","'use client'\n\nimport { type ReactNode, useState, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\n\ninterface SafePortalProps {\n children: ReactNode\n target?: Element | null\n}\n\nexport function SafePortal({ children, target }: SafePortalProps) {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n if (!mounted) return null\n\n return createPortal(children, target ?? document.body)\n}\n","'use client'\n\nimport {\n type ReactNode,\n type Ref,\n createContext,\n useCallback,\n useContext,\n useRef,\n useState,\n} from 'react'\nimport { cn } from '../../utils/cn'\n\n/* ── Context ── */\n\ninterface TabsContextValue {\n value: string\n onValueChange: (value: string) => void\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext() {\n const ctx = useContext(TabsContext)\n if (!ctx) throw new Error('Tabs compound components must be used within <Tabs>')\n return ctx\n}\n\n/* ── Tabs (root) ── */\n\nexport interface TabsProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function Tabs({\n value: controlledValue,\n defaultValue = '',\n onValueChange: onValueChangeProp,\n children,\n className,\n ref,\n}: TabsProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n\n const onValueChange = useCallback(\n (val: string) => {\n if (!isControlled) setInternalValue(val)\n onValueChangeProp?.(val)\n },\n [isControlled, onValueChangeProp],\n )\n\n return (\n <TabsContext.Provider value={{ value, onValueChange }}>\n <div ref={ref} className={cn('tb-tabs', className)}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n}\n\n/* ── TabsList ── */\n\nexport interface TabsListProps {\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function TabsList({ children, className, ref }: TabsListProps) {\n const listRef = useRef<HTMLDivElement>(null)\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight') return\n\n const triggers = Array.from(\n (listRef.current ?? (e.currentTarget as HTMLElement)).querySelectorAll<HTMLButtonElement>(\n '.tb-tabs__trigger:not(:disabled)',\n ),\n )\n if (triggers.length === 0) return\n\n const current = document.activeElement as HTMLElement\n const idx = triggers.indexOf(current as HTMLButtonElement)\n if (idx < 0) return\n\n e.preventDefault()\n let next: number\n if (e.key === 'ArrowRight') {\n next = (idx + 1) % triggers.length\n } else {\n next = (idx - 1 + triggers.length) % triggers.length\n }\n triggers[next].focus()\n }\n\n return (\n <div\n ref={(node) => {\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n role=\"tablist\"\n className={cn('tb-tabs__list', className)}\n onKeyDown={handleKeyDown}\n >\n {children}\n </div>\n )\n}\n\n/* ── TabsTrigger ── */\n\nexport interface TabsTriggerProps {\n value: string\n icon?: ReactNode\n disabled?: boolean\n children: ReactNode\n className?: string\n ref?: Ref<HTMLButtonElement>\n}\n\nexport function TabsTrigger({\n value: triggerValue,\n icon,\n disabled = false,\n children,\n className,\n ref,\n}: TabsTriggerProps) {\n const { value, onValueChange } = useTabsContext()\n const isActive = value === triggerValue\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n className={cn(\n 'tb-tabs__trigger',\n isActive && 'tb-tabs__trigger--active',\n disabled && 'tb-tabs__trigger--disabled',\n className,\n )}\n onClick={() => {\n if (!disabled) onValueChange(triggerValue)\n }}\n >\n {icon && <span className=\"tb-tabs__trigger-icon\">{icon}</span>}\n {children}\n </button>\n )\n}\n\n/* ── TabsContent ── */\n\nexport interface TabsContentProps {\n value: string\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function TabsContent({ value: contentValue, children, className, ref }: TabsContentProps) {\n const { value } = useTabsContext()\n const isActive = value === contentValue\n\n if (!isActive) return null\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n className={cn('tb-tabs__content', isActive && 'tb-tabs__content--active', className)}\n >\n {children}\n </div>\n )\n}\n","'use client'\n\nimport { useSyncExternalStore } from 'react'\nimport { cn } from '../../utils/cn'\nimport { SafePortal } from '../../utils/SafePortal'\n\n/* ── Types ── */\n\nexport interface ToastOptions {\n title: string\n description?: string\n type?: 'success' | 'error' | 'warning' | 'info'\n duration?: number | null\n action?: { label: string; onClick: () => void }\n}\n\nexport interface ToastEntry extends ToastOptions {\n id: string\n type: 'success' | 'error' | 'warning' | 'info'\n}\n\n/* ── Module-level store ── */\n\ntype Listener = () => void\n\nlet toasts: ToastEntry[] = []\nlet nextId = 0\nconst listeners = new Set<Listener>()\nconst timers = new Map<string, ReturnType<typeof setTimeout>>()\n\nfunction emit() {\n for (const fn of listeners) fn()\n}\n\nfunction getSnapshot() {\n return toasts\n}\n\nfunction subscribe(fn: Listener) {\n listeners.add(fn)\n return () => listeners.delete(fn)\n}\n\nfunction addToast(options: ToastOptions, maxCount = 3): string {\n const id = `toast-${++nextId}`\n const entry: ToastEntry = {\n ...options,\n id,\n type: options.type ?? 'info',\n }\n\n toasts = [...toasts, entry]\n while (toasts.length > maxCount) {\n const removed = toasts[0]\n toasts = toasts.slice(1)\n const timer = timers.get(removed.id)\n if (timer) {\n clearTimeout(timer)\n timers.delete(removed.id)\n }\n }\n\n const duration = options.duration === undefined ? 3500 : options.duration\n if (duration !== null) {\n const timer = setTimeout(() => {\n timers.delete(id)\n toasts = toasts.filter((t) => t.id !== id)\n emit()\n }, duration)\n timers.set(id, timer)\n }\n\n emit()\n return id\n}\n\nfunction dismissToast(id: string) {\n const timer = timers.get(id)\n if (timer) {\n clearTimeout(timer)\n timers.delete(id)\n }\n toasts = toasts.filter((t) => t.id !== id)\n emit()\n}\n\nfunction dismissAll() {\n timers.forEach((timer) => clearTimeout(timer))\n timers.clear()\n toasts = []\n emit()\n}\n\n/* ── Public toast() function ── */\n\nfunction createToast(options: ToastOptions) {\n return addToast(options)\n}\n\ncreateToast.success = (title: string, options?: Omit<ToastOptions, 'title' | 'type'>) =>\n addToast({ ...options, title, type: 'success' })\n\ncreateToast.error = (title: string, options?: Omit<ToastOptions, 'title' | 'type'>) =>\n addToast({ ...options, title, type: 'error' })\n\ncreateToast.warning = (title: string, options?: Omit<ToastOptions, 'title' | 'type'>) =>\n addToast({ ...options, title, type: 'warning' })\n\ncreateToast.info = (title: string, options?: Omit<ToastOptions, 'title' | 'type'>) =>\n addToast({ ...options, title, type: 'info' })\n\ncreateToast.dismiss = dismissToast\ncreateToast.dismissAll = dismissAll\n\nexport { createToast as toast }\n\n/* ── Icons ── */\n\nconst ICONS: Record<string, string> = {\n success: '\\u2713',\n error: '\\u2717',\n warning: '\\u26A0',\n info: '\\u2139',\n}\n\n/* ── <Toaster /> ── */\n\nexport interface ToasterProps {\n position?: 'top-right' | 'top-center' | 'bottom-right' | 'bottom-center'\n}\n\nexport function Toaster({ position = 'top-right' }: ToasterProps) {\n const currentToasts = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n if (currentToasts.length === 0) return null\n\n return (\n <SafePortal>\n <div\n className={cn('tb-toast-container', `tb-toast-container--${position}`)}\n aria-live=\"polite\"\n >\n {currentToasts.map((t) => (\n <div\n key={t.id}\n className={cn('tb-toast', `tb-toast--${t.type}`, 'tb-toast--show')}\n role=\"alert\"\n >\n <span className=\"tb-toast__icon\" aria-hidden=\"true\">\n {ICONS[t.type]}\n </span>\n\n <div className=\"tb-toast__content\">\n <span className=\"tb-toast__title\">{t.title}</span>\n {t.description && <span className=\"tb-toast__description\">{t.description}</span>}\n </div>\n\n {t.action && (\n <button\n type=\"button\"\n className=\"tb-toast__action\"\n onClick={() => {\n t.action!.onClick()\n dismissToast(t.id)\n }}\n >\n {t.action.label}\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"tb-toast__dismiss\"\n aria-label=\"Dismiss\"\n onClick={() => dismissToast(t.id)}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n </SafePortal>\n )\n}\n","import { type ReactNode, type Ref } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface TooltipProps {\n content: ReactNode\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n children: ReactNode\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function Tooltip({\n content,\n side = 'top',\n align = 'center',\n children,\n className,\n ref,\n}: TooltipProps) {\n return (\n <div\n ref={ref}\n className={cn('tb-tooltip-wrap', className)}\n >\n {children}\n <span\n role=\"tooltip\"\n className={cn(\n 'tb-tooltip',\n `tb-tooltip--${side}`,\n align !== 'center' && `tb-tooltip--align-${align}`,\n )}\n >\n {content}\n </span>\n </div>\n )\n}\n","import { type ReactNode, type Ref, useState, useEffect, useRef } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface NavDropdownItem {\n label: string\n href?: string\n icon?: ReactNode\n onClick?: () => void\n}\n\nexport interface NavDropdownProps {\n trigger: string | ReactNode\n items: NavDropdownItem[]\n align?: 'left' | 'center' | 'right'\n className?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function NavDropdown({ trigger, items, align = 'left', className, ref }: NavDropdownProps) {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n function handlePointer(e: PointerEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('pointerdown', handlePointer)\n return () => document.removeEventListener('pointerdown', handlePointer)\n }, [open])\n\n return (\n <div\n ref={(node) => {\n (rootRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n className={cn('tb-nav-item', open && 'tb-nav-item--open', align !== 'left' && `tb-nav-item--align-${align}`, className)}\n >\n <button\n type=\"button\"\n className=\"tb-nav-item__trigger\"\n onClick={() => setOpen(!open)}\n >\n {typeof trigger === 'string' ? <span>{trigger}</span> : trigger}\n <span className=\"tb-nav-item__chevron\" aria-hidden=\"true\" />\n </button>\n\n <div className={cn('tb-nav-dropdown', open && 'tb-nav-dropdown--open')}>\n {items.map((item, i) => {\n const content = (\n <>\n {item.icon && <span className=\"tb-nav-dropdown__icon\">{item.icon}</span>}\n <span>{item.label}</span>\n </>\n )\n\n if (item.href) {\n return (\n <a\n key={i}\n href={item.href}\n className=\"tb-nav-dropdown__item\"\n onClick={() => { setOpen(false); item.onClick?.() }}\n >\n {content}\n </a>\n )\n }\n\n return (\n <button\n key={i}\n type=\"button\"\n className=\"tb-nav-dropdown__item\"\n onClick={() => { setOpen(false); item.onClick?.() }}\n >\n {content}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { type ReactNode, type Ref, useState } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface CheckboxProps {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n disabled?: boolean\n label?: string | ReactNode\n error?: string\n ref?: Ref<HTMLInputElement>\n className?: string\n}\n\nexport function Checkbox({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n label,\n error,\n ref,\n className,\n}: CheckboxProps) {\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isControlled = controlledChecked !== undefined\n const isChecked = isControlled ? controlledChecked : internalChecked\n\n function handleChange() {\n if (disabled) return\n const next = !isChecked\n if (!isControlled) setInternalChecked(next)\n onCheckedChange?.(next)\n }\n\n return (\n <div>\n <label\n className={cn(\n 'tb-checkbox',\n error && 'tb-checkbox--error',\n className,\n )}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n checked={isChecked}\n disabled={disabled}\n onChange={handleChange}\n />\n {label && <span>{label}</span>}\n </label>\n {error && (\n <span style={{ color: 'var(--tb-error)', fontSize: '0.5rem', letterSpacing: '0.2em', marginTop: 4, display: 'block' }}>\n {error}\n </span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { type Ref, useState } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface ToggleProps {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n disabled?: boolean\n label?: string\n ref?: Ref<HTMLInputElement>\n className?: string\n}\n\nexport function Toggle({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n label,\n ref,\n className,\n}: ToggleProps) {\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isControlled = controlledChecked !== undefined\n const isChecked = isControlled ? controlledChecked : internalChecked\n\n function handleChange() {\n if (disabled) return\n const next = !isChecked\n if (!isControlled) setInternalChecked(next)\n onCheckedChange?.(next)\n }\n\n return (\n <label\n className={cn(\n 'tb-toggle',\n isChecked && 'tb-toggle--checked',\n disabled && 'tb-toggle--disabled',\n className,\n )}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n className=\"tb-toggle__input\"\n checked={isChecked}\n disabled={disabled}\n onChange={handleChange}\n />\n <span className=\"tb-toggle__track\" aria-hidden=\"true\">\n <span className=\"tb-toggle__thumb\" />\n </span>\n {label && <span className=\"tb-toggle__label\">{label}</span>}\n </label>\n )\n}\n","'use client'\n\nimport { type ReactNode, createContext, useContext, useState } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface RadioGroupProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n disabled?: boolean\n label?: string\n orientation?: 'horizontal' | 'vertical'\n children: ReactNode\n className?: string\n}\n\nexport interface RadioItemProps {\n value: string\n label: string\n disabled?: boolean\n className?: string\n}\n\ninterface RadioContextValue {\n value: string\n onChange: (value: string) => void\n disabled: boolean\n name: string\n}\n\nconst RadioContext = createContext<RadioContextValue | null>(null)\n\nlet radioGroupId = 0\n\nexport function RadioGroup({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n disabled = false,\n label,\n orientation = 'vertical',\n children,\n className,\n}: RadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const isControlled = controlledValue !== undefined\n const currentValue = isControlled ? controlledValue : internalValue\n const [name] = useState(() => `tb-radio-group-${++radioGroupId}`)\n\n function handleChange(val: string) {\n if (!isControlled) setInternalValue(val)\n onValueChange?.(val)\n }\n\n return (\n <RadioContext.Provider value={{ value: currentValue, onChange: handleChange, disabled, name }}>\n <fieldset\n className={cn(\n 'tb-radio-group',\n orientation === 'horizontal' && 'tb-radio-group--horizontal',\n disabled && 'tb-radio-group--disabled',\n className,\n )}\n disabled={disabled}\n >\n {label && <legend className=\"tb-radio-group__label\">{label}</legend>}\n {children}\n </fieldset>\n </RadioContext.Provider>\n )\n}\n\nexport function RadioItem({\n value,\n label,\n disabled: itemDisabled = false,\n className,\n}: RadioItemProps) {\n const ctx = useContext(RadioContext)\n if (!ctx) throw new Error('RadioItem must be used within a RadioGroup')\n\n const isDisabled = ctx.disabled || itemDisabled\n const isChecked = ctx.value === value\n\n return (\n <label\n className={cn(\n 'tb-radio',\n isChecked && 'tb-radio--checked',\n isDisabled && 'tb-radio--disabled',\n className,\n )}\n >\n <input\n type=\"radio\"\n name={ctx.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => ctx.onChange(value)}\n />\n {label}\n </label>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface ProgressProps {\n value: number\n variant?: 'default' | 'success' | 'warning' | 'error'\n animated?: boolean\n indeterminate?: boolean\n label?: string\n showValue?: boolean\n className?: string\n}\n\nexport function Progress({\n value,\n variant = 'default',\n animated = false,\n indeterminate = false,\n label,\n showValue = false,\n className,\n}: ProgressProps) {\n const clampedValue = Math.max(0, Math.min(100, value))\n\n return (\n <div\n className={cn(\n 'tb-progress',\n variant !== 'default' && `tb-progress--${variant}`,\n animated && 'tb-progress--animated',\n indeterminate && 'tb-progress--indeterminate',\n className,\n )}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n >\n {label && <span className=\"tb-progress__label\">{label}</span>}\n <div className=\"tb-progress__track\">\n <div\n className=\"tb-progress__fill\"\n style={indeterminate ? undefined : { width: `${clampedValue}%` }}\n />\n </div>\n {showValue && !indeterminate && (\n <span className=\"tb-progress__value\">{clampedValue}%</span>\n )}\n </div>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface BatteryProps {\n value: number\n total?: number\n variant?: 'default' | 'success' | 'warning' | 'error'\n animated?: boolean\n label?: string\n className?: string\n}\n\nexport function Battery({\n value,\n total = 10,\n variant = 'default',\n animated = false,\n label,\n className,\n}: BatteryProps) {\n const clampedValue = Math.max(0, Math.min(total, value))\n\n return (\n <div\n className={cn(\n 'tb-battery',\n variant !== 'default' && `tb-battery--${variant}`,\n animated && 'tb-battery--animated',\n className,\n )}\n role=\"meter\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-label={label}\n >\n {label && <span className=\"tb-battery__label\">{label}</span>}\n <div className=\"tb-battery__body\">\n <div className=\"tb-battery__cap\" />\n <div className=\"tb-battery__segments\">\n {Array.from({ length: total }, (_, i) => (\n <div\n key={i}\n className={cn(\n 'tb-battery__segment',\n i < clampedValue && 'tb-battery__segment--filled',\n )}\n />\n ))}\n </div>\n </div>\n </div>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface BatteryInlineProps {\n value: number\n total?: number\n variant?: 'default' | 'success' | 'warning' | 'error'\n animated?: boolean\n label?: string\n showValue?: boolean\n className?: string\n}\n\nexport function BatteryInline({\n value,\n total = 10,\n variant = 'default',\n animated = false,\n label,\n showValue = false,\n className,\n}: BatteryInlineProps) {\n const clampedValue = Math.max(0, Math.min(total, value))\n const percent = Math.round((clampedValue / total) * 100)\n\n return (\n <div\n className={cn(\n 'tb-battery tb-battery--inline',\n animated && 'tb-battery--animated',\n className,\n )}\n role=\"meter\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-label={label}\n >\n {label && <span className=\"tb-battery__label\">{label}</span>}\n <div className=\"tb-battery__track\">\n {Array.from({ length: total }, (_, i) => (\n <div\n key={i}\n className={cn(\n 'tb-battery__segment',\n i < clampedValue && 'tb-battery__segment--filled',\n i < clampedValue && variant !== 'default' && `tb-battery__segment--${variant}`,\n )}\n />\n ))}\n </div>\n <div className=\"tb-battery__cap\" />\n {showValue && (\n <span className=\"tb-battery__value\">\n {percent}%\n </span>\n )}\n </div>\n )\n}\n","import { type ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface Column<T> {\n id: string\n header: string\n accessor: keyof T | ((row: T) => ReactNode)\n cell?: (value: any, row: T) => ReactNode\n}\n\nexport interface TableProps<T> {\n columns: Column<T>[]\n data: T[]\n onRowClick?: (row: T) => void\n className?: string\n}\n\nfunction getCellValue<T>(row: T, accessor: Column<T>['accessor']): any {\n if (typeof accessor === 'function') return accessor(row)\n return row[accessor]\n}\n\nexport function Table<T>({\n columns,\n data,\n onRowClick,\n className,\n}: TableProps<T>) {\n return (\n <div className={cn('tb-table__wrapper', className)}>\n <table className=\"tb-table\">\n <thead className=\"tb-table__head\">\n <tr className=\"tb-table__row\">\n {columns.map((col) => (\n <th key={col.id} className=\"tb-table__th\">\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"tb-table__body\">\n {data.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className={cn(\n 'tb-table__row',\n onRowClick && 'tb-table__row--clickable',\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => {\n const value = getCellValue(row, col.accessor)\n return (\n <td key={col.id} className=\"tb-table__td\">\n {col.cell ? col.cell(value, row) : value}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface SkeletonProps {\n variant?: 'text' | 'heading' | 'avatar' | 'card'\n width?: string | number\n height?: string | number\n lines?: number\n className?: string\n}\n\nexport function Skeleton({\n variant = 'text',\n width,\n height,\n lines = 1,\n className,\n}: SkeletonProps) {\n const style: React.CSSProperties = {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n }\n\n if (variant === 'text' && lines > 1) {\n return (\n <div className={cn('tb-skeleton__group', className)}>\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={i}\n className={cn(\n 'tb-skeleton',\n 'tb-skeleton--text',\n )}\n style={i === lines - 1 ? { ...style, width: style.width ?? '75%' } : style}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\n 'tb-skeleton',\n `tb-skeleton--${variant}`,\n className,\n )}\n style={style}\n />\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface SpinnerProps {\n variant?: 'bracket' | 'multi-square'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nexport function Spinner({\n variant = 'multi-square',\n size = 'md',\n className,\n}: SpinnerProps) {\n return (\n <span\n className={cn(\n 'tb-spinner',\n `tb-spinner--${variant}`,\n size !== 'md' && `tb-spinner--${size}`,\n className,\n )}\n role=\"status\"\n aria-label=\"Loading\"\n >\n {variant === 'multi-square' && (\n <>\n <span className=\"tb-spinner__square\" />\n <span className=\"tb-spinner__square\" />\n <span className=\"tb-spinner__square\" />\n <span className=\"tb-spinner__square\" />\n <span className=\"tb-spinner__square\" />\n </>\n )}\n </span>\n )\n}\n","import { cn } from '../utils/cn'\n\nexport interface PaginationProps {\n page: number\n totalPages: number\n onPageChange: (page: number) => void\n siblingCount?: number\n className?: string\n}\n\nfunction getPageRange(page: number, totalPages: number, siblingCount: number): (number | 'ellipsis')[] {\n const totalSlots = siblingCount * 2 + 5 // siblings + first + last + current + 2 ellipsis slots\n\n if (totalPages <= totalSlots) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const leftSibling = Math.max(page - siblingCount, 2)\n const rightSibling = Math.min(page + siblingCount, totalPages - 1)\n\n const showLeftEllipsis = leftSibling > 2\n const showRightEllipsis = rightSibling < totalPages - 1\n\n const pages: (number | 'ellipsis')[] = [1]\n\n if (showLeftEllipsis) {\n pages.push('ellipsis')\n } else {\n for (let i = 2; i < leftSibling; i++) pages.push(i)\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) pages.push(i)\n\n if (showRightEllipsis) {\n pages.push('ellipsis')\n } else {\n for (let i = rightSibling + 1; i < totalPages; i++) pages.push(i)\n }\n\n pages.push(totalPages)\n return pages\n}\n\nexport function Pagination({\n page,\n totalPages,\n onPageChange,\n siblingCount = 1,\n className,\n}: PaginationProps) {\n const pages = getPageRange(page, totalPages, siblingCount)\n\n return (\n <nav className={cn('tb-pagination', className)} aria-label=\"Pagination\">\n <button\n className=\"tb-pagination__btn tb-pagination__btn--prev\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n aria-label=\"Previous page\"\n >\n ‹\n </button>\n\n {pages.map((p, i) =>\n p === 'ellipsis' ? (\n <span key={`ellipsis-${i}`} className=\"tb-pagination__ellipsis\">\n ...\n </span>\n ) : (\n <button\n key={p}\n className={cn(\n 'tb-pagination__btn',\n p === page && 'tb-pagination__btn--active',\n )}\n onClick={() => onPageChange(p)}\n aria-current={p === page ? 'page' : undefined}\n >\n {p}\n </button>\n ),\n )}\n\n <button\n className=\"tb-pagination__btn tb-pagination__btn--next\"\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n aria-label=\"Next page\"\n >\n ›\n </button>\n </nav>\n )\n}\n","import { type ReactNode, type ElementType } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface BreadcrumbItem {\n label: string\n href?: string\n}\n\nexport interface BreadcrumbsProps {\n items: BreadcrumbItem[]\n separator?: ReactNode\n linkComponent?: ElementType\n className?: string\n}\n\nexport function Breadcrumbs({\n items,\n separator = '/',\n linkComponent,\n className,\n}: BreadcrumbsProps) {\n const LinkComponent = linkComponent || 'a'\n\n return (\n <nav className={cn('tb-breadcrumbs', className)} aria-label=\"Breadcrumb\">\n <ol className=\"tb-breadcrumbs__list\">\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n return (\n <li key={i} className=\"tb-breadcrumbs__item\">\n {item.href && !isLast ? (\n <LinkComponent href={item.href} className=\"tb-breadcrumbs__link\">\n {item.label}\n </LinkComponent>\n ) : (\n <span\n className=\"tb-breadcrumbs__current\"\n aria-current={isLast ? 'page' : undefined}\n >\n {item.label}\n </span>\n )}\n {!isLast && (\n <span className=\"tb-breadcrumbs__separator\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","'use client'\n\nimport { useState, useRef, useEffect, type ReactNode, type HTMLAttributes } from 'react'\nimport { cn } from '../utils/cn'\n\n/* ═══════════════════════════════════════\n Toolbar — Floating control bar\n ═══════════════════════════════════════ */\n\nexport interface ToolbarSelectOption {\n label: string\n value: string\n meta?: string\n}\n\nexport interface ToolbarSelectProps {\n options: ToolbarSelectOption[]\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n /** Dropdown opens downward instead of upward */\n dropDown?: boolean\n /** Minimum width of the trigger */\n minWidth?: number\n className?: string\n}\n\nexport interface ToolbarProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed position on the viewport */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n /** If true, uses position: fixed */\n fixed?: boolean\n children?: ReactNode\n ref?: React.Ref<HTMLDivElement>\n}\n\n/* ── Toolbar.Select (dropdown inside toolbar) ── */\nfunction ToolbarSelect({\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n dropDown = false,\n minWidth,\n className,\n}: ToolbarSelectProps) {\n const [internalValue, setInternalValue] = useState(defaultValue ?? options[0]?.value ?? '')\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n const value = controlledValue ?? internalValue\n const activeOption = options.find(o => o.value === value)\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('click', handleClick)\n return () => document.removeEventListener('click', handleClick)\n }, [])\n\n function select(opt: ToolbarSelectOption) {\n if (controlledValue === undefined) setInternalValue(opt.value)\n onChange?.(opt.value)\n setOpen(false)\n }\n\n return (\n <div\n ref={ref}\n className={cn('tb-toolbar__select', open && 'tb-toolbar__select--open', className)}\n >\n <button\n type=\"button\"\n className=\"tb-toolbar__trigger\"\n style={minWidth ? { minWidth } : undefined}\n onClick={(e) => { e.stopPropagation(); setOpen(!open) }}\n >\n <span>{activeOption?.label ?? ''}</span>\n <span className=\"tb-toolbar__chevron\" />\n </button>\n <div className={cn('tb-toolbar__dropdown', dropDown && 'tb-toolbar__dropdown--down')}>\n {options.map((opt) => (\n <div\n key={opt.value}\n className={cn('tb-toolbar__option', opt.value === value && 'tb-toolbar__option--active')}\n onClick={() => select(opt)}\n >\n {opt.label}\n {opt.meta && <span className=\"tb-toolbar__option-meta\">{opt.meta}</span>}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n/* ── Toolbar.Label ── */\nfunction ToolbarLabel({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('tb-toolbar__label', className)} {...props}>{children}</span>\n}\n\n/* ── Toolbar.Divider ── */\nfunction ToolbarDivider({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('tb-toolbar__divider', className)} {...props} />\n}\n\n/* ── Toolbar (root) ── */\nfunction ToolbarRoot({ position, fixed = false, children, className, ref, ...props }: ToolbarProps) {\n return (\n <div\n ref={ref}\n className={cn(\n 'tb-toolbar',\n fixed && 'tb-toolbar--fixed',\n position && `tb-toolbar--${position}`,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n\n/* ── Compound export ── */\nexport const Toolbar = Object.assign(ToolbarRoot, {\n Label: ToolbarLabel,\n Select: ToolbarSelect,\n Divider: ToolbarDivider,\n})\n","'use client'\n\nimport {\n createContext,\n useContext,\n useState,\n type ReactNode,\n type HTMLAttributes,\n type ElementType,\n type Ref,\n} from 'react'\nimport { cn } from '../../utils/cn'\nimport type { PolymorphicProps } from '../../utils/polymorphic'\n\n/* ── Context ── */\n\ninterface SidenavContextValue {\n iconPosition: 'left' | 'right'\n borderSide: 'left' | 'right'\n}\n\nconst SidenavContext = createContext<SidenavContextValue>({\n iconPosition: 'left',\n borderSide: 'left',\n})\n\nexport function useSidenavContext() {\n return useContext(SidenavContext)\n}\n\n/* ── Root ── */\n\nexport interface SidenavProps extends HTMLAttributes<HTMLElement> {\n iconPosition?: 'left' | 'right'\n borderSide?: 'left' | 'right'\n ref?: Ref<HTMLElement>\n}\n\nfunction SidenavRoot({\n iconPosition = 'left',\n borderSide = 'left',\n className,\n children,\n ref,\n ...props\n}: SidenavProps) {\n return (\n <SidenavContext.Provider value={{ iconPosition, borderSide }}>\n <nav\n ref={ref}\n className={cn(\n 'tb-sidenav',\n iconPosition === 'right' && 'tb-sidenav--icon-right',\n borderSide === 'right' && 'tb-sidenav--border-right',\n className,\n )}\n {...props}\n >\n {children}\n </nav>\n </SidenavContext.Provider>\n )\n}\n\n/* ── Item ── */\n\ntype SidenavItemOwnProps = {\n active?: boolean\n}\n\nexport type SidenavItemProps<E extends ElementType = 'a'> = PolymorphicProps<\n E,\n SidenavItemOwnProps\n>\n\nfunction Item({\n as,\n active = false,\n className,\n children,\n ref,\n ...props\n}: SidenavItemProps<ElementType> & { ref?: Ref<any> }) {\n const Component = as || 'a'\n return (\n <Component\n ref={ref}\n className={cn(\n 'tb-sidenav__item',\n active && 'tb-sidenav__item--active',\n className,\n )}\n {...props}\n >\n {children}\n </Component>\n )\n}\n\n/* ── Icon ── */\n\nexport interface SidenavIconProps extends HTMLAttributes<HTMLSpanElement> {\n ref?: Ref<HTMLSpanElement>\n}\n\nfunction Icon({ className, ref, ...props }: SidenavIconProps) {\n return (\n <span\n ref={ref}\n className={cn('tb-sidenav__icon', className)}\n {...props}\n />\n )\n}\n\n/* ── Group ── */\n\nexport interface SidenavGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n label: string\n icon?: ReactNode\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n children: ReactNode\n ref?: Ref<HTMLDivElement>\n}\n\nfunction Group({\n label,\n icon,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n children,\n ref,\n ...props\n}: SidenavGroupProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n function toggle() {\n const next = !isOpen\n if (!isControlled) setInternalOpen(next)\n onOpenChange?.(next)\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'tb-sidenav__group',\n isOpen && 'tb-sidenav__group--open',\n className,\n )}\n {...props}\n >\n <button\n type=\"button\"\n className=\"tb-sidenav__group-trigger\"\n onClick={toggle}\n aria-expanded={isOpen}\n >\n {icon && <span className=\"tb-sidenav__icon\">{icon}</span>}\n {label}\n <span className=\"tb-sidenav__group-chevron material-symbols-outlined\" aria-hidden=\"true\">\n expand_more\n </span>\n </button>\n <div className=\"tb-sidenav__group-content\">\n {children}\n </div>\n </div>\n )\n}\n\n/* ── Compound export ── */\n\nexport const Sidenav = Object.assign(SidenavRoot, {\n Item,\n Icon,\n Group,\n})\n","'use client'\n\nimport { useState, useRef, type ReactNode, type HTMLAttributes, type Ref } from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n copyText?: string\n ref?: Ref<HTMLDivElement>\n}\n\nexport function CodeBlock({ children, copyText, className, ref, ...props }: CodeBlockProps) {\n const [copied, setCopied] = useState(false)\n const contentRef = useRef<HTMLDivElement>(null)\n\n async function handleCopy() {\n const text = copyText ?? contentRef.current?.textContent ?? ''\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <div ref={ref} className={cn('tb-code-block', className)} {...props}>\n <div ref={contentRef}>{children}</div>\n <button\n type=\"button\"\n className={cn('tb-code-block__copy', copied && 'tb-code-block__copy--copied')}\n onClick={handleCopy}\n aria-label={copied ? 'Copied' : 'Copy to clipboard'}\n >\n <span className=\"material-symbols-outlined\" style={{ fontSize: 14 }}>\n {copied ? 'check' : 'content_copy'}\n </span>\n </button>\n </div>\n )\n}\n","'use client'\n\nimport {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n type ReactNode,\n} from 'react'\n\n/* ── Types ── */\n\nexport type Theme = 'dark' | 'light'\nexport type Contrast = 'enhanced' | 'high'\n\nexport interface ThemeContextValue {\n theme: Theme\n setTheme: (theme: Theme) => void\n contrast: Contrast\n setContrast: (contrast: Contrast) => void\n toggleTheme: () => void\n}\n\nexport interface ThemeProviderProps {\n theme?: Theme\n contrast?: Contrast\n defaultTheme?: Theme\n defaultContrast?: Contrast\n onThemeChange?: (theme: Theme) => void\n onContrastChange?: (contrast: Contrast) => void\n children: ReactNode\n}\n\n/* ── Context ── */\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext)\n if (!ctx) throw new Error('useTheme must be used within <ThemeProvider>')\n return ctx\n}\n\n/* ── Provider ── */\n\nexport function ThemeProvider({\n theme: controlledTheme,\n contrast: controlledContrast,\n defaultTheme = 'dark',\n defaultContrast = 'enhanced',\n onThemeChange,\n onContrastChange,\n children,\n}: ThemeProviderProps) {\n const isThemeControlled = controlledTheme !== undefined\n const isContrastControlled = controlledContrast !== undefined\n\n const [internalTheme, setInternalTheme] = useState<Theme>(defaultTheme)\n const [internalContrast, setInternalContrast] = useState<Contrast>(defaultContrast)\n\n const theme = isThemeControlled ? controlledTheme : internalTheme\n const contrast = isContrastControlled ? controlledContrast : internalContrast\n\n const setTheme = useCallback(\n (next: Theme) => {\n if (!isThemeControlled) setInternalTheme(next)\n onThemeChange?.(next)\n },\n [isThemeControlled, onThemeChange],\n )\n\n const setContrast = useCallback(\n (next: Contrast) => {\n if (!isContrastControlled) setInternalContrast(next)\n onContrastChange?.(next)\n },\n [isContrastControlled, onContrastChange],\n )\n\n const toggleTheme = useCallback(\n () => setTheme(theme === 'dark' ? 'light' : 'dark'),\n [theme, setTheme],\n )\n\n /* ── Sync to <html> attributes ── */\n useEffect(() => {\n const root = document.documentElement\n root.setAttribute('data-theme', theme)\n\n if (contrast === 'high') {\n root.setAttribute('data-contrast', 'high')\n } else {\n root.removeAttribute('data-contrast')\n }\n }, [theme, contrast])\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, contrast, setContrast, toggleTheme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n","import { useState, useCallback } from 'react'\n\ninterface UseDisclosureOptions {\n defaultOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n}\n\ninterface UseDisclosureReturn {\n isOpen: boolean\n onOpen: () => void\n onClose: () => void\n onToggle: () => void\n}\n\nexport function useDisclosure(options: UseDisclosureOptions = {}): UseDisclosureReturn {\n const { defaultOpen = false, onOpen: onOpenCallback, onClose: onCloseCallback } = options\n const [isOpen, setIsOpen] = useState(defaultOpen)\n\n const onOpen = useCallback(() => {\n setIsOpen(true)\n onOpenCallback?.()\n }, [onOpenCallback])\n\n const onClose = useCallback(() => {\n setIsOpen(false)\n onCloseCallback?.()\n }, [onCloseCallback])\n\n const onToggle = useCallback(() => {\n if (isOpen) {\n onClose()\n } else {\n onOpen()\n }\n }, [isOpen, onOpen, onClose])\n\n return { isOpen, onOpen, onClose, onToggle }\n}\n","import { useEffect, useRef } from 'react'\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ')\n\nexport function useFocusTrap(ref: React.RefObject<HTMLElement | null>, active: boolean): void {\n const previouslyFocusedRef = useRef<HTMLElement | null>(null)\n\n useEffect(() => {\n if (!active || !ref.current) return\n\n // Store the currently focused element so we can restore it later\n previouslyFocusedRef.current = document.activeElement as HTMLElement | null\n\n const container = ref.current\n const focusableElements = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n\n // Focus the first focusable element when activated\n if (focusableElements.length > 0) {\n focusableElements[0].focus()\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') return\n\n const focusable = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey) {\n // Shift+Tab: if on first element, wrap to last\n if (document.activeElement === first) {\n e.preventDefault()\n last.focus()\n }\n } else {\n // Tab: if on last element, wrap to first\n if (document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n\n // Restore focus to the previously focused element\n if (previouslyFocusedRef.current && typeof previouslyFocusedRef.current.focus === 'function') {\n previouslyFocusedRef.current.focus()\n }\n }\n }, [active, ref])\n}\n","import { useState, useCallback } from 'react'\n\ninterface UseKeyboardNavOptions {\n orientation?: 'horizontal' | 'vertical'\n loop?: boolean\n onSelect?: (index: number) => void\n}\n\ninterface UseKeyboardNavReturn {\n activeIndex: number\n setActiveIndex: (index: number) => void\n onKeyDown: (e: React.KeyboardEvent) => void\n}\n\nexport function useKeyboardNav(\n items: React.RefObject<(HTMLElement | null)[]>,\n options: UseKeyboardNavOptions = {}\n): UseKeyboardNavReturn {\n const { orientation = 'vertical', loop = true, onSelect } = options\n const [activeIndex, setActiveIndex] = useState(0)\n\n const prevKey = orientation === 'vertical' ? 'ArrowUp' : 'ArrowLeft'\n const nextKey = orientation === 'vertical' ? 'ArrowDown' : 'ArrowRight'\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const list = items.current\n if (!list || list.length === 0) return\n\n const count = list.length\n\n if (e.key === nextKey) {\n e.preventDefault()\n setActiveIndex((prev) => {\n const next = prev + 1\n if (next >= count) {\n const wrapped = loop ? 0 : prev\n list[wrapped]?.focus()\n return wrapped\n }\n list[next]?.focus()\n return next\n })\n } else if (e.key === prevKey) {\n e.preventDefault()\n setActiveIndex((prev) => {\n const next = prev - 1\n if (next < 0) {\n const wrapped = loop ? count - 1 : prev\n list[wrapped]?.focus()\n return wrapped\n }\n list[next]?.focus()\n return next\n })\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect?.(activeIndex)\n } else if (e.key === 'Home') {\n e.preventDefault()\n setActiveIndex(0)\n list[0]?.focus()\n } else if (e.key === 'End') {\n e.preventDefault()\n const last = count - 1\n setActiveIndex(last)\n list[last]?.focus()\n }\n },\n [items, activeIndex, prevKey, nextKey, loop, onSelect]\n )\n\n return { activeIndex, setActiveIndex, onKeyDown }\n}\n","'use client'\n\nimport { useState, useEffect } from 'react'\n\nexport function useReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false)\n\n useEffect(() => {\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)')\n setReduced(mq.matches)\n const handler = (e: MediaQueryListEvent) => setReduced(e.matches)\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [])\n\n return reduced\n}\n","import { type Ref, type RefCallback, type MutableRefObject, useCallback } from 'react'\n\nexport function useMergedRef<T>(...refs: (Ref<T> | undefined)[]): RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useCallback((node: T | null) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as MutableRefObject<T | null>).current = node\n })\n }, refs)\n}\n"],"mappings":"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","names":["jsx","jsxs","useId","jsx","jsxs","useId","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","useEffect","jsx","useEffect","createContext","useContext","useEffect","useRef","useCallback","useId","useState","useEffect","jsx","jsxs","createContext","useContext","useRef","useId","useCallback","useEffect","Title","Body","Footer","createContext","useCallback","useContext","useRef","useState","jsx","jsxs","createContext","useContext","useState","useCallback","useRef","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useEffect","useRef","Fragment","jsx","jsxs","useState","useRef","useEffect","useState","jsx","jsxs","useState","useState","jsx","jsxs","useState","createContext","useContext","useState","jsx","jsxs","createContext","useState","useContext","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","useState","useRef","useEffect","createContext","useContext","useState","jsx","jsxs","createContext","jsx","useState","jsxs","useState","useRef","jsx","jsxs","useState","useRef","createContext","useContext","useState","useEffect","useCallback","jsx","useState","useCallback","useEffect","useRef","useState","useCallback","useState","useEffect","useCallback"]}
|