@dendelion/func-ui 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +9 -3
- package/dist/components/circular-progress/circular-progress.d.ts +2 -1
- package/dist/components/circular-progress/circular-progress.d.ts.map +1 -1
- package/dist/components/lamp-button/index.d.ts +3 -0
- package/dist/components/lamp-button/index.d.ts.map +1 -0
- package/dist/components/lamp-button/lamp-button.d.ts +10 -0
- package/dist/components/lamp-button/lamp-button.d.ts.map +1 -0
- package/dist/components/lamp-icon-button/index.d.ts +3 -0
- package/dist/components/lamp-icon-button/index.d.ts.map +1 -0
- package/dist/components/lamp-icon-button/lamp-icon-button.d.ts +10 -0
- package/dist/components/lamp-icon-button/lamp-icon-button.d.ts.map +1 -0
- package/dist/components/lamp-meter/index.d.ts +3 -0
- package/dist/components/lamp-meter/index.d.ts.map +1 -0
- package/dist/components/lamp-meter/lamp-meter.d.ts +14 -0
- package/dist/components/lamp-meter/lamp-meter.d.ts.map +1 -0
- package/dist/components/lamp-status/index.d.ts +3 -0
- package/dist/components/lamp-status/index.d.ts.map +1 -0
- package/dist/components/lamp-status/lamp-status.d.ts +8 -0
- package/dist/components/lamp-status/lamp-status.d.ts.map +1 -0
- package/dist/components/lamp-switch/index.d.ts +3 -0
- package/dist/components/lamp-switch/index.d.ts.map +1 -0
- package/dist/components/lamp-switch/lamp-switch.d.ts +9 -0
- package/dist/components/lamp-switch/lamp-switch.d.ts.map +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1397 -1147
- package/dist/index.mjs.map +1 -1
- package/dist/types/lamp.d.ts +3 -0
- package/dist/types/lamp.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/globals.scss +25 -0
- package/src/styles/_lamp.scss +118 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/utils/style-helpers.ts","../src/components/grain/grain.tsx","../src/components/glow/glow.tsx","../src/components/backdrop/backdrop.tsx","../src/components/glass/glass.tsx","../src/components/button/button.tsx","../src/components/icon-button/icon-button.tsx","../src/components/link-button/link-button.tsx","../src/components/stamp/stamp.tsx","../src/components/tooltip/tooltip.tsx","../src/components/toast/toast-context.ts","../src/components/toast/toast-provider.tsx","../src/components/toast/use-toast.ts","../src/components/card/card.tsx","../src/components/input/input.tsx","../src/components/textarea/textarea.tsx","../src/components/select/select.tsx","../src/components/checkbox/checkbox.tsx","../src/components/radio/radio.tsx","../src/components/radio/radio-group.tsx","../src/components/switch/switch.tsx","../src/components/modal/modal.tsx","../src/components/drawer/drawer.tsx","../src/components/list-item/list-item.tsx","../src/components/alert/alert.tsx","../src/components/divider/divider.tsx","../src/components/spinner/spinner.tsx","../src/components/progress/progress.tsx","../src/components/slider/slider.tsx","../src/components/circular-progress/circular-progress.tsx","../src/components/skeleton/skeleton.tsx","../src/components/empty-state/empty-state.tsx","../src/components/status-dot/status-dot.tsx","../src/components/chip/chip.tsx","../src/components/segmented-control/segmented-control.tsx","../src/components/tabs/tabs.tsx","../src/components/kbd/kbd.tsx","../src/components/inline-code/inline-code.tsx","../src/components/code-block/code-block.tsx","../src/components/copy-button/copy-button.tsx","../src/components/data-table/data-table.tsx","../src/components/breadcrumb/breadcrumb.tsx","../src/components/menu/menu.tsx","../src/components/file-button/file-button.tsx","../src/components/icon/icon.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(inputs));\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './grain.module.scss';\n\nexport interface GrainProps extends HTMLAttributes<HTMLDivElement> {\n /** Overlay opacity (0–1). Defaults to 0.06. */\n opacity?: number;\n}\n\n/**\n * Animated film-grain overlay. Drop it inside a positioned container to add a\n * drifting noise texture. Purely decorative — `aria-hidden` by default.\n */\nexport function Grain({ opacity, className, style, ...props }: GrainProps) {\n const vars =\n opacity != null ? ({ '--fui-grain-opacity': String(opacity) } as CSSProperties) : undefined;\n // Default opacity lives in the SCSS (0.4 dark / 0.2 light) — override via the `opacity` prop.\n\n return (\n <div\n aria-hidden\n className={cn(styles.grain, className)}\n style={{ ...vars, ...style }}\n {...props}\n />\n );\n}\n","import { type CSSProperties, useId, useMemo, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './glow.module.scss';\n\nexport interface GlowProps {\n className?: string;\n /**\n * Seed for the procedurally generated blobs. Each mount picks a random lamp\n * by default; pass a fixed seed for a reproducible one (e.g. with SSR).\n */\n seed?: number;\n}\n\n// mulberry32 — tiny seeded PRNG so a given seed always yields the same lamp.\nfunction mulberry32(seed: number) {\n let a = seed | 0;\n return () => {\n a = (a + 0x6d2b79f5) | 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n// An organic closed outline: 6–9 vertices scattered around a (squashed)\n// circle, joined by a Catmull-Rom spline converted to cubic Béziers. The goo\n// filter smooths whatever this produces, so irregularity reads as lava, not\n// polygons.\nfunction blobPath(rng: () => number, cx: number, cy: number, r: number): string {\n const vertices = 6 + Math.floor(rng() * 4);\n const irregularity = 0.12 + rng() * 0.28;\n const squashX = 0.85 + rng() * 0.4;\n const squashY = 0.85 + rng() * 0.4;\n const phase = rng() * Math.PI * 2;\n\n const pts: [number, number][] = [];\n for (let i = 0; i < vertices; i++) {\n const angle = phase + (i / vertices) * Math.PI * 2;\n const radius = r * (1 - irregularity + rng() * irregularity * 2);\n pts.push([cx + Math.cos(angle) * radius * squashX, cy + Math.sin(angle) * radius * squashY]);\n }\n\n let d = `M${pts[0][0].toFixed(1)},${pts[0][1].toFixed(1)}`;\n for (let i = 0; i < vertices; i++) {\n const p0 = pts[(i - 1 + vertices) % vertices];\n const p1 = pts[i];\n const p2 = pts[(i + 1) % vertices];\n const p3 = pts[(i + 2) % vertices];\n const c1x = p1[0] + (p2[0] - p0[0]) / 6;\n const c1y = p1[1] + (p2[1] - p0[1]) / 6;\n const c2x = p2[0] - (p3[0] - p1[0]) / 6;\n const c2y = p2[1] - (p3[1] - p1[1]) / 6;\n d += `C${c1x.toFixed(1)},${c1y.toFixed(1)} ${c2x.toFixed(1)},${c2y.toFixed(1)} ${p2[0].toFixed(1)},${p2[1].toFixed(1)}`;\n }\n return `${d}Z`;\n}\n\ninterface BlobConfig {\n d: string;\n opacity: number;\n dur: number;\n delay: number;\n rise: number;\n wobbleDur: number;\n wobbleDelay: number;\n sway: number;\n}\n\ninterface LampConfig {\n blobs: BlobConfig[];\n depthBlobs: BlobConfig[];\n}\n\nfunction generateLamp(seed: number): LampConfig {\n const rng = mulberry32(seed);\n const count = 4 + Math.floor(rng() * 2);\n const blobs: BlobConfig[] = [];\n for (let i = 0; i < count; i++) {\n const r = 13 + rng() * 8; // narrow band — similar sizes, no giant/tiny pair\n const cx = 270 + rng() * 50; // spread across the pool, inside the glass\n const cy = 350 + rng() * 24; // resting in the pool — the cycle rises from here\n const dur = 24 + rng() * 28; // full rise-hover-sink cycle\n const wobbleDur = 6 + rng() * 8;\n // Climb target in lamp coords. At the 4× backdrop scale the screen top\n // sits at y≈225, so most flights poke a little past the screen edge;\n // the clip shape ends at y=174, comfortably off-screen above it.\n const peak = 196 + rng() * 42;\n blobs.push({\n d: blobPath(rng, cx, cy, r),\n opacity: 0.6 + rng() * 0.4,\n dur,\n // Stratified phases: blob i starts i/count of the way through its\n // cycle (± jitter), so the wax stays spread through the lamp instead\n // of randomly clumping into one goo column mid-flight.\n delay: -(((i + rng() * 0.6) / count) * dur),\n rise: cy - peak,\n wobbleDur,\n wobbleDelay: -(rng() * wobbleDur),\n sway: 3 + rng() * 5,\n });\n }\n\n // Background wax — a dim, slow, softer-edged layer rendered behind the\n // main blobs to give the lamp depth: slightly smaller (perspective),\n // much fainter, and drifting at roughly half speed.\n const depthCount = 3 + Math.floor(rng() * 2);\n const depthBlobs: BlobConfig[] = [];\n for (let i = 0; i < depthCount; i++) {\n const r = 12 + rng() * 6;\n const cx = 268 + rng() * 54;\n const cy = 352 + rng() * 24;\n const dur = 36 + rng() * 30;\n const wobbleDur = 9 + rng() * 8;\n const peak = 205 + rng() * 45; // stays a touch lower — the foreground owns the top edge\n depthBlobs.push({\n d: blobPath(rng, cx, cy, r),\n // Near-full alpha INTO the filter — the goo threshold erases dim input.\n // The layer is faded as a whole, after filtering, in the JSX.\n opacity: 0.85 + rng() * 0.15,\n dur,\n delay: -(((i + rng() * 0.6) / depthCount) * dur),\n rise: cy - peak,\n wobbleDur,\n wobbleDelay: -(rng() * wobbleDur),\n sway: 2 + rng() * 3,\n });\n }\n\n return { blobs, depthBlobs };\n}\n\n/**\n * The signature lava-lamp ambient glow — gooey blobs drifting behind a soft\n * radial halo. Colour follows `--fui-glow` (via `currentColor`), so it retints\n * with the theme; size/position are controlled by the parent. Blob shapes are\n * procedurally generated: random per mount unless `seed` is given.\n */\nexport function Glow({ className, seed }: GlowProps) {\n const uid = useId().replace(/:/g, '');\n const goo = `goo-${uid}`;\n const gooSoft = `goo-soft-${uid}`;\n const clip = `clip-${uid}`;\n const grad = `grad-${uid}`;\n\n const [fallbackSeed] = useState(() => Math.floor(Math.random() * 2 ** 31));\n const { blobs, depthBlobs } = useMemo(\n () => generateLamp(seed ?? fallbackSeed),\n [seed, fallbackSeed],\n );\n\n const renderWax = (configs: BlobConfig[]) =>\n configs.map((b) => (\n <g\n key={b.d}\n className={styles.blob}\n style={\n {\n opacity: b.opacity,\n '--lava-dur': `${b.dur.toFixed(1)}s`,\n '--lava-delay': `${b.delay.toFixed(1)}s`,\n '--lava-rise': `${b.rise.toFixed(0)}px`,\n } as CSSProperties\n }\n >\n <path\n className={styles.wobble}\n d={b.d}\n style={\n {\n '--lava-wdur': `${b.wobbleDur.toFixed(1)}s`,\n '--lava-wdelay': `${b.wobbleDelay.toFixed(1)}s`,\n '--lava-sway': `${b.sway.toFixed(1)}px`,\n } as CSSProperties\n }\n />\n </g>\n ));\n\n return (\n <svg\n className={cn(styles.glow, className)}\n viewBox=\"0 0 600 600\"\n aria-hidden\n role=\"presentation\"\n >\n <defs>\n <filter id={goo} colorInterpolationFilters=\"sRGB\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"8\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 21 -9\"\n result=\"cm\"\n />\n <feBlend />\n </filter>\n\n {/* Softer goo for the depth layer — bigger blur, gentler threshold,\n so background wax reads as out-of-focus */}\n <filter id={gooSoft} colorInterpolationFilters=\"sRGB\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"10\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 14 -6\"\n />\n </filter>\n\n <clipPath id={clip}>\n <path d=\"M262,174h60l33.5,182.3c0,0,2.7,12.8,2.5,22.8c-7.5,0-131,0-131,0s-0.7-9.3,0-18C227.6,352.9,262,174,262,174z\" />\n </clipPath>\n\n <radialGradient id={grad} cx=\"300\" cy=\"300\" r=\"400\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0.0714\" stopColor=\"currentColor\" stopOpacity=\"0.19\" />\n <stop offset=\"0.3107\" stopColor=\"currentColor\" stopOpacity=\"0.13\" />\n <stop offset=\"0.553\" stopColor=\"currentColor\" stopOpacity=\"0.06\" />\n <stop offset=\"0.7828\" stopColor=\"currentColor\" stopOpacity=\"0.02\" />\n <stop offset=\"0.9847\" stopColor=\"currentColor\" stopOpacity=\"0\" />\n </radialGradient>\n </defs>\n\n <rect fill={`url(#${grad})`} width=\"600\" height=\"600\" />\n\n {/* Depth layer first — slow, soft-edged wax behind the main blobs.\n Opacity sits on this group so it dims AFTER the goo filter; dimming\n the blobs before it would push them under the threshold entirely. */}\n <g filter={`url(#${gooSoft})`} clipPath={`url(#${clip})`} fill=\"currentColor\" opacity={0.2}>\n {renderWax(depthBlobs)}\n </g>\n\n <g filter={`url(#${goo})`} clipPath={`url(#${clip})`} fill=\"currentColor\">\n {renderWax(blobs)}\n <path\n className={styles.botBlob}\n d=\"M354,381.2c6.8,3.4,5.4,7.4-5.6,10.4c-10.7,3.1-31.1,5.1-54.4,8.4c-23.3,3.3-43.7,0.8-54.4-2.4c-11-3.4-12.4-7.6-5.6-13.8c6.8-7,18.9-14.6,29.6-17.4c11-3.3,20.6-1.8,30.4-1.4c9.8,0.4,19.4,5.1,30.4,8.3C335.1,376.8,347.2,378.6,354,381.2z\"\n />\n </g>\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Glow } from '../glow';\nimport { Grain } from '../grain';\nimport styles from './backdrop.module.scss';\n\nexport interface BackdropProps {\n /** Render the drifting film-grain layer. Defaults to true. */\n grain?: boolean;\n /** Render the lava glow layer. Defaults to true. */\n glow?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\n/**\n * Full-bleed ambient background: the lava {@link Glow} and film {@link Grain}\n * layered behind its children. Use it as the outermost shell of a page.\n */\nexport function Backdrop({ grain = true, glow = true, className, children }: BackdropProps) {\n return (\n <div className={cn(styles.backdrop, className)}>\n {glow && (\n <div className={styles.glowLayer}>\n <Glow />\n </div>\n )}\n {grain && <Grain className={styles.grainLayer} />}\n <div className={styles.content}>{children}</div>\n </div>\n );\n}\n","import { type CSSProperties, type HTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './glass.module.scss';\n\nexport interface GlassProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Backdrop-blur radius in px. Defaults to the token (50).\n * Pass 0 to disable the filter entirely — useful for Glass nested inside\n * Glass, where the backdrop is already blurred.\n */\n blur?: number;\n}\n\n/**\n * The core frosted-glass surface: a translucent fill behind a heavy backdrop\n * blur, with a soft ambient shadow. The building block for panels and cards.\n */\nexport const Glass = forwardRef<HTMLDivElement, GlassProps>(function Glass(\n { blur, className, style, children, ...props },\n ref,\n) {\n // blur={0} must remove the filter, not apply blur(0px) — a zero-radius\n // backdrop-filter still forces the browser to isolate and re-composite a\n // render surface on every backdrop change. The frost lives on the ::before\n // layer, so both knobs travel as custom properties.\n const vars: CSSProperties | undefined =\n blur === 0\n ? ({ '--fui-glass-backdrop': 'none' } as CSSProperties)\n : blur != null\n ? ({ '--fui-glass-blur': `${blur}px` } as CSSProperties)\n : undefined;\n\n return (\n <div ref={ref} className={cn(styles.glass, className)} style={{ ...vars, ...style }} {...props}>\n {children}\n </div>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './button.module.scss';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n size?: 'sm' | 'md';\n fullWidth?: boolean;\n /** Leading icon slot. */\n icon?: ReactNode;\n /** Trailing icon slot. */\n iconRight?: ReactNode;\n /** Pressed-in look for toggles and nav tabs. Also sets aria-pressed. */\n isActive?: boolean;\n}\n\n/**\n * A chunky, uppercase button with the signature hard offset shadow that snaps\n * flush on press. Ghost is a shadow-outlined variant; secondary is frosted;\n * danger is for destructive actions.\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n icon,\n iconRight,\n isActive = false,\n className,\n children,\n ...props\n },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={isActive || undefined}\n className={cn(\n styles.button,\n styles[variant],\n styles[size],\n fullWidth && styles.fullWidth,\n isActive && styles.active,\n className,\n )}\n {...props}\n >\n {icon && <span className={styles.iconSlot}>{icon}</span>}\n {children}\n {iconRight && <span className={styles.iconSlot}>{iconRight}</span>}\n </button>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './icon-button.module.scss';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n /** Accessible name — rendered as aria-label and title. */\n label: string;\n variant?: 'default' | 'ghost' | 'danger';\n size?: 'sm' | 'md';\n /** Pressed-in look for toggles. Also sets aria-pressed. */\n isActive?: boolean;\n}\n\n/**\n * A square icon-only button. Default is a frosted chip with the offset\n * shadow; ghost is chrome-less for dense toolbars; danger for destructive\n * actions.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { icon, label, variant = 'default', size = 'md', isActive = false, className, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n title={label}\n aria-pressed={isActive || undefined}\n className={cn(\n styles.iconButton,\n styles[variant],\n styles[size],\n isActive && styles.active,\n className,\n )}\n {...props}\n >\n {icon}\n </button>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './link-button.module.scss';\n\nexport interface LinkButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n color?: 'inherit' | 'accent';\n size?: 'sm' | 'md' | 'lg';\n icon?: ReactNode;\n iconRight?: ReactNode;\n}\n\nexport const LinkButton = forwardRef<HTMLButtonElement, LinkButtonProps>(function LinkButton(\n { color = 'accent', size = 'md', icon, iconRight, className, children, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(styles.linkButton, styles[color], styles[size], className)}\n {...props}\n >\n {icon && <span className={styles.iconSlot}>{icon}</span>}\n {children}\n {iconRight && <span className={styles.iconSlot}>{iconRight}</span>}\n </button>\n );\n});\n","import type { CSSProperties, HTMLAttributes, MouseEventHandler } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './stamp.module.scss';\n\nexport type StampVariant = 'neutral' | 'info' | 'success' | 'warning' | 'error';\n\nexport interface StampProps extends HTMLAttributes<HTMLElement> {\n variant?: StampVariant;\n size?: 'sm' | 'md';\n /** Leading square status dot in the text colour. */\n dot?: boolean;\n /** Override the variant background with any CSS colour. */\n fillColor?: string;\n /** Override the variant text colour with any CSS colour. */\n textColor?: string;\n /** When set, the stamp renders as a real button with hover/press states. */\n onClick?: MouseEventHandler<HTMLElement>;\n}\n\n/**\n * A compact status badge on the semantic status tokens. Pass `onClick` to get\n * a genuinely clickable stamp — it renders as a `<button>` with hover lift,\n * no wrapper needed.\n */\nexport function Stamp({\n variant = 'neutral',\n size = 'sm',\n dot = false,\n fillColor,\n textColor,\n onClick,\n className,\n style,\n children,\n ...props\n}: StampProps) {\n const Tag = onClick ? 'button' : 'span';\n const colorOverrides: CSSProperties | undefined =\n fillColor || textColor ? { backgroundColor: fillColor, color: textColor } : undefined;\n\n return (\n <Tag\n type={onClick ? 'button' : undefined}\n onClick={onClick}\n className={cn(styles.stamp, styles[variant], styles[size], className)}\n style={{ ...colorOverrides, ...style }}\n {...props}\n >\n {dot && <span className={styles.dot} aria-hidden />}\n {children}\n </Tag>\n );\n}\n","import {\n Children,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n cloneElement,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './tooltip.module.scss';\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n /** Tooltip content. Pass undefined/null to disable without unwrapping the child. */\n content?: ReactNode;\n /** A single element that becomes the trigger (handlers are merged in). */\n children: ReactElement;\n placement?: TooltipPlacement;\n /** Hover delay in ms — keyboard focus shows immediately. */\n delay?: number;\n}\n\nconst GAP = 8;\nconst EDGE = 8;\n\nfunction composeHandlers<E>(theirs: unknown, ours: (event: E) => void) {\n return (event: E) => {\n if (typeof theirs === 'function') (theirs as (event: E) => void)(event);\n ours(event);\n };\n}\n\n/**\n * A portal tooltip on hover and keyboard focus. Position is computed against\n * the trigger and clamped to the viewport; Escape, scroll, and resize hide it.\n */\nexport function Tooltip({ content, children, placement = 'top', delay = 300 }: TooltipProps) {\n const id = useId();\n const [open, setOpen] = useState(false);\n const [coords, setCoords] = useState<{ top: number; left: number } | null>(null);\n const bubbleRef = useRef<HTMLDivElement>(null);\n const rectRef = useRef<DOMRect | null>(null);\n const timer = useRef<number | undefined>(undefined);\n\n const hide = useCallback(() => {\n window.clearTimeout(timer.current);\n setOpen(false);\n setCoords(null);\n }, []);\n\n useEffect(() => () => window.clearTimeout(timer.current), []);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') hide();\n };\n window.addEventListener('keydown', onKey);\n window.addEventListener('scroll', hide, true);\n window.addEventListener('resize', hide);\n return () => {\n window.removeEventListener('keydown', onKey);\n window.removeEventListener('scroll', hide, true);\n window.removeEventListener('resize', hide);\n };\n }, [open, hide]);\n\n // Two-phase: render hidden, measure, then place (and clamp to viewport).\n useLayoutEffect(() => {\n if (!open) return;\n const rect = rectRef.current;\n const bubble = bubbleRef.current;\n if (!rect || !bubble) return;\n const b = bubble.getBoundingClientRect();\n\n let top: number;\n let left: number;\n switch (placement) {\n case 'bottom':\n top = rect.bottom + GAP;\n left = rect.left + rect.width / 2 - b.width / 2;\n break;\n case 'left':\n top = rect.top + rect.height / 2 - b.height / 2;\n left = rect.left - b.width - GAP;\n break;\n case 'right':\n top = rect.top + rect.height / 2 - b.height / 2;\n left = rect.right + GAP;\n break;\n default:\n top = rect.top - b.height - GAP;\n left = rect.left + rect.width / 2 - b.width / 2;\n }\n\n left = Math.min(Math.max(left, EDGE), window.innerWidth - b.width - EDGE);\n top = Math.min(Math.max(top, EDGE), window.innerHeight - b.height - EDGE);\n setCoords({ top, left });\n }, [open, placement]);\n\n const disabled = content == null || content === false || content === '';\n\n const child = Children.only(children);\n const childProps = child.props as Record<string, unknown>;\n\n const showNow = (el: Element) => {\n rectRef.current = el.getBoundingClientRect();\n setOpen(true);\n };\n\n if (disabled) return children;\n\n const trigger = cloneElement(child as ReactElement<Record<string, unknown>>, {\n onMouseEnter: composeHandlers(childProps.onMouseEnter, (e: MouseEvent<HTMLElement>) => {\n const el = e.currentTarget;\n window.clearTimeout(timer.current);\n timer.current = window.setTimeout(() => showNow(el), delay);\n }),\n onMouseLeave: composeHandlers(childProps.onMouseLeave, hide),\n onFocus: composeHandlers(childProps.onFocus, (e: FocusEvent<HTMLElement>) => {\n showNow(e.currentTarget);\n }),\n onBlur: composeHandlers(childProps.onBlur, hide),\n 'aria-describedby': open ? id : (childProps['aria-describedby'] as string | undefined),\n });\n\n return (\n <>\n {trigger}\n {open &&\n createPortal(\n <div\n ref={bubbleRef}\n id={id}\n role=\"tooltip\"\n className={cn(styles.tooltip, coords && styles.ready)}\n style={coords ? { top: coords.top, left: coords.left } : undefined}\n >\n {content}\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { createContext } from 'react';\nimport type { ReactNode } from 'react';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport interface ToastOptions {\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n /** Auto-dismiss after this many ms; 0 keeps the toast until dismissed. */\n duration?: number;\n}\n\nexport interface ToastContextValue {\n /** Show a toast; returns its id for programmatic dismissal. */\n toast: (options: ToastOptions) => string;\n dismiss: (id: string) => void;\n}\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n","import { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport {\n ToastContext,\n type ToastOptions,\n type ToastPosition,\n type ToastVariant,\n} from './toast-context';\nimport styles from './toast.module.scss';\n\nexport interface ToastProviderProps {\n children: ReactNode;\n position?: ToastPosition;\n /** Default auto-dismiss in ms for toasts that don't set their own. */\n defaultDuration?: number;\n}\n\ninterface ToastItem {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n variant: ToastVariant;\n}\n\n/**\n * Portal-renders the toast stack and provides the `useToast` context.\n * Wrap the app once, near the root.\n */\nexport function ToastProvider({\n children,\n position = 'bottom-right',\n defaultDuration = 5000,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timers = useRef(new Map<string, number>());\n const counter = useRef(0);\n\n const dismiss = useCallback((id: string) => {\n setToasts((current) => current.filter((t) => t.id !== id));\n const handle = timers.current.get(id);\n if (handle !== undefined) {\n window.clearTimeout(handle);\n timers.current.delete(id);\n }\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions) => {\n counter.current += 1;\n const id = `fui-toast-${counter.current}`;\n setToasts((current) => [\n ...current,\n {\n id,\n title: options.title,\n description: options.description,\n variant: options.variant ?? 'info',\n },\n ]);\n const duration = options.duration ?? defaultDuration;\n if (duration > 0) {\n timers.current.set(\n id,\n window.setTimeout(() => dismiss(id), duration),\n );\n }\n return id;\n },\n [defaultDuration, dismiss],\n );\n\n useEffect(() => {\n const pending = timers.current;\n return () => {\n for (const handle of pending.values()) window.clearTimeout(handle);\n };\n }, []);\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {createPortal(\n <div className={cn(styles.stack, styles[position])}>\n {toasts.map((t) => (\n <div\n key={t.id}\n role={t.variant === 'error' ? 'alert' : 'status'}\n className={cn(styles.toast, styles[t.variant])}\n >\n {t.title && <p className={styles.title}>{t.title}</p>}\n {t.description && <p className={styles.description}>{t.description}</p>}\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n className={styles.close}\n onClick={() => dismiss(t.id)}\n >\n ×\n </button>\n </div>\n ))}\n </div>,\n document.body,\n )}\n </ToastContext.Provider>\n );\n}\n","import { useContext } from 'react';\nimport { ToastContext } from './toast-context';\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error('useToast must be used within a <ToastProvider>');\n return ctx;\n}\n","import type { HTMLAttributes, KeyboardEvent, MouseEventHandler } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './card.module.scss';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** `sm` is the dense list-row size; `md` the roomy default. */\n size?: 'sm' | 'md';\n /**\n * Makes the whole card clickable — adds role, tab stop, Enter/Space\n * activation, and hover/press styling.\n */\n onClick?: MouseEventHandler<HTMLDivElement>;\n}\n\nfunction activateOnEnterOrSpace(e: KeyboardEvent<HTMLDivElement>) {\n if (e.target === e.currentTarget && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n e.currentTarget.click();\n }\n}\n\nfunction CardRoot({ size = 'md', onClick, className, children, ...props }: CardProps) {\n const interactive = onClick != null;\n return (\n <div\n className={cn(styles.card, styles[size], interactive && styles.interactive, className)}\n onClick={onClick}\n {...(interactive\n ? { role: 'button', tabIndex: 0, onKeyDown: activateOnEnterOrSpace }\n : undefined)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nfunction Title({ className, children, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3 className={cn(styles.title, className)} {...props}>\n {children}\n </h3>\n );\n}\n\nfunction Body({ className, children, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return (\n <p className={cn(styles.body, className)} {...props}>\n {children}\n </p>\n );\n}\n\n/** A frosted card surface with the film offset shadow. Compose with Card.Title / Card.Body. */\nexport const Card = Object.assign(CardRoot, { Title, Body });\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './input.module.scss';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { label, helperText, error, size = 'md', id, className, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-input-${uid}`;\n const messageId = `fui-input-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={cn(styles.input, styles[size], invalid && styles.invalid)}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type TextareaHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './textarea.module.scss';\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { label, helperText, error, size = 'md', id, className, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-textarea-${uid}`;\n const messageId = `fui-textarea-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n id={inputId}\n className={cn(styles.textarea, styles[size], invalid && styles.invalid)}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type KeyboardEvent, forwardRef, useEffect, useId, useRef, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './select.module.scss';\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n placeholder?: string;\n disabled?: boolean;\n name?: string;\n required?: boolean;\n id?: string;\n className?: string;\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\n {\n options,\n value,\n defaultValue,\n onChange,\n label,\n helperText,\n error,\n size = 'md',\n placeholder = 'Select…',\n disabled = false,\n name,\n required,\n id,\n className,\n },\n ref,\n) {\n const uid = useId();\n const selectId = id ?? `fui-select-${uid}`;\n const listId = `fui-select-list-${uid}`;\n const messageId = `fui-select-message-${uid}`;\n const optionId = (index: number) => `${selectId}-option-${index}`;\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const currentValue = isControlled ? value : internalValue;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const invalid = error != null;\n const message = invalid ? error : helperText;\n const selectedIndex = options.findIndex((o) => o.value === currentValue);\n const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n\n const firstEnabled = () => options.findIndex((o) => !o.disabled);\n const lastEnabled = () => {\n for (let i = options.length - 1; i >= 0; i--) if (!options[i].disabled) return i;\n return -1;\n };\n const nextEnabled = (from: number) => {\n for (let i = from + 1; i < options.length; i++) if (!options[i].disabled) return i;\n return from;\n };\n const prevEnabled = (from: number) => {\n for (let i = from - 1; i >= 0; i--) if (!options[i].disabled) return i;\n return from;\n };\n\n useEffect(() => {\n if (!open) return;\n const onPointer = (e: PointerEvent) => {\n if (!rootRef.current?.contains(e.target as Node)) setOpen(false);\n };\n window.addEventListener('pointerdown', onPointer);\n return () => window.removeEventListener('pointerdown', onPointer);\n }, [open]);\n\n const openList = () => {\n setActiveIndex(selectedIndex >= 0 ? selectedIndex : firstEnabled());\n setOpen(true);\n };\n\n const commit = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n setOpen(false);\n triggerRef.current?.focus();\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (open) setActiveIndex((i) => nextEnabled(i));\n else openList();\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (open) setActiveIndex((i) => prevEnabled(i));\n else openList();\n break;\n case 'Home':\n if (open) {\n e.preventDefault();\n setActiveIndex(firstEnabled());\n }\n break;\n case 'End':\n if (open) {\n e.preventDefault();\n setActiveIndex(lastEnabled());\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (open && activeIndex >= 0) commit(options[activeIndex].value);\n else openList();\n break;\n case 'Escape':\n if (open) {\n e.preventDefault();\n setOpen(false);\n }\n break;\n case 'Tab':\n if (open) setOpen(false);\n break;\n }\n };\n\n return (\n <div ref={rootRef} className={cn(styles.field, className)}>\n {label && (\n <label htmlFor={selectId} className={styles.label}>\n {label}\n </label>\n )}\n <div className={styles.control}>\n <button\n ref={triggerRef}\n type=\"button\"\n id={selectId}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-activedescendant={open && activeIndex >= 0 ? optionId(activeIndex) : undefined}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n disabled={disabled}\n className={cn(\n styles.trigger,\n styles[size],\n invalid && styles.invalid,\n !selectedOption && styles.placeholder,\n )}\n onClick={() => (open ? setOpen(false) : openList())}\n onKeyDown={onKeyDown}\n >\n <span className={styles.value}>\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <span className={styles.arrow} aria-hidden=\"true\" />\n </button>\n {open && (\n <div id={listId} role=\"listbox\" tabIndex={-1} className={styles.list}>\n {options.map((option, index) => (\n <button\n key={option.value}\n type=\"button\"\n id={optionId(index)}\n role=\"option\"\n tabIndex={-1}\n aria-selected={option.value === currentValue}\n disabled={option.disabled}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n option.disabled && styles.optionDisabled,\n )}\n onPointerMove={() => !option.disabled && setActiveIndex(index)}\n onClick={() => commit(option.value)}\n >\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n <select\n ref={ref}\n name={name}\n value={currentValue}\n required={required}\n disabled={disabled}\n aria-hidden=\"true\"\n tabIndex={-1}\n className={styles.native}\n onChange={(e) => commit(e.target.value)}\n >\n {!selectedOption && <option value={currentValue} />}\n {options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './checkbox.module.scss';\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { label, helperText, error, size = 'md', id, className, disabled, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-checkbox-${uid}`;\n const messageId = `fui-checkbox-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n <label\n htmlFor={inputId}\n className={cn(styles.control, styles[size], disabled && styles.disabled)}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n className={styles.input}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n <span className={cn(styles.box, invalid && styles.invalid)} aria-hidden=\"true\" />\n {label && <span className={styles.text}>{label}</span>}\n </label>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './radio.module.scss';\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { label, helperText, error, size = 'md', id, className, disabled, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-radio-${uid}`;\n const messageId = `fui-radio-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n <label\n htmlFor={inputId}\n className={cn(styles.control, styles[size], disabled && styles.disabled)}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"radio\"\n className={styles.input}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n <span className={cn(styles.dot, invalid && styles.invalid)} aria-hidden=\"true\" />\n {label && <span className={styles.text}>{label}</span>}\n </label>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type HTMLAttributes, type ReactNode, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Radio } from './radio';\nimport styles from './radio-group.module.scss';\n\nexport interface RadioOption {\n value: string;\n label?: string;\n helperText?: string;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>, 'onChange'> {\n options: RadioOption[];\n value: string;\n onChange: (value: string) => void;\n name?: string;\n legend?: ReactNode;\n orientation?: 'vertical' | 'horizontal';\n size?: 'sm' | 'md';\n helperText?: string;\n error?: string;\n disabled?: boolean;\n}\n\nexport function RadioGroup({\n options,\n value,\n onChange,\n name,\n legend,\n orientation = 'vertical',\n size = 'md',\n helperText,\n error,\n disabled,\n className,\n ...props\n}: RadioGroupProps) {\n const uid = useId();\n const groupName = name ?? `fui-radio-group-${uid}`;\n const messageId = `fui-radio-group-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <fieldset\n className={cn(styles.group, className)}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n >\n {legend != null && <legend className={styles.legend}>{legend}</legend>}\n <div className={cn(styles.options, styles[orientation])}>\n {options.map((option) => (\n <Radio\n key={option.value}\n name={groupName}\n value={option.value}\n checked={option.value === value}\n disabled={option.disabled}\n label={option.label}\n helperText={option.helperText}\n size={size}\n onChange={() => onChange(option.value)}\n />\n ))}\n </div>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </fieldset>\n );\n}\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './switch.module.scss';\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { label, helperText, error, size = 'md', id, className, disabled, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-switch-${uid}`;\n const messageId = `fui-switch-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n <label\n htmlFor={inputId}\n className={cn(styles.control, styles[size], disabled && styles.disabled)}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n className={styles.input}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n <span className={cn(styles.track, invalid && styles.invalid)} aria-hidden=\"true\">\n <span className={styles.knob} />\n </span>\n {label && <span className={styles.text}>{label}</span>}\n </label>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type ReactNode, useEffect, useId, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './modal.module.scss';\n\nconst focusableSelector =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n size?: 'sm' | 'md' | 'lg';\n children: ReactNode;\n className?: string;\n}\n\ninterface ModalSlotProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction ModalRoot({ open, onClose, title, size = 'md', children, className }: ModalProps) {\n const uid = useId();\n const titleId = `fui-modal-title-${uid}`;\n const panelRef = useRef<HTMLDivElement>(null);\n const previouslyFocused = useRef<HTMLElement | null>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n if (!open) return;\n previouslyFocused.current = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n onCloseRef.current();\n return;\n }\n if (event.key !== 'Tab') return;\n const focusables = panelRef.current?.querySelectorAll<HTMLElement>(focusableSelector);\n if (!focusables || focusables.length === 0) {\n event.preventDefault();\n panelRef.current?.focus();\n return;\n }\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = previousOverflow;\n previouslyFocused.current?.focus();\n };\n }, [open]);\n\n if (!open || typeof document === 'undefined') return null;\n\n return createPortal(\n <div className={styles.overlay}>\n <button\n type=\"button\"\n className={styles.backdrop}\n aria-label=\"Close modal\"\n onClick={onClose}\n />\n <div\n ref={panelRef}\n className={cn(styles.panel, styles[size], className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n >\n <div className={styles.header}>\n {title && (\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n )}\n <button type=\"button\" className={styles.close} aria-label=\"Close modal\" onClick={onClose}>\n ×\n </button>\n </div>\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n\nfunction ModalBody({ children, className }: ModalSlotProps) {\n return <div className={cn(styles.body, className)}>{children}</div>;\n}\n\nfunction ModalFooter({ children, className }: ModalSlotProps) {\n return <div className={cn(styles.footer, className)}>{children}</div>;\n}\n\nfunction ModalError({ children, className }: ModalSlotProps) {\n if (!children) return null;\n return (\n <p role=\"alert\" className={cn(styles.errorText, className)}>\n {children}\n </p>\n );\n}\n\nexport const Modal = Object.assign(ModalRoot, {\n Body: ModalBody,\n Footer: ModalFooter,\n Error: ModalError,\n});\n","import { type ReactNode, useEffect, useId, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './drawer.module.scss';\n\nconst focusableSelector =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport type DrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n side?: DrawerSide;\n title?: string;\n size?: 'sm' | 'md' | 'lg';\n children: ReactNode;\n className?: string;\n}\n\ninterface DrawerSlotProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction DrawerRoot({\n open,\n onClose,\n side = 'right',\n title,\n size = 'md',\n children,\n className,\n}: DrawerProps) {\n const uid = useId();\n const titleId = `fui-drawer-title-${uid}`;\n const panelRef = useRef<HTMLDivElement>(null);\n const previouslyFocused = useRef<HTMLElement | null>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n if (!open) return;\n previouslyFocused.current = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n onCloseRef.current();\n return;\n }\n if (event.key !== 'Tab') return;\n const focusables = panelRef.current?.querySelectorAll<HTMLElement>(focusableSelector);\n if (!focusables || focusables.length === 0) {\n event.preventDefault();\n panelRef.current?.focus();\n return;\n }\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = previousOverflow;\n previouslyFocused.current?.focus();\n };\n }, [open]);\n\n if (!open || typeof document === 'undefined') return null;\n\n return createPortal(\n <div className={cn(styles.overlay, styles[side])}>\n <button\n type=\"button\"\n className={styles.backdrop}\n aria-label=\"Close drawer\"\n onClick={onClose}\n />\n <div\n ref={panelRef}\n className={cn(styles.panel, styles[side], styles[size], className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n >\n <div className={styles.header}>\n {title && (\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n )}\n <button\n type=\"button\"\n className={styles.close}\n aria-label=\"Close drawer\"\n onClick={onClose}\n >\n ×\n </button>\n </div>\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n\nfunction DrawerBody({ children, className }: DrawerSlotProps) {\n return <div className={cn(styles.body, className)}>{children}</div>;\n}\n\nfunction DrawerFooter({ children, className }: DrawerSlotProps) {\n return <div className={cn(styles.footer, className)}>{children}</div>;\n}\n\nexport const Drawer = Object.assign(DrawerRoot, {\n Body: DrawerBody,\n Footer: DrawerFooter,\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './list-item.module.scss';\n\nexport interface ListItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n size?: 'sm' | 'md';\n active?: boolean;\n icon?: ReactNode;\n action?: ReactNode;\n}\n\nexport const ListItem = forwardRef<HTMLButtonElement, ListItemProps>(function ListItem(\n { size = 'md', active = false, icon, action, className, children, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-current={active || undefined}\n className={cn(styles.item, styles[size], active && styles.active, className)}\n {...props}\n >\n {icon && <span className={styles.icon}>{icon}</span>}\n <span className={styles.content}>{children}</span>\n {action && <span className={styles.action}>{action}</span>}\n </button>\n );\n});\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './alert.module.scss';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant;\n dismissible?: boolean;\n onDismiss?: () => void;\n children: ReactNode;\n}\n\nconst icons: Record<AlertVariant, ReactNode> = {\n info: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M8 0a8 8 0 100 16A8 8 0 008 0zm1 12H7V7h2v5zM8 5.5A1.25 1.25 0 118 3a1.25 1.25 0 010 2.5z\" />\n </svg>\n ),\n success: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M8 0a8 8 0 100 16A8 8 0 008 0zm3.7 5.7l-4.4 4.4a1 1 0 01-1.4 0L3.7 8.3l1.4-1.4L6.6 8.4l3.7-3.7 1.4 1z\" />\n </svg>\n ),\n warning: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M7.1 1.5a1 1 0 011.8 0l6.4 12A1 1 0 0114.4 15H1.6a1 1 0 01-.9-1.5l6.4-12zM7 6v4h2V6H7zm0 5v2h2v-2H7z\" />\n </svg>\n ),\n error: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M8 0a8 8 0 100 16A8 8 0 008 0zm3 10.6L9.4 12 8 10.6 6.6 12 5 10.6 6.6 9 5 7.4 6.6 6 8 7.4 9.4 6 11 7.4 9.4 9 11 10.6z\" />\n </svg>\n ),\n};\n\nexport function Alert({\n variant = 'info',\n dismissible = false,\n onDismiss,\n className,\n children,\n ...props\n}: AlertProps) {\n return (\n <div\n role={variant === 'error' || variant === 'warning' ? 'alert' : 'status'}\n className={cn(styles.alert, styles[variant], className)}\n {...props}\n >\n <span className={styles.icon}>{icons[variant]}</span>\n <div className={styles.message}>{children}</div>\n {dismissible && (\n <button type=\"button\" aria-label=\"Dismiss\" className={styles.dismiss} onClick={onDismiss}>\n ×\n </button>\n )}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './divider.module.scss';\n\nexport interface DividerProps extends HTMLAttributes<HTMLElement> {\n orientation?: 'horizontal' | 'vertical';\n label?: ReactNode;\n}\n\nexport function Divider({ orientation = 'horizontal', label, className, ...props }: DividerProps) {\n if (orientation === 'horizontal' && label != null) {\n return (\n <div className={cn(styles.divider, styles.labelled, className)} {...props}>\n <hr className={styles.line} />\n <span className={styles.label}>{label}</span>\n <hr className={styles.line} />\n </div>\n );\n }\n\n return (\n <hr\n aria-orientation={orientation}\n className={cn(styles.divider, styles[orientation], className)}\n {...props}\n />\n );\n}\n","import type { OutputHTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './spinner.module.scss';\n\nexport interface SpinnerProps extends OutputHTMLAttributes<HTMLOutputElement> {\n size?: 'sm' | 'md' | 'lg';\n label?: string;\n}\n\nexport function Spinner({ size = 'md', label = 'Loading', className, ...props }: SpinnerProps) {\n return (\n <output aria-label={label} className={cn(styles.spinner, styles[size], className)} {...props}>\n <span className={styles.ring} />\n </output>\n );\n}\n","import type { CSSProperties, ProgressHTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './progress.module.scss';\n\nexport interface ProgressProps extends Omit<ProgressHTMLAttributes<HTMLProgressElement>, 'color'> {\n value: number;\n max?: number;\n color?: string;\n height?: number;\n}\n\nexport function Progress({\n value,\n max = 100,\n color,\n height = 8,\n className,\n style,\n ...props\n}: ProgressProps) {\n const clamped = max > 0 ? Math.max(0, Math.min(value, max)) : 0;\n const fill = color ? { '--fui-progress-fill': color } : undefined;\n\n return (\n <progress\n value={clamped}\n max={max}\n className={cn(styles.progress, className)}\n style={{ height, ...fill, ...style } as CSSProperties}\n {...props}\n />\n );\n}\n","import {\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n forwardRef,\n useId,\n} from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './slider.module.scss';\n\nexport type SliderOrientation = 'horizontal' | 'vertical';\n\nexport interface SliderProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'onChange' | 'type' | 'value' | 'defaultValue' | 'size'\n > {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n orientation?: SliderOrientation;\n length?: number | string;\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n showValue?: boolean;\n formatValue?: (value: number) => ReactNode;\n}\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n orientation = 'horizontal',\n length,\n label,\n helperText,\n error,\n size = 'md',\n showValue = false,\n formatValue,\n id,\n className,\n style,\n disabled,\n ...props\n },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-slider-${uid}`;\n const messageId = `fui-slider-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n const vertical = orientation === 'vertical';\n\n const clamped = Math.max(min, Math.min(value, max));\n const fraction = max > min ? (clamped - min) / (max - min) : 0;\n const track = length != null ? (typeof length === 'number' ? `${length}px` : length) : undefined;\n\n return (\n <div\n className={cn(styles.field, vertical && styles.vertical, className)}\n style={{ '--fui-slider-length': track, ...style } as CSSProperties}\n >\n {(label || showValue) && (\n <div className={styles.header}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n )}\n {showValue && (\n <span className={styles.value}>{formatValue ? formatValue(clamped) : clamped}</span>\n )}\n </div>\n )}\n <input\n ref={ref}\n id={inputId}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={clamped}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n aria-orientation={vertical ? 'vertical' : undefined}\n className={cn(styles.input, styles[size], invalid && styles.invalid)}\n style={{ '--fui-slider-fill': `${fraction * 100}%` } as CSSProperties}\n onChange={(event) => onChange(event.target.valueAsNumber)}\n {...props}\n />\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './circular-progress.module.scss';\n\nexport interface CircularProgressProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n value?: number;\n max?: number;\n size?: number;\n strokeWidth?: number;\n color?: string;\n label?: string;\n showValue?: boolean;\n formatValue?: (percent: number, value: number) => ReactNode;\n}\n\nexport function CircularProgress({\n value,\n max = 100,\n size = 48,\n strokeWidth = 4,\n color,\n label = 'Loading',\n showValue = false,\n formatValue,\n className,\n style,\n ...props\n}: CircularProgressProps) {\n const indeterminate = value == null;\n const clamped = indeterminate || max <= 0 ? 0 : Math.max(0, Math.min(value, max));\n const fraction = indeterminate || max <= 0 ? 0 : clamped / max;\n const percent = Math.round(fraction * 100);\n\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const dash = indeterminate\n ? `${circumference * 0.25} ${circumference * 0.75}`\n : `${circumference * fraction} ${circumference}`;\n\n const fill = color ? { '--fui-circular-fill': color } : undefined;\n\n return (\n <span\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={indeterminate ? undefined : 0}\n aria-valuemax={indeterminate ? undefined : max}\n aria-valuenow={indeterminate ? undefined : clamped}\n className={cn(styles.root, indeterminate && styles.indeterminate, className)}\n style={{ width: size, height: size, ...fill, ...style } as CSSProperties}\n {...props}\n >\n <svg className={styles.svg} viewBox={`0 0 ${size} ${size}`} aria-hidden=\"true\">\n <circle\n className={styles.track}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={strokeWidth}\n />\n <circle\n className={styles.value}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={dash}\n />\n </svg>\n {showValue && !indeterminate && (\n <span className={styles.text}>\n {formatValue ? formatValue(percent, clamped) : `${percent}%`}\n </span>\n )}\n </span>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './skeleton.module.scss';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'text' | 'rect' | 'circle';\n width?: number | string;\n height?: number | string;\n}\n\nexport function Skeleton({\n variant = 'text',\n width,\n height,\n className,\n style,\n ...props\n}: SkeletonProps) {\n return (\n <span\n aria-hidden=\"true\"\n className={cn(styles.skeleton, styles[variant], className)}\n style={{ width, height, ...style }}\n {...props}\n />\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Spinner } from '../spinner';\nimport styles from './empty-state.module.scss';\n\nexport type EmptyStateStatus = 'loading' | 'empty' | 'error';\n\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n status?: EmptyStateStatus;\n icon?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n}\n\nconst roles: Record<EmptyStateStatus, HTMLAttributes<HTMLDivElement>['role']> = {\n loading: 'status',\n empty: 'status',\n error: 'alert',\n};\n\nexport function EmptyState({\n status = 'empty',\n icon,\n title,\n description,\n action,\n className,\n children,\n ...props\n}: EmptyStateProps) {\n const visual = icon ?? (status === 'loading' ? <Spinner size=\"lg\" /> : null);\n return (\n <div\n role={roles[status]}\n aria-busy={status === 'loading' || undefined}\n className={cn(styles.emptyState, styles[status], className)}\n {...props}\n >\n {visual && <div className={styles.visual}>{visual}</div>}\n {title && <p className={styles.title}>{title}</p>}\n {description && <p className={styles.description}>{description}</p>}\n {children}\n {action && <div className={styles.action}>{action}</div>}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './status-dot.module.scss';\n\nexport type StatusDotVariant = 'neutral' | 'info' | 'success' | 'warning' | 'error';\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: StatusDotVariant;\n size?: 'sm' | 'md';\n pulse?: boolean;\n label?: string;\n}\n\nexport function StatusDot({\n variant = 'neutral',\n size = 'sm',\n pulse = false,\n label,\n className,\n ...props\n}: StatusDotProps) {\n return (\n <span\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn(\n styles.statusDot,\n styles[variant],\n styles[size],\n pulse && styles.pulse,\n className,\n )}\n {...props}\n />\n );\n}\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './chip.module.scss';\n\nexport interface ChipProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n size?: 'sm' | 'md';\n icon?: ReactNode;\n onToggle?: (selected: boolean) => void;\n}\n\nexport const Chip = forwardRef<HTMLButtonElement, ChipProps>(function Chip(\n { selected = false, size = 'md', icon, onToggle, onClick, className, children, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={selected}\n className={cn(styles.chip, styles[size], selected && styles.selected, className)}\n onClick={(event) => {\n onClick?.(event);\n onToggle?.(!selected);\n }}\n {...props}\n >\n {icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {children}\n </button>\n );\n});\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './segmented-control.module.scss';\n\nexport interface SegmentedControlOption {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps\n extends Omit<HTMLAttributes<HTMLFieldSetElement>, 'onChange'> {\n options: SegmentedControlOption[];\n value: string;\n onChange: (value: string) => void;\n size?: 'sm' | 'md';\n}\n\nexport function SegmentedControl({\n options,\n value,\n onChange,\n size = 'md',\n className,\n ...props\n}: SegmentedControlProps) {\n return (\n <fieldset className={cn(styles.group, styles[size], className)} {...props}>\n {options.map((option) => {\n const active = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n aria-pressed={active}\n disabled={option.disabled}\n className={cn(styles.segment, active && styles.active)}\n onClick={() => onChange(option.value)}\n >\n {option.icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {option.icon}\n </span>\n )}\n {option.label}\n </button>\n );\n })}\n </fieldset>\n );\n}\n","import {\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './tabs.module.scss';\n\nexport type TabsOrientation = 'horizontal' | 'vertical';\n\nexport interface TabItem {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n content?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n items: TabItem[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n orientation?: TabsOrientation;\n size?: 'sm' | 'md';\n activation?: 'automatic' | 'manual';\n tablistLabel?: string;\n}\n\nexport function Tabs({\n items,\n value,\n defaultValue,\n onChange,\n orientation = 'horizontal',\n size = 'md',\n activation = 'automatic',\n tablistLabel,\n className,\n ...props\n}: TabsProps) {\n const uid = useId();\n const tabId = (item: TabItem) => `fui-tab-${uid}-${item.value}`;\n const panelId = (item: TabItem) => `fui-tabpanel-${uid}-${item.value}`;\n\n const firstEnabled = items.find((item) => !item.disabled)?.value;\n const [internal, setInternal] = useState(defaultValue ?? firstEnabled ?? '');\n const selected = value ?? internal;\n const activeItem = items.find((item) => item.value === selected);\n\n const tabRefs = useRef(new Map<string, HTMLButtonElement>());\n\n const select = (next: string) => {\n if (value == null) setInternal(next);\n if (next !== selected) onChange?.(next);\n };\n\n const step = (from: number, delta: number) => {\n for (let i = 1; i <= items.length; i++) {\n const index = (from + delta * i + items.length * i) % items.length;\n if (!items[index].disabled) return index;\n }\n return from;\n };\n\n const edge = (back: boolean) => {\n const list = back ? [...items].reverse() : items;\n const found = list.find((item) => !item.disabled);\n return found ? items.indexOf(found) : -1;\n };\n\n const focusTab = (index: number) => {\n const item = items[index];\n if (!item) return;\n tabRefs.current.get(item.value)?.focus();\n if (activation === 'automatic') select(item.value);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n const vertical = orientation === 'vertical';\n const prevKey = vertical ? 'ArrowUp' : 'ArrowLeft';\n const nextKey = vertical ? 'ArrowDown' : 'ArrowRight';\n\n switch (event.key) {\n case prevKey:\n event.preventDefault();\n focusTab(step(index, -1));\n break;\n case nextKey:\n event.preventDefault();\n focusTab(step(index, 1));\n break;\n case 'Home':\n event.preventDefault();\n focusTab(edge(false));\n break;\n case 'End':\n event.preventDefault();\n focusTab(edge(true));\n break;\n case 'Enter':\n case ' ':\n if (activation === 'manual') {\n event.preventDefault();\n select(items[index].value);\n }\n break;\n }\n };\n\n return (\n <div className={cn(styles.tabs, styles[orientation], className)} {...props}>\n <div\n role=\"tablist\"\n aria-label={tablistLabel}\n aria-orientation={orientation}\n className={cn(styles.tablist, styles[size])}\n >\n {items.map((item, index) => {\n const active = item.value === selected;\n return (\n <button\n key={item.value}\n ref={(node) => {\n if (node) tabRefs.current.set(item.value, node);\n else tabRefs.current.delete(item.value);\n }}\n type=\"button\"\n role=\"tab\"\n id={tabId(item)}\n aria-selected={active}\n aria-controls={item.content != null ? panelId(item) : undefined}\n tabIndex={active ? 0 : -1}\n disabled={item.disabled}\n className={cn(styles.tab, active && styles.active)}\n onClick={() => select(item.value)}\n onKeyDown={(event) => onKeyDown(event, index)}\n >\n {item.icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n );\n })}\n </div>\n {activeItem?.content != null && (\n <div\n role=\"tabpanel\"\n id={panelId(activeItem)}\n aria-labelledby={tabId(activeItem)}\n tabIndex={0}\n className={styles.panel}\n >\n {activeItem.content}\n </div>\n )}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './kbd.module.scss';\n\nexport type KbdProps = HTMLAttributes<HTMLElement>;\n\nexport function Kbd({ className, children, ...props }: KbdProps) {\n return (\n <kbd className={cn(styles.kbd, className)} {...props}>\n {children}\n </kbd>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './inline-code.module.scss';\n\nexport type InlineCodeProps = HTMLAttributes<HTMLElement>;\n\nexport function InlineCode({ className, children, ...props }: InlineCodeProps) {\n return (\n <code className={cn(styles.inlineCode, className)} {...props}>\n {children}\n </code>\n );\n}\n","import { type HTMLAttributes, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './code-block.module.scss';\n\nexport type CodeDiff = 'add' | 'remove';\n\nexport interface CodeLine {\n content: string;\n diff?: CodeDiff;\n}\n\nexport interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n code?: string;\n lines?: CodeLine[];\n filename?: string;\n copyable?: boolean;\n}\n\nconst markers: Record<CodeDiff, string> = { add: '+', remove: '-' };\n\nexport function CodeBlock({\n code,\n lines,\n filename,\n copyable = true,\n className,\n ...props\n}: CodeBlockProps) {\n const [copied, setCopied] = useState(false);\n\n const resolved: CodeLine[] =\n lines ?? (code != null ? code.split('\\n').map((content) => ({ content })) : []);\n const rawText = resolved.map((line) => line.content).join('\\n');\n const hasDiff = resolved.some((line) => line.diff != null);\n\n const copy = () => {\n const write = navigator.clipboard?.writeText(rawText);\n if (!write) return;\n write.then(\n () => {\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n },\n () => setCopied(false),\n );\n };\n\n const seen = new Map<string, number>();\n const keyed = resolved.map((line) => {\n const base = `${line.diff ?? ''}\u0000${line.content}`;\n const occurrence = seen.get(base) ?? 0;\n seen.set(base, occurrence + 1);\n return { line, key: `${base}\u0000${occurrence}` };\n });\n\n return (\n <div className={cn(styles.codeBlock, className)} {...props}>\n {(filename || copyable) && (\n <div className={styles.header}>\n {filename && <span className={styles.filename}>{filename}</span>}\n {copyable && (\n <button\n type=\"button\"\n className={styles.copy}\n aria-label={copied ? 'Copied' : 'Copy code'}\n onClick={copy}\n >\n {copied ? 'copied' : 'copy'}\n </button>\n )}\n </div>\n )}\n <pre className={styles.pre}>\n <code>\n {keyed.map(({ line, key }) => (\n <span key={key} className={cn(styles.line, line.diff && styles[line.diff])}>\n {hasDiff && (\n <span className={styles.marker} aria-hidden=\"true\">\n {line.diff ? markers[line.diff] : ''}\n </span>\n )}\n <span className={styles.content}>{line.content}</span>\n </span>\n ))}\n </code>\n </pre>\n </div>\n );\n}\n","import {\n type ButtonHTMLAttributes,\n type MouseEvent,\n type ReactNode,\n forwardRef,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './copy-button.module.scss';\n\nexport interface CopyButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n label?: string;\n copiedLabel?: string;\n icon?: ReactNode;\n copiedIcon?: ReactNode;\n timeout?: number;\n onCopy?: () => void;\n}\n\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(function CopyButton(\n {\n value,\n label = 'copy',\n copiedLabel = 'copied',\n icon,\n copiedIcon,\n timeout = 2000,\n onCopy,\n onClick,\n className,\n ...props\n },\n ref,\n) {\n const [copied, setCopied] = useState(false);\n const timer = useRef<number>();\n\n useEffect(() => () => window.clearTimeout(timer.current), []);\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n const write = navigator.clipboard?.writeText(value);\n if (!write) return;\n write.then(\n () => {\n setCopied(true);\n onCopy?.();\n window.clearTimeout(timer.current);\n timer.current = window.setTimeout(() => setCopied(false), timeout);\n },\n () => setCopied(false),\n );\n };\n\n const currentIcon = copied ? (copiedIcon ?? icon) : icon;\n const currentLabel = copied ? copiedLabel : label;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={currentLabel}\n className={cn(styles.copyButton, copied && styles.copied, className)}\n onClick={handleClick}\n {...props}\n >\n {currentIcon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {currentIcon}\n </span>\n )}\n <span>{currentLabel}</span>\n </button>\n );\n});\n","import { type CSSProperties, type HTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Skeleton } from '../skeleton';\nimport styles from './data-table.module.scss';\n\nexport type DataTableAlign = 'left' | 'center' | 'right';\n\nexport interface DataTableColumn<T> {\n key: string;\n header: ReactNode;\n cell: (row: T) => ReactNode;\n width?: number | string;\n align?: DataTableAlign;\n}\n\nexport interface DataTableProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n data: T[];\n columns: DataTableColumn<T>[];\n keyExtractor: (row: T) => string;\n striped?: boolean;\n hoverable?: boolean;\n compact?: boolean;\n loading?: boolean;\n loadingRows?: number;\n emptyMessage?: ReactNode;\n caption?: ReactNode;\n rowClassName?: string | ((row: T) => string);\n onRowClick?: (row: T) => void;\n}\n\nexport function DataTable<T>({\n data,\n columns,\n keyExtractor,\n striped = true,\n hoverable = true,\n compact = false,\n loading = false,\n loadingRows = 3,\n emptyMessage = 'No data',\n caption,\n rowClassName,\n onRowClick,\n className,\n ...props\n}: DataTableProps<T>) {\n const alignClass = (align?: DataTableAlign) => (align ? styles[align] : undefined);\n const placeholders = useMemo(\n () => Array.from({ length: loadingRows }, (_, index) => `fui-data-table-loading-${index}`),\n [loadingRows],\n );\n\n return (\n <div className={cn(styles.wrapper, className)} {...props}>\n <table className={cn(styles.table, compact && styles.compact)}>\n {caption != null && <caption className={styles.caption}>{caption}</caption>}\n <thead className={styles.head}>\n <tr>\n {columns.map((column) => (\n <th\n key={column.key}\n scope=\"col\"\n className={cn(styles.th, alignClass(column.align))}\n style={{ width: column.width } as CSSProperties}\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading &&\n placeholders.map((placeholder) => (\n <tr key={placeholder} className={styles.row}>\n {columns.map((column) => (\n <td key={column.key} className={cn(styles.td, alignClass(column.align))}>\n <Skeleton width=\"70%\" />\n </td>\n ))}\n </tr>\n ))}\n {!loading && data.length === 0 && (\n <tr className={styles.row}>\n <td colSpan={columns.length} className={styles.empty}>\n {emptyMessage}\n </td>\n </tr>\n )}\n {!loading &&\n data.map((row, index) => {\n const rowKey = keyExtractor(row);\n return (\n <tr\n key={rowKey}\n className={cn(\n styles.row,\n striped && index % 2 === 1 && styles.striped,\n hoverable && styles.hoverable,\n onRowClick && styles.clickable,\n typeof rowClassName === 'function' ? rowClassName(row) : rowClassName,\n )}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n onKeyDown={\n onRowClick\n ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onRowClick(row);\n }\n }\n : undefined\n }\n >\n {columns.map((column) => (\n <td\n key={`${rowKey}-${column.key}`}\n className={cn(styles.td, alignClass(column.align))}\n >\n {column.cell(row)}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './breadcrumb.module.scss';\n\nexport interface BreadcrumbItem {\n label: ReactNode;\n href?: string;\n onClick?: () => void;\n current?: boolean;\n}\n\nexport interface BreadcrumbProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n items: BreadcrumbItem[];\n separator?: ReactNode;\n}\n\nfunction BreadcrumbNode({ item, current }: { item: BreadcrumbItem; current: boolean }) {\n if (current) {\n return (\n <span className={styles.current} aria-current=\"page\">\n {item.label}\n </span>\n );\n }\n if (item.href) {\n return (\n <a className={styles.link} href={item.href} onClick={item.onClick}>\n {item.label}\n </a>\n );\n }\n if (item.onClick) {\n return (\n <button type=\"button\" className={styles.link} onClick={item.onClick}>\n {item.label}\n </button>\n );\n }\n return <span className={styles.link}>{item.label}</span>;\n}\n\nexport function Breadcrumb({ items, separator = '/', className, ...props }: BreadcrumbProps) {\n const seen = new Map<string, number>();\n\n return (\n <nav aria-label=\"Breadcrumb\" className={cn(styles.breadcrumb, className)} {...props}>\n <ol className={styles.list}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const current = item.current ?? isLast;\n const base = item.href ?? (typeof item.label === 'string' ? item.label : '');\n const occurrence = seen.get(base) ?? 0;\n seen.set(base, occurrence + 1);\n\n return (\n <li key={`${base} ${occurrence}`} className={styles.item}>\n <BreadcrumbNode item={item} current={current} />\n {!isLast && (\n <span className={styles.separator} aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import { type KeyboardEvent, type ReactNode, useEffect, useId, useRef, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './menu.module.scss';\n\nexport interface MenuItem {\n label: ReactNode;\n onSelect?: () => void;\n icon?: ReactNode;\n disabled?: boolean;\n danger?: boolean;\n selected?: boolean;\n}\n\nexport interface MenuSeparator {\n separator: true;\n}\n\nexport type MenuEntry = MenuItem | MenuSeparator;\n\nexport interface MenuProps {\n trigger: ReactNode;\n items: MenuEntry[];\n triggerLabel?: string;\n align?: 'start' | 'end';\n className?: string;\n}\n\nfunction isSeparator(entry: MenuEntry): entry is MenuSeparator {\n return 'separator' in entry;\n}\n\nfunction isSelectable(entry: MenuEntry): entry is MenuItem {\n return !isSeparator(entry) && !entry.disabled;\n}\n\nexport function Menu({ trigger, items, triggerLabel, align = 'start', className }: MenuProps) {\n const uid = useId();\n const triggerId = `fui-menu-trigger-${uid}`;\n const menuId = `fui-menu-${uid}`;\n const itemId = (index: number) => `${menuId}-item-${index}`;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const firstEnabled = () => items.findIndex(isSelectable);\n const lastEnabled = () => {\n for (let i = items.length - 1; i >= 0; i--) if (isSelectable(items[i])) return i;\n return -1;\n };\n const nextEnabled = (from: number) => {\n for (let i = from + 1; i < items.length; i++) if (isSelectable(items[i])) return i;\n return from;\n };\n const prevEnabled = (from: number) => {\n for (let i = from - 1; i >= 0; i--) if (isSelectable(items[i])) return i;\n return from;\n };\n\n useEffect(() => {\n if (open) listRef.current?.focus();\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const onPointer = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) setOpen(false);\n };\n window.addEventListener('pointerdown', onPointer);\n return () => window.removeEventListener('pointerdown', onPointer);\n }, [open]);\n\n const openMenu = (index: number) => {\n setActiveIndex(index);\n setOpen(true);\n };\n\n const close = (focusTrigger = true) => {\n setOpen(false);\n if (focusTrigger) triggerRef.current?.focus();\n };\n\n const select = (index: number) => {\n const item = items[index];\n if (!item || !isSelectable(item)) return;\n item.onSelect?.();\n close();\n };\n\n const onTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!open) openMenu(firstEnabled());\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!open) openMenu(lastEnabled());\n break;\n }\n };\n\n const onMenuKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n setActiveIndex((i) => nextEnabled(i));\n break;\n case 'ArrowUp':\n event.preventDefault();\n setActiveIndex((i) => prevEnabled(i));\n break;\n case 'Home':\n event.preventDefault();\n setActiveIndex(firstEnabled());\n break;\n case 'End':\n event.preventDefault();\n setActiveIndex(lastEnabled());\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (activeIndex >= 0) select(activeIndex);\n break;\n case 'Escape':\n event.preventDefault();\n close();\n break;\n case 'Tab':\n setOpen(false);\n break;\n }\n };\n\n return (\n <div ref={rootRef} className={cn(styles.menu, className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n id={triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n aria-label={triggerLabel}\n className={styles.trigger}\n onClick={() => (open ? close() : openMenu(firstEnabled()))}\n onKeyDown={onTriggerKeyDown}\n >\n {trigger}\n </button>\n {open && (\n <div\n ref={listRef}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n aria-activedescendant={activeIndex >= 0 ? itemId(activeIndex) : undefined}\n tabIndex={-1}\n className={cn(styles.list, styles[align])}\n onKeyDown={onMenuKeyDown}\n >\n {items.map((item, index) =>\n isSeparator(item) ? (\n <hr key={itemId(index)} className={styles.separator} />\n ) : (\n <button\n key={itemId(index)}\n type=\"button\"\n id={itemId(index)}\n role={item.selected == null ? 'menuitem' : 'menuitemradio'}\n aria-checked={item.selected}\n tabIndex={-1}\n disabled={item.disabled}\n className={cn(\n styles.item,\n item.danger && styles.danger,\n item.selected && styles.selected,\n index === activeIndex && styles.active,\n )}\n onPointerMove={() => !item.disabled && setActiveIndex(index)}\n onClick={() => select(index)}\n >\n {item.icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n ),\n )}\n </div>\n )}\n </div>\n );\n}\n","import { type InputHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './file-button.module.scss';\n\nexport interface FileButtonProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'children'> {\n onFiles: (files: FileList) => void;\n icon?: ReactNode;\n children: ReactNode;\n}\n\nexport const FileButton = forwardRef<HTMLInputElement, FileButtonProps>(function FileButton(\n { onFiles, icon, children, disabled, className, ...props },\n ref,\n) {\n return (\n <label className={cn(styles.fileButton, disabled && styles.disabled, className)}>\n <input\n ref={ref}\n type=\"file\"\n className={styles.input}\n disabled={disabled}\n onChange={(event) => {\n const { files } = event.target;\n if (files && files.length > 0) onFiles(files);\n }}\n {...props}\n />\n {icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {children}\n </label>\n );\n});\n","import type { ReactNode, SVGProps } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './icon.module.scss';\n\nexport type IconName =\n | 'close'\n | 'check'\n | 'copy'\n | 'plus'\n | 'folder'\n | 'lightbulb'\n | 'chevron-up'\n | 'chevron-down'\n | 'chevron-left'\n | 'chevron-right'\n | 'play'\n | 'flag'\n | 'sort-asc'\n | 'sort-desc'\n | 'refresh'\n | 'more'\n | 'wand'\n | 'merge'\n | 'push'\n | 'pull'\n | 'shuffle'\n | 'commit'\n | 'github'\n | 'note';\n\nexport interface IconProps extends Omit<SVGProps<SVGSVGElement>, 'name' | 'children'> {\n name: IconName;\n size?: number | string;\n title?: string;\n}\n\nconst paths: Record<IconName, ReactNode> = {\n close: <path d=\"M6 6l12 12M18 6L6 18\" />,\n check: <path d=\"M5 13l4 4L19 7\" />,\n copy: (\n <>\n <rect x=\"8\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\" />\n <path d=\"M16 8V6a2 2 0 00-2-2H6a2 2 0 00-2 2v8a2 2 0 002 2h2\" />\n </>\n ),\n plus: <path d=\"M12 5v14M5 12h14\" />,\n folder: <path d=\"M3 6a2 2 0 012-2h4l2 2h8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2V6z\" />,\n lightbulb: (\n <>\n <path d=\"M9 18h6\" />\n <path d=\"M10 21h4\" />\n <path d=\"M12 3a6 6 0 00-4 10.5c.7.7 1 1.5 1 2.5h6c0-1 .3-1.8 1-2.5A6 6 0 0012 3z\" />\n </>\n ),\n 'chevron-up': <path d=\"M6 15l6-6 6 6\" />,\n 'chevron-down': <path d=\"M6 9l6 6 6-6\" />,\n 'chevron-left': <path d=\"M15 6l-6 6 6 6\" />,\n 'chevron-right': <path d=\"M9 6l6 6-6 6\" />,\n play: <path d=\"M8 5v14l11-7z\" />,\n flag: (\n <>\n <path d=\"M5 21V4\" />\n <path d=\"M5 4h11l-2 4 2 4H5\" />\n </>\n ),\n 'sort-asc': (\n <>\n <path d=\"M12 5v14\" />\n <path d=\"M8 9l4-4 4 4\" />\n </>\n ),\n 'sort-desc': (\n <>\n <path d=\"M12 5v14\" />\n <path d=\"M8 15l4 4 4-4\" />\n </>\n ),\n refresh: (\n <>\n <path d=\"M3 12a9 9 0 019-9 9 9 0 016.7 3L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 01-9 9 9 9 0 01-6.7-3L3 16\" />\n <path d=\"M3 21v-5h5\" />\n </>\n ),\n more: (\n <>\n <circle cx=\"5\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n wand: (\n <>\n <path d=\"M3 21l12-12\" />\n <path d=\"M12.5 6.5l5 5\" />\n <path d=\"M18 3v4M16 5h4\" />\n </>\n ),\n merge: (\n <>\n <circle cx=\"6\" cy=\"6\" r=\"3\" />\n <circle cx=\"18\" cy=\"18\" r=\"3\" />\n <path d=\"M6 9v12\" />\n <path d=\"M6 9a9 9 0 009 9\" />\n </>\n ),\n push: (\n <>\n <path d=\"M5 4h14\" />\n <path d=\"M12 19V8\" />\n <path d=\"M7 13l5-5 5 5\" />\n </>\n ),\n pull: (\n <>\n <path d=\"M5 20h14\" />\n <path d=\"M12 5v11\" />\n <path d=\"M7 11l5 5 5-5\" />\n </>\n ),\n shuffle: (\n <>\n <path d=\"M16 3h5v5\" />\n <path d=\"M4 20L21 3\" />\n <path d=\"M21 16v5h-5\" />\n <path d=\"M15 15l6 6\" />\n <path d=\"M4 4l5 5\" />\n </>\n ),\n commit: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M2 12h6\" />\n <path d=\"M16 12h6\" />\n </>\n ),\n github: (\n <path\n fill=\"currentColor\"\n stroke=\"none\"\n d=\"M12 .5C5.37.5 0 5.78 0 12.29c0 5.2 3.44 9.6 8.2 11.16.6.1.82-.25.82-.56v-2c-3.34.72-4.04-1.6-4.04-1.6-.55-1.37-1.34-1.74-1.34-1.74-1.1-.74.08-.73.08-.73 1.2.08 1.84 1.22 1.84 1.22 1.07 1.8 2.8 1.29 3.5.98.1-.77.42-1.3.76-1.6-2.67-.3-5.47-1.31-5.47-5.83 0-1.29.47-2.34 1.24-3.17-.13-.3-.54-1.52.12-3.17 0 0 1.01-.32 3.3 1.21a11.5 11.5 0 016 0c2.28-1.53 3.29-1.21 3.29-1.21.66 1.65.25 2.87.12 3.17.77.83 1.24 1.88 1.24 3.17 0 4.53-2.81 5.53-5.49 5.82.43.37.81 1.1.81 2.22v3.29c0 .32.21.68.82.56A12.02 12.02 0 0024 12.29C24 5.78 18.63.5 12 .5z\"\n />\n ),\n note: (\n <>\n <path d=\"M6 3h9l4 4v13a1 1 0 01-1 1H6a1 1 0 01-1-1V4a1 1 0 011-1z\" />\n <path d=\"M14 3v5h5\" />\n <path d=\"M9 13h6M9 17h6\" />\n </>\n ),\n};\n\nexport function Icon({ name, size = 24, title, className, ...props }: IconProps) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n aria-label={title}\n className={cn(styles.icon, className)}\n {...props}\n >\n {title && <title>{title}</title>}\n {paths[name]}\n </svg>\n );\n}\n"],"names":["cn","inputs","twMerge","clsx","Grain","opacity","className","style","props","vars","jsx","styles","mulberry32","seed","a","t","blobPath","rng","cx","cy","r","vertices","irregularity","squashX","squashY","phase","pts","i","angle","radius","d","p0","p1","p2","p3","c1x","c1y","c2x","c2y","generateLamp","count","blobs","dur","wobbleDur","peak","depthCount","depthBlobs","Glow","uid","useId","goo","gooSoft","clip","grad","fallbackSeed","useState","useMemo","renderWax","configs","b","jsxs","Backdrop","grain","glow","children","Glass","forwardRef","blur","ref","Button","variant","size","fullWidth","icon","iconRight","isActive","IconButton","label","LinkButton","color","Stamp","dot","fillColor","textColor","onClick","Tag","colorOverrides","GAP","EDGE","composeHandlers","theirs","ours","event","Tooltip","content","placement","delay","id","open","setOpen","coords","setCoords","bubbleRef","useRef","rectRef","timer","hide","useCallback","useEffect","onKey","e","useLayoutEffect","rect","bubble","top","left","disabled","child","Children","childProps","showNow","el","trigger","cloneElement","Fragment","createPortal","ToastContext","createContext","ToastProvider","position","defaultDuration","toasts","setToasts","timers","counter","dismiss","current","handle","toast","options","duration","pending","value","useToast","ctx","useContext","activateOnEnterOrSpace","CardRoot","interactive","Title","Body","Card","Input","helperText","error","inputId","messageId","invalid","message","Textarea","Select","defaultValue","onChange","placeholder","name","required","selectId","listId","optionId","index","isControlled","internalValue","setInternalValue","currentValue","activeIndex","setActiveIndex","rootRef","triggerRef","selectedIndex","o","selectedOption","firstEnabled","lastEnabled","nextEnabled","from","prevEnabled","onPointer","_a","openList","commit","next","onKeyDown","option","Checkbox","Radio","RadioGroup","legend","orientation","groupName","Switch","focusableSelector","ModalRoot","onClose","title","titleId","panelRef","previouslyFocused","onCloseRef","focusables","_b","first","last","previousOverflow","ModalBody","ModalFooter","ModalError","Modal","DrawerRoot","side","DrawerBody","DrawerFooter","Drawer","ListItem","active","action","icons","Alert","dismissible","onDismiss","Divider","Spinner","Progress","max","height","clamped","fill","Slider","min","step","length","showValue","formatValue","vertical","fraction","track","CircularProgress","strokeWidth","indeterminate","percent","circumference","dash","Skeleton","width","roles","EmptyState","status","description","visual","StatusDot","pulse","Chip","selected","onToggle","SegmentedControl","Tabs","items","activation","tablistLabel","tabId","item","panelId","internal","setInternal","activeItem","tabRefs","select","delta","edge","back","found","focusTab","prevKey","nextKey","node","Kbd","InlineCode","markers","CodeBlock","code","lines","filename","copyable","copied","setCopied","resolved","rawText","line","hasDiff","copy","write","seen","keyed","base","occurrence","key","CopyButton","copiedLabel","copiedIcon","timeout","onCopy","handleClick","currentIcon","currentLabel","DataTable","data","columns","keyExtractor","striped","hoverable","compact","loading","loadingRows","emptyMessage","caption","rowClassName","onRowClick","alignClass","align","placeholders","_","column","row","rowKey","BreadcrumbNode","Breadcrumb","separator","isLast","isSeparator","entry","isSelectable","Menu","triggerLabel","triggerId","menuId","itemId","listRef","openMenu","close","focusTrigger","onTriggerKeyDown","onMenuKeyDown","FileButton","onFiles","files","paths","Icon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/utils/style-helpers.ts","../src/components/grain/grain.tsx","../src/components/glow/glow.tsx","../src/components/backdrop/backdrop.tsx","../src/components/glass/glass.tsx","../src/components/button/button.tsx","../src/components/icon-button/icon-button.tsx","../src/components/lamp-button/lamp-button.tsx","../src/components/lamp-icon-button/lamp-icon-button.tsx","../src/components/lamp-switch/lamp-switch.tsx","../src/components/lamp-status/lamp-status.tsx","../src/components/lamp-meter/lamp-meter.tsx","../src/components/link-button/link-button.tsx","../src/components/stamp/stamp.tsx","../src/components/tooltip/tooltip.tsx","../src/components/toast/toast-context.ts","../src/components/toast/toast-provider.tsx","../src/components/toast/use-toast.ts","../src/components/card/card.tsx","../src/components/input/input.tsx","../src/components/textarea/textarea.tsx","../src/components/select/select.tsx","../src/components/checkbox/checkbox.tsx","../src/components/radio/radio.tsx","../src/components/radio/radio-group.tsx","../src/components/switch/switch.tsx","../src/components/modal/modal.tsx","../src/components/drawer/drawer.tsx","../src/components/list-item/list-item.tsx","../src/components/alert/alert.tsx","../src/components/divider/divider.tsx","../src/components/spinner/spinner.tsx","../src/components/progress/progress.tsx","../src/components/slider/slider.tsx","../src/components/circular-progress/circular-progress.tsx","../src/components/skeleton/skeleton.tsx","../src/components/empty-state/empty-state.tsx","../src/components/status-dot/status-dot.tsx","../src/components/chip/chip.tsx","../src/components/segmented-control/segmented-control.tsx","../src/components/tabs/tabs.tsx","../src/components/kbd/kbd.tsx","../src/components/inline-code/inline-code.tsx","../src/components/code-block/code-block.tsx","../src/components/copy-button/copy-button.tsx","../src/components/data-table/data-table.tsx","../src/components/breadcrumb/breadcrumb.tsx","../src/components/menu/menu.tsx","../src/components/file-button/file-button.tsx","../src/components/icon/icon.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(inputs));\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './grain.module.scss';\n\nexport interface GrainProps extends HTMLAttributes<HTMLDivElement> {\n /** Overlay opacity (0–1). Defaults to 0.06. */\n opacity?: number;\n}\n\n/**\n * Animated film-grain overlay. Drop it inside a positioned container to add a\n * drifting noise texture. Purely decorative — `aria-hidden` by default.\n */\nexport function Grain({ opacity, className, style, ...props }: GrainProps) {\n const vars =\n opacity != null ? ({ '--fui-grain-opacity': String(opacity) } as CSSProperties) : undefined;\n // Default opacity lives in the SCSS (0.4 dark / 0.2 light) — override via the `opacity` prop.\n\n return (\n <div\n aria-hidden\n className={cn(styles.grain, className)}\n style={{ ...vars, ...style }}\n {...props}\n />\n );\n}\n","import { type CSSProperties, useId, useMemo, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './glow.module.scss';\n\nexport interface GlowProps {\n className?: string;\n /**\n * Seed for the procedurally generated blobs. Each mount picks a random lamp\n * by default; pass a fixed seed for a reproducible one (e.g. with SSR).\n */\n seed?: number;\n}\n\n// mulberry32 — tiny seeded PRNG so a given seed always yields the same lamp.\nfunction mulberry32(seed: number) {\n let a = seed | 0;\n return () => {\n a = (a + 0x6d2b79f5) | 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n// An organic closed outline: 6–9 vertices scattered around a (squashed)\n// circle, joined by a Catmull-Rom spline converted to cubic Béziers. The goo\n// filter smooths whatever this produces, so irregularity reads as lava, not\n// polygons.\nfunction blobPath(rng: () => number, cx: number, cy: number, r: number): string {\n const vertices = 6 + Math.floor(rng() * 4);\n const irregularity = 0.12 + rng() * 0.28;\n const squashX = 0.85 + rng() * 0.4;\n const squashY = 0.85 + rng() * 0.4;\n const phase = rng() * Math.PI * 2;\n\n const pts: [number, number][] = [];\n for (let i = 0; i < vertices; i++) {\n const angle = phase + (i / vertices) * Math.PI * 2;\n const radius = r * (1 - irregularity + rng() * irregularity * 2);\n pts.push([cx + Math.cos(angle) * radius * squashX, cy + Math.sin(angle) * radius * squashY]);\n }\n\n let d = `M${pts[0][0].toFixed(1)},${pts[0][1].toFixed(1)}`;\n for (let i = 0; i < vertices; i++) {\n const p0 = pts[(i - 1 + vertices) % vertices];\n const p1 = pts[i];\n const p2 = pts[(i + 1) % vertices];\n const p3 = pts[(i + 2) % vertices];\n const c1x = p1[0] + (p2[0] - p0[0]) / 6;\n const c1y = p1[1] + (p2[1] - p0[1]) / 6;\n const c2x = p2[0] - (p3[0] - p1[0]) / 6;\n const c2y = p2[1] - (p3[1] - p1[1]) / 6;\n d += `C${c1x.toFixed(1)},${c1y.toFixed(1)} ${c2x.toFixed(1)},${c2y.toFixed(1)} ${p2[0].toFixed(1)},${p2[1].toFixed(1)}`;\n }\n return `${d}Z`;\n}\n\ninterface BlobConfig {\n d: string;\n opacity: number;\n dur: number;\n delay: number;\n rise: number;\n wobbleDur: number;\n wobbleDelay: number;\n sway: number;\n}\n\ninterface LampConfig {\n blobs: BlobConfig[];\n depthBlobs: BlobConfig[];\n}\n\nfunction generateLamp(seed: number): LampConfig {\n const rng = mulberry32(seed);\n const count = 4 + Math.floor(rng() * 2);\n const blobs: BlobConfig[] = [];\n for (let i = 0; i < count; i++) {\n const r = 13 + rng() * 8; // narrow band — similar sizes, no giant/tiny pair\n const cx = 270 + rng() * 50; // spread across the pool, inside the glass\n const cy = 350 + rng() * 24; // resting in the pool — the cycle rises from here\n const dur = 24 + rng() * 28; // full rise-hover-sink cycle\n const wobbleDur = 6 + rng() * 8;\n // Climb target in lamp coords. At the 4× backdrop scale the screen top\n // sits at y≈225, so most flights poke a little past the screen edge;\n // the clip shape ends at y=174, comfortably off-screen above it.\n const peak = 196 + rng() * 42;\n blobs.push({\n d: blobPath(rng, cx, cy, r),\n opacity: 0.6 + rng() * 0.4,\n dur,\n // Stratified phases: blob i starts i/count of the way through its\n // cycle (± jitter), so the wax stays spread through the lamp instead\n // of randomly clumping into one goo column mid-flight.\n delay: -(((i + rng() * 0.6) / count) * dur),\n rise: cy - peak,\n wobbleDur,\n wobbleDelay: -(rng() * wobbleDur),\n sway: 3 + rng() * 5,\n });\n }\n\n // Background wax — a dim, slow, softer-edged layer rendered behind the\n // main blobs to give the lamp depth: slightly smaller (perspective),\n // much fainter, and drifting at roughly half speed.\n const depthCount = 3 + Math.floor(rng() * 2);\n const depthBlobs: BlobConfig[] = [];\n for (let i = 0; i < depthCount; i++) {\n const r = 12 + rng() * 6;\n const cx = 268 + rng() * 54;\n const cy = 352 + rng() * 24;\n const dur = 36 + rng() * 30;\n const wobbleDur = 9 + rng() * 8;\n const peak = 205 + rng() * 45; // stays a touch lower — the foreground owns the top edge\n depthBlobs.push({\n d: blobPath(rng, cx, cy, r),\n // Near-full alpha INTO the filter — the goo threshold erases dim input.\n // The layer is faded as a whole, after filtering, in the JSX.\n opacity: 0.85 + rng() * 0.15,\n dur,\n delay: -(((i + rng() * 0.6) / depthCount) * dur),\n rise: cy - peak,\n wobbleDur,\n wobbleDelay: -(rng() * wobbleDur),\n sway: 2 + rng() * 3,\n });\n }\n\n return { blobs, depthBlobs };\n}\n\n/**\n * The signature lava-lamp ambient glow — gooey blobs drifting behind a soft\n * radial halo. Colour follows `--fui-glow` (via `currentColor`), so it retints\n * with the theme; size/position are controlled by the parent. Blob shapes are\n * procedurally generated: random per mount unless `seed` is given.\n */\nexport function Glow({ className, seed }: GlowProps) {\n const uid = useId().replace(/:/g, '');\n const goo = `goo-${uid}`;\n const gooSoft = `goo-soft-${uid}`;\n const clip = `clip-${uid}`;\n const grad = `grad-${uid}`;\n\n const [fallbackSeed] = useState(() => Math.floor(Math.random() * 2 ** 31));\n const { blobs, depthBlobs } = useMemo(\n () => generateLamp(seed ?? fallbackSeed),\n [seed, fallbackSeed],\n );\n\n const renderWax = (configs: BlobConfig[]) =>\n configs.map((b) => (\n <g\n key={b.d}\n className={styles.blob}\n style={\n {\n opacity: b.opacity,\n '--lava-dur': `${b.dur.toFixed(1)}s`,\n '--lava-delay': `${b.delay.toFixed(1)}s`,\n '--lava-rise': `${b.rise.toFixed(0)}px`,\n } as CSSProperties\n }\n >\n <path\n className={styles.wobble}\n d={b.d}\n style={\n {\n '--lava-wdur': `${b.wobbleDur.toFixed(1)}s`,\n '--lava-wdelay': `${b.wobbleDelay.toFixed(1)}s`,\n '--lava-sway': `${b.sway.toFixed(1)}px`,\n } as CSSProperties\n }\n />\n </g>\n ));\n\n return (\n <svg\n className={cn(styles.glow, className)}\n viewBox=\"0 0 600 600\"\n aria-hidden\n role=\"presentation\"\n >\n <defs>\n <filter id={goo} colorInterpolationFilters=\"sRGB\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"8\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 21 -9\"\n result=\"cm\"\n />\n <feBlend />\n </filter>\n\n {/* Softer goo for the depth layer — bigger blur, gentler threshold,\n so background wax reads as out-of-focus */}\n <filter id={gooSoft} colorInterpolationFilters=\"sRGB\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"10\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 14 -6\"\n />\n </filter>\n\n <clipPath id={clip}>\n <path d=\"M262,174h60l33.5,182.3c0,0,2.7,12.8,2.5,22.8c-7.5,0-131,0-131,0s-0.7-9.3,0-18C227.6,352.9,262,174,262,174z\" />\n </clipPath>\n\n <radialGradient id={grad} cx=\"300\" cy=\"300\" r=\"400\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0.0714\" stopColor=\"currentColor\" stopOpacity=\"0.19\" />\n <stop offset=\"0.3107\" stopColor=\"currentColor\" stopOpacity=\"0.13\" />\n <stop offset=\"0.553\" stopColor=\"currentColor\" stopOpacity=\"0.06\" />\n <stop offset=\"0.7828\" stopColor=\"currentColor\" stopOpacity=\"0.02\" />\n <stop offset=\"0.9847\" stopColor=\"currentColor\" stopOpacity=\"0\" />\n </radialGradient>\n </defs>\n\n <rect fill={`url(#${grad})`} width=\"600\" height=\"600\" />\n\n {/* Depth layer first — slow, soft-edged wax behind the main blobs.\n Opacity sits on this group so it dims AFTER the goo filter; dimming\n the blobs before it would push them under the threshold entirely. */}\n <g filter={`url(#${gooSoft})`} clipPath={`url(#${clip})`} fill=\"currentColor\" opacity={0.2}>\n {renderWax(depthBlobs)}\n </g>\n\n <g filter={`url(#${goo})`} clipPath={`url(#${clip})`} fill=\"currentColor\">\n {renderWax(blobs)}\n <path\n className={styles.botBlob}\n d=\"M354,381.2c6.8,3.4,5.4,7.4-5.6,10.4c-10.7,3.1-31.1,5.1-54.4,8.4c-23.3,3.3-43.7,0.8-54.4-2.4c-11-3.4-12.4-7.6-5.6-13.8c6.8-7,18.9-14.6,29.6-17.4c11-3.3,20.6-1.8,30.4-1.4c9.8,0.4,19.4,5.1,30.4,8.3C335.1,376.8,347.2,378.6,354,381.2z\"\n />\n </g>\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Glow } from '../glow';\nimport { Grain } from '../grain';\nimport styles from './backdrop.module.scss';\n\nexport interface BackdropProps {\n /** Render the drifting film-grain layer. Defaults to true. */\n grain?: boolean;\n /** Render the lava glow layer. Defaults to true. */\n glow?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\n/**\n * Full-bleed ambient background: the lava {@link Glow} and film {@link Grain}\n * layered behind its children. Use it as the outermost shell of a page.\n */\nexport function Backdrop({ grain = true, glow = true, className, children }: BackdropProps) {\n return (\n <div className={cn(styles.backdrop, className)}>\n {glow && (\n <div className={styles.glowLayer}>\n <Glow />\n </div>\n )}\n {grain && <Grain className={styles.grainLayer} />}\n <div className={styles.content}>{children}</div>\n </div>\n );\n}\n","import { type CSSProperties, type HTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './glass.module.scss';\n\nexport interface GlassProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Backdrop-blur radius in px. Defaults to the token (50).\n * Pass 0 to disable the filter entirely — useful for Glass nested inside\n * Glass, where the backdrop is already blurred.\n */\n blur?: number;\n}\n\n/**\n * The core frosted-glass surface: a translucent fill behind a heavy backdrop\n * blur, with a soft ambient shadow. The building block for panels and cards.\n */\nexport const Glass = forwardRef<HTMLDivElement, GlassProps>(function Glass(\n { blur, className, style, children, ...props },\n ref,\n) {\n // blur={0} must remove the filter, not apply blur(0px) — a zero-radius\n // backdrop-filter still forces the browser to isolate and re-composite a\n // render surface on every backdrop change. The frost lives on the ::before\n // layer, so both knobs travel as custom properties.\n const vars: CSSProperties | undefined =\n blur === 0\n ? ({ '--fui-glass-backdrop': 'none' } as CSSProperties)\n : blur != null\n ? ({ '--fui-glass-blur': `${blur}px` } as CSSProperties)\n : undefined;\n\n return (\n <div ref={ref} className={cn(styles.glass, className)} style={{ ...vars, ...style }} {...props}>\n {children}\n </div>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './button.module.scss';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n size?: 'sm' | 'md';\n fullWidth?: boolean;\n /** Leading icon slot. */\n icon?: ReactNode;\n /** Trailing icon slot. */\n iconRight?: ReactNode;\n /** Pressed-in look for toggles and nav tabs. Also sets aria-pressed. */\n isActive?: boolean;\n}\n\n/**\n * A chunky, uppercase button with the signature hard offset shadow that snaps\n * flush on press. Ghost is a shadow-outlined variant; secondary is frosted;\n * danger is for destructive actions.\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n icon,\n iconRight,\n isActive = false,\n className,\n children,\n ...props\n },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={isActive || undefined}\n className={cn(\n styles.button,\n styles[variant],\n styles[size],\n fullWidth && styles.fullWidth,\n isActive && styles.active,\n className,\n )}\n {...props}\n >\n {icon && <span className={styles.iconSlot}>{icon}</span>}\n {children}\n {iconRight && <span className={styles.iconSlot}>{iconRight}</span>}\n </button>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './icon-button.module.scss';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n /** Accessible name — rendered as aria-label and title. */\n label: string;\n variant?: 'default' | 'ghost' | 'danger';\n size?: 'sm' | 'md';\n /** Pressed-in look for toggles. Also sets aria-pressed. */\n isActive?: boolean;\n}\n\n/**\n * A square icon-only button. Default is a frosted chip with the offset\n * shadow; ghost is chrome-less for dense toolbars; danger for destructive\n * actions.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { icon, label, variant = 'default', size = 'md', isActive = false, className, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n title={label}\n aria-pressed={isActive || undefined}\n className={cn(\n styles.iconButton,\n styles[variant],\n styles[size],\n isActive && styles.active,\n className,\n )}\n {...props}\n >\n {icon}\n </button>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport type { LampSize, LampTone } from '../../types/lamp';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './lamp-button.module.scss';\n\nexport interface LampButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n tone?: LampTone;\n size?: LampSize;\n rounded?: 'full' | 'half';\n icon?: ReactNode;\n}\n\nexport const LampButton = forwardRef<HTMLButtonElement, LampButtonProps>(function LampButton(\n { tone = 'gray', size = 'md', rounded = 'full', icon, className, children, disabled, ...props },\n ref,\n) {\n const litTone = disabled ? 'dark' : tone;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(styles.lampButton, styles[size], styles[rounded], className)}\n {...props}\n >\n <span className={styles.bezel} />\n <span className={styles.socket} />\n <span className={cn(styles.surface, styles[litTone])} />\n <span className={cn(styles.content, litTone === 'gray' ? styles.inkDark : styles.inkLight)}>\n {icon && <span className={styles.icon}>{icon}</span>}\n {children}\n </span>\n </button>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport type { LampSize, LampTone } from '../../types/lamp';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './lamp-icon-button.module.scss';\n\nexport interface LampIconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n label: string;\n tone?: LampTone;\n size?: LampSize;\n}\n\nexport const LampIconButton = forwardRef<HTMLButtonElement, LampIconButtonProps>(\n function LampIconButton(\n { icon, label, tone = 'gray', size = 'md', className, disabled, ...props },\n ref,\n ) {\n const litTone = disabled ? 'dark' : tone;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n title={label}\n disabled={disabled}\n className={cn(styles.lampIconButton, styles[size], className)}\n {...props}\n >\n <span className={styles.bezel} />\n <span className={styles.socket} />\n <span className={cn(styles.surface, styles[litTone])} />\n <span className={cn(styles.icon, litTone === 'gray' ? styles.inkDark : styles.inkLight)}>\n {icon}\n </span>\n </button>\n );\n },\n);\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport type { LampSize, LampTone } from '../../types/lamp';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './lamp-switch.module.scss';\n\nexport interface LampSwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n tone?: LampTone;\n size?: LampSize;\n label?: string;\n}\n\nexport const LampSwitch = forwardRef<HTMLInputElement, LampSwitchProps>(function LampSwitch(\n { tone = 'green', size = 'md', label, id, className, disabled, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-lamp-switch-${uid}`;\n\n return (\n <label htmlFor={inputId} className={cn(styles.control, disabled && styles.disabled, className)}>\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n className={styles.input}\n disabled={disabled}\n {...props}\n />\n <span className={cn(styles.switch, styles[size], styles[tone])} aria-hidden=\"true\">\n <span className={styles.bezel} />\n <span className={styles.socket} />\n <span className={styles.glow} />\n <span className={styles.knob} />\n <span className={styles.labels}>\n <span className={styles.off}>O</span>\n <span className={styles.on}>I</span>\n </span>\n <span className={styles.divider} />\n </span>\n {label && <span className={styles.text}>{label}</span>}\n </label>\n );\n});\n","import type { OutputHTMLAttributes } from 'react';\nimport type { LampTone } from '../../types/lamp';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './lamp-status.module.scss';\n\nexport type LampStatusValue = 'running' | 'stopped' | 'error' | 'initializing';\n\nexport interface LampStatusProps extends OutputHTMLAttributes<HTMLOutputElement> {\n status: LampStatusValue;\n label?: string;\n}\n\nconst STATES: Record<LampStatusValue, { tone: LampTone; label: string; pulse: boolean }> = {\n running: { tone: 'green', label: 'Running', pulse: true },\n stopped: { tone: 'dark', label: 'Stopped', pulse: false },\n error: { tone: 'red', label: 'Error', pulse: false },\n initializing: { tone: 'yellow', label: 'Starting', pulse: true },\n};\n\nexport function LampStatus({ status, label, className, ...props }: LampStatusProps) {\n const state = STATES[status];\n\n return (\n <output className={cn(styles.lampStatus, className)} {...props}>\n <span className={styles.lamp}>\n <span className={styles.bezel} />\n <span className={styles.socket} />\n <span className={cn(styles.surface, styles[state.tone], state.pulse && styles.pulse)} />\n </span>\n <span className={cn(styles.text, styles[state.tone])}>{label ?? state.label}</span>\n </output>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\nimport type { LampSize, LampTone } from '../../types/lamp';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './lamp-meter.module.scss';\n\nexport interface LampMeterProps extends HTMLAttributes<HTMLSpanElement> {\n value: number;\n max?: number;\n tone?: LampTone;\n size?: LampSize;\n lampCount?: number;\n label?: string;\n showValue?: boolean;\n fullWidth?: boolean;\n}\n\nexport function LampMeter({\n value,\n max = 100,\n tone = 'green',\n size = 'md',\n lampCount = 10,\n label,\n showValue = false,\n fullWidth = false,\n className,\n style,\n ...props\n}: LampMeterProps) {\n const clamped = max > 0 ? Math.max(0, Math.min(value, max)) : 0;\n const fraction = max > 0 ? clamped / max : 0;\n const percent = Math.round(fraction * 100);\n\n const litLamps = fraction * lampCount;\n const fullLamps = Math.floor(litLamps);\n const partialLamp = litLamps - fullLamps;\n\n const lamps = Array.from({ length: lampCount }, (_, index) => ({\n id: `lamp-${index}`,\n index,\n }));\n\n return (\n <span\n role=\"progressbar\"\n aria-label={label ?? 'Progress'}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={clamped}\n className={cn(styles.lampMeter, fullWidth && styles.fullWidth, className)}\n style={{ '--fui-lamp-count': lampCount, ...style } as CSSProperties}\n {...props}\n >\n {(label != null || showValue) && (\n <span className={styles.header}>\n <span className={styles.label}>{label}</span>\n {showValue && <span className={styles.value}>{percent}%</span>}\n </span>\n )}\n <span className={cn(styles.bar, styles[size])}>\n <span className={styles.bezel} />\n <span className={styles.track}>\n <span className={styles.lamps}>\n {lamps.map((lamp) => {\n const partial = lamp.index === fullLamps && partialLamp > 0;\n\n return (\n <span\n key={lamp.id}\n className={cn(\n styles.lamp,\n styles[tone],\n lamp.index < fullLamps && styles.lit,\n partial && styles.partial,\n )}\n style={partial ? { opacity: 0.3 + partialLamp * 0.7 } : undefined}\n />\n );\n })}\n </span>\n </span>\n </span>\n </span>\n );\n}\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './link-button.module.scss';\n\nexport interface LinkButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n color?: 'inherit' | 'accent';\n size?: 'sm' | 'md' | 'lg';\n icon?: ReactNode;\n iconRight?: ReactNode;\n}\n\nexport const LinkButton = forwardRef<HTMLButtonElement, LinkButtonProps>(function LinkButton(\n { color = 'accent', size = 'md', icon, iconRight, className, children, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(styles.linkButton, styles[color], styles[size], className)}\n {...props}\n >\n {icon && <span className={styles.iconSlot}>{icon}</span>}\n {children}\n {iconRight && <span className={styles.iconSlot}>{iconRight}</span>}\n </button>\n );\n});\n","import type { CSSProperties, HTMLAttributes, MouseEventHandler } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './stamp.module.scss';\n\nexport type StampVariant = 'neutral' | 'info' | 'success' | 'warning' | 'error';\n\nexport interface StampProps extends HTMLAttributes<HTMLElement> {\n variant?: StampVariant;\n size?: 'sm' | 'md';\n /** Leading square status dot in the text colour. */\n dot?: boolean;\n /** Override the variant background with any CSS colour. */\n fillColor?: string;\n /** Override the variant text colour with any CSS colour. */\n textColor?: string;\n /** When set, the stamp renders as a real button with hover/press states. */\n onClick?: MouseEventHandler<HTMLElement>;\n}\n\n/**\n * A compact status badge on the semantic status tokens. Pass `onClick` to get\n * a genuinely clickable stamp — it renders as a `<button>` with hover lift,\n * no wrapper needed.\n */\nexport function Stamp({\n variant = 'neutral',\n size = 'sm',\n dot = false,\n fillColor,\n textColor,\n onClick,\n className,\n style,\n children,\n ...props\n}: StampProps) {\n const Tag = onClick ? 'button' : 'span';\n const colorOverrides: CSSProperties | undefined =\n fillColor || textColor ? { backgroundColor: fillColor, color: textColor } : undefined;\n\n return (\n <Tag\n type={onClick ? 'button' : undefined}\n onClick={onClick}\n className={cn(styles.stamp, styles[variant], styles[size], className)}\n style={{ ...colorOverrides, ...style }}\n {...props}\n >\n {dot && <span className={styles.dot} aria-hidden />}\n {children}\n </Tag>\n );\n}\n","import {\n Children,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n cloneElement,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './tooltip.module.scss';\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n /** Tooltip content. Pass undefined/null to disable without unwrapping the child. */\n content?: ReactNode;\n /** A single element that becomes the trigger (handlers are merged in). */\n children: ReactElement;\n placement?: TooltipPlacement;\n /** Hover delay in ms — keyboard focus shows immediately. */\n delay?: number;\n}\n\nconst GAP = 8;\nconst EDGE = 8;\n\nfunction composeHandlers<E>(theirs: unknown, ours: (event: E) => void) {\n return (event: E) => {\n if (typeof theirs === 'function') (theirs as (event: E) => void)(event);\n ours(event);\n };\n}\n\n/**\n * A portal tooltip on hover and keyboard focus. Position is computed against\n * the trigger and clamped to the viewport; Escape, scroll, and resize hide it.\n */\nexport function Tooltip({ content, children, placement = 'top', delay = 300 }: TooltipProps) {\n const id = useId();\n const [open, setOpen] = useState(false);\n const [coords, setCoords] = useState<{ top: number; left: number } | null>(null);\n const bubbleRef = useRef<HTMLDivElement>(null);\n const rectRef = useRef<DOMRect | null>(null);\n const timer = useRef<number | undefined>(undefined);\n\n const hide = useCallback(() => {\n window.clearTimeout(timer.current);\n setOpen(false);\n setCoords(null);\n }, []);\n\n useEffect(() => () => window.clearTimeout(timer.current), []);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') hide();\n };\n window.addEventListener('keydown', onKey);\n window.addEventListener('scroll', hide, true);\n window.addEventListener('resize', hide);\n return () => {\n window.removeEventListener('keydown', onKey);\n window.removeEventListener('scroll', hide, true);\n window.removeEventListener('resize', hide);\n };\n }, [open, hide]);\n\n // Two-phase: render hidden, measure, then place (and clamp to viewport).\n useLayoutEffect(() => {\n if (!open) return;\n const rect = rectRef.current;\n const bubble = bubbleRef.current;\n if (!rect || !bubble) return;\n const b = bubble.getBoundingClientRect();\n\n let top: number;\n let left: number;\n switch (placement) {\n case 'bottom':\n top = rect.bottom + GAP;\n left = rect.left + rect.width / 2 - b.width / 2;\n break;\n case 'left':\n top = rect.top + rect.height / 2 - b.height / 2;\n left = rect.left - b.width - GAP;\n break;\n case 'right':\n top = rect.top + rect.height / 2 - b.height / 2;\n left = rect.right + GAP;\n break;\n default:\n top = rect.top - b.height - GAP;\n left = rect.left + rect.width / 2 - b.width / 2;\n }\n\n left = Math.min(Math.max(left, EDGE), window.innerWidth - b.width - EDGE);\n top = Math.min(Math.max(top, EDGE), window.innerHeight - b.height - EDGE);\n setCoords({ top, left });\n }, [open, placement]);\n\n const disabled = content == null || content === false || content === '';\n\n const child = Children.only(children);\n const childProps = child.props as Record<string, unknown>;\n\n const showNow = (el: Element) => {\n rectRef.current = el.getBoundingClientRect();\n setOpen(true);\n };\n\n if (disabled) return children;\n\n const trigger = cloneElement(child as ReactElement<Record<string, unknown>>, {\n onMouseEnter: composeHandlers(childProps.onMouseEnter, (e: MouseEvent<HTMLElement>) => {\n const el = e.currentTarget;\n window.clearTimeout(timer.current);\n timer.current = window.setTimeout(() => showNow(el), delay);\n }),\n onMouseLeave: composeHandlers(childProps.onMouseLeave, hide),\n onFocus: composeHandlers(childProps.onFocus, (e: FocusEvent<HTMLElement>) => {\n showNow(e.currentTarget);\n }),\n onBlur: composeHandlers(childProps.onBlur, hide),\n 'aria-describedby': open ? id : (childProps['aria-describedby'] as string | undefined),\n });\n\n return (\n <>\n {trigger}\n {open &&\n createPortal(\n <div\n ref={bubbleRef}\n id={id}\n role=\"tooltip\"\n className={cn(styles.tooltip, coords && styles.ready)}\n style={coords ? { top: coords.top, left: coords.left } : undefined}\n >\n {content}\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { createContext } from 'react';\nimport type { ReactNode } from 'react';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport interface ToastOptions {\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n /** Auto-dismiss after this many ms; 0 keeps the toast until dismissed. */\n duration?: number;\n}\n\nexport interface ToastContextValue {\n /** Show a toast; returns its id for programmatic dismissal. */\n toast: (options: ToastOptions) => string;\n dismiss: (id: string) => void;\n}\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n","import { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport {\n ToastContext,\n type ToastOptions,\n type ToastPosition,\n type ToastVariant,\n} from './toast-context';\nimport styles from './toast.module.scss';\n\nexport interface ToastProviderProps {\n children: ReactNode;\n position?: ToastPosition;\n /** Default auto-dismiss in ms for toasts that don't set their own. */\n defaultDuration?: number;\n}\n\ninterface ToastItem {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n variant: ToastVariant;\n}\n\n/**\n * Portal-renders the toast stack and provides the `useToast` context.\n * Wrap the app once, near the root.\n */\nexport function ToastProvider({\n children,\n position = 'bottom-right',\n defaultDuration = 5000,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timers = useRef(new Map<string, number>());\n const counter = useRef(0);\n\n const dismiss = useCallback((id: string) => {\n setToasts((current) => current.filter((t) => t.id !== id));\n const handle = timers.current.get(id);\n if (handle !== undefined) {\n window.clearTimeout(handle);\n timers.current.delete(id);\n }\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions) => {\n counter.current += 1;\n const id = `fui-toast-${counter.current}`;\n setToasts((current) => [\n ...current,\n {\n id,\n title: options.title,\n description: options.description,\n variant: options.variant ?? 'info',\n },\n ]);\n const duration = options.duration ?? defaultDuration;\n if (duration > 0) {\n timers.current.set(\n id,\n window.setTimeout(() => dismiss(id), duration),\n );\n }\n return id;\n },\n [defaultDuration, dismiss],\n );\n\n useEffect(() => {\n const pending = timers.current;\n return () => {\n for (const handle of pending.values()) window.clearTimeout(handle);\n };\n }, []);\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {createPortal(\n <div className={cn(styles.stack, styles[position])}>\n {toasts.map((t) => (\n <div\n key={t.id}\n role={t.variant === 'error' ? 'alert' : 'status'}\n className={cn(styles.toast, styles[t.variant])}\n >\n {t.title && <p className={styles.title}>{t.title}</p>}\n {t.description && <p className={styles.description}>{t.description}</p>}\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n className={styles.close}\n onClick={() => dismiss(t.id)}\n >\n ×\n </button>\n </div>\n ))}\n </div>,\n document.body,\n )}\n </ToastContext.Provider>\n );\n}\n","import { useContext } from 'react';\nimport { ToastContext } from './toast-context';\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error('useToast must be used within a <ToastProvider>');\n return ctx;\n}\n","import type { HTMLAttributes, KeyboardEvent, MouseEventHandler } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './card.module.scss';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** `sm` is the dense list-row size; `md` the roomy default. */\n size?: 'sm' | 'md';\n /**\n * Makes the whole card clickable — adds role, tab stop, Enter/Space\n * activation, and hover/press styling.\n */\n onClick?: MouseEventHandler<HTMLDivElement>;\n}\n\nfunction activateOnEnterOrSpace(e: KeyboardEvent<HTMLDivElement>) {\n if (e.target === e.currentTarget && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n e.currentTarget.click();\n }\n}\n\nfunction CardRoot({ size = 'md', onClick, className, children, ...props }: CardProps) {\n const interactive = onClick != null;\n return (\n <div\n className={cn(styles.card, styles[size], interactive && styles.interactive, className)}\n onClick={onClick}\n {...(interactive\n ? { role: 'button', tabIndex: 0, onKeyDown: activateOnEnterOrSpace }\n : undefined)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nfunction Title({ className, children, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3 className={cn(styles.title, className)} {...props}>\n {children}\n </h3>\n );\n}\n\nfunction Body({ className, children, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return (\n <p className={cn(styles.body, className)} {...props}>\n {children}\n </p>\n );\n}\n\n/** A frosted card surface with the film offset shadow. Compose with Card.Title / Card.Body. */\nexport const Card = Object.assign(CardRoot, { Title, Body });\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './input.module.scss';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { label, helperText, error, size = 'md', id, className, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-input-${uid}`;\n const messageId = `fui-input-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={cn(styles.input, styles[size], invalid && styles.invalid)}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type TextareaHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './textarea.module.scss';\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { label, helperText, error, size = 'md', id, className, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-textarea-${uid}`;\n const messageId = `fui-textarea-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n id={inputId}\n className={cn(styles.textarea, styles[size], invalid && styles.invalid)}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type KeyboardEvent, forwardRef, useEffect, useId, useRef, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './select.module.scss';\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n placeholder?: string;\n disabled?: boolean;\n name?: string;\n required?: boolean;\n id?: string;\n className?: string;\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\n {\n options,\n value,\n defaultValue,\n onChange,\n label,\n helperText,\n error,\n size = 'md',\n placeholder = 'Select…',\n disabled = false,\n name,\n required,\n id,\n className,\n },\n ref,\n) {\n const uid = useId();\n const selectId = id ?? `fui-select-${uid}`;\n const listId = `fui-select-list-${uid}`;\n const messageId = `fui-select-message-${uid}`;\n const optionId = (index: number) => `${selectId}-option-${index}`;\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const currentValue = isControlled ? value : internalValue;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const invalid = error != null;\n const message = invalid ? error : helperText;\n const selectedIndex = options.findIndex((o) => o.value === currentValue);\n const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n\n const firstEnabled = () => options.findIndex((o) => !o.disabled);\n const lastEnabled = () => {\n for (let i = options.length - 1; i >= 0; i--) if (!options[i].disabled) return i;\n return -1;\n };\n const nextEnabled = (from: number) => {\n for (let i = from + 1; i < options.length; i++) if (!options[i].disabled) return i;\n return from;\n };\n const prevEnabled = (from: number) => {\n for (let i = from - 1; i >= 0; i--) if (!options[i].disabled) return i;\n return from;\n };\n\n useEffect(() => {\n if (!open) return;\n const onPointer = (e: PointerEvent) => {\n if (!rootRef.current?.contains(e.target as Node)) setOpen(false);\n };\n window.addEventListener('pointerdown', onPointer);\n return () => window.removeEventListener('pointerdown', onPointer);\n }, [open]);\n\n const openList = () => {\n setActiveIndex(selectedIndex >= 0 ? selectedIndex : firstEnabled());\n setOpen(true);\n };\n\n const commit = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n setOpen(false);\n triggerRef.current?.focus();\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (open) setActiveIndex((i) => nextEnabled(i));\n else openList();\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (open) setActiveIndex((i) => prevEnabled(i));\n else openList();\n break;\n case 'Home':\n if (open) {\n e.preventDefault();\n setActiveIndex(firstEnabled());\n }\n break;\n case 'End':\n if (open) {\n e.preventDefault();\n setActiveIndex(lastEnabled());\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (open && activeIndex >= 0) commit(options[activeIndex].value);\n else openList();\n break;\n case 'Escape':\n if (open) {\n e.preventDefault();\n setOpen(false);\n }\n break;\n case 'Tab':\n if (open) setOpen(false);\n break;\n }\n };\n\n return (\n <div ref={rootRef} className={cn(styles.field, className)}>\n {label && (\n <label htmlFor={selectId} className={styles.label}>\n {label}\n </label>\n )}\n <div className={styles.control}>\n <button\n ref={triggerRef}\n type=\"button\"\n id={selectId}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-activedescendant={open && activeIndex >= 0 ? optionId(activeIndex) : undefined}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n disabled={disabled}\n className={cn(\n styles.trigger,\n styles[size],\n invalid && styles.invalid,\n !selectedOption && styles.placeholder,\n )}\n onClick={() => (open ? setOpen(false) : openList())}\n onKeyDown={onKeyDown}\n >\n <span className={styles.value}>\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <span className={styles.arrow} aria-hidden=\"true\" />\n </button>\n {open && (\n <div id={listId} role=\"listbox\" tabIndex={-1} className={styles.list}>\n {options.map((option, index) => (\n <button\n key={option.value}\n type=\"button\"\n id={optionId(index)}\n role=\"option\"\n tabIndex={-1}\n aria-selected={option.value === currentValue}\n disabled={option.disabled}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n option.disabled && styles.optionDisabled,\n )}\n onPointerMove={() => !option.disabled && setActiveIndex(index)}\n onClick={() => commit(option.value)}\n >\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n <select\n ref={ref}\n name={name}\n value={currentValue}\n required={required}\n disabled={disabled}\n aria-hidden=\"true\"\n tabIndex={-1}\n className={styles.native}\n onChange={(e) => commit(e.target.value)}\n >\n {!selectedOption && <option value={currentValue} />}\n {options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './checkbox.module.scss';\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { label, helperText, error, size = 'md', id, className, disabled, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-checkbox-${uid}`;\n const messageId = `fui-checkbox-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n <label\n htmlFor={inputId}\n className={cn(styles.control, styles[size], disabled && styles.disabled)}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n className={styles.input}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n <span className={cn(styles.box, invalid && styles.invalid)} aria-hidden=\"true\" />\n {label && <span className={styles.text}>{label}</span>}\n </label>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './radio.module.scss';\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { label, helperText, error, size = 'md', id, className, disabled, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-radio-${uid}`;\n const messageId = `fui-radio-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n <label\n htmlFor={inputId}\n className={cn(styles.control, styles[size], disabled && styles.disabled)}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"radio\"\n className={styles.input}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n <span className={cn(styles.dot, invalid && styles.invalid)} aria-hidden=\"true\" />\n {label && <span className={styles.text}>{label}</span>}\n </label>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type HTMLAttributes, type ReactNode, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Radio } from './radio';\nimport styles from './radio-group.module.scss';\n\nexport interface RadioOption {\n value: string;\n label?: string;\n helperText?: string;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>, 'onChange'> {\n options: RadioOption[];\n value: string;\n onChange: (value: string) => void;\n name?: string;\n legend?: ReactNode;\n orientation?: 'vertical' | 'horizontal';\n size?: 'sm' | 'md';\n helperText?: string;\n error?: string;\n disabled?: boolean;\n}\n\nexport function RadioGroup({\n options,\n value,\n onChange,\n name,\n legend,\n orientation = 'vertical',\n size = 'md',\n helperText,\n error,\n disabled,\n className,\n ...props\n}: RadioGroupProps) {\n const uid = useId();\n const groupName = name ?? `fui-radio-group-${uid}`;\n const messageId = `fui-radio-group-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <fieldset\n className={cn(styles.group, className)}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n >\n {legend != null && <legend className={styles.legend}>{legend}</legend>}\n <div className={cn(styles.options, styles[orientation])}>\n {options.map((option) => (\n <Radio\n key={option.value}\n name={groupName}\n value={option.value}\n checked={option.value === value}\n disabled={option.disabled}\n label={option.label}\n helperText={option.helperText}\n size={size}\n onChange={() => onChange(option.value)}\n />\n ))}\n </div>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </fieldset>\n );\n}\n","import { type InputHTMLAttributes, forwardRef, useId } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './switch.module.scss';\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { label, helperText, error, size = 'md', id, className, disabled, ...props },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-switch-${uid}`;\n const messageId = `fui-switch-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n\n return (\n <div className={cn(styles.field, className)}>\n <label\n htmlFor={inputId}\n className={cn(styles.control, styles[size], disabled && styles.disabled)}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n className={styles.input}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n {...props}\n />\n <span className={cn(styles.track, invalid && styles.invalid)} aria-hidden=\"true\">\n <span className={styles.knob} />\n </span>\n {label && <span className={styles.text}>{label}</span>}\n </label>\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import { type ReactNode, useEffect, useId, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './modal.module.scss';\n\nconst focusableSelector =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n size?: 'sm' | 'md' | 'lg';\n children: ReactNode;\n className?: string;\n}\n\ninterface ModalSlotProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction ModalRoot({ open, onClose, title, size = 'md', children, className }: ModalProps) {\n const uid = useId();\n const titleId = `fui-modal-title-${uid}`;\n const panelRef = useRef<HTMLDivElement>(null);\n const previouslyFocused = useRef<HTMLElement | null>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n if (!open) return;\n previouslyFocused.current = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n onCloseRef.current();\n return;\n }\n if (event.key !== 'Tab') return;\n const focusables = panelRef.current?.querySelectorAll<HTMLElement>(focusableSelector);\n if (!focusables || focusables.length === 0) {\n event.preventDefault();\n panelRef.current?.focus();\n return;\n }\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = previousOverflow;\n previouslyFocused.current?.focus();\n };\n }, [open]);\n\n if (!open || typeof document === 'undefined') return null;\n\n return createPortal(\n <div className={styles.overlay}>\n <button\n type=\"button\"\n className={styles.backdrop}\n aria-label=\"Close modal\"\n onClick={onClose}\n />\n <div\n ref={panelRef}\n className={cn(styles.panel, styles[size], className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n >\n <div className={styles.header}>\n {title && (\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n )}\n <button type=\"button\" className={styles.close} aria-label=\"Close modal\" onClick={onClose}>\n ×\n </button>\n </div>\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n\nfunction ModalBody({ children, className }: ModalSlotProps) {\n return <div className={cn(styles.body, className)}>{children}</div>;\n}\n\nfunction ModalFooter({ children, className }: ModalSlotProps) {\n return <div className={cn(styles.footer, className)}>{children}</div>;\n}\n\nfunction ModalError({ children, className }: ModalSlotProps) {\n if (!children) return null;\n return (\n <p role=\"alert\" className={cn(styles.errorText, className)}>\n {children}\n </p>\n );\n}\n\nexport const Modal = Object.assign(ModalRoot, {\n Body: ModalBody,\n Footer: ModalFooter,\n Error: ModalError,\n});\n","import { type ReactNode, useEffect, useId, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './drawer.module.scss';\n\nconst focusableSelector =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport type DrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n side?: DrawerSide;\n title?: string;\n size?: 'sm' | 'md' | 'lg';\n children: ReactNode;\n className?: string;\n}\n\ninterface DrawerSlotProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction DrawerRoot({\n open,\n onClose,\n side = 'right',\n title,\n size = 'md',\n children,\n className,\n}: DrawerProps) {\n const uid = useId();\n const titleId = `fui-drawer-title-${uid}`;\n const panelRef = useRef<HTMLDivElement>(null);\n const previouslyFocused = useRef<HTMLElement | null>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n if (!open) return;\n previouslyFocused.current = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n onCloseRef.current();\n return;\n }\n if (event.key !== 'Tab') return;\n const focusables = panelRef.current?.querySelectorAll<HTMLElement>(focusableSelector);\n if (!focusables || focusables.length === 0) {\n event.preventDefault();\n panelRef.current?.focus();\n return;\n }\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = previousOverflow;\n previouslyFocused.current?.focus();\n };\n }, [open]);\n\n if (!open || typeof document === 'undefined') return null;\n\n return createPortal(\n <div className={cn(styles.overlay, styles[side])}>\n <button\n type=\"button\"\n className={styles.backdrop}\n aria-label=\"Close drawer\"\n onClick={onClose}\n />\n <div\n ref={panelRef}\n className={cn(styles.panel, styles[side], styles[size], className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n >\n <div className={styles.header}>\n {title && (\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n )}\n <button\n type=\"button\"\n className={styles.close}\n aria-label=\"Close drawer\"\n onClick={onClose}\n >\n ×\n </button>\n </div>\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n\nfunction DrawerBody({ children, className }: DrawerSlotProps) {\n return <div className={cn(styles.body, className)}>{children}</div>;\n}\n\nfunction DrawerFooter({ children, className }: DrawerSlotProps) {\n return <div className={cn(styles.footer, className)}>{children}</div>;\n}\n\nexport const Drawer = Object.assign(DrawerRoot, {\n Body: DrawerBody,\n Footer: DrawerFooter,\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './list-item.module.scss';\n\nexport interface ListItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n size?: 'sm' | 'md';\n active?: boolean;\n icon?: ReactNode;\n action?: ReactNode;\n}\n\nexport const ListItem = forwardRef<HTMLButtonElement, ListItemProps>(function ListItem(\n { size = 'md', active = false, icon, action, className, children, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-current={active || undefined}\n className={cn(styles.item, styles[size], active && styles.active, className)}\n {...props}\n >\n {icon && <span className={styles.icon}>{icon}</span>}\n <span className={styles.content}>{children}</span>\n {action && <span className={styles.action}>{action}</span>}\n </button>\n );\n});\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './alert.module.scss';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant;\n dismissible?: boolean;\n onDismiss?: () => void;\n children: ReactNode;\n}\n\nconst icons: Record<AlertVariant, ReactNode> = {\n info: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M8 0a8 8 0 100 16A8 8 0 008 0zm1 12H7V7h2v5zM8 5.5A1.25 1.25 0 118 3a1.25 1.25 0 010 2.5z\" />\n </svg>\n ),\n success: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M8 0a8 8 0 100 16A8 8 0 008 0zm3.7 5.7l-4.4 4.4a1 1 0 01-1.4 0L3.7 8.3l1.4-1.4L6.6 8.4l3.7-3.7 1.4 1z\" />\n </svg>\n ),\n warning: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M7.1 1.5a1 1 0 011.8 0l6.4 12A1 1 0 0114.4 15H1.6a1 1 0 01-.9-1.5l6.4-12zM7 6v4h2V6H7zm0 5v2h2v-2H7z\" />\n </svg>\n ),\n error: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M8 0a8 8 0 100 16A8 8 0 008 0zm3 10.6L9.4 12 8 10.6 6.6 12 5 10.6 6.6 9 5 7.4 6.6 6 8 7.4 9.4 6 11 7.4 9.4 9 11 10.6z\" />\n </svg>\n ),\n};\n\nexport function Alert({\n variant = 'info',\n dismissible = false,\n onDismiss,\n className,\n children,\n ...props\n}: AlertProps) {\n return (\n <div\n role={variant === 'error' || variant === 'warning' ? 'alert' : 'status'}\n className={cn(styles.alert, styles[variant], className)}\n {...props}\n >\n <span className={styles.icon}>{icons[variant]}</span>\n <div className={styles.message}>{children}</div>\n {dismissible && (\n <button type=\"button\" aria-label=\"Dismiss\" className={styles.dismiss} onClick={onDismiss}>\n ×\n </button>\n )}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './divider.module.scss';\n\nexport interface DividerProps extends HTMLAttributes<HTMLElement> {\n orientation?: 'horizontal' | 'vertical';\n label?: ReactNode;\n}\n\nexport function Divider({ orientation = 'horizontal', label, className, ...props }: DividerProps) {\n if (orientation === 'horizontal' && label != null) {\n return (\n <div className={cn(styles.divider, styles.labelled, className)} {...props}>\n <hr className={styles.line} />\n <span className={styles.label}>{label}</span>\n <hr className={styles.line} />\n </div>\n );\n }\n\n return (\n <hr\n aria-orientation={orientation}\n className={cn(styles.divider, styles[orientation], className)}\n {...props}\n />\n );\n}\n","import type { OutputHTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './spinner.module.scss';\n\nexport interface SpinnerProps extends OutputHTMLAttributes<HTMLOutputElement> {\n size?: 'sm' | 'md' | 'lg';\n label?: string;\n}\n\nexport function Spinner({ size = 'md', label = 'Loading', className, ...props }: SpinnerProps) {\n return (\n <output aria-label={label} className={cn(styles.spinner, styles[size], className)} {...props}>\n <span className={styles.ring} />\n </output>\n );\n}\n","import type { CSSProperties, ProgressHTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './progress.module.scss';\n\nexport interface ProgressProps extends Omit<ProgressHTMLAttributes<HTMLProgressElement>, 'color'> {\n value: number;\n max?: number;\n color?: string;\n height?: number;\n}\n\nexport function Progress({\n value,\n max = 100,\n color,\n height = 8,\n className,\n style,\n ...props\n}: ProgressProps) {\n const clamped = max > 0 ? Math.max(0, Math.min(value, max)) : 0;\n const fill = color ? { '--fui-progress-fill': color } : undefined;\n\n return (\n <progress\n value={clamped}\n max={max}\n className={cn(styles.progress, className)}\n style={{ height, ...fill, ...style } as CSSProperties}\n {...props}\n />\n );\n}\n","import {\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n forwardRef,\n useId,\n} from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './slider.module.scss';\n\nexport type SliderOrientation = 'horizontal' | 'vertical';\n\nexport interface SliderProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'onChange' | 'type' | 'value' | 'defaultValue' | 'size'\n > {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n orientation?: SliderOrientation;\n length?: number | string;\n label?: string;\n helperText?: string;\n error?: string;\n size?: 'sm' | 'md';\n showValue?: boolean;\n formatValue?: (value: number) => ReactNode;\n}\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n orientation = 'horizontal',\n length,\n label,\n helperText,\n error,\n size = 'md',\n showValue = false,\n formatValue,\n id,\n className,\n style,\n disabled,\n ...props\n },\n ref,\n) {\n const uid = useId();\n const inputId = id ?? `fui-slider-${uid}`;\n const messageId = `fui-slider-message-${uid}`;\n const invalid = error != null;\n const message = invalid ? error : helperText;\n const vertical = orientation === 'vertical';\n\n const clamped = Math.max(min, Math.min(value, max));\n const fraction = max > min ? (clamped - min) / (max - min) : 0;\n const track = length != null ? (typeof length === 'number' ? `${length}px` : length) : undefined;\n\n return (\n <div\n className={cn(styles.field, vertical && styles.vertical, className)}\n style={{ '--fui-slider-length': track, ...style } as CSSProperties}\n >\n {(label || showValue) && (\n <div className={styles.header}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n )}\n {showValue && (\n <span className={styles.value}>{formatValue ? formatValue(clamped) : clamped}</span>\n )}\n </div>\n )}\n <input\n ref={ref}\n id={inputId}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={clamped}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={message != null ? messageId : undefined}\n aria-orientation={vertical ? 'vertical' : undefined}\n className={cn(styles.input, styles[size], invalid && styles.invalid)}\n style={{ '--fui-slider-fill': `${fraction * 100}%` } as CSSProperties}\n onChange={(event) => onChange(event.target.valueAsNumber)}\n {...props}\n />\n {message != null && (\n <p id={messageId} className={cn(styles.message, invalid && styles.error)}>\n {message}\n </p>\n )}\n </div>\n );\n});\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './circular-progress.module.scss';\n\nexport interface CircularProgressProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n value?: number;\n max?: number;\n size?: number;\n strokeWidth?: number;\n color?: string;\n label?: string;\n showValue?: boolean;\n glow?: boolean;\n formatValue?: (percent: number, value: number) => ReactNode;\n}\n\nexport function CircularProgress({\n value,\n max = 100,\n size = 48,\n strokeWidth = 4,\n color,\n label = 'Loading',\n showValue = false,\n glow = false,\n formatValue,\n className,\n style,\n ...props\n}: CircularProgressProps) {\n const indeterminate = value == null;\n const clamped = indeterminate || max <= 0 ? 0 : Math.max(0, Math.min(value, max));\n const fraction = indeterminate || max <= 0 ? 0 : clamped / max;\n const percent = Math.round(fraction * 100);\n\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const dash = indeterminate\n ? `${circumference * 0.25} ${circumference * 0.75}`\n : `${circumference * fraction} ${circumference}`;\n\n const fill = color ? { '--fui-circular-fill': color } : undefined;\n\n return (\n <span\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={indeterminate ? undefined : 0}\n aria-valuemax={indeterminate ? undefined : max}\n aria-valuenow={indeterminate ? undefined : clamped}\n className={cn(\n styles.root,\n indeterminate && styles.indeterminate,\n glow && styles.glow,\n className,\n )}\n style={{ width: size, height: size, ...fill, ...style } as CSSProperties}\n {...props}\n >\n <svg className={styles.svg} viewBox={`0 0 ${size} ${size}`} aria-hidden=\"true\">\n <circle\n className={styles.track}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={strokeWidth}\n />\n <circle\n className={styles.value}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={dash}\n />\n </svg>\n {showValue && !indeterminate && (\n <span className={styles.text}>\n {formatValue ? formatValue(percent, clamped) : `${percent}%`}\n </span>\n )}\n </span>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './skeleton.module.scss';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'text' | 'rect' | 'circle';\n width?: number | string;\n height?: number | string;\n}\n\nexport function Skeleton({\n variant = 'text',\n width,\n height,\n className,\n style,\n ...props\n}: SkeletonProps) {\n return (\n <span\n aria-hidden=\"true\"\n className={cn(styles.skeleton, styles[variant], className)}\n style={{ width, height, ...style }}\n {...props}\n />\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Spinner } from '../spinner';\nimport styles from './empty-state.module.scss';\n\nexport type EmptyStateStatus = 'loading' | 'empty' | 'error';\n\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n status?: EmptyStateStatus;\n icon?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n}\n\nconst roles: Record<EmptyStateStatus, HTMLAttributes<HTMLDivElement>['role']> = {\n loading: 'status',\n empty: 'status',\n error: 'alert',\n};\n\nexport function EmptyState({\n status = 'empty',\n icon,\n title,\n description,\n action,\n className,\n children,\n ...props\n}: EmptyStateProps) {\n const visual = icon ?? (status === 'loading' ? <Spinner size=\"lg\" /> : null);\n return (\n <div\n role={roles[status]}\n aria-busy={status === 'loading' || undefined}\n className={cn(styles.emptyState, styles[status], className)}\n {...props}\n >\n {visual && <div className={styles.visual}>{visual}</div>}\n {title && <p className={styles.title}>{title}</p>}\n {description && <p className={styles.description}>{description}</p>}\n {children}\n {action && <div className={styles.action}>{action}</div>}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './status-dot.module.scss';\n\nexport type StatusDotVariant = 'neutral' | 'info' | 'success' | 'warning' | 'error';\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: StatusDotVariant;\n size?: 'sm' | 'md';\n pulse?: boolean;\n label?: string;\n}\n\nexport function StatusDot({\n variant = 'neutral',\n size = 'sm',\n pulse = false,\n label,\n className,\n ...props\n}: StatusDotProps) {\n return (\n <span\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn(\n styles.statusDot,\n styles[variant],\n styles[size],\n pulse && styles.pulse,\n className,\n )}\n {...props}\n />\n );\n}\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './chip.module.scss';\n\nexport interface ChipProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n size?: 'sm' | 'md';\n icon?: ReactNode;\n onToggle?: (selected: boolean) => void;\n}\n\nexport const Chip = forwardRef<HTMLButtonElement, ChipProps>(function Chip(\n { selected = false, size = 'md', icon, onToggle, onClick, className, children, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={selected}\n className={cn(styles.chip, styles[size], selected && styles.selected, className)}\n onClick={(event) => {\n onClick?.(event);\n onToggle?.(!selected);\n }}\n {...props}\n >\n {icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {children}\n </button>\n );\n});\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './segmented-control.module.scss';\n\nexport interface SegmentedControlOption {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps\n extends Omit<HTMLAttributes<HTMLFieldSetElement>, 'onChange'> {\n options: SegmentedControlOption[];\n value: string;\n onChange: (value: string) => void;\n size?: 'sm' | 'md';\n}\n\nexport function SegmentedControl({\n options,\n value,\n onChange,\n size = 'md',\n className,\n ...props\n}: SegmentedControlProps) {\n return (\n <fieldset className={cn(styles.group, styles[size], className)} {...props}>\n {options.map((option) => {\n const active = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n aria-pressed={active}\n disabled={option.disabled}\n className={cn(styles.segment, active && styles.active)}\n onClick={() => onChange(option.value)}\n >\n {option.icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {option.icon}\n </span>\n )}\n {option.label}\n </button>\n );\n })}\n </fieldset>\n );\n}\n","import {\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './tabs.module.scss';\n\nexport type TabsOrientation = 'horizontal' | 'vertical';\n\nexport interface TabItem {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n content?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n items: TabItem[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n orientation?: TabsOrientation;\n size?: 'sm' | 'md';\n activation?: 'automatic' | 'manual';\n tablistLabel?: string;\n}\n\nexport function Tabs({\n items,\n value,\n defaultValue,\n onChange,\n orientation = 'horizontal',\n size = 'md',\n activation = 'automatic',\n tablistLabel,\n className,\n ...props\n}: TabsProps) {\n const uid = useId();\n const tabId = (item: TabItem) => `fui-tab-${uid}-${item.value}`;\n const panelId = (item: TabItem) => `fui-tabpanel-${uid}-${item.value}`;\n\n const firstEnabled = items.find((item) => !item.disabled)?.value;\n const [internal, setInternal] = useState(defaultValue ?? firstEnabled ?? '');\n const selected = value ?? internal;\n const activeItem = items.find((item) => item.value === selected);\n\n const tabRefs = useRef(new Map<string, HTMLButtonElement>());\n\n const select = (next: string) => {\n if (value == null) setInternal(next);\n if (next !== selected) onChange?.(next);\n };\n\n const step = (from: number, delta: number) => {\n for (let i = 1; i <= items.length; i++) {\n const index = (from + delta * i + items.length * i) % items.length;\n if (!items[index].disabled) return index;\n }\n return from;\n };\n\n const edge = (back: boolean) => {\n const list = back ? [...items].reverse() : items;\n const found = list.find((item) => !item.disabled);\n return found ? items.indexOf(found) : -1;\n };\n\n const focusTab = (index: number) => {\n const item = items[index];\n if (!item) return;\n tabRefs.current.get(item.value)?.focus();\n if (activation === 'automatic') select(item.value);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n const vertical = orientation === 'vertical';\n const prevKey = vertical ? 'ArrowUp' : 'ArrowLeft';\n const nextKey = vertical ? 'ArrowDown' : 'ArrowRight';\n\n switch (event.key) {\n case prevKey:\n event.preventDefault();\n focusTab(step(index, -1));\n break;\n case nextKey:\n event.preventDefault();\n focusTab(step(index, 1));\n break;\n case 'Home':\n event.preventDefault();\n focusTab(edge(false));\n break;\n case 'End':\n event.preventDefault();\n focusTab(edge(true));\n break;\n case 'Enter':\n case ' ':\n if (activation === 'manual') {\n event.preventDefault();\n select(items[index].value);\n }\n break;\n }\n };\n\n return (\n <div className={cn(styles.tabs, styles[orientation], className)} {...props}>\n <div\n role=\"tablist\"\n aria-label={tablistLabel}\n aria-orientation={orientation}\n className={cn(styles.tablist, styles[size])}\n >\n {items.map((item, index) => {\n const active = item.value === selected;\n return (\n <button\n key={item.value}\n ref={(node) => {\n if (node) tabRefs.current.set(item.value, node);\n else tabRefs.current.delete(item.value);\n }}\n type=\"button\"\n role=\"tab\"\n id={tabId(item)}\n aria-selected={active}\n aria-controls={item.content != null ? panelId(item) : undefined}\n tabIndex={active ? 0 : -1}\n disabled={item.disabled}\n className={cn(styles.tab, active && styles.active)}\n onClick={() => select(item.value)}\n onKeyDown={(event) => onKeyDown(event, index)}\n >\n {item.icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n );\n })}\n </div>\n {activeItem?.content != null && (\n <div\n role=\"tabpanel\"\n id={panelId(activeItem)}\n aria-labelledby={tabId(activeItem)}\n tabIndex={0}\n className={styles.panel}\n >\n {activeItem.content}\n </div>\n )}\n </div>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './kbd.module.scss';\n\nexport type KbdProps = HTMLAttributes<HTMLElement>;\n\nexport function Kbd({ className, children, ...props }: KbdProps) {\n return (\n <kbd className={cn(styles.kbd, className)} {...props}>\n {children}\n </kbd>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './inline-code.module.scss';\n\nexport type InlineCodeProps = HTMLAttributes<HTMLElement>;\n\nexport function InlineCode({ className, children, ...props }: InlineCodeProps) {\n return (\n <code className={cn(styles.inlineCode, className)} {...props}>\n {children}\n </code>\n );\n}\n","import { type HTMLAttributes, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './code-block.module.scss';\n\nexport type CodeDiff = 'add' | 'remove';\n\nexport interface CodeLine {\n content: string;\n diff?: CodeDiff;\n}\n\nexport interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n code?: string;\n lines?: CodeLine[];\n filename?: string;\n copyable?: boolean;\n}\n\nconst markers: Record<CodeDiff, string> = { add: '+', remove: '-' };\n\nexport function CodeBlock({\n code,\n lines,\n filename,\n copyable = true,\n className,\n ...props\n}: CodeBlockProps) {\n const [copied, setCopied] = useState(false);\n\n const resolved: CodeLine[] =\n lines ?? (code != null ? code.split('\\n').map((content) => ({ content })) : []);\n const rawText = resolved.map((line) => line.content).join('\\n');\n const hasDiff = resolved.some((line) => line.diff != null);\n\n const copy = () => {\n const write = navigator.clipboard?.writeText(rawText);\n if (!write) return;\n write.then(\n () => {\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n },\n () => setCopied(false),\n );\n };\n\n const seen = new Map<string, number>();\n const keyed = resolved.map((line) => {\n const base = `${line.diff ?? ''}\u0000${line.content}`;\n const occurrence = seen.get(base) ?? 0;\n seen.set(base, occurrence + 1);\n return { line, key: `${base}\u0000${occurrence}` };\n });\n\n return (\n <div className={cn(styles.codeBlock, className)} {...props}>\n {(filename || copyable) && (\n <div className={styles.header}>\n {filename && <span className={styles.filename}>{filename}</span>}\n {copyable && (\n <button\n type=\"button\"\n className={styles.copy}\n aria-label={copied ? 'Copied' : 'Copy code'}\n onClick={copy}\n >\n {copied ? 'copied' : 'copy'}\n </button>\n )}\n </div>\n )}\n <pre className={styles.pre}>\n <code>\n {keyed.map(({ line, key }) => (\n <span key={key} className={cn(styles.line, line.diff && styles[line.diff])}>\n {hasDiff && (\n <span className={styles.marker} aria-hidden=\"true\">\n {line.diff ? markers[line.diff] : ''}\n </span>\n )}\n <span className={styles.content}>{line.content}</span>\n </span>\n ))}\n </code>\n </pre>\n </div>\n );\n}\n","import {\n type ButtonHTMLAttributes,\n type MouseEvent,\n type ReactNode,\n forwardRef,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './copy-button.module.scss';\n\nexport interface CopyButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n label?: string;\n copiedLabel?: string;\n icon?: ReactNode;\n copiedIcon?: ReactNode;\n timeout?: number;\n onCopy?: () => void;\n}\n\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(function CopyButton(\n {\n value,\n label = 'copy',\n copiedLabel = 'copied',\n icon,\n copiedIcon,\n timeout = 2000,\n onCopy,\n onClick,\n className,\n ...props\n },\n ref,\n) {\n const [copied, setCopied] = useState(false);\n const timer = useRef<number>();\n\n useEffect(() => () => window.clearTimeout(timer.current), []);\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n const write = navigator.clipboard?.writeText(value);\n if (!write) return;\n write.then(\n () => {\n setCopied(true);\n onCopy?.();\n window.clearTimeout(timer.current);\n timer.current = window.setTimeout(() => setCopied(false), timeout);\n },\n () => setCopied(false),\n );\n };\n\n const currentIcon = copied ? (copiedIcon ?? icon) : icon;\n const currentLabel = copied ? copiedLabel : label;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={currentLabel}\n className={cn(styles.copyButton, copied && styles.copied, className)}\n onClick={handleClick}\n {...props}\n >\n {currentIcon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {currentIcon}\n </span>\n )}\n <span>{currentLabel}</span>\n </button>\n );\n});\n","import { type CSSProperties, type HTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Skeleton } from '../skeleton';\nimport styles from './data-table.module.scss';\n\nexport type DataTableAlign = 'left' | 'center' | 'right';\n\nexport interface DataTableColumn<T> {\n key: string;\n header: ReactNode;\n cell: (row: T) => ReactNode;\n width?: number | string;\n align?: DataTableAlign;\n}\n\nexport interface DataTableProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n data: T[];\n columns: DataTableColumn<T>[];\n keyExtractor: (row: T) => string;\n striped?: boolean;\n hoverable?: boolean;\n compact?: boolean;\n loading?: boolean;\n loadingRows?: number;\n emptyMessage?: ReactNode;\n caption?: ReactNode;\n rowClassName?: string | ((row: T) => string);\n onRowClick?: (row: T) => void;\n}\n\nexport function DataTable<T>({\n data,\n columns,\n keyExtractor,\n striped = true,\n hoverable = true,\n compact = false,\n loading = false,\n loadingRows = 3,\n emptyMessage = 'No data',\n caption,\n rowClassName,\n onRowClick,\n className,\n ...props\n}: DataTableProps<T>) {\n const alignClass = (align?: DataTableAlign) => (align ? styles[align] : undefined);\n const placeholders = useMemo(\n () => Array.from({ length: loadingRows }, (_, index) => `fui-data-table-loading-${index}`),\n [loadingRows],\n );\n\n return (\n <div className={cn(styles.wrapper, className)} {...props}>\n <table className={cn(styles.table, compact && styles.compact)}>\n {caption != null && <caption className={styles.caption}>{caption}</caption>}\n <thead className={styles.head}>\n <tr>\n {columns.map((column) => (\n <th\n key={column.key}\n scope=\"col\"\n className={cn(styles.th, alignClass(column.align))}\n style={{ width: column.width } as CSSProperties}\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading &&\n placeholders.map((placeholder) => (\n <tr key={placeholder} className={styles.row}>\n {columns.map((column) => (\n <td key={column.key} className={cn(styles.td, alignClass(column.align))}>\n <Skeleton width=\"70%\" />\n </td>\n ))}\n </tr>\n ))}\n {!loading && data.length === 0 && (\n <tr className={styles.row}>\n <td colSpan={columns.length} className={styles.empty}>\n {emptyMessage}\n </td>\n </tr>\n )}\n {!loading &&\n data.map((row, index) => {\n const rowKey = keyExtractor(row);\n return (\n <tr\n key={rowKey}\n className={cn(\n styles.row,\n striped && index % 2 === 1 && styles.striped,\n hoverable && styles.hoverable,\n onRowClick && styles.clickable,\n typeof rowClassName === 'function' ? rowClassName(row) : rowClassName,\n )}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n onKeyDown={\n onRowClick\n ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onRowClick(row);\n }\n }\n : undefined\n }\n >\n {columns.map((column) => (\n <td\n key={`${rowKey}-${column.key}`}\n className={cn(styles.td, alignClass(column.align))}\n >\n {column.cell(row)}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './breadcrumb.module.scss';\n\nexport interface BreadcrumbItem {\n label: ReactNode;\n href?: string;\n onClick?: () => void;\n current?: boolean;\n}\n\nexport interface BreadcrumbProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n items: BreadcrumbItem[];\n separator?: ReactNode;\n}\n\nfunction BreadcrumbNode({ item, current }: { item: BreadcrumbItem; current: boolean }) {\n if (current) {\n return (\n <span className={styles.current} aria-current=\"page\">\n {item.label}\n </span>\n );\n }\n if (item.href) {\n return (\n <a className={styles.link} href={item.href} onClick={item.onClick}>\n {item.label}\n </a>\n );\n }\n if (item.onClick) {\n return (\n <button type=\"button\" className={styles.link} onClick={item.onClick}>\n {item.label}\n </button>\n );\n }\n return <span className={styles.link}>{item.label}</span>;\n}\n\nexport function Breadcrumb({ items, separator = '/', className, ...props }: BreadcrumbProps) {\n const seen = new Map<string, number>();\n\n return (\n <nav aria-label=\"Breadcrumb\" className={cn(styles.breadcrumb, className)} {...props}>\n <ol className={styles.list}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const current = item.current ?? isLast;\n const base = item.href ?? (typeof item.label === 'string' ? item.label : '');\n const occurrence = seen.get(base) ?? 0;\n seen.set(base, occurrence + 1);\n\n return (\n <li key={`${base} ${occurrence}`} className={styles.item}>\n <BreadcrumbNode item={item} current={current} />\n {!isLast && (\n <span className={styles.separator} aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import { type KeyboardEvent, type ReactNode, useEffect, useId, useRef, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './menu.module.scss';\n\nexport interface MenuItem {\n label: ReactNode;\n onSelect?: () => void;\n icon?: ReactNode;\n disabled?: boolean;\n danger?: boolean;\n selected?: boolean;\n}\n\nexport interface MenuSeparator {\n separator: true;\n}\n\nexport type MenuEntry = MenuItem | MenuSeparator;\n\nexport interface MenuProps {\n trigger: ReactNode;\n items: MenuEntry[];\n triggerLabel?: string;\n align?: 'start' | 'end';\n className?: string;\n}\n\nfunction isSeparator(entry: MenuEntry): entry is MenuSeparator {\n return 'separator' in entry;\n}\n\nfunction isSelectable(entry: MenuEntry): entry is MenuItem {\n return !isSeparator(entry) && !entry.disabled;\n}\n\nexport function Menu({ trigger, items, triggerLabel, align = 'start', className }: MenuProps) {\n const uid = useId();\n const triggerId = `fui-menu-trigger-${uid}`;\n const menuId = `fui-menu-${uid}`;\n const itemId = (index: number) => `${menuId}-item-${index}`;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const firstEnabled = () => items.findIndex(isSelectable);\n const lastEnabled = () => {\n for (let i = items.length - 1; i >= 0; i--) if (isSelectable(items[i])) return i;\n return -1;\n };\n const nextEnabled = (from: number) => {\n for (let i = from + 1; i < items.length; i++) if (isSelectable(items[i])) return i;\n return from;\n };\n const prevEnabled = (from: number) => {\n for (let i = from - 1; i >= 0; i--) if (isSelectable(items[i])) return i;\n return from;\n };\n\n useEffect(() => {\n if (open) listRef.current?.focus();\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const onPointer = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) setOpen(false);\n };\n window.addEventListener('pointerdown', onPointer);\n return () => window.removeEventListener('pointerdown', onPointer);\n }, [open]);\n\n const openMenu = (index: number) => {\n setActiveIndex(index);\n setOpen(true);\n };\n\n const close = (focusTrigger = true) => {\n setOpen(false);\n if (focusTrigger) triggerRef.current?.focus();\n };\n\n const select = (index: number) => {\n const item = items[index];\n if (!item || !isSelectable(item)) return;\n item.onSelect?.();\n close();\n };\n\n const onTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!open) openMenu(firstEnabled());\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!open) openMenu(lastEnabled());\n break;\n }\n };\n\n const onMenuKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n setActiveIndex((i) => nextEnabled(i));\n break;\n case 'ArrowUp':\n event.preventDefault();\n setActiveIndex((i) => prevEnabled(i));\n break;\n case 'Home':\n event.preventDefault();\n setActiveIndex(firstEnabled());\n break;\n case 'End':\n event.preventDefault();\n setActiveIndex(lastEnabled());\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (activeIndex >= 0) select(activeIndex);\n break;\n case 'Escape':\n event.preventDefault();\n close();\n break;\n case 'Tab':\n setOpen(false);\n break;\n }\n };\n\n return (\n <div ref={rootRef} className={cn(styles.menu, className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n id={triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n aria-label={triggerLabel}\n className={styles.trigger}\n onClick={() => (open ? close() : openMenu(firstEnabled()))}\n onKeyDown={onTriggerKeyDown}\n >\n {trigger}\n </button>\n {open && (\n <div\n ref={listRef}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n aria-activedescendant={activeIndex >= 0 ? itemId(activeIndex) : undefined}\n tabIndex={-1}\n className={cn(styles.list, styles[align])}\n onKeyDown={onMenuKeyDown}\n >\n {items.map((item, index) =>\n isSeparator(item) ? (\n <hr key={itemId(index)} className={styles.separator} />\n ) : (\n <button\n key={itemId(index)}\n type=\"button\"\n id={itemId(index)}\n role={item.selected == null ? 'menuitem' : 'menuitemradio'}\n aria-checked={item.selected}\n tabIndex={-1}\n disabled={item.disabled}\n className={cn(\n styles.item,\n item.danger && styles.danger,\n item.selected && styles.selected,\n index === activeIndex && styles.active,\n )}\n onPointerMove={() => !item.disabled && setActiveIndex(index)}\n onClick={() => select(index)}\n >\n {item.icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n ),\n )}\n </div>\n )}\n </div>\n );\n}\n","import { type InputHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './file-button.module.scss';\n\nexport interface FileButtonProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'children'> {\n onFiles: (files: FileList) => void;\n icon?: ReactNode;\n children: ReactNode;\n}\n\nexport const FileButton = forwardRef<HTMLInputElement, FileButtonProps>(function FileButton(\n { onFiles, icon, children, disabled, className, ...props },\n ref,\n) {\n return (\n <label className={cn(styles.fileButton, disabled && styles.disabled, className)}>\n <input\n ref={ref}\n type=\"file\"\n className={styles.input}\n disabled={disabled}\n onChange={(event) => {\n const { files } = event.target;\n if (files && files.length > 0) onFiles(files);\n }}\n {...props}\n />\n {icon && (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {children}\n </label>\n );\n});\n","import type { ReactNode, SVGProps } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './icon.module.scss';\n\nexport type IconName =\n | 'close'\n | 'check'\n | 'copy'\n | 'plus'\n | 'folder'\n | 'lightbulb'\n | 'chevron-up'\n | 'chevron-down'\n | 'chevron-left'\n | 'chevron-right'\n | 'play'\n | 'flag'\n | 'sort-asc'\n | 'sort-desc'\n | 'refresh'\n | 'more'\n | 'wand'\n | 'merge'\n | 'push'\n | 'pull'\n | 'shuffle'\n | 'commit'\n | 'github'\n | 'note';\n\nexport interface IconProps extends Omit<SVGProps<SVGSVGElement>, 'name' | 'children'> {\n name: IconName;\n size?: number | string;\n title?: string;\n}\n\nconst paths: Record<IconName, ReactNode> = {\n close: <path d=\"M6 6l12 12M18 6L6 18\" />,\n check: <path d=\"M5 13l4 4L19 7\" />,\n copy: (\n <>\n <rect x=\"8\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\" />\n <path d=\"M16 8V6a2 2 0 00-2-2H6a2 2 0 00-2 2v8a2 2 0 002 2h2\" />\n </>\n ),\n plus: <path d=\"M12 5v14M5 12h14\" />,\n folder: <path d=\"M3 6a2 2 0 012-2h4l2 2h8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2V6z\" />,\n lightbulb: (\n <>\n <path d=\"M9 18h6\" />\n <path d=\"M10 21h4\" />\n <path d=\"M12 3a6 6 0 00-4 10.5c.7.7 1 1.5 1 2.5h6c0-1 .3-1.8 1-2.5A6 6 0 0012 3z\" />\n </>\n ),\n 'chevron-up': <path d=\"M6 15l6-6 6 6\" />,\n 'chevron-down': <path d=\"M6 9l6 6 6-6\" />,\n 'chevron-left': <path d=\"M15 6l-6 6 6 6\" />,\n 'chevron-right': <path d=\"M9 6l6 6-6 6\" />,\n play: <path d=\"M8 5v14l11-7z\" />,\n flag: (\n <>\n <path d=\"M5 21V4\" />\n <path d=\"M5 4h11l-2 4 2 4H5\" />\n </>\n ),\n 'sort-asc': (\n <>\n <path d=\"M12 5v14\" />\n <path d=\"M8 9l4-4 4 4\" />\n </>\n ),\n 'sort-desc': (\n <>\n <path d=\"M12 5v14\" />\n <path d=\"M8 15l4 4 4-4\" />\n </>\n ),\n refresh: (\n <>\n <path d=\"M3 12a9 9 0 019-9 9 9 0 016.7 3L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 01-9 9 9 9 0 01-6.7-3L3 16\" />\n <path d=\"M3 21v-5h5\" />\n </>\n ),\n more: (\n <>\n <circle cx=\"5\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n wand: (\n <>\n <path d=\"M3 21l12-12\" />\n <path d=\"M12.5 6.5l5 5\" />\n <path d=\"M18 3v4M16 5h4\" />\n </>\n ),\n merge: (\n <>\n <circle cx=\"6\" cy=\"6\" r=\"3\" />\n <circle cx=\"18\" cy=\"18\" r=\"3\" />\n <path d=\"M6 9v12\" />\n <path d=\"M6 9a9 9 0 009 9\" />\n </>\n ),\n push: (\n <>\n <path d=\"M5 4h14\" />\n <path d=\"M12 19V8\" />\n <path d=\"M7 13l5-5 5 5\" />\n </>\n ),\n pull: (\n <>\n <path d=\"M5 20h14\" />\n <path d=\"M12 5v11\" />\n <path d=\"M7 11l5 5 5-5\" />\n </>\n ),\n shuffle: (\n <>\n <path d=\"M16 3h5v5\" />\n <path d=\"M4 20L21 3\" />\n <path d=\"M21 16v5h-5\" />\n <path d=\"M15 15l6 6\" />\n <path d=\"M4 4l5 5\" />\n </>\n ),\n commit: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M2 12h6\" />\n <path d=\"M16 12h6\" />\n </>\n ),\n github: (\n <path\n fill=\"currentColor\"\n stroke=\"none\"\n d=\"M12 .5C5.37.5 0 5.78 0 12.29c0 5.2 3.44 9.6 8.2 11.16.6.1.82-.25.82-.56v-2c-3.34.72-4.04-1.6-4.04-1.6-.55-1.37-1.34-1.74-1.34-1.74-1.1-.74.08-.73.08-.73 1.2.08 1.84 1.22 1.84 1.22 1.07 1.8 2.8 1.29 3.5.98.1-.77.42-1.3.76-1.6-2.67-.3-5.47-1.31-5.47-5.83 0-1.29.47-2.34 1.24-3.17-.13-.3-.54-1.52.12-3.17 0 0 1.01-.32 3.3 1.21a11.5 11.5 0 016 0c2.28-1.53 3.29-1.21 3.29-1.21.66 1.65.25 2.87.12 3.17.77.83 1.24 1.88 1.24 3.17 0 4.53-2.81 5.53-5.49 5.82.43.37.81 1.1.81 2.22v3.29c0 .32.21.68.82.56A12.02 12.02 0 0024 12.29C24 5.78 18.63.5 12 .5z\"\n />\n ),\n note: (\n <>\n <path d=\"M6 3h9l4 4v13a1 1 0 01-1 1H6a1 1 0 01-1-1V4a1 1 0 011-1z\" />\n <path d=\"M14 3v5h5\" />\n <path d=\"M9 13h6M9 17h6\" />\n </>\n ),\n};\n\nexport function Icon({ name, size = 24, title, className, ...props }: IconProps) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n aria-label={title}\n className={cn(styles.icon, className)}\n {...props}\n >\n {title && <title>{title}</title>}\n {paths[name]}\n </svg>\n );\n}\n"],"names":["cn","inputs","twMerge","clsx","Grain","opacity","className","style","props","vars","jsx","styles","mulberry32","seed","a","t","blobPath","rng","cx","cy","r","vertices","irregularity","squashX","squashY","phase","pts","i","angle","radius","d","p0","p1","p2","p3","c1x","c1y","c2x","c2y","generateLamp","count","blobs","dur","wobbleDur","peak","depthCount","depthBlobs","Glow","uid","useId","goo","gooSoft","clip","grad","fallbackSeed","useState","useMemo","renderWax","configs","b","jsxs","Backdrop","grain","glow","children","Glass","forwardRef","blur","ref","Button","variant","size","fullWidth","icon","iconRight","isActive","IconButton","label","LampButton","tone","rounded","disabled","litTone","LampIconButton","LampSwitch","id","inputId","STATES","LampStatus","status","state","LampMeter","value","max","lampCount","showValue","clamped","fraction","percent","litLamps","fullLamps","partialLamp","lamps","_","index","lamp","partial","LinkButton","color","Stamp","dot","fillColor","textColor","onClick","Tag","colorOverrides","GAP","EDGE","composeHandlers","theirs","ours","event","Tooltip","content","placement","delay","open","setOpen","coords","setCoords","bubbleRef","useRef","rectRef","timer","hide","useCallback","useEffect","onKey","e","useLayoutEffect","rect","bubble","top","left","child","Children","childProps","showNow","el","trigger","cloneElement","Fragment","createPortal","ToastContext","createContext","ToastProvider","position","defaultDuration","toasts","setToasts","timers","counter","dismiss","current","handle","toast","options","duration","pending","useToast","ctx","useContext","activateOnEnterOrSpace","CardRoot","interactive","Title","Body","Card","Input","helperText","error","messageId","invalid","message","Textarea","Select","defaultValue","onChange","placeholder","name","required","selectId","listId","optionId","isControlled","internalValue","setInternalValue","currentValue","activeIndex","setActiveIndex","rootRef","triggerRef","selectedIndex","o","selectedOption","firstEnabled","lastEnabled","nextEnabled","from","prevEnabled","onPointer","_a","openList","commit","next","onKeyDown","option","Checkbox","Radio","RadioGroup","legend","orientation","groupName","Switch","focusableSelector","ModalRoot","onClose","title","titleId","panelRef","previouslyFocused","onCloseRef","focusables","_b","first","last","previousOverflow","ModalBody","ModalFooter","ModalError","Modal","DrawerRoot","side","DrawerBody","DrawerFooter","Drawer","ListItem","active","action","icons","Alert","dismissible","onDismiss","Divider","Spinner","Progress","height","fill","Slider","min","step","length","formatValue","vertical","track","CircularProgress","strokeWidth","indeterminate","circumference","dash","Skeleton","width","roles","EmptyState","description","visual","StatusDot","pulse","Chip","selected","onToggle","SegmentedControl","Tabs","items","activation","tablistLabel","tabId","item","panelId","internal","setInternal","activeItem","tabRefs","select","delta","edge","back","found","focusTab","prevKey","nextKey","node","Kbd","InlineCode","markers","CodeBlock","code","lines","filename","copyable","copied","setCopied","resolved","rawText","line","hasDiff","copy","write","seen","keyed","base","occurrence","key","CopyButton","copiedLabel","copiedIcon","timeout","onCopy","handleClick","currentIcon","currentLabel","DataTable","data","columns","keyExtractor","striped","hoverable","compact","loading","loadingRows","emptyMessage","caption","rowClassName","onRowClick","alignClass","align","placeholders","column","row","rowKey","BreadcrumbNode","Breadcrumb","separator","isLast","isSeparator","entry","isSelectable","Menu","triggerLabel","triggerId","menuId","itemId","listRef","openMenu","close","focusTrigger","onTriggerKeyDown","onMenuKeyDown","FileButton","onFiles","files","paths","Icon"],"mappings":"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"}
|