@efiche/design 0.2.12 → 0.2.13

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/index.ts","../src/components/ThemeProvider.tsx","../src/components/Charts/LineChart.tsx","../src/components/Charts/chartUtils.ts","../src/components/Charts/BarChart.tsx","../src/components/Charts/AreaChart.tsx","../src/components/Charts/PieChart.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/CopyButton/CopyButton.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/Input/Input.tsx","../src/components/Label/Label.tsx","../src/components/PasswordInput/PasswordInput.tsx","../src/components/Progress/Progress.tsx","../src/components/RadioGroup/RadioGroup.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Slider/Slider.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Switch/Switch.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["// Theme\nexport { ThemeProvider, useTheme } from './ThemeProvider'\n\n// Charts (require recharts peer dependency)\nexport { default as LineChart } from './Charts/LineChart'\nexport { default as BarChart } from './Charts/BarChart'\nexport { default as AreaChart } from './Charts/AreaChart'\nexport { default as PieChart } from './Charts/PieChart'\n\n// Components\nexport { default as Accordion } from './Accordion/Accordion'\nexport { default as Alert } from './Alert/Alert'\nexport { default as Avatar } from './Avatar/Avatar'\nexport { default as Badge } from './Badge/Badge'\nexport { default as Breadcrumb } from './Breadcrumb/Breadcrumb'\nexport { default as Button } from './Button/Button'\nexport { Card, CardContent, CardDescription,\n CardFooter, CardHeader, CardTitle } from './Card/Card'\nexport { default as Checkbox } from './Checkbox/Checkbox'\nexport { default as CopyButton } from './CopyButton/CopyButton'\nexport { default as FileUpload } from './FileUpload/FileUpload'\nexport { default as Input } from './Input/Input'\nexport { default as Label } from './Label/Label'\nexport { default as PasswordInput } from './PasswordInput/PasswordInput'\nexport { default as Progress } from './Progress/Progress'\nexport { default as RadioGroup } from './RadioGroup/RadioGroup'\nexport { default as Select } from './Select/Select'\nexport { default as Skeleton } from './Skeleton/Skeleton'\nexport { default as Slider } from './Slider/Slider'\nexport { default as Spinner } from './Spinner/Spinner'\nexport { default as Switch } from './Switch/Switch'\nexport { Table, TableBody, TableCell,\n TableHead, TableHeader, TableRow } from './Table/Table'\nexport { default as Tabs } from './Tabs/Tabs'\nexport { default as Textarea } from './Textarea/Textarea'\nexport { default as Tooltip } from './Tooltip/Tooltip'\n","'use client'\nimport React, { createContext, useContext, useState } from 'react'\nimport '../styles/globals.css'\n\ntype Theme = 'light' | 'dark'\n\ninterface ThemeContextValue {\n theme: Theme\n toggle: () => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nexport const ThemeProvider = ({\n children,\n defaultTheme = 'light',\n}: {\n children: React.ReactNode\n defaultTheme?: Theme\n}) => {\n const [theme, setTheme] = useState<Theme>(defaultTheme)\n return (\n <ThemeContext.Provider value={{ theme, toggle: () => setTheme(t => t === 'light' ? 'dark' : 'light') }}>\n <div className={theme === 'dark' ? 'ds-theme-dark' : undefined}>\n {children}\n </div>\n </ThemeContext.Provider>\n )\n}\n\nexport const useTheme = () => {\n const ctx = useContext(ThemeContext)\n if (!ctx) throw new Error('useTheme must be used inside <ThemeProvider>')\n return ctx\n}\n","'use client'\n\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport {\n LineChart as RechartsLineChart,\n Line, XAxis, YAxis, CartesianGrid,\n Tooltip, Legend,\n} from 'recharts'\nimport { ChartTheme, CHART_COLORS, getChartTheme } from './chartUtils'\n\ninterface LineConfig {\n dataKey: string\n color?: string\n label?: string\n}\n\ninterface LineChartProps {\n data: Record<string, unknown>[]\n xKey: string\n lines: LineConfig[]\n height?: number\n legend?: boolean\n grid?: boolean\n theme?: ChartTheme\n className?: string\n style?: React.CSSProperties\n}\n\nconst LineChart: FC<LineChartProps> = ({\n data,\n xKey,\n lines,\n height = 250,\n legend = false,\n grid = true,\n theme = 'light',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme)\n\n useEffect(() => {\n if (!containerRef.current) return\n const measure = () => setWidth(containerRef.current!.offsetWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n return (\n <div ref={containerRef} className={className} style={{ minWidth: 250, width: '100%', ...style }}>\n {width > 0 && (\n <RechartsLineChart width={width} height={height} data={data}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridColor} />}\n <XAxis dataKey={xKey} stroke={axisStroke} tick={axisTick} />\n <YAxis stroke={axisStroke} tick={axisTick} />\n <Tooltip contentStyle={tooltipStyle} />\n {legend && <Legend />}\n {lines.map((line, i) => {\n const color = line.color ?? CHART_COLORS[i % CHART_COLORS.length]\n return (\n <Line\n key={line.dataKey}\n type=\"monotone\"\n dataKey={line.dataKey}\n name={line.label ?? line.dataKey}\n stroke={color}\n strokeWidth={2}\n dot={{ fill: color, r: 4 }}\n activeDot={{ r: 6 }}\n isAnimationActive={false}\n />\n )\n })}\n </RechartsLineChart>\n )}\n </div>\n )\n}\n\nexport default LineChart\n","import React from 'react'\n\nexport type ChartTheme = 'light' | 'dark'\n\nexport const CHART_COLORS = [\n '#3b82f6', // blue\n '#22c55e', // green\n '#f59e0b', // amber\n '#ef4444', // red\n '#8b5cf6', // violet\n '#06b6d4', // cyan\n '#f97316', // orange\n '#ec4899', // pink\n]\n\nexport function getChartTheme(theme: ChartTheme) {\n const isDark = theme === 'dark'\n return {\n gridColor: isDark ? '#334155' : '#e2e8f0',\n axisStroke: isDark ? '#94a3b8' : '#64748b',\n axisTick: { fill: isDark ? '#94a3b8' : '#64748b', fontSize: 12 },\n primaryColor: isDark ? '#60a5fa' : '#3b82f6',\n tooltipStyle: {\n backgroundColor: isDark ? '#1e293b' : '#ffffff',\n border: `1px solid ${isDark ? '#334155' : '#e2e8f0'}`,\n borderRadius: '6px',\n color: isDark ? '#f1f5f9' : '#0f172a',\n fontSize: '0.8125rem',\n } as React.CSSProperties,\n }\n}\n","'use client'\n\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport {\n BarChart as RechartsBarChart,\n Bar, XAxis, YAxis, CartesianGrid,\n Tooltip, Legend,\n} from 'recharts'\nimport { ChartTheme, CHART_COLORS, getChartTheme } from './chartUtils'\n\ninterface BarConfig {\n dataKey: string\n color?: string\n stackId?: string\n label?: string\n}\n\ninterface BarChartProps {\n data: Record<string, unknown>[]\n xKey: string\n bars: BarConfig[]\n height?: number\n legend?: boolean\n grid?: boolean\n theme?: ChartTheme\n className?: string\n style?: React.CSSProperties\n}\n\nconst BarChart: FC<BarChartProps> = ({\n data,\n xKey,\n bars,\n height = 250,\n legend = false,\n grid = true,\n theme = 'light',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme)\n\n useEffect(() => {\n if (!containerRef.current) return\n const measure = () => setWidth(containerRef.current!.offsetWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n return (\n <div ref={containerRef} className={className} style={{ minWidth: 250, width: '100%', ...style }}>\n {width > 0 && (\n <RechartsBarChart width={width} height={height} data={data}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridColor} />}\n <XAxis dataKey={xKey} stroke={axisStroke} tick={axisTick} />\n <YAxis stroke={axisStroke} tick={axisTick} />\n <Tooltip contentStyle={tooltipStyle} />\n {legend && <Legend />}\n {bars.map((bar, i) => {\n const color = bar.color ?? CHART_COLORS[i % CHART_COLORS.length]\n const isLast = i === bars.length - 1\n return (\n <Bar\n key={bar.dataKey}\n dataKey={bar.dataKey}\n name={bar.label ?? bar.dataKey}\n fill={color}\n stackId={bar.stackId}\n radius={bar.stackId && !isLast ? [0, 0, 0, 0] : [4, 4, 0, 0]}\n isAnimationActive={false}\n />\n )\n })}\n </RechartsBarChart>\n )}\n </div>\n )\n}\n\nexport default BarChart\n","'use client'\n\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport {\n AreaChart as RechartsAreaChart,\n Area, XAxis, YAxis, CartesianGrid,\n Tooltip, Legend,\n} from 'recharts'\nimport { ChartTheme, CHART_COLORS, getChartTheme } from './chartUtils'\n\ninterface AreaConfig {\n dataKey: string\n color?: string\n stackId?: string\n fillOpacity?: number\n label?: string\n}\n\ninterface AreaChartProps {\n data: Record<string, unknown>[]\n xKey: string\n areas: AreaConfig[]\n height?: number\n legend?: boolean\n grid?: boolean\n theme?: ChartTheme\n className?: string\n style?: React.CSSProperties\n}\n\nconst AreaChart: FC<AreaChartProps> = ({\n data,\n xKey,\n areas,\n height = 250,\n legend = false,\n grid = true,\n theme = 'light',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme)\n\n useEffect(() => {\n if (!containerRef.current) return\n const measure = () => setWidth(containerRef.current!.offsetWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n return (\n <div ref={containerRef} className={className} style={{ minWidth: 250, width: '100%', ...style }}>\n {width > 0 && (\n <RechartsAreaChart width={width} height={height} data={data}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridColor} />}\n <XAxis dataKey={xKey} stroke={axisStroke} tick={axisTick} />\n <YAxis stroke={axisStroke} tick={axisTick} />\n <Tooltip contentStyle={tooltipStyle} />\n {legend && <Legend />}\n {areas.map((area, i) => {\n const color = area.color ?? CHART_COLORS[i % CHART_COLORS.length]\n const opacity = area.fillOpacity ?? (area.stackId ? 0.4 : 0.15)\n return (\n <Area\n key={area.dataKey}\n type=\"monotone\"\n dataKey={area.dataKey}\n name={area.label ?? area.dataKey}\n stroke={color}\n fill={color}\n fillOpacity={opacity}\n strokeWidth={2}\n stackId={area.stackId}\n isAnimationActive={false}\n />\n )\n })}\n </RechartsAreaChart>\n )}\n </div>\n )\n}\n\nexport default AreaChart\n","'use client'\n\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport {\n PieChart as RechartsPieChart,\n Pie, Tooltip, Legend,\n} from 'recharts'\nimport { ChartTheme, CHART_COLORS, getChartTheme } from './chartUtils'\n\ninterface PieDataItem {\n name: string\n value: number\n fill?: string\n}\n\ninterface PieChartProps {\n data: PieDataItem[]\n height?: number\n donut?: boolean\n legend?: boolean\n label?: boolean\n theme?: ChartTheme\n className?: string\n style?: React.CSSProperties\n}\n\nconst PieChart: FC<PieChartProps> = ({\n data,\n height = 250,\n donut = false,\n legend = false,\n label = false,\n theme = 'light',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n const { tooltipStyle } = getChartTheme(theme)\n\n useEffect(() => {\n if (!containerRef.current) return\n const measure = () => setWidth(containerRef.current!.offsetWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n const dataWithColors = data.map((item, i) => ({\n ...item,\n fill: item.fill ?? CHART_COLORS[i % CHART_COLORS.length],\n }))\n\n const outerRadius = 90\n const innerRadius = donut ? 55 : 0\n\n return (\n <div ref={containerRef} className={className} style={{ minWidth: 250, width: '100%', ...style }}>\n {width > 0 && (\n <RechartsPieChart width={width} height={height}>\n <Pie\n data={dataWithColors}\n cx=\"50%\"\n cy=\"50%\"\n outerRadius={outerRadius}\n innerRadius={innerRadius}\n dataKey=\"value\"\n label={label ? ({ name, percent }) => `${name} ${((percent ?? 0) * 100).toFixed(0)}%` : undefined}\n labelLine={label}\n isAnimationActive={false}\n />\n <Tooltip contentStyle={tooltipStyle} />\n {legend && <Legend />}\n </RechartsPieChart>\n )}\n </div>\n )\n}\n\nexport default PieChart\n","'use client'\n\nimport React, { FC, useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\n\nexport interface AccordionItem {\n value: string\n trigger: string\n content: string\n}\n\ninterface AccordionProps {\n items: AccordionItem[]\n defaultValue?: string | string[]\n multiple?: boolean\n}\n\nconst Accordion: FC<AccordionProps> = ({ items, defaultValue, multiple = false }) => {\n const [open, setOpen] = useState<Set<string>>(() => {\n if (!defaultValue) return new Set()\n if (Array.isArray(defaultValue)) return new Set(defaultValue)\n return new Set([defaultValue])\n })\n const [hovered, setHovered] = useState<string | null>(null)\n\n const toggle = (value: string) => {\n setOpen(prev => {\n const next = new Set(prev)\n if (next.has(value)) {\n next.delete(value)\n } else {\n if (!multiple) next.clear()\n next.add(value)\n }\n return next\n })\n }\n\n return (\n <div style={{\n border: '1px solid var(--ds-border, #e2e8f0)',\n borderRadius: '0.5rem',\n overflow: 'hidden',\n }}>\n {items.map((item, index) => {\n const isOpen = open.has(item.value)\n const isHovered = hovered === item.value\n const isLast = index === items.length - 1\n return (\n <div\n key={item.value}\n style={{\n borderBottom: isLast ? 'none' : '1px solid var(--ds-border, #e2e8f0)',\n }}\n >\n <button\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '1rem',\n fontSize: '0.875rem',\n fontWeight: 500,\n background: isHovered ? 'var(--ds-muted, #f1f5f9)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n textAlign: 'left',\n color: 'var(--ds-text-primary, #0f172a)',\n transition: 'background-color 0.15s',\n }}\n onClick={() => toggle(item.value)}\n onMouseEnter={() => setHovered(item.value)}\n onMouseLeave={() => setHovered(null)}\n aria-expanded={isOpen}\n >\n <span>{item.trigger}</span>\n <ChevronDown\n size={16}\n style={{\n flexShrink: 0,\n color: 'var(--ds-text-secondary, #64748b)',\n transition: 'transform 0.2s ease',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </button>\n <div style={{\n maxHeight: isOpen ? '300px' : '0',\n overflow: 'hidden',\n transition: 'max-height 0.25s ease',\n }}>\n <div style={{\n padding: '0 1rem 1rem',\n fontSize: '0.875rem',\n color: 'var(--ds-text-secondary, #64748b)',\n }}>\n {item.content}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport default Accordion\n\n/*\n * Accordion\n *\n * Renders a list of collapsible sections; by default only one section can be open at a time.\n *\n * Props:\n * items (AccordionItem[], required) — array of sections, each with:\n * value (string) — unique identifier\n * trigger (string) — heading text shown on the clickable row\n * content (string) — body text revealed when the section is open\n * defaultValue (string | string[], optional) — value(s) of sections that start open\n * multiple (boolean, optional) — when true, more than one section can be open simultaneously; defaults to false\n *\n * Usage:\n * <Accordion\n * items={[\n * { value: 'q1', trigger: 'What is eFiche?', content: 'eFiche is a medical records platform.' },\n * { value: 'q2', trigger: 'How do I log in?', content: 'Use your credentials at the login page.' },\n * ]}\n * />\n *\n * // Multiple sections open, first one pre-opened:\n * <Accordion items={faqItems} multiple defaultValue=\"q1\" />\n */\n","import React, { FC, ReactNode } from 'react'\nimport { Info, CheckCircle2, AlertTriangle, AlertCircle } from 'lucide-react'\n\ntype AlertVariant = 'info' | 'success' | 'warning' | 'danger'\n\ninterface AlertProps {\n variant?: AlertVariant\n title: string\n description: string\n}\n\nconst variantMap: Record<AlertVariant, { bg: string; border: string; icon: string; title: string; desc: string }> = {\n info: { bg: 'var(--ds-info-bg, #eff6ff)', border: 'var(--ds-info, #3b82f6)', icon: 'var(--ds-info, #3b82f6)', title: 'var(--ds-info-title, #1e3a8a)', desc: 'var(--ds-info-desc, #1e40af)' },\n success: { bg: 'var(--ds-success-bg, #f0fdf4)', border: 'var(--ds-success, #22c55e)', icon: 'var(--ds-success, #22c55e)', title: 'var(--ds-success-title, #14532d)', desc: 'var(--ds-success-desc, #166534)' },\n warning: { bg: 'var(--ds-warning-bg, #fffbeb)', border: 'var(--ds-warning, #f59e0b)', icon: 'var(--ds-warning, #f59e0b)', title: 'var(--ds-warning-title, #78350f)', desc: 'var(--ds-warning-desc, #92400e)' },\n danger: { bg: 'var(--ds-danger-bg, #fef2f2)', border: 'var(--ds-danger, #ef4444)', icon: 'var(--ds-danger, #ef4444)', title: 'var(--ds-danger-title, #7f1d1d)', desc: 'var(--ds-danger-desc, #991b1b)' },\n}\n\nconst icons: Record<AlertVariant, ReactNode> = {\n info: <Info size={16} />,\n success: <CheckCircle2 size={16} />,\n warning: <AlertTriangle size={16} />,\n danger: <AlertCircle size={16} />,\n}\n\nconst Alert: FC<AlertProps> = ({ variant = 'info', title, description }) => {\n const v = variantMap[variant]\n return (\n <div role=\"alert\" style={{\n display: 'flex',\n gap: '0.75rem',\n padding: '1rem',\n borderRadius: '0.5rem',\n borderLeft: `4px solid ${v.border}`,\n backgroundColor: v.bg,\n }}>\n <span style={{ flexShrink: 0, marginTop: '0.125rem', color: v.icon }}>{icons[variant]}</span>\n <div style={{ flex: 1 }}>\n <p style={{ fontWeight: 600, fontSize: '0.875rem', marginBottom: '0.25rem', marginTop: 0, color: v.title }}>{title}</p>\n <p style={{ fontSize: '0.875rem', margin: 0, color: v.desc }}>{description}</p>\n </div>\n </div>\n )\n}\n\nexport default Alert\n\n/*\n * Alert\n *\n * Displays an inline alert banner with an icon, a bold title, and a description line.\n *\n * Props:\n * title (string, required) — short heading for the alert\n * description (string, required) — supporting detail shown below the title\n * variant (\"info\" | \"success\" | \"warning\" | \"danger\", optional) — color and icon style; defaults to \"info\"\n *\n * Usage:\n * <Alert title=\"Saved\" description=\"Your changes have been saved.\" variant=\"success\" />\n */\n","import React, { FC } from 'react'\n\ntype AvatarSize = 'sm' | 'md' | 'lg'\n\ninterface AvatarProps {\n fallback: string\n size?: AvatarSize\n style?: React.CSSProperties\n className?: string\n}\n\nconst sizeMap: Record<AvatarSize, React.CSSProperties> = {\n sm: { width: '2rem', height: '2rem', fontSize: '0.625rem' },\n md: { width: '2.5rem', height: '2.5rem', fontSize: '0.875rem' },\n lg: { width: '4rem', height: '4rem', fontSize: '1.25rem' },\n}\n\nconst Avatar: FC<AvatarProps> = ({ fallback, size = 'md', style, className }) => (\n <div\n className={className}\n aria-label={fallback}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '9999px',\n backgroundColor: 'var(--ds-accent, #f1f5f9)',\n color: 'var(--ds-text-primary, #0f172a)',\n fontWeight: 600,\n flexShrink: 0,\n userSelect: 'none',\n ...sizeMap[size],\n ...style,\n }}\n >\n {fallback}\n </div>\n)\n\nexport default Avatar\n\n/*\n * Avatar\n *\n * Renders a circular container showing initials or a short text fallback.\n *\n * Props:\n * fallback (string, required) — text displayed inside the avatar, typically initials (e.g. \"AB\")\n * size (\"sm\" | \"md\" | \"lg\", optional) — controls the diameter; defaults to \"md\"\n * style (React.CSSProperties, optional) — inline styles for custom background color, etc.\n * className (string, optional) — extra CSS class names\n *\n * Usage:\n * <Avatar fallback=\"JD\" />\n * <Avatar fallback=\"MB\" size=\"lg\" style={{ background: '#6366f1' }} />\n */\n","import React, { FC, ReactNode } from 'react'\n\ntype BadgeVariant = 'default' | 'secondary' | 'outline' | 'danger' | 'success' | 'warning' | 'info'\ntype BadgeSize = 'sm' | 'md' | 'lg'\n\ninterface BadgeProps {\n variant?: BadgeVariant\n size?: BadgeSize\n children: ReactNode\n style?: React.CSSProperties\n}\n\nconst variantMap: Record<BadgeVariant, React.CSSProperties> = {\n default: { backgroundColor: 'var(--ds-primary, #3b82f6)', color: '#fff' },\n secondary: { backgroundColor: 'var(--ds-muted, #f1f5f9)', color: 'var(--ds-text-secondary, #64748b)' },\n outline: { backgroundColor: 'transparent', border: '1px solid var(--ds-border, #e2e8f0)', color: 'var(--ds-text-primary, #0f172a)' },\n danger: { backgroundColor: 'var(--ds-danger, #ef4444)', color: '#fff' },\n success: { backgroundColor: 'var(--ds-success, #22c55e)', color: '#fff' },\n warning: { backgroundColor: 'var(--ds-warning, #f59e0b)', color: '#fff' },\n info: { backgroundColor: 'var(--ds-info, #3b82f6)', color: '#fff' },\n}\n\nconst sizeMap: Record<BadgeSize, React.CSSProperties> = {\n sm: { padding: '0.125rem 0.5rem', fontSize: '0.625rem' },\n md: { padding: '0.25rem 0.625rem', fontSize: '0.75rem' },\n lg: { padding: '0.375rem 0.875rem', fontSize: '0.875rem' },\n}\n\nconst Badge: FC<BadgeProps> = ({ variant = 'default', size = 'md', children, style }) => (\n <span style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.25rem',\n borderRadius: '9999px',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n ...variantMap[variant],\n ...sizeMap[size],\n ...style,\n }}>\n {children}\n </span>\n)\n\nexport default Badge\n\n/*\n * Badge\n *\n * Renders a small inline label used to highlight status, categories, or counts.\n *\n * Props:\n * variant (\"default\" | \"secondary\" | \"outline\" | \"danger\" | \"success\" | \"warning\" | \"info\", optional) — defaults to \"default\"\n * size (\"sm\" | \"md\" | \"lg\", optional) — defaults to \"md\"\n * children (ReactNode, required) — content shown inside the badge\n * style (React.CSSProperties, optional) — inline styles applied to the badge element\n *\n * Usage:\n * <Badge>New</Badge>\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"danger\" size=\"sm\">Overdue</Badge>\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\nimport { ChevronRight } from 'lucide-react'\n\nexport interface BreadcrumbItem {\n label: string\n href?: string\n}\n\ninterface BreadcrumbProps {\n items: BreadcrumbItem[]\n}\n\nconst Breadcrumb: FC<BreadcrumbProps> = ({ items }) => {\n const [hovered, setHovered] = useState<string | null>(null)\n\n return (\n <nav aria-label=\"Breadcrumb\">\n <ol style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n listStyle: 'none',\n padding: 0,\n margin: 0,\n fontSize: '0.875rem',\n }}>\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n const isHovered = hovered === item.label\n return (\n <li key={item.label} style={{ display: 'flex', alignItems: 'center' }}>\n {i > 0 && (\n <ChevronRight\n size={14}\n aria-hidden\n style={{ color: 'var(--ds-text-secondary, #64748b)', margin: '0 0.25rem', flexShrink: 0 }}\n />\n )}\n {isLast || !item.href ? (\n <span style={{\n color: isLast ? 'var(--ds-text-primary, #0f172a)' : 'var(--ds-text-secondary, #64748b)',\n fontWeight: isLast ? 500 : undefined,\n cursor: isLast ? 'default' : undefined,\n }}>\n {item.label}\n </span>\n ) : (\n <a\n href={item.href}\n onMouseEnter={() => setHovered(item.label)}\n onMouseLeave={() => setHovered(null)}\n style={{\n color: 'var(--ds-text-secondary, #64748b)',\n textDecoration: isHovered ? 'underline' : 'none',\n transition: 'color 0.15s',\n }}\n >\n {item.label}\n </a>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n\nexport default Breadcrumb\n\n/*\n * Breadcrumb\n *\n * Renders a navigation breadcrumb trail with chevron separators.\n *\n * Props:\n * items (BreadcrumbItem[], required) — ordered array of crumbs, each with:\n * label (string) — display text\n * href (string, optional) — link target; if omitted renders as plain text\n *\n * Usage:\n * <Breadcrumb items={[{ label: 'Home', href: '/' }, { label: 'Patients', href: '/patients' }, { label: 'Visit summary' }]} />\n */\n","'use client'\n\nimport { LoaderCircle } from \"lucide-react\";\nimport React, { FC, ButtonHTMLAttributes, ReactNode, useState } from \"react\";\n\ntype ButtonVariant = \"solid\" | \"outline\" | \"ghost\" | \"danger\" | \"warning\" | \"info\" | \"success\";\ntype ButtonSize = \"sm\" | \"md\" | \"lg\";\n\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n text?: string;\n loading?: boolean;\n icon?: ReactNode;\n iconPosition?: \"left\" | \"right\";\n // variant shorthand booleans\n outline?: boolean;\n ghost?: boolean;\n danger?: boolean;\n warning?: boolean;\n info?: boolean;\n success?: boolean;\n variant?: ButtonVariant;\n // size shorthand booleans\n small?: boolean;\n large?: boolean;\n size?: ButtonSize;\n}\n\nconst variantStyles: Record<ButtonVariant, React.CSSProperties> = {\n solid: { backgroundColor: 'var(--ds-primary, #3b82f6)', color: '#fff', borderColor: 'transparent' },\n outline: { backgroundColor: 'transparent', color: 'var(--ds-primary, #3b82f6)', borderColor: 'var(--ds-primary, #3b82f6)' },\n ghost: { backgroundColor: 'var(--ds-muted, #f1f5f9)', color: 'var(--ds-text-primary, #0f172a)', borderColor: 'transparent' },\n danger: { backgroundColor: 'var(--ds-danger, #ef4444)', color: '#fff', borderColor: 'transparent' },\n warning: { backgroundColor: 'var(--ds-warning, #f59e0b)', color: '#fff', borderColor: 'transparent' },\n info: { backgroundColor: 'var(--ds-info, #3b82f6)', color: '#fff', borderColor: 'transparent' },\n success: { backgroundColor: 'var(--ds-success, #22c55e)', color: '#fff', borderColor: 'transparent' },\n}\n\nconst variantHoverStyles: Record<ButtonVariant, React.CSSProperties> = {\n solid: { opacity: 0.88 },\n outline: { backgroundColor: 'var(--ds-muted, #f1f5f9)' },\n ghost: { backgroundColor: 'var(--ds-card, #ffffff)' },\n danger: { opacity: 0.88 },\n warning: { opacity: 0.88 },\n info: { opacity: 0.88 },\n success: { opacity: 0.88 },\n}\n\nconst sizeStyles: Record<ButtonSize, React.CSSProperties> = {\n sm: { padding: '0.25rem 0.625rem', fontSize: '0.8rem' },\n md: { padding: '0.5rem 1rem', fontSize: '0.875rem' },\n lg: { padding: '0.75rem 1.5rem', fontSize: '1rem' },\n}\n\nconst Button: FC<ButtonProps> = ({\n text,\n children,\n loading = false,\n disabled = false,\n icon,\n iconPosition = \"left\",\n outline = false,\n ghost = false,\n danger = false,\n warning = false,\n info = false,\n success = false,\n variant,\n small = false,\n large = false,\n size,\n style: styleProp,\n ...props\n}) => {\n const [hovered, setHovered] = useState(false)\n\n const resolvedVariant: ButtonVariant =\n variant ??\n (danger ? \"danger\" :\n warning ? \"warning\" :\n info ? \"info\" :\n success ? \"success\" :\n ghost ? \"ghost\" :\n outline ? \"outline\" :\n \"solid\")\n\n const resolvedSize: ButtonSize = size ?? (small ? \"sm\" : large ? \"lg\" : \"md\")\n const isDisabled = disabled || loading\n const content = children ?? text\n const showIcon = icon && !loading\n\n const computedStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.5rem',\n border: '1px solid transparent',\n borderRadius: '0.375rem',\n fontWeight: 500,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n transition: 'opacity 0.15s, background-color 0.15s',\n opacity: isDisabled ? 0.5 : 1,\n pointerEvents: loading ? 'none' : undefined,\n ...variantStyles[resolvedVariant],\n ...sizeStyles[resolvedSize],\n ...(hovered && !isDisabled ? variantHoverStyles[resolvedVariant] : {}),\n ...styleProp,\n }\n\n return (\n <>\n {/* React 19 hoists and deduplicates this style tag automatically */}\n <style href=\"ds-spin\" precedence=\"low\">{`@keyframes ds-spin { to { transform: rotate(360deg); } }`}</style>\n <button\n disabled={isDisabled}\n style={computedStyle}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n {...props}\n >\n {loading\n ? <LoaderCircle\n aria-hidden\n style={{ width: '1em', height: '1em', animation: 'ds-spin 0.75s linear infinite' }}\n />\n : null}\n {showIcon && iconPosition === \"left\" ? icon : null}\n {content}\n {showIcon && iconPosition === \"right\" ? icon : null}\n </button>\n </>\n )\n}\n\nexport default Button\n\n/*\n * Button\n *\n * Renders a styled button with support for variants, sizes, icons, and a loading state.\n *\n * Props:\n * text (string, optional) — button label; can use children instead\n * loading (boolean, optional) — shows a spinner and disables the button while true\n * disabled (boolean, optional) — disables the button\n * icon (ReactNode, optional) — icon to display alongside the label\n * iconPosition (\"left\" | \"right\", optional) — which side the icon appears on; defaults to \"left\"\n * variant (\"solid\" | \"outline\" | \"ghost\" | \"danger\" | \"warning\" | \"info\" | \"success\", optional) — visual style; defaults to \"solid\"\n * outline (boolean, optional) — shorthand for variant=\"outline\"\n * ghost (boolean, optional) — shorthand for variant=\"ghost\"\n * danger (boolean, optional) — shorthand for variant=\"danger\"\n * warning (boolean, optional) — shorthand for variant=\"warning\"\n * info (boolean, optional) — shorthand for variant=\"info\"\n * success (boolean, optional) — shorthand for variant=\"success\"\n * size (\"sm\" | \"md\" | \"lg\", optional) — button size; defaults to \"md\"\n * small (boolean, optional) — shorthand for size=\"sm\"\n * large (boolean, optional) — shorthand for size=\"lg\"\n * ...rest — any valid HTML button attribute (onClick, type, etc.)\n *\n * Usage:\n * <Button text=\"Save\" onClick={handleSave} />\n *\n * // Danger variant with loading state:\n * <Button danger loading={isDeleting} text=\"Delete\" />\n *\n * // Icon on the right, large size:\n * <Button large icon={<ArrowRight />} iconPosition=\"right\">Continue</Button>\n */\n","import React, { FC, HTMLAttributes } from 'react'\n\nexport const Card: FC<HTMLAttributes<HTMLDivElement>> = ({ style, ...props }) => (\n <div style={{\n border: '1px solid var(--ds-border, #e2e8f0)',\n borderRadius: '0.5rem',\n backgroundColor: 'var(--ds-card, #ffffff)',\n ...style,\n }} {...props} />\n)\n\nexport const CardHeader: FC<HTMLAttributes<HTMLDivElement>> = ({ style, ...props }) => (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.375rem',\n padding: '1.5rem 1.5rem 0',\n ...style,\n }} {...props} />\n)\n\nexport const CardTitle: FC<HTMLAttributes<HTMLHeadingElement>> = ({ style, ...props }) => (\n <h3 style={{\n fontSize: '1rem',\n fontWeight: 600,\n color: 'var(--ds-text-primary, #0f172a)',\n margin: 0,\n lineHeight: 1.4,\n ...style,\n }} {...props} />\n)\n\nexport const CardDescription: FC<HTMLAttributes<HTMLParagraphElement>> = ({ style, ...props }) => (\n <p style={{\n fontSize: '0.875rem',\n color: 'var(--ds-text-secondary, #64748b)',\n margin: 0,\n ...style,\n }} {...props} />\n)\n\nexport const CardContent: FC<HTMLAttributes<HTMLDivElement>> = ({ style, ...props }) => (\n <div style={{ padding: '1.5rem', ...style }} {...props} />\n)\n\nexport const CardFooter: FC<HTMLAttributes<HTMLDivElement>> = ({ style, ...props }) => (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n padding: '0 1.5rem 1.5rem',\n ...style,\n }} {...props} />\n)\n\n/*\n * Card / CardHeader / CardTitle / CardDescription / CardContent / CardFooter\n *\n * Composable container components for card-style layouts.\n *\n * Usage:\n * <Card>\n * <CardHeader>\n * <CardTitle>Patient Summary</CardTitle>\n * <CardDescription>Last visit on 12 May 2026</CardDescription>\n * </CardHeader>\n * <CardContent><p>Diagnosis: Hypertension</p></CardContent>\n * <CardFooter><Button text=\"View full record\" /></CardFooter>\n * </Card>\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\n\ninterface CheckboxProps {\n label?: string\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n id?: string\n onChange?: (checked: boolean) => void\n}\n\nconst Checkbox: FC<CheckboxProps> = ({\n label,\n checked,\n defaultChecked = false,\n disabled,\n id,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultChecked)\n const isChecked = checked !== undefined ? checked : internal\n\n const handleChange = () => {\n if (disabled) return\n const next = !isChecked\n setInternal(next)\n onChange?.(next)\n }\n\n return (\n <label htmlFor={id} style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.5rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n opacity: disabled ? 0.5 : 1,\n }}>\n <input\n type=\"checkbox\"\n id={id}\n checked={isChecked}\n disabled={disabled}\n onChange={handleChange}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0 }}\n />\n <span style={{\n width: '1.125rem',\n height: '1.125rem',\n border: `2px solid ${isChecked ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.25rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: 'background-color 0.15s, border-color 0.15s',\n backgroundColor: isChecked ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-card, #fff)',\n }}>\n {isChecked && (\n <svg viewBox=\"0 0 12 10\" fill=\"none\" style={{ width: '0.625rem', height: '0.625rem' }}>\n <path d=\"M1 5l3.5 3.5L11 1\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </span>\n {label && (\n <span style={{ fontSize: '0.875rem', color: 'var(--ds-text-primary, #0f172a)' }}>{label}</span>\n )}\n </label>\n )\n}\n\nexport default Checkbox\n\n/*\n * Checkbox\n *\n * Renders a styled checkbox — controlled or uncontrolled — with an optional text label.\n *\n * Props:\n * label (string, optional) — text displayed next to the checkbox\n * checked (boolean, optional) — controlled checked state\n * defaultChecked (boolean, optional) — initial state for uncontrolled use; defaults to false\n * disabled (boolean, optional) — prevents interaction\n * id (string, optional) — HTML id for the underlying input\n * onChange ((checked: boolean) => void, optional) — called with the new boolean on each change\n *\n * Usage:\n * <Checkbox label=\"Accept terms\" onChange={val => setAccepted(val)} />\n * <Checkbox checked={isChecked} onChange={setIsChecked} label=\"Remember me\" />\n */\n","'use client'\n\nimport { Check, Copy } from 'lucide-react'\nimport React, { FC, useState } from 'react'\n\ninterface CopyButtonProps {\n text: string\n}\n\nconst CopyButton: FC<CopyButtonProps> = ({ text }) => {\n const [copied, setCopied] = useState(false)\n const [hovered, setHovered] = useState(false)\n\n const handleCopy = () => {\n navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <button\n onClick={handleCopy}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={copied ? 'Copied' : `Copy ${text}`}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0.25rem',\n border: 'none',\n borderRadius: '0.25rem',\n backgroundColor: hovered ? 'var(--ds-accent, #f1f5f9)' : 'transparent',\n color: hovered ? 'var(--ds-text-primary, #0f172a)' : 'var(--ds-text-secondary, #64748b)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n }}\n >\n {copied\n ? <Check style={{ width: '1rem', height: '1rem' }} />\n : <Copy style={{ width: '1rem', height: '1rem' }} />\n }\n </button>\n )\n}\n\nexport default CopyButton\n\n/*\n * CopyButton\n *\n * Renders an icon button that copies a string to the clipboard; shows a checkmark for 2 seconds after copying.\n *\n * Props:\n * text (string, required) — the string that gets copied to the clipboard when clicked\n *\n * Usage:\n * <CopyButton text=\"npm install @efiche/design\" />\n */\n","'use client'\n\nimport { Upload } from 'lucide-react'\nimport React, { FC, useRef, useState } from 'react'\n\ninterface FileUploadProps {\n accept?: string\n multiple?: boolean\n disabled?: boolean\n onFileSelect?: (files: FileList) => void\n}\n\nconst FileUpload: FC<FileUploadProps> = ({ accept, multiple, disabled, onFileSelect }) => {\n const [isDragging, setIsDragging] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const [fileNames, setFileNames] = useState<string[]>([])\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleFiles = (list: FileList) => {\n setFileNames(Array.from(list).map(f => f.name))\n onFileSelect?.(list)\n }\n\n const isActive = isDragging || isHovered\n\n return (\n <div\n onClick={() => !disabled && inputRef.current?.click()}\n onMouseEnter={() => !disabled && setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onDragOver={(e) => { e.preventDefault(); setIsDragging(true) }}\n onDragLeave={() => setIsDragging(false)}\n onDrop={(e) => {\n e.preventDefault()\n setIsDragging(false)\n if (!disabled && e.dataTransfer.files.length) handleFiles(e.dataTransfer.files)\n }}\n style={{\n border: `2px dashed ${isActive ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.5rem',\n padding: '2rem',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '0.5rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n backgroundColor: isActive ? 'var(--ds-primary-50, #eff6ff)' : 'var(--ds-muted, #f1f5f9)',\n transition: 'border-color 0.15s, background-color 0.15s',\n textAlign: 'center',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n style={{ display: 'none' }}\n onChange={(e) => e.target.files && handleFiles(e.target.files)}\n />\n <Upload size={32} style={{ color: 'var(--ds-text-secondary, #64748b)' }} />\n {fileNames.length > 0\n ? <p style={{ fontSize: '0.875rem', color: 'var(--ds-primary, #3b82f6)', fontWeight: 500, margin: 0 }}>\n {fileNames.join(', ')}\n </p>\n : <p style={{ fontSize: '0.875rem', color: 'var(--ds-text-secondary, #64748b)', margin: 0 }}>\n <strong>Click to upload</strong> or drag and drop\n </p>\n }\n </div>\n )\n}\n\nexport default FileUpload\n\n/*\n * FileUpload\n *\n * Renders a click-to-browse and drag-and-drop file upload zone.\n *\n * Props:\n * accept (string, optional) — file type filter (e.g. \"image/*\", \".pdf\")\n * multiple (boolean, optional) — allows selecting more than one file\n * disabled (boolean, optional) — prevents clicking and dropping\n * onFileSelect ((files: FileList) => void, optional) — called whenever files are chosen\n *\n * Usage:\n * <FileUpload onFileSelect={files => uploadFiles(files)} />\n * <FileUpload accept=\"image/*\" multiple onFileSelect={handleImages} />\n */\n","import React, { FC, InputHTMLAttributes, ReactNode } from 'react'\n\ninterface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n error?: boolean\n success?: boolean\n leftIcon?: ReactNode\n rightIcon?: ReactNode\n}\n\nconst inputCSS = `\n[data-ds-input]::placeholder { color: var(--ds-text-secondary, #64748b); }\n[data-ds-input]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }\n[data-ds-input]:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--ds-muted, #f1f5f9); }\n[data-ds-input][data-error=\"true\"]:focus { border-color: var(--ds-danger, #ef4444); box-shadow: 0 0 0 3px rgb(239 68 68 / 0.15); }\n[data-ds-input][data-success=\"true\"]:focus { border-color: var(--ds-success, #22c55e); box-shadow: 0 0 0 3px rgb(34 197 94 / 0.15); }\n`\n\nconst Input: FC<InputProps> = ({ error, success, leftIcon, rightIcon, style, ...props }) => (\n <>\n <style href=\"ds-input\" precedence=\"low\">{inputCSS}</style>\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center', width: '100%' }}>\n {leftIcon && (\n <span style={{\n position: 'absolute',\n left: '0.625rem',\n display: 'flex',\n alignItems: 'center',\n color: 'var(--ds-text-secondary, #64748b)',\n pointerEvents: 'none',\n }}>\n {leftIcon}\n </span>\n )}\n <input\n data-ds-input=\"\"\n data-error={error ? 'true' : undefined}\n data-success={success ? 'true' : undefined}\n style={{\n width: '100%',\n height: '2.25rem',\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: leftIcon ? '2.25rem' : '0.75rem',\n paddingRight: rightIcon ? '2.25rem' : '0.75rem',\n border: `1px solid ${error ? 'var(--ds-danger, #ef4444)' : success ? 'var(--ds-success, #22c55e)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n backgroundColor: 'var(--ds-card, #fff)',\n color: 'var(--ds-text-primary, #0f172a)',\n fontFamily: 'inherit',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n ...style,\n }}\n {...props}\n />\n {rightIcon && (\n <span style={{\n position: 'absolute',\n right: '0.625rem',\n display: 'flex',\n alignItems: 'center',\n color: 'var(--ds-text-secondary, #64748b)',\n pointerEvents: 'none',\n }}>\n {rightIcon}\n </span>\n )}\n </div>\n </>\n)\n\nexport default Input\n\n/*\n * Input\n *\n * Renders a text input with optional left/right icons and error or success border states.\n *\n * Props:\n * error (boolean, optional) — applies an error border style\n * success (boolean, optional) — applies a success border style\n * leftIcon (ReactNode, optional) — icon inside the left side\n * rightIcon (ReactNode, optional) — icon inside the right side\n * ...rest — any valid HTML input attribute (placeholder, value, onChange, disabled, etc.)\n *\n * Usage:\n * <Input placeholder=\"Search...\" onChange={handleChange} />\n * <Input leftIcon={<SearchIcon />} error placeholder=\"Not found\" />\n */\n","import React, { FC, LabelHTMLAttributes } from 'react'\n\ninterface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean\n}\n\nconst Label: FC<LabelProps> = ({ children, required, style, ...props }) => (\n <label style={{\n display: 'block',\n fontSize: '0.875rem',\n fontWeight: 500,\n color: 'var(--ds-text-primary, #0f172a)',\n marginBottom: '0.375rem',\n ...style,\n }} {...props}>\n {children}\n {required && (\n <span style={{ color: 'var(--ds-danger, #ef4444)', marginLeft: '0.25rem' }}>*</span>\n )}\n </label>\n)\n\nexport default Label\n\n/*\n * Label\n *\n * Renders a styled form label, optionally appending a red asterisk when the field is required.\n *\n * Props:\n * required (boolean, optional) — appends a \"*\" marker after the label text\n * ...rest — any valid HTML label attribute (htmlFor, etc.)\n *\n * Usage:\n * <Label htmlFor=\"email\">Email</Label>\n * <Label htmlFor=\"name\" required>Full name</Label>\n */\n","'use client'\n\nimport { Eye, EyeOff } from 'lucide-react'\nimport React, { FC, InputHTMLAttributes, useState } from 'react'\nimport Input from '../Input/Input'\n\ntype PasswordInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'>\n\nconst PasswordInput: FC<PasswordInputProps> = (props) => {\n const [visible, setVisible] = useState(false)\n\n return (\n <Input\n {...props}\n type={visible ? 'text' : 'password'}\n rightIcon={\n <button\n type=\"button\"\n onClick={() => setVisible(v => !v)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', pointerEvents: 'all' }}\n tabIndex={-1}\n >\n {visible ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n }\n />\n )\n}\n\nexport default PasswordInput\n\n/*\n * PasswordInput\n *\n * Renders a password input with an eye/eye-off toggle button that shows or hides the typed text.\n *\n * Props:\n * ...rest — any valid HTML input attribute except \"type\" (e.g. placeholder, value, onChange, disabled)\n * also accepts Input's error and success props for border states\n *\n * Usage:\n * <PasswordInput placeholder=\"Enter password\" onChange={e => setPassword(e.target.value)} />\n *\n * // With error state:\n * <PasswordInput value={password} onChange={handleChange} error />\n */\n","import React, { FC } from 'react'\n\ninterface ProgressProps {\n value?: number\n}\n\nconst Progress: FC<ProgressProps> = ({ value = 0 }) => {\n const pct = Math.min(100, Math.max(0, value))\n return (\n <div\n role=\"progressbar\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n style={{\n width: '100%',\n height: '0.5rem',\n backgroundColor: 'var(--ds-border, #e2e8f0)',\n borderRadius: '9999px',\n overflow: 'hidden',\n }}\n >\n <div style={{\n height: '100%',\n width: `${pct}%`,\n backgroundColor: 'var(--ds-primary, #3b82f6)',\n borderRadius: '9999px',\n transition: 'width 0.3s ease',\n }} />\n </div>\n )\n}\n\nexport default Progress\n\n/*\n * Progress\n *\n * Displays a horizontal progress bar that fills from left to right based on a 0–100 value.\n *\n * Props:\n * value (number, optional) — current progress percentage (0–100); clamped to that range; defaults to 0\n *\n * Usage:\n * <Progress value={60} />\n * <Progress value={uploadPercent} />\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\n\ninterface RadioOption {\n value: string\n label: string\n}\n\ninterface RadioGroupProps {\n options: RadioOption[]\n name: string\n value?: string\n defaultValue?: string\n disabled?: boolean\n onChange?: (value: string) => void\n}\n\nconst RadioGroup: FC<RadioGroupProps> = ({\n options,\n name,\n value,\n defaultValue = '',\n disabled,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultValue)\n const selected = value !== undefined ? value : internal\n\n const handleChange = (val: string) => {\n if (disabled) return\n setInternal(val)\n onChange?.(val)\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n {options.map((option) => {\n const isSelected = selected === option.value\n return (\n <label key={option.value} style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.5rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n opacity: disabled ? 0.5 : 1,\n }}>\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={isSelected}\n disabled={disabled}\n onChange={() => handleChange(option.value)}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0 }}\n />\n <span style={{\n width: '1.125rem',\n height: '1.125rem',\n borderRadius: '9999px',\n border: `2px solid ${isSelected ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)'}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n backgroundColor: 'var(--ds-card, #fff)',\n transition: 'border-color 0.15s',\n }}>\n {isSelected && (\n <span style={{\n width: '0.5rem',\n height: '0.5rem',\n borderRadius: '9999px',\n backgroundColor: 'var(--ds-primary, #3b82f6)',\n }} />\n )}\n </span>\n <span style={{ fontSize: '0.875rem', color: 'var(--ds-text-primary, #0f172a)' }}>\n {option.label}\n </span>\n </label>\n )\n })}\n </div>\n )\n}\n\nexport default RadioGroup\n\n/*\n * RadioGroup\n *\n * Renders a group of radio buttons from an array of options; controlled or uncontrolled.\n *\n * Props:\n * options (RadioOption[], required) — array of { value, label } items\n * name (string, required) — shared name attribute for the radio inputs\n * value (string, optional) — controlled selected value\n * defaultValue (string, optional) — initial value for uncontrolled use; defaults to \"\"\n * disabled (boolean, optional) — disables all options\n * onChange ((value: string) => void, optional) — called with the selected value on change\n *\n * Usage:\n * <RadioGroup name=\"size\" options={[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]} onChange={setSize} />\n */\n","'use client'\n\nimport { Check, ChevronDown } from 'lucide-react'\nimport React, { FC, useEffect, useRef, useState } from 'react'\n\ninterface SelectOption {\n value: string\n label: string\n}\n\ninterface SelectProps {\n options: SelectOption[]\n value?: string\n defaultValue?: string\n placeholder?: string\n disabled?: boolean\n onChange?: (value: string) => void\n}\n\nconst selectCSS = `\n[data-ds-select-trigger]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }\n`\n\nconst Select: FC<SelectProps> = ({\n options,\n value,\n defaultValue = '',\n placeholder = 'Choose an option',\n disabled,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultValue)\n const [open, setOpen] = useState(false)\n const [hoveredOption, setHoveredOption] = useState<string | null>(null)\n const ref = useRef<HTMLDivElement>(null)\n\n const selected = value !== undefined ? value : internal\n const selectedLabel = options.find(o => o.value === selected)?.label\n\n const handleSelect = (val: string) => {\n setInternal(val)\n setOpen(false)\n onChange?.(val)\n }\n\n useEffect(() => {\n const handleOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handleOutside)\n return () => document.removeEventListener('mousedown', handleOutside)\n }, [])\n\n return (\n <>\n <style href=\"ds-select\" precedence=\"low\">{selectCSS}</style>\n <div ref={ref} style={{\n position: 'relative',\n width: '100%',\n opacity: disabled ? 0.5 : 1,\n pointerEvents: disabled ? 'none' : undefined,\n }}>\n <button\n type=\"button\"\n data-ds-select-trigger=\"\"\n onClick={() => !disabled && setOpen(o => !o)}\n disabled={disabled}\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${open ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n backgroundColor: 'var(--ds-card, #fff)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '0.5rem',\n boxShadow: open ? '0 0 0 3px rgb(59 130 246 / 0.15)' : 'none',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n textAlign: 'left',\n fontFamily: 'inherit',\n }}\n >\n <span style={{ color: selectedLabel ? 'var(--ds-text-primary, #0f172a)' : 'var(--ds-text-secondary, #64748b)' }}>\n {selectedLabel ?? placeholder}\n </span>\n <ChevronDown\n size={16}\n style={{\n flexShrink: 0,\n color: 'var(--ds-text-secondary, #64748b)',\n transition: 'transform 0.15s',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </button>\n {open && (\n <div style={{\n position: 'absolute',\n top: 'calc(100% + 0.25rem)',\n left: 0,\n right: 0,\n zIndex: 50,\n backgroundColor: 'var(--ds-card, #fff)',\n border: '1px solid var(--ds-border, #e2e8f0)',\n borderRadius: '0.375rem',\n boxShadow: '0 10px 15px -3px rgb(0 0 0 / 0.1)',\n overflow: 'hidden',\n }}>\n {options.map((option) => {\n const isSelected = selected === option.value\n const isHovered = hoveredOption === option.value\n return (\n <div\n key={option.value}\n onClick={() => handleSelect(option.value)}\n onMouseEnter={() => setHoveredOption(option.value)}\n onMouseLeave={() => setHoveredOption(null)}\n style={{\n padding: '0.5rem 0.75rem',\n fontSize: '0.875rem',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n color: 'var(--ds-text-primary, #0f172a)',\n backgroundColor: isSelected || isHovered ? 'var(--ds-muted, #f1f5f9)' : 'transparent',\n fontWeight: isSelected ? 500 : undefined,\n transition: 'background-color 0.1s',\n }}\n >\n {isSelected\n ? <Check size={14} style={{ color: 'var(--ds-primary, #3b82f6)', flexShrink: 0 }} />\n : <span style={{ width: 14, flexShrink: 0 }} />\n }\n {option.label}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </>\n )\n}\n\nexport default Select\n\n/*\n * Select\n *\n * Renders a custom dropdown — controlled or uncontrolled — for picking one option.\n *\n * Props:\n * options (SelectOption[], required) — array of { value, label } items\n * value (string, optional) — controlled selected value\n * defaultValue (string, optional) — initial value for uncontrolled use; defaults to \"\"\n * placeholder (string, optional) — text shown when nothing is selected; defaults to \"Choose an option\"\n * disabled (boolean, optional) — prevents opening the dropdown\n * onChange ((value: string) => void, optional) — called with the selected value on pick\n *\n * Usage:\n * <Select options={[{ value: 'fr', label: 'French' }, { value: 'en', label: 'English' }]} onChange={setLanguage} />\n */\n","import React, { FC } from 'react'\n\ninterface SkeletonProps {\n height?: string\n width?: string\n circle?: boolean\n}\n\nconst Skeleton: FC<SkeletonProps> = ({ height = '1rem', width = '100%', circle = false }) => (\n <>\n <style href=\"ds-skeleton\" precedence=\"low\">{`\n @keyframes ds-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }\n [data-ds-skeleton] { animation: ds-pulse 1.5s ease-in-out infinite; }\n `}</style>\n <div\n data-ds-skeleton=\"\"\n aria-hidden=\"true\"\n style={{\n height,\n width,\n backgroundColor: 'var(--ds-muted, #f1f5f9)',\n borderRadius: circle ? '9999px' : '0.375rem',\n }}\n />\n </>\n)\n\nexport default Skeleton\n\n/*\n * Skeleton\n *\n * Renders an animated placeholder block for loading states.\n *\n * Props:\n * height (string, optional) — CSS height; defaults to \"1rem\"\n * width (string, optional) — CSS width; defaults to \"100%\"\n * circle (boolean, optional) — makes the block fully round for avatar placeholders\n *\n * Usage:\n * <Skeleton width=\"200px\" height=\"1rem\" />\n * <Skeleton circle width=\"40px\" height=\"40px\" />\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\n\ninterface SliderProps {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n onChange?: (value: number) => void\n}\n\nconst sliderCSS = `\n[data-ds-slider] {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 0.375rem;\n border-radius: 9999px;\n outline: none;\n cursor: pointer;\n background: linear-gradient(\n to right,\n var(--ds-primary, #3b82f6) 0%,\n var(--ds-primary, #3b82f6) var(--fill, 50%),\n var(--ds-border, #e2e8f0) var(--fill, 50%),\n var(--ds-border, #e2e8f0) 100%\n );\n}\n[data-ds-slider]::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 9999px;\n background-color: var(--ds-primary, #3b82f6);\n cursor: pointer;\n border: 2px solid #fff;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2);\n transition: transform 0.1s;\n}\n[data-ds-slider]::-webkit-slider-thumb:hover { transform: scale(1.2); }\n[data-ds-slider]::-moz-range-thumb {\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 9999px;\n background-color: var(--ds-primary, #3b82f6);\n cursor: pointer;\n border: 2px solid #fff;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2);\n}\n[data-ds-slider]:disabled { cursor: not-allowed; }\n`\n\nconst Slider: FC<SliderProps> = ({\n value,\n defaultValue = 50,\n min = 0,\n max = 100,\n step = 1,\n disabled,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultValue)\n const current = value !== undefined ? value : internal\n const fill = `${((current - min) / (max - min)) * 100}%`\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = Number(e.target.value)\n setInternal(val)\n onChange?.(val)\n }\n\n return (\n <>\n <style href=\"ds-slider\" precedence=\"low\">{sliderCSS}</style>\n <div style={{\n width: '100%',\n padding: '0.25rem 0',\n opacity: disabled ? 0.5 : 1,\n }}>\n <input\n type=\"range\"\n data-ds-slider=\"\"\n min={min}\n max={max}\n step={step}\n value={current}\n disabled={disabled}\n onChange={handleChange}\n style={{ '--fill': fill } as React.CSSProperties}\n />\n </div>\n </>\n )\n}\n\nexport default Slider\n\n/*\n * Slider\n *\n * Renders a range slider with a filled track — controlled or uncontrolled.\n *\n * Props:\n * value (number, optional) — controlled current value\n * defaultValue (number, optional) — initial value for uncontrolled use; defaults to 50\n * min (number, optional) — minimum value; defaults to 0\n * max (number, optional) — maximum value; defaults to 100\n * step (number, optional) — increment between values; defaults to 1\n * disabled (boolean, optional) — prevents interaction\n * onChange ((value: number) => void, optional) — called with the new value on each change\n *\n * Usage:\n * <Slider onChange={val => setVolume(val)} />\n * <Slider value={opacity} min={0} max={1} step={0.01} onChange={setOpacity} />\n */\n","import React, { FC } from 'react'\nimport { Loader2 } from 'lucide-react'\n\ntype SpinnerSize = 'sm' | 'md' | 'lg'\n\ninterface SpinnerProps {\n size?: SpinnerSize\n}\n\nconst sizePx: Record<SpinnerSize, number> = { sm: 16, md: 24, lg: 32 }\n\nconst Spinner: FC<SpinnerProps> = ({ size = 'md' }) => (\n <>\n <style href=\"ds-spin\" precedence=\"low\">{`@keyframes ds-spin { to { transform: rotate(360deg); } }`}</style>\n <Loader2\n size={sizePx[size]}\n aria-label=\"Loading\"\n style={{ color: 'var(--ds-primary, #3b82f6)', animation: 'ds-spin 0.75s linear infinite' }}\n />\n </>\n)\n\nexport default Spinner\n\n/*\n * Spinner\n *\n * Displays an animated loading indicator at one of three sizes.\n *\n * Props:\n * size (\"sm\" | \"md\" | \"lg\", optional) — sm = 16px, md = 24px, lg = 32px; defaults to \"md\"\n *\n * Usage:\n * <Spinner />\n * {isLoading && <Spinner size=\"lg\" />}\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\n\ninterface SwitchProps {\n label?: string\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n id?: string\n onChange?: (checked: boolean) => void\n}\n\nconst Switch: FC<SwitchProps> = ({\n label,\n checked,\n defaultChecked = false,\n disabled,\n id,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultChecked)\n const isOn = checked !== undefined ? checked : internal\n\n const handleToggle = () => {\n if (disabled) return\n const next = !isOn\n setInternal(next)\n onChange?.(next)\n }\n\n return (\n <label htmlFor={id} style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.625rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n opacity: disabled ? 0.5 : 1,\n }}>\n <input\n type=\"checkbox\"\n id={id}\n checked={isOn}\n disabled={disabled}\n onChange={handleToggle}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0 }}\n />\n <span style={{\n width: '2.75rem',\n height: '1.5rem',\n borderRadius: '9999px',\n backgroundColor: isOn ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)',\n position: 'relative',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n }}>\n <span style={{\n position: 'absolute',\n top: '0.175rem',\n left: '0.175rem',\n width: '1.15rem',\n height: '1.15rem',\n borderRadius: '9999px',\n backgroundColor: '#fff',\n boxShadow: '0 1px 3px 0 rgb(0 0 0 / 0.15)',\n transition: 'transform 0.2s',\n transform: isOn ? 'translateX(1.25rem)' : 'translateX(0)',\n }} />\n </span>\n {label && (\n <span style={{ fontSize: '0.875rem', color: 'var(--ds-text-primary, #0f172a)' }}>{label}</span>\n )}\n </label>\n )\n}\n\nexport default Switch\n\n/*\n * Switch\n *\n * Renders a toggle switch — controlled or uncontrolled — with an optional text label.\n *\n * Props:\n * label (string, optional) — text displayed next to the switch\n * checked (boolean, optional) — controlled on/off state\n * defaultChecked (boolean, optional) — initial state for uncontrolled use; defaults to false\n * disabled (boolean, optional) — prevents interaction\n * id (string, optional) — HTML id for the underlying input\n * onChange ((checked: boolean) => void, optional) — called with the new boolean on each toggle\n *\n * Usage:\n * <Switch label=\"Enable notifications\" onChange={setEnabled} />\n * <Switch checked={darkMode} onChange={setDarkMode} label=\"Dark mode\" />\n */\n","'use client'\n\nimport React, { FC, HTMLAttributes, ThHTMLAttributes, TdHTMLAttributes, useState } from 'react'\n\nconst tableCSS = `\n[data-ds-table-row]:hover [data-ds-table-cell] { background-color: var(--ds-muted, #f1f5f9); }\n`\n\nexport const Table: FC<HTMLAttributes<HTMLTableElement>> = ({ style, ...props }) => (\n <>\n <style href=\"ds-table\" precedence=\"low\">{tableCSS}</style>\n <div style={{\n width: '100%',\n overflowX: 'auto',\n border: '1px solid var(--ds-border, #e2e8f0)',\n borderRadius: '0.5rem',\n }}>\n <table style={{\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '0.875rem',\n ...style,\n }} {...props} />\n </div>\n </>\n)\n\nexport const TableHead: FC<HTMLAttributes<HTMLTableSectionElement>> = (props) => (\n <thead {...props} />\n)\n\nexport const TableBody: FC<HTMLAttributes<HTMLTableSectionElement>> = (props) => (\n <tbody {...props} />\n)\n\nexport const TableRow: FC<HTMLAttributes<HTMLTableRowElement>> = ({ style, ...props }) => (\n <tr data-ds-table-row=\"\" style={style} {...props} />\n)\n\nexport const TableHeader: FC<ThHTMLAttributes<HTMLTableCellElement>> = ({ style, ...props }) => (\n <th style={{\n padding: '0.75rem 1rem',\n textAlign: 'left',\n fontWeight: 500,\n color: 'var(--ds-text-secondary, #64748b)',\n backgroundColor: 'var(--ds-muted, #f1f5f9)',\n borderBottom: '1px solid var(--ds-border, #e2e8f0)',\n whiteSpace: 'nowrap',\n ...style,\n }} {...props} />\n)\n\nexport const TableCell: FC<TdHTMLAttributes<HTMLTableCellElement>> = ({ style, ...props }) => (\n <td\n data-ds-table-cell=\"\"\n style={{\n padding: '0.75rem 1rem',\n borderBottom: '1px solid var(--ds-border, #e2e8f0)',\n color: 'var(--ds-text-primary, #0f172a)',\n transition: 'background-color 0.1s',\n ...style,\n }}\n {...props}\n />\n)\n\n/*\n * Table / TableHead / TableBody / TableRow / TableHeader / TableCell\n *\n * Composable table components with consistent styles.\n *\n * Usage:\n * <Table>\n * <TableHead><TableRow><TableHeader>Name</TableHeader><TableHeader>Status</TableHeader></TableRow></TableHead>\n * <TableBody><TableRow><TableCell>Visit 001</TableCell><TableCell>Completed</TableCell></TableRow></TableBody>\n * </Table>\n */\n","'use client'\n\nimport React, { FC, ReactNode, useState } from 'react'\n\nexport interface TabItem {\n value: string\n label: string\n content: ReactNode\n icon?: ReactNode\n}\n\ninterface TabsProps {\n tabs: TabItem[]\n defaultValue?: string\n}\n\nconst Tabs: FC<TabsProps> = ({ tabs, defaultValue }) => {\n const [active, setActive] = useState(defaultValue ?? tabs[0]?.value ?? '')\n const [hovered, setHovered] = useState<string | null>(null)\n const activeTab = tabs.find(t => t.value === active)\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <div role=\"tablist\" style={{\n display: 'inline-flex',\n backgroundColor: 'var(--ds-muted, #f1f5f9)',\n borderRadius: '0.5rem',\n padding: '0.25rem',\n gap: '0.125rem',\n }}>\n {tabs.map(tab => {\n const isActive = active === tab.value\n const isHovered = hovered === tab.value\n return (\n <button\n key={tab.value}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => setActive(tab.value)}\n onMouseEnter={() => setHovered(tab.value)}\n onMouseLeave={() => setHovered(null)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.375rem',\n padding: '0.375rem 0.75rem',\n fontSize: '0.875rem',\n fontWeight: 500,\n borderRadius: '0.375rem',\n background: isActive ? 'var(--ds-card, #ffffff)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: isActive || isHovered ? 'var(--ds-text-primary, #0f172a)' : 'var(--ds-text-secondary, #64748b)',\n boxShadow: isActive ? '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)' : 'none',\n transition: 'color 0.15s, background-color 0.15s, box-shadow 0.15s',\n whiteSpace: 'nowrap',\n }}\n >\n {tab.icon && <span style={{ display: 'flex', alignItems: 'center' }}>{tab.icon}</span>}\n {tab.label}\n </button>\n )\n })}\n </div>\n <div role=\"tabpanel\" style={{\n paddingTop: '1rem',\n fontSize: '0.875rem',\n color: 'var(--ds-text-secondary, #64748b)',\n }}>\n {activeTab?.content}\n </div>\n </div>\n )\n}\n\nexport default Tabs\n\n/*\n * Tabs\n *\n * Renders a tab bar and displays the content panel of the active tab.\n *\n * Props:\n * tabs (TabItem[], required) — array of { value, label, content, icon? }\n * defaultValue (string, optional) — value of the tab active on first render; defaults to the first tab\n *\n * Usage:\n * <Tabs tabs={[{ value: 'overview', label: 'Overview', content: <Overview /> }, { value: 'settings', label: 'Settings', content: <Settings /> }]} />\n */\n","import React, { FC, TextareaHTMLAttributes } from 'react'\n\ninterface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean\n}\n\nconst textareaCSS = `\n[data-ds-textarea]::placeholder { color: var(--ds-text-secondary, #64748b); }\n[data-ds-textarea]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }\n[data-ds-textarea]:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--ds-muted, #f1f5f9); }\n[data-ds-textarea][data-error=\"true\"] { border-color: var(--ds-danger, #ef4444); }\n[data-ds-textarea][data-error=\"true\"]:focus { border-color: var(--ds-danger, #ef4444); box-shadow: 0 0 0 3px rgb(239 68 68 / 0.15); }\n`\n\nconst Textarea: FC<TextareaProps> = ({ error, style, ...props }) => (\n <>\n <style href=\"ds-textarea\" precedence=\"low\">{textareaCSS}</style>\n <textarea\n data-ds-textarea=\"\"\n data-error={error ? 'true' : undefined}\n style={{\n width: '100%',\n padding: '0.5rem 0.75rem',\n border: `1px solid ${error ? 'var(--ds-danger, #ef4444)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n backgroundColor: 'var(--ds-card, #fff)',\n color: 'var(--ds-text-primary, #0f172a)',\n fontFamily: 'inherit',\n resize: 'vertical',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n minHeight: '6rem',\n boxSizing: 'border-box',\n ...style,\n }}\n {...props}\n />\n </>\n)\n\nexport default Textarea\n\n/*\n * Textarea\n *\n * Renders a styled multi-line text area with an optional error border state.\n *\n * Props:\n * error (boolean, optional) — applies an error border style\n * ...rest — any valid HTML textarea attribute (placeholder, value, onChange, rows, disabled, etc.)\n *\n * Usage:\n * <Textarea placeholder=\"Write your message...\" rows={4} onChange={handleChange} />\n * <Textarea error value={notes} onChange={e => setNotes(e.target.value)} />\n */\n","'use client'\n\nimport React, { FC, ReactNode, useState } from 'react'\n\ninterface TooltipProps {\n content: string\n children: ReactNode\n position?: 'top' | 'bottom' | 'left' | 'right'\n}\n\ntype TooltipPosition = 'top' | 'bottom' | 'left' | 'right'\n\nconst positionStyle: Record<TooltipPosition, React.CSSProperties> = {\n top: { bottom: 'calc(100% + 8px)', left: '50%', transform: 'translateX(-50%)' },\n bottom: { top: 'calc(100% + 8px)', left: '50%', transform: 'translateX(-50%)' },\n left: { right: 'calc(100% + 8px)', top: '50%', transform: 'translateY(-50%)' },\n right: { left: 'calc(100% + 8px)', top: '50%', transform: 'translateY(-50%)' },\n}\n\nconst tooltipCSS = `\n[data-ds-tt]::before {\n content: '';\n position: absolute;\n border: 5px solid transparent;\n}\n[data-ds-tt=\"top\"]::before { top: 100%; left: 50%; transform: translateX(-50%); border-top-color: var(--ds-tooltip-bg, #0f172a); }\n[data-ds-tt=\"bottom\"]::before { bottom: 100%; left: 50%; transform: translateX(-50%); border-bottom-color: var(--ds-tooltip-bg, #0f172a); }\n[data-ds-tt=\"left\"]::before { left: 100%; top: 50%; transform: translateY(-50%); border-left-color: var(--ds-tooltip-bg, #0f172a); }\n[data-ds-tt=\"right\"]::before { right: 100%; top: 50%; transform: translateY(-50%); border-right-color: var(--ds-tooltip-bg, #0f172a); }\n`\n\nconst Tooltip: FC<TooltipProps> = ({ content, children, position = 'top' }) => {\n const [visible, setVisible] = useState(false)\n\n return (\n <>\n <style href=\"ds-tooltip\" precedence=\"low\">{tooltipCSS}</style>\n <span\n style={{ position: 'relative', display: 'inline-flex' }}\n onMouseEnter={() => setVisible(true)}\n onMouseLeave={() => setVisible(false)}\n onFocus={() => setVisible(true)}\n onBlur={() => setVisible(false)}\n >\n {children}\n <span\n role=\"tooltip\"\n data-ds-tt={position}\n style={{\n position: 'absolute',\n zIndex: 50,\n padding: '0.375rem 0.625rem',\n backgroundColor: 'var(--ds-tooltip-bg, #0f172a)',\n color: 'var(--ds-tooltip-text, #ffffff)',\n fontSize: '0.75rem',\n lineHeight: 1.4,\n borderRadius: '0.375rem',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n opacity: visible ? 1 : 0,\n transition: 'opacity 0.15s',\n ...positionStyle[position],\n }}\n >\n {content}\n </span>\n </span>\n </>\n )\n}\n\nexport default Tooltip\n\n/*\n * Tooltip\n *\n * Wraps any element and shows a text tooltip on hover in the given direction.\n *\n * Props:\n * content (string, required) — text shown inside the tooltip\n * children (ReactNode, required) — the element the tooltip is attached to\n * position (\"top\" | \"bottom\" | \"left\" | \"right\", optional) — defaults to \"top\"\n *\n * Usage:\n * <Tooltip content=\"Delete this item\"><button>Delete</button></Tooltip>\n * <Tooltip content=\"More info\" position=\"right\"><InfoIcon /></Tooltip>\n */\n"],"mappings":"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","names":["import_react","import_jsx_runtime","RechartsLineChart","import_react","import_recharts","import_jsx_runtime","RechartsBarChart","import_react","import_recharts","import_jsx_runtime","RechartsAreaChart","import_react","import_recharts","import_jsx_runtime","RechartsPieChart","import_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","variantMap","sizeMap","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","Tooltip"]}
1
+ {"version":3,"sources":["../src/components/index.ts","../src/components/ThemeProvider.tsx","../src/components/Charts/LineChart.tsx","../src/components/Charts/chartUtils.ts","../src/components/Charts/BarChart.tsx","../src/components/Charts/AreaChart.tsx","../src/components/Charts/PieChart.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/CopyButton/CopyButton.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/Input/Input.tsx","../src/components/Label/Label.tsx","../src/components/PasswordInput/PasswordInput.tsx","../src/components/Progress/Progress.tsx","../src/components/RadioGroup/RadioGroup.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Slider/Slider.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Switch/Switch.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["// Theme\nexport { ThemeProvider, useTheme } from './ThemeProvider'\n\n// Charts (require recharts peer dependency)\nexport { default as LineChart } from './Charts/LineChart'\nexport { default as BarChart } from './Charts/BarChart'\nexport { default as AreaChart } from './Charts/AreaChart'\nexport { default as PieChart } from './Charts/PieChart'\n\n// Components\nexport { default as Accordion } from './Accordion/Accordion'\nexport { default as Alert } from './Alert/Alert'\nexport { default as Avatar } from './Avatar/Avatar'\nexport { default as Badge } from './Badge/Badge'\nexport { default as Breadcrumb } from './Breadcrumb/Breadcrumb'\nexport { default as Button } from './Button/Button'\nexport { Card, CardContent, CardDescription,\n CardFooter, CardHeader, CardTitle } from './Card/Card'\nexport { default as Checkbox } from './Checkbox/Checkbox'\nexport { default as CopyButton } from './CopyButton/CopyButton'\nexport { default as FileUpload } from './FileUpload/FileUpload'\nexport { default as Input } from './Input/Input'\nexport { default as Label } from './Label/Label'\nexport { default as PasswordInput } from './PasswordInput/PasswordInput'\nexport { default as Progress } from './Progress/Progress'\nexport { default as RadioGroup } from './RadioGroup/RadioGroup'\nexport { default as Select } from './Select/Select'\nexport { default as Skeleton } from './Skeleton/Skeleton'\nexport { default as Slider } from './Slider/Slider'\nexport { default as Spinner } from './Spinner/Spinner'\nexport { default as Switch } from './Switch/Switch'\nexport { Table, TableBody, TableCell,\n TableHead, TableHeader, TableRow } from './Table/Table'\nexport { default as Tabs } from './Tabs/Tabs'\nexport { default as Textarea } from './Textarea/Textarea'\nexport { default as Tooltip } from './Tooltip/Tooltip'\n","'use client'\nimport React, { createContext, useContext, useState } from 'react'\nimport '../styles/globals.css'\n\ntype Theme = 'light' | 'dark'\n\ninterface ThemeContextValue {\n theme: Theme\n toggle: () => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nexport const ThemeProvider = ({\n children,\n defaultTheme = 'light',\n}: {\n children: React.ReactNode\n defaultTheme?: Theme\n}) => {\n const [theme, setTheme] = useState<Theme>(defaultTheme)\n return (\n <ThemeContext.Provider value={{ theme, toggle: () => setTheme(t => t === 'light' ? 'dark' : 'light') }}>\n <div className={theme === 'dark' ? 'ds-theme-dark' : undefined}>\n {children}\n </div>\n </ThemeContext.Provider>\n )\n}\n\nexport const useTheme = () => {\n const ctx = useContext(ThemeContext)\n if (!ctx) throw new Error('useTheme must be used inside <ThemeProvider>')\n return ctx\n}\n","'use client'\n\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport {\n LineChart as RechartsLineChart,\n Line, XAxis, YAxis, CartesianGrid,\n Tooltip, Legend,\n} from 'recharts'\nimport { ChartTheme, CHART_COLORS, getChartTheme } from './chartUtils'\n\ninterface LineConfig {\n dataKey: string\n color?: string\n label?: string\n}\n\ninterface LineChartProps {\n data: Record<string, unknown>[]\n xKey: string\n lines: LineConfig[]\n height?: number\n legend?: boolean\n grid?: boolean\n theme?: ChartTheme\n className?: string\n style?: React.CSSProperties\n}\n\nconst LineChart: FC<LineChartProps> = ({\n data,\n xKey,\n lines,\n height = 250,\n legend = false,\n grid = true,\n theme = 'light',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme)\n\n useEffect(() => {\n if (!containerRef.current) return\n const measure = () => setWidth(containerRef.current!.offsetWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n return (\n <div ref={containerRef} className={className} style={{ minWidth: 250, width: '100%', ...style }}>\n {width > 0 && (\n <RechartsLineChart width={width} height={height} data={data}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridColor} />}\n <XAxis dataKey={xKey} stroke={axisStroke} tick={axisTick} />\n <YAxis stroke={axisStroke} tick={axisTick} />\n <Tooltip contentStyle={tooltipStyle} />\n {legend && <Legend />}\n {lines.map((line, i) => {\n const color = line.color ?? CHART_COLORS[i % CHART_COLORS.length]\n return (\n <Line\n key={line.dataKey}\n type=\"monotone\"\n dataKey={line.dataKey}\n name={line.label ?? line.dataKey}\n stroke={color}\n strokeWidth={2}\n dot={{ fill: color, r: 4 }}\n activeDot={{ r: 6 }}\n isAnimationActive={false}\n />\n )\n })}\n </RechartsLineChart>\n )}\n </div>\n )\n}\n\nexport default LineChart\n","import React from 'react'\n\nexport type ChartTheme = 'light' | 'dark'\n\nexport const CHART_COLORS = [\n '#3b82f6', // blue\n '#22c55e', // green\n '#f59e0b', // amber\n '#ef4444', // red\n '#8b5cf6', // violet\n '#06b6d4', // cyan\n '#f97316', // orange\n '#ec4899', // pink\n]\n\nexport function getChartTheme(theme: ChartTheme) {\n const isDark = theme === 'dark'\n return {\n gridColor: isDark ? '#334155' : '#e2e8f0',\n axisStroke: isDark ? '#94a3b8' : '#64748b',\n axisTick: { fill: isDark ? '#94a3b8' : '#64748b', fontSize: 12 },\n primaryColor: isDark ? '#60a5fa' : '#3b82f6',\n tooltipStyle: {\n backgroundColor: isDark ? '#1e293b' : '#ffffff',\n border: `1px solid ${isDark ? '#334155' : '#e2e8f0'}`,\n borderRadius: '6px',\n color: isDark ? '#f1f5f9' : '#0f172a',\n fontSize: '0.8125rem',\n } as React.CSSProperties,\n }\n}\n","'use client'\n\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport {\n BarChart as RechartsBarChart,\n Bar, XAxis, YAxis, CartesianGrid,\n Tooltip, Legend,\n} from 'recharts'\nimport { ChartTheme, CHART_COLORS, getChartTheme } from './chartUtils'\n\ninterface BarConfig {\n dataKey: string\n color?: string\n stackId?: string\n label?: string\n}\n\ninterface BarChartProps {\n data: Record<string, unknown>[]\n xKey: string\n bars: BarConfig[]\n height?: number\n legend?: boolean\n grid?: boolean\n theme?: ChartTheme\n className?: string\n style?: React.CSSProperties\n}\n\nconst BarChart: FC<BarChartProps> = ({\n data,\n xKey,\n bars,\n height = 250,\n legend = false,\n grid = true,\n theme = 'light',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme)\n\n useEffect(() => {\n if (!containerRef.current) return\n const measure = () => setWidth(containerRef.current!.offsetWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n return (\n <div ref={containerRef} className={className} style={{ minWidth: 250, width: '100%', ...style }}>\n {width > 0 && (\n <RechartsBarChart width={width} height={height} data={data}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridColor} />}\n <XAxis dataKey={xKey} stroke={axisStroke} tick={axisTick} />\n <YAxis stroke={axisStroke} tick={axisTick} />\n <Tooltip contentStyle={tooltipStyle} />\n {legend && <Legend />}\n {bars.map((bar, i) => {\n const color = bar.color ?? CHART_COLORS[i % CHART_COLORS.length]\n return (\n <Bar\n key={bar.dataKey}\n dataKey={bar.dataKey}\n name={bar.label ?? bar.dataKey}\n fill={color}\n stackId={bar.stackId}\n isAnimationActive={false}\n />\n )\n })}\n </RechartsBarChart>\n )}\n </div>\n )\n}\n\nexport default BarChart\n","'use client'\n\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport {\n AreaChart as RechartsAreaChart,\n Area, XAxis, YAxis, CartesianGrid,\n Tooltip, Legend,\n} from 'recharts'\nimport { ChartTheme, CHART_COLORS, getChartTheme } from './chartUtils'\n\ninterface AreaConfig {\n dataKey: string\n color?: string\n stackId?: string\n fillOpacity?: number\n label?: string\n}\n\ninterface AreaChartProps {\n data: Record<string, unknown>[]\n xKey: string\n areas: AreaConfig[]\n height?: number\n legend?: boolean\n grid?: boolean\n theme?: ChartTheme\n className?: string\n style?: React.CSSProperties\n}\n\nconst AreaChart: FC<AreaChartProps> = ({\n data,\n xKey,\n areas,\n height = 250,\n legend = false,\n grid = true,\n theme = 'light',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme)\n\n useEffect(() => {\n if (!containerRef.current) return\n const measure = () => setWidth(containerRef.current!.offsetWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n return (\n <div ref={containerRef} className={className} style={{ minWidth: 250, width: '100%', ...style }}>\n {width > 0 && (\n <RechartsAreaChart width={width} height={height} data={data}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridColor} />}\n <XAxis dataKey={xKey} stroke={axisStroke} tick={axisTick} />\n <YAxis stroke={axisStroke} tick={axisTick} />\n <Tooltip contentStyle={tooltipStyle} />\n {legend && <Legend />}\n {areas.map((area, i) => {\n const color = area.color ?? CHART_COLORS[i % CHART_COLORS.length]\n const opacity = area.fillOpacity ?? (area.stackId ? 0.4 : 0.15)\n return (\n <Area\n key={area.dataKey}\n type=\"monotone\"\n dataKey={area.dataKey}\n name={area.label ?? area.dataKey}\n stroke={color}\n fill={color}\n fillOpacity={opacity}\n strokeWidth={2}\n stackId={area.stackId}\n isAnimationActive={false}\n />\n )\n })}\n </RechartsAreaChart>\n )}\n </div>\n )\n}\n\nexport default AreaChart\n","'use client'\n\nimport React, { FC, useEffect, useRef, useState } from 'react'\nimport {\n PieChart as RechartsPieChart,\n Pie, Tooltip, Legend,\n} from 'recharts'\nimport { ChartTheme, CHART_COLORS, getChartTheme } from './chartUtils'\n\ninterface PieDataItem {\n name: string\n value: number\n fill?: string\n}\n\ninterface PieChartProps {\n data: PieDataItem[]\n height?: number\n donut?: boolean\n legend?: boolean\n label?: boolean\n theme?: ChartTheme\n className?: string\n style?: React.CSSProperties\n}\n\nconst PieChart: FC<PieChartProps> = ({\n data,\n height = 250,\n donut = false,\n legend = false,\n label = false,\n theme = 'light',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n const { tooltipStyle } = getChartTheme(theme)\n\n useEffect(() => {\n if (!containerRef.current) return\n const measure = () => setWidth(containerRef.current!.offsetWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerRef.current)\n return () => ro.disconnect()\n }, [])\n\n const dataWithColors = data.map((item, i) => ({\n ...item,\n fill: item.fill ?? CHART_COLORS[i % CHART_COLORS.length],\n }))\n\n const outerRadius = 90\n const innerRadius = donut ? 55 : 0\n\n return (\n <div ref={containerRef} className={className} style={{ minWidth: 250, width: '100%', ...style }}>\n {width > 0 && (\n <RechartsPieChart width={width} height={height}>\n <Pie\n data={dataWithColors}\n cx=\"50%\"\n cy=\"50%\"\n outerRadius={outerRadius}\n innerRadius={innerRadius}\n dataKey=\"value\"\n label={label ? ({ name, percent }) => `${name} ${((percent ?? 0) * 100).toFixed(0)}%` : undefined}\n labelLine={label}\n isAnimationActive={false}\n />\n <Tooltip contentStyle={tooltipStyle} />\n {legend && <Legend />}\n </RechartsPieChart>\n )}\n </div>\n )\n}\n\nexport default PieChart\n","'use client'\n\nimport React, { FC, useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\n\nexport interface AccordionItem {\n value: string\n trigger: string\n content: string\n}\n\ninterface AccordionProps {\n items: AccordionItem[]\n defaultValue?: string | string[]\n multiple?: boolean\n}\n\nconst Accordion: FC<AccordionProps> = ({ items, defaultValue, multiple = false }) => {\n const [open, setOpen] = useState<Set<string>>(() => {\n if (!defaultValue) return new Set()\n if (Array.isArray(defaultValue)) return new Set(defaultValue)\n return new Set([defaultValue])\n })\n const [hovered, setHovered] = useState<string | null>(null)\n\n const toggle = (value: string) => {\n setOpen(prev => {\n const next = new Set(prev)\n if (next.has(value)) {\n next.delete(value)\n } else {\n if (!multiple) next.clear()\n next.add(value)\n }\n return next\n })\n }\n\n return (\n <div style={{\n border: '1px solid var(--ds-border, #e2e8f0)',\n borderRadius: '0.5rem',\n overflow: 'hidden',\n }}>\n {items.map((item, index) => {\n const isOpen = open.has(item.value)\n const isHovered = hovered === item.value\n const isLast = index === items.length - 1\n return (\n <div\n key={item.value}\n style={{\n borderBottom: isLast ? 'none' : '1px solid var(--ds-border, #e2e8f0)',\n }}\n >\n <button\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '1rem',\n fontSize: '0.875rem',\n fontWeight: 500,\n background: isHovered ? 'var(--ds-muted, #f1f5f9)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n textAlign: 'left',\n color: 'var(--ds-text-primary, #0f172a)',\n transition: 'background-color 0.15s',\n }}\n onClick={() => toggle(item.value)}\n onMouseEnter={() => setHovered(item.value)}\n onMouseLeave={() => setHovered(null)}\n aria-expanded={isOpen}\n >\n <span>{item.trigger}</span>\n <ChevronDown\n size={16}\n style={{\n flexShrink: 0,\n color: 'var(--ds-text-secondary, #64748b)',\n transition: 'transform 0.2s ease',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </button>\n <div style={{\n maxHeight: isOpen ? '300px' : '0',\n overflow: 'hidden',\n transition: 'max-height 0.25s ease',\n }}>\n <div style={{\n padding: '0 1rem 1rem',\n fontSize: '0.875rem',\n color: 'var(--ds-text-secondary, #64748b)',\n }}>\n {item.content}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport default Accordion\n\n/*\n * Accordion\n *\n * Renders a list of collapsible sections; by default only one section can be open at a time.\n *\n * Props:\n * items (AccordionItem[], required) — array of sections, each with:\n * value (string) — unique identifier\n * trigger (string) — heading text shown on the clickable row\n * content (string) — body text revealed when the section is open\n * defaultValue (string | string[], optional) — value(s) of sections that start open\n * multiple (boolean, optional) — when true, more than one section can be open simultaneously; defaults to false\n *\n * Usage:\n * <Accordion\n * items={[\n * { value: 'q1', trigger: 'What is eFiche?', content: 'eFiche is a medical records platform.' },\n * { value: 'q2', trigger: 'How do I log in?', content: 'Use your credentials at the login page.' },\n * ]}\n * />\n *\n * // Multiple sections open, first one pre-opened:\n * <Accordion items={faqItems} multiple defaultValue=\"q1\" />\n */\n","import React, { FC, ReactNode } from 'react'\nimport { Info, CheckCircle2, AlertTriangle, AlertCircle } from 'lucide-react'\n\ntype AlertVariant = 'info' | 'success' | 'warning' | 'danger'\n\ninterface AlertProps {\n variant?: AlertVariant\n title: string\n description: string\n}\n\nconst variantMap: Record<AlertVariant, { bg: string; border: string; icon: string; title: string; desc: string }> = {\n info: { bg: 'var(--ds-info-bg, #eff6ff)', border: 'var(--ds-info, #3b82f6)', icon: 'var(--ds-info, #3b82f6)', title: 'var(--ds-info-title, #1e3a8a)', desc: 'var(--ds-info-desc, #1e40af)' },\n success: { bg: 'var(--ds-success-bg, #f0fdf4)', border: 'var(--ds-success, #22c55e)', icon: 'var(--ds-success, #22c55e)', title: 'var(--ds-success-title, #14532d)', desc: 'var(--ds-success-desc, #166534)' },\n warning: { bg: 'var(--ds-warning-bg, #fffbeb)', border: 'var(--ds-warning, #f59e0b)', icon: 'var(--ds-warning, #f59e0b)', title: 'var(--ds-warning-title, #78350f)', desc: 'var(--ds-warning-desc, #92400e)' },\n danger: { bg: 'var(--ds-danger-bg, #fef2f2)', border: 'var(--ds-danger, #ef4444)', icon: 'var(--ds-danger, #ef4444)', title: 'var(--ds-danger-title, #7f1d1d)', desc: 'var(--ds-danger-desc, #991b1b)' },\n}\n\nconst icons: Record<AlertVariant, ReactNode> = {\n info: <Info size={16} />,\n success: <CheckCircle2 size={16} />,\n warning: <AlertTriangle size={16} />,\n danger: <AlertCircle size={16} />,\n}\n\nconst Alert: FC<AlertProps> = ({ variant = 'info', title, description }) => {\n const v = variantMap[variant]\n return (\n <div role=\"alert\" style={{\n display: 'flex',\n gap: '0.75rem',\n padding: '1rem',\n borderRadius: '0.5rem',\n borderLeft: `4px solid ${v.border}`,\n backgroundColor: v.bg,\n }}>\n <span style={{ flexShrink: 0, marginTop: '0.125rem', color: v.icon }}>{icons[variant]}</span>\n <div style={{ flex: 1 }}>\n <p style={{ fontWeight: 600, fontSize: '0.875rem', marginBottom: '0.25rem', marginTop: 0, color: v.title }}>{title}</p>\n <p style={{ fontSize: '0.875rem', margin: 0, color: v.desc }}>{description}</p>\n </div>\n </div>\n )\n}\n\nexport default Alert\n\n/*\n * Alert\n *\n * Displays an inline alert banner with an icon, a bold title, and a description line.\n *\n * Props:\n * title (string, required) — short heading for the alert\n * description (string, required) — supporting detail shown below the title\n * variant (\"info\" | \"success\" | \"warning\" | \"danger\", optional) — color and icon style; defaults to \"info\"\n *\n * Usage:\n * <Alert title=\"Saved\" description=\"Your changes have been saved.\" variant=\"success\" />\n */\n","import React, { FC } from 'react'\n\ntype AvatarSize = 'sm' | 'md' | 'lg'\n\ninterface AvatarProps {\n fallback: string\n size?: AvatarSize\n style?: React.CSSProperties\n className?: string\n}\n\nconst sizeMap: Record<AvatarSize, React.CSSProperties> = {\n sm: { width: '2rem', height: '2rem', fontSize: '0.625rem' },\n md: { width: '2.5rem', height: '2.5rem', fontSize: '0.875rem' },\n lg: { width: '4rem', height: '4rem', fontSize: '1.25rem' },\n}\n\nconst Avatar: FC<AvatarProps> = ({ fallback, size = 'md', style, className }) => (\n <div\n className={className}\n aria-label={fallback}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '9999px',\n backgroundColor: 'var(--ds-accent, #f1f5f9)',\n color: 'var(--ds-text-primary, #0f172a)',\n fontWeight: 600,\n flexShrink: 0,\n userSelect: 'none',\n ...sizeMap[size],\n ...style,\n }}\n >\n {fallback}\n </div>\n)\n\nexport default Avatar\n\n/*\n * Avatar\n *\n * Renders a circular container showing initials or a short text fallback.\n *\n * Props:\n * fallback (string, required) — text displayed inside the avatar, typically initials (e.g. \"AB\")\n * size (\"sm\" | \"md\" | \"lg\", optional) — controls the diameter; defaults to \"md\"\n * style (React.CSSProperties, optional) — inline styles for custom background color, etc.\n * className (string, optional) — extra CSS class names\n *\n * Usage:\n * <Avatar fallback=\"JD\" />\n * <Avatar fallback=\"MB\" size=\"lg\" style={{ background: '#6366f1' }} />\n */\n","import React, { FC, ReactNode } from 'react'\n\ntype BadgeVariant = 'default' | 'secondary' | 'outline' | 'danger' | 'success' | 'warning' | 'info'\ntype BadgeSize = 'sm' | 'md' | 'lg'\n\ninterface BadgeProps {\n variant?: BadgeVariant\n size?: BadgeSize\n children: ReactNode\n style?: React.CSSProperties\n}\n\nconst variantMap: Record<BadgeVariant, React.CSSProperties> = {\n default: { backgroundColor: 'var(--ds-primary, #3b82f6)', color: '#fff' },\n secondary: { backgroundColor: 'var(--ds-muted, #f1f5f9)', color: 'var(--ds-text-secondary, #64748b)' },\n outline: { backgroundColor: 'transparent', border: '1px solid var(--ds-border, #e2e8f0)', color: 'var(--ds-text-primary, #0f172a)' },\n danger: { backgroundColor: 'var(--ds-danger, #ef4444)', color: '#fff' },\n success: { backgroundColor: 'var(--ds-success, #22c55e)', color: '#fff' },\n warning: { backgroundColor: 'var(--ds-warning, #f59e0b)', color: '#fff' },\n info: { backgroundColor: 'var(--ds-info, #3b82f6)', color: '#fff' },\n}\n\nconst sizeMap: Record<BadgeSize, React.CSSProperties> = {\n sm: { padding: '0.125rem 0.5rem', fontSize: '0.625rem' },\n md: { padding: '0.25rem 0.625rem', fontSize: '0.75rem' },\n lg: { padding: '0.375rem 0.875rem', fontSize: '0.875rem' },\n}\n\nconst Badge: FC<BadgeProps> = ({ variant = 'default', size = 'md', children, style }) => (\n <span style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.25rem',\n borderRadius: '9999px',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n ...variantMap[variant],\n ...sizeMap[size],\n ...style,\n }}>\n {children}\n </span>\n)\n\nexport default Badge\n\n/*\n * Badge\n *\n * Renders a small inline label used to highlight status, categories, or counts.\n *\n * Props:\n * variant (\"default\" | \"secondary\" | \"outline\" | \"danger\" | \"success\" | \"warning\" | \"info\", optional) — defaults to \"default\"\n * size (\"sm\" | \"md\" | \"lg\", optional) — defaults to \"md\"\n * children (ReactNode, required) — content shown inside the badge\n * style (React.CSSProperties, optional) — inline styles applied to the badge element\n *\n * Usage:\n * <Badge>New</Badge>\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"danger\" size=\"sm\">Overdue</Badge>\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\nimport { ChevronRight } from 'lucide-react'\n\nexport interface BreadcrumbItem {\n label: string\n href?: string\n}\n\ninterface BreadcrumbProps {\n items: BreadcrumbItem[]\n}\n\nconst Breadcrumb: FC<BreadcrumbProps> = ({ items }) => {\n const [hovered, setHovered] = useState<string | null>(null)\n\n return (\n <nav aria-label=\"Breadcrumb\">\n <ol style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n listStyle: 'none',\n padding: 0,\n margin: 0,\n fontSize: '0.875rem',\n }}>\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n const isHovered = hovered === item.label\n return (\n <li key={item.label} style={{ display: 'flex', alignItems: 'center' }}>\n {i > 0 && (\n <ChevronRight\n size={14}\n aria-hidden\n style={{ color: 'var(--ds-text-secondary, #64748b)', margin: '0 0.25rem', flexShrink: 0 }}\n />\n )}\n {isLast || !item.href ? (\n <span style={{\n color: isLast ? 'var(--ds-text-primary, #0f172a)' : 'var(--ds-text-secondary, #64748b)',\n fontWeight: isLast ? 500 : undefined,\n cursor: isLast ? 'default' : undefined,\n }}>\n {item.label}\n </span>\n ) : (\n <a\n href={item.href}\n onMouseEnter={() => setHovered(item.label)}\n onMouseLeave={() => setHovered(null)}\n style={{\n color: 'var(--ds-text-secondary, #64748b)',\n textDecoration: isHovered ? 'underline' : 'none',\n transition: 'color 0.15s',\n }}\n >\n {item.label}\n </a>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n\nexport default Breadcrumb\n\n/*\n * Breadcrumb\n *\n * Renders a navigation breadcrumb trail with chevron separators.\n *\n * Props:\n * items (BreadcrumbItem[], required) — ordered array of crumbs, each with:\n * label (string) — display text\n * href (string, optional) — link target; if omitted renders as plain text\n *\n * Usage:\n * <Breadcrumb items={[{ label: 'Home', href: '/' }, { label: 'Patients', href: '/patients' }, { label: 'Visit summary' }]} />\n */\n","'use client'\n\nimport { LoaderCircle } from \"lucide-react\";\nimport React, { FC, ButtonHTMLAttributes, ReactNode, useState } from \"react\";\n\ntype ButtonVariant = \"solid\" | \"outline\" | \"ghost\" | \"danger\" | \"warning\" | \"info\" | \"success\";\ntype ButtonSize = \"sm\" | \"md\" | \"lg\";\n\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n text?: string;\n loading?: boolean;\n icon?: ReactNode;\n iconPosition?: \"left\" | \"right\";\n // variant shorthand booleans\n outline?: boolean;\n ghost?: boolean;\n danger?: boolean;\n warning?: boolean;\n info?: boolean;\n success?: boolean;\n variant?: ButtonVariant;\n // size shorthand booleans\n small?: boolean;\n large?: boolean;\n size?: ButtonSize;\n}\n\nconst variantStyles: Record<ButtonVariant, React.CSSProperties> = {\n solid: { backgroundColor: 'var(--ds-primary, #3b82f6)', color: '#fff', borderColor: 'transparent' },\n outline: { backgroundColor: 'transparent', color: 'var(--ds-primary, #3b82f6)', borderColor: 'var(--ds-primary, #3b82f6)' },\n ghost: { backgroundColor: 'var(--ds-muted, #f1f5f9)', color: 'var(--ds-text-primary, #0f172a)', borderColor: 'transparent' },\n danger: { backgroundColor: 'var(--ds-danger, #ef4444)', color: '#fff', borderColor: 'transparent' },\n warning: { backgroundColor: 'var(--ds-warning, #f59e0b)', color: '#fff', borderColor: 'transparent' },\n info: { backgroundColor: 'var(--ds-info, #3b82f6)', color: '#fff', borderColor: 'transparent' },\n success: { backgroundColor: 'var(--ds-success, #22c55e)', color: '#fff', borderColor: 'transparent' },\n}\n\nconst variantHoverStyles: Record<ButtonVariant, React.CSSProperties> = {\n solid: { opacity: 0.88 },\n outline: { backgroundColor: 'var(--ds-muted, #f1f5f9)' },\n ghost: { backgroundColor: 'var(--ds-card, #ffffff)' },\n danger: { opacity: 0.88 },\n warning: { opacity: 0.88 },\n info: { opacity: 0.88 },\n success: { opacity: 0.88 },\n}\n\nconst sizeStyles: Record<ButtonSize, React.CSSProperties> = {\n sm: { padding: '0.25rem 0.625rem', fontSize: '0.8rem' },\n md: { padding: '0.5rem 1rem', fontSize: '0.875rem' },\n lg: { padding: '0.75rem 1.5rem', fontSize: '1rem' },\n}\n\nconst Button: FC<ButtonProps> = ({\n text,\n children,\n loading = false,\n disabled = false,\n icon,\n iconPosition = \"left\",\n outline = false,\n ghost = false,\n danger = false,\n warning = false,\n info = false,\n success = false,\n variant,\n small = false,\n large = false,\n size,\n style: styleProp,\n ...props\n}) => {\n const [hovered, setHovered] = useState(false)\n\n const resolvedVariant: ButtonVariant =\n variant ??\n (danger ? \"danger\" :\n warning ? \"warning\" :\n info ? \"info\" :\n success ? \"success\" :\n ghost ? \"ghost\" :\n outline ? \"outline\" :\n \"solid\")\n\n const resolvedSize: ButtonSize = size ?? (small ? \"sm\" : large ? \"lg\" : \"md\")\n const isDisabled = disabled || loading\n const content = children ?? text\n const showIcon = icon && !loading\n\n const computedStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.5rem',\n border: '1px solid transparent',\n borderRadius: '0.375rem',\n fontWeight: 500,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n transition: 'opacity 0.15s, background-color 0.15s',\n opacity: isDisabled ? 0.5 : 1,\n pointerEvents: loading ? 'none' : undefined,\n ...variantStyles[resolvedVariant],\n ...sizeStyles[resolvedSize],\n ...(hovered && !isDisabled ? variantHoverStyles[resolvedVariant] : {}),\n ...styleProp,\n }\n\n return (\n <>\n {/* React 19 hoists and deduplicates this style tag automatically */}\n <style href=\"ds-spin\" precedence=\"low\">{`@keyframes ds-spin { to { transform: rotate(360deg); } }`}</style>\n <button\n disabled={isDisabled}\n style={computedStyle}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n {...props}\n >\n {loading\n ? <LoaderCircle\n aria-hidden\n style={{ width: '1em', height: '1em', animation: 'ds-spin 0.75s linear infinite' }}\n />\n : null}\n {showIcon && iconPosition === \"left\" ? icon : null}\n {content}\n {showIcon && iconPosition === \"right\" ? icon : null}\n </button>\n </>\n )\n}\n\nexport default Button\n\n/*\n * Button\n *\n * Renders a styled button with support for variants, sizes, icons, and a loading state.\n *\n * Props:\n * text (string, optional) — button label; can use children instead\n * loading (boolean, optional) — shows a spinner and disables the button while true\n * disabled (boolean, optional) — disables the button\n * icon (ReactNode, optional) — icon to display alongside the label\n * iconPosition (\"left\" | \"right\", optional) — which side the icon appears on; defaults to \"left\"\n * variant (\"solid\" | \"outline\" | \"ghost\" | \"danger\" | \"warning\" | \"info\" | \"success\", optional) — visual style; defaults to \"solid\"\n * outline (boolean, optional) — shorthand for variant=\"outline\"\n * ghost (boolean, optional) — shorthand for variant=\"ghost\"\n * danger (boolean, optional) — shorthand for variant=\"danger\"\n * warning (boolean, optional) — shorthand for variant=\"warning\"\n * info (boolean, optional) — shorthand for variant=\"info\"\n * success (boolean, optional) — shorthand for variant=\"success\"\n * size (\"sm\" | \"md\" | \"lg\", optional) — button size; defaults to \"md\"\n * small (boolean, optional) — shorthand for size=\"sm\"\n * large (boolean, optional) — shorthand for size=\"lg\"\n * ...rest — any valid HTML button attribute (onClick, type, etc.)\n *\n * Usage:\n * <Button text=\"Save\" onClick={handleSave} />\n *\n * // Danger variant with loading state:\n * <Button danger loading={isDeleting} text=\"Delete\" />\n *\n * // Icon on the right, large size:\n * <Button large icon={<ArrowRight />} iconPosition=\"right\">Continue</Button>\n */\n","import React, { FC, HTMLAttributes } from 'react'\n\nexport const Card: FC<HTMLAttributes<HTMLDivElement>> = ({ style, ...props }) => (\n <div style={{\n border: '1px solid var(--ds-border, #e2e8f0)',\n borderRadius: '0.5rem',\n backgroundColor: 'var(--ds-card, #ffffff)',\n ...style,\n }} {...props} />\n)\n\nexport const CardHeader: FC<HTMLAttributes<HTMLDivElement>> = ({ style, ...props }) => (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.375rem',\n padding: '1.5rem 1.5rem 0',\n ...style,\n }} {...props} />\n)\n\nexport const CardTitle: FC<HTMLAttributes<HTMLHeadingElement>> = ({ style, ...props }) => (\n <h3 style={{\n fontSize: '1rem',\n fontWeight: 600,\n color: 'var(--ds-text-primary, #0f172a)',\n margin: 0,\n lineHeight: 1.4,\n ...style,\n }} {...props} />\n)\n\nexport const CardDescription: FC<HTMLAttributes<HTMLParagraphElement>> = ({ style, ...props }) => (\n <p style={{\n fontSize: '0.875rem',\n color: 'var(--ds-text-secondary, #64748b)',\n margin: 0,\n ...style,\n }} {...props} />\n)\n\nexport const CardContent: FC<HTMLAttributes<HTMLDivElement>> = ({ style, ...props }) => (\n <div style={{ padding: '1.5rem', ...style }} {...props} />\n)\n\nexport const CardFooter: FC<HTMLAttributes<HTMLDivElement>> = ({ style, ...props }) => (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n padding: '0 1.5rem 1.5rem',\n ...style,\n }} {...props} />\n)\n\n/*\n * Card / CardHeader / CardTitle / CardDescription / CardContent / CardFooter\n *\n * Composable container components for card-style layouts.\n *\n * Usage:\n * <Card>\n * <CardHeader>\n * <CardTitle>Patient Summary</CardTitle>\n * <CardDescription>Last visit on 12 May 2026</CardDescription>\n * </CardHeader>\n * <CardContent><p>Diagnosis: Hypertension</p></CardContent>\n * <CardFooter><Button text=\"View full record\" /></CardFooter>\n * </Card>\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\n\ninterface CheckboxProps {\n label?: string\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n id?: string\n onChange?: (checked: boolean) => void\n}\n\nconst Checkbox: FC<CheckboxProps> = ({\n label,\n checked,\n defaultChecked = false,\n disabled,\n id,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultChecked)\n const isChecked = checked !== undefined ? checked : internal\n\n const handleChange = () => {\n if (disabled) return\n const next = !isChecked\n setInternal(next)\n onChange?.(next)\n }\n\n return (\n <label htmlFor={id} style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.5rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n opacity: disabled ? 0.5 : 1,\n }}>\n <input\n type=\"checkbox\"\n id={id}\n checked={isChecked}\n disabled={disabled}\n onChange={handleChange}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0 }}\n />\n <span style={{\n width: '1.125rem',\n height: '1.125rem',\n border: `2px solid ${isChecked ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.25rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: 'background-color 0.15s, border-color 0.15s',\n backgroundColor: isChecked ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-card, #fff)',\n }}>\n {isChecked && (\n <svg viewBox=\"0 0 12 10\" fill=\"none\" style={{ width: '0.625rem', height: '0.625rem' }}>\n <path d=\"M1 5l3.5 3.5L11 1\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </span>\n {label && (\n <span style={{ fontSize: '0.875rem', color: 'var(--ds-text-primary, #0f172a)' }}>{label}</span>\n )}\n </label>\n )\n}\n\nexport default Checkbox\n\n/*\n * Checkbox\n *\n * Renders a styled checkbox — controlled or uncontrolled — with an optional text label.\n *\n * Props:\n * label (string, optional) — text displayed next to the checkbox\n * checked (boolean, optional) — controlled checked state\n * defaultChecked (boolean, optional) — initial state for uncontrolled use; defaults to false\n * disabled (boolean, optional) — prevents interaction\n * id (string, optional) — HTML id for the underlying input\n * onChange ((checked: boolean) => void, optional) — called with the new boolean on each change\n *\n * Usage:\n * <Checkbox label=\"Accept terms\" onChange={val => setAccepted(val)} />\n * <Checkbox checked={isChecked} onChange={setIsChecked} label=\"Remember me\" />\n */\n","'use client'\n\nimport { Check, Copy } from 'lucide-react'\nimport React, { FC, useState } from 'react'\n\ninterface CopyButtonProps {\n text: string\n}\n\nconst CopyButton: FC<CopyButtonProps> = ({ text }) => {\n const [copied, setCopied] = useState(false)\n const [hovered, setHovered] = useState(false)\n\n const handleCopy = () => {\n navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <button\n onClick={handleCopy}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-label={copied ? 'Copied' : `Copy ${text}`}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0.25rem',\n border: 'none',\n borderRadius: '0.25rem',\n backgroundColor: hovered ? 'var(--ds-accent, #f1f5f9)' : 'transparent',\n color: hovered ? 'var(--ds-text-primary, #0f172a)' : 'var(--ds-text-secondary, #64748b)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n }}\n >\n {copied\n ? <Check style={{ width: '1rem', height: '1rem' }} />\n : <Copy style={{ width: '1rem', height: '1rem' }} />\n }\n </button>\n )\n}\n\nexport default CopyButton\n\n/*\n * CopyButton\n *\n * Renders an icon button that copies a string to the clipboard; shows a checkmark for 2 seconds after copying.\n *\n * Props:\n * text (string, required) — the string that gets copied to the clipboard when clicked\n *\n * Usage:\n * <CopyButton text=\"npm install @efiche/design\" />\n */\n","'use client'\n\nimport { Upload } from 'lucide-react'\nimport React, { FC, useRef, useState } from 'react'\n\ninterface FileUploadProps {\n accept?: string\n multiple?: boolean\n disabled?: boolean\n onFileSelect?: (files: FileList) => void\n}\n\nconst FileUpload: FC<FileUploadProps> = ({ accept, multiple, disabled, onFileSelect }) => {\n const [isDragging, setIsDragging] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const [fileNames, setFileNames] = useState<string[]>([])\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleFiles = (list: FileList) => {\n setFileNames(Array.from(list).map(f => f.name))\n onFileSelect?.(list)\n }\n\n const isActive = isDragging || isHovered\n\n return (\n <div\n onClick={() => !disabled && inputRef.current?.click()}\n onMouseEnter={() => !disabled && setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onDragOver={(e) => { e.preventDefault(); setIsDragging(true) }}\n onDragLeave={() => setIsDragging(false)}\n onDrop={(e) => {\n e.preventDefault()\n setIsDragging(false)\n if (!disabled && e.dataTransfer.files.length) handleFiles(e.dataTransfer.files)\n }}\n style={{\n border: `2px dashed ${isActive ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.5rem',\n padding: '2rem',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '0.5rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n backgroundColor: isActive ? 'var(--ds-primary-50, #eff6ff)' : 'var(--ds-muted, #f1f5f9)',\n transition: 'border-color 0.15s, background-color 0.15s',\n textAlign: 'center',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n style={{ display: 'none' }}\n onChange={(e) => e.target.files && handleFiles(e.target.files)}\n />\n <Upload size={32} style={{ color: 'var(--ds-text-secondary, #64748b)' }} />\n {fileNames.length > 0\n ? <p style={{ fontSize: '0.875rem', color: 'var(--ds-primary, #3b82f6)', fontWeight: 500, margin: 0 }}>\n {fileNames.join(', ')}\n </p>\n : <p style={{ fontSize: '0.875rem', color: 'var(--ds-text-secondary, #64748b)', margin: 0 }}>\n <strong>Click to upload</strong> or drag and drop\n </p>\n }\n </div>\n )\n}\n\nexport default FileUpload\n\n/*\n * FileUpload\n *\n * Renders a click-to-browse and drag-and-drop file upload zone.\n *\n * Props:\n * accept (string, optional) — file type filter (e.g. \"image/*\", \".pdf\")\n * multiple (boolean, optional) — allows selecting more than one file\n * disabled (boolean, optional) — prevents clicking and dropping\n * onFileSelect ((files: FileList) => void, optional) — called whenever files are chosen\n *\n * Usage:\n * <FileUpload onFileSelect={files => uploadFiles(files)} />\n * <FileUpload accept=\"image/*\" multiple onFileSelect={handleImages} />\n */\n","import React, { FC, InputHTMLAttributes, ReactNode } from 'react'\n\ninterface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n error?: boolean\n success?: boolean\n leftIcon?: ReactNode\n rightIcon?: ReactNode\n}\n\nconst inputCSS = `\n[data-ds-input]::placeholder { color: var(--ds-text-secondary, #64748b); }\n[data-ds-input]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }\n[data-ds-input]:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--ds-muted, #f1f5f9); }\n[data-ds-input][data-error=\"true\"]:focus { border-color: var(--ds-danger, #ef4444); box-shadow: 0 0 0 3px rgb(239 68 68 / 0.15); }\n[data-ds-input][data-success=\"true\"]:focus { border-color: var(--ds-success, #22c55e); box-shadow: 0 0 0 3px rgb(34 197 94 / 0.15); }\n`\n\nconst Input: FC<InputProps> = ({ error, success, leftIcon, rightIcon, style, ...props }) => (\n <>\n <style href=\"ds-input\" precedence=\"low\">{inputCSS}</style>\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center', width: '100%' }}>\n {leftIcon && (\n <span style={{\n position: 'absolute',\n left: '0.625rem',\n display: 'flex',\n alignItems: 'center',\n color: 'var(--ds-text-secondary, #64748b)',\n pointerEvents: 'none',\n }}>\n {leftIcon}\n </span>\n )}\n <input\n data-ds-input=\"\"\n data-error={error ? 'true' : undefined}\n data-success={success ? 'true' : undefined}\n style={{\n width: '100%',\n height: '2.25rem',\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: leftIcon ? '2.25rem' : '0.75rem',\n paddingRight: rightIcon ? '2.25rem' : '0.75rem',\n border: `1px solid ${error ? 'var(--ds-danger, #ef4444)' : success ? 'var(--ds-success, #22c55e)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n backgroundColor: 'var(--ds-card, #fff)',\n color: 'var(--ds-text-primary, #0f172a)',\n fontFamily: 'inherit',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n ...style,\n }}\n {...props}\n />\n {rightIcon && (\n <span style={{\n position: 'absolute',\n right: '0.625rem',\n display: 'flex',\n alignItems: 'center',\n color: 'var(--ds-text-secondary, #64748b)',\n pointerEvents: 'none',\n }}>\n {rightIcon}\n </span>\n )}\n </div>\n </>\n)\n\nexport default Input\n\n/*\n * Input\n *\n * Renders a text input with optional left/right icons and error or success border states.\n *\n * Props:\n * error (boolean, optional) — applies an error border style\n * success (boolean, optional) — applies a success border style\n * leftIcon (ReactNode, optional) — icon inside the left side\n * rightIcon (ReactNode, optional) — icon inside the right side\n * ...rest — any valid HTML input attribute (placeholder, value, onChange, disabled, etc.)\n *\n * Usage:\n * <Input placeholder=\"Search...\" onChange={handleChange} />\n * <Input leftIcon={<SearchIcon />} error placeholder=\"Not found\" />\n */\n","import React, { FC, LabelHTMLAttributes } from 'react'\n\ninterface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean\n}\n\nconst Label: FC<LabelProps> = ({ children, required, style, ...props }) => (\n <label style={{\n display: 'block',\n fontSize: '0.875rem',\n fontWeight: 500,\n color: 'var(--ds-text-primary, #0f172a)',\n marginBottom: '0.375rem',\n ...style,\n }} {...props}>\n {children}\n {required && (\n <span style={{ color: 'var(--ds-danger, #ef4444)', marginLeft: '0.25rem' }}>*</span>\n )}\n </label>\n)\n\nexport default Label\n\n/*\n * Label\n *\n * Renders a styled form label, optionally appending a red asterisk when the field is required.\n *\n * Props:\n * required (boolean, optional) — appends a \"*\" marker after the label text\n * ...rest — any valid HTML label attribute (htmlFor, etc.)\n *\n * Usage:\n * <Label htmlFor=\"email\">Email</Label>\n * <Label htmlFor=\"name\" required>Full name</Label>\n */\n","'use client'\n\nimport { Eye, EyeOff } from 'lucide-react'\nimport React, { FC, InputHTMLAttributes, useState } from 'react'\nimport Input from '../Input/Input'\n\ntype PasswordInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'>\n\nconst PasswordInput: FC<PasswordInputProps> = (props) => {\n const [visible, setVisible] = useState(false)\n\n return (\n <Input\n {...props}\n type={visible ? 'text' : 'password'}\n rightIcon={\n <button\n type=\"button\"\n onClick={() => setVisible(v => !v)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', pointerEvents: 'all' }}\n tabIndex={-1}\n >\n {visible ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n }\n />\n )\n}\n\nexport default PasswordInput\n\n/*\n * PasswordInput\n *\n * Renders a password input with an eye/eye-off toggle button that shows or hides the typed text.\n *\n * Props:\n * ...rest — any valid HTML input attribute except \"type\" (e.g. placeholder, value, onChange, disabled)\n * also accepts Input's error and success props for border states\n *\n * Usage:\n * <PasswordInput placeholder=\"Enter password\" onChange={e => setPassword(e.target.value)} />\n *\n * // With error state:\n * <PasswordInput value={password} onChange={handleChange} error />\n */\n","import React, { FC } from 'react'\n\ninterface ProgressProps {\n value?: number\n}\n\nconst Progress: FC<ProgressProps> = ({ value = 0 }) => {\n const pct = Math.min(100, Math.max(0, value))\n return (\n <div\n role=\"progressbar\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n style={{\n width: '100%',\n height: '0.5rem',\n backgroundColor: 'var(--ds-border, #e2e8f0)',\n borderRadius: '9999px',\n overflow: 'hidden',\n }}\n >\n <div style={{\n height: '100%',\n width: `${pct}%`,\n backgroundColor: 'var(--ds-primary, #3b82f6)',\n borderRadius: '9999px',\n transition: 'width 0.3s ease',\n }} />\n </div>\n )\n}\n\nexport default Progress\n\n/*\n * Progress\n *\n * Displays a horizontal progress bar that fills from left to right based on a 0–100 value.\n *\n * Props:\n * value (number, optional) — current progress percentage (0–100); clamped to that range; defaults to 0\n *\n * Usage:\n * <Progress value={60} />\n * <Progress value={uploadPercent} />\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\n\ninterface RadioOption {\n value: string\n label: string\n}\n\ninterface RadioGroupProps {\n options: RadioOption[]\n name: string\n value?: string\n defaultValue?: string\n disabled?: boolean\n onChange?: (value: string) => void\n}\n\nconst RadioGroup: FC<RadioGroupProps> = ({\n options,\n name,\n value,\n defaultValue = '',\n disabled,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultValue)\n const selected = value !== undefined ? value : internal\n\n const handleChange = (val: string) => {\n if (disabled) return\n setInternal(val)\n onChange?.(val)\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n {options.map((option) => {\n const isSelected = selected === option.value\n return (\n <label key={option.value} style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.5rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n opacity: disabled ? 0.5 : 1,\n }}>\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={isSelected}\n disabled={disabled}\n onChange={() => handleChange(option.value)}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0 }}\n />\n <span style={{\n width: '1.125rem',\n height: '1.125rem',\n borderRadius: '9999px',\n border: `2px solid ${isSelected ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)'}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n backgroundColor: 'var(--ds-card, #fff)',\n transition: 'border-color 0.15s',\n }}>\n {isSelected && (\n <span style={{\n width: '0.5rem',\n height: '0.5rem',\n borderRadius: '9999px',\n backgroundColor: 'var(--ds-primary, #3b82f6)',\n }} />\n )}\n </span>\n <span style={{ fontSize: '0.875rem', color: 'var(--ds-text-primary, #0f172a)' }}>\n {option.label}\n </span>\n </label>\n )\n })}\n </div>\n )\n}\n\nexport default RadioGroup\n\n/*\n * RadioGroup\n *\n * Renders a group of radio buttons from an array of options; controlled or uncontrolled.\n *\n * Props:\n * options (RadioOption[], required) — array of { value, label } items\n * name (string, required) — shared name attribute for the radio inputs\n * value (string, optional) — controlled selected value\n * defaultValue (string, optional) — initial value for uncontrolled use; defaults to \"\"\n * disabled (boolean, optional) — disables all options\n * onChange ((value: string) => void, optional) — called with the selected value on change\n *\n * Usage:\n * <RadioGroup name=\"size\" options={[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]} onChange={setSize} />\n */\n","'use client'\n\nimport { Check, ChevronDown } from 'lucide-react'\nimport React, { FC, useEffect, useRef, useState } from 'react'\n\ninterface SelectOption {\n value: string\n label: string\n}\n\ninterface SelectProps {\n options: SelectOption[]\n value?: string\n defaultValue?: string\n placeholder?: string\n disabled?: boolean\n onChange?: (value: string) => void\n}\n\nconst selectCSS = `\n[data-ds-select-trigger]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }\n`\n\nconst Select: FC<SelectProps> = ({\n options,\n value,\n defaultValue = '',\n placeholder = 'Choose an option',\n disabled,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultValue)\n const [open, setOpen] = useState(false)\n const [hoveredOption, setHoveredOption] = useState<string | null>(null)\n const ref = useRef<HTMLDivElement>(null)\n\n const selected = value !== undefined ? value : internal\n const selectedLabel = options.find(o => o.value === selected)?.label\n\n const handleSelect = (val: string) => {\n setInternal(val)\n setOpen(false)\n onChange?.(val)\n }\n\n useEffect(() => {\n const handleOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handleOutside)\n return () => document.removeEventListener('mousedown', handleOutside)\n }, [])\n\n return (\n <>\n <style href=\"ds-select\" precedence=\"low\">{selectCSS}</style>\n <div ref={ref} style={{\n position: 'relative',\n width: '100%',\n opacity: disabled ? 0.5 : 1,\n pointerEvents: disabled ? 'none' : undefined,\n }}>\n <button\n type=\"button\"\n data-ds-select-trigger=\"\"\n onClick={() => !disabled && setOpen(o => !o)}\n disabled={disabled}\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${open ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n backgroundColor: 'var(--ds-card, #fff)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '0.5rem',\n boxShadow: open ? '0 0 0 3px rgb(59 130 246 / 0.15)' : 'none',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n textAlign: 'left',\n fontFamily: 'inherit',\n }}\n >\n <span style={{ color: selectedLabel ? 'var(--ds-text-primary, #0f172a)' : 'var(--ds-text-secondary, #64748b)' }}>\n {selectedLabel ?? placeholder}\n </span>\n <ChevronDown\n size={16}\n style={{\n flexShrink: 0,\n color: 'var(--ds-text-secondary, #64748b)',\n transition: 'transform 0.15s',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </button>\n {open && (\n <div style={{\n position: 'absolute',\n top: 'calc(100% + 0.25rem)',\n left: 0,\n right: 0,\n zIndex: 50,\n backgroundColor: 'var(--ds-card, #fff)',\n border: '1px solid var(--ds-border, #e2e8f0)',\n borderRadius: '0.375rem',\n boxShadow: '0 10px 15px -3px rgb(0 0 0 / 0.1)',\n overflow: 'hidden',\n }}>\n {options.map((option) => {\n const isSelected = selected === option.value\n const isHovered = hoveredOption === option.value\n return (\n <div\n key={option.value}\n onClick={() => handleSelect(option.value)}\n onMouseEnter={() => setHoveredOption(option.value)}\n onMouseLeave={() => setHoveredOption(null)}\n style={{\n padding: '0.5rem 0.75rem',\n fontSize: '0.875rem',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n color: 'var(--ds-text-primary, #0f172a)',\n backgroundColor: isSelected || isHovered ? 'var(--ds-muted, #f1f5f9)' : 'transparent',\n fontWeight: isSelected ? 500 : undefined,\n transition: 'background-color 0.1s',\n }}\n >\n {isSelected\n ? <Check size={14} style={{ color: 'var(--ds-primary, #3b82f6)', flexShrink: 0 }} />\n : <span style={{ width: 14, flexShrink: 0 }} />\n }\n {option.label}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </>\n )\n}\n\nexport default Select\n\n/*\n * Select\n *\n * Renders a custom dropdown — controlled or uncontrolled — for picking one option.\n *\n * Props:\n * options (SelectOption[], required) — array of { value, label } items\n * value (string, optional) — controlled selected value\n * defaultValue (string, optional) — initial value for uncontrolled use; defaults to \"\"\n * placeholder (string, optional) — text shown when nothing is selected; defaults to \"Choose an option\"\n * disabled (boolean, optional) — prevents opening the dropdown\n * onChange ((value: string) => void, optional) — called with the selected value on pick\n *\n * Usage:\n * <Select options={[{ value: 'fr', label: 'French' }, { value: 'en', label: 'English' }]} onChange={setLanguage} />\n */\n","import React, { FC } from 'react'\n\ninterface SkeletonProps {\n height?: string\n width?: string\n circle?: boolean\n}\n\nconst Skeleton: FC<SkeletonProps> = ({ height = '1rem', width = '100%', circle = false }) => (\n <>\n <style href=\"ds-skeleton\" precedence=\"low\">{`\n @keyframes ds-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }\n [data-ds-skeleton] { animation: ds-pulse 1.5s ease-in-out infinite; }\n `}</style>\n <div\n data-ds-skeleton=\"\"\n aria-hidden=\"true\"\n style={{\n height,\n width,\n backgroundColor: 'var(--ds-muted, #f1f5f9)',\n borderRadius: circle ? '9999px' : '0.375rem',\n }}\n />\n </>\n)\n\nexport default Skeleton\n\n/*\n * Skeleton\n *\n * Renders an animated placeholder block for loading states.\n *\n * Props:\n * height (string, optional) — CSS height; defaults to \"1rem\"\n * width (string, optional) — CSS width; defaults to \"100%\"\n * circle (boolean, optional) — makes the block fully round for avatar placeholders\n *\n * Usage:\n * <Skeleton width=\"200px\" height=\"1rem\" />\n * <Skeleton circle width=\"40px\" height=\"40px\" />\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\n\ninterface SliderProps {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n onChange?: (value: number) => void\n}\n\nconst sliderCSS = `\n[data-ds-slider] {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 0.375rem;\n border-radius: 9999px;\n outline: none;\n cursor: pointer;\n background: linear-gradient(\n to right,\n var(--ds-primary, #3b82f6) 0%,\n var(--ds-primary, #3b82f6) var(--fill, 50%),\n var(--ds-border, #e2e8f0) var(--fill, 50%),\n var(--ds-border, #e2e8f0) 100%\n );\n}\n[data-ds-slider]::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 9999px;\n background-color: var(--ds-primary, #3b82f6);\n cursor: pointer;\n border: 2px solid #fff;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2);\n transition: transform 0.1s;\n}\n[data-ds-slider]::-webkit-slider-thumb:hover { transform: scale(1.2); }\n[data-ds-slider]::-moz-range-thumb {\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 9999px;\n background-color: var(--ds-primary, #3b82f6);\n cursor: pointer;\n border: 2px solid #fff;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2);\n}\n[data-ds-slider]:disabled { cursor: not-allowed; }\n`\n\nconst Slider: FC<SliderProps> = ({\n value,\n defaultValue = 50,\n min = 0,\n max = 100,\n step = 1,\n disabled,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultValue)\n const current = value !== undefined ? value : internal\n const fill = `${((current - min) / (max - min)) * 100}%`\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = Number(e.target.value)\n setInternal(val)\n onChange?.(val)\n }\n\n return (\n <>\n <style href=\"ds-slider\" precedence=\"low\">{sliderCSS}</style>\n <div style={{\n width: '100%',\n padding: '0.25rem 0',\n opacity: disabled ? 0.5 : 1,\n }}>\n <input\n type=\"range\"\n data-ds-slider=\"\"\n min={min}\n max={max}\n step={step}\n value={current}\n disabled={disabled}\n onChange={handleChange}\n style={{ '--fill': fill } as React.CSSProperties}\n />\n </div>\n </>\n )\n}\n\nexport default Slider\n\n/*\n * Slider\n *\n * Renders a range slider with a filled track — controlled or uncontrolled.\n *\n * Props:\n * value (number, optional) — controlled current value\n * defaultValue (number, optional) — initial value for uncontrolled use; defaults to 50\n * min (number, optional) — minimum value; defaults to 0\n * max (number, optional) — maximum value; defaults to 100\n * step (number, optional) — increment between values; defaults to 1\n * disabled (boolean, optional) — prevents interaction\n * onChange ((value: number) => void, optional) — called with the new value on each change\n *\n * Usage:\n * <Slider onChange={val => setVolume(val)} />\n * <Slider value={opacity} min={0} max={1} step={0.01} onChange={setOpacity} />\n */\n","import React, { FC } from 'react'\nimport { Loader2 } from 'lucide-react'\n\ntype SpinnerSize = 'sm' | 'md' | 'lg'\n\ninterface SpinnerProps {\n size?: SpinnerSize\n}\n\nconst sizePx: Record<SpinnerSize, number> = { sm: 16, md: 24, lg: 32 }\n\nconst Spinner: FC<SpinnerProps> = ({ size = 'md' }) => (\n <>\n <style href=\"ds-spin\" precedence=\"low\">{`@keyframes ds-spin { to { transform: rotate(360deg); } }`}</style>\n <Loader2\n size={sizePx[size]}\n aria-label=\"Loading\"\n style={{ color: 'var(--ds-primary, #3b82f6)', animation: 'ds-spin 0.75s linear infinite' }}\n />\n </>\n)\n\nexport default Spinner\n\n/*\n * Spinner\n *\n * Displays an animated loading indicator at one of three sizes.\n *\n * Props:\n * size (\"sm\" | \"md\" | \"lg\", optional) — sm = 16px, md = 24px, lg = 32px; defaults to \"md\"\n *\n * Usage:\n * <Spinner />\n * {isLoading && <Spinner size=\"lg\" />}\n */\n","'use client'\n\nimport React, { FC, useState } from 'react'\n\ninterface SwitchProps {\n label?: string\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n id?: string\n onChange?: (checked: boolean) => void\n}\n\nconst Switch: FC<SwitchProps> = ({\n label,\n checked,\n defaultChecked = false,\n disabled,\n id,\n onChange,\n}) => {\n const [internal, setInternal] = useState(defaultChecked)\n const isOn = checked !== undefined ? checked : internal\n\n const handleToggle = () => {\n if (disabled) return\n const next = !isOn\n setInternal(next)\n onChange?.(next)\n }\n\n return (\n <label htmlFor={id} style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.625rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n opacity: disabled ? 0.5 : 1,\n }}>\n <input\n type=\"checkbox\"\n id={id}\n checked={isOn}\n disabled={disabled}\n onChange={handleToggle}\n style={{ position: 'absolute', opacity: 0, width: 0, height: 0 }}\n />\n <span style={{\n width: '2.75rem',\n height: '1.5rem',\n borderRadius: '9999px',\n backgroundColor: isOn ? 'var(--ds-primary, #3b82f6)' : 'var(--ds-border, #e2e8f0)',\n position: 'relative',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n }}>\n <span style={{\n position: 'absolute',\n top: '0.175rem',\n left: '0.175rem',\n width: '1.15rem',\n height: '1.15rem',\n borderRadius: '9999px',\n backgroundColor: '#fff',\n boxShadow: '0 1px 3px 0 rgb(0 0 0 / 0.15)',\n transition: 'transform 0.2s',\n transform: isOn ? 'translateX(1.25rem)' : 'translateX(0)',\n }} />\n </span>\n {label && (\n <span style={{ fontSize: '0.875rem', color: 'var(--ds-text-primary, #0f172a)' }}>{label}</span>\n )}\n </label>\n )\n}\n\nexport default Switch\n\n/*\n * Switch\n *\n * Renders a toggle switch — controlled or uncontrolled — with an optional text label.\n *\n * Props:\n * label (string, optional) — text displayed next to the switch\n * checked (boolean, optional) — controlled on/off state\n * defaultChecked (boolean, optional) — initial state for uncontrolled use; defaults to false\n * disabled (boolean, optional) — prevents interaction\n * id (string, optional) — HTML id for the underlying input\n * onChange ((checked: boolean) => void, optional) — called with the new boolean on each toggle\n *\n * Usage:\n * <Switch label=\"Enable notifications\" onChange={setEnabled} />\n * <Switch checked={darkMode} onChange={setDarkMode} label=\"Dark mode\" />\n */\n","'use client'\n\nimport React, { FC, HTMLAttributes, ThHTMLAttributes, TdHTMLAttributes, useState } from 'react'\n\nconst tableCSS = `\n[data-ds-table-row]:hover [data-ds-table-cell] { background-color: var(--ds-muted, #f1f5f9); }\n`\n\nexport const Table: FC<HTMLAttributes<HTMLTableElement>> = ({ style, ...props }) => (\n <>\n <style href=\"ds-table\" precedence=\"low\">{tableCSS}</style>\n <div style={{\n width: '100%',\n overflowX: 'auto',\n border: '1px solid var(--ds-border, #e2e8f0)',\n borderRadius: '0.5rem',\n }}>\n <table style={{\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '0.875rem',\n ...style,\n }} {...props} />\n </div>\n </>\n)\n\nexport const TableHead: FC<HTMLAttributes<HTMLTableSectionElement>> = (props) => (\n <thead {...props} />\n)\n\nexport const TableBody: FC<HTMLAttributes<HTMLTableSectionElement>> = (props) => (\n <tbody {...props} />\n)\n\nexport const TableRow: FC<HTMLAttributes<HTMLTableRowElement>> = ({ style, ...props }) => (\n <tr data-ds-table-row=\"\" style={style} {...props} />\n)\n\nexport const TableHeader: FC<ThHTMLAttributes<HTMLTableCellElement>> = ({ style, ...props }) => (\n <th style={{\n padding: '0.75rem 1rem',\n textAlign: 'left',\n fontWeight: 500,\n color: 'var(--ds-text-secondary, #64748b)',\n backgroundColor: 'var(--ds-muted, #f1f5f9)',\n borderBottom: '1px solid var(--ds-border, #e2e8f0)',\n whiteSpace: 'nowrap',\n ...style,\n }} {...props} />\n)\n\nexport const TableCell: FC<TdHTMLAttributes<HTMLTableCellElement>> = ({ style, ...props }) => (\n <td\n data-ds-table-cell=\"\"\n style={{\n padding: '0.75rem 1rem',\n borderBottom: '1px solid var(--ds-border, #e2e8f0)',\n color: 'var(--ds-text-primary, #0f172a)',\n transition: 'background-color 0.1s',\n ...style,\n }}\n {...props}\n />\n)\n\n/*\n * Table / TableHead / TableBody / TableRow / TableHeader / TableCell\n *\n * Composable table components with consistent styles.\n *\n * Usage:\n * <Table>\n * <TableHead><TableRow><TableHeader>Name</TableHeader><TableHeader>Status</TableHeader></TableRow></TableHead>\n * <TableBody><TableRow><TableCell>Visit 001</TableCell><TableCell>Completed</TableCell></TableRow></TableBody>\n * </Table>\n */\n","'use client'\n\nimport React, { FC, ReactNode, useState } from 'react'\n\nexport interface TabItem {\n value: string\n label: string\n content: ReactNode\n icon?: ReactNode\n}\n\ninterface TabsProps {\n tabs: TabItem[]\n defaultValue?: string\n}\n\nconst Tabs: FC<TabsProps> = ({ tabs, defaultValue }) => {\n const [active, setActive] = useState(defaultValue ?? tabs[0]?.value ?? '')\n const [hovered, setHovered] = useState<string | null>(null)\n const activeTab = tabs.find(t => t.value === active)\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <div role=\"tablist\" style={{\n display: 'inline-flex',\n backgroundColor: 'var(--ds-muted, #f1f5f9)',\n borderRadius: '0.5rem',\n padding: '0.25rem',\n gap: '0.125rem',\n }}>\n {tabs.map(tab => {\n const isActive = active === tab.value\n const isHovered = hovered === tab.value\n return (\n <button\n key={tab.value}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => setActive(tab.value)}\n onMouseEnter={() => setHovered(tab.value)}\n onMouseLeave={() => setHovered(null)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.375rem',\n padding: '0.375rem 0.75rem',\n fontSize: '0.875rem',\n fontWeight: 500,\n borderRadius: '0.375rem',\n background: isActive ? 'var(--ds-card, #ffffff)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: isActive || isHovered ? 'var(--ds-text-primary, #0f172a)' : 'var(--ds-text-secondary, #64748b)',\n boxShadow: isActive ? '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)' : 'none',\n transition: 'color 0.15s, background-color 0.15s, box-shadow 0.15s',\n whiteSpace: 'nowrap',\n }}\n >\n {tab.icon && <span style={{ display: 'flex', alignItems: 'center' }}>{tab.icon}</span>}\n {tab.label}\n </button>\n )\n })}\n </div>\n <div role=\"tabpanel\" style={{\n paddingTop: '1rem',\n fontSize: '0.875rem',\n color: 'var(--ds-text-secondary, #64748b)',\n }}>\n {activeTab?.content}\n </div>\n </div>\n )\n}\n\nexport default Tabs\n\n/*\n * Tabs\n *\n * Renders a tab bar and displays the content panel of the active tab.\n *\n * Props:\n * tabs (TabItem[], required) — array of { value, label, content, icon? }\n * defaultValue (string, optional) — value of the tab active on first render; defaults to the first tab\n *\n * Usage:\n * <Tabs tabs={[{ value: 'overview', label: 'Overview', content: <Overview /> }, { value: 'settings', label: 'Settings', content: <Settings /> }]} />\n */\n","import React, { FC, TextareaHTMLAttributes } from 'react'\n\ninterface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean\n}\n\nconst textareaCSS = `\n[data-ds-textarea]::placeholder { color: var(--ds-text-secondary, #64748b); }\n[data-ds-textarea]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }\n[data-ds-textarea]:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--ds-muted, #f1f5f9); }\n[data-ds-textarea][data-error=\"true\"] { border-color: var(--ds-danger, #ef4444); }\n[data-ds-textarea][data-error=\"true\"]:focus { border-color: var(--ds-danger, #ef4444); box-shadow: 0 0 0 3px rgb(239 68 68 / 0.15); }\n`\n\nconst Textarea: FC<TextareaProps> = ({ error, style, ...props }) => (\n <>\n <style href=\"ds-textarea\" precedence=\"low\">{textareaCSS}</style>\n <textarea\n data-ds-textarea=\"\"\n data-error={error ? 'true' : undefined}\n style={{\n width: '100%',\n padding: '0.5rem 0.75rem',\n border: `1px solid ${error ? 'var(--ds-danger, #ef4444)' : 'var(--ds-border, #e2e8f0)'}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n backgroundColor: 'var(--ds-card, #fff)',\n color: 'var(--ds-text-primary, #0f172a)',\n fontFamily: 'inherit',\n resize: 'vertical',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n minHeight: '6rem',\n boxSizing: 'border-box',\n ...style,\n }}\n {...props}\n />\n </>\n)\n\nexport default Textarea\n\n/*\n * Textarea\n *\n * Renders a styled multi-line text area with an optional error border state.\n *\n * Props:\n * error (boolean, optional) — applies an error border style\n * ...rest — any valid HTML textarea attribute (placeholder, value, onChange, rows, disabled, etc.)\n *\n * Usage:\n * <Textarea placeholder=\"Write your message...\" rows={4} onChange={handleChange} />\n * <Textarea error value={notes} onChange={e => setNotes(e.target.value)} />\n */\n","'use client'\n\nimport React, { FC, ReactNode, useState } from 'react'\n\ninterface TooltipProps {\n content: string\n children: ReactNode\n position?: 'top' | 'bottom' | 'left' | 'right'\n}\n\ntype TooltipPosition = 'top' | 'bottom' | 'left' | 'right'\n\nconst positionStyle: Record<TooltipPosition, React.CSSProperties> = {\n top: { bottom: 'calc(100% + 8px)', left: '50%', transform: 'translateX(-50%)' },\n bottom: { top: 'calc(100% + 8px)', left: '50%', transform: 'translateX(-50%)' },\n left: { right: 'calc(100% + 8px)', top: '50%', transform: 'translateY(-50%)' },\n right: { left: 'calc(100% + 8px)', top: '50%', transform: 'translateY(-50%)' },\n}\n\nconst tooltipCSS = `\n[data-ds-tt]::before {\n content: '';\n position: absolute;\n border: 5px solid transparent;\n}\n[data-ds-tt=\"top\"]::before { top: 100%; left: 50%; transform: translateX(-50%); border-top-color: var(--ds-tooltip-bg, #0f172a); }\n[data-ds-tt=\"bottom\"]::before { bottom: 100%; left: 50%; transform: translateX(-50%); border-bottom-color: var(--ds-tooltip-bg, #0f172a); }\n[data-ds-tt=\"left\"]::before { left: 100%; top: 50%; transform: translateY(-50%); border-left-color: var(--ds-tooltip-bg, #0f172a); }\n[data-ds-tt=\"right\"]::before { right: 100%; top: 50%; transform: translateY(-50%); border-right-color: var(--ds-tooltip-bg, #0f172a); }\n`\n\nconst Tooltip: FC<TooltipProps> = ({ content, children, position = 'top' }) => {\n const [visible, setVisible] = useState(false)\n\n return (\n <>\n <style href=\"ds-tooltip\" precedence=\"low\">{tooltipCSS}</style>\n <span\n style={{ position: 'relative', display: 'inline-flex' }}\n onMouseEnter={() => setVisible(true)}\n onMouseLeave={() => setVisible(false)}\n onFocus={() => setVisible(true)}\n onBlur={() => setVisible(false)}\n >\n {children}\n <span\n role=\"tooltip\"\n data-ds-tt={position}\n style={{\n position: 'absolute',\n zIndex: 50,\n padding: '0.375rem 0.625rem',\n backgroundColor: 'var(--ds-tooltip-bg, #0f172a)',\n color: 'var(--ds-tooltip-text, #ffffff)',\n fontSize: '0.75rem',\n lineHeight: 1.4,\n borderRadius: '0.375rem',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n opacity: visible ? 1 : 0,\n transition: 'opacity 0.15s',\n ...positionStyle[position],\n }}\n >\n {content}\n </span>\n </span>\n </>\n )\n}\n\nexport default Tooltip\n\n/*\n * Tooltip\n *\n * Wraps any element and shows a text tooltip on hover in the given direction.\n *\n * Props:\n * content (string, required) — text shown inside the tooltip\n * children (ReactNode, required) — the element the tooltip is attached to\n * position (\"top\" | \"bottom\" | \"left\" | \"right\", optional) — defaults to \"top\"\n *\n * Usage:\n * <Tooltip content=\"Delete this item\"><button>Delete</button></Tooltip>\n * <Tooltip content=\"More info\" position=\"right\"><InfoIcon /></Tooltip>\n */\n"],"mappings":"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","names":["import_react","import_jsx_runtime","RechartsLineChart","import_react","import_recharts","import_jsx_runtime","RechartsBarChart","import_react","import_recharts","import_jsx_runtime","RechartsAreaChart","import_react","import_recharts","import_jsx_runtime","RechartsPieChart","import_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","variantMap","sizeMap","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","Tooltip"]}