@orellabs/ui 0.1.2 → 1.0.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/README.md +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +124 -122
- package/dist/index.js.map +1 -1
- package/package.json +10 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/tokens/colors.ts","../src/tokens/spacing.ts","../src/tokens/typography.ts","../src/tokens/radii.ts","../src/tokens/shadows.ts","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Badge/Badge.tsx","../src/components/StatGrid/StatGrid.tsx","../src/components/SectionLabel/SectionLabel.tsx","../src/components/TabBar/TabBar.tsx","../src/components/DataTable/DataTable.tsx","../src/components/Input/Input.tsx","../src/components/ScoreBar/ScoreBar.tsx","../src/components/Modal/Modal.tsx","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Icon/Icon.tsx","../src/components/CheckRow/CheckRow.tsx","../src/components/StatusDot/StatusDot.tsx","../src/components/PageHeader/PageHeader.tsx","../src/components/ActionList/ActionList.tsx","../src/components/Toast/Toast.tsx","../src/components/CodeChip/CodeChip.tsx","../src/components/DiffRow/DiffRow.tsx","../src/components/IssueCard/IssueCard.tsx","../src/components/IssueGroup/IssueGroup.tsx","../src/components/MiniStat/MiniStat.tsx","../src/components/ModelTag/ModelTag.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/ProgressList/ProgressList.tsx","../src/components/Radio/Radio.tsx","../src/components/StepBar/StepBar.tsx","../src/components/SummaryCard/SummaryCard.tsx","../src/components/Switch/Switch.tsx","../src/components/Trend/Trend.tsx","../src/hooks/useModal.ts","../src/hooks/useLocalStorage.ts","../src/utils/cx.ts"],"sourcesContent":["export const colors = {\n // Brand\n black: \"#1A1A1A\",\n blackHover: \"#2A2A2A\",\n red: \"#D42B2B\",\n white: \"#FFFFFF\",\n\n // Page & surface\n pageBg: \"#F1F1F1\",\n cardBg: \"#FFFFFF\",\n bgSubtle: \"#FAFAFA\",\n\n // Text\n textPrimary: \"#1A1A1A\",\n textSecondary: \"#6B7280\",\n textTertiary: \"#9CA3AF\",\n textDark: \"#374151\",\n textDisabled: \"#D1D5DB\",\n textInverse: \"#FFFFFF\",\n\n // Borders\n border: \"#E5E5E5\",\n borderLight: \"#D1D5DB\",\n borderSubtle: \"#F3F4F6\",\n borderFocus: \"#1A1A1A\",\n\n // Semantic — status\n success: \"#22C55E\",\n successBg: \"#F0FDF4\",\n successBorder: \"#BBF7D0\",\n\n warning: \"#F59E0B\",\n warningBg: \"#FFFBEB\",\n warningBorder: \"#FDE68A\",\n\n error: \"#EF4444\",\n errorHover: \"#DC2626\",\n errorBg: \"#FEF2F2\",\n errorBorder: \"#FECACA\",\n\n info: \"#2563EB\",\n infoBg: \"#EFF6FF\",\n infoBorder: \"#BFDBFE\",\n\n // Pro badge / neutral chip\n neutralBg: \"#F3F4F6\",\n neutralText: \"#6B7280\",\n\n // Skeleton\n skeletonBase: \"#E5E5E5\",\n skeletonPulse: \"#F1F2F4\",\n} as const;\n\nexport type ColorToken = keyof typeof colors;\n","// Base unit: 4px\nexport const spacing = {\n 0: \"0px\",\n 1: \"4px\",\n 2: \"8px\",\n 3: \"12px\",\n 4: \"16px\",\n 5: \"20px\",\n 6: \"24px\",\n 8: \"32px\",\n 10: \"40px\",\n 12: \"48px\",\n 16: \"64px\",\n 20: \"80px\",\n} as const;\n\nexport type SpacingToken = keyof typeof spacing;\n","export const typography = {\n fontFamily: {\n base: \"-apple-system, 'Helvetica Neue', sans-serif\",\n mono: \"'Menlo', 'Monaco', 'Courier New', monospace\",\n },\n size: {\n xs: \"10px\",\n sm: \"11px\",\n base: \"13px\",\n md: \"14px\",\n lg: \"16px\",\n xl: \"20px\",\n \"2xl\": \"24px\",\n \"3xl\": \"32px\",\n },\n weight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n extrabold: 800,\n },\n lineHeight: {\n tight: 1.2,\n snug: 1.4,\n normal: 1.5,\n relaxed: 1.55,\n loose: 1.75,\n },\n letterSpacing: {\n tight: \"-0.02em\",\n snug: \"-0.01em\",\n normal: \"0em\",\n wide: \"0.02em\",\n },\n} as const;\n","export const radii = {\n none: \"0px\",\n xs: \"4px\",\n sm: \"6px\",\n md: \"8px\",\n lg: \"10px\",\n xl: \"12px\",\n \"2xl\": \"16px\",\n full: \"9999px\",\n} as const;\n\nexport type RadiiToken = keyof typeof radii;\n","export const shadows = {\n none: \"none\",\n sm: \"0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04)\",\n md: \"0 4px 12px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.04)\",\n lg: \"0 20px 60px rgba(0,0,0,0.18)\",\n focus: \"0 0 0 3px rgba(26, 26, 26, 0.12)\",\n} as const;\n\nexport type ShadowToken = keyof typeof shadows;\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\ntype ButtonProps = {\n variant: \"primary\" | \"ghost\" | \"danger\" | \"text\";\n size: \"sm\" | \"md\" | \"lg\";\n loading?: boolean;\n disabled?: boolean;\n fullWidth?: boolean;\n leftIcon?: React.ReactNode;\n children: React.ReactNode;\n onClick?: () => void;\n};\n\nconst sizeStyles = {\n sm: {\n padding: `${spacing[1]} ${spacing[3]}`,\n fontSize: typography.size.base,\n height: \"32px\",\n gap: spacing[1],\n },\n md: {\n padding: `${spacing[2]} ${spacing[4]}`,\n fontSize: typography.size.md,\n height: \"40px\",\n gap: spacing[2],\n },\n lg: {\n padding: `${spacing[3]} ${spacing[6]}`,\n fontSize: typography.size.md,\n height: \"48px\",\n gap: spacing[2],\n },\n} as const;\n\nconst variantStyles = {\n primary: {\n background: colors.black,\n color: colors.textInverse,\n border: \"none\",\n hoverBg: colors.blackHover,\n },\n ghost: {\n background: \"transparent\",\n color: colors.textPrimary,\n border: `1px solid ${colors.border}`,\n hoverBg: colors.bgSubtle,\n },\n danger: {\n background: colors.error,\n color: colors.textInverse,\n border: \"none\",\n hoverBg: colors.errorHover,\n },\n text: {\n background: \"transparent\",\n color: colors.textSecondary,\n border: \"none\",\n hoverBg: colors.bgSubtle,\n },\n} as const;\n\nexport function Button({\n variant,\n size,\n loading = false,\n disabled = false,\n fullWidth = false,\n leftIcon,\n children,\n onClick,\n}: ButtonProps) {\n const sizeS = sizeStyles[size];\n const variantS = variantStyles[variant];\n const isDisabled = disabled || loading;\n\n const style: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: sizeS.gap,\n padding: sizeS.padding,\n fontSize: sizeS.fontSize,\n height: sizeS.height,\n fontFamily: typography.fontFamily.base,\n fontWeight: typography.weight.semibold,\n lineHeight: typography.lineHeight.tight,\n letterSpacing: typography.letterSpacing.snug,\n borderRadius: radii.md,\n background: variantS.background,\n color: variantS.color,\n border: variantS.border,\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n opacity: isDisabled ? 0.5 : 1,\n transition: \"background 150ms ease, opacity 150ms ease, box-shadow 150ms ease\",\n width: fullWidth ? \"100%\" : undefined,\n boxSizing: \"border-box\",\n outline: \"none\",\n };\n\n return (\n <button\n style={style}\n onClick={onClick}\n disabled={isDisabled}\n onMouseEnter={(e) => {\n if (!isDisabled) {\n e.currentTarget.style.background = variantS.hoverBg;\n }\n }}\n onMouseLeave={(e) => {\n if (!isDisabled) {\n e.currentTarget.style.background = variantS.background;\n }\n }}\n onFocus={(e) => {\n e.currentTarget.style.boxShadow = shadows.focus;\n }}\n onBlur={(e) => {\n e.currentTarget.style.boxShadow = \"none\";\n }}\n >\n {loading ? <Spinner /> : leftIcon}\n {children}\n </button>\n );\n}\n\nlet spinnerStyleInjected = false;\n\nfunction ensureSpinnerStyle() {\n if (spinnerStyleInjected || typeof document === \"undefined\") return;\n const style = document.createElement(\"style\");\n style.textContent = `@keyframes ol-spin { to { transform: rotate(360deg) } }`;\n document.head.appendChild(style);\n spinnerStyleInjected = true;\n}\n\nfunction Spinner() {\n ensureSpinnerStyle();\n\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{\n animation: \"ol-spin 0.6s linear infinite\",\n }}\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"28\"\n strokeDashoffset=\"20\"\n opacity=\"0.8\"\n />\n </svg>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\ntype CardProps = {\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n noBorder?: boolean;\n shadow?: boolean;\n children: React.ReactNode;\n};\n\nconst paddingMap = {\n none: \"0px\",\n sm: spacing[3],\n md: spacing[6],\n lg: spacing[8],\n} as const;\n\nexport function Card({\n padding = \"md\",\n noBorder = false,\n shadow = false,\n children,\n}: CardProps) {\n const style: React.CSSProperties = {\n background: colors.cardBg,\n borderRadius: radii.xl,\n padding: paddingMap[padding],\n border: noBorder ? \"none\" : `1px solid ${colors.border}`,\n boxShadow: shadow ? shadows.sm : shadows.none,\n boxSizing: \"border-box\",\n };\n\n return <div style={style}>{children}</div>;\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype BadgeProps = {\n tone: \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\";\n dot?: boolean;\n children: React.ReactNode;\n};\n\nconst toneStyles = {\n success: { bg: colors.successBg, color: colors.success, dot: colors.success },\n warning: { bg: colors.warningBg, color: colors.warning, dot: colors.warning },\n error: { bg: colors.errorBg, color: colors.error, dot: colors.error },\n info: { bg: colors.infoBg, color: colors.info, dot: colors.info },\n neutral: { bg: colors.neutralBg, color: colors.neutralText, dot: colors.textTertiary },\n} as const;\n\nexport const Badge = React.memo(function Badge({ tone, dot = false, children }: BadgeProps) {\n const t = toneStyles[tone];\n\n const style: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: spacing[1],\n padding: `2px ${spacing[2]}`,\n fontSize: typography.size.xs,\n fontWeight: typography.weight.semibold,\n fontFamily: typography.fontFamily.base,\n lineHeight: typography.lineHeight.tight,\n borderRadius: radii.xs,\n background: t.bg,\n color: t.color,\n whiteSpace: \"nowrap\",\n };\n\n const dotStyle: React.CSSProperties = {\n width: \"5px\",\n height: \"5px\",\n borderRadius: radii.full,\n background: t.dot,\n flexShrink: 0,\n };\n\n return (\n <span style={style}>\n {dot && <span style={dotStyle} />}\n {children}\n </span>\n );\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype Stat = {\n label: string;\n value: string;\n unit?: string;\n sub?: string;\n color?: string;\n highlight?: boolean;\n};\n\ntype StatGridProps = {\n stats: Stat[];\n cols?: 2 | 3 | 4;\n};\n\nexport function StatGrid({ stats, cols: _cols = 4 }: StatGridProps) {\n // Use the bordered-strip pattern from csv-doctor's diagnosis screen\n const stripStyle: React.CSSProperties = {\n display: \"flex\",\n border: `1px solid ${colors.border}`,\n borderRadius: radii.lg,\n overflow: \"hidden\",\n };\n\n return (\n <div style={stripStyle}>\n {stats.map((stat, i) => (\n <StatCell key={i} stat={stat} isLast={i === stats.length - 1} />\n ))}\n </div>\n );\n}\n\nfunction StatCell({ stat, isLast }: { stat: Stat; isLast: boolean }) {\n const isHighlight = stat.highlight;\n\n const style: React.CSSProperties = {\n flex: 1,\n padding: `${spacing[3]} ${spacing[4]}`,\n textAlign: \"center\",\n borderRight: isLast ? undefined : `1px solid ${colors.border}`,\n background: isHighlight ? colors.black : \"transparent\",\n };\n\n const valueStyle: React.CSSProperties = {\n fontSize: typography.size.xl,\n fontWeight: typography.weight.bold,\n fontFamily: typography.fontFamily.base,\n lineHeight: typography.lineHeight.tight,\n color: stat.color || (isHighlight ? colors.textInverse : colors.textPrimary),\n display: \"flex\",\n alignItems: \"baseline\",\n justifyContent: \"center\",\n gap: spacing[1],\n margin: 0,\n };\n\n const unitStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n fontWeight: typography.weight.medium,\n color: isHighlight ? colors.textTertiary : colors.textTertiary,\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n fontFamily: typography.fontFamily.base,\n color: isHighlight ? colors.textTertiary : colors.textTertiary,\n marginTop: \"2px\",\n };\n\n const subStyle: React.CSSProperties = {\n fontSize: typography.size.xs,\n color: colors.textTertiary,\n fontFamily: typography.fontFamily.base,\n marginTop: \"4px\",\n };\n\n return (\n <div style={style}>\n <p style={valueStyle}>\n {stat.value}\n {stat.unit && <span style={unitStyle}>{stat.unit}</span>}\n </p>\n <div style={labelStyle}>{stat.label}</div>\n {stat.sub && <div style={subStyle}>{stat.sub}</div>}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\n\ntype SectionLabelProps = {\n children: React.ReactNode;\n action?: React.ReactNode;\n};\n\nexport const SectionLabel = React.memo(function SectionLabel({ children, action }: SectionLabelProps) {\n const style: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: spacing[2],\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n fontWeight: typography.weight.medium,\n fontFamily: typography.fontFamily.base,\n color: colors.textSecondary,\n margin: 0,\n };\n\n return (\n <div style={style}>\n <p style={labelStyle}>{children}</p>\n {action && <div>{action}</div>}\n </div>\n );\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype Tab = {\n id: string;\n label: string;\n badge?: number;\n};\n\ntype TabBarProps = {\n tabs: Tab[];\n active: string;\n onChange: (id: string) => void;\n size?: \"sm\" | \"md\";\n};\n\nexport function TabBar({ tabs, active, onChange, size = \"md\" }: TabBarProps) {\n const containerStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: spacing[1],\n fontFamily: typography.fontFamily.base,\n };\n\n const fontSize = size === \"sm\" ? typography.size.base : typography.size.md;\n const paddingY = size === \"sm\" ? spacing[1] : spacing[2];\n const paddingX = size === \"sm\" ? spacing[3] : spacing[4];\n\n return (\n <div style={containerStyle} role=\"tablist\">\n {tabs.map((tab) => {\n const isActive = tab.id === active;\n\n const tabStyle: React.CSSProperties = {\n padding: `${paddingY} ${paddingX}`,\n fontSize,\n fontWeight: isActive ? typography.weight.semibold : typography.weight.normal,\n fontFamily: typography.fontFamily.base,\n color: isActive ? colors.textInverse : colors.textSecondary,\n background: isActive ? colors.black : \"transparent\",\n border: \"none\",\n borderRadius: radii.full,\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[2],\n transition: \"background 150ms ease, color 150ms ease\",\n whiteSpace: \"nowrap\",\n };\n\n const badgeStyle: React.CSSProperties = {\n fontSize: typography.size.xs,\n fontWeight: typography.weight.semibold,\n background: isActive ? \"rgba(255,255,255,0.2)\" : colors.neutralBg,\n color: isActive ? colors.textInverse : colors.textSecondary,\n borderRadius: radii.full,\n padding: `0 ${spacing[2]}`,\n minWidth: \"20px\",\n textAlign: \"center\",\n lineHeight: \"20px\",\n };\n\n return (\n <button\n key={tab.id}\n style={tabStyle}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => !isActive && onChange(tab.id)}\n onMouseEnter={(e) => {\n if (!isActive) {\n e.currentTarget.style.background = colors.neutralBg;\n e.currentTarget.style.color = colors.textPrimary;\n }\n }}\n onMouseLeave={(e) => {\n if (!isActive) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = colors.textSecondary;\n }\n }}\n >\n {tab.label}\n {tab.badge !== undefined && <span style={badgeStyle}>{tab.badge}</span>}\n </button>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype Column<T> = {\n key: keyof T | string;\n header: string;\n width?: number | string;\n render?: (row: T) => React.ReactNode;\n align?: \"left\" | \"center\" | \"right\";\n};\n\ntype DataTableProps<T> = {\n columns: Column<T>[];\n rows: T[];\n loading?: boolean;\n emptyState?: React.ReactNode;\n onRowClick?: (row: T) => void;\n};\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n rows,\n loading = false,\n emptyState,\n onRowClick,\n}: DataTableProps<T>) {\n const tableStyle: React.CSSProperties = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontFamily: typography.fontFamily.base,\n fontSize: typography.size.base,\n };\n\n const thStyle = (col: Column<T>): React.CSSProperties => ({\n textAlign: (col.align || \"left\") as React.CSSProperties[\"textAlign\"],\n padding: `${spacing[3]} ${spacing[4]}`,\n fontSize: typography.size.sm,\n fontWeight: typography.weight.medium,\n color: colors.textTertiary,\n borderBottom: `1px solid ${colors.border}`,\n width: col.width,\n whiteSpace: \"nowrap\",\n });\n\n const tdStyle = (col: Column<T>): React.CSSProperties => ({\n textAlign: (col.align || \"left\") as React.CSSProperties[\"textAlign\"],\n padding: `${spacing[3]} ${spacing[4]}`,\n fontSize: typography.size.base,\n color: colors.textPrimary,\n borderBottom: `1px solid ${colors.borderSubtle}`,\n verticalAlign: \"middle\",\n lineHeight: typography.lineHeight.snug,\n });\n\n const trHoverStyle: React.CSSProperties = {\n cursor: onRowClick ? \"pointer\" : \"default\",\n transition: \"background 100ms ease\",\n };\n\n if (loading) {\n return (\n <div style={{ padding: spacing[8], textAlign: \"center\" }}>\n <p style={{ color: colors.textTertiary, fontSize: typography.size.base }}>Loading...</p>\n </div>\n );\n }\n\n if (rows.length === 0) {\n if (emptyState) return <>{emptyState}</>;\n return (\n <div style={{ padding: spacing[8], textAlign: \"center\" }}>\n <p style={{ color: colors.textTertiary, fontSize: typography.size.base }}>No data</p>\n </div>\n );\n }\n\n return (\n <div style={{ overflowX: \"auto\", borderRadius: radii.md }}>\n <table style={tableStyle}>\n <thead>\n <tr>\n {columns.map((col) => (\n <th key={String(col.key)} style={thStyle(col)}>\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, rowIdx) => (\n <tr\n key={rowIdx}\n style={trHoverStyle}\n onClick={() => onRowClick?.(row)}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = colors.bgSubtle;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n }}\n >\n {columns.map((col) => (\n <td key={String(col.key)} style={tdStyle(col)}>\n {col.render\n ? col.render(row)\n : String(row[col.key as keyof T] ?? \"\")}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\ntype InputProps = {\n label?: string;\n hint?: string;\n error?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n type?: \"text\" | \"email\" | \"password\" | \"time\" | \"url\";\n placeholder?: string;\n disabled?: boolean;\n value: string;\n onChange: (value: string) => void;\n};\n\nexport function Input({\n label,\n hint,\n error,\n prefix,\n suffix,\n type = \"text\",\n placeholder,\n disabled = false,\n value,\n onChange,\n}: InputProps) {\n const hasError = !!error;\n\n const wrapperStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[1],\n fontFamily: typography.fontFamily.base,\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.base,\n fontWeight: typography.weight.medium,\n color: colors.textPrimary,\n margin: 0,\n };\n\n const inputWrapperStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[2],\n padding: `${spacing[2]} ${spacing[3]}`,\n background: disabled ? colors.bgSubtle : colors.cardBg,\n border: `1px solid ${hasError ? colors.error : colors.border}`,\n borderRadius: radii.md,\n transition: \"border-color 150ms ease, box-shadow 150ms ease\",\n cursor: disabled ? \"not-allowed\" : \"text\",\n };\n\n const inputStyle: React.CSSProperties = {\n flex: 1,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontSize: typography.size.md,\n fontFamily: typography.fontFamily.base,\n color: disabled ? colors.textDisabled : colors.textPrimary,\n cursor: disabled ? \"not-allowed\" : \"text\",\n padding: 0,\n width: \"100%\",\n };\n\n const hintStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: hasError ? colors.error : colors.textTertiary,\n margin: 0,\n };\n\n const affixStyle: React.CSSProperties = {\n fontSize: typography.size.base,\n color: colors.textTertiary,\n flexShrink: 0,\n };\n\n return (\n <div style={wrapperStyle}>\n {label && <p style={labelStyle}>{label}</p>}\n <div\n style={inputWrapperStyle}\n onFocusCapture={(e) => {\n const wrapper = e.currentTarget;\n wrapper.style.borderColor = hasError ? colors.error : colors.borderFocus;\n wrapper.style.boxShadow = shadows.focus;\n }}\n onBlurCapture={(e) => {\n const wrapper = e.currentTarget;\n wrapper.style.borderColor = hasError ? colors.error : colors.border;\n wrapper.style.boxShadow = \"none\";\n }}\n >\n {prefix && <span style={affixStyle}>{prefix}</span>}\n <input\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n aria-invalid={hasError}\n style={inputStyle}\n />\n {suffix && <span style={affixStyle}>{suffix}</span>}\n </div>\n {(error || hint) && <p style={hintStyle}>{error || hint}</p>}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype ScoreBarProps = {\n score: number;\n max?: number;\n width?: number | string;\n showLabel?: boolean;\n size?: \"sm\" | \"md\";\n};\n\nfunction getScoreColor(pct: number): string {\n if (pct >= 75) return colors.success;\n if (pct >= 50) return colors.warning;\n return colors.error;\n}\n\nfunction getScoreBg(pct: number): string {\n if (pct >= 75) return colors.successBg;\n if (pct >= 50) return colors.warningBg;\n return colors.errorBg;\n}\n\nexport const ScoreBar = React.memo(function ScoreBar({\n score,\n max = 100,\n width = \"100%\",\n showLabel = true,\n size = \"md\",\n}: ScoreBarProps) {\n const pct = Math.min(Math.max((score / max) * 100, 0), 100);\n const barColor = getScoreColor(pct);\n const bgColor = getScoreBg(pct);\n const barHeight = size === \"sm\" ? \"6px\" : \"8px\";\n\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n width,\n fontFamily: typography.fontFamily.base,\n };\n\n const trackStyle: React.CSSProperties = {\n flex: 1,\n height: barHeight,\n background: bgColor,\n borderRadius: radii.full,\n overflow: \"hidden\",\n };\n\n const fillStyle: React.CSSProperties = {\n height: \"100%\",\n width: `${pct}%`,\n background: barColor,\n borderRadius: radii.full,\n transition: \"width 400ms ease\",\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: size === \"sm\" ? typography.size.xs : typography.size.sm,\n fontWeight: typography.weight.semibold,\n color: barColor,\n minWidth: \"36px\",\n textAlign: \"right\",\n };\n\n return (\n <div style={containerStyle}>\n <div style={trackStyle}>\n <div style={fillStyle} />\n </div>\n {showLabel && <span style={labelStyle}>{Math.round(pct)}%</span>}\n </div>\n );\n});\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\ntype ModalProps = {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n maxWidth?: number;\n title?: string;\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 children,\n maxWidth = 400,\n title,\n}: ModalProps) {\n const [visible, setVisible] = useState(false);\n const dialogRef = useRef<HTMLDivElement>(null);\n const titleId = React.useId();\n\n // Entry animation: mount → rAF → transition in\n useEffect(() => {\n if (!open) {\n setVisible(false);\n return;\n }\n const id = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(id);\n }, [open]);\n\n // ESC key closes modal\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [open, onClose]);\n\n // Focus trap\n useEffect(() => {\n if (!open || !dialogRef.current) return;\n\n const dialog = dialogRef.current;\n const previouslyFocused = document.activeElement as HTMLElement | null;\n\n // Focus the first focusable element inside the dialog\n const firstFocusable = dialog.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n if (firstFocusable) {\n firstFocusable.focus();\n } else {\n dialog.focus();\n }\n\n const handleTab = (e: KeyboardEvent) => {\n if (e.key !== \"Tab\") return;\n\n const focusableElements = dialog.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n if (focusableElements.length === 0) return;\n\n const first = focusableElements[0];\n const last = focusableElements[focusableElements.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 document.addEventListener(\"keydown\", handleTab);\n return () => {\n document.removeEventListener(\"keydown\", handleTab);\n // Restore focus when modal closes\n previouslyFocused?.focus();\n };\n }, [open]);\n\n if (!open) return null;\n\n const closeButton = (\n <button\n onClick={onClose}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = colors.pageBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n }}\n style={{\n width: \"28px\",\n height: \"28px\",\n borderRadius: radii.sm,\n border: \"none\",\n background: \"transparent\",\n color: colors.textTertiary,\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n aria-label=\"Close\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M1 1l10 10M11 1L1 11\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n );\n\n return (\n <div\n role=\"presentation\"\n onClick={onClose}\n style={{\n position: \"fixed\",\n inset: 0,\n background: \"rgba(0,0,0,0.32)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 100,\n padding: spacing[4],\n }}\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n style={{\n background: colors.cardBg,\n borderRadius: radii[\"2xl\"],\n width: \"100%\",\n maxWidth,\n boxShadow: shadows.lg,\n opacity: visible ? 1 : 0,\n transform: visible ? \"none\" : \"translateY(10px) scale(0.97)\",\n transition: \"opacity 0.18s ease, transform 0.18s ease\",\n outline: \"none\",\n ...(title\n ? {\n display: \"flex\",\n flexDirection: \"column\" as const,\n maxHeight: \"calc(100vh - 32px)\",\n overflow: \"hidden\",\n }\n : {\n padding: \"28px 24px 24px\",\n position: \"relative\" as const,\n }),\n }}\n >\n {title ? (\n <>\n {/* Sticky header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: `${spacing[4]} ${spacing[5]}`,\n borderBottom: `1px solid ${colors.border}`,\n flexShrink: 0,\n }}\n >\n <span\n id={titleId}\n style={{\n fontWeight: typography.weight.bold,\n fontSize: typography.size.base,\n fontFamily: typography.fontFamily.base,\n color: colors.textPrimary,\n }}\n >\n {title}\n </span>\n {closeButton}\n </div>\n\n {/* Scrollable body */}\n <div style={{ overflowY: \"auto\", flex: 1 }}>{children}</div>\n </>\n ) : (\n <>\n {/* Original layout: absolute X button */}\n <div style={{ position: \"absolute\", top: \"14px\", right: \"14px\" }}>\n {closeButton}\n </div>\n {children}\n </>\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype ToggleGroupProps = {\n options: { value: string; label: string }[];\n value: string;\n onChange: (value: string) => void;\n fullWidth?: boolean;\n};\n\nexport function ToggleGroup({\n options,\n value,\n onChange,\n fullWidth = false,\n}: ToggleGroupProps) {\n const containerStyle: React.CSSProperties = {\n display: \"inline-flex\",\n border: `1px solid ${colors.border}`,\n borderRadius: radii.md,\n overflow: \"hidden\",\n fontFamily: typography.fontFamily.base,\n width: fullWidth ? \"100%\" : undefined,\n };\n\n return (\n <div style={containerStyle} role=\"radiogroup\">\n {options.map((opt, i) => {\n const isActive = opt.value === value;\n\n const optStyle: React.CSSProperties = {\n flex: fullWidth ? 1 : undefined,\n padding: `${spacing[2]} ${spacing[4]}`,\n fontSize: typography.size.md,\n fontWeight: isActive ? typography.weight.semibold : typography.weight.normal,\n fontFamily: typography.fontFamily.base,\n color: isActive ? colors.textInverse : colors.textPrimary,\n background: isActive ? colors.black : colors.cardBg,\n border: \"none\",\n borderRight: i < options.length - 1 ? `1px solid ${colors.border}` : \"none\",\n cursor: \"pointer\",\n transition: \"background 150ms ease, color 150ms ease\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n };\n\n return (\n <button\n key={opt.value}\n style={optStyle}\n role=\"radio\"\n aria-checked={isActive}\n onClick={() => onChange(opt.value)}\n onMouseEnter={(e) => {\n if (!isActive) e.currentTarget.style.background = colors.bgSubtle;\n }}\n onMouseLeave={(e) => {\n if (!isActive) e.currentTarget.style.background = colors.cardBg;\n }}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\n\nexport type IconProps = React.SVGProps<SVGSVGElement> & {\n size?: number | string;\n filled?: boolean;\n};\n\nfunction createIcon(d: string | React.ReactNode, viewBox = \"0 0 24 24\") {\n return function Icon({ size = 20, filled, className, style, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox={viewBox}\n fill={filled ? \"currentColor\" : \"none\"}\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n style={{ flexShrink: 0, ...style }}\n {...props}\n >\n {typeof d === \"string\" ? <path d={d} /> : d}\n </svg>\n );\n };\n}\n\n// -----------------------------------------------------------------------------\n// core / ui\n// -----------------------------------------------------------------------------\nexport const LockIcon = createIcon(\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0110 0v4\" />\n </>\n);\n\nexport const SearchIcon = createIcon(\n <>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"M21 21l-4.35-4.35\" />\n </>\n);\n\nexport const CheckIcon = createIcon(\"M20 6L9 17l-5-5\");\n\nexport const XIcon = createIcon(\"M18 6L6 18M6 6l12 12\");\n\nexport const MenuIcon = createIcon(\"M3 12h18M3 6h18M3 18h18\");\n\nexport const InfoIcon = createIcon(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4M12 8h.01\" />\n </>\n);\n\nexport const AlertIcon = createIcon(\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <path d=\"M12 9v4M12 17h.01\" />\n </>\n);\n\nexport const PlayIcon = createIcon(\"M5 3l14 9-14 9V3z\");\n\nexport const StarIcon = createIcon(\n \"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n);\n\nexport const SettingsIcon = createIcon(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z\" />\n </>\n);\n\nexport const UploadIcon = createIcon(\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 3v12\");\n\nexport const DownloadIcon = createIcon(\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\");\n\n// -----------------------------------------------------------------------------\n// arrows / chevrons\n// -----------------------------------------------------------------------------\nexport const ArrowRightIcon = createIcon(\"M5 12h14M12 5l7 7-7 7\");\nexport const ArrowLeftIcon = createIcon(\"M19 12H5M12 19l-7-7 7-7\");\nexport const ArrowUpIcon = createIcon(\"M12 19V5M5 12l7-7 7 7\");\nexport const ArrowDownIcon = createIcon(\"M12 5v14M19 12l-7 7-7-7\");\n\nexport const ChevronRightIcon = createIcon(\"M9 18l6-6-6-6\");\nexport const ChevronLeftIcon = createIcon(\"M15 18l-6-6 6-6\");\nexport const ChevronUpIcon = createIcon(\"M18 15l-6-6-6 6\");\nexport const ChevronDownIcon = createIcon(\"M6 9l6 6 6-6\");\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { LockIcon } from \"../Icon\";\n\ntype CheckRowProps = {\n checked: boolean;\n onChange: (checked: boolean) => void;\n label: string;\n sublabel?: string;\n disabled?: boolean;\n locked?: boolean;\n badge?: React.ReactNode;\n right?: React.ReactNode;\n};\n\nexport function CheckRow({\n checked,\n onChange,\n label,\n sublabel,\n disabled = false,\n locked = false,\n badge,\n right,\n}: CheckRowProps) {\n const isInteractive = !disabled && !locked;\n\n const style: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n padding: `${spacing[3]} ${spacing[4]}`,\n background: checked ? colors.black : colors.cardBg,\n border: `1px solid ${checked ? colors.black : colors.border}`,\n borderRadius: radii.lg,\n cursor: isInteractive ? \"pointer\" : \"default\",\n opacity: disabled ? 0.5 : 1,\n transition: \"background 150ms ease, border-color 150ms ease\",\n fontFamily: typography.fontFamily.base,\n };\n\n const dotStyle: React.CSSProperties = {\n width: \"8px\",\n height: \"8px\",\n borderRadius: radii.full,\n background: checked ? colors.error : colors.textTertiary,\n flexShrink: 0,\n };\n\n const labelStyle: React.CSSProperties = {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n };\n\n const titleStyle: React.CSSProperties = {\n fontSize: typography.size.md,\n fontWeight: typography.weight.semibold,\n color: checked ? colors.textInverse : colors.textPrimary,\n lineHeight: typography.lineHeight.tight,\n };\n\n const subStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: checked ? colors.textTertiary : colors.textSecondary,\n lineHeight: typography.lineHeight.tight,\n };\n\n // Checkbox visual\n const checkboxStyle: React.CSSProperties = {\n width: \"20px\",\n height: \"20px\",\n borderRadius: radii.xs,\n border: checked\n ? \"none\"\n : `1.5px solid ${colors.borderLight}`,\n background: checked ? colors.error : \"transparent\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n transition: \"background 150ms ease, border-color 150ms ease\",\n };\n\n return (\n <div\n style={style}\n role=\"checkbox\"\n aria-checked={checked}\n tabIndex={isInteractive ? 0 : -1}\n onClick={() => isInteractive && onChange(!checked)}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n if (isInteractive) onChange(!checked);\n }\n }}\n onMouseEnter={(e) => {\n if (isInteractive && !checked) {\n e.currentTarget.style.borderColor = colors.borderLight;\n }\n }}\n onMouseLeave={(e) => {\n if (isInteractive && !checked) {\n e.currentTarget.style.borderColor = colors.border;\n }\n }}\n >\n <span style={dotStyle} />\n <div style={labelStyle}>\n <span style={titleStyle}>{label}</span>\n {sublabel && <span style={subStyle}>{sublabel}</span>}\n </div>\n\n {badge && <div>{badge}</div>}\n {right && <div>{right}</div>}\n\n {locked ? (\n <LockIcon size={16} style={{ color: colors.textTertiary }} />\n ) : (\n <div style={checkboxStyle}>\n {checked && (\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-4.5\"\n stroke={colors.textInverse}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { radii } from \"../../tokens/radii\";\n\ntype StatusDotProps = {\n tone: \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\";\n size?: \"sm\" | \"md\";\n pulse?: boolean;\n};\n\nconst toneColors = {\n success: colors.success,\n warning: colors.warning,\n error: colors.error,\n info: colors.info,\n neutral: colors.textTertiary,\n} as const;\n\nlet pulseStyleInjected = false;\n\nfunction ensurePulseStyle() {\n if (pulseStyleInjected || typeof document === \"undefined\") return;\n const style = document.createElement(\"style\");\n style.textContent = `@keyframes ol-pulse { 0%, 100% { opacity: 1 } 50% { opacity: 0.4 } }`;\n document.head.appendChild(style);\n pulseStyleInjected = true;\n}\n\nexport const StatusDot = React.memo(function StatusDot({ tone, size = \"md\", pulse = false }: StatusDotProps) {\n if (pulse) ensurePulseStyle();\n\n const px = size === \"sm\" ? \"6px\" : \"8px\";\n\n const style: React.CSSProperties = {\n width: px,\n height: px,\n borderRadius: radii.full,\n backgroundColor: toneColors[tone],\n display: \"inline-block\",\n flexShrink: 0,\n animation: pulse ? \"ol-pulse 1.5s ease-in-out infinite\" : undefined,\n };\n\n return <span style={style} />;\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\n\ntype PageHeaderProps = {\n title: string;\n sub?: string;\n action?: React.ReactNode;\n};\n\nexport function PageHeader({ title, sub, action }: PageHeaderProps) {\n const style: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: spacing[4],\n marginBottom: spacing[5],\n fontFamily: typography.fontFamily.base,\n };\n\n const textStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n };\n\n const titleStyle: React.CSSProperties = {\n fontSize: typography.size.xl,\n fontWeight: typography.weight.bold,\n color: colors.textPrimary,\n letterSpacing: typography.letterSpacing.tight,\n lineHeight: typography.lineHeight.tight,\n margin: 0,\n };\n\n const subStyle: React.CSSProperties = {\n fontSize: typography.size.base,\n color: colors.textSecondary,\n margin: 0,\n };\n\n return (\n <div style={style}>\n <div style={textStyle}>\n <h2 style={titleStyle}>{title}</h2>\n {sub && <p style={subStyle}>{sub}</p>}\n </div>\n {action && <div style={{ flexShrink: 0 }}>{action}</div>}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\n\ntype ActionItem = {\n text: string;\n tone?: \"error\" | \"warning\" | \"info\" | \"neutral\";\n};\n\ntype ActionListProps = {\n items: ActionItem[];\n};\n\nconst toneColors = {\n error: colors.error,\n warning: colors.warning,\n info: colors.info,\n neutral: colors.textTertiary,\n} as const;\n\nexport function ActionList({ items }: ActionListProps) {\n const listStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[3],\n fontFamily: typography.fontFamily.base,\n };\n\n return (\n <div style={listStyle}>\n {items.map((item, i) => {\n const dotColor = toneColors[item.tone || \"neutral\"];\n\n return (\n <div\n key={i}\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: spacing[3],\n }}\n >\n <span\n style={{\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n background: dotColor,\n flexShrink: 0,\n marginTop: \"5px\",\n }}\n />\n <span\n style={{\n fontSize: typography.size.base,\n color: colors.textPrimary,\n lineHeight: typography.lineHeight.relaxed,\n }}\n >\n {item.text}\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\nimport { CheckIcon, XIcon, AlertIcon, InfoIcon } from \"../Icon\";\n\ntype ToastTone = \"success\" | \"error\" | \"warning\" | \"info\" | \"neutral\";\n\ntype ToastProps = {\n open: boolean;\n onClose: () => void;\n message: string;\n tone?: ToastTone;\n duration?: number;\n action?: { label: string; onClick: () => void };\n};\n\nconst toneConfig = {\n success: { IconComponent: CheckIcon, bg: colors.cardBg, accent: colors.success },\n error: { IconComponent: XIcon, bg: colors.cardBg, accent: colors.error },\n warning: { IconComponent: AlertIcon, bg: colors.cardBg, accent: colors.warning },\n info: { IconComponent: InfoIcon, bg: colors.cardBg, accent: colors.info },\n neutral: { IconComponent: InfoIcon, bg: colors.cardBg, accent: colors.textTertiary },\n} as const;\n\nexport function Toast({\n open,\n onClose,\n message,\n tone = \"neutral\",\n duration = 4000,\n action,\n}: ToastProps) {\n const [visible, setVisible] = useState(false);\n\n // Slide-in animation\n useEffect(() => {\n if (!open) {\n setVisible(false);\n return;\n }\n const id = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(id);\n }, [open]);\n\n // Auto-dismiss\n useEffect(() => {\n if (!open || duration <= 0) return;\n const timer = setTimeout(onClose, duration);\n return () => clearTimeout(timer);\n }, [open, duration, onClose]);\n\n if (!open) return null;\n\n const config = toneConfig[tone];\n\n const containerStyle: React.CSSProperties = {\n position: \"fixed\",\n bottom: \"20px\",\n left: \"50%\",\n transform: visible\n ? \"translateX(-50%) translateY(0)\"\n : \"translateX(-50%) translateY(16px)\",\n opacity: visible ? 1 : 0,\n transition: \"opacity 0.18s ease, transform 0.18s ease\",\n zIndex: 200,\n pointerEvents: \"auto\",\n };\n\n const cardStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n padding: `${spacing[3]} ${spacing[4]}`,\n background: config.bg,\n borderRadius: radii.lg,\n boxShadow: shadows.lg,\n border: `1px solid ${colors.border}`,\n fontFamily: typography.fontFamily.base,\n maxWidth: \"480px\",\n minWidth: \"280px\",\n };\n\n const iconStyle: React.CSSProperties = {\n width: \"22px\",\n height: \"22px\",\n borderRadius: radii.full,\n background: config.accent,\n color: colors.textInverse,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: \"12px\",\n fontWeight: typography.weight.bold,\n flexShrink: 0,\n lineHeight: 1,\n };\n\n const messageStyle: React.CSSProperties = {\n flex: 1,\n fontSize: typography.size.base,\n color: colors.textPrimary,\n lineHeight: typography.lineHeight.snug,\n };\n\n const actionStyle: React.CSSProperties = {\n fontSize: typography.size.base,\n fontWeight: typography.weight.semibold,\n color: config.accent,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n whiteSpace: \"nowrap\",\n textDecoration: \"underline\",\n textUnderlineOffset: \"2px\",\n fontFamily: typography.fontFamily.base,\n };\n\n const closeStyle: React.CSSProperties = {\n width: \"24px\",\n height: \"24px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"transparent\",\n border: \"none\",\n borderRadius: radii.xs,\n cursor: \"pointer\",\n color: colors.textTertiary,\n flexShrink: 0,\n };\n\n const IconComp = config.IconComponent;\n\n return (\n <div style={containerStyle}>\n <div style={cardStyle}>\n <span style={iconStyle}>\n <IconComp size={14} />\n </span>\n <span style={messageStyle}>{message}</span>\n {action && (\n <button style={actionStyle} onClick={action.onClick}>\n {action.label}\n </button>\n )}\n <button\n style={closeStyle}\n onClick={onClose}\n aria-label=\"Dismiss\"\n onMouseEnter={(e) => { e.currentTarget.style.background = colors.pageBg; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"transparent\"; }}\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M1 1l10 10M11 1L1 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { spacing } from \"../../tokens/spacing\";\n\nexport const CodeChip = React.memo(function CodeChip({ children }: { children: React.ReactNode }) {\n const style: React.CSSProperties = {\n fontFamily: typography.fontFamily.mono,\n fontSize: typography.size.sm,\n backgroundColor: colors.bgSubtle,\n color: colors.textDark,\n padding: `2px ${spacing[2]}`,\n borderRadius: radii.md,\n border: `1px solid ${colors.border}`,\n display: \"inline-flex\",\n alignItems: \"center\",\n };\n return <span style={style}>{children}</span>;\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { CodeChip } from \"../CodeChip\";\n\nexport type DiffType = \"added\" | \"modified\" | \"destructive\" | \"safe\";\n\nexport type DiffRowProps = {\n title: string;\n handle: string;\n field: string;\n csvVal: string;\n storeVal: string;\n type: DiffType;\n note?: string;\n};\n\nconst typeColors = {\n added: colors.success,\n modified: colors.warning,\n destructive: colors.error,\n safe: colors.textTertiary,\n};\n\nconst typeBg = {\n added: colors.successBg,\n modified: colors.warningBg,\n destructive: colors.errorBg,\n safe: colors.bgSubtle, // slightly grey for unchanged/safe\n};\n\nexport function DiffRow({ title, handle, field, csvVal, storeVal, type, note }: DiffRowProps) {\n const rowStyle: React.CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"2fr 1fr 1.5fr 1.5fr 1fr\",\n gap: spacing[4],\n padding: spacing[4],\n backgroundColor: typeBg[type],\n borderLeft: `4px solid ${typeColors[type]}`,\n borderBottom: `1px solid ${colors.border}`,\n fontFamily: typography.fontFamily.base,\n alignItems: \"start\",\n };\n\n const textStyle: React.CSSProperties = {\n fontSize: typography.size.md,\n color: colors.textPrimary,\n margin: 0,\n };\n \n const subTextStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: colors.textSecondary,\n fontFamily: typography.fontFamily.mono,\n marginTop: spacing[1],\n marginBottom: 0,\n };\n\n return (\n <div style={rowStyle}>\n <div>\n <p style={{ ...textStyle, fontWeight: typography.weight.bold }}>{title}</p>\n <p style={subTextStyle}>{handle}</p>\n </div>\n <div>\n <CodeChip>{field}</CodeChip>\n </div>\n <div>\n <p style={{ ...textStyle, color: csvVal ? colors.textPrimary : colors.error }}>\n {csvVal || \"(blank)\"}\n </p>\n </div>\n <div>\n <p style={{ ...textStyle, color: colors.textTertiary }}>{storeVal || \"—\"}</p>\n </div>\n <div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: spacing[2] }}>\n <span style={{ width: 8, height: 8, borderRadius: \"50%\", backgroundColor: typeColors[type] }} />\n <span style={{ fontSize: typography.size.sm, fontWeight: typography.weight.semibold, color: typeColors[type] }}>\n {type === \"added\" ? \"New\" : type === \"safe\" ? \"Unchanged\" : type.charAt(0).toUpperCase() + type.slice(1)}\n </span>\n </div>\n {note && (\n <p style={{ fontSize: typography.size.xs, color: typeColors[type], marginTop: spacing[1], marginBottom: 0 }}>\n ⚠ {note}\n </p>\n )}\n </div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { Badge } from \"../Badge\";\nimport { CodeChip } from \"../CodeChip\";\nimport { Button } from \"../Button\";\n\nexport type IssueCardProps = {\n severity: \"error\" | \"warning\" | \"info\";\n field: string;\n rowCount: number;\n message: string;\n fixable: boolean;\n onFix?: () => void;\n};\n\nexport function IssueCard({ severity, field, rowCount, message, fixable, onFix }: IssueCardProps) {\n const [expanded, setExpanded] = useState(false);\n\n const severityMap = {\n error: { tone: \"error\" as const, outline: colors.error },\n warning: { tone: \"warning\" as const, outline: colors.warning },\n info: { tone: \"info\" as const, outline: colors.info },\n };\n \n const s = severityMap[severity];\n\n const cardStyle: React.CSSProperties = {\n padding: spacing[4],\n borderBottom: `1px solid ${colors.borderSubtle}`,\n fontFamily: typography.fontFamily.base,\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[3],\n backgroundColor: colors.white,\n };\n\n const headerRowStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n };\n\n const leftGroupStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n flexWrap: \"wrap\",\n };\n \n const outlineBadgeStyle: React.CSSProperties = {\n border: `1px solid ${s.outline}`,\n color: s.outline,\n padding: `2px ${spacing[2]}`,\n borderRadius: radii.full,\n fontSize: typography.size.xs,\n fontWeight: typography.weight.medium,\n backgroundColor: \"transparent\",\n };\n\n return (\n <div style={cardStyle}>\n <div style={headerRowStyle}>\n <div style={leftGroupStyle}>\n <Badge tone={s.tone} dot>\n {severity.charAt(0).toUpperCase() + severity.slice(1)}\n </Badge>\n <CodeChip>{field}</CodeChip>\n <span style={outlineBadgeStyle}>{rowCount.toLocaleString()} rows affected</span>\n </div>\n <div>\n {fixable ? (\n <Button variant=\"primary\" size=\"sm\" onClick={onFix}>\n Auto-Fix\n </Button>\n ) : (\n <span style={{ fontSize: typography.size.sm, color: colors.textTertiary }}>\n Manual fix\n </span>\n )}\n </div>\n </div>\n \n <p style={{ margin: 0, fontSize: typography.size.md, color: colors.textDark }}>\n {message}\n </p>\n \n <div>\n <button \n onClick={() => setExpanded(!expanded)}\n style={{\n background: \"none\",\n border: \"none\",\n padding: 0,\n color: colors.textSecondary,\n fontSize: typography.size.sm,\n cursor: \"pointer\",\n textDecoration: \"underline\",\n fontFamily: typography.fontFamily.base,\n }}\n >\n {expanded ? \"Hide sample rows ▲\" : \"View sample rows ▼\"}\n </button>\n </div>\n \n {expanded && (\n <div style={{ display: \"flex\", gap: spacing[2], marginTop: spacing[1], flexWrap: \"wrap\" }}>\n {[1, 2, 3].map(row => (\n <span key={row} style={{ \n fontSize: typography.size.xs, \n border: `1px solid ${colors.border}`,\n padding: `2px ${spacing[2]}`,\n borderRadius: radii.full,\n color: colors.textSecondary\n }}>\n row {row}\n </span>\n ))}\n {rowCount > 3 && (\n <span style={{ fontSize: typography.size.xs, color: colors.textTertiary, alignSelf: \"center\" }}>\n + {rowCount - 3} more\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { radii } from \"../../tokens/radii\";\nimport { IssueCard, type IssueCardProps } from \"../IssueCard\";\n\nexport type IssueGroupProps = {\n category: string;\n issues: IssueCardProps[];\n defaultOpen?: boolean;\n};\n\nexport function IssueGroup({ category, issues, defaultOpen = true }: IssueGroupProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n \n const hasError = issues.some(i => i.severity === \"error\");\n const hasWarning = issues.some(i => i.severity === \"warning\");\n const dotColor = hasError ? colors.error : hasWarning ? colors.warning : colors.info;\n\n const totalRows = issues.reduce((acc, issue) => acc + issue.rowCount, 0);\n\n const containerStyle: React.CSSProperties = {\n backgroundColor: colors.cardBg,\n borderRadius: radii.lg,\n border: `1px solid ${colors.border}`,\n marginBottom: spacing[4],\n overflow: \"hidden\",\n fontFamily: typography.fontFamily.base,\n };\n\n const headerStyle: React.CSSProperties = {\n padding: spacing[4],\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n backgroundColor: colors.cardBg,\n borderBottom: isOpen ? `1px solid ${colors.border}` : \"none\",\n userSelect: \"none\",\n };\n\n const titleGroupStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n };\n\n const dotStyle: React.CSSProperties = {\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n backgroundColor: dotColor,\n flexShrink: 0,\n };\n \n const countBadgeStyle: React.CSSProperties = {\n backgroundColor: colors.bgSubtle,\n border: `1px solid ${colors.border}`,\n borderRadius: radii.full,\n padding: `2px ${spacing[3]}`,\n fontSize: typography.size.sm,\n color: colors.textSecondary,\n fontWeight: typography.weight.medium,\n };\n\n return (\n <div style={containerStyle}>\n <div style={headerStyle} onClick={() => setIsOpen(!isOpen)}>\n <div style={titleGroupStyle}>\n <span style={dotStyle} />\n <span style={{ fontSize: typography.size.lg, fontWeight: typography.weight.bold, color: colors.textPrimary }}>\n {category}\n </span>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: spacing[3] }}>\n <span style={countBadgeStyle}>{totalRows.toLocaleString()} rows</span>\n <span style={{ \n color: colors.textTertiary, \n transform: isOpen ? \"rotate(180deg)\" : \"none\", \n transition: \"transform 200ms ease\",\n fontSize: \"12px\"\n }}>\n ▼\n </span>\n </div>\n </div>\n \n {isOpen && (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {issues.map((issue, idx) => (\n <div key={idx} style={{ \n borderBottom: idx === issues.length - 1 ? \"none\" : `1px solid ${colors.borderSubtle}` \n }}>\n <IssueCard {...issue} />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { spacing } from \"../../tokens/spacing\";\n\nexport type MiniStatProps = {\n value: string | React.ReactNode;\n label: string;\n tone?: \"success\" | \"error\" | \"neutral\" | \"info\";\n};\n\nexport const MiniStat = React.memo(function MiniStat({ value, label, tone = \"neutral\" }: MiniStatProps) {\n const toneMap = {\n success: { border: colors.successBorder, color: colors.success },\n error: { border: colors.errorBorder, color: colors.error },\n info: { border: colors.infoBorder, color: colors.info },\n neutral: { border: colors.border, color: colors.textPrimary },\n };\n\n const t = toneMap[tone];\n\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[1],\n padding: spacing[4],\n borderRadius: radii.lg,\n border: `1px solid ${t.border}`,\n backgroundColor: colors.white,\n fontFamily: typography.fontFamily.base,\n minWidth: \"120px\",\n flex: 1,\n };\n\n const valueStyle: React.CSSProperties = {\n fontSize: typography.size[\"2xl\"],\n fontWeight: typography.weight.bold,\n color: t.color,\n margin: 0,\n lineHeight: 1,\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: tone === \"neutral\" ? colors.textSecondary : t.color,\n margin: 0,\n marginTop: spacing[1],\n };\n\n return (\n <div style={containerStyle}>\n <div style={valueStyle}>{value}</div>\n <div style={labelStyle}>{label}</div>\n </div>\n );\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { radii } from \"../../tokens/radii\";\n\nexport type ModelTagProps = {\n name: string;\n};\n\nexport const ModelTag = React.memo(function ModelTag({ name }: ModelTagProps) {\n const style: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: `2px ${spacing[3]}`,\n backgroundColor: colors.neutralBg,\n color: colors.textDark,\n fontSize: typography.size.xs,\n fontFamily: typography.fontFamily.base,\n fontWeight: typography.weight.medium,\n borderRadius: radii.full,\n whiteSpace: \"nowrap\",\n };\n\n return <span style={style}>{name}</span>;\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { radii } from \"../../tokens/radii\";\n\nexport type ProgressBarProps = {\n percent: number;\n height?: number;\n};\n\nexport const ProgressBar = React.memo(function ProgressBar({ percent, height = 8 }: ProgressBarProps) {\n const trackStyle: React.CSSProperties = {\n width: \"100%\",\n backgroundColor: colors.borderSubtle,\n borderRadius: radii.full,\n height: `${height}px`,\n overflow: \"hidden\",\n };\n\n const fillStyle: React.CSSProperties = {\n width: `${Math.max(0, Math.min(100, percent))}%`,\n backgroundColor: colors.black,\n height: \"100%\",\n transition: \"width 300ms ease\",\n };\n\n return (\n <div style={trackStyle} role=\"progressbar\" aria-valuenow={percent} aria-valuemin={0} aria-valuemax={100}>\n <div style={fillStyle} />\n </div>\n );\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { radii } from \"../../tokens/radii\";\n\nexport type ProgressStep = {\n id: string;\n label: string;\n status: \"pending\" | \"running\" | \"done\";\n value?: React.ReactNode;\n};\n\nexport type ProgressListProps = {\n steps: ProgressStep[];\n};\n\nexport function ProgressList({ steps }: ProgressListProps) {\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[4],\n fontFamily: typography.fontFamily.base,\n };\n\n return (\n <div style={containerStyle}>\n {steps.map((step) => {\n const isPending = step.status === \"pending\";\n const isRunning = step.status === \"running\";\n const isDone = step.status === \"done\";\n\n const rowStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n opacity: isPending ? 0.4 : 1,\n };\n\n const leftStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n };\n\n const iconContainerStyle: React.CSSProperties = {\n width: \"20px\",\n height: \"20px\",\n borderRadius: radii.full,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: isDone ? colors.success : isRunning ? colors.black : colors.borderLight,\n color: colors.white,\n flexShrink: 0,\n };\n\n return (\n <div key={step.id} style={rowStyle}>\n <div style={leftStyle}>\n <div style={iconContainerStyle}>\n {isDone && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.5 7.5L5.5 10.5L11.5 3.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )}\n {isRunning && (\n <div style={{ width: 6, height: 6, backgroundColor: colors.white, borderRadius: \"50%\" }} />\n )}\n </div>\n <span style={{ \n fontSize: typography.size.md, \n color: colors.textPrimary, \n fontWeight: isRunning ? typography.weight.semibold : typography.weight.normal \n }}>\n {step.label}\n </span>\n </div>\n {step.value && (\n <span style={{ \n fontSize: typography.size.sm, \n color: isDone ? colors.success : colors.textTertiary \n }}>\n {step.value}\n </span>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\nexport type RadioProps = {\n checked: boolean;\n onChange: (checked: boolean) => void;\n value?: string;\n name?: string;\n disabled?: boolean;\n label?: string;\n description?: string;\n id?: string;\n};\n\nexport function Radio({\n checked,\n onChange,\n value,\n name,\n disabled = false,\n label,\n description,\n id,\n}: RadioProps) {\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n const generatedId = React.useId();\n const radioId = id || generatedId;\n\n const wrapperStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: spacing[3],\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n fontFamily: typography.fontFamily.base,\n };\n\n const outerCircleStyle: React.CSSProperties = {\n position: \"relative\",\n width: \"18px\",\n height: \"18px\",\n borderRadius: radii.full,\n border: `1px solid ${checked ? colors.black : isHovered && !disabled ? colors.textTertiary : colors.borderLight}`,\n backgroundColor: colors.white,\n transition: \"border-color 150ms ease, box-shadow 150ms ease\",\n flexShrink: 0,\n boxShadow: isFocused ? shadows.focus : \"none\",\n outline: \"none\",\n marginTop: \"1px\", // Optical alignment\n };\n\n const innerDotStyle: React.CSSProperties = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: `translate(-50%, -50%) scale(${checked ? 1 : 0})`,\n width: \"10px\",\n height: \"10px\",\n borderRadius: radii.full,\n backgroundColor: colors.black,\n transition: \"transform 150ms ease\",\n };\n\n const textWrapperStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[1],\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.md,\n fontWeight: typography.weight.medium,\n color: colors.textPrimary,\n margin: 0,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n };\n\n const descStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: colors.textSecondary,\n margin: 0,\n };\n\n // Hidden native radio button for accessibility and forms\n const inputStyle: React.CSSProperties = {\n position: \"absolute\",\n opacity: 0,\n width: 0,\n height: 0,\n margin: 0,\n };\n\n return (\n <label\n style={wrapperStyle}\n htmlFor={radioId}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div style={{ position: \"relative\" }}>\n <input\n id={radioId}\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={(e) => {\n if (!disabled) {\n onChange(e.target.checked);\n }\n }}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n style={inputStyle}\n />\n <div style={outerCircleStyle} aria-hidden=\"true\">\n <div style={innerDotStyle} />\n </div>\n </div>\n\n {(label || description) && (\n <div style={textWrapperStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {description && <span style={descStyle}>{description}</span>}\n </div>\n )}\n </label>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport type StepBarProps = {\n steps: string[];\n current: number; // 1-indexed\n};\n\nexport function StepBar({ steps, current }: StepBarProps) {\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n fontFamily: typography.fontFamily.base,\n position: \"relative\",\n };\n\n const circleSize = 32;\n\n const backgroundLineStyle: React.CSSProperties = {\n position: \"absolute\",\n top: circleSize / 2 - 1, // center vertically with circles\n left: circleSize / 2,\n right: circleSize / 2,\n height: 2,\n backgroundColor: colors.border,\n zIndex: 1,\n };\n\n const progressLineStyle: React.CSSProperties = {\n height: \"100%\",\n width: `${((Math.min(current, steps.length) - 1) / (steps.length - 1)) * 100}%`,\n backgroundColor: colors.black,\n transition: \"width 300ms ease\",\n };\n\n return (\n <div style={containerStyle}>\n <div style={backgroundLineStyle}>\n <div style={progressLineStyle} />\n </div>\n \n {steps.map((step, index) => {\n const stepNum = index + 1;\n const isCompleted = stepNum < current;\n const isActive = stepNum === current;\n \n const circleStyle: React.CSSProperties = {\n width: circleSize,\n height: circleSize,\n borderRadius: \"50%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: typography.size.md,\n fontWeight: typography.weight.semibold,\n backgroundColor: isCompleted || isActive ? colors.black : colors.white,\n color: isCompleted || isActive ? colors.white : colors.textTertiary,\n border: isCompleted || isActive ? `2px solid ${colors.black}` : `2px solid ${colors.border}`,\n zIndex: 2,\n position: \"relative\",\n transition: \"all 300ms ease\",\n };\n \n const labelStyle: React.CSSProperties = {\n position: \"absolute\",\n top: circleSize + 8,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n fontSize: typography.size.sm,\n color: isActive || isCompleted ? colors.textPrimary : colors.textTertiary,\n fontWeight: isActive ? typography.weight.semibold : typography.weight.normal,\n whiteSpace: \"nowrap\",\n };\n\n const stepContainerStyle: React.CSSProperties = {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n };\n\n return (\n <div key={step} style={stepContainerStyle}>\n <div style={circleStyle}>\n {isCompleted ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.5 7.5L5.5 10.5L11.5 3.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n ) : (\n stepNum\n )}\n </div>\n <span style={labelStyle}>{step}</span>\n </div>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { spacing } from \"../../tokens/spacing\";\n\nexport type SummaryCardProps = {\n label: string;\n value: string | number;\n highlight?: boolean;\n color?: string; // e.g., colors.error\n};\n\nexport const SummaryCard = React.memo(function SummaryCard({ label, value, highlight = false, color }: SummaryCardProps) {\n const cardStyle: React.CSSProperties = {\n backgroundColor: highlight ? colors.black : colors.white,\n border: highlight ? \"none\" : `1px solid ${colors.border}`,\n borderRadius: radii.lg,\n padding: spacing[5],\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[2],\n fontFamily: typography.fontFamily.base,\n flex: 1,\n minWidth: 0, // prevents overflow in flex contexts\n };\n \n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: highlight ? colors.textDisabled : colors.textSecondary,\n fontWeight: typography.weight.semibold,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n margin: 0,\n };\n \n const valueStyle: React.CSSProperties = {\n fontSize: typography.size[\"3xl\"],\n fontWeight: typography.weight.bold,\n color: highlight ? colors.white : (color || colors.textPrimary),\n margin: 0,\n lineHeight: 1,\n };\n\n return (\n <div style={cardStyle}>\n <p style={labelStyle}>{label}</p>\n <p style={valueStyle}>{value}</p>\n </div>\n );\n});\n","import React, { useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\nexport type SwitchProps = {\n checked: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n label?: string;\n description?: string;\n id?: string;\n};\n\nexport function Switch({ checked, onChange, disabled = false, label, description, id }: SwitchProps) {\n const [isFocused, setIsFocused] = useState(false);\n\n const generatedId = React.useId();\n const switchId = id || generatedId;\n\n const wrapperStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: spacing[3],\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n fontFamily: typography.fontFamily.base,\n };\n\n const trackStyle: React.CSSProperties = {\n position: \"relative\",\n width: \"36px\",\n height: \"20px\",\n backgroundColor: checked ? colors.black : colors.borderLight,\n borderRadius: radii.full,\n transition: \"background-color 200ms ease\",\n flexShrink: 0,\n boxShadow: isFocused ? shadows.focus : \"none\",\n outline: \"none\",\n };\n\n const thumbStyle: React.CSSProperties = {\n position: \"absolute\",\n top: \"2px\",\n left: checked ? \"calc(100% - 18px)\" : \"2px\",\n width: \"16px\",\n height: \"16px\",\n backgroundColor: colors.white,\n borderRadius: radii.full,\n transition: \"left 200ms ease, transform 200ms ease\",\n boxShadow: shadows.sm,\n };\n\n const textWrapperStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[1],\n marginTop: \"1px\", // Optical alignment with switch thumb\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.md,\n fontWeight: typography.weight.medium,\n color: colors.textPrimary,\n margin: 0,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n };\n\n const descStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: colors.textSecondary,\n margin: 0,\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n if (!disabled) {\n onChange(!checked);\n }\n }\n };\n\n return (\n <label\n style={wrapperStyle}\n htmlFor={switchId}\n onMouseEnter={() => {\n if (!disabled && !checked) {\n // subtle hover could be added via ref, but sticking to inline\n }\n }}\n >\n <div\n id={switchId}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onClick={(e) => {\n // Prevent double firing when label is clicked\n e.preventDefault();\n if (!disabled) onChange(!checked);\n }}\n style={trackStyle}\n >\n <div style={thumbStyle} />\n </div>\n\n {(label || description) && (\n <div style={textWrapperStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {description && <span style={descStyle}>{description}</span>}\n </div>\n )}\n </label>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\n\nexport type TrendProps = {\n value: number;\n label?: string;\n suffix?: string;\n inverse?: boolean;\n};\n\nexport const Trend = React.memo(function Trend({ value, label, suffix, inverse = false }: TrendProps) {\n const isPositive = value > 0;\n const isNeutral = value === 0;\n\n let color: string = colors.textTertiary;\n if (!isNeutral) {\n if (isPositive) color = inverse ? colors.error : colors.success;\n else color = inverse ? colors.success : colors.error;\n }\n\n const arrow = isPositive ? \"\\u2191\" : isNeutral ? \"\\u2014\" : \"\\u2193\";\n const displayValue = isNeutral ? \"\" : `${isPositive ? \"+\" : \"\"}${value}${suffix ?? \"\"}`;\n\n const style: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: spacing[1],\n color,\n fontSize: typography.size.sm,\n fontWeight: typography.weight.medium,\n fontFamily: typography.fontFamily.base,\n };\n\n return (\n <span style={style}>\n <span>{arrow} {displayValue}</span>\n {label && <span style={{ color: colors.textSecondary, fontWeight: typography.weight.normal, marginLeft: spacing[1] }}>{label}</span>}\n </span>\n );\n});\n","import { useState, useCallback } from \"react\";\n\n/**\n * Hook to manage modal open/close state.\n *\n * @example\n * const { isOpen, open, close, toggle } = useModal();\n * <Button onClick={open}>Open</Button>\n * <Modal open={isOpen} onClose={close}>...</Modal>\n */\nexport function useModal(initialState = false) {\n const [isOpen, setIsOpen] = useState(initialState);\n\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((prev) => !prev), []);\n\n return { isOpen, open, close, toggle } as const;\n}\n","import { useState, useCallback } from \"react\";\n\n/**\n * Typed localStorage wrapper with SSR safety.\n *\n * @example\n * const [tab, setTab] = useLocalStorage<string>(\"active-tab\", \"Overview\");\n */\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((prev: T) => T)) => void] {\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === \"undefined\") return initialValue;\n try {\n const item = window.localStorage.getItem(key);\n return item ? (JSON.parse(item) as T) : initialValue;\n } catch {\n return initialValue;\n }\n });\n\n const setValue = useCallback(\n (value: T | ((prev: T) => T)) => {\n setStoredValue((prev) => {\n const nextValue =\n value instanceof Function ? value(prev) : value;\n try {\n window.localStorage.setItem(key, JSON.stringify(nextValue));\n } catch {\n // Storage full or unavailable — fail silently\n }\n return nextValue;\n });\n },\n [key]\n );\n\n return [storedValue, setValue];\n}\n","/**\n * Utility for conditionally joining class names.\n * Filters out falsy values and joins the rest with a space.\n *\n * @example\n * cx(\"base\", isActive && \"active\", isDisabled && \"disabled\")\n * // => \"base active\" (if isActive=true, isDisabled=false)\n */\nexport function cx(\n ...classes: (string | false | null | undefined)[]\n): string {\n return classes.filter(Boolean).join(\" \");\n}\n"],"names":["colors","spacing","typography","radii","shadows","sizeStyles","variantStyles","Button","variant","size","loading","disabled","fullWidth","leftIcon","children","onClick","sizeS","variantS","isDisabled","style","jsxs","e","jsx","Spinner","spinnerStyleInjected","ensureSpinnerStyle","paddingMap","Card","padding","noBorder","shadow","toneStyles","Badge","React","tone","dot","t","dotStyle","StatGrid","stats","_cols","stripStyle","stat","i","StatCell","isLast","isHighlight","valueStyle","unitStyle","labelStyle","subStyle","SectionLabel","action","TabBar","tabs","active","onChange","containerStyle","fontSize","paddingY","paddingX","tab","isActive","tabStyle","badgeStyle","DataTable","columns","rows","emptyState","onRowClick","tableStyle","thStyle","col","tdStyle","trHoverStyle","Fragment","row","rowIdx","Input","label","hint","error","prefix","suffix","type","placeholder","value","hasError","wrapperStyle","inputWrapperStyle","inputStyle","hintStyle","affixStyle","wrapper","getScoreColor","pct","getScoreBg","ScoreBar","score","max","width","showLabel","barColor","bgColor","barHeight","trackStyle","fillStyle","FOCUSABLE_SELECTOR","Modal","open","onClose","maxWidth","title","visible","setVisible","useState","dialogRef","useRef","titleId","useEffect","id","handler","dialog","previouslyFocused","firstFocusable","handleTab","focusableElements","first","last","closeButton","ToggleGroup","options","opt","optStyle","createIcon","d","viewBox","filled","className","props","LockIcon","SearchIcon","CheckIcon","XIcon","MenuIcon","InfoIcon","AlertIcon","PlayIcon","StarIcon","SettingsIcon","UploadIcon","DownloadIcon","ArrowRightIcon","ArrowLeftIcon","ArrowUpIcon","ArrowDownIcon","ChevronRightIcon","ChevronLeftIcon","ChevronUpIcon","ChevronDownIcon","CheckRow","checked","sublabel","locked","badge","right","isInteractive","titleStyle","checkboxStyle","toneColors","pulseStyleInjected","ensurePulseStyle","StatusDot","pulse","px","PageHeader","sub","textStyle","ActionList","items","listStyle","item","dotColor","toneConfig","Toast","message","duration","timer","config","cardStyle","iconStyle","messageStyle","actionStyle","closeStyle","IconComp","CodeChip","typeColors","typeBg","DiffRow","handle","field","csvVal","storeVal","note","rowStyle","subTextStyle","IssueCard","severity","rowCount","fixable","onFix","expanded","setExpanded","s","headerRowStyle","leftGroupStyle","outlineBadgeStyle","IssueGroup","category","issues","defaultOpen","isOpen","setIsOpen","hasWarning","totalRows","acc","issue","headerStyle","titleGroupStyle","countBadgeStyle","idx","MiniStat","ModelTag","name","ProgressBar","percent","height","ProgressList","steps","step","isPending","isRunning","isDone","leftStyle","iconContainerStyle","Radio","description","isFocused","setIsFocused","isHovered","setIsHovered","generatedId","radioId","outerCircleStyle","innerDotStyle","textWrapperStyle","descStyle","StepBar","current","circleSize","backgroundLineStyle","progressLineStyle","index","stepNum","isCompleted","circleStyle","SummaryCard","highlight","color","Switch","switchId","thumbStyle","Trend","inverse","isPositive","isNeutral","arrow","displayValue","useModal","initialState","useCallback","close","toggle","prev","useLocalStorage","key","initialValue","storedValue","setStoredValue","setValue","nextValue","cx","classes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/tokens/colors.ts","../src/tokens/spacing.ts","../src/tokens/typography.ts","../src/tokens/radii.ts","../src/tokens/shadows.ts","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Badge/Badge.tsx","../src/components/StatGrid/StatGrid.tsx","../src/components/SectionLabel/SectionLabel.tsx","../src/components/TabBar/TabBar.tsx","../src/components/DataTable/DataTable.tsx","../src/components/Input/Input.tsx","../src/components/ScoreBar/ScoreBar.tsx","../src/components/Modal/Modal.tsx","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Icon/Icon.tsx","../src/components/CheckRow/CheckRow.tsx","../src/components/StatusDot/StatusDot.tsx","../src/components/PageHeader/PageHeader.tsx","../src/components/ActionList/ActionList.tsx","../src/components/Toast/Toast.tsx","../src/components/CodeChip/CodeChip.tsx","../src/components/DiffRow/DiffRow.tsx","../src/components/IssueCard/IssueCard.tsx","../src/components/IssueGroup/IssueGroup.tsx","../src/components/MiniStat/MiniStat.tsx","../src/components/ModelTag/ModelTag.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/ProgressList/ProgressList.tsx","../src/components/Radio/Radio.tsx","../src/components/StepBar/StepBar.tsx","../src/components/SummaryCard/SummaryCard.tsx","../src/components/Switch/Switch.tsx","../src/components/Trend/Trend.tsx","../src/hooks/useModal.ts","../src/hooks/useLocalStorage.ts","../src/utils/cx.ts"],"sourcesContent":["export const colors = {\n // Brand\n black: \"#1A1A1A\",\n blackHover: \"#2A2A2A\",\n red: \"#D42B2B\",\n white: \"#FFFFFF\",\n\n // Page & surface\n pageBg: \"#F1F1F1\",\n cardBg: \"#FFFFFF\",\n bgSubtle: \"#FAFAFA\",\n\n // Text\n textPrimary: \"#1A1A1A\",\n textSecondary: \"#6B7280\",\n textTertiary: \"#9CA3AF\",\n textDark: \"#374151\",\n textDisabled: \"#D1D5DB\",\n textInverse: \"#FFFFFF\",\n\n // Borders\n border: \"#E5E5E5\",\n borderLight: \"#D1D5DB\",\n borderSubtle: \"#F3F4F6\",\n borderFocus: \"#1A1A1A\",\n\n // Semantic — status\n success: \"#22C55E\",\n successBg: \"#F0FDF4\",\n successBorder: \"#BBF7D0\",\n\n warning: \"#F59E0B\",\n warningBg: \"#FFFBEB\",\n warningBorder: \"#FDE68A\",\n\n error: \"#EF4444\",\n errorHover: \"#DC2626\",\n errorBg: \"#FEF2F2\",\n errorBorder: \"#FECACA\",\n\n info: \"#2563EB\",\n infoBg: \"#EFF6FF\",\n infoBorder: \"#BFDBFE\",\n\n // Pro badge / neutral chip\n neutralBg: \"#F3F4F6\",\n neutralText: \"#6B7280\",\n\n // Skeleton\n skeletonBase: \"#E5E5E5\",\n skeletonPulse: \"#F1F2F4\",\n} as const;\n\nexport type ColorToken = keyof typeof colors;\n","// Base unit: 4px\nexport const spacing = {\n 0: \"0px\",\n 1: \"4px\",\n 2: \"8px\",\n 3: \"12px\",\n 4: \"16px\",\n 5: \"20px\",\n 6: \"24px\",\n 8: \"32px\",\n 10: \"40px\",\n 12: \"48px\",\n 16: \"64px\",\n 20: \"80px\",\n} as const;\n\nexport type SpacingToken = keyof typeof spacing;\n","export const typography = {\n fontFamily: {\n base: \"-apple-system, 'Helvetica Neue', sans-serif\",\n mono: \"'Menlo', 'Monaco', 'Courier New', monospace\",\n },\n size: {\n xs: \"10px\",\n sm: \"11px\",\n base: \"13px\",\n md: \"14px\",\n lg: \"16px\",\n xl: \"20px\",\n \"2xl\": \"24px\",\n \"3xl\": \"32px\",\n },\n weight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n extrabold: 800,\n },\n lineHeight: {\n tight: 1.2,\n snug: 1.4,\n normal: 1.5,\n relaxed: 1.55,\n loose: 1.75,\n },\n letterSpacing: {\n tight: \"-0.02em\",\n snug: \"-0.01em\",\n normal: \"0em\",\n wide: \"0.02em\",\n },\n} as const;\n","export const radii = {\n none: \"0px\",\n xs: \"4px\",\n sm: \"6px\",\n md: \"8px\",\n lg: \"10px\",\n xl: \"12px\",\n \"2xl\": \"16px\",\n full: \"9999px\",\n} as const;\n\nexport type RadiiToken = keyof typeof radii;\n","export const shadows = {\n none: \"none\",\n sm: \"0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04)\",\n md: \"0 4px 12px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.04)\",\n lg: \"0 20px 60px rgba(0,0,0,0.18)\",\n focus: \"0 0 0 3px rgba(26, 26, 26, 0.12)\",\n} as const;\n\nexport type ShadowToken = keyof typeof shadows;\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\ntype ButtonProps = {\n variant?: \"primary\" | \"ghost\" | \"danger\" | \"text\";\n size?: \"sm\" | \"md\" | \"lg\";\n loading?: boolean;\n disabled?: boolean;\n fullWidth?: boolean;\n leftIcon?: React.ReactNode;\n children: React.ReactNode;\n onClick?: () => void;\n};\n\nconst sizeStyles = {\n sm: {\n padding: `${spacing[1]} ${spacing[3]}`,\n fontSize: typography.size.base,\n height: \"32px\",\n gap: spacing[1],\n },\n md: {\n padding: `${spacing[2]} ${spacing[4]}`,\n fontSize: typography.size.md,\n height: \"40px\",\n gap: spacing[2],\n },\n lg: {\n padding: `${spacing[3]} ${spacing[6]}`,\n fontSize: typography.size.md,\n height: \"48px\",\n gap: spacing[2],\n },\n} as const;\n\nconst variantStyles = {\n primary: {\n background: colors.black,\n color: colors.textInverse,\n border: \"none\",\n hoverBg: colors.blackHover,\n },\n ghost: {\n background: \"transparent\",\n color: colors.textPrimary,\n border: `1px solid ${colors.border}`,\n hoverBg: colors.bgSubtle,\n },\n danger: {\n background: colors.error,\n color: colors.textInverse,\n border: \"none\",\n hoverBg: colors.errorHover,\n },\n text: {\n background: \"transparent\",\n color: colors.textSecondary,\n border: \"none\",\n hoverBg: colors.bgSubtle,\n },\n} as const;\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled = false,\n fullWidth = false,\n leftIcon,\n children,\n onClick,\n}: ButtonProps) {\n const sizeS = sizeStyles[size] || sizeStyles.md;\n const variantS = variantStyles[variant] || variantStyles.primary;\n const isDisabled = disabled || loading;\n\n const style: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: sizeS.gap,\n padding: sizeS.padding,\n fontSize: sizeS.fontSize,\n height: sizeS.height,\n fontFamily: typography.fontFamily.base,\n fontWeight: typography.weight.semibold,\n lineHeight: typography.lineHeight.tight,\n letterSpacing: typography.letterSpacing.snug,\n borderRadius: radii.md,\n background: variantS.background,\n color: variantS.color,\n border: variantS.border,\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n opacity: isDisabled ? 0.5 : 1,\n transition: \"background 150ms ease, opacity 150ms ease, box-shadow 150ms ease\",\n width: fullWidth ? \"100%\" : undefined,\n boxSizing: \"border-box\",\n outline: \"none\",\n };\n\n return (\n <button\n style={style}\n onClick={onClick}\n disabled={isDisabled}\n onMouseEnter={(e) => {\n if (!isDisabled) {\n e.currentTarget.style.background = variantS.hoverBg;\n }\n }}\n onMouseLeave={(e) => {\n if (!isDisabled) {\n e.currentTarget.style.background = variantS.background;\n }\n }}\n onFocus={(e) => {\n e.currentTarget.style.boxShadow = shadows.focus;\n }}\n onBlur={(e) => {\n e.currentTarget.style.boxShadow = \"none\";\n }}\n >\n {loading ? <Spinner /> : leftIcon}\n {children}\n </button>\n );\n}\n\nlet spinnerStyleInjected = false;\n\nfunction ensureSpinnerStyle() {\n if (spinnerStyleInjected || typeof document === \"undefined\") return;\n const style = document.createElement(\"style\");\n style.textContent = `@keyframes ol-spin { to { transform: rotate(360deg) } }`;\n document.head.appendChild(style);\n spinnerStyleInjected = true;\n}\n\nfunction Spinner() {\n ensureSpinnerStyle();\n\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{\n animation: \"ol-spin 0.6s linear infinite\",\n }}\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"28\"\n strokeDashoffset=\"20\"\n opacity=\"0.8\"\n />\n </svg>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\ntype CardProps = {\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n noBorder?: boolean;\n shadow?: boolean;\n children: React.ReactNode;\n};\n\nconst paddingMap = {\n none: \"0px\",\n sm: spacing[3],\n md: spacing[6],\n lg: spacing[8],\n} as const;\n\nexport function Card({\n padding = \"md\",\n noBorder = false,\n shadow = false,\n children,\n}: CardProps) {\n const style: React.CSSProperties = {\n background: colors.cardBg,\n borderRadius: radii.xl,\n padding: paddingMap[padding],\n border: noBorder ? \"none\" : `1px solid ${colors.border}`,\n boxShadow: shadow ? shadows.sm : shadows.none,\n boxSizing: \"border-box\",\n };\n\n return <div style={style}>{children}</div>;\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype BadgeProps = {\n tone: \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\";\n dot?: boolean;\n children: React.ReactNode;\n};\n\nconst toneStyles = {\n success: { bg: colors.successBg, color: colors.success, dot: colors.success },\n warning: { bg: colors.warningBg, color: colors.warning, dot: colors.warning },\n error: { bg: colors.errorBg, color: colors.error, dot: colors.error },\n info: { bg: colors.infoBg, color: colors.info, dot: colors.info },\n neutral: { bg: colors.neutralBg, color: colors.neutralText, dot: colors.textTertiary },\n} as const;\n\nexport const Badge = React.memo(function Badge({ tone, dot = false, children }: BadgeProps) {\n const t = toneStyles[tone];\n\n const style: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: spacing[1],\n padding: `2px ${spacing[2]}`,\n fontSize: typography.size.xs,\n fontWeight: typography.weight.semibold,\n fontFamily: typography.fontFamily.base,\n lineHeight: typography.lineHeight.tight,\n borderRadius: radii.xs,\n background: t.bg,\n color: t.color,\n whiteSpace: \"nowrap\",\n };\n\n const dotStyle: React.CSSProperties = {\n width: \"5px\",\n height: \"5px\",\n borderRadius: radii.full,\n background: t.dot,\n flexShrink: 0,\n };\n\n return (\n <span style={style}>\n {dot && <span style={dotStyle} />}\n {children}\n </span>\n );\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype Stat = {\n label: string;\n value: string;\n unit?: string;\n sub?: string;\n color?: string;\n highlight?: boolean;\n};\n\ntype StatGridProps = {\n stats: Stat[];\n cols?: 2 | 3 | 4;\n};\n\nexport function StatGrid({ stats, cols: _cols = 4 }: StatGridProps) {\n // Use the bordered-strip pattern from csv-doctor's diagnosis screen\n const stripStyle: React.CSSProperties = {\n display: \"flex\",\n border: `1px solid ${colors.border}`,\n borderRadius: radii.lg,\n overflow: \"hidden\",\n };\n\n return (\n <div style={stripStyle}>\n {stats.map((stat, i) => (\n <StatCell key={i} stat={stat} isLast={i === stats.length - 1} />\n ))}\n </div>\n );\n}\n\nfunction StatCell({ stat, isLast }: { stat: Stat; isLast: boolean }) {\n const isHighlight = stat.highlight;\n\n const style: React.CSSProperties = {\n flex: 1,\n padding: `${spacing[3]} ${spacing[4]}`,\n textAlign: \"center\",\n borderRight: isLast ? undefined : `1px solid ${colors.border}`,\n background: isHighlight ? colors.black : \"transparent\",\n };\n\n const valueStyle: React.CSSProperties = {\n fontSize: typography.size.xl,\n fontWeight: typography.weight.bold,\n fontFamily: typography.fontFamily.base,\n lineHeight: typography.lineHeight.tight,\n color: stat.color || (isHighlight ? colors.textInverse : colors.textPrimary),\n display: \"flex\",\n alignItems: \"baseline\",\n justifyContent: \"center\",\n gap: spacing[1],\n margin: 0,\n };\n\n const unitStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n fontWeight: typography.weight.medium,\n color: isHighlight ? colors.textTertiary : colors.textTertiary,\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n fontFamily: typography.fontFamily.base,\n color: isHighlight ? colors.textTertiary : colors.textTertiary,\n marginTop: \"2px\",\n };\n\n const subStyle: React.CSSProperties = {\n fontSize: typography.size.xs,\n color: colors.textTertiary,\n fontFamily: typography.fontFamily.base,\n marginTop: \"4px\",\n };\n\n return (\n <div style={style}>\n <p style={valueStyle}>\n {stat.value}\n {stat.unit && <span style={unitStyle}>{stat.unit}</span>}\n </p>\n <div style={labelStyle}>{stat.label}</div>\n {stat.sub && <div style={subStyle}>{stat.sub}</div>}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\n\ntype SectionLabelProps = {\n children: React.ReactNode;\n action?: React.ReactNode;\n};\n\nexport const SectionLabel = React.memo(function SectionLabel({ children, action }: SectionLabelProps) {\n const style: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: spacing[2],\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n fontWeight: typography.weight.medium,\n fontFamily: typography.fontFamily.base,\n color: colors.textSecondary,\n margin: 0,\n };\n\n return (\n <div style={style}>\n <p style={labelStyle}>{children}</p>\n {action && <div>{action}</div>}\n </div>\n );\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype Tab = {\n id: string;\n label: string;\n badge?: number;\n};\n\ntype TabBarProps = {\n tabs: Tab[];\n active: string;\n onChange: (id: string) => void;\n size?: \"sm\" | \"md\";\n};\n\nexport function TabBar({ tabs, active, onChange, size = \"md\" }: TabBarProps) {\n const containerStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: spacing[1],\n fontFamily: typography.fontFamily.base,\n };\n\n const fontSize = size === \"sm\" ? typography.size.base : typography.size.md;\n const paddingY = size === \"sm\" ? spacing[1] : spacing[2];\n const paddingX = size === \"sm\" ? spacing[3] : spacing[4];\n\n return (\n <div style={containerStyle} role=\"tablist\">\n {tabs.map((tab) => {\n const isActive = tab.id === active;\n\n const tabStyle: React.CSSProperties = {\n padding: `${paddingY} ${paddingX}`,\n fontSize,\n fontWeight: isActive ? typography.weight.semibold : typography.weight.normal,\n fontFamily: typography.fontFamily.base,\n color: isActive ? colors.textInverse : colors.textSecondary,\n background: isActive ? colors.black : \"transparent\",\n border: \"none\",\n borderRadius: radii.full,\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[2],\n transition: \"background 150ms ease, color 150ms ease\",\n whiteSpace: \"nowrap\",\n };\n\n const badgeStyle: React.CSSProperties = {\n fontSize: typography.size.xs,\n fontWeight: typography.weight.semibold,\n background: isActive ? \"rgba(255,255,255,0.2)\" : colors.neutralBg,\n color: isActive ? colors.textInverse : colors.textSecondary,\n borderRadius: radii.full,\n padding: `0 ${spacing[2]}`,\n minWidth: \"20px\",\n textAlign: \"center\",\n lineHeight: \"20px\",\n };\n\n return (\n <button\n key={tab.id}\n style={tabStyle}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => !isActive && onChange(tab.id)}\n onMouseEnter={(e) => {\n if (!isActive) {\n e.currentTarget.style.background = colors.neutralBg;\n e.currentTarget.style.color = colors.textPrimary;\n }\n }}\n onMouseLeave={(e) => {\n if (!isActive) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = colors.textSecondary;\n }\n }}\n >\n {tab.label}\n {tab.badge !== undefined && <span style={badgeStyle}>{tab.badge}</span>}\n </button>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype Column<T> = {\n key: keyof T | string;\n header: string;\n width?: number | string;\n render?: (row: T) => React.ReactNode;\n align?: \"left\" | \"center\" | \"right\";\n};\n\ntype DataTableProps<T> = {\n columns: Column<T>[];\n rows: T[];\n loading?: boolean;\n emptyState?: React.ReactNode;\n onRowClick?: (row: T) => void;\n};\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n rows,\n loading = false,\n emptyState,\n onRowClick,\n}: DataTableProps<T>) {\n const tableStyle: React.CSSProperties = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontFamily: typography.fontFamily.base,\n fontSize: typography.size.base,\n };\n\n const thStyle = (col: Column<T>): React.CSSProperties => ({\n textAlign: (col.align || \"left\") as React.CSSProperties[\"textAlign\"],\n padding: `${spacing[3]} ${spacing[4]}`,\n fontSize: typography.size.sm,\n fontWeight: typography.weight.medium,\n color: colors.textTertiary,\n borderBottom: `1px solid ${colors.border}`,\n width: col.width,\n whiteSpace: \"nowrap\",\n });\n\n const tdStyle = (col: Column<T>): React.CSSProperties => ({\n textAlign: (col.align || \"left\") as React.CSSProperties[\"textAlign\"],\n padding: `${spacing[3]} ${spacing[4]}`,\n fontSize: typography.size.base,\n color: colors.textPrimary,\n borderBottom: `1px solid ${colors.borderSubtle}`,\n verticalAlign: \"middle\",\n lineHeight: typography.lineHeight.snug,\n });\n\n const trHoverStyle: React.CSSProperties = {\n cursor: onRowClick ? \"pointer\" : \"default\",\n transition: \"background 100ms ease\",\n };\n\n if (loading) {\n return (\n <div style={{ padding: spacing[8], textAlign: \"center\" }}>\n <p style={{ color: colors.textTertiary, fontSize: typography.size.base }}>Loading...</p>\n </div>\n );\n }\n\n if (rows.length === 0) {\n if (emptyState) return <>{emptyState}</>;\n return (\n <div style={{ padding: spacing[8], textAlign: \"center\" }}>\n <p style={{ color: colors.textTertiary, fontSize: typography.size.base }}>No data</p>\n </div>\n );\n }\n\n return (\n <div style={{ overflowX: \"auto\", borderRadius: radii.md }}>\n <table style={tableStyle}>\n <thead>\n <tr>\n {columns.map((col) => (\n <th key={String(col.key)} style={thStyle(col)}>\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, rowIdx) => (\n <tr\n key={rowIdx}\n style={trHoverStyle}\n onClick={() => onRowClick?.(row)}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = colors.bgSubtle;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n }}\n >\n {columns.map((col) => (\n <td key={String(col.key)} style={tdStyle(col)}>\n {col.render\n ? col.render(row)\n : String(row[col.key as keyof T] ?? \"\")}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\ntype InputProps = {\n label?: string;\n hint?: string;\n error?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n type?: \"text\" | \"email\" | \"password\" | \"time\" | \"url\";\n placeholder?: string;\n disabled?: boolean;\n value: string;\n onChange: (value: string) => void;\n};\n\nexport function Input({\n label,\n hint,\n error,\n prefix,\n suffix,\n type = \"text\",\n placeholder,\n disabled = false,\n value,\n onChange,\n}: InputProps) {\n const hasError = !!error;\n\n const wrapperStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[1],\n fontFamily: typography.fontFamily.base,\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.base,\n fontWeight: typography.weight.medium,\n color: colors.textPrimary,\n margin: 0,\n };\n\n const inputWrapperStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[2],\n padding: `${spacing[2]} ${spacing[3]}`,\n background: disabled ? colors.bgSubtle : colors.cardBg,\n border: `1px solid ${hasError ? colors.error : colors.border}`,\n borderRadius: radii.md,\n transition: \"border-color 150ms ease, box-shadow 150ms ease\",\n cursor: disabled ? \"not-allowed\" : \"text\",\n };\n\n const inputStyle: React.CSSProperties = {\n flex: 1,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontSize: typography.size.md,\n fontFamily: typography.fontFamily.base,\n color: disabled ? colors.textDisabled : colors.textPrimary,\n cursor: disabled ? \"not-allowed\" : \"text\",\n padding: 0,\n width: \"100%\",\n };\n\n const hintStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: hasError ? colors.error : colors.textTertiary,\n margin: 0,\n };\n\n const affixStyle: React.CSSProperties = {\n fontSize: typography.size.base,\n color: colors.textTertiary,\n flexShrink: 0,\n };\n\n return (\n <div style={wrapperStyle}>\n {label && <p style={labelStyle}>{label}</p>}\n <div\n style={inputWrapperStyle}\n onFocusCapture={(e) => {\n const wrapper = e.currentTarget;\n wrapper.style.borderColor = hasError ? colors.error : colors.borderFocus;\n wrapper.style.boxShadow = shadows.focus;\n }}\n onBlurCapture={(e) => {\n const wrapper = e.currentTarget;\n wrapper.style.borderColor = hasError ? colors.error : colors.border;\n wrapper.style.boxShadow = \"none\";\n }}\n >\n {prefix && <span style={affixStyle}>{prefix}</span>}\n <input\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n aria-invalid={hasError}\n style={inputStyle}\n />\n {suffix && <span style={affixStyle}>{suffix}</span>}\n </div>\n {(error || hint) && <p style={hintStyle}>{error || hint}</p>}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype ScoreBarProps = {\n score: number;\n max?: number;\n width?: number | string;\n showLabel?: boolean;\n size?: \"sm\" | \"md\";\n};\n\nfunction getScoreColor(pct: number): string {\n if (pct >= 75) return colors.success;\n if (pct >= 50) return colors.warning;\n return colors.error;\n}\n\nfunction getScoreBg(pct: number): string {\n if (pct >= 75) return colors.successBg;\n if (pct >= 50) return colors.warningBg;\n return colors.errorBg;\n}\n\nexport const ScoreBar = React.memo(function ScoreBar({\n score,\n max = 100,\n width = \"100%\",\n showLabel = true,\n size = \"md\",\n}: ScoreBarProps) {\n const pct = Math.min(Math.max((score / max) * 100, 0), 100);\n const barColor = getScoreColor(pct);\n const bgColor = getScoreBg(pct);\n const barHeight = size === \"sm\" ? \"6px\" : \"8px\";\n\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n width,\n fontFamily: typography.fontFamily.base,\n };\n\n const trackStyle: React.CSSProperties = {\n flex: 1,\n height: barHeight,\n background: bgColor,\n borderRadius: radii.full,\n overflow: \"hidden\",\n };\n\n const fillStyle: React.CSSProperties = {\n height: \"100%\",\n width: `${pct}%`,\n background: barColor,\n borderRadius: radii.full,\n transition: \"width 400ms ease\",\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: size === \"sm\" ? typography.size.xs : typography.size.sm,\n fontWeight: typography.weight.semibold,\n color: barColor,\n minWidth: \"36px\",\n textAlign: \"right\",\n };\n\n return (\n <div style={containerStyle}>\n <div style={trackStyle}>\n <div style={fillStyle} />\n </div>\n {showLabel && <span style={labelStyle}>{Math.round(pct)}%</span>}\n </div>\n );\n});\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\ntype ModalProps = {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n maxWidth?: number;\n title?: string;\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 children,\n maxWidth = 400,\n title,\n}: ModalProps) {\n const [visible, setVisible] = useState(false);\n const dialogRef = useRef<HTMLDivElement>(null);\n const titleId = React.useId();\n\n // Entry animation: mount → rAF → transition in\n useEffect(() => {\n if (!open) {\n setVisible(false);\n return;\n }\n const id = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(id);\n }, [open]);\n\n // ESC key closes modal\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [open, onClose]);\n\n // Focus trap\n useEffect(() => {\n if (!open || !dialogRef.current) return;\n\n const dialog = dialogRef.current;\n const previouslyFocused = document.activeElement as HTMLElement | null;\n\n // Focus the first focusable element inside the dialog\n const firstFocusable = dialog.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n if (firstFocusable) {\n firstFocusable.focus();\n } else {\n dialog.focus();\n }\n\n const handleTab = (e: KeyboardEvent) => {\n if (e.key !== \"Tab\") return;\n\n const focusableElements = dialog.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n if (focusableElements.length === 0) return;\n\n const first = focusableElements[0];\n const last = focusableElements[focusableElements.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 document.addEventListener(\"keydown\", handleTab);\n return () => {\n document.removeEventListener(\"keydown\", handleTab);\n // Restore focus when modal closes\n previouslyFocused?.focus();\n };\n }, [open]);\n\n if (!open) return null;\n\n const closeButton = (\n <button\n onClick={onClose}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = colors.pageBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n }}\n style={{\n width: \"28px\",\n height: \"28px\",\n borderRadius: radii.sm,\n border: \"none\",\n background: \"transparent\",\n color: colors.textTertiary,\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n aria-label=\"Close\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M1 1l10 10M11 1L1 11\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n );\n\n return (\n <div\n role=\"presentation\"\n onClick={onClose}\n style={{\n position: \"fixed\",\n inset: 0,\n background: \"rgba(0,0,0,0.32)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 100,\n padding: spacing[4],\n }}\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n style={{\n background: colors.cardBg,\n borderRadius: radii[\"2xl\"],\n width: \"100%\",\n maxWidth,\n boxShadow: shadows.lg,\n opacity: visible ? 1 : 0,\n transform: visible ? \"none\" : \"translateY(10px) scale(0.97)\",\n transition: \"opacity 0.18s ease, transform 0.18s ease\",\n outline: \"none\",\n ...(title\n ? {\n display: \"flex\",\n flexDirection: \"column\" as const,\n maxHeight: \"calc(100vh - 32px)\",\n overflow: \"hidden\",\n }\n : {\n padding: \"28px 24px 24px\",\n position: \"relative\" as const,\n }),\n }}\n >\n {title ? (\n <>\n {/* Sticky header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: `${spacing[4]} ${spacing[5]}`,\n borderBottom: `1px solid ${colors.border}`,\n flexShrink: 0,\n }}\n >\n <span\n id={titleId}\n style={{\n fontWeight: typography.weight.bold,\n fontSize: typography.size.base,\n fontFamily: typography.fontFamily.base,\n color: colors.textPrimary,\n }}\n >\n {title}\n </span>\n {closeButton}\n </div>\n\n {/* Scrollable body */}\n <div style={{ overflowY: \"auto\", flex: 1 }}>{children}</div>\n </>\n ) : (\n <>\n {/* Original layout: absolute X button */}\n <div style={{ position: \"absolute\", top: \"14px\", right: \"14px\" }}>\n {closeButton}\n </div>\n {children}\n </>\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\n\ntype ToggleGroupProps = {\n options: { value: string; label: string }[];\n value: string;\n onChange: (value: string) => void;\n fullWidth?: boolean;\n};\n\nexport function ToggleGroup({\n options,\n value,\n onChange,\n fullWidth = false,\n}: ToggleGroupProps) {\n const containerStyle: React.CSSProperties = {\n display: \"inline-flex\",\n border: `1px solid ${colors.border}`,\n borderRadius: radii.md,\n overflow: \"hidden\",\n fontFamily: typography.fontFamily.base,\n width: fullWidth ? \"100%\" : undefined,\n };\n\n return (\n <div style={containerStyle} role=\"radiogroup\">\n {options.map((opt, i) => {\n const isActive = opt.value === value;\n\n const optStyle: React.CSSProperties = {\n flex: fullWidth ? 1 : undefined,\n padding: `${spacing[2]} ${spacing[4]}`,\n fontSize: typography.size.md,\n fontWeight: isActive ? typography.weight.semibold : typography.weight.normal,\n fontFamily: typography.fontFamily.base,\n color: isActive ? colors.textInverse : colors.textPrimary,\n background: isActive ? colors.black : colors.cardBg,\n border: \"none\",\n borderRight: i < options.length - 1 ? `1px solid ${colors.border}` : \"none\",\n cursor: \"pointer\",\n transition: \"background 150ms ease, color 150ms ease\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n };\n\n return (\n <button\n key={opt.value}\n style={optStyle}\n role=\"radio\"\n aria-checked={isActive}\n onClick={() => onChange(opt.value)}\n onMouseEnter={(e) => {\n if (!isActive) e.currentTarget.style.background = colors.bgSubtle;\n }}\n onMouseLeave={(e) => {\n if (!isActive) e.currentTarget.style.background = colors.cardBg;\n }}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\n\nexport type IconProps = React.SVGProps<SVGSVGElement> & {\n size?: number | string;\n filled?: boolean;\n};\n\nfunction createIcon(d: string | React.ReactNode, viewBox = \"0 0 24 24\") {\n return function Icon({ size = 20, filled, className, style, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox={viewBox}\n fill={filled ? \"currentColor\" : \"none\"}\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n style={{ flexShrink: 0, ...style }}\n {...props}\n >\n {typeof d === \"string\" ? <path d={d} /> : d}\n </svg>\n );\n };\n}\n\n// -----------------------------------------------------------------------------\n// core / ui\n// -----------------------------------------------------------------------------\nexport const LockIcon = createIcon(\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0110 0v4\" />\n </>\n);\n\nexport const SearchIcon = createIcon(\n <>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"M21 21l-4.35-4.35\" />\n </>\n);\n\nexport const CheckIcon = createIcon(\"M20 6L9 17l-5-5\");\n\nexport const XIcon = createIcon(\"M18 6L6 18M6 6l12 12\");\n\nexport const MenuIcon = createIcon(\"M3 12h18M3 6h18M3 18h18\");\n\nexport const InfoIcon = createIcon(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4M12 8h.01\" />\n </>\n);\n\nexport const AlertIcon = createIcon(\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <path d=\"M12 9v4M12 17h.01\" />\n </>\n);\n\nexport const PlayIcon = createIcon(\"M5 3l14 9-14 9V3z\");\n\nexport const StarIcon = createIcon(\n \"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n);\n\nexport const SettingsIcon = createIcon(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z\" />\n </>\n);\n\nexport const UploadIcon = createIcon(\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 3v12\");\n\nexport const DownloadIcon = createIcon(\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\");\n\n// -----------------------------------------------------------------------------\n// arrows / chevrons\n// -----------------------------------------------------------------------------\nexport const ArrowRightIcon = createIcon(\"M5 12h14M12 5l7 7-7 7\");\nexport const ArrowLeftIcon = createIcon(\"M19 12H5M12 19l-7-7 7-7\");\nexport const ArrowUpIcon = createIcon(\"M12 19V5M5 12l7-7 7 7\");\nexport const ArrowDownIcon = createIcon(\"M12 5v14M19 12l-7 7-7-7\");\n\nexport const ChevronRightIcon = createIcon(\"M9 18l6-6-6-6\");\nexport const ChevronLeftIcon = createIcon(\"M15 18l-6-6 6-6\");\nexport const ChevronUpIcon = createIcon(\"M18 15l-6-6-6 6\");\nexport const ChevronDownIcon = createIcon(\"M6 9l6 6 6-6\");\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { LockIcon } from \"../Icon\";\n\ntype CheckRowProps = {\n checked: boolean;\n onChange: (checked: boolean) => void;\n label: string;\n sublabel?: string;\n disabled?: boolean;\n locked?: boolean;\n badge?: React.ReactNode;\n right?: React.ReactNode;\n};\n\nexport function CheckRow({\n checked,\n onChange,\n label,\n sublabel,\n disabled = false,\n locked = false,\n badge,\n right,\n}: CheckRowProps) {\n const isInteractive = !disabled && !locked;\n\n const style: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n padding: `${spacing[3]} ${spacing[4]}`,\n background: checked ? colors.black : colors.cardBg,\n border: `1px solid ${checked ? colors.black : colors.border}`,\n borderRadius: radii.lg,\n cursor: isInteractive ? \"pointer\" : \"default\",\n opacity: disabled ? 0.5 : 1,\n transition: \"background 150ms ease, border-color 150ms ease\",\n fontFamily: typography.fontFamily.base,\n };\n\n const dotStyle: React.CSSProperties = {\n width: \"8px\",\n height: \"8px\",\n borderRadius: radii.full,\n background: checked ? colors.error : colors.textTertiary,\n flexShrink: 0,\n };\n\n const labelStyle: React.CSSProperties = {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n };\n\n const titleStyle: React.CSSProperties = {\n fontSize: typography.size.md,\n fontWeight: typography.weight.semibold,\n color: checked ? colors.textInverse : colors.textPrimary,\n lineHeight: typography.lineHeight.tight,\n };\n\n const labelId = React.useId();\n\n const subStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: checked ? colors.textTertiary : colors.textSecondary,\n lineHeight: typography.lineHeight.tight,\n };\n\n // Checkbox visual\n const checkboxStyle: React.CSSProperties = {\n width: \"20px\",\n height: \"20px\",\n borderRadius: radii.xs,\n border: checked\n ? \"none\"\n : `1.5px solid ${colors.borderLight}`,\n background: checked ? colors.error : \"transparent\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n transition: \"background 150ms ease, border-color 150ms ease\",\n };\n\n return (\n <div\n style={style}\n role=\"checkbox\"\n aria-checked={checked}\n aria-labelledby={labelId}\n tabIndex={isInteractive ? 0 : -1}\n onClick={() => isInteractive && onChange(!checked)}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n if (isInteractive) onChange(!checked);\n }\n }}\n onMouseEnter={(e) => {\n if (isInteractive && !checked) {\n e.currentTarget.style.borderColor = colors.borderLight;\n }\n }}\n onMouseLeave={(e) => {\n if (isInteractive && !checked) {\n e.currentTarget.style.borderColor = colors.border;\n }\n }}\n >\n <span style={dotStyle} />\n <div style={labelStyle} id={labelId}>\n <span style={titleStyle}>{label}</span>\n {sublabel && <span style={subStyle}>{sublabel}</span>}\n </div>\n\n {badge && <div>{badge}</div>}\n {right && <div>{right}</div>}\n\n {locked ? (\n <LockIcon size={16} style={{ color: colors.textTertiary }} />\n ) : (\n <div style={checkboxStyle}>\n {checked && (\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-4.5\"\n stroke={colors.textInverse}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { radii } from \"../../tokens/radii\";\n\ntype StatusDotProps = {\n tone: \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\";\n size?: \"sm\" | \"md\";\n pulse?: boolean;\n};\n\nconst toneColors = {\n success: colors.success,\n warning: colors.warning,\n error: colors.error,\n info: colors.info,\n neutral: colors.textTertiary,\n} as const;\n\nlet pulseStyleInjected = false;\n\nfunction ensurePulseStyle() {\n if (pulseStyleInjected || typeof document === \"undefined\") return;\n const style = document.createElement(\"style\");\n style.textContent = `@keyframes ol-pulse { 0%, 100% { opacity: 1 } 50% { opacity: 0.4 } }`;\n document.head.appendChild(style);\n pulseStyleInjected = true;\n}\n\nexport const StatusDot = React.memo(function StatusDot({ tone, size = \"md\", pulse = false }: StatusDotProps) {\n if (pulse) ensurePulseStyle();\n\n const px = size === \"sm\" ? \"6px\" : \"8px\";\n\n const style: React.CSSProperties = {\n width: px,\n height: px,\n borderRadius: radii.full,\n backgroundColor: toneColors[tone],\n display: \"inline-block\",\n flexShrink: 0,\n animation: pulse ? \"ol-pulse 1.5s ease-in-out infinite\" : undefined,\n };\n\n return <span style={style} />;\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\n\ntype PageHeaderProps = {\n title: string;\n sub?: string;\n action?: React.ReactNode;\n};\n\nexport function PageHeader({ title, sub, action }: PageHeaderProps) {\n const style: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: spacing[4],\n marginBottom: spacing[5],\n fontFamily: typography.fontFamily.base,\n };\n\n const textStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n };\n\n const titleStyle: React.CSSProperties = {\n fontSize: typography.size.xl,\n fontWeight: typography.weight.bold,\n color: colors.textPrimary,\n letterSpacing: typography.letterSpacing.tight,\n lineHeight: typography.lineHeight.tight,\n margin: 0,\n };\n\n const subStyle: React.CSSProperties = {\n fontSize: typography.size.base,\n color: colors.textSecondary,\n margin: 0,\n };\n\n return (\n <div style={style}>\n <div style={textStyle}>\n <h2 style={titleStyle}>{title}</h2>\n {sub && <p style={subStyle}>{sub}</p>}\n </div>\n {action && <div style={{ flexShrink: 0 }}>{action}</div>}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\n\ntype ActionItem = {\n text: string;\n tone?: \"error\" | \"warning\" | \"info\" | \"neutral\";\n};\n\ntype ActionListProps = {\n items: ActionItem[];\n};\n\nconst toneColors = {\n error: colors.error,\n warning: colors.warning,\n info: colors.info,\n neutral: colors.textTertiary,\n} as const;\n\nexport function ActionList({ items }: ActionListProps) {\n const listStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[3],\n fontFamily: typography.fontFamily.base,\n };\n\n return (\n <div style={listStyle}>\n {items.map((item, i) => {\n const dotColor = toneColors[item.tone || \"neutral\"];\n\n return (\n <div\n key={i}\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: spacing[3],\n }}\n >\n <span\n style={{\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n background: dotColor,\n flexShrink: 0,\n marginTop: \"5px\",\n }}\n />\n <span\n style={{\n fontSize: typography.size.base,\n color: colors.textPrimary,\n lineHeight: typography.lineHeight.relaxed,\n }}\n >\n {item.text}\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\nimport { CheckIcon, XIcon, AlertIcon, InfoIcon } from \"../Icon\";\n\ntype ToastTone = \"success\" | \"error\" | \"warning\" | \"info\" | \"neutral\";\n\ntype ToastProps = {\n open: boolean;\n onClose: () => void;\n message: string;\n tone?: ToastTone;\n duration?: number;\n action?: { label: string; onClick: () => void };\n};\n\nconst toneConfig = {\n success: { IconComponent: CheckIcon, bg: colors.cardBg, accent: colors.success },\n error: { IconComponent: XIcon, bg: colors.cardBg, accent: colors.error },\n warning: { IconComponent: AlertIcon, bg: colors.cardBg, accent: colors.warning },\n info: { IconComponent: InfoIcon, bg: colors.cardBg, accent: colors.info },\n neutral: { IconComponent: InfoIcon, bg: colors.cardBg, accent: colors.textTertiary },\n} as const;\n\nexport function Toast({\n open,\n onClose,\n message,\n tone = \"neutral\",\n duration = 4000,\n action,\n}: ToastProps) {\n const [visible, setVisible] = useState(false);\n\n // Slide-in animation\n useEffect(() => {\n if (!open) {\n setVisible(false);\n return;\n }\n const id = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(id);\n }, [open]);\n\n // Auto-dismiss\n useEffect(() => {\n if (!open || duration <= 0) return;\n const timer = setTimeout(onClose, duration);\n return () => clearTimeout(timer);\n }, [open, duration, onClose]);\n\n if (!open) return null;\n\n const config = toneConfig[tone];\n\n const containerStyle: React.CSSProperties = {\n position: \"fixed\",\n bottom: \"20px\",\n left: \"50%\",\n transform: visible\n ? \"translateX(-50%) translateY(0)\"\n : \"translateX(-50%) translateY(16px)\",\n opacity: visible ? 1 : 0,\n transition: \"opacity 0.18s ease, transform 0.18s ease\",\n zIndex: 200,\n pointerEvents: \"auto\",\n };\n\n const cardStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n padding: `${spacing[3]} ${spacing[4]}`,\n background: config.bg,\n borderRadius: radii.lg,\n boxShadow: shadows.lg,\n border: `1px solid ${colors.border}`,\n fontFamily: typography.fontFamily.base,\n maxWidth: \"480px\",\n minWidth: \"280px\",\n };\n\n const iconStyle: React.CSSProperties = {\n width: \"22px\",\n height: \"22px\",\n borderRadius: radii.full,\n background: config.accent,\n color: colors.textInverse,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: \"12px\",\n fontWeight: typography.weight.bold,\n flexShrink: 0,\n lineHeight: 1,\n };\n\n const messageStyle: React.CSSProperties = {\n flex: 1,\n fontSize: typography.size.base,\n color: colors.textPrimary,\n lineHeight: typography.lineHeight.snug,\n };\n\n const actionStyle: React.CSSProperties = {\n fontSize: typography.size.base,\n fontWeight: typography.weight.semibold,\n color: config.accent,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n whiteSpace: \"nowrap\",\n textDecoration: \"underline\",\n textUnderlineOffset: \"2px\",\n fontFamily: typography.fontFamily.base,\n };\n\n const closeStyle: React.CSSProperties = {\n width: \"24px\",\n height: \"24px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"transparent\",\n border: \"none\",\n borderRadius: radii.xs,\n cursor: \"pointer\",\n color: colors.textTertiary,\n flexShrink: 0,\n };\n\n const IconComp = config.IconComponent;\n\n return (\n <div style={containerStyle}>\n <div style={cardStyle}>\n <span style={iconStyle}>\n <IconComp size={14} />\n </span>\n <span style={messageStyle}>{message}</span>\n {action && (\n <button style={actionStyle} onClick={action.onClick}>\n {action.label}\n </button>\n )}\n <button\n style={closeStyle}\n onClick={onClose}\n aria-label=\"Dismiss\"\n onMouseEnter={(e) => { e.currentTarget.style.background = colors.pageBg; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"transparent\"; }}\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M1 1l10 10M11 1L1 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { spacing } from \"../../tokens/spacing\";\n\nexport const CodeChip = React.memo(function CodeChip({ children }: { children: React.ReactNode }) {\n const style: React.CSSProperties = {\n fontFamily: typography.fontFamily.mono,\n fontSize: typography.size.sm,\n backgroundColor: colors.bgSubtle,\n color: colors.textDark,\n padding: `2px ${spacing[2]}`,\n borderRadius: radii.md,\n border: `1px solid ${colors.border}`,\n display: \"inline-flex\",\n alignItems: \"center\",\n };\n return <span style={style}>{children}</span>;\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { CodeChip } from \"../CodeChip\";\n\nexport type DiffType = \"added\" | \"modified\" | \"destructive\" | \"safe\";\n\nexport type DiffRowProps = {\n title: string;\n handle: string;\n field: string;\n csvVal: string;\n storeVal: string;\n type: DiffType;\n note?: string;\n};\n\nconst typeColors = {\n added: colors.success,\n modified: colors.warning,\n destructive: colors.error,\n safe: colors.textTertiary,\n};\n\nconst typeBg = {\n added: colors.successBg,\n modified: colors.warningBg,\n destructive: colors.errorBg,\n safe: colors.bgSubtle, // slightly grey for unchanged/safe\n};\n\nexport function DiffRow({ title, handle, field, csvVal, storeVal, type, note }: DiffRowProps) {\n const rowStyle: React.CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"2fr 1fr 1.5fr 1.5fr 1fr\",\n gap: spacing[4],\n padding: spacing[4],\n backgroundColor: typeBg[type],\n borderLeft: `4px solid ${typeColors[type]}`,\n borderBottom: `1px solid ${colors.border}`,\n fontFamily: typography.fontFamily.base,\n alignItems: \"start\",\n };\n\n const textStyle: React.CSSProperties = {\n fontSize: typography.size.md,\n color: colors.textPrimary,\n margin: 0,\n };\n \n const subTextStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: colors.textSecondary,\n fontFamily: typography.fontFamily.mono,\n marginTop: spacing[1],\n marginBottom: 0,\n };\n\n return (\n <div style={rowStyle}>\n <div>\n <p style={{ ...textStyle, fontWeight: typography.weight.bold }}>{title}</p>\n <p style={subTextStyle}>{handle}</p>\n </div>\n <div>\n <CodeChip>{field}</CodeChip>\n </div>\n <div>\n <p style={{ ...textStyle, color: csvVal ? colors.textPrimary : colors.error }}>\n {csvVal || \"(blank)\"}\n </p>\n </div>\n <div>\n <p style={{ ...textStyle, color: colors.textTertiary }}>{storeVal || \"—\"}</p>\n </div>\n <div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: spacing[2] }}>\n <span style={{ width: 8, height: 8, borderRadius: \"50%\", backgroundColor: typeColors[type] }} />\n <span style={{ fontSize: typography.size.sm, fontWeight: typography.weight.semibold, color: typeColors[type] }}>\n {type === \"added\" ? \"New\" : type === \"safe\" ? \"Unchanged\" : type.charAt(0).toUpperCase() + type.slice(1)}\n </span>\n </div>\n {note && (\n <p style={{ fontSize: typography.size.xs, color: typeColors[type], marginTop: spacing[1], marginBottom: 0 }}>\n ⚠ {note}\n </p>\n )}\n </div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { Badge } from \"../Badge\";\nimport { CodeChip } from \"../CodeChip\";\nimport { Button } from \"../Button\";\n\nexport type IssueCardProps = {\n severity: \"error\" | \"warning\" | \"info\";\n field: string;\n rowCount: number;\n message: string;\n fixable: boolean;\n onFix?: () => void;\n};\n\nexport function IssueCard({ severity, field, rowCount, message, fixable, onFix }: IssueCardProps) {\n const [expanded, setExpanded] = useState(false);\n\n const severityMap = {\n error: { tone: \"error\" as const, outline: colors.error },\n warning: { tone: \"warning\" as const, outline: colors.warning },\n info: { tone: \"info\" as const, outline: colors.info },\n };\n \n const s = severityMap[severity];\n\n const cardStyle: React.CSSProperties = {\n padding: spacing[4],\n borderBottom: `1px solid ${colors.borderSubtle}`,\n fontFamily: typography.fontFamily.base,\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[3],\n backgroundColor: colors.white,\n };\n\n const headerRowStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n };\n\n const leftGroupStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n flexWrap: \"wrap\",\n };\n \n const outlineBadgeStyle: React.CSSProperties = {\n border: `1px solid ${s.outline}`,\n color: s.outline,\n padding: `2px ${spacing[2]}`,\n borderRadius: radii.full,\n fontSize: typography.size.xs,\n fontWeight: typography.weight.medium,\n backgroundColor: \"transparent\",\n };\n\n return (\n <div style={cardStyle}>\n <div style={headerRowStyle}>\n <div style={leftGroupStyle}>\n <Badge tone={s.tone} dot>\n {severity.charAt(0).toUpperCase() + severity.slice(1)}\n </Badge>\n <CodeChip>{field}</CodeChip>\n <span style={outlineBadgeStyle}>{rowCount.toLocaleString()} rows affected</span>\n </div>\n <div>\n {fixable ? (\n <Button variant=\"primary\" size=\"sm\" onClick={onFix}>\n Auto-Fix\n </Button>\n ) : (\n <span style={{ fontSize: typography.size.sm, color: colors.textTertiary }}>\n Manual fix\n </span>\n )}\n </div>\n </div>\n \n <p style={{ margin: 0, fontSize: typography.size.md, color: colors.textDark }}>\n {message}\n </p>\n \n <div>\n <button \n onClick={() => setExpanded(!expanded)}\n style={{\n background: \"none\",\n border: \"none\",\n padding: 0,\n color: colors.textSecondary,\n fontSize: typography.size.sm,\n cursor: \"pointer\",\n textDecoration: \"underline\",\n fontFamily: typography.fontFamily.base,\n }}\n >\n {expanded ? \"Hide sample rows ▲\" : \"View sample rows ▼\"}\n </button>\n </div>\n \n {expanded && (\n <div style={{ display: \"flex\", gap: spacing[2], marginTop: spacing[1], flexWrap: \"wrap\" }}>\n {[1, 2, 3].map(row => (\n <span key={row} style={{ \n fontSize: typography.size.xs, \n border: `1px solid ${colors.border}`,\n padding: `2px ${spacing[2]}`,\n borderRadius: radii.full,\n color: colors.textSecondary\n }}>\n row {row}\n </span>\n ))}\n {rowCount > 3 && (\n <span style={{ fontSize: typography.size.xs, color: colors.textTertiary, alignSelf: \"center\" }}>\n + {rowCount - 3} more\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { radii } from \"../../tokens/radii\";\nimport { IssueCard, type IssueCardProps } from \"../IssueCard\";\n\nexport type IssueGroupProps = {\n category: string;\n issues: IssueCardProps[];\n defaultOpen?: boolean;\n};\n\nexport function IssueGroup({ category, issues, defaultOpen = true }: IssueGroupProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n \n const hasError = issues.some(i => i.severity === \"error\");\n const hasWarning = issues.some(i => i.severity === \"warning\");\n const dotColor = hasError ? colors.error : hasWarning ? colors.warning : colors.info;\n\n const totalRows = issues.reduce((acc, issue) => acc + issue.rowCount, 0);\n\n const containerStyle: React.CSSProperties = {\n backgroundColor: colors.cardBg,\n borderRadius: radii.lg,\n border: `1px solid ${colors.border}`,\n marginBottom: spacing[4],\n overflow: \"hidden\",\n fontFamily: typography.fontFamily.base,\n };\n\n const headerStyle: React.CSSProperties = {\n padding: spacing[4],\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n backgroundColor: colors.cardBg,\n borderBottom: isOpen ? `1px solid ${colors.border}` : \"none\",\n userSelect: \"none\",\n };\n\n const titleGroupStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n };\n\n const dotStyle: React.CSSProperties = {\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n backgroundColor: dotColor,\n flexShrink: 0,\n };\n \n const countBadgeStyle: React.CSSProperties = {\n backgroundColor: colors.bgSubtle,\n border: `1px solid ${colors.border}`,\n borderRadius: radii.full,\n padding: `2px ${spacing[3]}`,\n fontSize: typography.size.sm,\n color: colors.textSecondary,\n fontWeight: typography.weight.medium,\n };\n\n return (\n <div style={containerStyle}>\n <div style={headerStyle} onClick={() => setIsOpen(!isOpen)}>\n <div style={titleGroupStyle}>\n <span style={dotStyle} />\n <span style={{ fontSize: typography.size.lg, fontWeight: typography.weight.bold, color: colors.textPrimary }}>\n {category}\n </span>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: spacing[3] }}>\n <span style={countBadgeStyle}>{totalRows.toLocaleString()} rows</span>\n <span style={{ \n color: colors.textTertiary, \n transform: isOpen ? \"rotate(180deg)\" : \"none\", \n transition: \"transform 200ms ease\",\n fontSize: \"12px\"\n }}>\n ▼\n </span>\n </div>\n </div>\n \n {isOpen && (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {issues.map((issue, idx) => (\n <div key={idx} style={{ \n borderBottom: idx === issues.length - 1 ? \"none\" : `1px solid ${colors.borderSubtle}` \n }}>\n <IssueCard {...issue} />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { spacing } from \"../../tokens/spacing\";\n\nexport type MiniStatProps = {\n value: string | React.ReactNode;\n label: string;\n tone?: \"success\" | \"error\" | \"neutral\" | \"info\";\n};\n\nexport const MiniStat = React.memo(function MiniStat({ value, label, tone = \"neutral\" }: MiniStatProps) {\n const toneMap = {\n success: { border: colors.successBorder, color: colors.success },\n error: { border: colors.errorBorder, color: colors.error },\n info: { border: colors.infoBorder, color: colors.info },\n neutral: { border: colors.border, color: colors.textPrimary },\n };\n\n const t = toneMap[tone];\n\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[1],\n padding: spacing[4],\n borderRadius: radii.lg,\n border: `1px solid ${t.border}`,\n backgroundColor: colors.white,\n fontFamily: typography.fontFamily.base,\n minWidth: \"120px\",\n flex: 1,\n };\n\n const valueStyle: React.CSSProperties = {\n fontSize: typography.size[\"2xl\"],\n fontWeight: typography.weight.bold,\n color: t.color,\n margin: 0,\n lineHeight: 1,\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: tone === \"neutral\" ? colors.textSecondary : t.color,\n margin: 0,\n marginTop: spacing[1],\n };\n\n return (\n <div style={containerStyle}>\n <div style={valueStyle}>{value}</div>\n <div style={labelStyle}>{label}</div>\n </div>\n );\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { radii } from \"../../tokens/radii\";\n\nexport type ModelTagProps = {\n name: string;\n};\n\nexport const ModelTag = React.memo(function ModelTag({ name }: ModelTagProps) {\n const style: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: `2px ${spacing[3]}`,\n backgroundColor: colors.neutralBg,\n color: colors.textDark,\n fontSize: typography.size.xs,\n fontFamily: typography.fontFamily.base,\n fontWeight: typography.weight.medium,\n borderRadius: radii.full,\n whiteSpace: \"nowrap\",\n };\n\n return <span style={style}>{name}</span>;\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { radii } from \"../../tokens/radii\";\n\nexport type ProgressBarProps = {\n percent: number;\n height?: number;\n};\n\nexport const ProgressBar = React.memo(function ProgressBar({ percent, height = 8 }: ProgressBarProps) {\n const trackStyle: React.CSSProperties = {\n width: \"100%\",\n backgroundColor: colors.borderSubtle,\n borderRadius: radii.full,\n height: `${height}px`,\n overflow: \"hidden\",\n };\n\n const fillStyle: React.CSSProperties = {\n width: `${Math.max(0, Math.min(100, percent))}%`,\n backgroundColor: colors.black,\n height: \"100%\",\n transition: \"width 300ms ease\",\n };\n\n return (\n <div style={trackStyle} role=\"progressbar\" aria-valuenow={percent} aria-valuemin={0} aria-valuemax={100}>\n <div style={fillStyle} />\n </div>\n );\n});\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { radii } from \"../../tokens/radii\";\n\nexport type ProgressStep = {\n id: string;\n label: string;\n status: \"pending\" | \"running\" | \"done\";\n value?: React.ReactNode;\n};\n\nexport type ProgressListProps = {\n steps: ProgressStep[];\n};\n\nexport function ProgressList({ steps }: ProgressListProps) {\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[4],\n fontFamily: typography.fontFamily.base,\n };\n\n return (\n <div style={containerStyle}>\n {steps.map((step) => {\n const isPending = step.status === \"pending\";\n const isRunning = step.status === \"running\";\n const isDone = step.status === \"done\";\n\n const rowStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n opacity: isPending ? 0.4 : 1,\n };\n\n const leftStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing[3],\n };\n\n const iconContainerStyle: React.CSSProperties = {\n width: \"20px\",\n height: \"20px\",\n borderRadius: radii.full,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: isDone ? colors.success : isRunning ? colors.black : colors.borderLight,\n color: colors.white,\n flexShrink: 0,\n };\n\n return (\n <div key={step.id} style={rowStyle}>\n <div style={leftStyle}>\n <div style={iconContainerStyle}>\n {isDone && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.5 7.5L5.5 10.5L11.5 3.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )}\n {isRunning && (\n <div style={{ width: 6, height: 6, backgroundColor: colors.white, borderRadius: \"50%\" }} />\n )}\n </div>\n <span style={{ \n fontSize: typography.size.md, \n color: colors.textPrimary, \n fontWeight: isRunning ? typography.weight.semibold : typography.weight.normal \n }}>\n {step.label}\n </span>\n </div>\n {step.value && (\n <span style={{ \n fontSize: typography.size.sm, \n color: isDone ? colors.success : colors.textTertiary \n }}>\n {step.value}\n </span>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\nexport type RadioProps = {\n checked: boolean;\n onChange: (checked: boolean) => void;\n value?: string;\n name?: string;\n disabled?: boolean;\n label?: string;\n description?: string;\n id?: string;\n};\n\nexport function Radio({\n checked,\n onChange,\n value,\n name,\n disabled = false,\n label,\n description,\n id,\n}: RadioProps) {\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n const generatedId = React.useId();\n const radioId = id || generatedId;\n\n const wrapperStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: spacing[3],\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n fontFamily: typography.fontFamily.base,\n };\n\n const outerCircleStyle: React.CSSProperties = {\n position: \"relative\",\n width: \"18px\",\n height: \"18px\",\n borderRadius: radii.full,\n border: `1px solid ${checked ? colors.black : isHovered && !disabled ? colors.textTertiary : colors.borderLight}`,\n backgroundColor: colors.white,\n transition: \"border-color 150ms ease, box-shadow 150ms ease\",\n flexShrink: 0,\n boxShadow: isFocused ? shadows.focus : \"none\",\n outline: \"none\",\n marginTop: \"1px\", // Optical alignment\n };\n\n const innerDotStyle: React.CSSProperties = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: `translate(-50%, -50%) scale(${checked ? 1 : 0})`,\n width: \"10px\",\n height: \"10px\",\n borderRadius: radii.full,\n backgroundColor: colors.black,\n transition: \"transform 150ms ease\",\n };\n\n const textWrapperStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[1],\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.md,\n fontWeight: typography.weight.medium,\n color: colors.textPrimary,\n margin: 0,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n };\n\n const descStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: colors.textSecondary,\n margin: 0,\n };\n\n // Hidden native radio button for accessibility and forms\n const inputStyle: React.CSSProperties = {\n position: \"absolute\",\n opacity: 0,\n width: 0,\n height: 0,\n margin: 0,\n };\n\n return (\n <label\n style={wrapperStyle}\n htmlFor={radioId}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div style={{ position: \"relative\" }}>\n <input\n id={radioId}\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={(e) => {\n if (!disabled) {\n onChange(e.target.checked);\n }\n }}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n style={inputStyle}\n />\n <div style={outerCircleStyle} aria-hidden=\"true\">\n <div style={innerDotStyle} />\n </div>\n </div>\n\n {(label || description) && (\n <div style={textWrapperStyle}>\n {label && <span style={labelStyle}>{label}</span>}\n {description && <span style={descStyle}>{description}</span>}\n </div>\n )}\n </label>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\n\nexport type StepBarProps = {\n steps: string[];\n current: number; // 1-indexed\n};\n\nexport function StepBar({ steps, current }: StepBarProps) {\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n fontFamily: typography.fontFamily.base,\n position: \"relative\",\n };\n\n const circleSize = 32;\n\n const backgroundLineStyle: React.CSSProperties = {\n position: \"absolute\",\n top: circleSize / 2 - 1, // center vertically with circles\n left: circleSize / 2,\n right: circleSize / 2,\n height: 2,\n backgroundColor: colors.border,\n zIndex: 1,\n };\n\n const progressLineStyle: React.CSSProperties = {\n height: \"100%\",\n width: `${((Math.min(current, steps.length) - 1) / (steps.length - 1)) * 100}%`,\n backgroundColor: colors.black,\n transition: \"width 300ms ease\",\n };\n\n return (\n <div style={containerStyle}>\n <div style={backgroundLineStyle}>\n <div style={progressLineStyle} />\n </div>\n \n {steps.map((step, index) => {\n const stepNum = index + 1;\n const isCompleted = stepNum < current;\n const isActive = stepNum === current;\n \n const circleStyle: React.CSSProperties = {\n width: circleSize,\n height: circleSize,\n borderRadius: \"50%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: typography.size.md,\n fontWeight: typography.weight.semibold,\n backgroundColor: isCompleted || isActive ? colors.black : colors.white,\n color: isCompleted || isActive ? colors.white : colors.textTertiary,\n border: isCompleted || isActive ? `2px solid ${colors.black}` : `2px solid ${colors.border}`,\n zIndex: 2,\n position: \"relative\",\n transition: \"all 300ms ease\",\n };\n \n const labelStyle: React.CSSProperties = {\n position: \"absolute\",\n top: circleSize + 8,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n fontSize: typography.size.sm,\n color: isActive || isCompleted ? colors.textPrimary : colors.textTertiary,\n fontWeight: isActive ? typography.weight.semibold : typography.weight.normal,\n whiteSpace: \"nowrap\",\n };\n\n const stepContainerStyle: React.CSSProperties = {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n };\n\n return (\n <div key={step} style={stepContainerStyle}>\n <div style={circleStyle}>\n {isCompleted ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.5 7.5L5.5 10.5L11.5 3.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n ) : (\n stepNum\n )}\n </div>\n <span style={labelStyle}>{step}</span>\n </div>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { spacing } from \"../../tokens/spacing\";\n\nexport type SummaryCardProps = {\n label: string;\n value: string | number;\n highlight?: boolean;\n color?: string; // e.g., colors.error\n};\n\nexport const SummaryCard = React.memo(function SummaryCard({ label, value, highlight = false, color }: SummaryCardProps) {\n const cardStyle: React.CSSProperties = {\n backgroundColor: highlight ? colors.black : colors.white,\n border: highlight ? \"none\" : `1px solid ${colors.border}`,\n borderRadius: radii.lg,\n padding: spacing[5],\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[2],\n fontFamily: typography.fontFamily.base,\n flex: 1,\n minWidth: 0, // prevents overflow in flex contexts\n };\n \n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: highlight ? colors.textDisabled : colors.textSecondary,\n fontWeight: typography.weight.semibold,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n margin: 0,\n };\n \n const valueStyle: React.CSSProperties = {\n fontSize: typography.size[\"3xl\"],\n fontWeight: typography.weight.bold,\n color: highlight ? colors.white : (color || colors.textPrimary),\n margin: 0,\n lineHeight: 1,\n };\n\n return (\n <div style={cardStyle}>\n <p style={labelStyle}>{label}</p>\n <p style={valueStyle}>{value}</p>\n </div>\n );\n});\n","import React, { useState } from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { spacing } from \"../../tokens/spacing\";\nimport { typography } from \"../../tokens/typography\";\nimport { radii } from \"../../tokens/radii\";\nimport { shadows } from \"../../tokens/shadows\";\n\nexport type SwitchProps = {\n checked: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n label?: string;\n description?: string;\n id?: string;\n};\n\nexport function Switch({ checked, onChange, disabled = false, label, description, id }: SwitchProps) {\n const [isFocused, setIsFocused] = useState(false);\n\n const generatedId = React.useId();\n const switchId = id || generatedId;\n\n const wrapperStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: spacing[3],\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n fontFamily: typography.fontFamily.base,\n };\n\n const trackStyle: React.CSSProperties = {\n position: \"relative\",\n width: \"36px\",\n height: \"20px\",\n backgroundColor: checked ? colors.black : colors.borderLight,\n borderRadius: radii.full,\n transition: \"background-color 200ms ease\",\n flexShrink: 0,\n boxShadow: isFocused ? shadows.focus : \"none\",\n outline: \"none\",\n };\n\n const thumbStyle: React.CSSProperties = {\n position: \"absolute\",\n top: \"2px\",\n left: checked ? \"calc(100% - 18px)\" : \"2px\",\n width: \"16px\",\n height: \"16px\",\n backgroundColor: colors.white,\n borderRadius: radii.full,\n transition: \"left 200ms ease, transform 200ms ease\",\n boxShadow: shadows.sm,\n };\n\n const textWrapperStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacing[1],\n marginTop: \"1px\", // Optical alignment with switch thumb\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: typography.size.md,\n fontWeight: typography.weight.medium,\n color: colors.textPrimary,\n margin: 0,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n };\n\n const descStyle: React.CSSProperties = {\n fontSize: typography.size.sm,\n color: colors.textSecondary,\n margin: 0,\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n if (!disabled) {\n onChange(!checked);\n }\n }\n };\n\n return (\n <label\n style={wrapperStyle}\n htmlFor={switchId}\n onMouseEnter={() => {\n if (!disabled && !checked) {\n // subtle hover could be added via ref, but sticking to inline\n }\n }}\n >\n <div\n id={switchId}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled}\n aria-labelledby={label || description ? `${switchId}-label` : undefined}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onClick={(e) => {\n // Prevent double firing when label is clicked\n e.preventDefault();\n if (!disabled) onChange(!checked);\n }}\n style={trackStyle}\n >\n <div style={thumbStyle} />\n </div>\n\n {(label || description) && (\n <div style={textWrapperStyle} id={`${switchId}-label`}>\n {label && <span style={labelStyle}>{label}</span>}\n {description && <span style={descStyle}>{description}</span>}\n </div>\n )}\n </label>\n );\n}\n","import React from \"react\";\nimport { colors } from \"../../tokens/colors\";\nimport { typography } from \"../../tokens/typography\";\nimport { spacing } from \"../../tokens/spacing\";\n\nexport type TrendProps = {\n value: number;\n label?: string;\n suffix?: string;\n inverse?: boolean;\n};\n\nexport const Trend = React.memo(function Trend({ value, label, suffix, inverse = false }: TrendProps) {\n const isPositive = value > 0;\n const isNeutral = value === 0;\n\n let color: string = colors.textTertiary;\n if (!isNeutral) {\n if (isPositive) color = inverse ? colors.error : colors.success;\n else color = inverse ? colors.success : colors.error;\n }\n\n const arrow = isPositive ? \"\\u2191\" : isNeutral ? \"\\u2014\" : \"\\u2193\";\n const displayValue = isNeutral ? \"\" : `${isPositive ? \"+\" : \"\"}${value}${suffix ?? \"\"}`;\n\n const style: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: spacing[1],\n color,\n fontSize: typography.size.sm,\n fontWeight: typography.weight.medium,\n fontFamily: typography.fontFamily.base,\n };\n\n return (\n <span style={style}>\n <span>{arrow} {displayValue}</span>\n {label && <span style={{ color: colors.textSecondary, fontWeight: typography.weight.normal, marginLeft: spacing[1] }}>{label}</span>}\n </span>\n );\n});\n","import { useState, useCallback } from \"react\";\n\n/**\n * Hook to manage modal open/close state.\n *\n * @example\n * const { isOpen, open, close, toggle } = useModal();\n * <Button onClick={open}>Open</Button>\n * <Modal open={isOpen} onClose={close}>...</Modal>\n */\nexport function useModal(initialState = false) {\n const [isOpen, setIsOpen] = useState(initialState);\n\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((prev) => !prev), []);\n\n return { isOpen, open, close, toggle } as const;\n}\n","import { useState, useCallback } from \"react\";\n\n/**\n * Typed localStorage wrapper with SSR safety.\n *\n * @example\n * const [tab, setTab] = useLocalStorage<string>(\"active-tab\", \"Overview\");\n */\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((prev: T) => T)) => void] {\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === \"undefined\") return initialValue;\n try {\n const item = window.localStorage.getItem(key);\n return item ? (JSON.parse(item) as T) : initialValue;\n } catch {\n return initialValue;\n }\n });\n\n const setValue = useCallback(\n (value: T | ((prev: T) => T)) => {\n setStoredValue((prev) => {\n const nextValue =\n value instanceof Function ? value(prev) : value;\n try {\n window.localStorage.setItem(key, JSON.stringify(nextValue));\n } catch {\n // Storage full or unavailable — fail silently\n }\n return nextValue;\n });\n },\n [key]\n );\n\n return [storedValue, setValue];\n}\n","/**\n * Utility for conditionally joining class names.\n * Filters out falsy values and joins the rest with a space.\n *\n * @example\n * cx(\"base\", isActive && \"active\", isDisabled && \"disabled\")\n * // => \"base active\" (if isActive=true, isDisabled=false)\n */\nexport function cx(\n ...classes: (string | false | null | undefined)[]\n): string {\n return classes.filter(Boolean).join(\" \");\n}\n"],"names":["colors","spacing","typography","radii","shadows","sizeStyles","variantStyles","Button","variant","size","loading","disabled","fullWidth","leftIcon","children","onClick","sizeS","variantS","isDisabled","style","jsxs","e","jsx","Spinner","spinnerStyleInjected","ensureSpinnerStyle","paddingMap","Card","padding","noBorder","shadow","toneStyles","Badge","React","tone","dot","t","dotStyle","StatGrid","stats","_cols","stripStyle","stat","i","StatCell","isLast","isHighlight","valueStyle","unitStyle","labelStyle","subStyle","SectionLabel","action","TabBar","tabs","active","onChange","containerStyle","fontSize","paddingY","paddingX","tab","isActive","tabStyle","badgeStyle","DataTable","columns","rows","emptyState","onRowClick","tableStyle","thStyle","col","tdStyle","trHoverStyle","Fragment","row","rowIdx","Input","label","hint","error","prefix","suffix","type","placeholder","value","hasError","wrapperStyle","inputWrapperStyle","inputStyle","hintStyle","affixStyle","wrapper","getScoreColor","pct","getScoreBg","ScoreBar","score","max","width","showLabel","barColor","bgColor","barHeight","trackStyle","fillStyle","FOCUSABLE_SELECTOR","Modal","open","onClose","maxWidth","title","visible","setVisible","useState","dialogRef","useRef","titleId","useEffect","id","handler","dialog","previouslyFocused","firstFocusable","handleTab","focusableElements","first","last","closeButton","ToggleGroup","options","opt","optStyle","createIcon","d","viewBox","filled","className","props","LockIcon","SearchIcon","CheckIcon","XIcon","MenuIcon","InfoIcon","AlertIcon","PlayIcon","StarIcon","SettingsIcon","UploadIcon","DownloadIcon","ArrowRightIcon","ArrowLeftIcon","ArrowUpIcon","ArrowDownIcon","ChevronRightIcon","ChevronLeftIcon","ChevronUpIcon","ChevronDownIcon","CheckRow","checked","sublabel","locked","badge","right","isInteractive","titleStyle","labelId","checkboxStyle","toneColors","pulseStyleInjected","ensurePulseStyle","StatusDot","pulse","px","PageHeader","sub","textStyle","ActionList","items","listStyle","item","dotColor","toneConfig","Toast","message","duration","timer","config","cardStyle","iconStyle","messageStyle","actionStyle","closeStyle","IconComp","CodeChip","typeColors","typeBg","DiffRow","handle","field","csvVal","storeVal","note","rowStyle","subTextStyle","IssueCard","severity","rowCount","fixable","onFix","expanded","setExpanded","s","headerRowStyle","leftGroupStyle","outlineBadgeStyle","IssueGroup","category","issues","defaultOpen","isOpen","setIsOpen","hasWarning","totalRows","acc","issue","headerStyle","titleGroupStyle","countBadgeStyle","idx","MiniStat","ModelTag","name","ProgressBar","percent","height","ProgressList","steps","step","isPending","isRunning","isDone","leftStyle","iconContainerStyle","Radio","description","isFocused","setIsFocused","isHovered","setIsHovered","generatedId","radioId","outerCircleStyle","innerDotStyle","textWrapperStyle","descStyle","StepBar","current","circleSize","backgroundLineStyle","progressLineStyle","index","stepNum","isCompleted","circleStyle","SummaryCard","highlight","color","Switch","switchId","thumbStyle","handleKeyDown","Trend","inverse","isPositive","isNeutral","arrow","displayValue","useModal","initialState","useCallback","close","toggle","prev","useLocalStorage","key","initialValue","storedValue","setStoredValue","setValue","nextValue","cx","classes"],"mappings":"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"}
|