@ambersecurityinc/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/chunk-2NDCSOJ6.js +2359 -0
- package/dist/chunk-2NDCSOJ6.js.map +1 -0
- package/dist/chunk-ADYBFXWS.mjs +2337 -0
- package/dist/chunk-ADYBFXWS.mjs.map +1 -0
- package/dist/chunk-E4FQ57CA.js +148 -0
- package/dist/chunk-E4FQ57CA.js.map +1 -0
- package/dist/chunk-I5MLI7LI.mjs +139 -0
- package/dist/chunk-I5MLI7LI.mjs.map +1 -0
- package/dist/components.d.mts +354 -0
- package/dist/components.d.ts +354 -0
- package/dist/components.js +92 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +3 -0
- package/dist/components.mjs.map +1 -0
- package/dist/index.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +125 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +4 -0
- package/dist/index.mjs.map +1 -0
- package/dist/tokens.css +125 -0
- package/dist/tokens.d.mts +116 -0
- package/dist/tokens.d.ts +116 -0
- package/dist/tokens.js +40 -0
- package/dist/tokens.js.map +1 -0
- package/dist/tokens.mjs +3 -0
- package/dist/tokens.mjs.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/layout/AppShell.tsx","../src/components/layout/Sidebar.tsx","../src/components/layout/Header.tsx","../src/components/data-display/Badge.tsx","../src/components/data-display/Skeleton.tsx","../src/components/data-display/EmptyState.tsx","../src/components/data-display/DataTable.tsx","../src/components/data-display/StatCard.tsx","../src/components/feedback/Toast.tsx","../src/components/feedback/ToastProvider.tsx","../src/components/feedback/Modal.tsx","../src/components/feedback/ConfirmDialog.tsx","../src/components/form/Input.tsx","../src/components/form/Select.tsx","../src/components/form/Button.tsx","../src/components/form/Toggle.tsx","../src/components/form/Checkbox.tsx","../src/components/navigation/Tabs.tsx","../src/components/navigation/Dropdown.tsx"],"names":["jsxs","jsx","useEffect","useCallback","Fragment","useMemo","useState","useRef","baseStyle","createContext","createPortal","useContext","forwardRef","useId","variantStyles","barStyle"],"mappings":"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","file":"chunk-2NDCSOJ6.js","sourcesContent":["import type { CSSProperties, ReactNode } from \"react\";\n\nexport interface AppShellProps {\n /** Sidebar element (typically <Sidebar />) */\n sidebar?: ReactNode;\n /** Header element (typically <Header />) */\n header?: ReactNode;\n /** Main page content */\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nconst rootStyle: CSSProperties = {\n display: \"flex\",\n minHeight: \"100vh\",\n background: \"var(--bg)\",\n color: \"var(--text)\",\n fontFamily: \"var(--font-body, 'Manrope', sans-serif)\",\n};\n\nconst mainWrapperStyle: CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n minWidth: 0, // prevent flex child overflow\n};\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n padding: \"24px\",\n overflowY: \"auto\",\n};\n\n/**\n * Top-level dashboard shell providing sidebar + header + main content layout.\n *\n * Relies on CSS custom properties (design tokens) set by ThemeProvider.\n */\nexport function AppShell({\n sidebar,\n header,\n children,\n className,\n style,\n}: AppShellProps) {\n return (\n <div\n className={className}\n style={{ ...rootStyle, ...style }}\n >\n {sidebar}\n <div style={mainWrapperStyle}>\n {header}\n <main style={contentStyle}>{children}</main>\n </div>\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n type CSSProperties,\n type ReactNode,\n type KeyboardEvent,\n} from \"react\";\n\nexport interface SidebarProps {\n /** Whether the sidebar is collapsed to icon-only mode */\n collapsed?: boolean;\n /** Toggle collapsed state */\n onToggle?: () => void;\n /** Slot rendered at the top (e.g. tenant switcher / logo) */\n header?: ReactNode;\n /** Navigation items and section groups */\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n /** Controls mobile overlay visibility */\n mobileOpen?: boolean;\n /** Called when the mobile overlay should close */\n onMobileClose?: () => void;\n}\n\nconst SIDEBAR_WIDTH = 260;\nconst SIDEBAR_COLLAPSED_WIDTH = 64;\nconst MOBILE_BREAKPOINT = 768;\n\n/**\n * Collapsible sidebar with mobile overlay support.\n *\n * Desktop: renders inline, toggles between full and collapsed widths.\n * Mobile (<768px): renders as an overlay with backdrop.\n */\nexport function Sidebar({\n collapsed = false,\n onToggle,\n header,\n children,\n className,\n style,\n mobileOpen = false,\n onMobileClose,\n}: SidebarProps) {\n // Close mobile sidebar on Escape\n useEffect(() => {\n if (!mobileOpen) return;\n const handleKeyDown = (e: globalThis.KeyboardEvent) => {\n if (e.key === \"Escape\") onMobileClose?.();\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [mobileOpen, onMobileClose]);\n\n // Lock body scroll when mobile overlay is open\n useEffect(() => {\n if (!mobileOpen) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [mobileOpen]);\n\n const handleToggleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onToggle?.();\n }\n },\n [onToggle],\n );\n\n const width = collapsed ? SIDEBAR_COLLAPSED_WIDTH : SIDEBAR_WIDTH;\n\n const navStyle: CSSProperties = {\n width,\n minWidth: width,\n height: \"100vh\",\n display: \"flex\",\n flexDirection: \"column\",\n background: \"var(--sidebar)\",\n color: \"var(--text-sidebar)\",\n borderRight: \"1px solid var(--border-sidebar)\",\n transition: \"width 200ms ease, min-width 200ms ease\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n position: \"sticky\",\n top: 0,\n };\n\n const mobileNavStyle: CSSProperties = {\n ...navStyle,\n position: \"fixed\",\n top: 0,\n left: 0,\n zIndex: 1100,\n width: SIDEBAR_WIDTH,\n minWidth: SIDEBAR_WIDTH,\n transform: mobileOpen ? \"translateX(0)\" : `translateX(-100%)`,\n transition: \"transform 200ms ease\",\n };\n\n const backdropStyle: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n zIndex: 1099,\n background: \"rgba(0,0,0,0.5)\",\n opacity: mobileOpen ? 1 : 0,\n pointerEvents: mobileOpen ? \"auto\" : \"none\",\n transition: \"opacity 200ms ease\",\n };\n\n const headerSlotStyle: CSSProperties = {\n padding: collapsed ? \"16px 8px\" : \"16px\",\n borderBottom: \"1px solid var(--border-sidebar)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: collapsed ? \"center\" : \"space-between\",\n gap: 8,\n minHeight: 56,\n };\n\n const toggleBtnStyle: CSSProperties = {\n background: \"transparent\",\n border: \"none\",\n color: \"var(--text-sidebar-muted)\",\n cursor: \"pointer\",\n padding: 4,\n borderRadius: 4,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n };\n\n const bodyStyle: CSSProperties = {\n flex: 1,\n padding: collapsed ? \"8px 4px\" : \"8px 12px\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n };\n\n const toggleIcon = collapsed ? \"\\u25B6\" : \"\\u25C0\";\n\n const sidebarContent = (\n <>\n <div style={headerSlotStyle}>\n {!collapsed && header}\n {onToggle && (\n <button\n type=\"button\"\n onClick={onToggle}\n onKeyDown={handleToggleKeyDown}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n style={toggleBtnStyle}\n >\n <span aria-hidden=\"true\" style={{ fontSize: 12 }}>\n {toggleIcon}\n </span>\n </button>\n )}\n </div>\n <div style={bodyStyle} role=\"group\" aria-label=\"Sidebar navigation\">\n {children}\n </div>\n </>\n );\n\n return (\n <>\n {/* Desktop sidebar */}\n <nav\n aria-label=\"Main navigation\"\n className={className}\n style={{ ...navStyle, ...style }}\n data-sidebar-desktop=\"\"\n >\n {sidebarContent}\n </nav>\n\n {/* Mobile overlay */}\n <div\n aria-hidden={!mobileOpen}\n style={backdropStyle}\n onClick={onMobileClose}\n />\n <nav\n aria-label=\"Main navigation\"\n aria-modal={mobileOpen ? true : undefined}\n role={mobileOpen ? \"dialog\" : undefined}\n style={{ ...mobileNavStyle, ...style }}\n data-sidebar-mobile=\"\"\n >\n {sidebarContent}\n </nav>\n\n {/*\n Inline critical media-query styles.\n Desktop: hide mobile sidebar + backdrop.\n Mobile: hide desktop sidebar.\n */}\n <style>{`\n [data-sidebar-mobile] { display: none; }\n @media (max-width: ${MOBILE_BREAKPOINT - 1}px) {\n [data-sidebar-desktop] { display: none !important; }\n [data-sidebar-mobile] { display: flex !important; }\n }\n `}</style>\n </>\n );\n}\n\n/* ---- Section group helper ---- */\n\nexport interface SidebarSectionProps {\n /** Section heading label — hidden when sidebar is collapsed */\n title?: string;\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nconst sectionStyle: CSSProperties = {\n marginBottom: 8,\n};\n\nconst sectionTitleStyle: CSSProperties = {\n fontSize: 11,\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n color: \"var(--text-sidebar-muted)\",\n padding: \"12px 8px 4px\",\n userSelect: \"none\",\n};\n\nexport function SidebarSection({\n title,\n children,\n className,\n style: customStyle,\n}: SidebarSectionProps) {\n return (\n <div\n className={className}\n style={{ ...sectionStyle, ...customStyle }}\n role=\"group\"\n aria-label={title}\n >\n {title && <div style={sectionTitleStyle}>{title}</div>}\n {children}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from \"react\";\n\nexport interface Breadcrumb {\n label: string;\n href?: string;\n}\n\nexport interface HeaderProps {\n /** Breadcrumb trail rendered left-to-right */\n breadcrumbs?: Breadcrumb[];\n /** Slot for action buttons (e.g. notifications, create button) */\n actions?: ReactNode;\n /** Slot for user avatar / profile menu trigger */\n avatar?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nconst barStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 16,\n minHeight: 56,\n padding: \"0 24px\",\n background: \"var(--surface)\",\n borderBottom: \"1px solid var(--border)\",\n flexShrink: 0,\n};\n\nconst breadcrumbNavStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n flex: 1,\n minWidth: 0,\n overflow: \"hidden\",\n};\n\nconst crumbStyle: CSSProperties = {\n fontSize: 14,\n color: \"var(--text-muted)\",\n whiteSpace: \"nowrap\",\n textDecoration: \"none\",\n transition: \"color 150ms ease\",\n};\n\nconst crumbCurrentStyle: CSSProperties = {\n ...crumbStyle,\n color: \"var(--text)\",\n fontWeight: 600,\n};\n\nconst separatorStyle: CSSProperties = {\n fontSize: 12,\n color: \"var(--text-muted)\",\n userSelect: \"none\",\n flexShrink: 0,\n};\n\nconst rightSlotStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n flexShrink: 0,\n};\n\n/**\n * Application header with breadcrumb navigation, action buttons slot,\n * and user avatar slot.\n */\nexport function Header({\n breadcrumbs = [],\n actions,\n avatar,\n className,\n style,\n}: HeaderProps) {\n const lastIdx = breadcrumbs.length - 1;\n\n return (\n <header\n className={className}\n style={{ ...barStyle, ...style }}\n >\n {breadcrumbs.length > 0 && (\n <nav aria-label=\"Breadcrumb\" style={breadcrumbNavStyle}>\n <ol\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n }}\n >\n {breadcrumbs.map((crumb, i) => {\n const isCurrent = i === lastIdx;\n return (\n <li\n key={`${crumb.label}-${i}`}\n style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}\n >\n {i > 0 && (\n <span aria-hidden=\"true\" style={separatorStyle}>\n /\n </span>\n )}\n {crumb.href && !isCurrent ? (\n <a\n href={crumb.href}\n style={crumbStyle}\n >\n {crumb.label}\n </a>\n ) : (\n <span\n style={isCurrent ? crumbCurrentStyle : crumbStyle}\n aria-current={isCurrent ? \"page\" : undefined}\n >\n {crumb.label}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n )}\n\n <div style={rightSlotStyle}>\n {actions}\n {avatar}\n </div>\n </header>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\n\nexport type BadgeVariant = \"success\" | \"warning\" | \"error\" | \"info\" | \"accent\" | \"neutral\";\nexport type BadgeSize = \"sm\" | \"md\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n /** Visual style of the badge. */\n variant: BadgeVariant;\n /** Size of the badge. Defaults to \"md\". */\n size?: BadgeSize;\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nconst variantStyles: Record<BadgeVariant, CSSProperties> = {\n success: { background: \"var(--success-soft)\", color: \"var(--success)\" },\n warning: { background: \"var(--warning-soft)\", color: \"var(--warning)\" },\n error: { background: \"var(--error-soft)\", color: \"var(--error)\" },\n info: { background: \"var(--info-soft)\", color: \"var(--info)\" },\n accent: { background: \"var(--accent-soft)\", color: \"var(--accent)\" },\n neutral: { background: \"var(--surface-alt)\", color: \"var(--text-secondary)\" },\n};\n\nconst sizeStyles: Record<BadgeSize, CSSProperties> = {\n sm: { fontSize: 11, padding: \"1px 6px\", borderRadius: \"var(--radius-sm, 6px)\" },\n md: { fontSize: 12, padding: \"2px 8px\", borderRadius: \"var(--radius-sm, 6px)\" },\n};\n\nexport function Badge({\n variant,\n size = \"md\",\n children,\n className,\n style,\n ...rest\n}: BadgeProps) {\n return (\n <span\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n fontFamily: \"var(--font-body)\",\n fontWeight: 600,\n lineHeight: 1.5,\n whiteSpace: \"nowrap\",\n ...variantStyles[variant],\n ...sizeStyles[size],\n ...style,\n }}\n {...rest}\n >\n {children}\n </span>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from \"react\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n /** Shape of the skeleton placeholder. */\n variant: \"rect\" | \"circle\" | \"text\";\n /** Width in px or CSS value. Defaults vary by variant. */\n width?: number | string;\n /** Height in px or CSS value. Defaults vary by variant. */\n height?: number | string;\n /** Number of text lines to render (only used when variant is \"text\"). */\n lines?: number;\n className?: string;\n style?: CSSProperties;\n}\n\nconst shimmerKeyframes = `\n@keyframes amber-skeleton-shimmer {\n 0% { background-position: -400px 0; }\n 100% { background-position: 400px 0; }\n}\n`;\n\nlet styleInjected = false;\nfunction injectKeyframes() {\n if (styleInjected || typeof document === \"undefined\") return;\n const sheet = document.createElement(\"style\");\n sheet.textContent = shimmerKeyframes;\n document.head.appendChild(sheet);\n styleInjected = true;\n}\n\nfunction baseStyle(extra: CSSProperties): CSSProperties {\n return {\n background: `linear-gradient(90deg, var(--surface-alt, #eee) 25%, var(--surface-hover, #ddd) 50%, var(--surface-alt, #eee) 75%)`,\n backgroundSize: \"800px 100%\",\n animation: \"amber-skeleton-shimmer 1.6s ease-in-out infinite\",\n borderRadius: \"var(--radius-sm, 6px)\",\n ...extra,\n };\n}\n\nexport function Skeleton({\n variant,\n width,\n height,\n lines = 3,\n className,\n style,\n ...rest\n}: SkeletonProps) {\n injectKeyframes();\n\n if (variant === \"text\") {\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={className}\n style={{ display: \"flex\", flexDirection: \"column\", gap: 8, ...style }}\n {...rest}\n >\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={i}\n style={baseStyle({\n width: i === lines - 1 ? \"60%\" : (width ?? \"100%\"),\n height: typeof height === \"number\" ? height : (height ?? 14),\n borderRadius: \"var(--radius-sm, 6px)\",\n })}\n />\n ))}\n <span style={{ position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", clip: \"rect(0,0,0,0)\" }}>\n Loading...\n </span>\n </div>\n );\n }\n\n const isCircle = variant === \"circle\";\n const resolvedWidth = width ?? (isCircle ? 40 : \"100%\");\n const resolvedHeight = height ?? (isCircle ? 40 : 20);\n\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={className}\n style={baseStyle({\n width: resolvedWidth,\n height: resolvedHeight,\n borderRadius: isCircle ? \"50%\" : \"var(--radius-sm, 6px)\",\n ...style,\n })}\n {...rest}\n >\n <span style={{ position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", clip: \"rect(0,0,0,0)\" }}>\n Loading...\n </span>\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n /** Optional icon element rendered above the title. */\n icon?: ReactNode;\n /** Primary heading for the empty state. */\n title: string;\n /** Supporting description text. */\n description?: string;\n /** Action element (typically a button) rendered below the description. */\n action?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n style,\n ...rest\n}: EmptyStateProps) {\n return (\n <div\n role=\"status\"\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 48,\n textAlign: \"center\",\n fontFamily: \"var(--font-body)\",\n ...style,\n }}\n {...rest}\n >\n {icon && (\n <div\n style={{\n marginBottom: 16,\n color: \"var(--text-muted)\",\n fontSize: 40,\n lineHeight: 1,\n }}\n >\n {icon}\n </div>\n )}\n <h3\n style={{\n margin: 0,\n fontSize: 16,\n fontWeight: 600,\n color: \"var(--text)\",\n fontFamily: \"var(--font-display)\",\n }}\n >\n {title}\n </h3>\n {description && (\n <p\n style={{\n margin: \"8px 0 0\",\n fontSize: 14,\n color: \"var(--text-secondary)\",\n maxWidth: 360,\n lineHeight: 1.5,\n }}\n >\n {description}\n </p>\n )}\n {action && <div style={{ marginTop: 20 }}>{action}</div>}\n </div>\n );\n}\n","import {\n useCallback,\n useMemo,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Skeleton } from \"./Skeleton\";\nimport { EmptyState } from \"./EmptyState\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport interface DataTableColumn<T> {\n /** Unique key identifying the column (must match a key on T, or be arbitrary when using render). */\n key: string;\n /** Header label. */\n header: string;\n /** Whether the column is sortable. */\n sortable?: boolean;\n /** Custom cell renderer. Receives the full row. */\n render?: (row: T, rowIndex: number) => ReactNode;\n}\n\nexport interface DataTableProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Column definitions. */\n columns: DataTableColumn<T>[];\n /** Row data array. */\n data: T[];\n /** Show loading skeleton instead of data. */\n loading?: boolean;\n /** Content displayed when data is empty and not loading. */\n emptyState?: ReactNode;\n\n // Selection\n /** Enable row selection checkboxes. */\n selectable?: boolean;\n /** Currently selected row indices. */\n selectedRows?: Set<number>;\n /** Callback when selection changes. */\n onSelectionChange?: (selected: Set<number>) => void;\n\n // Sorting\n /** Currently sorted column key. */\n sortKey?: string;\n /** Current sort direction. */\n sortDirection?: SortDirection;\n /** Callback when a sortable column header is clicked. */\n onSort?: (key: string, direction: SortDirection) => void;\n\n // Pagination (cursor-based)\n /** Opaque cursor value representing the current page. */\n cursor?: string | null;\n /** Callback to request a page change. Receives \"next\" or \"prev\" as direction and the current cursor. */\n onPageChange?: (direction: \"next\" | \"prev\", currentCursor: string | null) => void;\n /** Rows per page. Used only for skeleton row count when loading. */\n pageSize?: number;\n\n className?: string;\n style?: CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Sub-components (internal)\n// ---------------------------------------------------------------------------\n\nfunction SortIcon({ direction, active }: { direction?: SortDirection; active: boolean }) {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{\n marginLeft: 4,\n flexShrink: 0,\n opacity: active ? 1 : 0.35,\n transition: \"opacity 0.15s\",\n }}\n >\n <path\n d=\"M7 3L10 6.5H4L7 3Z\"\n fill={active && direction === \"asc\" ? \"currentColor\" : \"var(--text-muted)\"}\n />\n <path\n d=\"M7 11L4 7.5H10L7 11Z\"\n fill={active && direction === \"desc\" ? \"currentColor\" : \"var(--text-muted)\"}\n />\n </svg>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst tableWrapperStyle: CSSProperties = {\n width: \"100%\",\n overflowX: \"auto\",\n border: \"1px solid var(--border)\",\n borderRadius: \"var(--radius-md, 10px)\",\n background: \"var(--surface)\",\n fontFamily: \"var(--font-body)\",\n};\n\nconst tableStyle: CSSProperties = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: 14,\n};\n\nconst thStyle: CSSProperties = {\n textAlign: \"left\",\n padding: \"10px 14px\",\n fontWeight: 600,\n fontSize: 12,\n color: \"var(--text-secondary)\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.04em\",\n borderBottom: \"1px solid var(--border)\",\n background: \"var(--surface-alt)\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n};\n\nconst tdStyle: CSSProperties = {\n padding: \"10px 14px\",\n color: \"var(--text)\",\n borderBottom: \"1px solid var(--border)\",\n verticalAlign: \"middle\",\n};\n\nconst checkboxCellStyle: CSSProperties = {\n width: 36,\n textAlign: \"center\",\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n data,\n loading = false,\n emptyState,\n selectable = false,\n selectedRows,\n onSelectionChange,\n sortKey,\n sortDirection,\n onSort,\n cursor = null,\n onPageChange,\n pageSize = 10,\n className,\n style,\n ...rest\n}: DataTableProps<T>) {\n // ----- Selection helpers -----\n const selected = selectedRows ?? new Set<number>();\n\n const allSelected = useMemo(\n () => data.length > 0 && data.every((_, i) => selected.has(i)),\n [data, selected],\n );\n\n const someSelected = useMemo(\n () => !allSelected && data.some((_, i) => selected.has(i)),\n [data, selected, allSelected],\n );\n\n const toggleAll = useCallback(() => {\n if (!onSelectionChange) return;\n if (allSelected) {\n onSelectionChange(new Set());\n } else {\n onSelectionChange(new Set(data.map((_, i) => i)));\n }\n }, [allSelected, data, onSelectionChange]);\n\n const toggleRow = useCallback(\n (index: number) => {\n if (!onSelectionChange) return;\n const next = new Set(selected);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n onSelectionChange(next);\n },\n [selected, onSelectionChange],\n );\n\n // ----- Sort handler -----\n const handleSort = useCallback(\n (key: string) => {\n if (!onSort) return;\n const nextDir: SortDirection =\n sortKey === key && sortDirection === \"asc\" ? \"desc\" : \"asc\";\n onSort(key, nextDir);\n },\n [onSort, sortKey, sortDirection],\n );\n\n // ----- Cell value helper -----\n const getCellValue = (row: T, key: string): ReactNode => {\n const val = row[key];\n if (val == null) return \"\";\n return String(val);\n };\n\n // ----- Loading skeleton -----\n if (loading) {\n return (\n <div className={className} style={{ ...tableWrapperStyle, ...style }} {...rest}>\n <table style={tableStyle} role=\"table\" aria-busy=\"true\">\n <thead>\n <tr>\n {selectable && <th style={{ ...thStyle, ...checkboxCellStyle }} />}\n {columns.map((col) => (\n <th key={col.key} style={thStyle}>\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: pageSize }, (_, rowIdx) => (\n <tr key={rowIdx}>\n {selectable && (\n <td style={{ ...tdStyle, ...checkboxCellStyle }}>\n <Skeleton variant=\"rect\" width={16} height={16} />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} style={tdStyle}>\n <Skeleton variant=\"rect\" width=\"80%\" height={14} />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n }\n\n // ----- Empty state -----\n if (data.length === 0) {\n return (\n <div className={className} style={{ ...tableWrapperStyle, ...style }} {...rest}>\n {emptyState ?? (\n <EmptyState\n title=\"No data\"\n description=\"There are no items to display.\"\n />\n )}\n </div>\n );\n }\n\n // ----- Full table -----\n return (\n <div className={className} style={{ ...tableWrapperStyle, ...style }} {...rest}>\n <table style={tableStyle} role=\"table\">\n <thead>\n <tr>\n {selectable && (\n <th style={{ ...thStyle, ...checkboxCellStyle }}>\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected;\n }}\n onChange={toggleAll}\n aria-label=\"Select all rows\"\n style={{ cursor: \"pointer\" }}\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable && onSort;\n const isActive = sortKey === col.key;\n return (\n <th\n key={col.key}\n style={{\n ...thStyle,\n cursor: isSortable ? \"pointer\" : \"default\",\n }}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n aria-sort={\n isActive\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : undefined\n }\n >\n <span style={{ display: \"inline-flex\", alignItems: \"center\" }}>\n {col.header}\n {isSortable && (\n <SortIcon\n direction={isActive ? sortDirection : undefined}\n active={isActive}\n />\n )}\n </span>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {data.map((row, rowIndex) => {\n const isSelected = selected.has(rowIndex);\n return (\n <tr\n key={rowIndex}\n style={{\n background: isSelected ? \"var(--accent-soft)\" : undefined,\n transition: \"background 0.12s\",\n }}\n >\n {selectable && (\n <td style={{ ...tdStyle, ...checkboxCellStyle }}>\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggleRow(rowIndex)}\n aria-label={`Select row ${rowIndex + 1}`}\n style={{ cursor: \"pointer\" }}\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} style={tdStyle}>\n {col.render ? col.render(row, rowIndex) : getCellValue(row, col.key)}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n\n {/* Pagination controls */}\n {onPageChange && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: 8,\n padding: \"10px 14px\",\n borderTop: \"1px solid var(--border)\",\n }}\n >\n <PaginationButton\n label=\"Previous\"\n onClick={() => onPageChange(\"prev\", cursor)}\n />\n <PaginationButton\n label=\"Next\"\n onClick={() => onPageChange(\"next\", cursor)}\n />\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Pagination button\n// ---------------------------------------------------------------------------\n\nfunction PaginationButton({ label, onClick }: { label: string; onClick: () => void }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"6px 14px\",\n fontSize: 13,\n fontWeight: 500,\n fontFamily: \"var(--font-body)\",\n color: \"var(--text)\",\n background: \"var(--surface-alt)\",\n border: \"1px solid var(--border)\",\n borderRadius: \"var(--radius-sm, 6px)\",\n cursor: \"pointer\",\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLButtonElement).style.background = \"var(--surface-hover)\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLButtonElement).style.background = \"var(--surface-alt)\";\n }}\n >\n {label}\n </button>\n );\n}\n","import { useState, type CSSProperties, type HTMLAttributes, type ReactNode } from \"react\";\n\nexport interface StatCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Descriptive label shown above the value. */\n label: string;\n /** Primary metric value. */\n value: string | number;\n /** Numeric change indicator. Positive = up, negative = down. */\n delta?: number;\n /** Text shown next to the delta value. */\n deltaLabel?: string;\n /** Optional icon element rendered in the top-right. */\n icon?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction DeltaArrow({ direction }: { direction: \"up\" | \"down\" }) {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{\n transform: direction === \"down\" ? \"rotate(180deg)\" : undefined,\n flexShrink: 0,\n }}\n >\n <path d=\"M6 2.5L10 8.5H2L6 2.5Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function StatCard({\n label,\n value,\n delta,\n deltaLabel,\n icon,\n className,\n style,\n ...rest\n}: StatCardProps) {\n const [hovered, setHovered] = useState(false);\n\n const deltaDirection = delta != null && delta >= 0 ? \"up\" : \"down\";\n const deltaColor =\n delta != null\n ? delta >= 0\n ? \"var(--success)\"\n : \"var(--error)\"\n : undefined;\n\n return (\n <div\n className={className}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n position: \"relative\",\n background: \"var(--surface)\",\n border: \"1px solid var(--border)\",\n borderRadius: \"var(--radius-md, 10px)\",\n padding: 20,\n fontFamily: \"var(--font-body)\",\n boxShadow: hovered\n ? \"var(--shadow-md)\"\n : \"var(--shadow)\",\n transition: \"box-shadow 0.2s ease, transform 0.2s ease\",\n transform: hovered ? \"translateY(-1px)\" : \"none\",\n cursor: \"default\",\n ...style,\n }}\n {...rest}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n }}\n >\n <span\n style={{\n fontSize: 13,\n fontWeight: 500,\n color: \"var(--text-secondary)\",\n lineHeight: 1.4,\n }}\n >\n {label}\n </span>\n {icon && (\n <span\n style={{\n color: \"var(--text-muted)\",\n fontSize: 20,\n lineHeight: 1,\n flexShrink: 0,\n marginLeft: 8,\n }}\n >\n {icon}\n </span>\n )}\n </div>\n\n <div\n style={{\n marginTop: 8,\n fontSize: 28,\n fontWeight: 700,\n color: \"var(--text)\",\n fontFamily: \"var(--font-display)\",\n lineHeight: 1.2,\n }}\n >\n {value}\n </div>\n\n {delta != null && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n marginTop: 8,\n fontSize: 13,\n fontWeight: 500,\n color: deltaColor,\n }}\n >\n <DeltaArrow direction={deltaDirection} />\n <span>\n {delta > 0 ? \"+\" : \"\"}\n {delta}%\n </span>\n {deltaLabel && (\n <span style={{ color: \"var(--text-muted)\", marginLeft: 2 }}>\n {deltaLabel}\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useEffect, useRef, type CSSProperties } from \"react\";\n\nexport type ToastVariant = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface ToastProps {\n /** Visual variant */\n variant?: ToastVariant;\n /** Toast message content */\n message: string;\n /** Called when the toast should be removed */\n onDismiss: () => void;\n /** Additional CSS class name */\n className?: string;\n /** Additional inline styles */\n style?: CSSProperties;\n}\n\nconst VARIANT_COLORS: Record<ToastVariant, { bg: string; border: string; icon: string }> = {\n success: {\n bg: \"var(--successSoft)\",\n border: \"var(--success)\",\n icon: \"\\u2713\",\n },\n error: {\n bg: \"var(--errorSoft)\",\n border: \"var(--error)\",\n icon: \"\\u2717\",\n },\n warning: {\n bg: \"var(--warningSoft)\",\n border: \"var(--warning)\",\n icon: \"\\u26A0\",\n },\n info: {\n bg: \"var(--infoSoft)\",\n border: \"var(--info)\",\n icon: \"\\u2139\",\n },\n};\n\nexport function Toast({\n variant = \"info\",\n message,\n onDismiss,\n className,\n style,\n}: ToastProps): JSX.Element {\n const colors = VARIANT_COLORS[variant];\n const toastRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = toastRef.current;\n if (!el) return;\n // Animate in\n requestAnimationFrame(() => {\n el.style.transform = \"translateX(0)\";\n el.style.opacity = \"1\";\n });\n }, []);\n\n const baseStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 10,\n padding: \"12px 16px\",\n borderRadius: 10,\n border: `1px solid ${colors.border}`,\n backgroundColor: colors.bg,\n color: \"var(--text)\",\n fontFamily: \"var(--font-body, inherit)\",\n fontSize: 14,\n lineHeight: 1.5,\n boxShadow: \"var(--shadowMd)\",\n pointerEvents: \"auto\" as const,\n transform: \"translateX(120%)\",\n opacity: 0,\n transition: \"transform 0.3s ease, opacity 0.3s ease\",\n maxWidth: 400,\n minWidth: 280,\n ...style,\n };\n\n return (\n <div\n ref={toastRef}\n role=\"alert\"\n aria-live=\"assertive\"\n className={className}\n style={baseStyle}\n >\n <span\n aria-hidden=\"true\"\n style={{\n flexShrink: 0,\n fontSize: 16,\n lineHeight: \"20px\",\n color: colors.border,\n }}\n >\n {colors.icon}\n </span>\n <span style={{ flex: 1, wordBreak: \"break-word\" }}>{message}</span>\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss notification\"\n style={{\n flexShrink: 0,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n color: \"var(--textMuted)\",\n fontSize: 18,\n lineHeight: \"20px\",\n }}\n >\n \\u00D7\n </button>\n </div>\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Toast, type ToastVariant } from \"./Toast\";\n\n/** Options passed when creating a toast */\nexport interface ToastOptions {\n /** Visual variant (default: \"info\") */\n variant?: ToastVariant;\n /** Auto-dismiss duration in ms (default: 5000, 0 to disable) */\n duration?: number;\n}\n\ninterface ToastEntry {\n id: number;\n message: string;\n variant: ToastVariant;\n duration: number;\n}\n\nexport interface ToastContextValue {\n /** Show a toast notification */\n toast: (message: string, options?: ToastOptions) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nlet nextId = 0;\n\nexport interface ToastProviderProps {\n children: ReactNode;\n}\n\nexport function ToastProvider({ children }: ToastProviderProps): JSX.Element {\n const [toasts, setToasts] = useState<ToastEntry[]>([]);\n const timersRef = useRef<Map<number, ReturnType<typeof setTimeout>>>(new Map());\n\n const dismiss = useCallback((id: number) => {\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const toast = useCallback(\n (message: string, options?: ToastOptions) => {\n const id = nextId++;\n const variant = options?.variant ?? \"info\";\n const duration = options?.duration ?? 5000;\n\n setToasts((prev) => [...prev, { id, message, variant, duration }]);\n\n if (duration > 0) {\n const timer = setTimeout(() => {\n dismiss(id);\n }, duration);\n timersRef.current.set(id, timer);\n }\n },\n [dismiss],\n );\n\n // Clean up all timers on unmount\n useEffect(() => {\n const timers = timersRef.current;\n return () => {\n timers.forEach((timer) => clearTimeout(timer));\n timers.clear();\n };\n }, []);\n\n const containerStyle: CSSProperties = {\n position: \"fixed\",\n bottom: 20,\n right: 20,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n zIndex: 9999,\n pointerEvents: \"none\",\n };\n\n return (\n <ToastContext.Provider value={{ toast }}>\n {children}\n {typeof document !== \"undefined\" &&\n toasts.length > 0 &&\n createPortal(\n <div\n aria-label=\"Notifications\"\n style={containerStyle}\n >\n {toasts.map((t) => (\n <Toast\n key={t.id}\n variant={t.variant}\n message={t.message}\n onDismiss={() => dismiss(t.id)}\n />\n ))}\n </div>,\n document.body,\n )}\n </ToastContext.Provider>\n );\n}\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\"useToast must be used within a <ToastProvider>\");\n }\n return ctx;\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface ModalProps {\n /** Whether the modal is open */\n open: boolean;\n /** Called when the modal requests to close */\n onClose: () => void;\n /** Optional modal title rendered in a header */\n title?: string;\n /** Modal body content */\n children: ReactNode;\n /** Optional footer content (e.g. action buttons) */\n footer?: ReactNode;\n /** Additional CSS class name */\n className?: string;\n /** Additional inline styles applied to the modal panel */\n style?: CSSProperties;\n}\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n className,\n style,\n}: ModalProps): JSX.Element | null {\n const panelRef = useRef<HTMLDivElement>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n\n // Focus trap: focus first focusable element on open, restore on close\n useEffect(() => {\n if (open) {\n previousFocusRef.current = document.activeElement as HTMLElement | null;\n // Delay so the portal is rendered\n const raf = requestAnimationFrame(() => {\n const panel = panelRef.current;\n if (!panel) return;\n const first = panel.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n if (first) {\n first.focus();\n } else {\n panel.focus();\n }\n });\n return () => cancelAnimationFrame(raf);\n } else {\n // Restore focus when closing\n previousFocusRef.current?.focus();\n }\n }, [open]);\n\n // Escape to close\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n }\n },\n [onClose],\n );\n\n // Backdrop click to close\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n },\n [onClose],\n );\n\n if (!open || typeof document === \"undefined\") return null;\n\n const backdropStyle: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n zIndex: 9998,\n padding: 20,\n };\n\n const panelStyle: CSSProperties = {\n position: \"relative\",\n backgroundColor: \"var(--surface)\",\n color: \"var(--text)\",\n borderRadius: 14,\n border: \"1px solid var(--border)\",\n boxShadow: \"var(--shadowLg)\",\n fontFamily: \"var(--font-body, inherit)\",\n maxWidth: 560,\n width: \"100%\",\n maxHeight: \"calc(100vh - 40px)\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n outline: \"none\",\n ...style,\n };\n\n const headerStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px\",\n borderBottom: \"1px solid var(--border)\",\n flexShrink: 0,\n };\n\n const titleStyle: CSSProperties = {\n margin: 0,\n fontSize: 18,\n fontWeight: 600,\n fontFamily: \"var(--font-display, inherit)\",\n color: \"var(--text)\",\n lineHeight: 1.3,\n };\n\n const closeButtonStyle: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 4,\n color: \"var(--textMuted)\",\n fontSize: 20,\n lineHeight: 1,\n borderRadius: 6,\n };\n\n const bodyStyle: CSSProperties = {\n padding: 20,\n flex: 1,\n overflowY: \"auto\",\n fontSize: 14,\n lineHeight: 1.6,\n color: \"var(--textSecondary)\",\n };\n\n const footerStyle: CSSProperties = {\n padding: \"12px 20px\",\n borderTop: \"1px solid var(--border)\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n gap: 8,\n flexShrink: 0,\n };\n\n return createPortal(\n <div\n role=\"presentation\"\n style={backdropStyle}\n onClick={handleBackdropClick}\n onKeyDown={handleKeyDown}\n >\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title ?? \"Dialog\"}\n tabIndex={-1}\n className={className}\n style={panelStyle}\n >\n {title != null && (\n <div style={headerStyle}>\n <h2 style={titleStyle}>{title}</h2>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close dialog\"\n style={closeButtonStyle}\n >\n {\"\\u00D7\"}\n </button>\n </div>\n )}\n <div style={bodyStyle}>{children}</div>\n {footer != null && <div style={footerStyle}>{footer}</div>}\n </div>\n </div>,\n document.body,\n );\n}\n","import { type CSSProperties } from \"react\";\nimport { Modal } from \"./Modal\";\n\nexport interface ConfirmDialogProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Called when the dialog requests to close (cancel or backdrop/escape) */\n onClose: () => void;\n /** Called when the user confirms */\n onConfirm: () => void;\n /** Dialog title */\n title: string;\n /** Optional description text */\n description?: string;\n /** Label for the confirm button (default: \"Confirm\") */\n confirmLabel?: string;\n /** Label for the cancel button (default: \"Cancel\") */\n cancelLabel?: string;\n /** Renders the confirm button in a destructive (red) style */\n destructive?: boolean;\n /** Shows a loading state on the confirm button and disables both buttons */\n loading?: boolean;\n /** Additional CSS class name passed to the underlying Modal */\n className?: string;\n /** Additional inline styles passed to the underlying Modal */\n style?: CSSProperties;\n}\n\nexport function ConfirmDialog({\n open,\n onClose,\n onConfirm,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n destructive = false,\n loading = false,\n className,\n style,\n}: ConfirmDialogProps): JSX.Element | null {\n const buttonBase: CSSProperties = {\n padding: \"8px 16px\",\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 500,\n fontFamily: \"var(--font-body, inherit)\",\n cursor: loading ? \"not-allowed\" : \"pointer\",\n border: \"1px solid var(--border)\",\n lineHeight: 1.4,\n transition: \"background-color 0.15s ease\",\n };\n\n const cancelStyle: CSSProperties = {\n ...buttonBase,\n backgroundColor: \"var(--surface)\",\n color: \"var(--text)\",\n };\n\n const confirmStyle: CSSProperties = {\n ...buttonBase,\n backgroundColor: destructive ? \"var(--error)\" : \"var(--accent)\",\n color: destructive ? \"#fff\" : \"var(--accentText)\",\n border: \"1px solid transparent\",\n opacity: loading ? 0.7 : 1,\n };\n\n const footer = (\n <>\n <button\n type=\"button\"\n onClick={onClose}\n disabled={loading}\n style={cancelStyle}\n >\n {cancelLabel}\n </button>\n <button\n type=\"button\"\n onClick={onConfirm}\n disabled={loading}\n aria-busy={loading || undefined}\n style={confirmStyle}\n >\n {loading ? \"Loading\\u2026\" : confirmLabel}\n </button>\n </>\n );\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={title}\n footer={footer}\n className={className}\n style={style}\n >\n {description != null && (\n <p style={{ margin: 0, color: \"var(--textSecondary)\", lineHeight: 1.6 }}>\n {description}\n </p>\n )}\n </Modal>\n );\n}\n","import React, { forwardRef, useId } from \"react\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n type?: \"text\" | \"password\" | \"search\" | \"email\" | \"url\" | \"tel\" | \"number\";\n label?: string;\n helperText?: string;\n error?: string | boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n type = \"text\",\n label,\n helperText,\n error,\n iconLeft,\n iconRight,\n className,\n style,\n disabled,\n id: idProp,\n ...rest\n },\n ref,\n ) => {\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperId = `${id}-helper`;\n const errorId = `${id}-error`;\n const hasError = Boolean(error);\n const errorMessage = typeof error === \"string\" ? error : undefined;\n\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n ...style,\n }}\n >\n {label && (\n <label\n htmlFor={id}\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n color: \"var(--text)\",\n }}\n >\n {label}\n </label>\n )}\n\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n {iconLeft && (\n <span\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n left: \"10px\",\n display: \"flex\",\n alignItems: \"center\",\n color: \"var(--text-muted, var(--text))\",\n pointerEvents: \"none\",\n }}\n >\n {iconLeft}\n </span>\n )}\n\n <input\n ref={ref}\n id={id}\n type={type}\n disabled={disabled}\n aria-invalid={hasError || undefined}\n aria-describedby={\n [hasError && errorId, helperText && helperId]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n style={{\n width: \"100%\",\n padding: \"8px 12px\",\n paddingLeft: iconLeft ? \"36px\" : \"12px\",\n paddingRight: iconRight ? \"36px\" : \"12px\",\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"var(--text)\",\n backgroundColor: \"var(--surface)\",\n border: `1px solid ${hasError ? \"var(--error)\" : \"var(--border)\"}`,\n borderRadius: \"6px\",\n outline: \"none\",\n transition: \"border-color 0.15s, box-shadow 0.15s\",\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? \"not-allowed\" : undefined,\n boxSizing: \"border-box\",\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = hasError\n ? \"var(--error)\"\n : \"var(--accent)\";\n e.currentTarget.style.boxShadow = `0 0 0 2px ${hasError ? \"var(--error)\" : \"var(--accent)\"}33`;\n rest.onFocus?.(e);\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = hasError\n ? \"var(--error)\"\n : \"var(--border)\";\n e.currentTarget.style.boxShadow = \"none\";\n rest.onBlur?.(e);\n }}\n {...rest}\n />\n\n {iconRight && (\n <span\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n right: \"10px\",\n display: \"flex\",\n alignItems: \"center\",\n color: \"var(--text-muted, var(--text))\",\n pointerEvents: \"none\",\n }}\n >\n {iconRight}\n </span>\n )}\n </div>\n\n {errorMessage && (\n <span\n id={errorId}\n role=\"alert\"\n style={{ fontSize: \"12px\", color: \"var(--error)\" }}\n >\n {errorMessage}\n </span>\n )}\n\n {helperText && !errorMessage && (\n <span\n id={helperId}\n style={{\n fontSize: \"12px\",\n color: \"var(--text-muted, var(--text))\",\n }}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\nexport { Input };\n","import React, { forwardRef, useId } from \"react\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"children\"> {\n label?: string;\n error?: string | boolean;\n helperText?: string;\n options: SelectOption[];\n placeholder?: string;\n}\n\nconst Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n label,\n error,\n helperText,\n options,\n placeholder,\n className,\n style,\n disabled,\n id: idProp,\n ...rest\n },\n ref,\n ) => {\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperId = `${id}-helper`;\n const errorId = `${id}-error`;\n const hasError = Boolean(error);\n const errorMessage = typeof error === \"string\" ? error : undefined;\n\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n ...style,\n }}\n >\n {label && (\n <label\n htmlFor={id}\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n color: \"var(--text)\",\n }}\n >\n {label}\n </label>\n )}\n\n <div style={{ position: \"relative\", display: \"flex\", alignItems: \"center\" }}>\n <select\n ref={ref}\n id={id}\n disabled={disabled}\n aria-invalid={hasError || undefined}\n aria-describedby={\n [hasError && errorId, helperText && helperId]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n style={{\n width: \"100%\",\n padding: \"8px 32px 8px 12px\",\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"var(--text)\",\n backgroundColor: \"var(--surface)\",\n border: `1px solid ${hasError ? \"var(--error)\" : \"var(--border)\"}`,\n borderRadius: \"6px\",\n outline: \"none\",\n appearance: \"none\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n transition: \"border-color 0.15s, box-shadow 0.15s\",\n boxSizing: \"border-box\",\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = hasError\n ? \"var(--error)\"\n : \"var(--accent)\";\n e.currentTarget.style.boxShadow = `0 0 0 2px ${hasError ? \"var(--error)\" : \"var(--accent)\"}33`;\n rest.onFocus?.(e);\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = hasError\n ? \"var(--error)\"\n : \"var(--border)\";\n e.currentTarget.style.boxShadow = \"none\";\n rest.onBlur?.(e);\n }}\n {...rest}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n\n {/* Chevron icon */}\n <svg\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{\n position: \"absolute\",\n right: \"10px\",\n pointerEvents: \"none\",\n color: \"var(--text-muted, var(--text))\",\n }}\n >\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n\n {errorMessage && (\n <span\n id={errorId}\n role=\"alert\"\n style={{ fontSize: \"12px\", color: \"var(--error)\" }}\n >\n {errorMessage}\n </span>\n )}\n\n {helperText && !errorMessage && (\n <span\n id={helperId}\n style={{\n fontSize: \"12px\",\n color: \"var(--text-muted, var(--text))\",\n }}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\nexport { Select };\n","import React, { forwardRef } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n icon?: React.ReactNode;\n loading?: boolean;\n}\n\nconst variantStyles: Record<ButtonVariant, React.CSSProperties> = {\n primary: {\n backgroundColor: \"var(--accent)\",\n color: \"var(--accent-text, #fff)\",\n border: \"1px solid transparent\",\n },\n secondary: {\n backgroundColor: \"var(--surface)\",\n color: \"var(--text)\",\n border: \"1px solid var(--border)\",\n },\n ghost: {\n backgroundColor: \"transparent\",\n color: \"var(--text)\",\n border: \"1px solid transparent\",\n },\n danger: {\n backgroundColor: \"var(--error)\",\n color: \"var(--error-text, #fff)\",\n border: \"1px solid transparent\",\n },\n};\n\nconst Spinner: React.FC = () => (\n <svg\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{\n animation: \"amber-spin 0.6s linear infinite\",\n flexShrink: 0,\n }}\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.25\"\n strokeWidth=\"2\"\n />\n <path\n d=\"M14 8a6 6 0 0 0-6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\n// Inject keyframes once\nif (typeof document !== \"undefined\") {\n const styleId = \"amber-spin-keyframes\";\n if (!document.getElementById(styleId)) {\n const sheet = document.createElement(\"style\");\n sheet.id = styleId;\n sheet.textContent = `@keyframes amber-spin { to { transform: rotate(360deg); } }`;\n document.head.appendChild(sheet);\n }\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = \"primary\",\n icon,\n loading = false,\n disabled,\n children,\n className,\n style,\n type = \"button\",\n ...rest\n },\n ref,\n ) => {\n const isDisabled = disabled || loading;\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={isDisabled}\n className={className}\n aria-busy={loading || undefined}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n padding: \"8px 16px\",\n fontSize: \"14px\",\n fontWeight: 500,\n lineHeight: \"20px\",\n borderRadius: \"6px\",\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n opacity: isDisabled ? 0.5 : 1,\n transition: \"background-color 0.15s, opacity 0.15s\",\n outline: \"none\",\n textDecoration: \"none\",\n whiteSpace: \"nowrap\",\n boxSizing: \"border-box\",\n ...variantStyles[variant],\n ...style,\n }}\n onFocus={(e) => {\n e.currentTarget.style.boxShadow = \"0 0 0 2px var(--accent)33\";\n rest.onFocus?.(e);\n }}\n onBlur={(e) => {\n e.currentTarget.style.boxShadow = \"none\";\n rest.onBlur?.(e);\n }}\n {...rest}\n >\n {loading ? <Spinner /> : icon ? <span aria-hidden=\"true\" style={{ display: \"flex\", alignItems: \"center\", flexShrink: 0 }}>{icon}</span> : null}\n {children}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\nexport { Button };\n","import React, { useId } from \"react\";\n\nexport interface ToggleProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n label?: string;\n disabled?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst TRACK_W = 40;\nconst TRACK_H = 22;\nconst THUMB_SIZE = 16;\nconst THUMB_OFFSET = 3;\n\nconst Toggle: React.FC<ToggleProps> = ({\n checked,\n onChange,\n label,\n disabled = false,\n className,\n style,\n}) => {\n const autoId = useId();\n\n return (\n <div\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"8px\",\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n ...style,\n }}\n >\n <button\n id={autoId}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label ?? undefined}\n disabled={disabled}\n onClick={() => onChange(!checked)}\n style={{\n position: \"relative\",\n width: TRACK_W,\n height: TRACK_H,\n borderRadius: TRACK_H / 2,\n backgroundColor: checked ? \"var(--accent)\" : \"var(--border)\",\n border: \"none\",\n padding: 0,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n transition: \"background-color 0.2s\",\n outline: \"none\",\n flexShrink: 0,\n }}\n onFocus={(e) => {\n e.currentTarget.style.boxShadow = \"0 0 0 2px var(--accent)33\";\n }}\n onBlur={(e) => {\n e.currentTarget.style.boxShadow = \"none\";\n }}\n >\n <span\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n top: THUMB_OFFSET,\n left: checked ? TRACK_W - THUMB_SIZE - THUMB_OFFSET : THUMB_OFFSET,\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: \"50%\",\n backgroundColor: \"#fff\",\n transition: \"left 0.2s\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.2)\",\n }}\n />\n </button>\n\n {label && (\n <label\n htmlFor={autoId}\n style={{\n fontSize: \"14px\",\n color: \"var(--text)\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n userSelect: \"none\",\n }}\n >\n {label}\n </label>\n )}\n </div>\n );\n};\n\nToggle.displayName = \"Toggle\";\nexport { Toggle };\n","import React, { useEffect, useId, useRef } from \"react\";\n\nexport interface CheckboxProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n label?: string;\n disabled?: boolean;\n indeterminate?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst SIZE = 18;\n\nconst Checkbox: React.FC<CheckboxProps> = ({\n checked,\n onChange,\n label,\n disabled = false,\n indeterminate = false,\n className,\n style,\n}) => {\n const autoId = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const isActive = checked || indeterminate;\n\n return (\n <div\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"8px\",\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n ...style,\n }}\n >\n <span\n style={{\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: SIZE,\n height: SIZE,\n flexShrink: 0,\n }}\n >\n <input\n ref={inputRef}\n id={autoId}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n onChange={(e) => onChange(e.target.checked)}\n style={{\n position: \"absolute\",\n width: SIZE,\n height: SIZE,\n margin: 0,\n opacity: 0,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n }}\n />\n {/* Visual box */}\n <span\n aria-hidden=\"true\"\n style={{\n width: SIZE,\n height: SIZE,\n borderRadius: \"4px\",\n border: `1.5px solid ${isActive ? \"var(--accent)\" : \"var(--border)\"}`,\n backgroundColor: isActive ? \"var(--accent)\" : \"var(--surface)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"background-color 0.15s, border-color 0.15s\",\n pointerEvents: \"none\",\n }}\n >\n {checked && !indeterminate && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M2.5 6l2.5 2.5 4.5-5\"\n stroke=\"var(--accent-text, #fff)\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n {indeterminate && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M3 6h6\"\n stroke=\"var(--accent-text, #fff)\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n </span>\n </span>\n\n {label && (\n <label\n htmlFor={autoId}\n style={{\n fontSize: \"14px\",\n color: \"var(--text)\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n userSelect: \"none\",\n }}\n >\n {label}\n </label>\n )}\n </div>\n );\n};\n\nCheckbox.displayName = \"Checkbox\";\nexport { Checkbox };\n","import { useRef, type CSSProperties, type KeyboardEvent } from \"react\";\n\nexport interface Tab {\n key: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n /** The list of tabs to render. */\n tabs: Tab[];\n /** The `key` of the currently active tab. */\n activeKey: string;\n /** Called when the user selects a tab. */\n onChange: (key: string) => void;\n className?: string;\n style?: CSSProperties;\n}\n\nconst barStyle: CSSProperties = {\n display: \"flex\",\n gap: 4,\n borderBottom: \"1px solid var(--border)\",\n background: \"var(--surface)\",\n position: \"relative\",\n overflowX: \"auto\",\n};\n\nconst baseTabStyle: CSSProperties = {\n position: \"relative\",\n padding: \"10px 16px\",\n fontSize: 14,\n fontWeight: 500,\n fontFamily: \"inherit\",\n lineHeight: \"20px\",\n color: \"var(--text-secondary)\",\n background: \"none\",\n border: \"none\",\n borderBottom: \"2px solid transparent\",\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n transition: \"color 150ms, border-color 150ms\",\n outline: \"none\",\n};\n\nconst activeTabStyle: CSSProperties = {\n color: \"var(--accent)\",\n borderBottomColor: \"var(--accent)\",\n};\n\nconst disabledTabStyle: CSSProperties = {\n color: \"var(--text-muted)\",\n cursor: \"not-allowed\",\n opacity: 0.6,\n};\n\nconst focusVisibleOutline: CSSProperties = {\n outline: \"2px solid var(--accent)\",\n outlineOffset: -2,\n borderRadius: 4,\n};\n\n/**\n * Horizontal tab bar with an active indicator.\n *\n * Keyboard navigation: Arrow-Left / Arrow-Right to move focus between tabs,\n * Home / End to jump to first / last tab. Disabled tabs are skipped.\n */\nexport function Tabs({ tabs, activeKey, onChange, className, style }: TabsProps) {\n const tabRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n const enabledIndices = tabs.reduce<number[]>((acc, tab, i) => {\n if (!tab.disabled) acc.push(i);\n return acc;\n }, []);\n\n function focusTab(index: number) {\n tabRefs.current[index]?.focus();\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLDivElement>) {\n const target = e.target as HTMLElement;\n const currentIndex = tabRefs.current.indexOf(target as HTMLButtonElement);\n if (currentIndex === -1) return;\n\n const pos = enabledIndices.indexOf(currentIndex);\n let nextIndex: number | undefined;\n\n switch (e.key) {\n case \"ArrowRight\": {\n const next = pos < enabledIndices.length - 1 ? pos + 1 : 0;\n nextIndex = enabledIndices[next];\n break;\n }\n case \"ArrowLeft\": {\n const prev = pos > 0 ? pos - 1 : enabledIndices.length - 1;\n nextIndex = enabledIndices[prev];\n break;\n }\n case \"Home\":\n nextIndex = enabledIndices[0];\n break;\n case \"End\":\n nextIndex = enabledIndices[enabledIndices.length - 1];\n break;\n default:\n return;\n }\n\n if (nextIndex !== undefined) {\n e.preventDefault();\n focusTab(nextIndex);\n }\n }\n\n return (\n <div\n role=\"tablist\"\n className={className}\n style={{ ...barStyle, ...style }}\n onKeyDown={handleKeyDown}\n >\n {tabs.map((tab, i) => {\n const isActive = tab.key === activeKey;\n const isDisabled = !!tab.disabled;\n\n return (\n <button\n key={tab.key}\n ref={(el) => { tabRefs.current[i] = el; }}\n role=\"tab\"\n id={`tab-${tab.key}`}\n aria-selected={isActive}\n aria-disabled={isDisabled || undefined}\n aria-controls={`tabpanel-${tab.key}`}\n tabIndex={isActive ? 0 : -1}\n disabled={isDisabled}\n onClick={() => {\n if (!isDisabled) onChange(tab.key);\n }}\n onFocus={(e) => {\n Object.assign(e.currentTarget.style, focusVisibleOutline);\n }}\n onBlur={(e) => {\n e.currentTarget.style.outline = \"none\";\n e.currentTarget.style.outlineOffset = \"\";\n e.currentTarget.style.borderRadius = \"\";\n }}\n style={{\n ...baseTabStyle,\n ...(isActive ? activeTabStyle : undefined),\n ...(isDisabled ? disabledTabStyle : undefined),\n }}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\n\nexport interface DropdownItem {\n key: string;\n label: string;\n icon?: ReactNode;\n disabled?: boolean;\n danger?: boolean;\n}\n\nexport interface DropdownProps {\n /** The element that toggles the menu. */\n trigger: ReactNode;\n /** Menu items. */\n items: DropdownItem[];\n /** Called when an enabled item is selected. */\n onSelect: (key: string) => void;\n /** Horizontal alignment of the menu relative to the trigger. @default 'left' */\n align?: \"left\" | \"right\";\n className?: string;\n style?: CSSProperties;\n}\n\n/* ------------------------------------------------------------------ */\n/* Styles */\n/* ------------------------------------------------------------------ */\n\nconst wrapperStyle: CSSProperties = {\n position: \"relative\",\n display: \"inline-block\",\n};\n\nconst triggerBtnStyle: CSSProperties = {\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: \"pointer\",\n font: \"inherit\",\n color: \"inherit\",\n display: \"inline-flex\",\n alignItems: \"center\",\n};\n\nconst menuBase: CSSProperties = {\n position: \"absolute\",\n top: \"calc(100% + 4px)\",\n zIndex: 1000,\n minWidth: 180,\n padding: \"4px 0\",\n background: \"var(--surface)\",\n border: \"1px solid var(--border)\",\n borderRadius: 10,\n boxShadow: \"var(--shadow-md)\",\n listStyle: \"none\",\n margin: 0,\n outline: \"none\",\n};\n\nconst itemBase: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n padding: \"8px 12px\",\n fontSize: 14,\n lineHeight: \"20px\",\n fontFamily: \"inherit\",\n color: \"var(--text)\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n outline: \"none\",\n};\n\nconst itemDisabled: CSSProperties = {\n color: \"var(--text-muted)\",\n cursor: \"not-allowed\",\n opacity: 0.5,\n};\n\nconst itemDanger: CSSProperties = {\n color: \"var(--error)\",\n};\n\nconst itemHighlighted: CSSProperties = {\n background: \"var(--surface-hover)\",\n};\n\nconst itemIconStyle: CSSProperties = {\n display: \"inline-flex\",\n flexShrink: 0,\n width: 16,\n height: 16,\n alignItems: \"center\",\n justifyContent: \"center\",\n};\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Dropdown menu with a configurable trigger element.\n *\n * Keyboard navigation:\n * - Arrow-Down / Arrow-Up to move highlight\n * - Enter / Space to select the highlighted item\n * - Escape to close\n * - Typing a character focuses the first item whose label starts with that character\n */\nexport function Dropdown({\n trigger,\n items,\n onSelect,\n align = \"left\",\n className,\n style,\n}: DropdownProps) {\n const [open, setOpen] = useState(false);\n const [highlightIndex, setHighlightIndex] = useState(-1);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n const itemRefs = useRef<(HTMLLIElement | null)[]>([]);\n\n const enabledIndices = items.reduce<number[]>((acc, item, i) => {\n if (!item.disabled) acc.push(i);\n return acc;\n }, []);\n\n /* ---- open / close helpers ---- */\n\n const openMenu = useCallback(() => {\n setOpen(true);\n setHighlightIndex(enabledIndices[0] ?? -1);\n }, [enabledIndices]);\n\n const closeMenu = useCallback(() => {\n setOpen(false);\n setHighlightIndex(-1);\n }, []);\n\n /* ---- close on outside click ---- */\n\n useEffect(() => {\n if (!open) return;\n function handleClick(e: MouseEvent) {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n closeMenu();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open, closeMenu]);\n\n /* ---- focus menu when opened ---- */\n\n useEffect(() => {\n if (open) {\n menuRef.current?.focus();\n }\n }, [open]);\n\n /* ---- scroll highlighted item into view ---- */\n\n useEffect(() => {\n if (highlightIndex >= 0) {\n itemRefs.current[highlightIndex]?.scrollIntoView({ block: \"nearest\" });\n }\n }, [highlightIndex]);\n\n /* ---- keyboard handler on the menu ---- */\n\n function handleMenuKeyDown(e: KeyboardEvent<HTMLUListElement>) {\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const pos = enabledIndices.indexOf(highlightIndex);\n const next = pos < enabledIndices.length - 1 ? pos + 1 : 0;\n setHighlightIndex(enabledIndices[next]);\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const pos = enabledIndices.indexOf(highlightIndex);\n const prev = pos > 0 ? pos - 1 : enabledIndices.length - 1;\n setHighlightIndex(enabledIndices[prev]);\n break;\n }\n case \"Home\":\n e.preventDefault();\n setHighlightIndex(enabledIndices[0]);\n break;\n case \"End\":\n e.preventDefault();\n setHighlightIndex(enabledIndices[enabledIndices.length - 1]);\n break;\n case \"Enter\":\n case \" \": {\n e.preventDefault();\n const item = items[highlightIndex];\n if (item && !item.disabled) {\n onSelect(item.key);\n closeMenu();\n }\n break;\n }\n case \"Escape\":\n e.preventDefault();\n closeMenu();\n break;\n case \"Tab\":\n closeMenu();\n break;\n default: {\n // Type-ahead: focus first item whose label starts with the typed character\n if (e.key.length === 1) {\n const char = e.key.toLowerCase();\n const match = enabledIndices.find((i) =>\n items[i].label.toLowerCase().startsWith(char),\n );\n if (match !== undefined) setHighlightIndex(match);\n }\n }\n }\n }\n\n /* ---- trigger keyboard handler ---- */\n\n function handleTriggerKeyDown(e: KeyboardEvent<HTMLButtonElement>) {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!open) openMenu();\n }\n }\n\n /* ---- build menu alignment style ---- */\n\n const menuAlignStyle: CSSProperties =\n align === \"right\" ? { right: 0 } : { left: 0 };\n\n return (\n <div\n ref={wrapperRef}\n className={className}\n style={{ ...wrapperStyle, ...style }}\n >\n {/* Trigger */}\n <button\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={open}\n onClick={() => (open ? closeMenu() : openMenu())}\n onKeyDown={handleTriggerKeyDown}\n style={triggerBtnStyle}\n >\n {trigger}\n </button>\n\n {/* Menu */}\n {open && (\n <ul\n ref={menuRef}\n role=\"menu\"\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n style={{ ...menuBase, ...menuAlignStyle }}\n >\n {items.map((item, i) => {\n const isHighlighted = i === highlightIndex;\n const isDisabled = !!item.disabled;\n\n return (\n <li\n key={item.key}\n ref={(el) => { itemRefs.current[i] = el; }}\n role=\"menuitem\"\n aria-disabled={isDisabled || undefined}\n onMouseEnter={() => {\n if (!isDisabled) setHighlightIndex(i);\n }}\n onMouseLeave={() => setHighlightIndex(-1)}\n onClick={() => {\n if (!isDisabled) {\n onSelect(item.key);\n closeMenu();\n }\n }}\n style={{\n ...itemBase,\n ...(item.danger ? itemDanger : undefined),\n ...(isDisabled ? itemDisabled : undefined),\n ...(isHighlighted && !isDisabled ? itemHighlighted : undefined),\n }}\n >\n {item.icon && <span style={itemIconStyle}>{item.icon}</span>}\n {item.label}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n}\n"]}
|